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

⟦09ef7e62b⟧ TextFile

    Length: 8376 (0x20b8)
    Types: TextFile
    Names: »BUFFER.ASM«

Derivation

└─⟦31b8a9b6a⟧ Bits:30005199 8" Zilog MCZ/1 Floppy CR80FD_0025 ( TC 500 SEC. PROTOCOL BB V2 830407 NCJ )
    └─ ⟦this⟧ »BUFFER.ASM« 
└─⟦cf416a62a⟧ Bits:30005201 8" Zilog MCZ/1 Floppy CR80FD_0027 ( TC 500 SEC. PROTOCOL BACK UP! (V2) BB SEC 821119 NCJ )
    └─ ⟦this⟧ »BUFFER.ASM« 

TextFile

;*****************************************************************************
;*
;*		BUFFER_GENERATOR  MODULE
;*
;*****************************************************************************
*INCLUDE PLZ.MACROS
BUFFER MODULE
CONSTANT
   EOT          := 4
   POL		:= 70H
   ENQ		:= 05H
   LNDIPT	:= 51H
   SOH          := 01
   STX          := 02
   ETX          := 03
   OK		:= 0
   EOT_INDICATION := 4000H
   DATA_OFFSET	:= 0
 
GLOBAL
;ECHO \f


;**************************************************************************
;* PROCEDURE	: LHROUT
;*
;* FUNCTION	: REFORMATS BUFFER FROM INPUT_FROM_CR80 TO OUTPUT_TO_LINE
;*		  FORMAT
;*
;* INPUTS	: BUF_PTR : POINTER TO DATA BUFFER
;*
;* OUTPUTS	: NONE
;*
;* FORMATS:             LHR:          LINEOUT:
;*                  ------------    ------------
;*                  -          -    -          -
;*                  -          -    -          -
;*                  -          -    -          -
;*                  -          -    -          -
;*                  -          -    -          -
;*                  - OPCODE   -    -          -
;*                  - LINE_NO  -    -          -
;*                  -   AD2    -    -          -
;*                  -   AD1    -    -          -
;*                  - NOT USED -    -   SOH    -
;*                  - NOT USED -    -   AD1    -
;*                  - NOT USED -    -   AD2    -
;*                  - NOT USED -    -   STX    -
;*                  -    D1    -    -    D1    -
;*                  -    D2    -    -    D2    -
;*
;**************************************************************************
   LHROUT PROCEDURE
   ENTRY
	PLZVAR
	PLZIN	BUF1_PTR
	ENT	0
	GETWORD H L, BUF1_PTR
	PUSH	HL
	LD	BC,11H
	ADD	HL,BC
	LD	B,(HL)
	INC	HL
	LD	C,(HL)
	INC	HL
	LD	(HL),SOH	; DATA[09] := SOH
	INC	HL
	LD	(HL),C		; DATA[10] := AD1
	INC	HL
	LD	(HL),B		; DATA[11] := AD2
	INC	HL
	LD	(HL),STX	; DATA[12] := STX
	POP	HL
	PUSH	HL
	PUSH	HL
	INC	HL
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	POP	HL
	ADD	HL,DE
	PUSH	HL
	POP	IY
	LD	C,ETX
	LD	(IY+0FH),C	; INSERT ETX
	DEC	DE
	DEC	DE
	DEC	DE		; BYTECOUNT
	POP	HL		; POINTER TO BUFFER
	LD	BC,OK		; STATUS := OK
	LD	A,9		; DATA_OFFSET := 9
	CALL	BUF_HD		; UPDATE BUFFER_HEAD
	RTN	1
   END LHROUT
 
;ECHO \f


;**************************************************************************
;* PROCEDURE	: OUTLHR
;*
;* FUNCTION	: REFORMATS BUFFER FROM OUTPUT_TO_LINE TO OUTPUT_TO_CR80
;*		  FORMAT
;*
;* INPUTS	: BUF_PTR : POINTER TO DATA BUFFER
;*		  LINE_NO : NO. OF LINE
;*
;* OUTPUTS	: NONE
;*
;* FORMATS:           LINEOUT:          LHR:
;*                  ------------    ------------
;*                  -          -    -          -
;*                  -          -    -  OPCODE  -
;*                  -          -    - LINE_NO  -
;*                  -          -    -   AD2    -
;*                  -          -    -   AD1    -
;*                  -          -    -    0     -
;*                  -          -    -    0     -
;*                  -          -    -    0     -
;*                  -          -    -    0     -
;*                  -   SOH    -    -    0     -
;*                  -   AD1    -    -    0     -
;*                  -   AD2    -    -    0     -
;*                  -   STX    -    -    0     -
;*                  -    D1    -    -    D1    -
;*                  -    D2    -    -    D2    -
;*
;**************************************************************************
   OUTLHR PROCEDURE
   ENTRY
	PLZVAR
	PLZIN	BUF2_PTR,LINE_NO
	ENT	0
	GETWORD H L, BUF2_PTR
	PUSH	HL
	LD	DE,0BH
	ADD	HL,DE
	LD	(HL),LNDIPT	; DATA[01] := OPCODE
	INC	HL
	GETBYTE A,LINE_NO
	LD	(HL),A		; DATA[02] := LINE_NO
	INC	HL
	EX	DE,HL
	POP	HL
	PUSH	HL
	LD	BC,14H
	ADD	HL,BC
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	EX	DE,HL
	LD	(HL),B		; DATA[03] := AD2
	INC	HL
	LD	(HL),C		; DATA[04] := AD1
	LD	A,8		; I := 5
	DO			; DO
	   INC	HL		;
	   LD	(HL),0		;    DATA[I] := 0
	   DEC	A		;    I += 1
	   IF Z THEN EXIT FI	;    IF I = 13 THEN EXIT FI
	OD			; OD
	POP	HL
	PUSH	HL
	INC	HL
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	EX	DE,HL
	LD	DE,7
	ADD	HL,DE
	EX	DE,HL		; BYTECOUNT
	POP	HL		; POINTER TO BUFFER
	LD	BC,EOT_INDICATION
	LD	A,1		; DATA_OFFSET := 1
	CALL	BUF_HD		; UPDATE BUFFER_HEAD
	RTN	2
   END OUTLHR
 
;ECHO \f


;**************************************************************************
;* PROCEDURE	: INOUT
;*
;* FUNCTION	: REFORMATS BUFFER FROM INPUT_FROM_LINE TO OUTPUT_TO_LINE
;*		  FORMAT
;*
;* INPUTS	: BUF_PTR : POINTER TO DATA BUFFER
;*
;* OUTPUTS	: NONE
;*
;* FORMATS:           LINEIN:         LINEOUT:
;*                  ------------    ------------
;*                  -          -    -          -
;*                  -          -    -          -
;*                  -          -    -          -
;*                  -          -    -          -
;*                  -   EOT    -    -          -
;*                  -   AD1    -    -          -
;*                  -   AD2    -    -          -
;*                  -   FSL    -    -          -
;*                  -   SOH    -    -          -
;*                  -   AD1    -    -   SOH    -
;*                  -   AD2    -    -   AD1    -
;*                  -   32H    -    -   AD2    -
;*                  -   STX    -    -   STX    -
;*                  -    D1    -    -    D1    -
;*                  -    D2    -    -    D2    -
;*
;**************************************************************************
   INOUT PROCEDURE
   ENTRY
	PLZVAR
	PLZIN	BUF3_PTR
	ENT	0
	GETWORD H L, BUF3_PTR
	PUSH	HL
	LD	DE,13H
	ADD	HL,DE
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	INC	HL
	LD	(HL),B		; DATA[11] := AD2
	DEC	HL
	LD	(HL),C		; DATA[10] := AD1
	DEC	HL
	LD	(HL),SOH	; DATA[09] := SOH
	POP	HL
	PUSH	HL
	INC	HL
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	DEC	DE
	DEC	DE
	DEC	DE
	DEC	DE
	DEC	DE		; BYTECOUNT
	POP	HL		; POINTER TO BUFFER
	LD	BC,OK		; STATUS := OK
	LD	A,9		; DATA_OFFSET := 9
	CALL	BUF_HD		; UPDATE BUFFER_HEAD
	RTN	1
   END INOUT
 
 
;ECHO \f


;**************************************************************************
;* PROCEDURE	: DLCBUF
;*
;* FUNCTION	: PUTS THE SPECIFIED DATA LINK CHARACTER IN BUFFER
;*
;* INPUTS	: BUF_PTR : POINTER TO DATA BUFFER
;*		  DLC	  : DATA LINK CHARACTER (EOT/ACK/NACK)
;*
;* OUTPUTS	: NONE
;**************************************************************************
   DLCBUF PROCEDURE
   ENTRY
	PLZVAR
	PLZIN	BUF4_PTR,DLC
	ENT	0
	GETWORD	H L,BUF4_PTR
	PUSH	HL
	LD	DE,0AH
	ADD	HL,DE
	GETBYTE	A ,DLC
	LD	(HL),A			; DATA[0] := DLC
	POP	HL
	LD	DE,01			; BYTE_COUNT := 01
	LD	BC,OK			; STATUS := OK
	LD	A,DATA_OFFSET		; DATA_OFFSET := 0
	CALL	BUF_HD			; UPDATE BUFFER_HEAD
	RTN	2
   END DLCBUF
 
;ECHO \f


;******************************************************************************
;* PROCEDURE	: POLENQ
;*
;* FUNCTION	: FORMATS A POLENQ BUFFER
;*
;* INPUTS	: BUF_PTR : POINTER TO BUFFER
;*		  CAD1	  : FIRST BYTE OF CLUSTER ADDRESS
;*		  CAD2	  : SECOND BYTE OF CLUSTER ADDRESS
;*
;* OUTPUTS	: NONE
;****************************************************************************
   POLENQ PROCEDURE
   ENTRY
      PLZVAR
      PLZIN BUF5_PTR,CAD1,CAD2
      ENT 0
      GETWORD H L,BUF5_PTR
      PUSH HL
      LD DE,10
      ADD HL,DE
      GETBYTE A,CAD1
      LD (HL),A			; DATA[0] := CAD1
      INC HL
      GETBYTE A,CAD2
      LD (HL),A			; DATA[1] := CAD2
      INC HL
      LD (HL),POL		; DATA[2] := POL
      INC HL
      LD (HL),ENQ		; DATA[3] := ENQ
      POP HL
      LD DE,4			; BYTE_COUNT := 4
      LD BC,OK			; STATUS := OK
      LD A,DATA_OFFSET		; DATA_OFFSET := 0
      CALL BUF_HD		; UPDATE BUFFER_HEAD
      RTN 3
   END POLENQ
 
;ECHO \f


;*************************************************************************
;* PROCEDURE NAME: BUF_HD
;* 
;* FUNCTION:       INSERTS BYTE_COUNT, STATUS, AND DATA_START_ADDRESS IN
;* 		   BUFFER_HEAD
;* 
;* INPUT:          HL: BUFFER_POINTER
;* 		   DE: BYTE_COUNT
;* 		   BC: STATUS_WORD
;* 		   A : DATA_OFFSET
;* 
;* OUTPUT:         NONE
;* 
;* DESTROYES:      B,C,D,E,H,L
;*************************************************************************
GLOBAL
   BUF_HD PROCEDURE
   ENTRY
	INC	HL
	INC	HL
	LD	(HL),E			; UPDATE BYTE_COUNT
	INC 	HL
	LD	(HL),D
	INC	HL			; UPDATE STATUS
	LD	(HL),C
	INC	HL
	LD	(HL),B
	INC	HL			; UPDATE DATA STA_ADR
	INC	HL
	INC	HL
	PUSH	HL
	INC	HL
	INC	HL
	LD	B,0
	LD	C,A
	ADD	HL,BC
	PUSH	HL
	POP	DE
	POP	HL
	LD	(HL),E
	INC	HL
	LD	(HL),D
   END BUF_HD
 
END BUFFER
;ECHO \f