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

⟦2eec39646⟧ TextFile

    Length: 2425 (0x979)
    Types: TextFile
    Names: »MUTEX.S«

Derivation

└─⟦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« 

TextFile

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

!