|
|
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 - metrics - download
Length: 8376 (0x20b8)
Types: TextFile
Names: »BUFFER.ASM«
└─⟦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«
;*****************************************************************************
;*
;* 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