DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Hard and Floppy Disks

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CR80 Hard and Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦910bba15a⟧ TextFile

    Length: 6800 (0x1a90)
    Types: TextFile
    Names: »STAMP.ASM«

Derivation

└─⟦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« 

TextFile

;*****************************************************************************
;*
;*			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