|
DataMuseum.dkPresents historical artifacts from the history of: Intel ISIS Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Intel ISIS Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - 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