|
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: 3330 (0xd02) Types: TextFile Names: »TX.S«
└─⟦a3edd706e⟧ Bits:30005202 8" Zilog MCZ/1 Floppy CR80FD_0028 ( TC 500 SEC. PROTOCOL BACK UP ! (V1) BB A1 820907 NCJ ) └─ ⟦this⟧ »TX.S«
!***************************************************************************** * * TX MODULE * ******************************************************************************! TX 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 PROCESS_TABLE RECORD [B ARRAY[4 BYTE] POLL_RATE WORD] TABLE_PTR ^PROCESS_TABLE CONSTANT DATA := 0 MAKS_DELAY := 240 ! 3 SEK ! EMPTY := 0 FALSE := 0 LINE_IS_UP := %10 LINE_IS_DOWN := %11 OK := 0 TRANS_NOT_COMPLETED := 2 ! CONSTANTS REFERRING TO OFFSET IN PARAMETER TABLE ! SIO_INPUT_QUEU := 2 RETRANS_QUEU := 3 CH_NO := 6 CR80_RESP := 8 ACK_STATUS := 16 EXTERNAL RECX PROCEDURE (QUEU_NO,DELAY,CH_NO BYTE) RETURNS (BUF_PTR REC_PTR) RECEIV PROCEDURE (CH_NO BYTE) HUNT PROCEDURE IYSEL PROCEDURE (CH_NO BYTE) TXTERM PROCEDURE RXTERM PROCEDURE PUTMES PROCEDURE (QUEU_NO BYTE,BUF_PTR REC_PTR) PUTBUF PROCEDURE (QUEU_ADDRESS QUEU_HEAD_PTR,BUF_PTR REC_PTR) PUTTRQ PROCEDURE (QUEU_ADDRESS TRQ_PTR,BUF_PTR REC_PTR) PWQBUF PROCEDURE (CAD1,CAD2 BYTE,QUEU_ADDRESS PWQ_PTR) RETURNS (BUF_PTR REC_PTR) DOWN_MESS PROCEDURE (P DATA_PTR) GLOBAL !ECHO \f ! !**************************************************************************** * PROCEDURE : TX * * FUNCTION : TRANSMIT DATA OR DLC PACKETS ON LINE * * INPUTS : BUF_PTR : POINTER TO OUTPUT BUFFER * DLC : DATA OR DLC INDICATION * P : POINTER TO PARAMETER TABLE * * OUTPUTS : NONE ***************************************************************************! TX PROCEDURE (BUF_PTR REC_PTR,DLC BYTE,P DATA_PTR) LOCAL RETRANS_BUF_PTR REC_PTR CH_STATUS BYTE ENTRY ! SEND BUFFER TO SIO DRIVER QUEUE ! PUTMES (P^.B[SIO_INPUT_QUEU],BUF_PTR) ! WAIT FOR TRANSMISSION COMPLETED MESSAGE ! RETRANS_BUF_PTR := RECX (P^.B[RETRANS_QUEU],MAKS_DELAY,P^.B[CH_NO]) IF RETRANS_BUF_PTR <> NIL THEN CH_STATUS := OK ELSE CH_STATUS := TRANS_NOT_COMPLETED ! TERMINATE TRANSMITTER PROCESS ! IYSEL (P^.B[CH_NO]) TXTERM FI IF CH_STATUS = OK THEN IF DLC = DATA THEN ! ENQUE BUFFER IN TRANSMISSION QUEUE ! PUTTRQ (P^.TRQ,RETRANS_BUF_PTR) ELSE ! ENQUE BUFFER IN EMPTY QUEUE ! PUTBUF (P^.W,RETRANS_BUF_PTR) FI ELSE ! RESET ACK STATUS ! P^.B[ACK_STATUS] := FALSE ! REMOVE ALL POLL WAITING BUFFERS ! DO RETRANS_BUF_PTR := PWQBUF (EMPTY,EMPTY,P^.PWQ) IF RETRANS_BUF_PTR = NIL THEN EXIT FI PUTBUF (P^.W,RETRANS_BUF_PTR) OD ! IF LAST RESPONSE TO CR80 WAS LINE_UP ! IF P^.B[CR80_RESP] = LINE_IS_UP THEN ! SEND LINE_DOWN MESSAGE TO CR80 ! DOWN_MESS (P) FI FI IYSEL (P^.B[CH_NO]) HUNT ! SET MODEM IN RECEIVE MODE ! RECEIV (P^.B[CH_NO]) END TX END TX !ECHO \f !