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 - download
Length: 6615 (0x19d7) Types: TextFile Names: »CONFTAB.S«
└─⟦a3edd706e⟧ Bits:30005202 8" Zilog MCZ/1 Floppy CR80FD_0028 ( TC 500 SEC. PROTOCOL BACK UP ! (V1) BB A1 820907 NCJ ) └─ ⟦this⟧ »CONFTAB.S«
!****************************************************************************** * * 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 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 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 !