|
|
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: 19052 (0x4a6c)
Types: TextFile
Names: »STATU.SRC«
└─⟦af81bc460⟧ Bits:30005550 8" CR80 Floppy CR80FD_0034 ( MATRIX Source and Abs-files )
└─⟦af81bc460⟧ Intel_ISIS_II
└─⟦this⟧ »STATU.SRC«
\r
NLIST S\r
PASSIVATE MACRO #ID,#NO\r
;DESRIP: THE MODULE PASSIVATES\r
; SPECIFIED PROCES.\r
; IF LINK IS SET AND ACTIV\r
; SPECIAL PROCESS IS PASSIVATED\r
; THE LINK-ELEMENT IS \r
; DECREMENTED\r
;DESTR: REG F,H,L\r
IF '#ID'.EQ.'S'\r
LD HL,SYSRAM+200H+#NO*10H+5\r
;IMPLEMENT ADD OF STATUS-BIT\r
IF LINK.EQ.1\r
BIT 7,(HL) ;\r
JR Z,O#$YM ;IF PROCESS WAS NOT PASSIVE THEN\r
LD HL,SYSRAM+0FBH ;BEGIN\r
DEC (HL) ;DEC LINK-ELEMENT\r
LD HL,SYSRAM+200H+#NO*10H+5\r
;END\r
O#$YM: ENDIF\r
ENDIF\r
IF '#ID'.EQ.'N'\r
LD HL,SYSRAM+200H+S*10H+#NO*20H+5\r
;IMPLEMENT ADD OF STATUS-BIT\r
ENDIF\r
RES 7,(HL) ;PASSIVATE\r
ENDM\r
ACTIVATE MACRO #ID,#NO\r
;DESRIP: THE MODULE ACTIVATES\r
; SPECIFIED PROCES.\r
; IF LINK IS SET AND PASSIV\r
; SPECIAL PROCESS IS ACTIVATED\r
; THE LINK-ELEMENT IS \r
; INCREMENTED\r
;DESTR: REG F,H,L\r
IF '#ID'.EQ.'S'\r
LD HL,SYSRAM+200H+#NO*10H+5\r
;IMPLEMENT ADD OF STATUS-BIT\r
IF LINK.EQ.1\r
BIT 7,(HL) ;\r
JR NZ,O#$YM ;IF PROCESS WAS NOT ACTIVE THEN\r
LD HL,SYSRAM+0FBH ;BEGIN\r
INC (HL) ;INC LINK-ELEMENT\r
LD HL,SYSRAM+200H+#NO*10H+5\r
;END\r
O#$YM: ENDIF\r
ENDIF\r
IF '#ID'.EQ.'N'\r
LD HL,SYSRAM+200H+S*10H+#NO*20H+5\r
;IMPLEMENT ADD OF STATUS-BIT\r
ENDIF\r
SET 7,(HL) ;ACTIVATE\r
ENDM\r
CREATE MACRO #ID,#NO,#NAME,#PRIO\r
;DESCRIP: THE MODULE CREATES SPECIFIED\r
; PROCESS IE LOADS STARTADDRESS\r
; (#NAME) IN PROCESS-DESCRIPTION\r
; BYTE 6,7. IF NORMAL PROCESS IS\r
; ENCOUNTERED PRIORITY IS LOADED\r
; TO BYTE 5 IN PROCESS-DESCRIPTION\r
; AND THE PROCESS IS ENQUEUED IN\r
; APPROPRIATE PRIO-QUEUE.\r
; FINALLY THE SPECIFIED PROCESS\r
; IS ACTIVATED\r
;DESTR: IF NORMAL PROCESS\r
; REG. A,F,B,C,D,E,H,L\r
; IF SPECIAL PROCESS\r
; REG. F,H,L\r
LD HL,#NAME ;\r
IF '#ID'.EQ.'S'\r
LD (SYSRAM+200H+#NO*10H+6),HL\r
;STARTADD TO PROCESS-DESCRIP\r
ENDIF\r
IF '#ID'.EQ.'N'\r
LD (SYSRAM+200H+S*10H+#NO*20H+6),HL\r
;STARTADD TO PROCESS-DESCRIP\r
LD HL,SYSRAM+200H+S*10H+#NO*20H+5\r
LD (HL),#PRIO ;PRIORTY TO PROCESS\r
LD HL,SYSRAM+#PRIO*8 ;ADDRESS OF PRIO-QUEUE\r
LD DE,SYSRAM+200H+S*10H+#NO*20H ;ADDRESS OF PROCESS-DESCRIP\r
CALL SUBENQ\r
ENDIF\r
ACTIVATE #ID,#NO ;ACTIVATE PROCESS\r
ENDM\r
\r
\r
LESTAB MACRO #PRNUM\r
LD BC,#PRNUM\r
CALL ESTABR\r
ENDM\r
\r
LSUSPN MACRO #PRNUM\r
LD BC,#PRNUM\r
CALL SUSPND\r
ENDM\r
\r
GESTAM MACRO\r
LD HL,ONOFF\r
LD (HL),0FFH\r
ENDM\r
\r
GSUSPM MACRO\r
LD HL,ONOFF\r
LD (HL),0\r
ENDM\r
\r
;************************************************************************\r
; O G E P A 1\r
; VERSION 810119/CGR\r
;************************************************************************\r
;\r
OGEPA1 MACRO #CHAN\r
\r
;DESCRIP: THE MACRO DEQUEUES AN 'OUTGOING' ELE-\r
; MENT FROM DESCRIPTOR.\r
;ENTRY: -\r
;EXIT: CY=1 IF QUEUE WAS NOT EMPTY\r
; CY=0 IF QUEUE WAS EMPTY\r
; ADDRESS OF ELEMENT IN DE\r
;DESTROY: IF QUEUE WAS NOT EMPTY\r
; REG A,F,B,C,D,E,H,L,IX\r
; IF QUEUE WAS EMPTY\r
; REG F,H,L\r
;PARAMETERS: #CHAN = CHANNEL NO. ('DATATYPE')\r
;\r
;EXTERNALS: SUBDEQ,QHEADS\r
;\r
;###################### Ogepa1 macro ###########################\r
LD A,#CHAN ;FIND EMPTY QUEUE\r
LD H,A\r
SLA A\r
SLA A\r
ADD A,H\r
LD HL,QHEADS\r
LD D,0\r
LD E,A\r
ADD HL,DE\r
CALL SUBDEQ ;GET BUFFER\r
JP NC,A#$YM+3\r
PUSH DE\r
POP IX\r
LD L,(IX+4) ;DECREMENT DATABUFFER ADDRESS 2 TIMES.\r
LD H,(IX+5) ;\r
DEC HL ;\r
DEC HL ;\r
LD (IX+4),L ;\r
A#$YM: LD (IX+5),H ;\r
;######################## End macro ##############################\r
\r
ENDM\r
LIST S\r
;******************************************************************************\r
;* *\r
;* D O R A A P P L I C A T I O N S / W *\r
;* *\r
;* DEVICE: MATRIX (I/F 104) *\r
;* *\r
;* MODULE: STATUS TRANSMITTING PROCESS *\r
;* *\r
;******************************************************************************\r
\r
LINK DEFL 0\r
STATNR DEFL 8\r
\r
PUBLIC STATPR,STAC08\r
EXTRN SYSRAM,SUBDEQ,SUBENQ,SCOMMON\r
EXTRN QEMPTY,QXT,QKT,QIX,QET,QXI,PQH8\r
EXTRN TABSRC,TABDST,BYTES,BUFFT,COUNT,BYTE1,SRCEBT,DESTBT\r
EXTRN INVEST,CONDIT,STATUS,CPSTAT,CPSPEC,SRCLOG,DSTLOG\r
EXTRN ID1,QHEADS,OD1\r
\r
CSEG\r
STATPR: LD SP,STAC08 ;INITIALIZE STACKPOINTER\r
ST01: PASSIVATE S,STATNR\r
ST02: CALL SCOMMON\r
EI\r
\r
*******************************************************************************\r
QXT1: LD HL,QXT\r
CALL SUBDEQ\r
JR NC,QKT1 ;WHILE BUFFERS IN QXT DO\r
PUSH DE ;BEGIN\r
POP IX ;\r
LD A,4 ;\r
LD (BYTES),A ; LOAD EXTERNAL BYTECOUNT = 4 IN BUFFERAREA\r
LD IY,BUFFT ;\r
LD A,0EAH ;\r
LD (IY),A ; LOAD MESSAGE CODE IN BUFFERAREA\r
LD A,(IX+3) ;\r
LD (IY+1),A ; LOAD SOURCE NO. IN BUFFERAREA\r
LD A,(IX+4) ;\r
LD (IY+2),A ; LOAD DESTINATION NO. IN BUFFERAREA\r
LD A,(IX+2) ;\r
LD (IY+3),A ; LOAD CONDITION BYTE IN BUFFERAREA\r
PUSH IX ;\r
QXT2: CALL OG4 ; GET EMPTY BUFFER\r
JR C,QXT3 ;\r
CALL SCOMMON ;\r
EI ;\r
JR QXT2 ;\r
QXT3: CALL MCSEND ; SEND MESSAGE TO BOOKING SYSTEM\r
;\r
POP DE ;\r
LD HL,QEMPTY ;\r
CALL SUBENQ ; RETURN BUFFER TO EMPTY BUFFER QUEUE\r
JR QXT1 ;END-WHILE\r
\r
*******************************************************************************\r
QKT1: LD HL,QKT\r
CALL SUBDEQ\r
JR NC,QET1 ;WHILE BUFFERS IN QKT DO\r
PUSH DE ;BEGIN\r
POP IX ;\r
LD A,2 ;\r
LD (BYTES),A ; LOAD EXTERNAL BYTECOUNT = 2 IN BUFFERAREA\r
LD IY,BUFFT ;\r
LD A,82H ;\r
LD (IY),A ; LOAD MESSAGE CODE IN BUFFERAREA\r
LD A,(IX+2) ;\r
LD (IY+1),A ; LOAD KEY BYTE IN BUFFERAREA\r
PUSH IX ;\r
QKT2: CALL OG4 ; GET EMPTY BUFFER\r
JR C,QKT3 ;\r
CALL SCOMMON ;\r
EI ;\r
JR QKT2 ;\r
QKT3: CALL MCSEND ; SEND MESSAGE TO BOOKING SYSTEM\r
;\r
POP DE ;\r
LD HL,QEMPTY ;\r
CALL SUBENQ ; RETURN BUFFER TO EMPTY BUFFER QUEUE\r
JR QKT1 ;END-WHILE\r
\r
*******************************************************************************\r
QET1: LD HL,QIX\r
CALL SUBDEQ\r
JR NC,QET2 ;IF BUFFERS LEFT IN QIX THEN RETURN\r
LD HL,QEMPTY ;THESE TO EMPTY BUFFER QUEUE\r
CALL SUBENQ\r
JR QET1\r
\r
QET2: LD HL,QET\r
CALL SUBDEQ\r
JP NC,QPQH8 ;WHILE BUFFERS IN QET DO\r
PUSH DE ;BEGIN\r
POP IX ;\r
LD A,(IX+2) ;\r
AND 0BFH ;\r
CP 20H ;\r
JP Z,QET11 ; IF LISTEN-BUFFER THEN SKIP\r
CP 04H ;\r
JP Z,QET11 ; IF ST5 TEST-BUFFER THEN SKIP\r
CP 02H ;\r
JP Z,QET11 ; IF CNR TEST-BUFFER THEN SKIP\r
CP 01H ;\r
JP Z,QET11 ; IF STM TEST-BUFFER THEN SKIP\r
LD A,(IX+4) ;\r
CP 38 ;\r
JP Z,QET11 ; IF OPER.MONITORING CROSSBAR THEN SKIP\r
CP 39 ;\r
JP Z,QET11 ; IF TECHN.MONITORING CROSSBAR THEN SKIP\r
; ELSE\r
LD A,(IX+2) ;\r
LD (BYTE1),A ; SAVE STATUSBYTE FROM EXECUTE MODULE\r
LD A,80H ;\r
LD (IX+2),A ;\r
LD HL,QXI ;\r
CALL SUBENQ ; SEND "ESTABLISH"-BUFFER TO QXI AND\r
CALL INVEST ; INVESTIGATE DESTINATION STATUS\r
LD HL,QIX ;\r
CALL SUBDEQ ; GET BUFFER FROM INVEST\r
PUSH DE ;\r
POP IX ;\r
LD HL,TABSRC ;\r
LD B,0 ;\r
LD C,(IX+3) ; MAKE SOURCE NO. CONVERSION\r
ADD HL,BC ;\r
LD A,(HL) ;\r
LD (IX+3),A ;\r
LD HL,TABDST-1 ;\r
LD C,(IX+4) ; MAKE DESTINATION NO. CONVERSION\r
ADD HL,BC ;\r
LD A,(HL) ;\r
LD (IX+4),A ;\r
;\r
LD A,4 ;\r
LD (BYTES),A ; LOAD EXTERNAL BYTECOUNT = 4 IN BUFFERAREA\r
LD IY,BUFFT ;\r
LD A,0EAH ;\r
LD (IY),A ; LOAD MESSAGE CODE IN BUFFERAREA\r
LD A,(IX+3) ;\r
LD (IY+1),A ; LOAD SOURCE NO. IN BUFFERAREA\r
LD A,(IX+4) ;\r
LD (IY+2),A ; LOAD DESTINATION NO. IN BUFFERAREA\r
LD A,00 ;\r
LD (IY+3),A ; CLEAR CONDITION BYTE IN BUFFERAREA\r
;\r
BIT 1,(IX+2) ;\r
JR Z,QET3 ; IF DESTINATION IS ON AIR THEN\r
SET 2,(IY+3) ; SET BIT 2 IN CONDITION BYTE\r
QET3: BIT 4,(IX+2) ;\r
JR Z,QET4 ; IF SOURCE(IF ANY) IS INTERLOCKED THEN\r
SET 3,(IY+3) ; SET BIT 3 IN CONDITION BYTE\r
QET4: BIT 2,(IX+2) ;\r
JR Z,QET5 ; IF SOURCE(IF ANY) IS USED THEN\r
SET 4,(IY+3) ; SET BIT 4 IN CONDITION BYTE\r
;\r
QET5: RES 6,(IY+3) ; RESET BIT 6(INVOKED BY COMMAND) IN COND.BYTE\r
LD HL,CONDIT ;\r
BIT 7,(HL) ;\r
JR Z,QET6 ; IF MANUAL OPERATION IN PROGRESS THEN\r
SET 1,(IY+3) ; SET BIT 0 IN CONDITION BYTE\r
QET6: LD HL,STATUS ;\r
BIT 1,(HL) ;\r
JR Z,QET7 ; IF COMPUTER OFF THEN\r
SET 0,(IY+3) ; SET BIT 0 IN CONDITION BYTE\r
;\r
QET7: LD HL,BYTE1 ;\r
LD A,(HL) ;\r
AND 80H ;\r
CP 00H ;\r
JR NZ,QET8 ; IF RELEASE COMMAND THEN\r
; BEGIN\r
SET 5,(IY+3) ; SET BIT 5(STATUS CHANGED) IN COND.BYTE\r
RES 7,(IY+3) ; RESET BIT 7(DESTINATION FREE) IN COND.BYTE\r
JR QET10 ; END ELSE\r
QET8: BIT 0,(IX+2) ; BEGIN\r
JR Z,QET9 ; IF REQUESTED CONDITION EXIST THEN\r
SET 5,(IY+3) ; SET BIT 5(STATUS CHANGED) IN COND.BYTE\r
SET 7,(IY+3) ; SET BIT 7(DESTIN. OCCUPIED) IN COND.BYTE\r
JR QET10 ; ELSE\r
QET9: RES 5,(IY+3) ; RESET BIT 5(STATUS UNCHANGED) IN COND.BYTE\r
RES 7,(IY+3) ; RESET BIT 7(DESTINATION FREE) IN COND.BYTE\r
; END\r
QET10: PUSH IX ;\r
QET101: CALL OG4 ; GET EMPTY BUFFER\r
JR C,QET102 ;\r
CALL SCOMMON ;\r
EI ;\r
JR QET101 ;\r
QET102: CALL MCSEND ; SEND MESSAGE TO BOOKING SYSTEM\r
;\r
POP DE ;\r
QET11: LD HL,QEMPTY ;\r
CALL SUBENQ ; RETURN BUFFER TO EMPTY BUFFER QUEUE\r
;\r
JP QET2 ;END-WHILE\r
\r
*******************************************************************************\r
QPQH8: LD HL,CONDIT\r
BIT 6,(HL)\r
JP NZ,STATEND ;IF INITIALIZATION IN PROGRESS THEN SKIP\r
LD HL,PQH8\r
CALL SUBDEQ\r
JP NC,STATEND \r
PUSH DE \r
POP IX \r
LD A,0E0H \r
CP (IX+8) \r
JP NZ,S1 ;IF IT IS A "SEND TOTAL CP STATUS"-MESSAGE THEN\r
;------------------------------------------------------------------------------\r
;------------------------------------------------------------------------------\r
T1: ;BEGIN\r
LD A,0 ;\r
LD C,128 ;\r
LD HL,BUFFT ;\r
T11: LD (HL),A ; CLEAR BUFFERAREA\r
INC HL ;\r
DEC C ;\r
JR NZ,T11 ;\r
LD A,0E8H ;\r
LD (BUFFT),A ; LOAD MEESAGE CODE IN BUFFERAREA\r
LD BC,85 ; WHILE MORE DESTINATIONS LEFT DO\r
T2: LD HL,CPSTAT-1 ; BEGIN\r
ADD HL,BC ;\r
LD A,(HL) ; GET LOGIC SOURCE NO. FOR DESTINATION\r
RES 7,A ; SKIP ON AIR-DESTINATION\r
LD HL,TABDST-1 ;\r
ADD HL,BC ;\r
LD E,(HL) ; MAKE DESTINATION NO. CONVERSION\r
LD D,0 ;\r
LD HL,BUFFT ;\r
ADD HL,DE ;\r
PUSH HL ;\r
LD HL,TABSRC ;\r
LD E,A ;\r
LD D,0 ; MAKE SOURCE NO. CONVERSION\r
ADD HL,DE ;\r
LD E,(HL) ;\r
POP HL ; LOAD SOURCE NO. IN BUFFERAREA\r
LD (HL),E ; IN THE BYTE CORRESPONDING TO\r
DEC C ; THE DESTINATION IN QUESTION\r
JR NZ,T2 ; END-WHILE\r
;\r
LD E,00 ;\r
LD HL,BUFFT+38 ;\r
LD (HL),E ; SKIP MONITOR DESTINATIONS\r
INC HL ;\r
LD (HL),E ;\r
LD HL,CONDIT ;\r
BIT 7,(HL) ;\r
JR Z,T3 ; IF MANUAL OPERATION IN PROGRESS THEN\r
SET 1,E ; SET BIT 1 IN CONDITION BYTE\r
T3: LD HL,STATUS ;\r
BIT 1,(HL) ;\r
JR Z,T4 ; IF COMPUTER OFF THEN\r
SET 0,E ; SET BIT 0 IN CONDITION BYTE\r
T4: LD HL,BUFFT+95 ;\r
LD (HL),E ; LOAD CONDITION BYTE IN BUFFERAREA\r
LD A,96 ;\r
LD (BYTES),A ; LOAD EXTERNAL BYTECOUNT IN BUFFERAREA\r
PUSH IX ;\r
LD A,(IX-2) ;\r
LD (CHNUM),A ; SAVE CR80 CHANNEL NUMBER\r
CALL MCR80 ; SEND MESSAGE TO CR80 IN QUESTION\r
POP DE ;\r
CALL ID1 ; RETURN COMMAND BUFFER TO EMPTY BUFFER QUEUE\r
JP QPQH8 ;END\r
;------------------------------- ELSE ---------------------------------------\r
S1: LD A,00 \r
CP (IX+10) \r
JP NZ,QPD1 ;IF ONLY SOURCE SPECIFIED THEN\r
;----------------------------------------------------------------------------\r
;----------------------------------------------------------------------------\r
;BEGIN\r
LD A,(IX+9) ;\r
CALL SRCLOG ; MAKE SOURCE NO.CONVERSION\r
JP NZ,NVALID ; IF NO VALID SOURCE NO. GOTO NVALID\r
LD A,L ;\r
LD (SRCEBT),A ; SAVE LOGIC SOURCE NO. IN (SRCEBT)\r
LD A,0 ;\r
LD C,128 ;\r
LD HL,BUFFT ;\r
S11: LD (HL),A ; CLEAR BUFFERAREA\r
INC HL ;\r
DEC C ;\r
JR NZ,S11 ;\r
LD (BYTE1),A ; CLEAR BYTE1\r
LD A,0ECH ;\r
LD (BUFFT),A ; LOAD MESSAGE CODE IN BUFFERAREA\r
LD A,(IX+9) ;\r
LD (BUFFT+1),A ; LOAD SOURCE NO. IN BUFFERAREA\r
LD A,2 ;\r
LD (COUNT),A ; INITIALIZE COUNT = 2\r
LD BC,85 ; WHILE MORE DESTINATIONS LEFT DO\r
S2: ; BEGIN\r
LD A,38 ;\r
CP C ;\r
JR Z,S4 ; SKIP MONITOR DESTINATIONS\r
LD A,39 ;\r
CP C ;\r
JR Z,S4 ;\r
LD HL,CPSTAT-1 ;\r
ADD HL,BC ;\r
LD A,(HL) ; GET LOGIC SOURCE NO. FOR THE DESTINATION\r
RES 7,A ; SKIP ON AIR-INDICATION\r
LD HL,SRCEBT ;\r
CP (HL) ;\r
JR NZ,S4 ; IF THE RIGHT SOURCE NO. THEN\r
PUSH BC ; BEGIN\r
LD H,A ;\r
LD L,C ;\r
CALL CPSPEC ; TEST IF CURRENT DESTINATION\r
INC HL ; INTERLOCKS THE SOURCE\r
BIT 0,(HL) ;\r
JR Z,S3 ; IF YES\r
LD HL,BYTE1 ; THEN\r
SET 3,(HL) ; SET BIT 3 IN CONDITION BYTE\r
S3: POP BC ;\r
LD HL,TABDST-1 ;\r
ADD HL,BC ;\r
LD A,(HL) ; MAKE DESTINATION NO. CONVERSION\r
LD HL,COUNT ;\r
LD E,(HL) ; GET BYTE-DISPLACEMENT\r
LD D,0 ;\r
INC (HL) ; INCREMENT COUNT\r
LD HL,BUFFT ;\r
ADD HL,DE ;\r
LD (HL),A ; LOAD DESTINATION NO. IN BUFFERAREA\r
S4: DEC C ; END\r
JR NZ,S2 ; END-WHILE\r
LD A,0 ;\r
LD HL,COUNT ;\r
PUSH HL ;\r
LD E,(HL) ; GET BYTE-DISPLACEMENT\r
LD D,0 ;\r
INC (HL) ; INCREMENT COUNT\r
LD HL,BUFFT ;\r
ADD HL,DE ;\r
LD (HL),A ; LOAD NULL-BYTE IN BUFFERAREA\r
LD HL,BYTE1 ;\r
LD A,(CONDIT) ;\r
BIT 7,A ;\r
JR Z,S5 ; IF MANUAL OPERATION IN PROGRESS THEN\r
SET 1,(HL) ; SET BIT 1 IN CONDITION BYTE\r
S5: LD A,(STATUS) ;\r
BIT 1,A ;\r
JR Z,S6 ; IF COMPUTER OFF THEN\r
SET 0,(HL) ; SET BIT 0 IN CONDITION BYTE\r
S6: POP HL ;\r
LD E,(HL) ; GET BYTE-DISPLACEMENT\r
LD D,0 ;\r
INC (HL) ; INCREMENT COUNT\r
PUSH HL ;\r
LD HL,BUFFT ;\r
ADD HL,DE ;\r
LD A,(BYTE1) ;\r
LD (HL),A ; LOAD CONDITION BYTE IN BUFFERAREA\r
POP HL ;\r
LD A,(HL) ; GET COUNT\r
LD (BYTES),A ; LOAD EXTERNAL BYTECOUNT IN BUFFERAREA\r
PUSH IX ;\r
LD A,(IX-2) ;\r
LD (CHNUM),A ; SAVE CR80 CHANNEL NUMBER\r
CALL MCR80 ; SEND MESSAGE TO CR80 IN QUESTION\r
POP IX ;\r
JR S7 ;\r
; -------------------------\r
NVALID: ; IF SOURCE NO. IS NOT VALID THEN\r
LD A,3 ; BEGIN\r
LD (BYTES),A ; LOAD EXTERNAL BYTECOUNT = 3 IN BUFFERAREA\r
LD A,0ECH ;\r
LD IY,BUFFT ;\r
LD (IY),A ;\r
LD A,00 ;\r
LD (IY+1),A ;\r
LD (IY+2),A ;\r
LD HL,CONDIT ;\r
BIT 7,(HL) ;\r
JR Z,N1 ; IF MANUAL OPERATION IN PROGRESS THEN\r
SET 1,(IY+2) ; SET BIT 1 IN CONDITION BYTE\r
N1: LD HL,STATUS ;\r
BIT 1,(HL) ;\r
JR Z,N2 ; IF COMPUTER OFF THEN\r
SET 0,(IY+2) ; SET BIT 0 IN CONDITION BYTE\r
N2: PUSH IX ;\r
LD A,(IX-2) ;\r
LD (CHNUM),A ; SAVE CR80 CHANNEL NUMBER\r
CALL MCR80 ; SEND MESSAGE TO CR80 IN QUESTION\r
POP IX ; END\r
; -------------------------\r
S7: PUSH IX ;\r
POP DE ;\r
CALL ID1 ; RETURN COMMAND BUFFER TO EMPTY BUFFER QUEUE\r
JP QPQH8 ;END\r
\r
;------------------------------- ELSE -----------------------------------------\r
;------------------------------------------------------------------------------\r
QPD1: LD HL,QEMPTY ;BEGIN\r
CALL SUBDEQ ;\r
JR C,QPD2 ;\r
PUSH IX ;\r
CALL SCOMMON ;\r
EI ;\r
POP IX ;\r
JR QPD1 ;\r
QPD2: PUSH DE ;\r
POP IY ;\r
;\r
LD A,(IX+10) ;\r
CP 61 ;\r
JR NZ,QPD3 ;\r
LD A,38 ; IF DESTINATION NO.= 61 THEN\r
LD (IX+10),A ; REPLACE IT WITH 38\r
QPD3: CP 62 ;\r
JR NZ,QPD4 ;\r
LD A,39 ; IF DESTINATION NO.= 62 THEN\r
LD (IX+10),A ; REPLACE IT WITH 39\r
QPD4: CP 63 ;\r
JR NZ,QPD5 ;\r
LD A,40 ; IF DESTINATION NO.= 63 THEN\r
LD (IX+10),A ; REPLACE IT WITH 40\r
;\r
QPD5: CALL DSTLOG ; MAKE DESTINATION NO. CONVERSION\r
JP NZ,NVALID ; IF NO VALID DESTIN.NO. GOTO NVALID\r
LD (IY+4),L ;\r
;\r
LD A,00 ;\r
LD (IY+2),A ;\r
LD (IY+3),A ;\r
;\r
PUSH IY ;\r
PUSH IX ;\r
POP DE ;\r
LD A,(IX-2) ;\r
LD (CHNUM),A ; SAVE CR80 CHANNEL NUMBER\r
CALL ID1 ; RETURN COMM. BUFFER TO EMPTY BUFFER QUEUE\r
POP DE ;\r
LD HL,QXI ;\r
CALL SUBENQ ; SEND INTERNAL COMM.BUFFER TO QXI AND\r
CALL INVEST ; INVESTIGATE DESTINATION STATUS\r
LD HL,QIX ;\r
CALL SUBDEQ ; GET BUFFER FROM INVEST\r
PUSH DE ;\r
POP IX ;\r
;\r
LD A,4 ;\r
LD (BYTES),A ; LOAD EXTERNAL BYTECOUNT = 4 IN BUFFERAREA\r
LD IY,BUFFT ;\r
LD A,0EAH ;\r
LD (IY),A ; LOAD MESSAGE CODE IN BUFFERAREA\r
LD A,(IX+3) ;\r
LD (IY+1),A ; LOAD SOURCE NO. IN BUFFERAREA\r
LD A,(IX+4) ;\r
LD (IY+2),A ; LOAD DESTINATION NO. IN BUFFERAREA\r
LD A,00 ;\r
LD (IY+3),A ; CLEAR CONDITION BYTE IN BUFFERAREA\r
; BEGIN\r
SET 6,(IY+3) ; SET BIT 6(INVOKED BY REQUEST) IN COND.BYTE\r
BIT 1,(IX+2) ;\r
JR Z,QPD6 ; IF DESTINATION IS ON AIR THEN\r
SET 2,(IY+3) ; SET BIT 2 IN CONDITION BYTE\r
QPD6: BIT 4,(IX+2) ;\r
JR Z,QPD7 ; IF SOURCE(IF ANY) IS INTERLOCKED THEN\r
SET 3,(IY+3) ; SET BIT 3 IN CONDITION BYTE\r
QPD7: BIT 2,(IX+2) ;\r
JR Z,QPD8 ; IF SOURCE(IF ANY) IS USED THEN\r
SET 4,(IY+3) ; SET BIT 4 IN CONDITION BYTE\r
QPD8: BIT 0,(IX+2) ;\r
JR NZ,QPD9 ; IF DESTINATION OCCUPIED THEN\r
SET 7,(IY+3) ; SET BIT 7 IN CONDITION BYTE\r
QPD9: LD HL,CONDIT ;\r
BIT 7,(HL) ;\r
JR Z,QPD10 ; IF MANUAL OPERATION IN PROGRESS THEN\r
SET 1,(IY+3) ; SET BIT 1 IN CONDITION BYTE\r
QPD10: LD HL,STATUS ;\r
BIT 1,(HL) ;\r
JR Z,QPD11 ; IF COMPUTER OFF THEN\r
SET 0,(IY+3) ; SET BIT 0 IN CONDITION BYTE\r
; END\r
QPD11: PUSH IX ;\r
CALL MCR80 ; SEND MESSAGE TO CR80 IN QUESTION\r
POP DE ;\r
LD HL,QEMPTY ;\r
CALL SUBENQ ; RETURN BUFFER TO EMPTY BUFFER QUEUE\r
JP QPQH8 ;END\r
\r
STATEND LD A,0\r
LD HL,QXT+1\r
CP (HL)\r
JP NZ,ST02 ;IF BUFFERS IN QXT GOTO ST02\r
LD HL,QKT+1\r
CP (HL)\r
JP NZ,ST02 ;IF BUFFERS IN QKT GOTO ST02\r
LD HL,QET+1\r
CP (HL)\r
JP NZ,ST02 ;IF BUFFERS IN QET GOTO ST02\r
LD HL,PQH8+1\r
CP (HL)\r
JP NZ,ST02 ;IF BUFFERS IN PQH8 GOTO ST02\r
;ELSE\r
JP ST01 ;PASSIVATE STATUS TRANSMITTING PROCESS\r
\r
*******************************************************************************\r
* CR80 MESSAGE SUBROUTINE *\r
*******************************************************************************\r
\r
MCR80: LD HL,TABNO+2\r
LD A,(CHNUM)\r
LD BC,3\r
CPDR\r
RET NZ\r
SLA C\r
LD HL,TABOG\r
ADD HL,BC\r
LD E,(HL)\r
INC HL\r
LD D,(HL)\r
EX DE,HL\r
MCR1: PUSH HL\r
CALL BUFGET ;FETCH BUFFER\r
JR C,MCR2\r
CALL SCOMMON\r
EI\r
POP HL\r
JR MCR1\r
MCR2: POP HL\r
CALL MCSEND ;TRANSMIT BUFFER TO CR80\r
RET\r
\r
BUFGET: JP (HL)\r
\r
TABNO: DB 2\r
DB 3\r
DB 4\r
\r
TABOG: DW OG2\r
DW OG3\r
DW OG4\r
\r
;--------------------------------------------------------------------\r
MCSEND: PUSH DE ;BEGIN\r
LD HL,2 ;\r
ADD HL,DE ;\r
LD A,(BYTES) ;\r
LD (HL),A ; UPDATE BYTECOUNT\r
LD HL,8 ;\r
ADD HL,DE ;\r
LD DE,BUFFT ;\r
EX DE,HL ;\r
LD B,0 ;\r
LD C,A ;\r
LDIR ; FILL BUFFER\r
POP DE ;\r
CALL OD1 ; TRANSMIT BUFFER TO CR80\r
;END\r
RET\r
\r
\r
\r
OG2: OGEPA1 2\r
RET\r
\r
OG3: OGEPA1 3\r
RET\r
\r
OG4: OGEPA1 4\r
RET\r
\r
\r
*******************************************************************************\r
\r
DSEG\r
CHNUM DS 1\r
DS 32\r
STAC08:\r
END\r