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