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: 27037 (0x699d) Types: TextFile Names: »EXEC.SRC«
└─⟦af81bc460⟧ Bits:30005550 8" CR80 Floppy CR80FD_0034 ( MATRIX Source and Abs-files ) └─⟦af81bc460⟧ Intel_ISIS_II └─ ⟦this⟧ »EXEC.SRC«
;******************************************************************************\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: EXECUTE PROCESS *\r ;* *\r ;******************************************************************************\r \r LINK EQU 0\r VIDEO EQU 12\r AUDIO EQU 11\r STATNR EQU 8\r EXECUTE EQU 09\r PANEL EQU 07\r PORT20 DEFL 4020H\r PORT68 DEFL 4024H\r \r ;PASSIVATE\r ;ACTIVATE\r \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 LIST S\r \r PUBLIC EXEC,STAC09\r EXTRN SYSRAM,SUBDEQ,SUBENQ,SCOMMON,CPSTAT,CPSPEC,ECOND2\r EXTRN QKE,QEV,QME,QEA,QEK,QET,QEMPTY,QTEMP\r \r CSEG\r \r EXEC: LD SP,STAC09 ;INITIALIZE PRIVAT STACKPOINTER\r LD A,0\r LD (FLAG1),A ;CLEAR CP ERROR-FLAG + NACK-FLAG\r LD (ACKCNT),A ;CLEAR ACKCOUNT\r PASPRO: PASSIVATE S,EXECUTE\r CALL SCOMMON\r EI\r START: LD HL,QKE\r CALL SUBDEQ ;DEQUE INCOMING BUFFER\r JR C,ST1 ;IF NO MORE INCOMING BUFFERS AND\r ;WHILE BUFFERS IN TEMPORARY QUEUE DO\r ;BEGIN\r B0: LD HL,QTEMP ;\r CALL SUBDEQ ; GET BUFFER FROM TEMPORARY QUEUE\r JR NC,PASPRO ; IF NO MORE BUFFERS, PASSIVATE EXECUTE PROC.\r PUSH DE ; SAVE TEMPORARY BUFFER ADDRESS\r B1: LD HL,QEMPTY ;\r CALL SUBDEQ ;\r JR C,B2 ;\r CALL SCOMMON ;\r EI ;\r JR B1 ;\r B2: POP HL ; GET TEMPORARY BUFFER ADDRESS\r PUSH HL ; SAVE ----------------\r LD BC,5 ;\r LDIR ;\r LD BC,5 ;\r EX DE,HL ;\r AND A ;\r SBC HL,BC ;\r EX DE,HL ;\r LD HL,QEK ;\r CALL SUBENQ ; SEND REPLY-BUFFER TO KEYBOARD MODULE\r ACTIVATE S,PANEL ;\r POP DE ; GET TEMPORARY BUFFER ADDRESS\r LD HL,QET ;\r CALL SUBENQ ; SEND REPLY-BUFFER TO STATUS TRANSM. PROCESS\r ACTIVATE S,STATNR ;\r JR B0 ;END-WHILE\r \r ST1: LD (QKEBUF),DE ;SAVE BUFFERADDRESS\r LD IX,(QKEBUF)\r LD A,(IX+2)\r CP 80H\r JR Z,ESTREL ;GOTO ESTABLISH/RELEASE ROUTINE\r CP 00H\r JR Z,ESTREL ;GOTO ESTABLISH/RELEASE ROUTINE\r CP 20H\r JP Z,LISTEN ;GOTO LISTEN-ROUTINE\r CP 08H\r JP Z,ONAIR ;GOTO ONAIR-ROUTINE\r CP 10H\r JP Z,DISUPD ;GOTO DISPLAY UPDATING-ROUTINE\r \r JP TEST ;GOTO TEST-ROUTINE\r \r \r *******************************************************************************\r *******************************************************************************\r * ESTABLISH/RELEASE ROUTINE *\r *******************************************************************************\r ESTREL: BIT 7,(IX+2)\r JR NZ,ESTISH ;IF ESTABLISH COMMAND THEN GOTO ESTISH ELSE\r JP RELEASE ;GOTO RELEASE\r \r ;------------------------------------------------------------------------------\r ;-----------------------------------------------------------------------------\r ESTISH: LD H,(IX+3)\r LD L,(IX+4)\r CALL CPSPEC ;GET ADDRESS OF 1.BYTE OF CP SPEC.\r LD (SPECSAV),HL ;SAVE THE ADDRESS\r \r LD A,0FFH\r AND (HL)\r JP Z,CRP1 ;IF VIDEO/PULSE MATRIX CP THEN\r \r \r EST1: LD HL,QEMPTY ;BEGIN\r CALL SUBDEQ ; GET EMPTY BUFFER\r JR C,EST2 ;\r CALL SCOMMON ;\r EI ;\r JR EST1 ;\r EST2: LD (QEVBUF),DE ; SAVE VIDEO BUFFER ADDRESS\r LD IY,(QEVBUF) ;\r LD IX,(QKEBUF) ;\r LD A,(IX+3) ; TRANSFER SOURCE AND DESTINATION\r LD (IY+3),A ; TO VIDEO BUFFER\r LD A,(IX+4) ;\r LD (IY+4),A ;\r LD HL,(SPECSAV) ;\r LD A,(HL) ;\r AND 0FCH ;\r LD (IY+2),A ; TRANSFER 1.BYTE OF CP SPEC. TO VIDEO BUF.\r BIT 5,A ;\r JR Z,EST8 ; IF NO PULSE-CP THEN SKIP PULSE UPDATING\r BIT 2,A ; ELSE\r JR Z,EST4 ;\r BIT 3,A ;\r JR NZ,EST5 ;\r EST3: ; BEGIN\r CALL STMROUT ; UPDATE PULSE IN ACCORDANCE WITH\r JR EST8 ; STATUS OF STM, (T1) OR (T3)\r ; END ELSE\r EST4: ; BEGIN\r NOP ; UPDATE PULSE IN ACCORDANCE WITH (T2)\r JR EST8 ; END ELSE\r EST5: ; BEGIN\r LD HL,CPSTAT+17 ;\r LD B,7 ;\r EST6: LD A,(HL) ;\r AND 7FH ; MASK OUT ON AIR BIT\r CP 19 ;\r JR Z,EST7 ;\r INC HL ;\r DEC B ;\r JR NZ,EST6 ;\r LD A,(CPSTAT+66) ;\r AND 7FH ; UPDATE PULSE IN ACCORDANCE WITH (T3)\r CP 19 ; EXCEPT IF STM HAS A ST5 INPUT AS\r JR NZ,EST8 ; DESTINATION THEN\r EST7: ; BEGIN\r LD A,(IY+2) ;\r AND 0F0H ;\r OR 04H ; UPDATE PULSE IN ACCORDANCE WITH (T1)\r LD (IY+2),A ;\r ; END\r ; END\r ;\r EST8: LD IY,(QEVBUF) ;\r SET 0,(IY+2) ; SET ESTABLISH-BIT\r LD HL,QEV ;\r LD DE,(QEVBUF) ;\r CALL SUBENQ ; SEND BUFFER TO VIDEO/PULSE MODULE\r ACTIVATE S,VIDEO ;\r LD HL,ACKCNT ;\r INC (HL) ; INCREMENT ACKCOUNT\r JP CRP1 ;END\r \r ;------------------------------------------------------------------------------\r RELEASE LD A,(IX+3)\r CP 00H\r JP Z,CRP20 ;IF ALLREADY RELEASED, THEN SKIP RELEASING\r \r LD H,(IX+3)\r LD L,(IX+4)\r CALL CPSPEC ;GET ADDRESS OF 1.BYTE OF CP SPEC.\r LD (SPECSAV),HL ;SAVE THE ADDRESS\r \r LD A,0FCH\r AND (HL)\r JR Z,CRP1 ;IF VIDEO/PULSE MATRIX CP THEN\r \r \r REL1: LD HL,QEMPTY ;BEGIN\r CALL SUBDEQ ; GET EMPTY BUFFER\r JR C,REL2 ;\r CALL SCOMMON ;\r EI ;\r JR REL1 ;\r REL2: LD (QEVBUF),DE ; SAVE VIDEO BUFFER ADDRESS\r LD IY,(QEVBUF) ;\r LD IX,(QKEBUF) ;\r LD A,(IX+3) ; TRANSFER SOURCE AND DESTINATION\r LD (IY+3),A ; TO VIDEO BUFFER\r LD A,(IX+4) ;\r LD (IY+4),A ;\r LD HL,(SPECSAV) ;\r LD A,(HL) ;\r AND 0FCH ;\r LD (IY+2),A ; TRANSFER 1.BYTE OF CP SPEC. TO VIDEO-BUF.\r BIT 5,A ;\r JR Z,REL4 ; IF NO PULSE CP THEN SKIP PULSE UPDATING\r BIT 2,A ; ELSE\r JR Z,REL3 ;\r BIT 3,A ;\r JR NZ,REL3 ; IF (T1)-INDICATION THEN\r ; BEGIN\r LD A,(IY+2) ;\r OR 0CH ;\r LD (IY+2),A ; UPDATE TEMPORARY PULSE TO (T3)\r ;\r CALL STMROUT ; UPDATE PULSE IN ACCORDANCE WITH\r JR REL4 ; STATUS OF STM, (T1) OR (T3)\r ; END ELSE\r REL3: ; BEGIN\r LD A,(IY+2) ;\r AND 0F0H ;\r OR 04H ;\r LD (IY+2),A ; UPDATE PULSE IN ACCORDANCE WITH (T1)\r ; END\r ;\r REL4: LD IY,(QEVBUF) ;\r RES 0,(IY+2) ; RESET ESTABLISH-BIT\r LD HL,QEV ;\r LD DE,(QEVBUF) ;\r CALL SUBENQ ; SEND BUFFER TO VIDEO/PULSE MODULE\r ACTIVATE S,VIDEO ;\r LD HL,ACKCNT ;\r INC (HL) ; INCREMENT ACKCOUNT\r ;END\r \r ;------------------------------------------------------------------------------\r ;------------------------------------------------------------------------------\r CRP1: LD IX,(SPECSAV)\r BIT 4,(IX+1)\r JR Z,CRP6 ;IF AUDIO/TIME CODE MATRIX CP THEN\r ;BEGIN\r CRP2: LD HL,QEMPTY ;\r CALL SUBDEQ ; GET EMPTY BUFFER\r JR C,CRP3 ;\r CALL SCOMMON ;\r EI ;\r JR CRP2 ;\r CRP3: LD (QEVBUF),DE ; SAVE AUDIO BUFFER ADDRESS\r LD IY,(QEVBUF) ;\r LD IX,(QKEBUF) ;\r LD A,(IX+3) ; TRANSFER SOURCE AND DESTINATION\r LD (IY+3),A ; TO AUDIO BUFFER\r LD A,(IX+4) ;\r LD (IY+4),A ;\r BIT 7,(IX+2) ;\r JR Z,CRP4 ;\r LD (IY+2),01H ; SET/RESET ESTABLISH-BIT\r JR CRP5 ; IN ACCORDANCE WITH COMMAND\r CRP4: LD (IY+2),00H ;\r ;\r CRP5: LD HL,QEA ;\r LD DE,(QEVBUF) ;\r CALL SUBENQ ; SEND BUFFER TO AUDIO/TIME CODE MODULE\r ACTIVATE S,AUDIO ;\r LD HL,ACKCNT ;\r INC (HL) ; INCREMENT ACKCOUNT\r ;END\r ;------------------------------------------------------------------------------\r \r CRP6: PASSIVATE S,EXECUTE\r CALL SCOMMON\r EI\r CALL ACKROUT ;COLLECT ACK/NACK-REPLY'S\r LD A,(ACKCNT)\r AND 0FFH \r JR NZ,CRP6\r \r LD A,(FLAG1)\r BIT 2,A ;IF CP ERROR-FLAG IS SET THEN\r JP NZ,CRP16 ;SKIP EXTRA CP CHECKING , ELSE\r LD IX,(SPECSAV)\r BIT 0,(IX)\r JP Z,CRP16 ;IF EXTRA CP THEN\r ;------------------------------------------------------------------------------\r ;BEGIN\r CRP7: LD HL,QEMPTY ;\r CALL SUBDEQ ; GET EMPTY BUFFER\r JR C,CRP8 ;\r CALL SCOMMON ;\r EI ;\r JR CRP7 ;\r CRP8: LD (QEVBUF),DE ; SAVE VIDEO BUFFER ADDRESS\r LD IY,(QEVBUF) ;\r LD IX,(SPECSAV) ;\r LD A,(IX+2) ;\r LD (IY+3),A ; TRANSFER SOURCE AND DESTINATION\r LD A,(IX+3) ; TO VIDEO BUFFER\r LD (IY+4),A ;\r LD IX,(QKEBUF) ;\r BIT 7,(IX+2) ;\r JR Z,CRP9 ; SET/RESET ESTABLISH-BIT\r LD (IY+2),41H ; IN ACCORDANCE WITH COMMAND\r JR CRP10 ;\r CRP9: LD (IY+2),40H ;\r ;\r CRP10: LD HL,QEV ;\r LD DE,(QEVBUF) ;\r CALL SUBENQ ; SEND BUFFER TO VIDEO/PULSE MODULE\r ACTIVATE S,VIDEO ;\r LD HL,ACKCNT ;\r INC (HL) ; INCREMENT ACKCOUNT\r CRP11: LD HL,QEMPTY ;\r CALL SUBDEQ ; GET EMPTY BUFFER\r JR C,CRP12 ;\r CALL SCOMMON ;\r EI ;\r JR CRP11 ;\r CRP12: LD (QEVBUF),DE ; SAVE AUDIO BUFFER ADDRESS\r LD IY,(QEVBUF) ;\r LD IX,(SPECSAV) ;\r LD A,(IX+2) ;\r LD (IY+3),A ; TRANSFER SOURCE AND DESTINATION\r LD A,(IX+3) ; TO AUDIO BUFFER\r LD (IY+4),A ;\r LD IX,(QKEBUF) ;\r BIT 7,(IX+2) ;\r JR Z,CRP13 ; SET/RESET ESTABLISH-BIT\r LD (IY+2),01H ; IN ACCORDANCE WITH COMMAND\r JR CRP14 ;\r CRP13: LD (IY+2),00H ;\r ;\r CRP14: LD HL,QEA ;\r LD DE,(QEVBUF) ;\r CALL SUBENQ ; SEND BUFFER TO AUDIO/TIME CODE MODULE\r ACTIVATE S,AUDIO ;\r LD HL,ACKCNT ;\r INC (HL) ; INCREMENT ACKCOUNT\r ;\r CRP15: PASSIVATE S,EXECUTE\r CALL SCOMMON\r EI \r CALL ACKROUT ; COLLECT ACK/NACK-REPLY'S\r LD A,(ACKCNT) \r AND 0FFH \r JR NZ,CRP15 ;END\r \r ;------------------------------------------------------------------------------\r CRP16: LD A,(FLAG1)\r BIT 7,A\r JP NZ,CRP21 ;IF NACK-FLAG IS NOT SET THEN\r ;BEGIN\r BIT 2,A ;\r JR NZ,CRP19 ; IF CP ERROR-FLAG IS NOT SET THEN\r ;\r ; BEGIN\r LD IX,(QKEBUF) ;\r SET 6,(IX+2) ; SET ACK-BIT IN BUFFER\r ;\r CALL BUFTEMP ; ENQUE REPLY-BUFFER IN TEMPORARY QUEUE\r ;\r LD IX,(QKEBUF) ;\r BIT 7,(IX+2) ;\r CALL Z,ATROAR ; IF RELEASE COMMAND THEN CALL\r ; ATR RELEASE CHECK SUBROUTINE\r LD HL,CPSTAT-1 ;\r LD B,0 ;\r LD C,(IX+4) ;\r ADD HL,BC ;\r LD A,(HL) ;\r AND 80H ; SAVE ON AIR-BIT\r BIT 7,(IX+2) ; UPDATE STATUS TABLE WITH SOURCE/RELEASE\r JR Z,CRP17 ;\r LD D,(IX+3) ;\r OR D ;\r LD (HL),A ;\r JR CRP18 ;\r CRP17: LD (HL),A ;\r ;\r CRP18: BIT 7,(IX+2) ;\r JR Z,CRP22 ; IF ESTABLISH COMMAND THEN\r ; BEGIN\r LD A,(IX+3) ;\r LD (SRCEBUF),A ; SAVE SOURCE NO.\r LD A,(IX+4) ;\r LD (DESTBUF),A ; SAVE DESTINATION NO.\r CALL OAROUT ; CALL ON AIR SUBROUTINE\r JR CRP22 ; END\r ; END\r ; ELSE\r CRP19: ; BEGIN\r LD IX,(QKEBUF) ; CALL ATR RELEASE CHECK SUBROUTINE\r CALL ATROAR ;\r LD HL,CPSTAT-1 ;\r LD B,0 ;\r LD C,(IX+4) ;\r ADD HL,BC ; UPDATE STATUS TABLE WITH RELEASE\r LD A,(HL) ;\r AND 80H ; SAVE ON AIR-BIT\r LD (HL),A ;\r LD HL,ECOND2 ;\r SET 1,(HL) ; SET DEVICE CONTROL ERROR BIT\r BIT 7,(IX+2) ;\r JR Z,CRP20 ; IF ESTABLISH COMMAND THEN\r ; BEGIN\r LD HL,FLAG1 ;\r RES 2,(HL) ; RESET CP ERROR-FLAG\r SET 7,(HL) ; SET NACK-FLAG\r RES 7,(IX+2) ; CONVERT TO RELEASE-COMMAND\r JR CRP22 ; END ELSE\r CRP20: ; BEGIN\r RES 6,(IX+2) ; RESET ACK-BIT IN BUFFER\r ;\r CALL BUFTEMP ; ENQUE REPLY-BUFFER IN TEMPORARY QUEUE\r ;\r JR CRP22 ; END\r ; END\r ;END\r ;ELSE\r CRP21: ;BEGIN\r LD IX,(QKEBUF) ;\r SET 7,(IX+2) ; RE-ESTABLISH COMMAND BYTE IN BUFFER\r RES 6,(IX+2) ; RESET ACK-BIT IN BUFFER\r ;\r CALL BUFTEMP ; ENQUE REPLY-BUFFER IN TEMPORARY QUEUE\r ;\r JR CRP22 ;END\r ;------------------------------------------------------------------------------\r CRP22: LD IX,(QKEBUF)\r LD A,(FLAG1)\r BIT 7,A\r JP NZ,ESTREL ;IF NACK-FLAG IS SET GOTO ESTREL AGAIN\r JP START\r \r \r \r \r \r *******************************************************************************\r *******************************************************************************\r * LISTEN ROUTINE *\r *******************************************************************************\r LISTEN: LD HL,QEMPTY\r CALL SUBDEQ ;GET EMPTY BUFFER\r JR C,L2\r CALL SCOMMON\r EI\r JR LISTEN\r L2: LD (QEVBUF),DE ;SAVE AUDIO BUFFER ADDRESS\r LD IY,(QEVBUF) \r LD IX,(QKEBUF)\r LD A,(IX+3) ;TRANSFER SOURCE AND DESTINATION\r LD (IY+3),A ;TO AUDIO BUFFER\r LD A,(IX+4)\r LD (IY+4),A\r LD (IY+2),80H ;SET LISTEN-BIT IN BUFFER\r LD HL,QEA\r LD DE,(QEVBUF)\r CALL SUBENQ ;SEND BUFFER TO AUDIO/TIME CODE MODULE\r ACTIVATE S,AUDIO\r LD HL,ACKCNT\r INC (HL) ;INCREMENT ACKCOUNT\r JR WAIT ;GOTO WAIT-ROUTINE\r \r \r \r \r \r *******************************************************************************\r *******************************************************************************\r * TEST ROUTINE *\r *******************************************************************************\r TEST: LD HL,QEMPTY\r CALL SUBDEQ ;GET EMPTY BUFFER\r JR C,TS2\r CALL SCOMMON\r EI\r JR TEST\r TS2: LD (QEVBUF),DE ;SAVE VIDEO BUFFER ADDRESS\r LD IY,(QEVBUF)\r LD IX,(QKEBUF)\r LD A,(IX+2) ;GET COMMAND BYTE FROM INCOMING BUFFER\r CP 04H\r JR Z,ST5TST ;GOTO ST5TEST-ROUTINE\r CP 02H\r JR Z,CNRTST ;GOTO CNRTEST-ROUTINE\r \r STMTST: ;BEGIN\r LD HL,CPSTAT+17 ;\r LD BC,7 ;\r LD A,19 ;\r CPIR ;\r JR Z,CNRTST ;\r LD HL,CPSTAT+66 ;\r CP (HL) ; IF STM HAS A ST5 INPUT AS DESTINATION\r JR Z,CNRTST ; THEN GOTO CNRTEST-ROUTINE(T1) , ELSE\r LD (IY+2),2CH ; UPDATE PULSE IN ACCORDANCE WITH (T3)\r JR T1 ;END\r \r CNRTST: ;BEGIN\r LD (IY+2),24H ; UPDATE PULSE IN ACCORDANCE WITH (T1)\r JR T1 ;END\r \r ST5TST: ;BEGIN\r LD (IY+2),28H ; UPDATE PULSE IN ACCORDANCE WITH (T2)\r ;END\r \r T1: LD (IY+3),30 ;INSERT SOURCE = TEST\r LD (IY+4),00H ;INSERT DUMMY DESTINATION\r LD HL,QEV\r LD DE,(QEVBUF)\r CALL SUBENQ ;SEND BUFFER TO VIDEO/PULSE MODULE\r ACTIVATE S,VIDEO\r LD HL,ACKCNT\r INC (HL) ;INCREMENT ACKCOUNT\r \r ;------------------------------------------------------------------------------\r WAIT: PASSIVATE S,EXECUTE\r CALL SCOMMON\r EI\r CALL ACKROUT ;COLLECT ACK/NACK-REPLY'S\r LD A,(ACKCNT)\r AND 0FFH\r JR NZ,WAIT\r \r LD A,(FLAG1)\r BIT 2,A\r JR NZ,W1 ;IF CP ERROR-FLAG IS NOT SET THEN\r ;BEGIN\r LD IX,(QKEBUF) ;\r SET 6,(IX+2) ; SET ACK-BIT IN BUFFER\r JR W2 ;END ELSE\r W1: ;BEGIN\r LD IX,(QKEBUF) ;\r RES 6,(IX+2) ; RESET ACK-BIT IN BUFFER\r LD HL,ECOND2 ;\r SET 1,(HL) ; SET DEVICE CONTROL ERROR-BIT\r ;END\r W2: CALL BUFTEMP ;ENQUE REPLY-BUFFER IN TEMPORARY QUEUE\r JP START ;GOTO START\r \r \r \r \r \r *******************************************************************************\r *******************************************************************************\r * ON AIR ROUTINE *\r *******************************************************************************\r ONAIR: LD HL,QEMPTY\r CALL SUBENQ ;RETURN BUFFER TO EMPTY BUFFER QUEUE\r LD A,(IX+3)\r LD (SRCEBUF),A ;SAVE SOURCE NO.\r LD A,(IX+4)\r LD (DESTBUF),A ;SAVE DSETINATION NO.\r CALL OAROUT ;CALL ON AIR SUBROUTINE\r JP START ;GOTO START\r \r *******************************************************************************\r *******************************************************************************\r * DISPLAY UPDATING ROUTINE *\r *******************************************************************************\r DISUPD: LD BC,0\r UPD1: INC BC\r LD A,86\r CP C\r JP Z,START ;WHILE MORE DISPLAYS LEFT DO\r ;BEGIN\r PUSH BC ;\r UPD2: LD HL,QEMPTY ;\r CALL SUBDEQ ; GET EMPTY BUFFER\r JR C,UPD3 ;\r CALL SCOMMON ;\r EI ;\r JR UPD2 ;\r UPD3: PUSH DE ;\r POP IX ;\r POP BC ;\r LD HL,CPSTAT-1 ;\r ADD HL,BC ;\r LD A,(HL) ; GET SOURCE NO. FROM CURRENT DESTINATION\r AND 7FH ;\r LD (IX+3),A ; TRANSFER SOURCE NO. TO BUFFER\r LD (IX+4),C ; TRANSFER DESTINATION NO. TO BUFFER\r JR Z,UPD4 ;\r LD A,0D0H ; COMMAND BYTE IF SOURCE NO. NOT RELEASE\r JR UPD5 ;\r UPD4: LD A,10H ; COMMAND BYTE IF SOURCE NO. = RELEASE\r UPD5: LD (IX+2),A ; TRANSFER COMMAND BYTE TO BUFFER\r PUSH BC ;\r LD HL,QEK ;\r CALL SUBENQ ; SEND BUFFER TO KEYBOARD MODULE\r ACTIVATE S,PANEL ;\r POP BC ;\r JR UPD1 ;END\r \r *******************************************************************************\r \r ;------------------------------------------------------------------------------\r ; SPECIAL SUBROUTINES : \r ;------------------------------------------------------------------------------\r \r \r ;BUFTEMP: SUBROUTINE, WHICH IS ENQUEING REPLY-BUFFERS IN TEMPORARY QUEUE\r \r BUFTEMP LD DE,(QKEBUF)\r LD HL,QTEMP\r CALL SUBENQ ;ENQUE REPLY-BUFFER IN TEMPORARY QUEUE\r LD A,0\r LD (ACKCNT),A ;CLEAR ACKCOUNT\r LD HL,FLAG1\r LD (HL),A ;CLEAR CP ERROR-FLAG + NACK-FLAG\r RET\r \r \r \r ;------------------------------------------------------------------------------\r ;ACKROUT: SUBROUTINE, WHICH IS COLLECTING REPLY-BUFFERS FROM AUDIO/TIME-\r ; CODE AND VIDEO/PULSE MATRIX MODULES.\r \r ACKROUT LD HL,QME\r CALL SUBDEQ ;DEQUE BUFFER\r RET NC ;WHILE BUFFERS LEFT IN QUEUE DO\r ;BEGIN\r PUSH DE ;\r POP IX ;\r BIT 0,(IX+2) ;\r JR NZ,A1 ;\r LD HL,FLAG1 ;\r SET 2,(HL) ; IF NACK-REPLY THEN SET CP ERROR-FLAG\r A1: LD HL,QEMPTY ;\r CALL SUBENQ ; RETURN BUFFER TO EMPTY BUFFER QUEUE\r LD HL,ACKCNT ;\r DEC (HL) ; DECREMENT ACKCOUNT\r JR ACKROUT ;END\r \r \r \r ;------------------------------------------------------------------------------\r ;STMROUT: SUBROUTINE, WHICH CHECKS IF SOURCE = STM. \r ; IF NOT, PULSE TYPE (T1) IS SEND TO THE SOURCE IN QUESTION.\r ; IF YES, IT WILL CHECK, IF ANY SOURCES HAS STM AS DESTINATION,\r ; AND IF YES AGAIN, THE PULSE TYPE OF STM WILL BE SENT OUT TO \r ; THEM.\r \r STMROUT LD A,(IY+3)\r CP 19\r JR Z,S1 ;IF STM IS NOT SOURCE THEN\r ;BEGIN\r LD A,(IY+2) ;\r AND 0F3H ;\r OR 04H ; UPDATE PULSE IN ACCORDANCE WITH (T1)\r LD (IY+2),A ;\r RET ;END ELSE\r \r S1: LD HL,CPSTAT+24 ;BEGIN\r LD (STMBUF),HL ;\r LD A,3 ;\r LD (CNTBUF),A ; WHILE STM-DESTINATIONS 25-27 THEN\r ; BEGIN\r S11: CALL SCHECK ;\r LD HL,STMBUF ;\r INC (HL) ; CHECK TYPE OF SOURCE\r LD HL,CNTBUF ;\r DEC (HL) ;\r JR NZ,S11 ; END\r ;\r LD HL,CPSTAT+71 ;\r LD (STMBUF),HL ;\r LD A,6 ;\r LD (CNTBUF),A ; WHILE STM-DESTINATIONS 72-77 THEN\r ; BEGIN\r S21: CALL SCHECK ;\r LD HL,STMBUF ;\r INC (HL) ; CHECK TYPE OF SOURCE\r LD HL,CNTBUF ;\r DEC (HL) ;\r JR NZ,S21 ; END\r ;\r ;\r LD BC,PORT20 ;\r IN A,(C) ;\r AND 07H ;\r CP 06H ;\r RET NZ ; IF TEST-PULSES FOLLOW STM THEN\r ; BEGIN\r LD A,30 ; (A) = TEST-SOURCE NO. (ENTRY TO PULSOUT)\r CALL PULSOUT ; COPY PULSE-TYPE OF STM TO TEST-SIGNAL\r ; END\r RET ;END\r \r \r SCHECK: LD HL,(STMBUF)\r LD A,(HL)\r AND 7FH\r CP 1\r RET C\r CP 16 ;CHECK IF THE SOURCE IS ONE OF THE RELEVANT\r CALL C,PULSOUT ;SOURCES 1-15 AND CALL PULSOUT IF YES\r RET C\r \r CP 27\r RET C\r CP 29 ;CHECK IF THE SOURCE IS ONE OF THE RELEVANT\r CALL C,PULSOUT ;SOURCES 27,28 AND CALL PULSOUT IF YES\r RET C\r \r CP 31\r RET C\r CP 36 ;CHECK IF THE SOURCE IS ONE OF THE RELEVANT\r CALL C,PULSOUT ;SOURCES 31-35 AND CALL PULSOUT IF YES\r RET\r \r \r PULSOUT LD (SRCEBUF),A ;SAVE SOURCE NO.\r P1: LD HL,QEMPTY\r CALL SUBDEQ ;GET EMPTY BUFFER\r JR C,P2\r CALL SCOMMON\r EI\r JR P1\r P2: EX DE,HL\r INC HL\r INC HL\r LD IY,(QEVBUF)\r LD A,(IY+2)\r AND 2CH ;TRANSFER PULSE-CARACTERISTICS\r LD (HL),A ;OF STM TO VIDEO BUFFER\r INC HL \r LD A,(SRCEBUF)\r LD (HL),A ;TRANSFER SOURCE-NO. TO VIDEO BUFFER\r INC HL\r LD (HL),00H ;DUMMY DESTINATION\r LD DE,4\r AND A\r SBC HL,DE\r EX DE,HL ;(DE)=BUFFER-STARTADDRESS\r LD HL,QEV\r CALL SUBENQ ;SEND BUFFER TO VIDEO/PULSE MODULE\r ACTIVATE S,VIDEO\r LD HL,ACKCNT\r INC (HL) ;INCREMENT ACKCOUNT\r SCF ;SET CARRY-FLAG\r RET\r \r \r \r ;------------------------------------------------------------------------------\r ;ATROAR : SUBROUTINE, WHICH IS CHECKING IF AN ATR SOURCE IS RELEASED\r ; FROM ONE OF THE DESTINATIONS 41-46 AND IF YES, THEN RESETS\r ; THE ON AIR INDICATION FOR THE ATR CONCERNED.\r \r ATROAR: LD A,(IX+4)\r CP 41\r RET C\r CP 47\r RET NC\r LD HL,CPSTAT-1\r LD B,0\r LD C,A\r ADD HL,BC\r LD A,(HL)\r AND 7FH\r CP 36\r JR Z,ATR1\r CP 37\r JR Z,ATR2\r RET\r ATR1: LD BC,PORT68\r IN A,(C)\r SET 6,A ;RESET ATR1 ON AIR INDICATION\r OUT (C),A\r RET\r ATR2: LD BC,PORT68\r IN A,(C)\r SET 7,A ;RESET ATR2 ON AIR INDICATION\r OUT (C),A\r RET\r \r \r \r ;------------------------------------------------------------------------------\r ;OAROUT: SUBROUTINE, WHICH IN CASE OF DESTINATIONS 41-46 AND SOURCES\r ; 36,37(ATR'S) IS COPYING THE ON/OFF AIR-INDICATION OF THE DESTI-\r ; NATION TO THE ATR CONCERNED.\r ; IN CASE OF AN ON AIR-INDICATION FOR ONE OF THE DESTINATIONS\r ; 18-31,41-46,69-71 WHICH IN ADDITION HAS A VIDEO SOURCE(1-12)\r ; CONNECTED, THE SUBROUTINE CHECKS, IF ANY TEXTGENERATORS IS CON-\r ; NECTED TO THE MIXER IN QUESTION AND IF YES , A BUFFER IS ENQUED\r ; IN INCOMING QUEUE INDICATING THAT A CP IS TO BE ESTABLISHED,\r ; TRANSFERRING THE TIME CODE OF THE VIDEO SOURCE CONCERNED TO THE\r ; TEXTGENERATOR(S) CONCERNED.\r \r OAROUT: LD A,(DESTBUF) ;\r CP 41 ;\r JR C,R4A ;\r CP 47 ;\r JR NC,R4A ;\r ;\r LD HL,CPSTAT-1 ;\r LD B,0 ;IF ONE OF DESTINATIONS 41-46 AND\r LD A,(DESTBUF) ;IF ONE THE SOURCES 36,37 THEN\r LD C,A ;\r ADD HL,BC ;\r LD A,(HL) ;\r LD B,A ;\r AND 7FH ;\r CP 36 ;\r JR Z,R1 ;\r CP 37 ;\r JR NZ,R4A ;\r ;BEGIN\r R1: LD A,B ; GET SOURCE FROM TABLE\r LD BC,PORT68 ;\r BIT 7,(HL) ;\r JR Z,OARES ; IF ON AIR-INDICATION THEN\r OASET: AND 7FH ; BEGIN\r CP 36 ;\r JR NZ,R2 ;\r IN A,(C) ;\r RES 6,A ; SET ATR1 ON AIR-INDIC.\r OUT (C),A ;\r RET ; ELSE\r R2: IN A,(C) ;\r RES 7,A ; SET ATR2 ON AIR-INDIC.\r OUT (C),A ;\r RET ; END ELSE\r OARES: AND 7FH ; BEGIN\r CP 36 ;\r JR NZ,R3 ;\r IN A,(C) ;\r SET 6,A ; SET ATR1 OFF AIR-INDIC.\r OUT (C),A ;\r RET ; ELSE\r R3: IN A,(C) ;\r SET 7,A ; SET ATR2 OFF AIR-INDIC.\r OUT (C),A ;\r RET ; END\r ;END ELSE\r \r R4A: LD HL,TXTTAB\r LD BC,8\r LD A,(DESTBUF)\r CPIR\r JR NZ,R4B ;IF NO MIXER(TEXTGEN) DESTINATION GOTO R4B\r LD A,1\r CP C\r JR NC,CNR2MX ;IF CNR2(TEXTGEN) DESTINATION GOTO CNR2MX\r LD A,3\r CP C\r JR NC,CNR1MX ;IF CNR1(TEXTGEN) DESTINATION GOTO CNR1MX\r LD A,5\r CP C\r JR NC,STMMX ;IF STM(TEXTGEN) DESTINATION GOTO STMMX\r ;ELSE\r ST5MX: LD HL,ST5TAB\r LD C,10 ;CHECK IF VIDEO SOURCE(1-12) IS\r CALL VIROUT ;COUPLED TO THE MIXER AND\r JR NZ,R4B ;GOTO R4B IF YES\r RET\r STMMX: LD HL,STMTAB\r LD C,3 ;CHECK IF VIDEO SOURCE(1-12) IS\r CALL VIROUT ;COUPLED TO THE MIXER AND\r JR NZ,R4B ;GOTO R4B IF YES\r RET\r CNR1MX: LD HL,CNR1TAB\r LD C,5 ;CHECK IF VIDEO SOURCE(1-12) IS\r CALL VIROUT ;COUPLED TO THE MIXER AND\r JR NZ,R4B ;GOTO R4B IF YES\r RET\r CNR2MX: LD HL,CNR2TAB\r LD C,5 ;CHECK IF VIDEO SOURCE(1-12) IS\r CALL VIROUT ;COUPLED TO THE MIXER AND\r JR NZ,R4B ;GOTO R4B IF YES\r RET\r \r VIROUT: LD D,0\r LD E,(HL)\r PUSH HL\r LD HL,CPSTAT-1\r ADD HL,DE\r LD A,(HL)\r LD B,A\r AND 7FH\r POP HL\r JR Z,VI1\r CP 13\r JR NC,VI1\r BIT 7,B\r JR Z,VI1\r LD A,E ;IF ON AIR DESTINATION IS FOUND THEN\r LD (DESTBUF),A ;CONTINUE ON AIR SUBROUTINE WITH NEW DESTIN.\r RET ;RETURN IF VIDEO SOURCE FOUND(Z-FLAG RESET)\r VI1: INC HL\r DEC C\r JR NZ,VIROUT\r RET ;RETURN IF VIDEO SOURCE NOT FOUND(Z-FLAG SET)\r \r \r R4B: ;BEGIN\r LD HL,CPSTAT-1 ;\r LD B,0 ;\r LD A,(DESTBUF) ;\r LD C,A ;\r ADD HL,BC ;\r LD A,(HL) ;\r BIT 7,A ;\r RET Z ; IF DESTINATION IS ON AIR THEN\r ; BEGIN\r AND 7FH ;\r CP 1 ;\r RET C ;\r CP 13 ; IF THE SOURCE IS ONE OF THE \r RET NC ; VIDEO SOURCES 1-12 THEN\r ; BEGIN\r LD (SRCEBUF),A ; SAVE VIDEO SOURCE NO.\r LD A,(DESTBUF) ;\r LD HL,ST5TAB ;\r LD E,63 ;\r LD BC,10 ; IF DEST. IS ONE OF THE ST5-DESTINATIONS\r CPIR ; 18-24,69-71 THEN CALL TXTROUT SUBROUTINE\r CALL Z,TXTROUT ; (E) = NO. OF TXT3-INPUT\r RET Z ;\r ;\r LD E,76 ;\r LD BC,3 ; IF DEST. IS ONE OF THE STM-DESTINATIONS\r CPIR ; 25-27 THEN CALL TXTROUT SUBROUTINE\r CALL Z,TXTROUT ; (E) = NO. OF TXT3-INPUT\r RET Z ;\r ;\r LD E,80 ;\r LD BC,5 ; IF DEST. IS ONE OF THE CNR1-DESTINATIONS\r CPIR ; 28-29,41-43 THEN CALL TXTROUT SUBROUTINE\r CALL Z,TXTROUT ; (E) = NO. OF TXT3-INPUT\r RET Z ;\r ;\r LD E,84 ;\r LD BC,5 ; IF DEST. IS ONE OF THE CNR2-DESTINATIONS\r CPIR ; 30-31,44-46 THEN CALL TXTROUT SUBROUTINE\r CALL Z,TXTROUT ; (E) = NO. OF TXT3-INPUT\r ; END\r ; END\r RET ;END\r \r \r TXTROUT LD HL,CPSTAT-1\r LD D,0\r ADD HL,DE\r LD (QEVBUF),HL\r LD A,58 ;(A) = TXT3-FEEDBACK LINE NO.\r LD (DESTBUF),A ;SAVE TXTGEN3. NO.\r LD A,(HL)\r AND 7FH ;IF TXT3-GEN. IS CONNECTED TO THE MIXER\r CP 33 ;CONCERNED THEN SEND ESTABLISH-BUFFER\r CALL Z,ENQUE ;TO INCOMING QUEUE WITH DEST. = 58\r LD A,59 ;(A) = TXT4-FEEDBACK LINE NO.\r LD (DESTBUF),A ;SAVE TXTGEN4. NO.\r LD HL,(QEVBUF)\r INC HL\r LD A,(HL)\r AND 7FH ;IF TXT4-GEN. IS CONNECTED TO THE MIXER\r CP 34 ;CONCERNED THEN SEND ESTABLISH-BUFFER\r CALL Z,ENQUE ;TO INCOMING QUEUE WITH DEST. = 59\r LD A,00H\r AND 0FFH ;SET ZERO-FLAG\r RET\r \r \r ENQUE: LD HL,DESTBUF\r LD B,0\r LD C,(HL)\r LD HL,CPSTAT-1\r ADD HL,BC\r LD A,(HL)\r AND 7FH\r LD HL,SRCEBUF\r CP (HL)\r RET Z ;RETURN IF ALLREADY ESTABLISHED\r ;ELSE\r EN1: LD HL,QEMPTY ;BEGIN\r CALL SUBDEQ ; GET EMPTY BUFFER\r JR C,EN2 ;\r CALL SCOMMON ;\r EI ;\r JR EN1 ;\r EN2: PUSH DE ;\r POP IY ;\r LD (IY+2),80H ; SET ESTABLISH-BIT\r LD A,(SRCEBUF) ;\r LD (IY+3),A ; SOURCE = VIDEO SOURCE NO.\r LD A,(DESTBUF) ;\r LD (IY+4),A ; DESTINATION = TXTGEN. NO.\r LD HL,QKE ;\r CALL SUBENQ ; ENQUE BUFFER IN INCOMING QUEUE\r RET ;END\r \r \r \r \r ST5TAB DB 18\r DB 19\r DB 20\r DB 21\r DB 22\r DB 23\r DB 24\r DB 69\r DB 70\r DB 71\r STMTAB DB 25\r DB 26\r DB 27\r CNR1TAB DB 28\r DB 29\r DB 41\r DB 42\r DB 43\r CNR2TAB DB 30\r DB 31\r DB 44\r DB 45\r DB 46\r \r \r TXTTAB DB 63\r DB 64\r DB 76\r DB 77\r DB 80\r DB 81\r DB 84\r DB 85\r \r \r \r DSEG\r FLAG1 DS 1\r ACKCNT DS 1\r CNTBUF DS 1\r SRCEBUF DS 1\r DESTBUF DS 1\r QKEBUF DS 2\r QEVBUF DS 2\r SPECSAV DS 2\r STMBUF DS 2\r DS 64\r STAC09:\r \r END\r