|
|
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: 8901 (0x22c5)
Types: TextFile
Names: »BUFFER.S«
└─⟦31b8a9b6a⟧ Bits:30005199 8" Zilog MCZ/1 Floppy CR80FD_0025 ( TC 500 SEC. PROTOCOL BB V2 830407 NCJ )
└─⟦this⟧ »BUFFER.S«
└─⟦cf416a62a⟧ Bits:30005201 8" Zilog MCZ/1 Floppy CR80FD_0027 ( TC 500 SEC. PROTOCOL BACK UP! (V2) BB SEC 821119 NCJ )
└─⟦this⟧ »BUFFER.S«
;;*****************************************************************************
;;*
;;* BUFFER_GENERATOR MODULE
;;*
;;*****************************************************************************
*INCLUDE PLZ.MACROS
;BUFFER MODULE
;CONSTANT
; EOT := 4
EOT EQU 4
; POL := 70H
POL EQU 70H
; ENQ := 05H
ENQ EQU 05H
; LNDIPT := 51H
LNDIPT EQU 51H
; SOH := 01
SOH EQU 01
; STX := 02
STX EQU 02
; ETX := 03
ETX EQU 03
; OK := 0
OK EQU 0
; EOT_INDICATION := 4000H
EOT_INDICATION EQU 4000H
; DATA_OFFSET := 0
DATA_OFFSET EQU 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
GLOBAL LHROUT
; ENTRY
LHROUT:
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
RET
;
;;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
GLOBAL OUTLHR
; ENTRY
OUTLHR:
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
DO00:
INC HL ;
LD (HL),0 ; DATA[I] := 0
DEC A ; I += 1
; IF Z THEN EXIT FI ; IF I = 13 THEN EXIT FI
JP NZ,FI01
JP OD00
FI01:
; OD ; OD
JP DO00
OD00:
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
RET
;
;;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
GLOBAL INOUT
; ENTRY
INOUT:
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
RET
;
;
;;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
GLOBAL DLCBUF
; ENTRY
DLCBUF:
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
RET
;
;;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
GLOBAL POLENQ
; ENTRY
POLENQ:
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
RET
;
;;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
GLOBAL BUF_HD
; ENTRY
BUF_HD:
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
RET
;
;END BUFFER
END
«eof»