|
|
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: 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
!