|
|
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: 6709 (0x1a35)
Types: TextFile
Names: »CONFTAB.S«
└─⟦e12128f26⟧ Bits:30005200 8" Zilog MCZ/1 Floppy CR80FD_0026 ( TC 500 SEC. PROTOCOL BB V1 830407 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
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
!