|
|
DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 8140 (0x1fcc)
Types: TextFile
Names: »STAMP.S«
└─⟦31b8a9b6a⟧ Bits:30005199 8" Zilog MCZ/1 Floppy CR80FD_0025 ( TC 500 SEC. PROTOCOL BB V2 830407 NCJ )
└─⟦this⟧ »STAMP.S«
└─⟦cf416a62a⟧ Bits:30005201 8" Zilog MCZ/1 Floppy CR80FD_0027 ( TC 500 SEC. PROTOCOL BACK UP! (V2) BB SEC 821119 NCJ )
└─⟦this⟧ »STAMP.S«
;;*****************************************************************************
;;*
;;* STAMP MODULE
;;*
;;*****************************************************************************
*INCLUDE PLZ.MACROS
;STAMP MODULE
;
;CONSTANT
; ERR0_OFFSET := 23
ERR0_OFFSET EQU 23
; REM0_NO_LOOPS := 33
REM0_NO_LOOPS EQU 33
; TIME0_STAMP := 37
TIME0_STAMP EQU 37
; ACC0_TIME := 41
ACC0_TIME EQU 41
; OVFERR := 32H
OVFERR EQU 32H
;
;EXTERNAL
; STIME1
; STIME2
; STIME3
; STIME4
;
;INTERNAL
EXTERNAL STIME4,STIME3,STIME2,STIME1
; REG1,REG2 WORD
;
;GLOBAL
REG1 DEFS 0002H
REG2 DEFS 0002H
; MIN1TIM WORD := 0000H
GLOBAL MIN1TIM
MIN1TIM DEFW 0000H
; MAX1TIM WORD := 0000H
GLOBAL MAX1TIM
MAX1TIM DEFW 0000H
;
; MIN2TIM WORD := 0000H
GLOBAL MIN2TIM
MIN2TIM DEFW 0000H
; MAX2TIM WORD := 0000H
GLOBAL MAX2TIM
MAX2TIM DEFW 0000H
;
; MIN3TIM WORD := 0000H
GLOBAL MIN3TIM
MIN3TIM DEFW 0000H
; MAX3TIM WORD := 0000H
GLOBAL MAX3TIM
MAX3TIM DEFW 0000H
;
; MIN4TIM WORD := 0000H
GLOBAL MIN4TIM
MIN4TIM DEFW 0000H
; MAX4TIM WORD := 0000H
GLOBAL MAX4TIM
MAX4TIM DEFW 0000H
;;ECHO \f
;;******************************************************************************
;;* PROCEDURE : STAMP
;;*
;;* FUNCTION : THE CURRENT BINARY TIMER VALUE IS CONVERTED TO ASCII BCD CODE
;;* AND TRANSFERRED TO THE STAMP FIELD IN BUFFER
;;*
;;* INPUTS : BUF_PTR : POINTER TO BUFFER
;;* CH_NO : NO. OF CHANNEL
;;*
;;* OUTPUTS : NONE
;;*****************************************************************************
;
; STAMP PROCEDURE
GLOBAL STAMP
; ENTRY
STAMP:
PLZVAR
PLZIN BUF1_PTR,CH1_NO
ENT 0
GETBYTE A,CH1_NO
DI
; IF A
; CASE 1 THEN
CP 1
JR Z,BC01
JP EC01
BC01:
LD DE,(STIME1)
; CASE 2 THEN
JP FI00
EC01:
CP 2
JR Z,BC02
JP EC02
BC02:
LD DE,(STIME2)
; CASE 3 THEN
JP FI00
EC02:
CP 3
JR Z,BC03
JP EC03
BC03:
LD DE,(STIME3)
; CASE 4 THEN
JP FI00
EC03:
CP 4
JR Z,BC04
JP EC04
BC04:
LD DE,(STIME4)
; FI
EC04:
FI00:
EI
;
CALL BINBCD ;CONVERT TIMER VALUE TO BCD CODE
;
GETWORD H L,BUF1_PTR
LD DE,TIME0_STAMP+10
ADD HL,DE ;ADDRESS OF TIME STAMPING IN BUFFER
LD DE,REG1
LD C,4
ST1:
LD A,(DE)
ADD A,30H
LD (HL),A ;TIME STAMP BUFFER IN ASCII BCD CODE
INC HL
INC DE
DEC C
JR NZ,ST1
;
RTN 2
; END STAMP
RET
;
; ADDROU PROCEDURE
GLOBAL ADDROU
; ENTRY
ADDROU:
INC DE
LD A,(DE)
SUB 30H
ADD1:
JR Z,ADD2
ADD HL,BC
DEC A
JR ADD1
ADD2:
;
; END ADDROU
RET
;;ECHO \f
;;******************************************************************************
;;* PROCEDURE : ACCUM
;;*
;;* FUNCTION : THE TIME, THE BUFFER HAS SPENT OUTSIDE THE LTU, IS CALCULATED
;;* AND ADDED TO THE CURRENT ACCUMULATION TIME IN THE ACCUMULA-
;;* TION FIELD IN BUFFER
;;*
;;* INPUTS : BUF_PTR : POINTER TO BUFFER
;;*
;;* OUTPUTS : NONE
;;*****************************************************************************
; ACCUM PROCEDURE
GLOBAL ACCUM
; ENTRY
ACCUM:
PLZVAR
PLZIN BUF2_PTR,CH2_NO
ENT 0
GETWORD H L,BUF2_PTR
LD BC,TIME0_STAMP+10
ADD HL,BC
EX DE,HL ;(DE) = ADDRESS OF TIME STAMPING IN BUFFER
LD HL,0 :CLEAR CURRENT SUM
;
LD A,(DE)
SUB 30H
LD L,A ;ADD UNITS
LD BC,10
CALL ADDROU ;ADD TENS
LD BC,100
CALL ADDROU ;ADD HUNDREDS
LD BC,1000
CALL ADDROU ;ADD THOUSANDS
LD C,L
LD B,H
;
GETBYTE A,CH2_NO
DI
; IF A
; CASE 1 THEN
CP 1
JR Z,BC06
JP EC06
BC06:
LD HL,(STIME1)
; CASE 2 THEN
JP FI05
EC06:
CP 2
JR Z,BC07
JP EC07
BC07:
LD HL,(STIME2)
; CASE 3 THEN
JP FI05
EC07:
CP 3
JR Z,BC08
JP EC08
BC08:
LD HL,(STIME3)
; CASE 4 THEN
JP FI05
EC08:
CP 4
JR Z,BC09
JP EC09
BC09:
LD HL,(STIME4)
; FI
EC09:
FI05:
EI
;
XOR A
SBC HL,BC ;MAKE TIME DIFFERENCE
LD A,H
AND 1FH ;MASK OUT IRRELEVANT BITS
LD H,A
EX DE,HL ;SAVE TIME DIFFERENCE
;
CALL MINMAX ;UPDATE MAX. AND MIN.VALUES
;
CALL BINBCD ;CONVERT TIME DIFFERENCE TO BCD CODE
;
GETWORD H L,BUF2_PTR
LD BC,ACC0_TIME+10
ADD HL,BC
EX DE,HL ;(DE) = ADDRESS OF ACCUMULATION TIME IN BUFFER
LD HL,REG1
LD BC,3004H
XOR A
;
ACC1:
LD A,(DE)
RL C
SUB B
RR C
ADC A,(HL)
DAA
PUSH AF
OR B
LD (DE),A
INC HL
INC DE
POP AF
RLA
RLA
RLA
RLA
RES 7,C
DEC C
JR NZ,ACC1
;
JR NC,ACC2
GETWORD H L,BUF2_PTR
LD BC,ERR0_OFFSET+10
ADD HL,BC
LD A,OVFERR
LD (HL),A
ACC2:
;
RTN 2
; END ACCUM
RET
;;ECHO \f
;;*****************************************************************************
;;* PROCEDURE NAME : BINBCD
;;*
;;* FUNCTION : CONVERTS FROM BINARY TO BCD
;;*
;;* INVOCATION : CALL BINBCD
;;*
;;* INPUTS : (DE) = BINARY VALUE
;;*
;;* OUTPUTS : (REG1,REG2) = BCD VALUE
;;****************************************************************************
;
; BINBCD PROCEDURE
GLOBAL BINBCD
; ENTRY
BINBCD:
PUSH IX
LD HL,0
LD (REG1),HL ;CLEAR TEMPORARY REGISTER
LD (REG2),HL
;
LD IX,REG1
EX DE,HL
XOR A
;
LD BC,1000
BIN1:
SBC HL,BC
JR C,BIN2
INC (IX+3) ;COUNT BCD(THOUSANDS)
JR BIN1
BIN2:
ADD HL,BC
CCF
;
LD BC,100
BIN3:
SBC HL,BC
JR C,BIN4
INC (IX+2) ;COUNT BCD(HUNDREDS)
JR BIN3
BIN4:
ADD HL,BC
CCF
;
LD BC,10
BIN5:
SBC HL,BC
JR C,BIN6
INC (IX+1) ;COUNT BCD(TENS)
JR BIN5
BIN6:
ADD HL,BC
;
LD (IX),L ;UPDATE BCD(UNITS)
;
POP IX
; END BINBCD
RET
;;ECHO \f
;;******************************************************************************
;;* PROCEDURE NAME : MINMAX
;;*
;;* FUNCTION : MINIMUM AND MAXIMUM TIME SPENT OUTSIDE THE LTU
;;* IS UPDATED IF ANY CHANGES
;;*
;;* INVOCATION : CALL MINMAX
;;*
;;* INPUTS : (DE) = TIME VALUE
;;*****************************************************************************
;
; MINMAX PROCEDURE
GLOBAL MINMAX
; ENTRY
MINMAX:
GETBYTE A,CH2_NO
PUSH IX
; IF A
; CASE 1 THEN
CP 1
JR Z,BC0B
JP EC0B
BC0B:
LD HL,MIN1TIM
; CASE 2 THEN
JP FI0A
EC0B:
CP 2
JR Z,BC0C
JP EC0C
BC0C:
LD HL,MIN2TIM
; CASE 3 THEN
JP FI0A
EC0C:
CP 3
JR Z,BC0D
JP EC0D
BC0D:
LD HL,MIN3TIM
; CASE 4 THEN
JP FI0A
EC0D:
CP 4
JR Z,BC0E
JP EC0E
BC0E:
LD HL,MIN4TIM
; FI
EC0E:
FI0A:
PUSH HL
POP IX
LD BC,0
LD L,(IX)
LD H,(IX+1)
XOR A
SBC HL,BC
JR Z,MIN1
SBC HL,DE
JR C,MAX1 ; IF CURRENT VALUE =< MIN.VALUE THEN
MIN1:
LD (IX),E ; UPDATE MINIMUM VALUE
LD (IX+1),D ;
MAX1:
LD L,(IX+2)
LD H,(IX+3)
XOR A
SBC HL,DE
JR NC,MAX2 ; IF CURRENT VALUE > MAX.VALUE THEN
LD (IX+2),E ; UPDATE MAXIMUM VALUE
LD (IX+3),D ;
MAX2:
;
POP IX
; END MINMAX
RET
;;ECHO \f
;;***************************************************************************
;;* PROCEDURE : DECREM
;;*
;;* FUNCTION : THE REMAINING_NO_OF_LOOPS FIELD IN THE BUFFER IS DECREMEN-
;;* TED AND IF ZERO, THIS WILL BE INDICATED
;;*
;;* INPUTS : BUF_PTR : POINTER TO BUFFER
;;*
;;* OUTPUTS : STATUS : ZERO INDICATION
;;* STATUS = 00H : REM_NO_OF_LOOPS = 0
;;* STATUS = 31H : REM_NO_OF_LOOPS > 0
;;***************************************************************************
; DECREM PROCEDURE
GLOBAL DECREM
; ENTRY
DECREM:
PLZVAR
PLZIN BUF3_PTR
PLZOUT STATUS
ENT 0
GETWORD H L,BUF3_PTR
LD BC,REM0_NO_LOOPS+10
ADD HL,BC
PUSH HL
;
LD C,4
DEC1:
DEC (HL)
LD A,2FH
CP (HL)
JR C,DEC2
LD (HL),39H
INC HL
DEC C
JR NZ,DEC1
;
DEC2:
POP HL
LD A,30H
LD C,4
DEC3:
CP (HL)
JR NZ,DEC4
INC HL
DEC C
JR NZ,DEC3
;
XOR A
JR DEC5
DEC4:
INC A
DEC5:
PUTBYTE STATUS, A
;
RTN 1
; END DECREM
RET
;
;END STAMP
END
«eof»