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

⟦312490745⟧ TextFile

    Length: 8140 (0x1fcc)
    Types: TextFile
    Names: »STAMP.S«

Derivation

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

TextFile

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