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: 66227 (0x102b3) Types: TextFile Names: »DDP.MAC«
└─⟦755b1f38b⟧ Bits:30005549 8" CR80 Floppy CR80FD_0032 ( TELECINE Source and Abs-files ) └─⟦755b1f38b⟧ Intel_ISIS_II └─ ⟦this⟧ »DDP.MAC« └─⟦8347abc8e⟧ Bits:30005501 8" CR80 Floppy CR80FD_0033 ( ATR Source and Abs-files ) └─⟦8347abc8e⟧ Intel_ISIS_II └─ ⟦this⟧ »DDP.MAC« └─⟦af81bc460⟧ Bits:30005550 8" CR80 Floppy CR80FD_0034 ( MATRIX Source and Abs-files ) └─⟦af81bc460⟧ Intel_ISIS_II └─ ⟦this⟧ »DDP.MAC«
;***************************************************\r ;* *\r ;* DISTRIBUTION AND DELEGATION PROCESS *\r ;* DDPROC MACRO, VERSION 810609/CGR *\r ;* *\r ;***************************************************\r ;\r ;\r PUBLIC DEVNUM\r ;\r NLIST S\r ;\r VDUD EQU 01\r VDUO EQU 02\r VDUA EQU 03\r PRINTER EQU 04\r RCDP EQU 05\r RCPM1 EQU 06\r RCPM2 EQU 07\r RCPVTR EQU 08\r MATRIX EQU 09\r CNRMIXER EQU 10\r ST5MIXER EQU 11\r PREEDIT EQU 12\r VTR EQU 13\r VCR EQU 14\r DIA EQU 15\r TELECINE EQU 16\r KGEN EQU 17\r ATR EQU 18\r SLOMO EQU 19\r ;\r ;\r DDPROC MACRO #DEVTYP,#INTIME,#OUTTIM,#RAM1K\r ;\r LIST M\r ;\r ;>>>>>>>>>>>>> D E F I N E F L A G S <<<<<<<<<<<<<<<<\r ;\r ;\r F11: DEFL 0 ;VDU-D\r F12: DEFL 0 ;VDU-O\r F13: DEFL 0 ;VDU-A\r F2: DEFL 0 ;PRINTER\r F3: DEFL 0 ;RCDP\r F4: DEFL 0 ;RCP\r F41: DEFL 0 ;RCP(M I)\r F42: DEFL 0 ;RCP(M II)\r F43: DEFL 0 ;RCP(VTR)\r F5: DEFL 0 ;MATRIX\r F61: DEFL 0 ;CNR MIXER\r F62: DEFL 0 ;ST5 MIXER\r F7: DEFL 0 ;PREEDIT (VCR/VCR)\r F8: DEFL 0 ;RCP CONTROLLED DEVICE\r F81: DEFL 0 ;VTR\r F82: DEFL 0 ;VCR\r F83: DEFL 0 ;DIA\r F84: DEFL 0 ;TELECINE\r F85: DEFL 0 ;KGEN\r F86: DEFL 0 ;ATR\r F87: DEFL 0 ;SLOMO\r ;\r NLIST S\r ;\r IF #DEVTYP.EQ.VDUD\r LIST S\r F11: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.VDUO\r LIST S\r F12: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.VDUA\r LIST S\r F13: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.PRINTER\r LIST S\r F2: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.RCDP\r LIST S\r F3: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.RCPM1\r LIST S\r F4: DEFL 1\r F41: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.RCPM2\r LIST S\r F4: DEFL 1\r F42: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.RCPVTR\r LIST S\r F4: DEFL 1\r F43: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.MATRIX\r LIST S\r F5: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.CNRMIXER\r LIST S\r F61: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.ST5MIXER\r LIST S\r F62: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.PREEDIT\r LIST S\r F7: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.VTR\r LIST S\r F8: DEFL 1\r F81: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.VCR\r LIST S\r F8: DEFL 1\r F82: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.DIA\r LIST S\r F8: DEFL 1\r F83: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.TELECINE\r LIST S\r F8: DEFL 1\r F84: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.KGEN\r LIST S\r F8: DEFL 1\r F85: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.ATR\r LIST S\r F8: DEFL 1\r F86: DEFL 1\r NLIST S\r ENDIF\r IF #DEVTYP.EQ.SLOMO\r LIST S\r F8: DEFL 1\r F87: DEFL 1\r NLIST S\r ENDIF\r LIST S\r ;\r ;\r NLIST S\r IF (F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.0\r LIST S ;+++++ #VDU, PRINTER & PREEDIT\r BFSIZE: DEFL 16 ;\r NLIST S\r ENDIF\r IF (F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.1\r LIST S ;+++++ VDU, PRINTER OR PREEDIT\r BFSIZE: DEFL 128 ;\r NLIST S\r ENDIF\r LIST S\r ;\r ;\r ;>>>>>>>>>>>>>> E N D O F D E F I N E F L A G S <<<<<<<<<<<<<<<<<\r ;\r ;\r ;\r DSEG\r ;\r ;\r ;\r ;>>>>>>>>>>>>>>>>>>>>>>>>> R A M M A P <<<<<<<<<<<<<<<<<<<<<<<<<<\r ;\r ;\r NLIST S\r IF (F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.1\r LIST S ;+++++ VDU, PRINTER OR PREEDIT\r \r \r ORG 0\r SYSRAM: DS 64 ;PROCESS 1 STACK\r PRC1SP:\r CR80NO: DS 1 ;REGISTERS FOR PRC. 1 & 4 (DORAGEN.)\r PANCO: DS 1\r PANCOM: DS 1\r ECOND1: DS 1\r ECOND2: DS 1\r ERRPAT: DS 1\r LCRID: DS 1\r MCRID: DS 1\r DS 1\r DS 1\r CR80SS: DS 3\r EHSCAN: DS 1\r DEVNUM: DS 1\r SPARE: DS 161 ;SPARE/SYSTEM STACK\r INISP:\r DS 16 ;OP.SYS. WORKSPACE\r ;\r ;\r QHEADS: DS 1 ;START OF QHEAD ADDRESSES\r QUEUE1: DS NOCH*5 ;START OF QUEUES\r SPARE1: DS 100H-1-NOCH*5 ;USER RAM\r ;\r ;\r PDESC1: DS 100H ;PROCESS DESCRIPTORS 0-15\r ;\r NLIST S\r IF S.LT.17\r LIST S\r PUBLIC SPARE2\r SPARE2: DS 100H\r NLIST S\r ENDIF\r IF S.GT.16\r LIST S\r PDESC2: DS 100H ;PROCESS DESCRIPTORS 16-31\r NLIST S\r ENDIF\r LIST S\r ;\r ;\r NLIST S\r IF #RAM1K.GT.0\r LIST S\r ORG 800H\r NLIST S\r ENDIF\r IF NOBUF.LT.8\r LIST S\r BUFRAM: DS NOBUF*90H\r NLIST S\r ENDIF\r IF NOBUF.GT.7\r LIST S\r BUFRAM: DS 7*90H\r DS 10H ;SPARE\r NLIST S\r IF #RAM1K.GT.1\r LIST S\r ORG 1000H\r NLIST S\r ENDIF\r IF NOBUF.LT.15\r LIST S\r DS (NOBUF-7)*90H\r NLIST S\r ENDIF\r IF NOBUF.GT.14\r LIST S\r DS 7*90H\r DS 10H ;SPARE\r NLIST S\r IF #RAM1K.GT.2\r LIST S\r ORG 1800H\r NLIST S\r ENDIF\r LIST S\r DS (NOBUF-14)*90H\r ENDIF\r ENDIF\r ENDIF\r ;\r ;\r NLIST S\r IF (F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.0\r LIST S ;+++++ #VDU, PRINTER & PREEDIT\r \r \r ORG 0\r SYSRAM: DS 64 ;PROCESS 1 STACK\r PRC1SP:\r CR80NO: DS 1 ;REGISTERS FOR PRC. 1 & 4 (DORAGEN.)\r PANCO: DS 1\r PANCOM: DS 1\r ECOND1: DS 1\r ECOND2: DS 1\r ERRPAT: DS 1\r LCRID: DS 1\r MCRID: DS 1\r DS 1\r DS 1\r CR80SS: DS 3\r EHSCAN: DS 1\r DEVNUM: DS 1\r SPARE: DS 161 ;SPARE/SYSTEM STACK\r INISP:\r DS 16 ;OP.SYS. WORKSPACE\r ;\r ;\r QHEADS: DS 1 ;START OF QHEAD ADDRESSES\r QUEUE1: DS NOCH*5 ;START OF QUEUES\r SPARE1: DS 100H-1-NOCH*5 ;USER RAM\r ;\r ;\r PDESC1: DS 100H ;PROCESS DESCRIPTORS 0-15\r ;\r NLIST S\r IF S.LT.17\r LIST S\r PUBLIC SPARE2\r SPARE2: DS 100H\r NLIST S\r ENDIF\r IF S.GT.16\r LIST S\r PDESC2: DS 100H ;PROCESS DESCRIPTORS 16-31\r NLIST S\r ENDIF\r LIST S\r ;\r ;\r NLIST S\r IF #RAM1K.GT.0\r LIST S\r ORG 800H\r NLIST S\r ENDIF\r IF F3.EQ.1\r LIST S ;+++++ RCDP\r BUFRAM: DS 20H*(NOBUF-NOBUFOUT)\r DS 50H*NOBUFOUT\r NLIST S\r ENDIF\r IF F5.EQ.1\r LIST S ;+++++ MATRIX\r BUFRAM: DS 20H*NOBUFIN\r DS 80H*NOBUFOUT\r NLIST S\r ENDIF\r ;\r ;\r IF (F3.OR.F5).EQ.0\r LIST S ;+++++ # RCDP & MATRIX\r NLIST S\r IF NOBUF.LT.33\r LIST S\r BUFRAM: DS NOBUF*20H\r NLIST S\r ENDIF\r IF NOBUF.GT.32\r LIST S\r BUFRAM: DS 32*20H\r NLIST S\r IF #RAM1K.GT.1\r LIST S\r ORG 1000H\r NLIST S\r ENDIF\r IF NOBUF.LT.65\r LIST S\r DS (NOBUF-32)*20H\r NLIST S\r ENDIF\r IF NOBUF.GT.64\r LIST S\r DS 32*20H\r NLIST S\r IF #RAM1K.GT.2\r LIST S\r ORG 1800H\r NLIST S\r ENDIF\r LIST S\r DS (NOBUF-64)*20H\r NLIST S\r ENDIF\r ENDIF\r ENDIF\r ENDIF\r ;\r LIST S\r ;\r ;>>>>>>>>>>>>>>>>>>>> E N D O F R A M M A P <<<<<<<<<<<<<<<<<<<<<\r ;\r ;\r ;\r ;\r ;\r CSEG\r ;\r ;>>>>>>>>>>>> L I S T O F I N I T I A L C R I D ' S <<<<<<<<<<<<<\r ;\r NLIST S\r IF F4.EQ.0\r LIST S ;+++++ #RCP\r CRIDSP: DB 22H\r DB 00H\r DB 33H\r DB 00H\r DB 44H\r DB 00H\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++ RCP\r CRIDSP: DW 0\r DW 0\r DW 0\r NLIST S\r ENDIF\r LIST S\r NLIST S\r IF (F4.OR.F8).EQ.1\r LIST S ;+++++RCP OR RCP CONTROLLED DEVICE\r DB 55H\r DB 00H\r NLIST S\r ENDIF\r IF F3.EQ.1\r LIST S ;+++++RCDP\r DW 4B5FH\r DW 4C5FH\r DW 4A5FH\r DW 555FH\r DW 565FH\r DW 545FH\r DW 245FH\r DW 255FH\r DW 235FH\r DW 625FH\r DW 635FH\r DW 615FH\r DW 3F5FH\r DW 405FH\r DW 3E5FH\r DW 6E5FH\r DW 6F5FH\r DW 705FH\r DW 715FH\r DW 725FH\r DW 735FH\r DW 745FH\r DW 755FH\r DW 175FH\r DW 185FH\r DW 195FH\r DW 1A5FH\r DW 695FH\r DW 6A5FH\r DW 6B5FH\r DW 6C5FH\r DW 145FH\r DW 155FH\r DW 165FH\r NLIST S\r ENDIF\r IF F3.EQ.0\r LIST S ;+++++#RCDP\r DW 0\r DW 0\r DW 0\r DW 0\r DW 0\r DW 0\r DW 0\r DW 0\r DW 0\r NLIST S\r ENDIF\r ;\r IF F85.EQ.1\r LIST S ;+++++KGEN\r IDLSB: DEFL 6FH\r NLIST S\r ENDIF\r IF F84.EQ.1\r LIST S ;+++++TELECINE\r IDLSB: DEFL 7FH\r IDLSBM: DEFL 8FH\r NLIST S\r ENDIF\r IF F81.EQ.1\r LIST S ;+++++VTR\r IDLSB: DEFL 6FH\r IDLSB2: DEFL 9FH\r IDLSB3: DEFL 0CFH\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++RCP\r IDLSB: DEFL 6FH\r IDLSBM: DEFL 7FH\r NLIST S\r ENDIF\r IF F83.EQ.1\r LIST S ;+++++DIA\r IDLSB: DEFL 9FH\r NLIST S\r ENDIF\r IF (F86.OR.F87).EQ.1\r LIST S ;+++++ATR OR SLOMO\r IDLSB: DEFL 0AFH\r NLIST S\r ENDIF\r IF F82.EQ.1\r LIST S ;+++++VCR\r IDLSB: DEFL 0BFH\r NLIST S\r ENDIF\r LIST S\r ;\r ;\r ;>>>>>>>>>>> E N D O F C R I D - L I S T <<<<<<<<<<<<<\r ;\r ;\r ;\r NLIST S\r IF F4.EQ.1\r LIST S ;+++++RCP\r ;\r ;>>>>>>>>>>> D E L E G A T I O N T A B L E S <<<<<<<<<<<<<\r ;\r NLIST S\r IF F41.EQ.1\r LIST S ;+++++RCP(M I)\r TABL4: DB 3AH\r DB 31H\r DB 2AH\r DB 1AH\r DB 22H\r TABL41: DB 6\r DB 10\r DB 9\r DB 7\r DB 8\r NOPAN: DEFL 5\r NLIST S\r ENDIF\r IF F42.EQ.1\r LIST S ;+++++RCP(M II)\r TABL4: DB 29H\r DB 39H\r DB 11H\r DB 09H\r DB 19H\r DB 21H\r TABL41: DB 9\r DB 6\r DB 10\r DB 11\r DB 7\r DB 8\r NOPAN: DEFL 6\r NLIST S\r ENDIF\r IF F43.EQ.1\r LIST S ;+++++RCP(VTR)\r TABL4: DB 01H\r DB 02H\r DB 03H\r TABL41: DB 6\r DB 9\r DB 12\r NOPAN: DEFL 3\r NLIST S\r ENDIF\r LIST S\r ;\r ;>>>>>>>>>> E N D O F D E L E G A T I O N T A B L E S <<<<<<<<<<<\r ;\r ;\r NLIST S\r ENDIF\r LIST S\r ;\r ;\r ;\r GENINI:\r ;\r ;>>>>>>>>> C R E A T E G E N E R A L P R O C E S S E S <<<<<<<<<<<<\r ;\r CREATE S,0,TQMACT ;CREATE TIMER PROCESS (0)\r CREATE S,4,EHINI ;CREATE ERROR HANDLING PROCESS (4)\r ;\r ;>>>>>>> E N D O F G E N . P R O C E S S C R E A T I O N <<<<<<<\r ;\r ;\r ;\r ;>>>>>> I N I T I A L I Z E C H A N N E L S (TIMERS, INP. PERMIT, START)<<<<<<\r ;\r ;\r NLIST S\r IF F3.EQ.1\r LIST S ;+++++ RCDP\r LD E,2\r NLIST S\r ENDIF\r IF F3.EQ.0\r LIST S ;+++++ #RCDP\r NLIST S\r IF F4.EQ.0\r LIST S ;+++++ #RCP\r LD E,20H\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++ RCP\r LD E,50H\r NLIST S\r ENDIF\r ENDIF\r LIST S\r LD C,#INTIME.AND.7FH\r LD B,0\r NLIST S\r IF F4.EQ.0\r LIST S ;+++++ #RCP\r LD D,NOCH-2\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++ RCP\r LD D,NOCH-5\r NLIST S\r ENDIF\r LIST S\r LD A,6\r TLOOP1: PUSH AF\r PUSH BC\r PUSH DE\r LD D,0\r TL1: CALL COMM ;ING. TIMER\r BIT 7,A\r JP NZ,TL1\r TLOOP2: LD A,80H\r CALL COMM\r BIT 7,A\r JP NZ,TLOOP2\r POP DE\r PUSH DE\r LD D,0\r LD A,9\r TL1A: CALL COMM ;INPUT PERMIT\r BIT 7,A\r JP NZ,TL1A\r POP DE\r PUSH DE\r LD D,0\r LD A,8\r TL1B: CALL COMM ;START INPUTTER\r BIT 7,A\r JP NZ,TL1B\r POP DE\r PUSH DE\r LD D,0\r LD A,5\r TL1C: CALL COMM ;START OUTPUTTER\r BIT 7,A\r JP NZ,TL1C\r POP DE\r POP BC\r NLIST S\r IF F3.EQ.1\r LIST S ;+++++ RCDP\r INC E\r NLIST S\r ENDIF\r IF F3.EQ.0\r LIST S ;+++++ #RCDP\r LD A,10H\r ADD A,E\r LD E,A\r NLIST S\r ENDIF\r LIST S\r POP AF\r DEC D\r JP NZ,TLOOP1\r ;\r ;\r NLIST S\r IF F3.EQ.1\r LIST S ;+++++ RCDP\r LD E,2\r NLIST S\r ENDIF\r IF F3.EQ.0\r LIST S ;+++++ #RCDP\r NLIST S\r IF F4.EQ.0\r LIST S ;+++++ #RCP\r LD E,20H\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++ RCP\r LD E,50H\r NLIST S\r ENDIF\r ENDIF\r LIST S\r LD C,#OUTTIM.AND.7FH\r LD B,0\r NLIST S\r IF F4.EQ.0\r LIST S ;+++++ #RCP\r LD D,NOCH-2\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++ RCP\r LD D,NOCH-5\r NLIST S\r ENDIF\r LIST S\r LD A,7\r TLOOP3: PUSH AF\r PUSH BC\r PUSH DE\r LD D,0\r TL3: CALL COMM ;OUTG. TIMER\r BIT 7,A\r JP NZ,TL3\r TLOOP4: LD A,80H\r CALL COMM\r BIT 7,A\r JP NZ,TLOOP4\r POP DE\r POP BC\r NLIST S\r IF F3.EQ.1\r LIST S ;+++++ RCDP\r INC E\r NLIST S\r ENDIF\r IF F3.EQ.0\r LIST S ;+++++ #RCDP\r LD A,10H\r ADD A,E\r LD E,A\r NLIST S\r ENDIF\r LIST S\r POP AF\r DEC D\r JP NZ,TLOOP3\r ;\r ;\r ;>>>>>>>>>>>>>> E N D O F C H A N N E L I N I T . <<<<<<<<<<<<<<\r ;\r ;\r ;\r ;\r ;>>>>>>>>>> P R E S E T B U F F E R H E A D S <<<<<<<<<<<<\r ;\r ;\r LD IX,BUFRAM+2\r LD IY,CHSPEC\r LD C,0\r NLIST S\r IF F4.EQ.0\r LIST S ;+++++ #RCP\r LD L,2\r EXX\r LD L,2\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++ RCP\r LD L,5\r EXX\r LD L,5\r NLIST S\r ENDIF\r LIST S\r EXX\r NLIST S\r IF F3.EQ.1\r LIST S ;+++++ RCDP\r ;***** PRESET BUFFERHEADS CH. 2-4 *****\r BLOOP5: LD B,(IY+0)\r ;\r ;INGOING BUFFERS\r ;\r BLOOP6: LD (IX-2),L ;LOAD CHANNEL NO.\r PUSH IX\r LD DE,10\r ADD IX,DE\r PUSH IX\r POP DE\r POP IX\r LD (IX+4),E ;LOAD STARTADDRESS OF BUFFERDATA\r LD (IX+5),D\r LD (IX+8),10H\r LD (IX+9),0\r LD DE,20H\r ADD IX,DE\r INC C\r DEC B\r JP NZ,BLOOP6\r ;\r ;OUTGOING BUFFERS\r ;\r EXX\r INC IY\r LD B,(IY+0)\r BLOOP7: LD (IX-2),L ;LOAD CHANNEL NO.\r PUSH IX\r LD DE,10\r ADD IX,DE\r PUSH IX\r POP DE\r POP IX\r LD (IX+4),E ;LOAD STARTADDRESS OF BUFFERDATA\r LD (IX+5),D\r LD (IX+8),64\r LD (IX+9),0\r LD DE,50H\r ADD IX,DE\r EXX\r INC C\r EXX\r DEC B\r JP NZ,BLOOP7\r INC L\r EXX\r INC L\r INC IY\r LD A,NOBUFIN+NOBUFOUT\r CP C\r JP NZ,BLOOP5\r ;***** PRESET BUFFERHEADS CH. 5-39 *****\r NLIST S\r ENDIF\r LIST S\r BLOOP1: LD B,(IY+0)\r ;\r ;INGOING BUFFERS\r ;\r BLOOP2: LD (IX-2),L ;LOAD CHANNEL NO.\r PUSH IX\r LD DE,10\r ADD IX,DE\r PUSH IX\r POP DE\r POP IX\r LD (IX+4),E ;LOAD STARTADDRESS OF BUFFERDATA\r LD (IX+5),D\r NLIST S\r IF F5.EQ.0\r LIST S ;+++++ #MATRIX\r NLIST S\r IF (F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.0\r LIST S ;+++++ #VDU, PRINTER & PREEDIT\r LD (IX+8),16 ;LOAD BUFFERSIZE\r LD (IX+9),0\r LD DE,20H\r ADD IX,DE\r PUSH HL\r PUSH IX\r POP DE\r NLIST S\r IF #RAM1K.GT.0\r LIST S\r LD HL,BUFRAM+#RAM1K*800H-800H\r NLIST S\r ENDIF\r IF #RAM1K.EQ.0\r LIST S\r LD HL,BUFRAM\r NLIST S\r ENDIF\r LIST S\r NLIST S\r ENDIF\r IF (F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.1\r LIST S ;+++++ VDU, PRINTER OR PREEDIT\r LD (IX+8),128 ;LOAD BUFFERSIZE\r LD (IX+9),0\r LD DE,90H\r ADD IX,DE\r PUSH HL\r PUSH IX\r POP DE\r LD A,E\r ADD A,20H\r JP NC,DM1A\r LD DE,10H\r ADD IX,DE\r PUSH IX\r POP DE\r NLIST S\r IF #RAM1K.GT.0\r LIST S\r DM1A: LD HL,BUFRAM+#RAM1K*800H-800H\r NLIST S\r ENDIF\r IF #RAM1K.EQ.0\r LIST S\r DM1A: LD HL,BUFRAM\r NLIST S\r ENDIF\r LIST S\r NLIST S\r ENDIF\r LIST S\r AND A\r SBC HL,DE\r POP HL\r JP M,DM2\r LD A,D\r AND 0FH\r CP 8\r JP Z,DM1\r CP 0\r JP NZ,DM2\r DM1: LD DE,400H\r ADD IX,DE\r NLIST S\r ENDIF\r IF F5.EQ.1\r LIST S ;+++++ MATRIX\r LD (IX+8),10H\r LD (IX+9),0\r LD DE,20H\r ADD IX,DE\r NLIST S\r ENDIF\r LIST S\r DM2: INC C\r DEC B\r JP NZ,BLOOP2\r ;\r ;OUTGOING BUFFERS\r ;\r EXX\r INC IY\r LD B,(IY+0)\r BLOOP3: LD (IX-2),L ;LOAD CHANNEL NO.\r PUSH IX\r LD DE,10\r ADD IX,DE\r PUSH IX\r POP DE\r POP IX\r LD (IX+4),E ;LOAD STARTADDRESS OF BUFFERDATA\r LD (IX+5),D\r NLIST S\r IF F5.EQ.0\r LIST S ;+++++ #MATRIX\r NLIST S\r IF (F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.0\r LIST S ;+++++ # VDU, PRINTER & PREEDIT\r LD (IX+8),16 ;LOAD BUFFERSIZE\r LD (IX+9),0\r LD DE,20H\r ADD IX,DE\r PUSH HL\r PUSH IX\r POP DE\r NLIST S\r IF #RAM1K.GT.0\r LIST S\r LD HL,BUFRAM+#RAM1K*800H-800H\r NLIST S\r ENDIF\r IF #RAM1K.EQ.0\r LIST S\r LD HL,BUFRAM\r NLIST S\r ENDIF\r LIST S\r NLIST S\r ENDIF\r IF (F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.1\r LIST S ;+++++ VDU, PRINTER OR PREEDIT\r LD (IX+8),128 ;LOAD BUFFERSIZE\r LD (IX+9),0\r LD DE,90H\r ADD IX,DE\r PUSH HL\r PUSH IX\r POP DE\r LD A,E\r ADD A,20H\r JP NC,DM3A\r LD DE,10H\r ADD IX,DE\r PUSH IX\r POP DE\r NLIST S\r IF #RAM1K.GT.0\r LIST S\r DM3A: LD HL,BUFRAM+#RAM1K*800H-800H\r NLIST S\r ENDIF\r IF #RAM1K.EQ.0\r LIST S\r DM3A: LD HL,BUFRAM\r NLIST S\r ENDIF\r LIST S\r NLIST S\r ENDIF\r LIST S\r AND A\r SBC HL,DE\r POP HL\r JP M,DM4\r LD A,D\r AND 0FH\r CP 8\r JP Z,DM3\r CP 0\r JP NZ,DM4\r DM3: LD DE,400H\r ADD IX,DE\r NLIST S\r ENDIF\r IF F5.EQ.1\r LIST S ;+++++ MATRIX\r LD (IX+8),112\r LD (IX+9),0\r LD DE,80H\r ADD IX,DE\r NLIST S\r ENDIF\r LIST S\r DM4: EXX\r INC C\r EXX\r DEC B\r JP NZ,BLOOP3\r INC L\r EXX\r INC L\r INC IY\r LD A,NOBUF\r CP C\r JP NZ,BLOOP1\r ;\r ;\r ;>>>>>>>> E N D O F B U F F E R H E A D P R E S E T <<<<<<<<<<<\r ;\r ;\r ;\r ;>>>>>>>>>>>>>>>>> B U F F E R C H A I N I N G <<<<<<<<<<<<<<<<<\r ;\r ;\r LD IX,CHSPEC ;\r LD DE,BUFRAM+2 ;\r NLIST S\r IF F4.EQ.0\r LIST S ;+++++ #RCP\r LD A,2 ;\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++ RCP\r LD A,5\r NLIST S\r ENDIF\r LIST S\r PUSH AF ;\r NLIST S\r IF F3.EQ.0\r LIST S ;+++++ #RCDP\r LD B,NOBUF\r NLIST S\r ENDIF\r IF F3.EQ.1\r LIST S ;+++++ RCDP\r ;***** BUFFER CHAINING CH. 2-4 *****\r LD B,NOBUFIN+NOBUFOUT\r CLOOP5: LD C,(IX+0) ;INGOING BUFFERS\r CLOOP6: POP AF ;\r PUSH AF ;\r PUSH BC ;\r PUSH DE ;\r CALL IDEPA ;\r POP DE ;\r POP BC ;\r LD HL,20H ;\r ADD HL,DE ;\r EX DE,HL ;\r DEC B ;\r DEC C ;\r JP NZ,CLOOP6 ;\r ;\r ;\r INC IX ;\r ;\r CLOOP7: LD C,(IX+0) ;OUTGOING BUFFERS\r POP AF ;\r CLOOP8: PUSH AF ;\r PUSH BC ;\r PUSH DE ;\r ODEPAI ;\r POP DE ;\r POP BC ;\r LD HL,50H ;\r ADD HL,DE ;\r EX DE,HL ;\r POP AF ;\r DEC B ;\r DEC C ;\r JP NZ,CLOOP8 ;\r ;\r INC IX ;\r INC A ;\r PUSH AF ;\r LD A,0 ;\r CP B ;\r JP NZ,CLOOP5 ;\r LD B,NOBUF-NOBUFIN-NOBUFOUT\r ;***** BUFFER CHAINING CH. 5-39 *****\r NLIST S\r ENDIF\r LIST S\r CLOOP1: LD C,(IX+0) ;INGOING BUFFERS\r CLOOP2: POP AF ;\r PUSH AF ;\r PUSH BC ;\r PUSH DE ;\r CALL IDEPA ;\r POP DE ;\r POP BC ;\r NLIST S\r IF F5.EQ.0\r LIST S ;+++++ #MATRIX\r NLIST S\r IF (F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.0\r LIST S ;+++++ #VDU, PRINTER & PREEDIT\r LD HL,20H ;\r ADD HL,DE ;\r EX DE,HL ;\r NLIST S\r IF #RAM1K.GT.0\r LIST S\r LD HL,BUFRAM+#RAM1K*800H-800H\r NLIST S\r ENDIF\r IF #RAM1K.EQ.0\r LIST S\r LD HL,BUFRAM\r NLIST S\r ENDIF\r LIST S\r AND A ;\r SBC HL,DE ;\r JP M,DM8 ;\r LD A,D ;\r NLIST S\r ENDIF\r IF (F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.1\r LIST S ;+++++ VDU, PRINTER OR PREEDIT\r LD HL,90H ;\r ADD HL,DE ;\r LD A,L ;\r ADD A,20H ;\r JP NC,DM7A ;\r LD DE,10H ;\r ADD HL,DE ;\r DM7A: EX DE,HL ;\r NLIST S\r IF #RAM1K.GT.0\r LIST S\r LD HL,BUFRAM+#RAM1K*800H-800H\r NLIST S\r ENDIF\r IF #RAM1K.EQ.0\r LIST S\r LD HL,BUFRAM\r NLIST S\r ENDIF\r LIST S\r AND A ;\r SBC HL,DE ;\r JP M,DM8 ;\r LD A,D ;\r NLIST S\r ENDIF\r LIST S ;\r AND 0FH ;\r CP 8 ;\r JP Z,DM7 ;\r CP 0 ;\r JP NZ,DM8 ;\r DM7: LD HL,400H ;\r ADD HL,DE ;\r EX DE,HL ;\r NLIST S\r ENDIF\r IF F5.EQ.1\r LIST S ;+++++ MATRIX\r LD HL,20H ;\r ADD HL,DE ;\r EX DE,HL ;\r NLIST S\r ENDIF\r LIST S\r DM8: DEC B ;\r DEC C ;\r JP NZ,CLOOP2 ;\r ;\r ;\r INC IX ;\r CLOOP3: LD C,(IX+0) ;OUTGOING BUFFERS\r POP AF ;\r CLOOP4: PUSH AF ;\r PUSH BC ;\r PUSH DE ;\r ODEPAI ;\r POP DE ;\r POP BC ;\r NLIST S\r IF F5.EQ.0\r LIST S ;+++++ #MATRIX\r NLIST S\r IF (F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.0\r LIST S ;+++++ #VDU, PRINTER & PREEDIT\r LD HL,20H ;\r ADD HL,DE ;\r EX DE,HL ;\r NLIST S\r IF #RAM1K.GT.0\r LIST S\r LD HL,BUFRAM+#RAM1K*800H-800H\r NLIST S\r ENDIF\r IF #RAM1K.EQ.0\r LIST S\r LD HL,BUFRAM\r NLIST S\r ENDIF\r LIST S\r AND A ;\r SBC HL,DE ;\r JP M,DM6 ;\r LD A,D ;\r NLIST S\r ENDIF\r IF (F11.OR.F12.OR.F13.OR.F2.OR.F7).EQ.1\r LIST S ;+++++ VDU, PRINTER OR PREEDIT\r LD HL,90H ;\r ADD HL,DE ;\r LD A,L ;\r ADD A,20H ;\r JP NC,DM5A ;\r LD DE,10H ;\r ADD HL,DE ;\r DM5A: EX DE,HL ;\r NLIST S\r IF #RAM1K.GT.0\r LIST S\r LD HL,BUFRAM+#RAM1K*800H-800H\r NLIST S\r ENDIF\r IF #RAM1K.EQ.0\r LIST S\r LD HL,BUFRAM\r NLIST S\r ENDIF\r LIST S\r AND A ;\r SBC HL,DE ;\r JP M,DM6 ;\r LD A,D ;\r NLIST S\r ENDIF\r LIST S ;\r AND 0FH ;\r CP 8 ;\r JP Z,DM5 ;\r CP 0 ;\r JP NZ,DM6 ;\r DM5: LD HL,400H ;\r ADD HL,DE ;\r EX DE,HL ;\r NLIST S\r ENDIF\r IF F5.EQ.1\r LIST S ;+++++ MATRIX\r LD HL,80H ;\r ADD HL,DE ;\r EX DE,HL ;\r NLIST S\r ENDIF\r LIST S\r DM6: POP AF ;\r DEC B ;\r DEC C ;\r JP NZ,CLOOP4 ;\r INC IX ;\r INC A ;\r PUSH AF ;\r LD A,0 ;\r CP B ;\r JP NZ,CLOOP1 ;\r POP AF ;\r ;\r ;\r ;\r ;\r ;>>>>>>>>>>> E N D O F B U F F E R C H A I N I N G <<<<<<<<<<<\r ;\r ;\r ;\r ;\r ;>>>>>>>>>>>>> C H A N N E L P R E S E T <<<<<<<<<<<<<<<<<\r ;\r NLIST S\r IF (F12.OR.F61.OR.F7.OR.F8).EQ.1\r LIST S ;+++++VDU-O, CNR-MIXER,\r ;PREEDIT OR RCP CONTROLLED DEVICE\r LD A,2 ;SET CR80-CHANNEL TO 2.\r LD (CR80NO),A\r NLIST S\r ENDIF\r IF (F13.OR.F62).EQ.1\r LIST S ;+++++VDU-A OR ST5-MIXER\r LD A,3 ;SET CR80-CHANNEL TO 3.\r LD (CR80NO),A\r NLIST S\r ENDIF\r IF (F11.OR.F2).EQ.1\r LIST S ;+++++VDU-D OR PRINTER\r LD A,4 ;SET CR80 CHANNEL TO 4.\r LD (CR80NO),A\r NLIST S\r ENDIF\r IF (F3.OR.F4.OR.F8).EQ.0\r LIST S ;+++++#RCDP, RCP & RCP CONTROLLED DEVICE\r LD D,3\r NLIST S\r ENDIF\r IF F8.EQ.1\r LIST S ;+++++RCP CONTROLLED DEVICE\r LD D,4\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++ RCP\r LD D,1\r NLIST S\r ENDIF\r IF F3.EQ.1\r LIST S ;+++++RCDP\r LD D,37\r NLIST S\r ENDIF\r IF F3.EQ.1\r LIST S ;+++++ RCDP\r LD E,2\r LD HL,CRIDSP\r NLIST S\r ENDIF\r IF (F3.OR.F4).EQ.0\r LIST S ;+++++ #RCDP & RCP\r LD E,20H\r LD HL,CRIDSP\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++ RCP\r LD E,50H\r LD HL,CRIDSP+6\r NLIST S\r ENDIF\r LIST S\r LP1: LD C,(HL)\r INC HL\r LD B,(HL)\r LD A,E\r NLIST S\r IF F3.EQ.0\r LIST S ;+++++ #RCDP\r CP 55H\r NLIST S\r ENDIF\r IF F3.EQ.1\r LIST S ;+++++ RCDP\r CP 5\r NLIST S\r ENDIF\r LIST S\r JP P,LP3\r LD A,(DEVNUM)\r LD B,A\r LP3: LD A,3\r PUSH HL\r PUSH DE\r LD D,0\r LP2A: CALL COMM\r BIT 7,A\r JP NZ,LP2A\r LP2: LD A,80H\r CALL COMM\r BIT 7,A\r JP NZ,LP2\r POP DE\r NLIST S\r IF F3.EQ.1\r LIST S ;+++++ RCDP\r INC E\r NLIST S\r ENDIF\r IF F3.EQ.0\r LIST S ;+++++ #RCDP\r LD A,10H\r ADD A,E\r LD E,A\r NLIST S\r ENDIF\r LIST S\r POP HL\r INC HL\r DEC D\r JP NZ,LP1\r ;\r ;\r ;\r ;>>>>>>>>>> E N D O F C H A N N E L P R E S E T <<<<<<<<<<<<\r ;\r ;\r ;\r ;*********** 'RESTART INDICATION' TRANSMIT ROUTINE **********\r ;\r NLIST S\r IF F4.EQ.0\r LIST S ;+++++ #RCP\r LD A,2 ;SEND RESTART IND. TO CR80 (AND RCDP)\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++ RCP\r LD A,5 ;SEND RESTART IND. TO RCDP\r NLIST S\r ENDIF\r LIST S\r RSTIND: PUSH AF\r OGEPAI ;\r JP NC,RSTM1 ;\r PUSH DE ;\r POP IX ;\r LD (IX+2),2 ;LOAD BYTECOUNT\r LD (IX+10),0EFH ;LOAD MESSAGECODE\r LD A,(DEVNUM) ;\r LD (IX+11),A ;LOAD OWN DEVICE NO.\r POP AF\r PUSH AF ;\r CALL ODEPA ;\r RSTM1: POP AF ;\r INC A ;\r NLIST S\r IF (F4.OR.F8).EQ.0\r LIST S ;+++++ # RCP AND # RCP CONTROLLED DEVICE\r CP 5 ;\r NLIST S\r ENDIF\r IF (F4.OR.F8).EQ.1\r LIST S ;+++++ RCP OR RCP CONTROLLED DEVICE\r CP 6 ;\r NLIST S\r ENDIF\r LIST S\r JP NZ,RSTIND ;\r ;\r ;\r ;\r ;********** END OF 'RESTART INDICATION' TRANSMIT ROUTINE **********\r ;\r ;\r ;********** INITIALIZE USER & GEN. DORA H/W *****************\r ;\r CALL HWINIT\r ;\r ;********** END OF H/W INITIALIZATION *************\r ;\r ;\r ;********* S C A N R O U T I N E S T A R T *********************\r ;\r DDBEG: LD SP,PRC1SP\r DDM1: CALL SCOMMON ;RETURN TO SCHEDULER\r EI\r NLIST S\r IF F4.EQ.0\r LIST S ;+++++ #RCP\r LD L,NOCH-2 ;SCANNING RESTART\r LD A,2\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++ RCP\r LD L,NOCH-5 ;SCANNING RESTART\r LD A,5\r NLIST S\r ENDIF\r LIST S\r PUSH AF\r PUSH HL\r CALL IG1 ;DEQUEUE NEXT CHANNEL QUEUE\r JP NC,DDM2 ;IF CHANNEL WAS NOT EMPTY THEN\r ;BEGIN\r DDM3: POP HL\r NLIST S\r IF F4.EQ.0\r LIST S ;+++++ #RCP\r LD L,NOCH-2\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++ RCP\r LD L,NOCH-5\r NLIST S\r ENDIF\r LIST S\r PUSH HL\r CALL DIST ; DO 'DISTRIBUTE ROUTINE'\r CALL SCOMMON ; RETURN TO SCHEDULER\r EI\r ;ENDIF\r DDM2: POP HL ;REPEAT UNTIL A NOT EMPTY QUEUE HAS BEEN\r ; FOUND OR SCAN IS COMPLETED.\r ;BEGIN\r POP AF\r DEC L ; TEST IF SCAN IS COMPLETED\r JP Z,DDM1 ; IF YES THEN GOTO DDM1 (SCANNING RESTART)\r ; ELSE\r ; BEGIN\r INC A ; TEST IF 'NO. OF CHANNELS' LIMIT IS\r CP NOCH ; EXCEEDED.\r JP M,DDM4 ; IF YES THEN\r ; BEGIN\r NLIST S\r IF F4.EQ.0\r LIST S ;+++++ #RCP\r LD A,2 ; LOAD CHANNEL 2\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++ RCP\r LD A,5 ; LOAD CHANNEL 5\r NLIST S\r ENDIF\r LIST S\r ; ENDIF\r DDM4: PUSH AF\r PUSH HL\r CALL IG1 ; DEQUEUE NEXT CHANNEL QUEUE\r JP NC,DDM2 ; IF CHANNEL WAS NOT EMPTY THEN GOTO DDM3\r ; (DO DISTRIBUTE ROUTINE)\r ; END\r JP DDM3 ;END REPEAT\r \r **************** E N D O F S C A N R O U T I N E ***************\r ;\r \r ********** S T A R T O F D I S T R I B U T E R O U T I N E *******\r \r DIST: LD HL,2 ;\r ADD HL,DE ;\r LD A,(HL) ;\r CP 0 ;TEST IF BUFFER IS EMPTY (BYTECOUNT # 0)\r JP Z,DDM5 ;OR CONTAINS AN ERROR MESSAGE\r LD BC,5 ;\r ADD HL,BC ;\r LD A,(HL) ;\r AND 0CH ;\r CP 0 ;\r JP NZ,DDM5 ;IF YES THEN EXIT\r INC HL ;\r LD A,(HL) ;GET MESSAGE CODE FROM BUFFER\r ;ENDIF\r LD HL,TABL1 ;FIND MESSAGE/PANEL CODE IN TABL1\r LD BC,NUMMES\r CPIR\r JP Z,DDM6 ;TEST IF MESSAGE/PANEL CODE WAS ILLEGAL\r ;IF YES THEN\r ;BEGIN\r DDM5: CALL ID1 ; ENQUEUE Q-ELEMENT IN EMP.BUF.QUEUE\r RET ; RETURN TO SCAN ROUTINE\r ;END\r ;ELSE\r ;BEGIN\r ;\r DDM6: SLA C ;LOAD (MESSAGE CODE LIST NO.)*2\r LD HL,3 ;INTO BYTE 5 IN BUFFER\r ADD HL,DE ;\r LD (HL),C ;\r LD HL,TABL1+NUMMES*3-1 ;FIND PROCESS NO./ROUTINE ADDRESS IN TABL1\r AND 0FFH\r SBC HL,BC\r LD A,(HL)\r AND 0FFH ;TEST IF PROCESS OR ROUTINE.\r JP Z,PROCQ ;IF ROUTINE THEN\r ; BEGIN\r LD B,(HL) ; READ ROUTINE START ADDRESS IN TABL1\r DEC HL\r LD C,(HL)\r LD H,B\r LD L,C\r JP (HL) ; GOTO CASE ROUTINES\r ; END\r ;ELSE\r ; BEGIN\r PROCQ: DEC HL ; READ PROCESS NO IN TABL1\r PUSH HL\r LD B,(HL)\r IACT: LD HL,SYSRAM+200H+5 ;FIND ADDRESS OF PROCESS DESCRIPTOR\r LD C,B\r SLA C\r SLA C\r SLA C\r SLA C\r SRL B\r SRL B\r SRL B\r SRL B\r ADD HL,BC\r SET 7,(HL) ; ACTIVATE PROCESS\r POP HL\r LD BC,NUMMES*2 ; FIND ADDRESS OF PROCESS QUEUE.\r ADD HL,BC\r PUSH HL\r POP IX\r LD L,(IX+0)\r LD H,(IX+1)\r CALL SUBENQ ; ENQUEUE Q-ELEMENT IN PROCESS QUEUE.\r RET ; RETURN TO SCAN ROUTINE\r ; END\r ;END\r \r ;********** E N D O F D I S T R I B U T E R O U T I N E *********\r ;\r NLIST S\r IF F4.EQ.1\r LIST S ;+++++RCP\r ;********** SPECIAL RCP DISTRIBUTION ROUTINE ***************\r ;\r ROUT0: LD HL,9 ;FIND MESSAGE CODE IN RTABL\r ADD HL,DE\r LD A,(HL)\r LD HL,RTABL\r LD BC,4\r CPIR ;TEST IF MESSAGE CODE WAS ILLEGAL\r JP NZ,RTEXIT ;IF YES THEN GOTO EXIT ROUTINE\r ;ENDIF\r LD HL,RTABL+0AH ;FIND ROUTINE ADDRESS IN RTABL\r SLA C\r AND 0FFH\r SBC HL,BC\r PUSH HL\r POP IX\r LD L,(IX+0)\r LD H,(IX+1)\r JP (HL) ;START ROUTINE EXECUTION\r ;\r RTABL: DB 0F2H ;SPECIAL RCP DISTRIBUTION TABLE\r DB 80H\r DB 84H\r DB 0E4H\r DW ROUT1\r DW ROUT3\r DW ROUT5\r DW ROUT6B\r ;************** END OF SPECIAL RCP DISTRIBUTION ROUTINE ****************\r ;\r NLIST S\r ENDIF\r LIST S\r ;********** 'SEND ERROR CONDITION' ROUTINE *****************************\r ;\r ROUT1: LD HL,ECOND2 ;SET BIT 7 IN ECOND2 REGISTER\r SET 7,(HL)\r JP RTEXIT ;GOTO EXIT ROUTINE\r ;\r ;**** END OF 'SEND ERROR CONDITION' ROUTINE*********************\r ;\r NLIST S\r IF (F3.OR.F4.OR.F5).EQ.0\r LIST S ;+++++#RCDP, RCP & MATRIX\r ;***** 'SET CR80 CHANNEL' ROUTINE ************************\r ;\r ROUT2: PUSH DE\r POP IX ;Q-ELEMENT POINTER\r LD A,(IX+9)\r LD (CR80NO),A ;LOAD CR80 CHANNEL NO. INTO CR80NO REGISTER\r NLIST S\r IF F11.EQ.1\r LIST S ;+++++VDU-D\r LD A,0 ;RESET CR80 STATUS SWITCH REGISTERS\r LD (CR80SS),A\r LD (CR80SS+1),A\r LD (CR80SS+2),A\r NLIST S\r ENDIF\r LIST S\r LD HL,ECOND2 ;SET BIT 5 IN ECOND2 REGISTER\r SET 5,(HL)\r JP RTEXIT ;GOTO EXIT ROUTINE\r ;\r ;******** END OF 'SET CR80 CHANNEL' ROUTINE *********************\r ;\r NLIST S\r ENDIF\r ;\r IF (F4.OR.F8).EQ.1\r LIST S ;+++++RCP OR RCP CONTROLLED DEVICE\r ;\r ;***** 'ESTABLISH DELEGATION' ROUTINE **********\r ;\r ROUT3: PUSH DE\r POP IX ;Q-ELEMENT POINTER\r NLIST S\r IF F4.EQ.1\r LIST S ;+++++RCP\r INC IX ;ADJUST QUEUE ELEMENT POINTER TO RCP FORMAT\r LD A,(IX+9)\r NLIST S\r IF F43.EQ.1\r LIST S ;+++++RCP(VTR)\r CP 0C8H ;FIND CHARACTER TO BE DISPLAYED\r JP NZ,DDM30\r LD A,0AH\r JP DDM31\r DDM30: SUB 109\r DDM31: RLCA\r RLCA\r RLCA\r RLCA\r CPL\r AND 0F0H\r LD B,A\r LD A,(IX+0AH)\r CP 1 ;FIND DISPLAY TO BE SET\r JP NZ,DDM32\r LD C,DIS1.LOW.\r JP DDM34\r DDM32: CP 2\r JP NZ,DDM33\r LD C,DIS2.LOW.\r JP DDM34\r DDM33: CP 3\r JP NZ,DDM38\r LD C,DIS3.LOW.\r NLIST S\r ENDIF\r IF F41.EQ.1\r LIST S ;+++++RCP(M I)\r CP 106 ;FIND CHARACTER TO BE DISPLAYED\r JP Z,DDM30\r CP 108\r JP Z,DDM30\r CP 15H\r JP Z,DDM30\r LD A,0E0H\r JP DDM31\r DDM30: LD A,0D0H\r DDM31: LD B,A\r LD A,(IX+0AH)\r CP 3AH ;FIND DISPLAY TO BE SET\r JP NZ,DDM32\r LD C,KDIS.LOW.\r JP DDM34\r DDM32: CP 1AH\r JP NZ,DDM33\r LD C,TPDIS.LOW.\r JP DDM34\r DDM33: CP 22H\r JP NZ,DDM35\r LD C,TMDIS.LOW.\r JP DDM34\r DDM35: CP 2AH\r JP NZ,DDM36\r LD C,DDIS.LOW.\r JP DDM34\r DDM36: CP 31H\r JP NZ,DDM38\r LD C,SDIS.LOW.\r NLIST S\r ENDIF\r IF F42.EQ.1\r LIST S ;+++++RCP(M II)\r CP 106 ;FIND CHARACTER TO BE DISPLAYED\r JP Z,DDM30\r CP 108\r JP Z,DDM30\r CP 15H\r JP Z,DDM30\r CP 18H\r JP Z,DDM30\r CP 1AH\r JP Z,DDM30\r LD A,0E0H\r JP DDM31\r DDM30: LD A,0D0H\r DDM31: LD B,A\r LD A,(IX+0AH)\r CP 39H ;FIND DISPLAY TO BE SET\r JP NZ,DDM32\r LD C,KDIS.LOW.\r JP DDM34\r DDM32: CP 19H\r JP NZ,DDM33\r LD C,TPDIS.LOW.\r JP DDM34\r DDM33: CP 21H\r JP NZ,DDM35\r LD C,TMDIS.LOW.\r JP DDM34\r DDM35: CP 29H\r JP NZ,DDM36\r LD C,DDIS.LOW.\r JP DDM34\r DDM36: CP 11H\r JP NZ,DDM37\r LD C,ADIS.LOW.\r JP DDM34\r DDM37: CP 9\r JP NZ,DDM38\r LD C,VDIS.LOW.\r NLIST S\r ENDIF\r LIST S\r DDM34: IN A,(C)\r AND 0FH\r OR B\r OUT (C),A\r DDM38:\r NLIST S\r ENDIF\r IF F8.EQ.1\r LIST S ;+++++RCP CONTROLLED DEVICE\r LD A,(IX+0AH)\r NLIST S\r IF F84.EQ.1\r LIST S ;+++++TELECINE\r BIT 5,A ;TEST IF PANEL IS PROJ. OR MATCH\r JP Z,DDM7 ;IF MATCH THEN\r ; BEGIN\r LD (PANCOM),A ; LOAD PANCOM REGISTER WITH DELEGATED\r ; PANEL CODE\r PUSH DE\r LD DE,70H ;\r LD A,8 ; RESET CHANNEL 7\r W1A: CALL COMM ;\r BIT 7,A ;\r JP NZ,W1A ;\r LD A,5 ;\r W1B: CALL COMM ;\r BIT 7,A ;\r JP NZ,W1B ;\r LD C,IDLSBM\r LD B,(IX+9)\r LD A,3\r W1: CALL COMM ; OPEN CHANNEL 7 WITH NEW CRID\r BIT 7,A ;\r JP NZ,W1 ;\r WAIT1: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT1 ;\r CALL SCOMMON ;\r EI\r JP WAIT1 ;\r CONT1: POP DE ;\r JP DDM10 ; END\r ;ELSE\r ;BEGIN\r NLIST S\r ENDIF\r LIST S\r DDM7: LD (PANCO),A ;LOAD PANCO REGISTER WITH DELEGATED PANEL CODE\r NLIST S\r IF F81.EQ.1\r LIST S ;+++++VTR\r CP 1\r JP Z,DDM40\r CP 2\r JP NZ,DDM41\r LD C,IDLSB2\r JP DDM42\r DDM41: LD C,IDLSB3\r JP DDM42\r NLIST S\r ENDIF\r LIST S\r DDM40: LD C,IDLSB\r DDM42: PUSH DE\r LD B,(IX+9) ;\r LD DE,60H ;\r PUSH BC ;\r LD A,8 ; RESET CHANNEL 6\r W2A: CALL COMM ;\r BIT 7,A ;\r JP NZ,W2A ;\r LD A,5 ;\r W2B: CALL COMM ;\r BIT 7,A ;\r JP NZ,W2B ;\r POP BC ;\r LD A,3 ;OPEN CHANNEL 6 WITH NEW CRID\r W2: CALL COMM ;\r BIT 7,A ;\r JP NZ,W2 ;\r WAIT2: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT2 ;\r CALL SCOMMON ;\r EI\r JP WAIT2 ;\r CONT2: POP DE ;\r DDM10: JP ROUT6 ;GOTO 'SEND DELEGATION STATUS' ROUTINE\r ;END\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++RCP\r LD HL,TABL4 ;FIND CHANNEL NO. IN TABL4/41\r LD BC,NOPAN\r LD A,(IX+0AH)\r CPIR\r JP NZ,RTEXIT ;IF PANEL CODE WAS ILLEGAL THEN GOTO 'EXIT ROUTINE\r ;ENDIF\r LD HL,TABL4+2*NOPAN-1\r AND 0FFH\r SBC HL,BC\r LD B,(HL)\r SLA B\r SLA B\r SLA B\r SLA B\r \r \r NLIST S\r IF (F41.OR.F42).EQ.1\r LIST S ;+++++RCP (M I) OR RCP (M II)\r AND 0F8H ;TEST IF PANEL IS TC-MATCH\r CP 20H\r JP NZ,DDM43\r LD C,7FH\r JP DDM43A\r DDM43: LD C,6FH\r DDM43A: PUSH DE\r POP IY\r PUSH DE\r LD E,B\r LD D,0\r LD B,(IY+0AH)\r PUSH BC ;\r LD A,8 ;RESET SPECIFIED CHANNEL\r W3A: CALL COMM ;\r BIT 7,A ;\r JP NZ,W3A ;\r LD A,5 ;\r W3B: CALL COMM ;\r BIT 7,A ;\r JP NZ,W3B ;\r POP BC ;\r LD A,3 ;\r ;OPEN SPECIFIED CHANNEL WITH NEW CRID\r W3: CALL COMM ;\r BIT 7,A ;\r JP NZ,W3 ;\r WAIT3: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT3 ;\r CALL SCOMMON ;\r EI\r JP WAIT3 ;\r CONT3: POP DE\r JP ROUT6A ;\r NLIST S\r ENDIF\r IF F43.EQ.1\r LIST S ;+++++RCP(VTR)\r LD C,6FH ;\r PUSH DE ;\r POP IY ;\r PUSH DE ;\r LD E,B ;\r LD D,0 ;\r LD B,(IY+0AH) ;\r LD A,B ;\r CP 0C8H ;TEST IF DELEGATION IS TO VTRA\r JP Z,DDM44 ;IF NO THEN\r PUSH BC ;BEGIN\r LD A,8 ; RESET NORMAL CHANNEL\r W4A: CALL COMM ;\r BIT 7,A ;\r JP NZ,W4A ;\r LD A,5 ;\r W4B: CALL COMM ;\r BIT 7,A ;\r JP NZ,W4B ;\r POP BC ;\r LD A,3 ;\r ; OPEN NORMAL CHANNEL WITH NEW CRID\r W4: CALL COMM ;\r BIT 7,A ;\r JP NZ,W4 ;\r WAIT4: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT4 ;\r CALL SCOMMON ;\r EI\r JP WAIT4 ;\r CONT4: POP DE\r JP ROUT6A ; GOTO 'SEND DELEGATION STATUS' ROUTINE (A-ENTRY)\r ;END\r ;ELSE\r DDM44: LD B,73H ;BEGIN\r PUSH BC ;\r LD A,8 ;RESET VTR6 CHANNEL\r W5A: CALL COMM ;\r BIT 7,A ;\r JP NZ,W5A ;\r LD A,5 ;\r W5B: CALL COMM ;\r BIT 7,A ;\r JP NZ,W5B ;\r POP BC ;\r LD A,3 ;\r PUSH BC\r PUSH DE\r ;OPEN VTR6 CHANNEL WITH CRID = 736FH\r W5: CALL COMM ;\r BIT 7,A ;\r JP NZ,W5 ;\r WAIT5: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT5 ;\r CALL SCOMMON ;\r EI\r JP WAIT5 ;\r CONT5: POP DE ;\r POP BC\r LD A,10H ;\r ADD A,E\r LD E,A\r INC B\r PUSH BC ;\r LD A,8 ;RESET VTR7 CHANNEL\r W6A: CALL COMM ;\r BIT 7,A ;\r JP NZ,W6A ;\r LD A,5 ;\r W6B: CALL COMM ;\r BIT 7,A ;\r JP NZ,W6B ;\r POP BC ;\r LD A,3 ;\r PUSH BC ;\r PUSH DE\r ;OPEN VTR7 CHANNEL WITH CRID = 746FH\r W6: CALL COMM ;\r BIT 7,A ;\r JP NZ,W6 ;\r WAIT6: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT6 ;\r CALL SCOMMON ;\r EI\r JP WAIT6 ;\r CONT6: POP DE\r POP BC\r LD A,10H\r ADD A,E\r LD E,A\r INC B ;\r PUSH BC ;\r LD A,8 ;RESET VTR8 CHANNEL\r W7A: CALL COMM ;\r BIT 7,A ;\r JP NZ,W7A ;\r LD A,5 ;\r W7B: CALL COMM ;\r BIT 7,A ;\r JP NZ,W7B ;\r POP BC ;\r LD A,3 ;\r ;OPEN VTR8 CHANNEL WITH CRID = 756FH\r W7: CALL COMM ;\r BIT 7,A ;\r JP NZ,W7 ;\r WAIT7: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT7 ;\r CALL SCOMMON ;\r EI\r JP WAIT7 ;\r CONT7: POP DE\r JP ROUT6A ;GOTO 'SEND DELEGATION STATUS' ROUTINE (A-ENTRY)\r ;END\r ;ENDIF\r NLIST S\r ENDIF\r ENDIF\r LIST S\r ;******** END OF 'ESTABLISH DELEGATION' ROUTINE *******************\r ;\r NLIST S\r IF F81.EQ.1\r LIST S ;+++++VTR\r ;******** 'ESTABLISH DELEGATION TO VTRA' ROUTINE *****************\r ;\r ROUT4: LD A,(DEVNUM) ;\r CP 115 ;\r JP M,RTEXIT ;\r PUSH DE\r POP IX\r LD A,(IX+0AH)\r LD (PANCO),A ;LOAD PANCO REGISTER WITH THE DELEGATED PANEL CODE\r CP 2 ;FIND CRID (LSB)\r JP NZ,DDM46\r LD A,9FH\r JP DDM48\r DDM46: CP 3\r JP NZ,DDM47\r LD A,0CFH\r JP DDM48\r DDM47: LD A,6FH\r DDM48:\r PUSH AF ;\r LD B,0 ;\r LD A,(DEVNUM) ;\r CP 115 ;\r JP Z,DDM48A ;\r LD B,10H ;\r CP 116 ;\r JP Z,DDM48A ;\r LD B,20H ;\r DDM48A: POP AF ;\r ADD A,B ;\r PUSH DE\r LD C,A ;\r LD B,(IX+9) ;\r LD DE,60H\r PUSH BC ;\r LD A,8 ;RESET CHANNEL 6\r W8A: CALL COMM ;\r BIT 7,A ;\r JP NZ,W8A ;\r LD A,5 ;\r W8B: CALL COMM ;\r BIT 7,A ;\r JP NZ,W8B ;\r POP BC ;\r LD A,3 ;\r ;OPEN CHANNEL 6 WITH CRID INDICATING CORRECT RCP VTRA-CHANNEL\r W8: CALL COMM ;\r BIT 7,A ;\r JP NZ,W8 ;\r WAIT8: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT8 ;\r CALL SCOMMON ;\r EI\r JP WAIT8 ;\r CONT8: POP DE\r JP ROUT6 ;GOTO 'SEND DELEGATION STATUS' ROUTINE\r ;\r ;****** END OF 'ESTABLISH DELEGATION TO VTRA' ROUTINE **********\r ;\r NLIST S\r ENDIF\r LIST S\r ;********** 'DELETE DELEGATION' ROUTINE *************\r ROUT5:\r NLIST S\r IF F8.EQ.1\r LIST S ;+++++RCP CONTROLLED DEVICE\r LD C,60H\r NLIST S\r IF F84.EQ.1\r LIST S ;+++++TELECINE\r PUSH DE\r POP IX\r LD A,(IX+0AH)\r BIT 5,A ;TEST IF PANEL IS PROJ OR MATCH\r JP Z,DDM11 ;IF MATCH THEN\r ; BEGIN\r LD C,70H ; ADJUST POINTER\r LD A,0\r LD (PANCOM),A ; END\r JP DDM11A ;ENDIF\r NLIST S\r ENDIF\r LIST S\r DDM11: LD A,0\r LD (PANCO),A\r DDM11A: PUSH DE\r LD E,C\r LD D,0\r LD A,2 ;\r ;CLOSE CHANNEL 6/7\r W9: CALL COMM ;\r BIT 7,A ;\r JP NZ,W9 ;\r WAIT9: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT9 ;\r CALL SCOMMON ;\r EI\r JP WAIT9 ;\r CONT9: POP DE\r JP ROUT6 ;\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++RCP\r PUSH DE\r POP IX\r LD A,(IX+0BH)\r NLIST S\r IF F43.EQ.1\r LIST S ;+++++RCP(VTR)\r CP 1 ;FIND DISPLAY TO BE RESET\r JP NZ,DDM23\r LD C,DIS1.LOW.\r JP DDM25\r DDM23: CP 2\r JP NZ,DDM24\r LD C,DIS2.LOW.\r JP DDM25\r DDM24: CP 3\r JP NZ,DDM28\r LD C,DIS3.LOW.\r DDM25: IN A,(C) ;RESET DISPLAY\r OR 0F0H\r OUT (C),A\r NLIST S\r ENDIF\r IF F41.EQ.1\r LIST S ;++++RCP(M I)\r CP 3AH ;FIND DISPLAY TO BE RESET\r JP NZ,DDM23\r LD C,KDIS.LOW.\r JP DDM27\r DDM23: CP 1AH\r JP NZ,DDM24\r LD C,TPDIS.LOW.\r JP DDM27\r DDM24: CP 22H\r JP NZ,DDM25\r LD C,TMDIS.LOW.\r JP DDM27\r DDM25: CP 2AH\r JP NZ,DDM26\r LD C,DDIS.LOW.\r JP DDM27\r DDM26: CP 31H\r JP NZ,DDM28\r LD C,SDIS.LOW.\r DDM27: IN A,(C) ;RESET DISPLAY\r OR 0F0H\r OUT (C),A\r NLIST S\r ENDIF\r IF F42.EQ.1\r LIST S ;+++++RCP(M II)\r CP 39H ;FIND DISPLAY TO BE RESET\r JP NZ,DDM23\r LD C,KDIS.LOW.\r JP DDM29\r DDM23: CP 19H\r JP NZ,DDM24\r LD C,TPDIS.LOW.\r JP DDM29\r DDM24: CP 21H\r JP NZ,DDM25\r LD C,TMDIS.LOW.\r JP DDM29\r DDM25: CP 29H\r JP NZ,DDM26\r LD C,DDIS.LOW.\r JP DDM29\r DDM26: CP 11H\r JP NZ,DDM27\r LD C,ADIS.LOW.\r JP DDM29\r DDM27: CP 9\r JP NZ,DDM28\r LD C,VDIS.LOW.\r DDM29: IN A,(C) ;RESET DISPLAY\r OR 0F0H\r OUT (C),A\r NLIST S\r ENDIF\r LIST S\r DDM28: LD A,(IX+0BH) ;FIND CHANNEL NO. IN TABL4\r LD BC,NOPAN\r LD HL,TABL4\r CPIR\r JP NZ,RTEXIT ;IF PANEL CODE WAS ILLEGAL THEN GOTO EXIT ROUTINE\r ;ENDIF\r LD HL,TABL4+2*NOPAN-1\r AND 0FFH\r SBC HL,BC\r PUSH DE\r LD E,(HL) ;\r SLA E\r SLA E\r SLA E\r SLA E\r LD D,0\r LD A,2 ;\r NLIST S\r IF (F41.OR.F42).EQ.1\r LIST S ;+++++ RCP (MI) OR (MII)\r ;CLOSE CHANNEL\r W10: CALL COMM ;\r BIT 7,A ;\r JP NZ,W10 ;\r WAIT10: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT10 ;\r CALL SCOMMON ;\r EI\r JP WAIT10 ;\r CONT10: POP DE\r NLIST S\r ENDIF\r IF F43.EQ.1\r LIST S ;+++++ RCP(VTR)\r PUSH DE ;\r W10: CALL COMM ;CLOSE VTR6-CHANNEL\r BIT 7,A ;\r JP NZ,W10 ;\r WAIT10: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT10 ;\r CALL SCOMMON ;\r EI\r JP WAIT10 ;\r CONT10: POP DE\r LD A,10H\r ADD A,E\r LD E,A\r LD A,2\r PUSH DE\r W11: CALL COMM ;CLOSE VTR7-CHANNEL\r BIT 7,A ;\r JP NZ,W11 ;\r WAIT11: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT11 ;\r CALL SCOMMON ;\r EI\r JP WAIT11 ;\r CONT11: POP DE\r LD A,10H ;\r ADD A,E\r LD E,A\r LD A,2\r ;CLOSE VTR8-CHANNEL\r W12: CALL COMM ;\r BIT 7,A ;\r JP NZ,W12 ;\r WAIT12: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT12 ;\r CALL SCOMMON ;\r EI\r JP WAIT12 ;\r CONT12: POP DE\r NLIST S\r ENDIF\r LIST S\r NLIST S\r ENDIF\r LIST S\r ;\r ;********** END OF 'DELETE DELEGATION' ROUTINE *****************\r ;;\r ;\r ;***** 'SEND DELEGATION STATUS' ROUTINE **********\r NLIST S\r IF F8.EQ.1\r LIST S ;+++++RCP CONTROLLED DEVICE\r ROUT6B: PUSH DE ;\r LD A,5 ;START OUTPUTTER, CH. 5\r LD DE,50H ;\r W16A: CALL COMM ;\r BIT 7,A ;\r JP NZ,W16A ;\r POP DE ;\r ;\r ROUT6: LD A,6 ;LOAD CHANNEL NO. 6\r PUSH DE\r NLIST S\r IF F84.EQ.1\r LIST S ;+++++TELECINE\r PUSH DE\r POP IY\r BIT 5,(IY+0AH)\r LD C,0 ;RESET 'MATCH' INDICATOR\r ;TEST IF PANEL IS PROJ OR MATCH\r JP Z,DDM12A ;IF MATCH THEN\r ; BEGIN\r LD A,7 ; ADJUST CHANNEL NO. TO 7\r LD C,2 ; SET 'MATCH' INDICATOR\r ; END\r ;ENDIF\r DDM12A: PUSH BC ;\r NLIST S\r ENDIF\r LIST S\r DDM12: PUSH AF ;\r ;REPEAT UNTIL EMPTY QUEUE IS FOUND\r DDM12B: OGEPA1 5 ;GET EMPTY OUTGOING Q-ELEMENT\r JP C,DDM20 ;\r CALL SCOMMON ;\r EI ;\r JP DDM12B ;END REPEAT\r DDM20: POP AF ;\r PUSH DE ;\r SLA A\r SLA A\r SLA A\r SLA A\r LD E,A\r LD D,0\r LD A,4\r ;TEST IF DELEGATION IS ESTABLISHED\r W13: CALL COMM ;\r BIT 7,A ;\r JP NZ,W13 ;\r WAIT13: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT13 ;\r CALL SCOMMON ;\r EI\r JP WAIT13 ;\r CONT13: BIT 6,A\r JP Z,DDM13 ;IF YES THEN\r ; BEGIN\r JP DDM14\r ; END\r ;ELSE\r ; BEGIN\r DDM13: LD B,0 ; SET DEVICE NO. = 0\r ; END\r ;ENDIF\r DDM14: POP DE ;\r PUSH DE\r POP IX\r LD (IX+2),4\r LD (IX+8),0ECH ;LOAD MESSAGE CODE INTO Q-ELEMENT\r LD (IX+9),B ;LOAD TDX DEVICE NO. INTO Q-ELEMENT\r NLIST S\r IF F84.EQ.1\r LIST S ;+++++TELECINE\r POP BC ;\r BIT 1,C ;TEST IF PANEL IS PROJ OR MATCH\r JP Z,DDM21 ;IF MATCH THEN\r ; BEGIN\r LD A,(PANCOM) ; GET PANEL CODE\r CP 0 ; IF MATCH-PANEL IS NOT DELEGATED THEN\r JP NZ,DDM22 ;\r LD A,20H ; INSERT MATCH-PANEL 0 CODE\r ; ENDIF\r ; END\r JP DDM22 \r ;ELSE\r ;BEGIN\r NLIST S\r ENDIF\r LIST S\r DDM21: LD A,(PANCO) ;GET PANEL CODE\r NLIST S\r IF F84.EQ.1\r LIST S\r CP 0 ;IF PROJ-PANEL IS NOT DELEGATED THEN\r JP NZ,DDM22 ;\r LD A,18H ;INSERT PROJ-PANEL 0 CODE\r ;ENDIF\r ;END\r NLIST S\r ENDIF\r LIST S\r DDM22: LD (IX+0AH),A ;LOAD PANEL CODE INTO Q-ELEMENT\r LD A,(DEVNUM) ;\r LD (IX+0BH),A ;LOAD OWN TDX DEV.NO. INTO Q-ELEMENT\r PUSH BC\r CALL OD1 ;TRANSMIT Q-ELEMENT TO RCDP\r POP BC\r POP DE\r PUSH DE\r POP IX\r LD A,(IX+8) ;TEST IF MESSAGE IS 'SEND DEL. STAT.'\r CP 0E4H\r JP Z,RTEXIT ;IF YES THEN GOTO EXIT ROUTINE\r ;ENDIF\r ;TRANSFER MESSAGE TO APPLICATION PROCESS\r NLIST S\r IF F84.EQ.1\r LIST S ;+++++TELECINE\r BIT 1,C\r JP Z,DDM50\r ACTIVATE S,7\r LD HL,PQH7\r JP DDM51\r NLIST S\r ENDIF\r LIST S\r DDM50: ACTIVATE S,6\r LD HL,PQH6\r DDM51: CALL SUBENQ\r RET ;RETURN TO SCAN ROUTINE\r NLIST S\r ENDIF\r IF F4.EQ.1\r LIST S ;+++++RCP\r ROUT6A: PUSH DE\r POP IX\r LD A,(IX+0BH)\r JP DDM15\r ROUT6B: PUSH DE ;\r LD A,5 ;START OUTPUTTER, CH. 5\r LD DE,50H ;\r W16A: CALL COMM ;\r BIT 7,A ;\r JP NZ,W16A ;\r POP DE ;\r ;\r ROUT6: PUSH DE\r POP IX\r LD A,(IX+0AH)\r DDM15: LD HL,TABL4 ;FIND PANEL CODE IN TABL4\r LD BC,NOPAN\r CPIR\r JP NZ,RTEXIT ;IF PANEL CODE WAS ILLEGAL THEN GOTO EXIT ROUTINE\r PUSH DE\r PUSH AF\r ;ENDIF\r LD HL,TABL4+2*NOPAN-1\r AND 0FFH\r SBC HL,BC\r LD E,(HL) ;FIND CHANNEL NO. IN TABL4/41\r SLA E\r SLA E\r SLA E\r SLA E\r LD D,0\r LD A,4\r PUSH DE\r ;TEST IF DELEGATION IS ESTABLISHED\r W14: CALL COMM ;\r BIT 7,A ;\r JP NZ,W14 ;\r WAIT14: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT14 ;\r CALL SCOMMON ;\r EI\r JP WAIT14 ;\r CONT14: POP DE\r BIT 6,A\r JP Z,DDM16 ;IF YES THEN\r NLIST S\r IF F43.EQ.1\r LIST S ;+++++RCP(VTR)\r ; BEGIN\r LD A,10H ;\r ADD A,E ;\r LD E,A ;\r LD A,4 ;\r PUSH BC ;\r ; TEST IF DELEGATED TO VTRA\r W15: CALL COMM ;\r BIT 7,A ;\r JP NZ,W15 ;\r WAIT15: LD A,80H ;\r CALL COMM ;\r BIT 7,A ;\r JP Z,CONT15 ;\r CALL SCOMMON ;\r EI\r JP WAIT15 ;\r CONT15: POP BC ;\r BIT 6,A ;\r JP Z,DDM60 ; IF YES THEN\r LD C,0C8H ; SET TDX DEV.NO. = VTRA DUMMY CODE\r JP DDM18 ; GOTO DDM18\r ; ENDIF\r ; END\r NLIST S\r ENDIF\r LIST S\r DDM60: LD C,B ; BEGIN\r ; GET DELEGATED TDX DEVICE NO.\r JP DDM18 ; END\r ;ELSE\r ; BEGIN\r DDM16: LD C,0 ; SET DELEGATED TDX DEVICE NO. = 0\r ; END\r ;ENDIF\r DDM18: PUSH BC\r ;REPEAT UNTIL EMPTY QUEUE IS FOUND\r DDM18A: OGEPA1 5 ;GET EMPTY OUTGOING Q-ELEMENT\r JP C,DDM19 ;\r CALL SCOMMON ;\r EI ;\r JP DDM18A ;END REPEAT\r DDM19: POP BC ;\r PUSH DE\r POP IX\r LD (IX+2),4\r LD (IX+8),0ECH ;LOAD MESSAGE CODE INTO Q-ELEMENT\r LD (IX+9),C ;LOAD TDX DEVICE NO. INTO Q-ELEMENT\r POP AF\r LD (IX+0AH),A ;LOAD PANEL CODE INTO Q-ELEMENT\r LD A,(DEVNUM) ;\r LD (IX+0BH),A ;LOAD OWN TDX DEVICE NO. INTO Q-ELEMENT\r CALL OD1 ;TRANSMIT Q-ELEMENT TO RCDP\r POP DE\r NLIST S\r ENDIF\r LIST S\r ;\r ;********** END OF 'SEND DELEGATION STATUS' ROUTINE **********\r ;\r NLIST S\r ENDIF\r LIST S\r ;********** EXIT ROUTINE **********\r ;\r ID1:\r RTEXIT: IDEPA1 Y,BFSIZE ;ENQUEUE INGOING Q-ELEMENT IN\r ;EMPTY BUFFER QUEUE\r RET ;RETURN TO SCAN ROUTINE\r ;\r ;********** END OF EXIT ROUTINE **********\r ;\r ;\r ;********* IGEPA ROUTINE **********\r ;\r IG1: IGEPA1 \r RET\r ;\r ;***** END OF OGEPA ROUTINE *****\r ;\r ;\r ;******* FAULT RECOVERY INTERRUPT ROUTINE (CTC CH.2) *************\r ;\r RECOV: EI\r RETI\r ;\r ;******************** END ******************************\r ;\r ;\r NLIST M\r ;\r ENDM\r ;\r ;\r ;\r ;\r ;\r ;\r ACTIVATE MACRO #ID,#NO\r NLIST M\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 LIST M\r ENDM\r ;\r ;\r ;\r CREATE MACRO #ID,#NO,#NAME,#PRIO\r NLIST M\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 LIST M\r ENDM\r ;\r ;\r ;\r EJEC\r ;=============================================================================;\r ;\r ; THIS MODULE CONTAINS MACROES NEEDED FOR THE\r ; INITIALIZATION OF THE TQM-PROCESS-COMPLEX.\r ;\r ; THE INIT. SEQUENS IS STRUCTURED AS BELOW:\r ;\r ; START: LD SP,....\r ; .\r ; .\r ; .\r ; TQMINT 5,1\r ;\r ; TQMPR S,1,5\r ; .....\r ; TQMPR R,5,4000H\r ;\r ; TQMEXI\r ;\r ;\r ;\r ; THE MACRO'S INCLUDES \r ; 'DW','DB','DEFL' -STATEMENTS AND TQM-INITIALIZATION.\r ; IT'S TERMINATED IN THE CSEG-MODE\r ;\r ;\r ;==============================================================================\r EJEC\r \r ;========================== THE T Q M I N T MACRO =======================\r ;\r ; THE TQMINT MACRO PREFORMES THE DATA LAYOUT OF TQM-DATA\r ;\r ; ENTRY: #NUMPR: THE NUMBER OF P/R'S TO\r ; MONITORED BY TQM.\r ; 1 =< #NUMPR >= 127\r ; #SCALE: THE PRESCALE FACTOR ,WHICH\r ; PRESCALES THE CTC GENERATED\r ; INTERRUPT FREQUENCY.\r ; 0=< #SCALE >=255\r ;\r ; EXIT : NO REGISTERS AFFECTED\r ;==============================================================================\r \r TQMINT: MACRO #NUMPR,#SCALE \r \r PUBLIC NUMPR\r PUBLIC FORWAR,BACKWA,RDELAY,DELAY\r PUBLIC PRESCA,PRECOU,NONACK,ONOFF\r PUBLIC INFORM\r EXTRN TQMACT,TQMMON,ESTABI,ESTABR,SUSPND\r \r DSEG\r PRESCA DEFL #SCALE ;-------------------------------------------\r ; PRESCA : PUBLICHED INFORMATION ABOUT THE\r ; PRESCALE FACTOR\r ;-------------------------------------------\r \r NUMPR DEFL #NUMPR ;-------------------------------------------\r ; NUMPR : PUBLICHED INFORMATION ABOUT NUMBER\r ; OF P/R'S TO BE MONITORED BY T Q M\r ;--------------------------------------------\r FORWAR: DS #NUMPR+1 ;-------------------------------------------\r ; FORWAR: ARRAY(NUMB. OF P/R'S) OF BYTE\r ;\r ; TYPE OF FORWAR ::=< 6. - 0.BIT: POINTER\r ; TO THE SUCCESSSOR IN\r ; CHAIN.\r ; FORWAR(0): CHAIN-HEAD.\r ; 7. BIT : ACTIV/PASSIV\r ; >\r ;----------------------------------------------\r BACKWA: DS #NUMPR+1 ;----------------------------------------------\r ; BACKWA: ARRAY(NUMB. OF P/R'S) OF BYTE\r ;\r ; TYPE OF BACKWA ::=< POINTERS TO THE PRE-\r ; DECESSOR IN THE CHAIN >\r ;----------------------------------------------\r RDELAY: DS #NUMPR+1 ;----------------------------------------------\r ; RDELAY: ARRAY(NUMB. OF P/'S) OF BYTE\r ;\r ; TYPE OF RDELAY ::=< THE RELATIV DELAYED\r ; ACTIVATION AFTER\r ; THE PREDECESSOR >\r ;----------------------------------------------\r DELAY: DS #NUMPR+1 ;----------------------------------------------\r ; DELAY: ARRAY(NUMB.OF P/R'S) OF BYTE\r ;\r ; TYPE OF DELAY ::=< THE DELAYED TIME BEFORE\r ; ACTIVATION OF THE P/R\r ; AFTER ESTABLISHED >\r ;----------------------------------------------\r ONOFF: DS 1 ;---------------------------------------------\r ; ONOFF:BYTE\r ;\r ; TYPE OF ONOFF ::=< = 0H : TQM DISABLED\r ; =0FFH: TQM ENABLED\r ;----------------------------------------------\r PRECOU: DS 1 ;----------------------------------------------\r ; PRECOU:BYTE\r ;\r ; TYPE OF PRECOU::=< THE CURRENT NUMBER OF\r ; TQMMON RUNS BEFORE DE-\r ; CREMENTATION OF RDELAY OF\r ; THE FIRST P/R IN CHAIN >\r ;----------------------------------------------\r NONACK: DS 1 ;----------------------------------------------\r ; NONACK:BYTE\r ;\r ; TYPE OF NONACK ::=< NUMBER OF NONACKNOWLEDGED\r ; TQMACT-ACTIVATIONS >\r ;----------------------------------------------\r DSEND2:\r \r CSEG\r \r XOR A\r DEC A\r LD (ONOFF),A ; (ONOFF):=0FFH\r \r LD HL,RDELAY\r LD (HL),A ; (MASTER.RDELAY):=0FFH\r \r LD HL,PRECOU\r LD (HL),PRESCA.LOW. ; (PRECOU) := #PRESCA\r \r XOR A\r INC HL\r LD (HL),A ; (NONACK):=0\r \r LD HL,BACKWA\r LD (HL),A ; MASTER.PRED :- MASTER\r\r \r LD HL,FORWAR\r LD (HL),A ; MASTER.SUCC :- MASTER\r \r ;------------------------------------------------------------\r ; DO FOR ( ALL TIMER 'S\r ; SET PASSIVBIT;\r ; ENDDO;\r ;------------------------------------------------------------\r LD C,NUMPR.LOW.\r LOOPX:\r INC HL\r LD (HL),80H\r DEC C\r JP NZ,LOOPX ; *.SUCC := MASTER\r ; AND *.PASBIT IS SET\r JP TQMEND\r \r INFORM: DS #NUMPR*3 ;----------------------------------------------\r ;INFORM:RECORD(NUMB.OF P/R'S) OF ACDATA:ADDRESS\r ; ACTION:BYTE\r ;\r ; TYPE OF ACTION::=< =0:CALL OF ROUTINE\r ; =1:ACTIVATION OF S-PROCESS\r ; =2:SIGNAL TO SEMAFOR >\r ;TYPE OF ACDATA::=<ACTION=0:ADDRESS OF ROUTINE\r ; - =1:SYSRAM+200H+N*10H+5\r ; - =2:SYSRAM+200H+N*20H\r ; +S*10H+QHEAD*8 >\r ;----------------------------------------------\r CSEND2:\r \r ENDM\r EJEC\r \r ;========================= THE T Q M P R MACRO ======================\r ;\r ; THE TQMPR MACRO INITIATES THE INFORM-DATA\r ;\r ; ENTRY: #TYPE : R:-ROUTINE , OR\r ; S:-S-PROCESS ACTIVATION , OR\r ; N:-SIGNAL TO SEMAFOR.\r ; #PRNUM: THE P/R NUMBER.\r ; 1=< #PRNUM >=127\r ;\r ; #INDEKS: ROUTINE ADDRESS/ S-PROCESSNO./\r ; SEMAFORNO.\r ;\r ; EXIT : NO REGISTERS ARE AFFECTED\r ;========================================================================\r \r TQMPR: MACRO #TYPE,#PRNUM,#INDEKS \r CSEG\r ORG INFORM+3*(#PRNUM-1)\r PUBLIC AC#$YM\r AC#$YM:\r IF '#TYPE'.EQ.'R'\r DW #INDEKS\r DB 0\r ENDIF\r \r IF '#TYPE'.EQ.'S'\r DW #INDEKS*10H+SYSRAM+200H+5H\r DB 1H\r ENDIF\r \r IF '#TYPE'.EQ.'N'\r DW #INDEKS*8H+SYSRAM+200H+S*10H+N*20H\r DB 2H\r ENDIF\r \r ENDM\r \r EJEC\r ;========================== THE TQMEXI MACRO ==========================\r TQMEXI MACRO\r DSEG\r ORG DSEND2\r CSEG\r ORG CSEND2\r TQMEND:\r \r ENDM\r EJEC\r ;================== TQM-MACROES USED BY TQM-RUN =======================\r ;\r ; THESE MACROES ARE STATED IN THE\r ; EXECUTABLE CODE IN THE APPL. SW\r ;\r ;========================================================================\r \r \r ;========================== THE LESTAB MACRO ==========================\r LESTAB MACRO #PRNUM\r LD BC,#PRNUM\r CALL ESTABR\r ENDM\r ;========================== THE LSUSPN MACRO ==========================\r LSUSPN MACRO #PRNUM\r LD BC,#PRNUM\r CALL SUSPND\r ENDM\r ;========================== THE GESTAM MACRO ==========================\r GESTAM MACRO\r LD HL,ONOFF\r LD (HL),0FFH\r ;========================== THE GSUSPM MACRO ==========================\r GSUSPM MACRO\r LD HL,ONOFF\r LD (HL),0\r ENDM\r ;========================== THE UPDATM MACRO ==========================\r UPDATM MACRO #PRNUM,#VALUE\r LD HL,DELAY+#PRNUM\r LD (HL),#VALUE\r ENDM\r ;\r ;\r ;\r ;>>>>>>>>>>>>>>>>> DORCOM.SPC, VERSION 810125/CGR <<<<<<<<<<<<<<<<<<\r ;\r ;\r ;\r ;************************************************************************\r ; O G E P A I\r ; VERSION 810125/CGR\r ;************************************************************************\r ;\r OGEPAI MACRO\r NLIST M\r ;DESCRIP: THE MACRO DEQUEUES AN ELE-\r ; MENT FROM OUTGOING EMPTY QUEUE.\r ;ENTRY: CHANNEL NO. IN A REG.\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: NONE\r ;\r ;EXTERNALS: SUBDEQ,QHEADS\r ;\r ;###################### Ogepai macro ###########################\r LD H,A ;FIND ADDRESS OF EMPTY QUEUE\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 ;######################## End macro ##############################\r LIST M\r ENDM\r ;\r ;\r ;\r ;************************************************************************\r ; O D E P A I\r ; VERSION 801127/CGR\r ;************************************************************************\r ;\r ODEPAI MACRO\r NLIST M\r ;DESCRIP: THE MACRO ENQUEUES AN 'OUTGOING'\r ; ELEMENT IN THE OUTGOING EMPTY BUFFER QUEUE.\r ; THE MACRO CAN ONLY BE USED BY INITIALIZING\r ; DUE TO THE LACK OF FORMAT ADJUSTMENT\r ;ENTRY: ADDRESS OF ELEMENT IN REG DE\r ; CHANNEL NO. IN REG A.\r ;EXIT: CY=1 IF QUEUE WAS NOT EMPTY\r ; CY=0 IF QUEUE WAS EMPTY\r ; ADDRESS OF ELEMENT IN REG DE\r ;DESTROY: REG A,F,B,C,D,E,H,L,IX\r ;\r ;PARAMETERS: NONE\r ;EXTERNALS: QHEADS,SUBENQ\r ;\r ;################ Odepai macro ####################################\r PUSH DE ;FIND EMPTY BUFFER 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 POP DE\r CALL SUBENQ ;ENQUEUE BUFFER\r ;\r ;################# End macro #####################################\r LIST M\r ENDM\r ;\r ;\r ;>>>>>>>>>>>>>> DORCOM.MAC, VERSION 810429/CGR <<<<<<<<<<<<<<<<\r ;\r ;\r ;\r ;************************************************************************\r ; I G E P A 1\r ; VERSION 810429/CGR\r ;************************************************************************\r ;\r ;\r IGEPA1 MACRO\r NLIST M\r ;DESCRIP: THE MACRO DEQUEUES AN ELEMENT FROM\r ; INCOMING PACKET QUEUE IN SPECIFIED\r ; CHANNEL.\r ;ENTRY: CHANNEL NO. IN A-REG.\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 ;EXTERNALS REQUIRED: IGEPA,BFSIZE\r ;\r ;################ Igepa1 macro #####################################\r CALL IGEPA ;GET BUFFER IF ANY\r JP NC,A#$YM+1 ;IF QUEUE WAS EMPTY THEN EXIT\r PUSH DE ;\r POP IX ;\r PUSH DE ;\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 LD (IX+5),H ;\r LD HL,8 ;REFORMAT BUFFER ('SIZE OF DATABUFFER' IS DESTROYED)\r ADD HL,DE ;\r EX DE,HL ;\r LD HL,2 ;\r ADD HL,DE ;\r LD B,0 ;\r LD C,BFSIZE ;\r LDIR ;\r POP DE ;\r A#$YM: SCF ;EXIT\r ;#################### End macro ################################\r LIST M\r ENDM\r ;\r ;\r ;\r ;\r ;************************************************************************\r ; I D E P A 1\r ; VERSION 801125/CGR\r ;************************************************************************\r ;\r ; DESCRIPTION: THIS MACRO ENQUEUES THE SPECIFIED BUFFER IN THE 'INCOMING'\r ; EMPTY BUFFER QUEUE IN THE CORRECT DESCRIPTOR SECTION.\r ; THE BUFFER MUST BE FORMATTED AS SPECIFIED FOR DORA INCOMING\r ; BUFFERS. THE BYTECOUNT IN THE BUFFER IS RESET\r ;\r ; ENTRY: ADDRESS OF BUFFER ELEMENT IN DE REGISTER.\r ;\r ; EXIT: CY=1 IF QUEUE WAS NOT EMPTY\r ; CY=0 IF QUEUE WAS EMPTY\r ; ADDRESS OF BUFFER ELEMENT IN DE AND IX REGISTERS.\r ;\r ; PARAMETERS: #EI: Y RE-ENABLES INTERRUPT\r ; N INTERRUPT IS DISABLED AT MACRO EXIT\r ;\r ; EXTERNALS: IDEPA\r ;\r ; DESTROY: REGISTERS A,F,B,C,H,L,IX\r ;\r ;\r ;\r IDEPA1 MACRO #EI,#BSIZE\r NLIST M\r ;################# Idepa1 macro ##############################\r PUSH DE ;\r POP IX\r LD (IX+8),#BSIZE ;REINSERT BUFFERSIZE (=16)\r LD (IX+9),0 ;\r LD (IX+2),0 ;RESET BYTECOUNT\r LD (IX+3),0 ;\r LD A,(IX-2) ;GET CHANNEL NO.\r LD L,(IX+4) ;INCREMENT DATABUFFER ADDRESS 2 TIMES.\r LD H,(IX+5) ;\r INC HL ;\r INC HL ;\r LD (IX+4),L ;\r LD (IX+5),H ;\r CALL IDEPA ;\r IF '#EI'.EQ.'Y' ;\r EI ;\r ENDIF ;\r ;################# End macro #################################\r LIST M\r ENDM\r ;\r ;\r ;************************************************************************\r ; O G E P A 1\r ; VERSION 810119/CGR\r ;************************************************************************\r ;\r OGEPA1 MACRO #CHAN\r NLIST M\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 LIST M\r ENDM\r ;\r ;\r ;\r ;***********************************************************************\r ; O G E P A 3\r ; VERSION 810127/CGR\r ;***********************************************************************\r ;\r ; DESCRIPTION: THIS MACRO DEQUEUES A BUFFER FROM THE 'OUTGOING'\r ; EMPTY BUFFER QUEUE - IF THE I/F DEVICE IS DELEGATED - AND\r ; INSERTS THE PANEL CODE OF THE\r ; DELEGATED PANEL IN THE FIRST DATABYTE OF THE\r ; BUFFER. THE BYTECOUNT IS SET = 1.\r ;\r ; ENTRY: NONE\r ;\r ; EXIT: CY=0 IF QUEUE WAS EMPTY OR LTUX NOT DELEGATED\r ; CY=1 IF QUEUE WAS NOT EMPTY AND LTUX DELEGATED\r ; Z=0 IF LTUX NOT DELEGATED\r ; Z=1 IF LTUX IS DELEGATED\r ; ADDRESS OF BUFFER ELEMENT IN DE AND IX REGISTERS.\r ;\r ; PARAMETERS: #CHAN: CHANNELNUMBER. (MUST BE 6 OR 7)\r ;\r ; EXTERNALS: SUBDEQ, QHEADS, PANCO (AND PANCOM IF TELECINE I/F)\r ;\r ; DESTROY: REGISTERS A,F,B,C,D,E,H,L,IX\r ;\r OGEPA3 MACRO #CHAN\r NLIST M\r ;################### Ogepa3 macro ###################################\r NLIST S\r IF #CHAN.EQ.6\r LIST S ;+++++ #CHAN = 6\r LD A,(PANCO)\r NLIST S\r ENDIF\r IF #CHAN.EQ.7\r LIST S ;+++++ #CHAN = 7\r LD A,(PANCOM)\r NLIST S\r ENDIF\r LIST S\r CP 0 ;TEST IF DELEGATION IS ESTABLISHED\r JP Z,A#$YM ;IF YES THEN\r LD A,#CHAN\r LD H,A ;FIND ADDRESS OF EMPTY BUFFER QUEUE\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 ;TEST IF QUEUE WAS EMPTY\r JP NC,B#$YM ;IF NO THEN\r PUSH DE\r POP IX\r LD (IX+2),1 ;SET BYTECOUNT = 1\r NLIST S\r IF #CHAN.EQ.6\r LIST S ;+++++ #CHAN = 6\r LD A,(PANCO)\r NLIST S\r ENDIF\r IF #CHAN.EQ.7\r LIST S ;+++++ #CHAN = 7\r LD A,(PANCOM)\r NLIST S\r ENDIF\r LIST S\r LD (IX+8),A ;LOAD DELEGATED PANEL CODE INTO FIRST DATABYTE\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 LD (IX+5),H ;\r CP A ;SET Z-FLAG\r SCF ;SET C-FLAG\r JP A#$YM+4 \r ;ENDIF\r ;\r B#$YM: CP A ;SET Z-FLAG\r SCF\r CCF ;RESET C-FLAG\r JP A#$YM+4 ;\r ;ENDIF\r A#$YM: CP 1 ;RESET Z-FLAG\r SCF ;RESET C-FLAG\r CCF ;\r ;\r ;################### End macro #######################################\r LIST M\r ENDM\r ;\r ;\r ;************************************************************************\r ; O G E P A 2\r ; VERSION 810119/CGR\r ;************************************************************************\r ;\r ; DESCRIPTION: THIS MACRO DEQUEUES A BUFFER FROM THE EMPTY BUFFER\r ; QUEUE ASSIGNED TO THE DELEGATED CR80.\r ;\r ; ENTRY: NONE\r ;\r ; EXIT: CY=0 IF THE QUEUE WAS EMPTY\r ; CY=1 IF THE QUEUE WAS NOT EMPTY\r ; ADDRESS OF BUFFERELEMENT IN DE REGISTER.\r ;\r ; PARAMETERS: NONE\r ;\r ; EXTERNALS: CR80NO, SUBDEQ, QHEADS\r ;\r ; DESTROY: REGISTERS A,F,B,C,D,E,H,L,IX\r ;\r ;\r OGEPA2 MACRO\r NLIST M\r ;#################### Ogepa2 macro ###########################\r LD A,(CR80NO) ;FIND ADDRESS OF EMPTY BUFFER 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 LIST M\r ENDM\r ;\r ;\r ;\r ;\r ;\r ;************************************************************************\r ; O D E P A 1\r ; VERSION 810421/CGR\r ;************************************************************************\r ;\r ODEPA1 MACRO #EI,#BSIZE\r NLIST M\r ;DESCRIP: THE MACRO ENQUEUES AN 'OUTGOING'\r ; ELEMENT IN THE CHANNEL QUEUE.\r ; IF TRANSMISSION CANCELED FLAG IS\r ; SET, THE BUFFER IS ENQUEUED IN\r ; THE OUTGOING EMPTY BUFFER QUEUE.\r ;ENTRY: ADDRESS OF ELEMENT IN REG DE\r ;EXIT: CY=1 IF QUEUE WAS NOT EMPTY\r ; CY=0 IF QUEUE WAS EMPTY\r ; ADDRESS OF ELEMENT IN REG DE\r ;DESTROY: REG A,F,B,C,H,L,IX\r ;\r ;PARAMETERS: #BSIZE = BUFFERSIZE\r ; #EI: Y RE-ENABLES INTERRUPT\r ; N INTERRUPT IS DISABLED AT MACRO EXIT.\r ; NOTE! INTERRUPT IS NOT AFFECTED\r ; IF TRANSMISSION WAS CANCELED.\r ;\r ;EXTERNALS: QHEADS,SUBENQ,ECOND1\r ;\r ;################ Odepa1 macro ####################################\r PUSH DE ;\r PUSH DE ;\r POP IX ;\r LD A,(IX+2) ;REFORMAT BUFFER\r ADD A,7 ;\r LD L,A ;\r LD H,0 ;\r ADD HL,DE ;\r EX DE,HL ;\r LD HL,2 ;\r ADD HL,DE ;\r EX DE,HL ;\r LD B,0 ;\r LD C,(IX+2) ;\r LDDR ;\r LD (IX+8),#BSIZE ;RESTORE BUFFERSIZE\r LD (IX+9),0 ;\r LD L,(IX+4) ;INCREMENT DATABUFFER ADDRESS 2 TIMES.\r LD H,(IX+5) ;\r INC HL ;\r INC HL ;\r LD (IX+4),L ;\r LD (IX+5),H ;\r LD A,(IX-2) ;\r POP DE ;ENQUEUE BUFFER IN CHANNEL QUEUE\r CALL ODEPA ;\r ;\r IF '#EI'.EQ.'Y'\r EI\r ENDIF ;\r ;################# End macro #####################################\r LIST M\r ENDM\r ;\r ;\r ;\r ;\r ;\r ;\r ;************************************************************************\r ; O D E P A 2\r ; VERSION 800218/CGR\r ;************************************************************************\r ;\r ODEPA2 MACRO #EI,#BSIZE\r NLIST M\r ;DESCRIP: THE MACRO ENQUEUES AN 'OUTGOING'\r ; ELEMENT IN THE CHANNEL QUEUE.\r ; IF TRANSMISSION CANCELED FLAG IS\r ; SET, THE BUFFER IS ENQUEUED IN\r ; THE OUTGOING EMPTY BUFFER QUEUE.\r ; FIRST, THE MACRO TESTS IF ASSIGNED\r ; CR80 NO. HAS BEEN CHANGED SINCE\r ; THE BUFFER WAS DEQUEUED BY OGEPA.\r ; IF YES, A BUFFER FROM THE CORRECT\r ; CHANNEL IS DEQUEUED AND THE BUFFER\r ; CONTENTS IS TRANSFERRED - NEXT, THE\r ; 'OLD' BUFFER IS DELIVERED TO THE\r ; APPROPRIATE EMPTY QUEUE AND FINALLY\r ; THE 'NEW' BUFFER IS TRANSMITTED.\r ;ENTRY: ADDRESS OF ELEMENT IN REG DE\r ;EXIT: CY=1 IF QUEUE WAS NOT EMPTY\r ; CY=0 IF QUEUE WAS EMPTY\r ; ADDRESS OF ELEMENT IN REG DE\r ;DESTROY: REG A,F,B,C,D,E,H,L,IX\r ;\r ;PARAMETERS: #BSIZE = BUFFERSIZE\r ; #EI: Y RE-ENABLES INTERRUPT\r ; N INTERRUPT IS DISABLED AT MACRO EXIT.\r ; NOTE! INTERRUPT IS NOT AFFECTED\r ; IF TRANSMISSION WAS CANCELED.\r ;\r ;EXTERNALS: QHEADS,SUBENQ,ECOND1,CR80NO\r ;\r ;################ Odepa2 macro ####################################\r PUSH DE ;\r PUSH DE ;\r POP IX ;\r LD A,(IX-2) ;\r CP 5 ;\r JP P,E#$YM ;\r LD HL,CR80NO ;\r CP (HL) ;\r JP Z,E#$YM ;\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 POP DE\r PUSH DE ;\r CALL SUBENQ ;\r OGEPA2 ;\r POP HL ;\r PUSH DE ;\r PUSH DE ;\r LD BC,#BSIZE+8 ;\r LDIR ;\r POP IX ;\r E#$YM: LD A,(IX+2) ;REFORMAT BUFFER\r ADD A,7 ;\r LD L,A ;\r LD H,0 ;\r ADD HL,DE ;\r EX DE,HL ;\r LD HL,2 ;\r ADD HL,DE ;\r EX DE,HL ;\r LD B,0 ;\r LD C,(IX+2) ;\r LDDR ;\r LD (IX+8),#BSIZE ;RESTORE BUFFERSIZE\r LD (IX+9),0 ;\r LD L,(IX+4) ;INCREMENT DATABUFFER ADDRESS 2 TIMES.\r LD H,(IX+5) ;\r INC HL ;\r INC HL ;\r LD (IX+4),L ;\r LD (IX+5),H ;\r LD A,(IX+2) ;TEST IF BUFFER IS THE LAST IN TRANSMISSION\r LD HL,ECOND1 ;\r CP #BSIZE\r JP Z,C#$YM ; IF YES THEN\r SET 7,(HL) ; SET BIT 7 IN ECOND1\r JP D#$YM ; ELSE\r C#$YM: RES 7,(HL) ; RESET BIT 7 IN ECOND1\r ; ENDIF\r D#$YM: LD A,(HL) ;TEST IF TRANSMISSION IS CANCELED\r BIT 6,A\r JP Z,A#$YM ;IF YES THEN\r ; BEGIN\r LD A,(IX+2) ; TEST IF BUFFER IS THE LAST IN TRANSMISSION\r \r CP #BSIZE\r JP Z,B#$YM ; IF YES THEN\r RES 6,(HL) ; RESET BIT 6 IN ECOND1\r ; ENDIF\r B#$YM: LD (IX+2),0 ; RESET BYTECOUNT\r LD (IX+3),0 ;\r LD A,(IX-2) ; ENQUEUE BUFFER IN OUTGOINIG EMPTY BUFFER 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 POP DE\r CALL SUBENQ ;\r DI\r JP F#$YM+3 ; END\r ;\r ;ELSE\r A#$YM: LD A,(IX-2) ; BEGIN\r POP DE ; ENQUEUE BUFFER IN CHANNEL QUEUE\r F#$YM: CALL ODEPA ;\r ; END\r IF '#EI'.EQ.'Y'\r EI\r ENDIF ;ENDIF\r ;################# End macro #####################################\r LIST M\r ENDM\r ;\r ;\r LIST S\r ;\r