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: 9541 (0x2545) Types: TextFile Names: »STATUS.BUF.S«
└─⟦a3edd706e⟧ Bits:30005202 8" Zilog MCZ/1 Floppy CR80FD_0028 ( TC 500 SEC. PROTOCOL BACK UP ! (V1) BB A1 820907 NCJ ) └─ ⟦this⟧ »STATUS.BUF.S« └─⟦e12128f26⟧ Bits:30005200 8" Zilog MCZ/1 Floppy CR80FD_0026 ( TC 500 SEC. PROTOCOL BB V1 830407 NCJ ) └─ ⟦this⟧ »STATUS.BUF.S«
!*************************************************************************** * * FORMAT_STATUS_BUFFER MODULE * ***************************************************************************! FORMAT_STATUS_BUFFER MODULE TYPE BUFFER RECORD [BUFF_HEAD ARRAY[4 WORD] STAADR ^BYTE DATA ARRAY[504 BYTE]] REC_PTR ^BUFFER CONFIG_TABLE ARRAY [10,4 BYTE] CONFIG_TAB_PTR ^CONFIG_TABLE QUEU_HEAD ARRAY [8 BYTE] QUEU_HEAD_PTR ^QUEU_HEAD PWQ_HEAD ARRAY [8 BYTE] PWQ_PTR ^PWQ_HEAD TRQ_HEAD ARRAY [8 BYTE] TRQ_PTR ^TRQ_HEAD PARAM_TABLE RECORD [B ARRAY[20 BYTE] W QUEU_HEAD_PTR P CONFIG_TAB_PTR PWQ PWQ_PTR TRQ TRQ_PTR] DATA_PTR ^PARAM_TABLE CONSTANT CLEAR_OVERLOAD := %09 LINE_IS_UP := %10 LINE_IS_DOWN := %11 CLUSTER_UP := %F0 CLUSTER_DOWN := %80 TERMINAL_DOWN := %15 CLUSTER_REMOVE := %0 CALL_RECEIVED := %17 LINE_STAT := %18 OVERLOAD := %FF CADERROR := %31 CLR_ERROR := %30 ACK := %06 NACK := %15 LINE_UP_COMMAND := %40 LINE_DOWN_COMMAND := %80 LINE_UP := 0 EMPTY := 0 ! OPCODE VALUES TO CR80 ! LNCLUP := %63 LNCLDW := %64 LNTMDW := %55 LNUP := %52 LNDOWN := %53 LNCLRM := %59 CALL_DETECTED := %58 LNROCM := %57 LNLNST := %56 ! CONSTANTS REFERRING TO BUFFER_HEAD ! BYTE_COUNT_OFFSET := 1 STATUS_OFFSET := 2 OK := %4000 ! CONSTANTS REFERRING TO DATA IN BUFFER ! OPCODE_OFFSET := 0 LINE_NO_OFFSET := 1 AD1_OFFSET := 3 AD2_OFFSET := 2 ERR0_OFFSET := 23 ERR1_OFFSET := 24 ! CONSTANTS REFERRING TO OFFSET IN PARAM_TABLE ! CR80_RESP_QUEU := 0 SIO_OUTPUT_QUEU := 1 SIO_INPUT_QUEU := 2 RETRANS_QUEU := 3 MONITOR_QUEU := 4 LINE_NO := 5 CH_NO := 6 MONITOR_STATUS := 7 CR80_RESP := 8 CR80_COMM := 9 EXTERNAL GETBUF PROCEDURE (QUEU_ADDRESS QUEU_HEAD_PTR) RETURNS (BUF_PTR REC_PTR) PUTMES PROCEDURE (QUEU_NO BYTE,BUF_PTR REC_PTR) OVLDET PROCEDURE (P DATA_PTR) RETURNS (STATUS BYTE) LHROUT PROCEDURE (BUF_PTR REC_PTR) OUTLHR PROCEDURE (BUF_PTR REC_PTR,LINE_NO BYTE) DLCBUF PROCEDURE (BUF_PTR REC_PTR,DLC BYTE) TX PROCEDURE (BUF_PTR REC_PTR,DLC BYTE,P DATA_PTR) LINEUP PROCEDURE (CH_NO BYTE) RETURNS (STATUS BYTE) PUTBUF PROCEDURE (QUEU_ADDRESS QUEU_HEAD_PTR,BUF_PTR REC_PTR) GLOBAL !ECHO \f ! !*********************************************************************** * PROCEDURE : FORMATS CLUSTER STATUS BUFFER ACCORDING TO COMMAND * AND SENDS STATUS BUFFER TO CR80 * * INPUTS : AD1 : FIRST BYTE OF CLUSTER ADDRESS * AD2 : SECOND BYTE OF CLUSTER ADDRESS * COMMAND : TYPE OF STATUS BUFFER * P : POINTER TO PARAMETER TABLE * * OUTPUTS : NONE **********************************************************************! CL_TERM_STATUS_BUFFER PROCEDURE (AD1,AD2,COMMAND BYTE,P DATA_PTR) LOCAL BUF_PTR REC_PTR OPCODE,I BYTE ENTRY ! GET POINTER TO EMPTY BUFFER ! BUF_PTR := GETBUF (P^.W) IF COMMAND CASE CLUSTER_UP THEN OPCODE := LNCLUP CASE CLUSTER_DOWN THEN OPCODE := LNCLDW CASE CLUSTER_REMOVE THEN OPCODE := LNCLRM FI ! INSERT OPCODE AND LINE_NO IN BUFFER ! BUF_PTR^.DATA[OPCODE_OFFSET] := OPCODE BUF_PTR^.DATA[AD1_OFFSET] := AD1 BUF_PTR^.DATA[LINE_NO_OFFSET] := P^.B[LINE_NO] BUF_PTR^.DATA[AD2_OFFSET] := AD2 I := 4 DO BUF_PTR^.DATA[I] := 0 I += 1 IF I = 12 THEN EXIT FI OD ! UPDATE BUFFERHEAD ! BUF_PTR^.BUFF_HEAD[BYTE_COUNT_OFFSET] := 12 BUF_PTR^.BUFF_HEAD[STATUS_OFFSET] := OK BUF_PTR^.STAADR := #BUF_PTR^.DATA[OPCODE_OFFSET] ! SEND BUFFER TO CR80 INTERFACE QUEU ! PUTMES (P^.B[CR80_RESP_QUEU],BUF_PTR) END CL_TERM_STATUS_BUFFER !ECHO \f ! !*********************************************************************** * PROCEDURE : LINE_STATUS_BUFFER * * FUNCTION : FORMATS LINE STATUS BUFFER ACCORDING TO COMMAND AND * SENDS STATUS BUFFER TO CR80 * * INPUTS : COMMAND : TYPE OF STATUS BUFFER * P : POINTER TO PARAMETER TABLE * * OUTPUTS : NONE **********************************************************************! LINE_STATUS_BUFFER PROCEDURE (COMMAND BYTE,P DATA_PTR) LOCAL BUF_PTR REC_PTR OPCODE,I BYTE ENTRY ! GET POINTER TO EMPTY BUFFER ! BUF_PTR := GETBUF (P^.W) IF COMMAND CASE LINE_IS_UP THEN OPCODE := LNUP CASE LINE_IS_DOWN THEN OPCODE := LNDOWN CASE CLEAR_OVERLOAD THEN OPCODE := LNROCM FI ! INSERT OPCODE AND LINE_NO IN BUFFER ! BUF_PTR^.DATA[OPCODE_OFFSET] := OPCODE BUF_PTR^.DATA[LINE_NO_OFFSET] := P^.B[LINE_NO] I := 2 DO BUF_PTR^.DATA[I] := 0 I += 1 IF I = 12 THEN EXIT FI OD ! UPDATE BYTE_COUNT, DATA_START_ADDRESS AND STATUS IN BUFFERHEAD ! BUF_PTR^.BUFF_HEAD[BYTE_COUNT_OFFSET] := 12 BUF_PTR^.BUFF_HEAD[STATUS_OFFSET] := OK BUF_PTR^.STAADR := #BUF_PTR^.DATA[OPCODE_OFFSET] ! SEND BUFFER TO CR80 INTERFACE QUEU ! PUTMES (P^.B[CR80_RESP_QUEU],BUF_PTR) END LINE_STATUS_BUFFER !ECHO \f ! !****************************************************************************** * PROCEDURE : CAD_ERROR * * FUNCTION : THE BUFFER IS REFORMATTED TO OUTPUT_TO_CR80 FORMAT, ERROR * STATUS IS SET, INDICATING ILLEGAL CLUSTER ADDRESS AND THE * BUFFER IS SENT TO CR80 * * INPUTS : BUF_PTR : POINTER TO BUFFER * P : POINTER TO PARAMETER TABLE * * OUTPUTS : NONE *****************************************************************************! CAD_ERROR PROCEDURE (BUF_PTR REC_PTR,P DATA_PTR) ENTRY IF OVLDET (P) <> OVERLOAD THEN ! REFORMAT BUFFER TO CR80 FORMAT ! LHROUT (BUF_PTR) OUTLHR (BUF_PTR,P^.B[LINE_NO]) BUF_PTR^.DATA[ERR0_OFFSET] := CADERROR BUF_PTR^.DATA[ERR1_OFFSET] := CLR_ERROR ! SEND BUFFER TO CR80 INTERFACE QUEUE ! PUTMES (P^.B[CR80_RESP_QUEU],BUF_PTR) ELSE ! ENQUE BUFFER IN EMPTY BUFFER QUEUE ! PUTBUF (P^.W,BUF_PTR) FI END CAD_ERROR !ECHO \f ! !****************************************************************************** * PROCEDURE : CR80BUF * * FUNCTION : IF NO CR80 OVERLOAD, THE BUFFER IS REFORMATTED TO OUTPUT_TO_ * CR80 FORMAT AND SENT TO CR80, AND AN ACK IS TRANSMITTED ON * LINE. * IF CR80 OVERLOAD, A NACK IS TRANSMITTED ON LINE. * * INPUTS : BUF_PTR : POINTER TO BUFFER * P : POINTER TO PARAMETER TABLE * * OUTPUTS : NONE *****************************************************************************! CR80BUF PROCEDURE (BUF_PTR REC_PTR,P DATA_PTR) LOCAL OUTPUT_BUF_PTR REC_PTR ENTRY IF OVLDET (P) <> OVERLOAD THEN ! REFORMAT BUFFER TO CR80 FORMAT ! OUTLHR (BUF_PTR,P^.B[LINE_NO]) ! SEND BUFFER TO CR80 INTERFACE QUEUE ! PUTMES (P^.B[CR80_RESP_QUEU],BUF_PTR) ! ACK MESSAGE ! OUTPUT_BUF_PTR := GETBUF (P^.W) DLCBUF (OUTPUT_BUF_PTR,ACK) TX (OUTPUT_BUF_PTR,ACK,P) ELSE ! NACK MESSAGE ! DLCBUF (BUF_PTR,NACK) TX (BUF_PTR,NACK,P) FI END CR80BUF !ECHO \f ! !*********************************************************************** * PROCEDURE : DOWN_MESS * * FUNCTION : IF LTU IS NOT IN OVERLOAD, A LINE_DOWN MESSAGE IS SENT * TO CR80 * * INPUTS : P : POINTER TO PARAMETER TABLE * * OUTPUTS : NONE **********************************************************************! DOWN_MESS PROCEDURE (P DATA_PTR) ENTRY IF OVLDET (P) <> OVERLOAD THEN P^.B[CR80_RESP] := LINE_IS_DOWN LINE_STATUS_BUFFER (LINE_IS_DOWN,P) FI END DOWN_MESS !ECHO \f ! !*********************************************************************** * PROCEDURE : LINE_MON * * FUNCTION : IF A LINE_UP COMMAND HAS BEEN GIVEN, THE LINE WILL BE * SET UP. IF THE CURRENT STATE OF THE LINE HAS NOT BEEN * REPORTED TO THE CR80 ALLREADY, A LINE STATUS BUFFER IS * SENT * * INPUTS : P : POINTER TO PARAMETER TABLE * * OUTPUTS : NONE **********************************************************************! LINE_MON PROCEDURE (P DATA_PTR) LOCAL LINE_STATUS,CL_NO BYTE CAD1,CAD2,STATUS BYTE ENTRY ! IF LINE_UP COMMAND FROM CR80 IS RECEIVED ! IF P^.B[CR80_COMM] = LINE_UP_COMMAND THEN LINE_STATUS := LINEUP (P^.B[CH_NO]) IF LINE_STATUS = LINE_UP THEN ! IF LAST RESPONS TO CR80 WAS LINE_DOWN ! IF P^.B[CR80_RESP] = LINE_IS_DOWN ANDIF OVLDET (P) <> OVERLOAD THEN ! SEND LINE_UP RESPONS TO CR80 AND REMEMBER RESPONS ! P^.B[CR80_RESP] := LINE_IS_UP LINE_STATUS_BUFFER (LINE_IS_UP,P) FI ELSE ! LINE_STATUS = DOWN ! ! IF LAST RESPONS TO CR80 WAS LINE_UP ! IF P^.B[CR80_RESP] = LINE_IS_UP THEN ! SEND LINE_DOWN REPONS TO CR80 AND REMAEMBER RESPONS ! ! AND SEND STATUS BUFFERS TO CR80 ! DOWN_MESS (P) FI FI ELSE IF P^.B[CR80_RESP] = LINE_IS_UP THEN DOWN_MESS (P) FI FI END LINE_MON END FORMAT_STATUS_BUFFER !ECHO \f !