|
|
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: 9673 (0x25c9)
Types: TextFile
Names: »CH.PROC.S«
└─⟦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«
!*****************************************************************************
*
* 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
!