|
|
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: 6800 (0x1a90)
Types: TextFile
Names: »STAMP.ASM«
└─⟦31b8a9b6a⟧ Bits:30005199 8" Zilog MCZ/1 Floppy CR80FD_0025 ( TC 500 SEC. PROTOCOL BB V2 830407 NCJ )
└─⟦this⟧ »STAMP.ASM«
└─⟦cf416a62a⟧ Bits:30005201 8" Zilog MCZ/1 Floppy CR80FD_0027 ( TC 500 SEC. PROTOCOL BACK UP! (V2) BB SEC 821119 NCJ )
└─⟦this⟧ »STAMP.ASM«
;*****************************************************************************
;*
;* STAMP MODULE
;*
;*****************************************************************************
*INCLUDE PLZ.MACROS
STAMP MODULE
CONSTANT
ERR0_OFFSET := 23
REM0_NO_LOOPS := 33
TIME0_STAMP := 37
ACC0_TIME := 41
OVFERR := 32H
EXTERNAL
STIME1
STIME2
STIME3
STIME4
INTERNAL
REG1,REG2 WORD
GLOBAL
MIN1TIM WORD := 0000H
MAX1TIM WORD := 0000H
MIN2TIM WORD := 0000H
MAX2TIM WORD := 0000H
MIN3TIM WORD := 0000H
MAX3TIM WORD := 0000H
MIN4TIM WORD := 0000H
MAX4TIM WORD := 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
ENTRY
PLZVAR
PLZIN BUF1_PTR,CH1_NO
ENT 0
GETBYTE A,CH1_NO
DI
IF A
CASE 1 THEN
LD DE,(STIME1)
CASE 2 THEN
LD DE,(STIME2)
CASE 3 THEN
LD DE,(STIME3)
CASE 4 THEN
LD DE,(STIME4)
FI
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
ADDROU PROCEDURE
ENTRY
INC DE
LD A,(DE)
SUB 30H
ADD1: JR Z,ADD2
ADD HL,BC
DEC A
JR ADD1
ADD2:
END ADDROU
;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
ENTRY
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
LD HL,(STIME1)
CASE 2 THEN
LD HL,(STIME2)
CASE 3 THEN
LD HL,(STIME3)
CASE 4 THEN
LD HL,(STIME4)
FI
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
;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
ENTRY
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
;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
ENTRY
GETBYTE A,CH2_NO
PUSH IX
IF A
CASE 1 THEN
LD HL,MIN1TIM
CASE 2 THEN
LD HL,MIN2TIM
CASE 3 THEN
LD HL,MIN3TIM
CASE 4 THEN
LD HL,MIN4TIM
FI
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
;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
ENTRY
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
END STAMP
;ECHO \f