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 - 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»