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

⟦69c9d5d48⟧ TextFile

    Length: 6709 (0x1a35)
    Types: TextFile
    Names: »CONFTAB.S«

Derivation

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

TextFile

!******************************************************************************
*
*		    CONFIG_TABLE  MODULE
*
******************************************************************************!
CONFIG_TABLE MODULE
 
CONSTANT
   NO_OF_CLUSTERS   := 10
   DOWN             := %80
   EMPTY            := 0
   UP		    := %F0
   NO_POLL	    := 0
   DO_MESS	    := %02
   CL_POLL	    := %04
   OVERLOAD	    := %FF
 
TYPE
   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
 
 
 
EXTERNAL
   OVLDET PROCEDURE (P DATA_PTR) RETURNS (STATUS BYTE)
   CL_TERM_STATUS_BUFFER PROCEDURE (CAD1,CAD2,COMMAND BYTE,P DATA_PTR)
 
GLOBAL
!ECHO \f

!
!****************************************************************************
* PROCEDURE	: CHECK_CAD
*
* FUNCTION	: CHECKS IF SPECIFIED CLUSTER IS IN CONFIGURATION TABLE
*
* INPUTS	: CAD1 : FIRST BYTE OF CLUSTER ADDRESS
*		  CAD2 : SECOND BYTE OF CLUSTER ADDRESS
*		  PCT  : POINTER TO CONFIGURATION TABLE
*
* OUTPUTS	: I : STATUS OF OPERATION
*			I < 10 : CLUSTER IS IN CONFIG.TABLE, I = NO.
*			I = 10 : CLUSTER IS NOT IN CONFIG.TABLE
****************************************************************************!
   CHECK_CAD PROCEDURE (CAD1,CAD2 BYTE,PCT CONFIG_TAB_PTR)
		RETURNS (I BYTE)
   ENTRY
      IF CAD1 = EMPTY ANDIF CAD2 = EMPTY THEN
	
	I := NO_OF_CLUSTERS
  
      ELSE
	I := 0
	! REPEAT UNTIL ACTIVE CLUSTER FOUND OR TABLE OVERRUN !
 
	DO
		IF CAD1 = PCT^[I,1] ANDIF CAD2 = PCT^[I,2] THEN EXIT FI
		I += 1
		IF I = NO_OF_CLUSTERS THEN EXIT FI
	OD
      FI
 
   END CHECK_CAD
 
!ECHO \f

!
!***********************************************************************
* PROCEDURE	: INSERT_CAD
*
* FUNCTION	: INSERTS CLUSTER WITH SPECIFIED ADDRESS IN CONFIGURATION
*		  TABLE
*
* INPUTS	: CAD1 : FIRST BYTE OF CLUSTER ADDRESS
*		  CAD2 : SECOND BYTE OF CLUSTER ADDRESS
*		  PCT  : POINTER TO CONFIGURATION TABLE
*
* OUTPUTS	: NONE
**********************************************************************!
   INSERT_CAD PROCEDURE (CAD1,CAD2 BYTE,PCT CONFIG_TAB_PTR)
   LOCAL
      CL_NO, CL_STATUS BYTE
   ENTRY
      CL_NO := 0
      
      ! REPEAT UNTIL EMPTY PLACE IN TABLE IS FOUND OR TABLE OVERRUN !
 
      DO
	 IF PCT^[CL_NO,1] = EMPTY ANDIF PCT^[CL_NO,2] = EMPTY THEN
            PCT^[CL_NO,1] := CAD1
            PCT^[CL_NO,2] := CAD2
	    PCT^[CL_NO,3] := EMPTY
	    EXIT
         ELSE
            CL_NO += 1
	    IF CL_NO = NO_OF_CLUSTERS THEN EXIT FI
	 FI
      OD
   END INSERT_CAD
 
!ECHO \f

!
!***********************************************************************
* PROCEDURE	: REM_CAD
*
* FUNCTION	: REMOVES CLUSTER WITH SPECIFIED ADDRESS FROM CONFIGURATION
*		  TABLE
*
* INPUTS	: CAD1 : FIRST BYTE OF CLUSTER ADDRESS
*		  CAD2 : SECOND BYTE OF CLUSTER ADDRESS
*		  PCT  : POINTER TO CONFIGURATION TABLE
*
* OUTPUTS	: NONE
**********************************************************************!
 
   REM_CAD PROCEDURE (CAD1,CAD2 BYTE,PCT CONFIG_TAB_PTR)
   LOCAL
      CL_NO BYTE
   ENTRY
 
      CL_NO := 0
      DO
	 IF PCT^[CL_NO,1] = CAD1 ANDIF PCT^[CL_NO,2] = CAD2 THEN
	    PCT^[CL_NO,1] := EMPTY
	    PCT^[CL_NO,2] := EMPTY
	    PCT^[CL_NO,3] := EMPTY
	 FI
	 CL_NO += 1
	 IF CL_NO = NO_OF_CLUSTERS THEN EXIT FI
      OD
 
 
   END REM_CAD
 
!ECHO \f

!
!*****************************************************************************
* PROCEDURE	: GET_CAD
*
* FUNCTION	: GETS ADDRESS OF FIRST CLUSTER IN CONFIGURATION TABLE
*
* INPUTS	: PCT  : POINTER TO CONFIGURATION TABLE
*
* OUTPUTS	: I    : STATUS OF OPERATION
*			I < 10 : CLUSTER FOUND IN CONFIG.TABLE, I = NO.
*			I = 10 : NO CLUSTERS IN CONFIG.TABLE
*		  CAD1 : FIRST BYTE OF CLUSTER ADDRESS, IF FOUND
*		  CAD2 : SECOND BYTE OF CLUSTER ADDRESS, IF FOUND
*****************************************************************************!
   GET_CAD PROCEDURE (PCT CONFIG_TAB_PTR)
		RETURNS (CL_NO,CAD1,CAD2 BYTE)
   ENTRY
      CL_NO := 0
 
      ! REPEAT UNTIL CLUSTER FOUND OR TABLE OVERRUN !
 
      DO
	 IF PCT^[CL_NO,1] <> EMPTY ORIF PCT^[CL_NO,2] <> EMPTY THEN
 
	    CAD1 := PCT^[CL_NO,1]
	    CAD2 := PCT^[CL_NO,2]
	    EXIT
	 FI
 
	 CL_NO += 1
	 IF CL_NO = NO_OF_CLUSTERS THEN EXIT FI
      OD
 
   END GET_CAD
 
!ECHO \f

!
!******************************************************************************
* PROCEDURE	: CAD_STATUS
*
* FUNCTION	: THE PROCEDURE CHECKS THE STATE OF ALL CLUSTERS IN THE CONFI-
*		  GURATION TABLE. THE ACTION IS AS FOLLOWS :
*
*	FOR ALL CLUSTERS
*	DO
*	  IF POLL_INDICATION FLAG IS RESET THEN
*	    IF LAST CL.MESSAGE TO CR80 WAS CLUSTER_UP THEN
*	      IF NO CR80 OVERLOAD THEN
*		SEND CLUSTER_DOWN MESSAGE TO CR80
*	      FI
*	    FI
*	  FI
*	  RESET POLL_INDICATION FLAG
*	OD
*
* INPUTS	: PCT : POINTER TO CONFIGURATION TABLE
*
* OUTPUTS	: NONE
*****************************************************************************!
   CAD_STATUS PROCEDURE (PCT CONFIG_TAB_PTR,P DATA_PTR)
   LOCAL
      CL_NO BYTE
   ENTRY
 
      CL_NO := 0
      DO
	 IF PCT^[CL_NO,3] AND %01 = NO_POLL THEN
	    IF PCT^[CL_NO,3] AND %02 = DO_MESS THEN
	       IF OVLDET (P) <> OVERLOAD THEN
	       ! IF LAST MESSAGE CLUSTER UP THEN SEND CLUSTER DOWN MESSAGE !
     	          CL_TERM_STATUS_BUFFER (PCT^[CL_NO,1],PCT^[CL_NO,2],DOWN,P)
       	          PCT^[CL_NO,3] := PCT^[CL_NO,3] AND %FD
	       FI
            FI
         FI
	 PCT^[CL_NO,3] := PCT^[CL_NO,3] AND %FE
 
	 CL_NO += 1
	 IF CL_NO = NO_OF_CLUSTERS THEN EXIT FI
      OD
   END CAD_STATUS
!ECHO \f

!
!*****************************************************************************
* PROCEDURE	: CL_ACCESS_INDIC
*
* FUNCTION	: SETS POLL_INDICATION FLAG FOR THE SPECIFIED CLUSTER. THE AC-
*		  TION IS AS FOLLOWS :
*
*	SET POLL_INDICATION FLAG
*	IF LAST CL.MESSAGE TO CR80 WAS CLUSTER_DOWN THEN
*	  IF NO CR80 OVERLOAD THEN
*	    SEND CLUSTER_UP MESSAGE TO CR80
*	  FI
*	FI
*
* INPUTS	: I   : NO. OF CLUSTER IN CONFIG.TABLE
*		  PCT : POINTER TO CONFIGURATION TABLE
*
* OUTPUTS	: NONE
****************************************************************************!
 
   CL_ACCESS_INDIC PROCEDURE (CL_NO BYTE,PCT CONFIG_TAB_PTR,P DATA_PTR)
 
   ENTRY
      PCT^[CL_NO,3] := PCT^[CL_NO,3] OR %01
 
      IF PCT^[CL_NO,3] AND %02 = 0 THEN
	 IF OVLDET (P) <> OVERLOAD THEN
	 ! IF LAST MESSAGE CLUSTER DOWN THEN SEND CLUSTER UP MESSAGE !
	    CL_TERM_STATUS_BUFFER (PCT^[CL_NO,1],PCT^[CL_NO,2],UP,P)
	    PCT^[CL_NO,3] := PCT^[CL_NO,3] OR %02
	 FI
      FI
   END CL_ACCESS_INDIC
 
 
END CONFIG_TABLE
!ECHO \f

!