|
|
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: 2425 (0x979)
Types: TextFile
Names: »MUTEX.S«
└─⟦a3edd706e⟧ Bits:30005202 8" Zilog MCZ/1 Floppy CR80FD_0028 ( TC 500 SEC. PROTOCOL BACK UP ! (V1) BB A1 820907 NCJ )
└─⟦this⟧ »MUTEX.S«
└─⟦e12128f26⟧ Bits:30005200 8" Zilog MCZ/1 Floppy CR80FD_0026 ( TC 500 SEC. PROTOCOL BB V1 830407 NCJ )
└─⟦this⟧ »MUTEX.S«
!******************************************************************
*
* MUTUAL_EXCLUSION MODULE
*
******************************************************************!
MUTUAL_EXCLUSION 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
CONF_TABLE ARRAY [10,1 BYTE]
CONF_TAB_PTR ^CONF_TABLE
PARAM_TABLE RECORD
[B ARRAY[20 BYTE]
W WORD
P CONFIG_TAB_PTR
C CONF_TAB_PTR
CL_MESS BYTE]
DATA_PTR ^PARAM_TABLE
CONSTANT
IN_USE :=%FF
FALSE := 0
NOT_USED := 0
! 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
EXTERNAL
WAIT PROCEDURE (QUEU_NO BYTE)
SIGNAL PROCEDURE (QUEU_NO BYTE)
! ECHO \f
!
GLOBAL
!***********************************************************************
* PROCEDURE : ENTER_CRITICAL_SECTION
*
* FUNCTION : IF CRITICAL SECTION IS USED BY ANOTHER PROCESS, THE
* CALLING PROCESS IS DELAYED UNTIL THE CRITICAL SECTION
* IS UNUSED. THE CALLING PROCESS IS THEN ALLOCATED THE
* CRITICAL SECTION
*
* INPUTS : P : POINTER TO PARAMETER TABLE
*
* OUTPUTS : NONE
**********************************************************************!
ENTER_CRITICAL_SECTION PROCEDURE (P DATA_PTR)
ENTRY
DO
IF P^.B[MONITOR_STATUS] = IN_USE THEN
WAIT (P^.B[MONITOR_QUEU])
FI
IF P^.B[MONITOR_STATUS] = FALSE THEN EXIT FI
OD
P^.B[MONITOR_STATUS] := IN_USE
END ENTER_CRITICAL_SECTION
!***********************************************************************
* PROCEDURE : EXIT_CRITICAL_SECTION
*
* FUNCTION : THE CALLING PROCESS DEALLOCATES THE CRITICAL SECTION
* AND SIGNALS THE CRITICAL SECTION-SEMAPHORE
*
* INPUTS : P : POINTER TO PARAMETER TABLE
*
* OUTPUTS : NONE
**********************************************************************!
EXIT_CRITICAL_SECTION PROCEDURE (P DATA_PTR)
ENTRY
P^.B[MONITOR_STATUS] := FALSE
SIGNAL (P^.B[MONITOR_QUEU])
END EXIT_CRITICAL_SECTION
END MUTUAL_EXCLUSION
!ECHO \f
!