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

⟦56d20d91f⟧ TextFile

    Length: 9673 (0x25c9)
    Types: TextFile
    Names: »CH.PROC.S«

Derivation

└─⟦a3edd706e⟧ Bits:30005202 8" Zilog MCZ/1 Floppy CR80FD_0028 ( TC 500 SEC. PROTOCOL BACK UP ! (V1) BB A1 820907 NCJ )
    └─ ⟦this⟧ »CH.PROC.S« 
└─⟦e12128f26⟧ Bits:30005200 8" Zilog MCZ/1 Floppy CR80FD_0026 ( TC 500 SEC. PROTOCOL BB V1 830407 NCJ )
    └─ ⟦this⟧ »CH.PROC.S« 

TextFile

!*****************************************************************************
*
*		CHANNEL PROCESS  MODULE
*
*****************************************************************************!
 
CHANNEL_PROCESS 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
   FALSE                := 0
   DELAY		:= 0
   CH1_CR80_MESSAGE_QUEU	:= 0
   CH2_CR80_MESSAGE_QUEU	:= 10
   CH3_CR80_MESSAGE_QUEU	:= 20
   CH4_CR80_MESSAGE_QUEU	:= 30
   CH_RATE		:= 2400  ! 2400 UNITS OF 12.5 mSEC = 30 SEC !
   IN_USE		:= %FF
 
 
   ! 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
   TABLE_STATUS       := 10
   TABLE_MONITOR      := 11
   TAD1               := 12
   TAD2               := 13
   MULTI_TEXT         := 14
 
 
EXTERNAL
   COMMAND_HANDLER PROCEDURE (BUF_PTR REC_PTR,T TABLE_PTR,P DATA_PTR)
   GETMES PROCEDURE (QUEU_NO BYTE) RETURNS (BUF_PTR REC_PTR)
   CHANNEL_IO PROCEDURE (BUF_PTR REC_PTR,T TABLE_PTR,P DATA_PTR)
   ENTER_CRITICAL_SECTION PROCEDURE (P DATA_PTR)
   EXIT_CRITICAL_SECTION PROCEDURE (P DATA_PTR)
   CAD_STATUS PROCEDURE (PCT CONFIG_TAB_PTR,P DATA_PTR)
   RECX PROCEDURE (QUEU_NO,DELAY,CH_NO BYTE) RETURNS (BUF_PTR REC_PTR)
   LINE_MON PROCEDURE (P DATA_PTR)
   REST PROCEDURE
   IYSEL PROCEDURE (CH_NO BYTE)
   RECEIV PROCEDURE (CH_NO BYTE)
   TRAXST PROCEDURE
   EMP1QU,EMP2QU,EMP3QU,EMP4QU QUEU_HEAD
   POL1QU,POL2QU,POL3QU,POL4QU PWQ_HEAD
   TRS1QU,TRS2QU,TRS3QU,TRS4QU TRQ_HEAD
 
GLOBAL
   CH1TAB PROCESS_TABLE := [[FALSE,6,7,0]0008]
   CT1 CONFIG_TABLE := [0,...]
   PT1 PARAM_TABLE := [[1,2,3,4,5,?,1,0,%11,%80,0,8,?,?,0,0,0,0,0,0],#EMP1QU,#CT1,#POL1QU,#TRS1QU]
 
   CH2TAB PROCESS_TABLE := [[FALSE,16,17,0]0008]
   CT2 CONFIG_TABLE := [0,...]
   PT2 PARAM_TABLE := [[11,12,13,14,15,?,2,0,%11,%80,0,18,?,?,0,0,0,0,0,0],#EMP2QU,#CT2,#POL2QU,#TRS2QU]
 
   CH3TAB PROCESS_TABLE := [[FALSE,26,27,0]0008]
   CT3 CONFIG_TABLE := [0,...]
   PT3 PARAM_TABLE := [[21,22,23,24,25,?,3,0,%11,%80,0,28,?,?,0,0,0,0,0,0],#EMP3QU,#CT3,#POL3QU,#TRS3QU]
 
   CH4TAB PROCESS_TABLE := [[FALSE,36,37,0]0008]
   CT4 CONFIG_TABLE := [0,...]
   PT4 PARAM_TABLE := [[31,32,33,34,35,?,4,0,%11,%80,0,38,?,?,0,0,0,0,0,0],#EMP4QU,#CT4,#POL4QU,#TRS4QU]
 
INTERNAL
P1 DATA_PTR := #PT1
P2 DATA_PTR := #PT2
P3 DATA_PTR := #PT3
P4 DATA_PTR := #PT4
BUF1_PTR,BUF2_PTR,BUF3_PTR,BUF4_PTR REC_PTR
INPUT1_BUF_PTR,INPUT2_BUF_PTR,INPUT3_BUF_PTR,INPUT4_BUF_PTR REC_PTR
 
GLOBAL
!ECHO \f

!
   NTIME1 WORD := CH_RATE
   STIME1 WORD := %00
 
!******************************************************************************
*		COM1PR  PROCEDURE
******************************************************************************!
   COM1PR PROCEDURE
   ENTRY
 
      ! DO FOREVER !
 
      DO
  
         ! GET BUFFER FROM CR80_INTERFACE PROCESS !
 
         BUF1_PTR := GETMES (CH1_CR80_MESSAGE_QUEU)
 
         ! ACTIVATE COMMAND_HANDLER !
 
         COMMAND_HANDLER (BUF1_PTR,#CH1TAB,P1)
      OD
   END COM1PR
 
!*****************************************************************************
*		C1REC  PROCEDURE
*****************************************************************************!
   C1REC PROCEDURE
   ENTRY
 
      ! DO FOREVER !
 
      DO
	 RECEIV (P1^.B[CH_NO])
	 ! WAIT FOR BUFFER POINTER FROM SIO DRIVER !
	 INPUT1_BUF_PTR := RECX (P1^.B[SIO_OUTPUT_QUEU],
			       DELAY,
			       P1^.B[CH_NO])
	 ! ACTIVATE CHANNEL_IO !
	 ENTER_CRITICAL_SECTION (P1)
	 CHANNEL_IO (INPUT1_BUF_PTR,#CH1TAB,P1)
	 EXIT_CRITICAL_SECTION (P1)
      OD
   END C1REC
 
!******************************************************************************
*		N1TIME  PROCEDURE
******************************************************************************!
   N1TIME PROCEDURE
   ENTRY
 
      ! DO FOREVER !
 
      DO
	 IF NTIME1 = 0 THEN
	    IF P1^.B[MONITOR_STATUS] <> IN_USE THEN
	       ENTER_CRITICAL_SECTION (P1)
	       LINE_MON (P1)
	       EXIT_CRITICAL_SECTION (P1)
 
	       CAD_STATUS (#CT1,P1)
	       NTIME1 := CH_RATE
	    FI
	 FI
 
	 IYSEL (P1^.B[CH_NO])
	 TRAXST
	 REST
      OD
   END N1TIME
 
!ECHO \f

!
   NTIME2 WORD := CH_RATE
   STIME2 WORD := %00
 
!******************************************************************************
*		COM2PR  PROCEDURE
******************************************************************************!
   COM2PR PROCEDURE
   ENTRY
 
      ! DO FOREVER !
 
      DO
  
         ! GET BUFFER FROM CR80_INTERFACE PROCESS !
 
         BUF2_PTR := GETMES (CH2_CR80_MESSAGE_QUEU)
 
         ! ACTIVATE COMMAND_HANDLER !
 
         COMMAND_HANDLER (BUF2_PTR,#CH2TAB,P2)
      OD
   END COM2PR
 
!******************************************************************************
*		C2REC  PROCEDURE
******************************************************************************!
   C2REC PROCEDURE
   ENTRY
 
      ! DO FOREVER !
 
      DO
	 RECEIV (P2^.B[CH_NO])
	 ! WAIT FOR BUFFER POINTER FROM SIO DRIVER !
	 INPUT2_BUF_PTR := RECX (P2^.B[SIO_OUTPUT_QUEU],
			       DELAY,
			       P2^.B[CH_NO])
	 ! ACTIVATE CHANNEL_IO !
	 ENTER_CRITICAL_SECTION (P2)
	 CHANNEL_IO (INPUT2_BUF_PTR,#CH2TAB,P2)
	 EXIT_CRITICAL_SECTION (P2)
      OD
   END C2REC
 
!******************************************************************************
*		N2TIME  PROCEDURE
******************************************************************************!
   N2TIME PROCEDURE
   ENTRY
 
      ! DO FOREVER !
 
      DO
	 IF NTIME2 = 0 THEN
	    IF P2^.B[MONITOR_STATUS] <> IN_USE THEN
	       ENTER_CRITICAL_SECTION (P2)
	       LINE_MON (P2)
	       EXIT_CRITICAL_SECTION (P2)
 
	       CAD_STATUS (#CT2,P2)
	       NTIME2 := CH_RATE
	    FI
	 FI
 
	 IYSEL (P2^.B[CH_NO])
	 TRAXST
	 REST
      OD
   END N2TIME
 
!ECHO \f

!
   NTIME3 WORD := CH_RATE
   STIME3 WORD := %00
 
!****************************************************************************
*		COM3PR  PROCEDURE
****************************************************************************!
   COM3PR PROCEDURE
   ENTRY
 
      ! DO FOREVER !
 
      DO
  
         ! GET BUFFER FROM CR80_INTERFACE PROCESS !
 
         BUF3_PTR := GETMES (CH3_CR80_MESSAGE_QUEU)
 
         ! ACTIVATE COMMAND_HANDLER !
 
         COMMAND_HANDLER (BUF3_PTR,#CH3TAB,P3)
      OD
   END COM3PR
 
!*****************************************************************************
*		C3REC  PROCEDURE
*****************************************************************************!
   C3REC PROCEDURE
   ENTRY
 
      ! DO FOREVER !
 
      DO
	 RECEIV (P3^.B[CH_NO])
	 ! WAIT FOR BUFFER POINTER FROM SIO DRIVER !
	 INPUT3_BUF_PTR := RECX (P3^.B[SIO_OUTPUT_QUEU],
			       DELAY,
			       P3^.B[CH_NO])
	 ! ACTIVATE CHANNEL_IO !
	 ENTER_CRITICAL_SECTION (P3)
	 CHANNEL_IO (INPUT3_BUF_PTR,#CH3TAB,P3)
	 EXIT_CRITICAL_SECTION (P3)
      OD
   END C3REC
 
!****************************************************************************
*		N3TIME  PROCEDURE
****************************************************************************!
   N3TIME PROCEDURE
   ENTRY
 
      ! DO FOREVER !
 
      DO
	 IF NTIME3 = 0 THEN
	    IF P3^.B[MONITOR_STATUS] <> IN_USE THEN
	       ENTER_CRITICAL_SECTION (P3)
	       LINE_MON (P3)
	       EXIT_CRITICAL_SECTION (P3)
 
	       CAD_STATUS (#CT3,P3)
	       NTIME3 := CH_RATE
	    FI
	 FI
 
	 IYSEL (P3^.B[CH_NO])
	 TRAXST
	 REST
      OD
   END N3TIME
 
!ECHO \f

!
   NTIME4 WORD := CH_RATE
   STIME4 WORD := %00
 
!******************************************************************************
*		COM4PR  PROCEDURE
******************************************************************************!
   COM4PR PROCEDURE
   ENTRY
 
      ! DO FOREVER !
 
      DO
  
         ! GET BUFFER FROM CR80_INTERFACE PROCESS !
 
         BUF4_PTR := GETMES (CH4_CR80_MESSAGE_QUEU)
 
         ! ACTIVATE COMMAND_HANDLER !
 
         COMMAND_HANDLER (BUF4_PTR,#CH4TAB,P4)
      OD
   END COM4PR
 
!*****************************************************************************
*		C4REC  PROCEDURE
*****************************************************************************!
   C4REC PROCEDURE
   ENTRY
 
      ! DO FOREVER !
 
      DO
	 RECEIV (P4^.B[CH_NO])
	 ! WAIT FOR BUFFER POINTER FROM SIO DRIVER !
	 INPUT4_BUF_PTR := RECX (P4^.B[SIO_OUTPUT_QUEU],
			       DELAY,
			       P4^.B[CH_NO])
	 ! ACTIVATE CHANNEL_IO !
	 ENTER_CRITICAL_SECTION (P4)
	 CHANNEL_IO (INPUT4_BUF_PTR,#CH4TAB,P4)
	 EXIT_CRITICAL_SECTION (P4)
      OD
   END C4REC
 
!*****************************************************************************
*		N4TIME  PROCEDURE
*****************************************************************************!
   N4TIME PROCEDURE
   ENTRY
 
      ! DO FOREVER !
 
      DO
	 IF NTIME4 = 0 THEN
	    IF P4^.B[MONITOR_STATUS] <> IN_USE THEN
	       ENTER_CRITICAL_SECTION (P4)
	       LINE_MON (P4)
	       EXIT_CRITICAL_SECTION (P4)
 
	       CAD_STATUS (#CT4,P4)
	       NTIME4 := CH_RATE
	    FI
	 FI
 
	 IYSEL (P4^.B[CH_NO])
	 TRAXST
	 REST
      OD
   END N4TIME
 
END CHANNEL_PROCESS
!ECHO \f

!