DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Hard and Floppy Disks

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CR80 Hard and Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦fa73ac3c6⟧ TextFile

    Length: 3424 (0xd60)
    Types: TextFile
    Names: »TX.S«

Derivation

└─⟦e12128f26⟧ Bits:30005200 8" Zilog MCZ/1 Floppy CR80FD_0026 ( TC 500 SEC. PROTOCOL BB V1 830407 NCJ )
    └─ ⟦this⟧ »TX.S« 

TextFile

!*****************************************************************************
*
*		    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)
   TDELAY PROCEDURE (CH_NO BYTE)
 
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
 
      ! MAKE TRANSMISSION DELAY !
      TDELAY (P^.B[CH_NO])
 
      ! 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

!