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