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: 55499 (0xd8cb) Types: TextFile Names: »DDP.BAK«
└─⟦b678e5579⟧ Bits:30005502 8" CR80 Floppy CR80FD_0031 ( TELECINE BACKUP ) └─⟦b678e5579⟧ Intel_ISIS_II └─ ⟦this⟧ »DDP.BAK«
;***************************************************\r ;* *\r ;* DISTRIBUTION AND DELEGATION PROCESS *\r ;* DDPROC MACRO, VERSION 801215/CGR *\r ;* *\r ;***************************************************\r ;\r ;\r ;\r NLIST S\r ;\r DDPROC MACRO #DEVNO,#INTIME,#OUTTIM,#RAM1K\r ;\r NLIST 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 F811: DEFL 0 ;VTR6-8\r F812: DEFL 0 ;VTR7\r F813: DEFL 0 ;VTR8\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 IF #DEVNO.EQ.4\r F3: DEFL 1\r ENDIF\r IF #DEVNO.GT.19\r IF #DEVNO.LT.27\r F8: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.GT.19\r IF #DEVNO.LT.22\r F83: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.EQ.22\r F87: DEFL 1\r ENDIF\r IF #DEVNO.GT.22\r IF #DEVNO.LT.25\r F82: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.GT.24\r IF #DEVNO.LT.27\r F86: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.EQ.28\r F2: DEFL 1\r ENDIF\r IF #DEVNO.GT.29\r IF #DEVNO.LT.32\r F11: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.GT.31\r IF #DEVNO.LT.34\r F13: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.EQ.34\r F5: DEFL 1\r ENDIF\r IF #DEVNO.EQ.35\r F4: DEFL 1\r F43: DEFL 1\r ENDIF\r IF #DEVNO.EQ.36\r F4: DEFL 1\r F41: DEFL 1\r ENDIF\r IF #DEVNO.EQ.37\r F4: DEFL 1\r F42: DEFL 1\r ENDIF\r IF #DEVNO.GT.39\r IF #DEVNO.LT.47\r F7: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.GT.49\r IF #DEVNO.LT.52\r F13: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.EQ.52\r F12: DEFL 1\r ENDIF\r IF #DEVNO.EQ.55\r F2: DEFL 1\r ENDIF\r IF #DEVNO.EQ.60\r F13: DEFL 1\r ENDIF\r IF #DEVNO.EQ.62\r F4: DEFL 1\r F43: DEFL 1\r ENDIF\r IF #DEVNO.EQ.63\r F4: DEFL 1\r F41: DEFL 1\r ENDIF\r IF #DEVNO.EQ.64\r F4: DEFL 1\r F42: DEFL 1\r ENDIF\r IF #DEVNO.EQ.70\r F12: DEFL 1\r ENDIF\r IF #DEVNO.EQ.72\r F61: DEFL 1\r ENDIF\r IF #DEVNO.EQ.74\r F4: DEFL 1\r F43: DEFL 1\r ENDIF\r IF #DEVNO.EQ.75\r F4: DEFL 1\r F41: DEFL 1\r ENDIF\r IF #DEVNO.EQ.76\r F4: DEFL 1\r F42: DEFL 1\r ENDIF\r IF #DEVNO.EQ.80\r F12: DEFL 1\r ENDIF\r IF #DEVNO.EQ.82\r F61: DEFL 1\r ENDIF\r IF #DEVNO.EQ.84\r F4: DEFL 1\r F43: DEFL 1\r ENDIF\r IF #DEVNO.EQ.85\r F4: DEFL 1\r F41: DEFL 1\r ENDIF\r IF #DEVNO.EQ.86\r F4: DEFL 1\r F42: DEFL 1\r ENDIF\r IF #DEVNO.GT.89\r IF #DEVNO.LT.95\r F13: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.EQ.96\r F62: DEFL 1\r ENDIF\r IF #DEVNO.EQ.97\r F4: DEFL 1\r F43: DEFL 1\r ENDIF\r IF #DEVNO.EQ.98\r F4: DEFL 1\r F41: DEFL 1\r ENDIF\r IF #DEVNO.EQ.99\r F4: DEFL 1\r F42: DEFL 1\r ENDIF\r IF #DEVNO.GT.104\r IF #DEVNO.LT.118\r F8: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.GT.104\r IF #DEVNO.LT.107\r F84: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.GT.106\r IF #DEVNO.LT.109\r F85: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.GT.109\r IF #DEVNO.LT.118\r F81: DEFL 1\r IF #DEVNO.GT.114\r F811: DEFL 1\r ENDIF\r IF #DEVNO.EQ.116\r F812: DEFL 1\r ENDIF\r IF #DEVNO.EQ.117\r F813: DEFL 1\r ENDIF\r ENDIF\r ENDIF\r LIST M\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 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 SPARE: DS 163 ;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 SPARE: DS 163 ;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.33\r LIST S\r BUFRAM: DS NOBUF*20H\r NLIST S\r ENDIF\r BUFRAM: IF NOBUF.GT.32\r LIST S\r 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 ;\r LIST S\r ;\r ;>>>>>>>>>>>>>>>>>>>> E N D O F R A M M A P <<<<<<<<<<<<<<<<<<<<<\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 CRIDSP: DB 22H\r DB #DEVNO\r DB 33H\r DB #DEVNO\r DB 44H\r DB #DEVNO\r NLIST S\r IF (F4.OR.F8).EQ.1\r LIST S ;+++++RCP OR RCP CONTROLLED DEVICE\r DB 55H\r DB #DEVNO\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 P. D. T I M E R S <<<<<<<<<\r ;\r ;\r LD E,20H\r LD C,#INTIME.AND.7FH\r LD B,0\r LD D,NOCH-2\r LD A,6\r TLOOP1: PUSH AF\r PUSH BC\r PUSH DE\r LD D,0\r TL1: CALL COMM\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 POP BC\r LD A,10H\r ADD A,E\r LD E,A\r POP AF\r DEC D\r JP NZ,TLOOP1\r ;\r ;\r LD E,20H\r LD C,#OUTTIM.AND.7FH\r LD B,0\r LD D,NOCH-2\r LD A,7\r TLOOP3: PUSH AF\r PUSH BC\r PUSH DE\r LD D,0\r TL3: CALL COMM\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 LD A,10H\r ADD A,E\r LD E,A\r POP AF\r DEC D\r JP NZ,TLOOP3\r ;\r ;\r ;>>>>>>>>>>>>>> E N D O F P . D . T I M E R I N I T . <<<<<<<<<<<<<<\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 LD L,2\r EXX\r LD L,2\r EXX\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 (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 LD HL,BUFRAM+#RAM1K*800H\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 DM1A: LD HL,BUFRAM+#RAM1K*800H\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 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 (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 LD HL,BUFRAM+#RAM1K*800H\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 DM3A: LD HL,BUFRAM+#RAM1K*800H\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 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+1 ;\r LD DE,BUFRAM+2 ;\r LD A,2 ;\r LD B,NOBUF ;\r PUSH AF ;\r CLOOP1: LD C,(IX+0) ;OUTGOING BUFFERS\r CLOOP2: POP AF ;\r PUSH AF ;\r PUSH BC ;\r PUSH DE ;\r ODEPAI ;\r POP DE ;\r POP BC ;\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 LD HL,BUFRAM+#RAM1K*800H ;\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 LD HL,BUFRAM+#RAM1K*800H ;\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 DM6: DEC B ;\r DEC C ;\r JP NZ,CLOOP2 ;\r ;\r ;\r DEC IX ;\r CLOOP3: LD C,(IX+0) ;\r POP AF ;\r CLOOP4: PUSH AF ;\r PUSH BC ;\r PUSH DE ;\r CALL IDEPA ;\r POP DE ;\r POP BC ;\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 LD HL,BUFRAM+#RAM1K*800H ;\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 LD HL,BUFRAM+#RAM1K*800H ;\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 DM8: POP AF ;\r DEC B ;\r DEC C ;\r JP NZ,CLOOP4 ;\r INC IX ;\r INC IX ;\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.OR.F4).EQ.1\r LIST S ;+++++VDU-D, PRINTER OR RCP\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 (F4.OR.F8).EQ.1\r LIST S ;+++++RCP OR RCP CONTROLLED DEVICE\r LD D,4\r NLIST S\r ENDIF\r IF F3.EQ.1\r LIST S ;+++++RCDP\r LD D,37\r NLIST S\r ENDIF\r LIST S\r LD A,3\r LD E,20H\r LD HL,CRIDSP\r LP1: LD C,(HL)\r INC HL\r LD B,(HL)\r PUSH AF\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 LD A,10H\r ADD A,E\r LD E,A\r POP HL\r POP AF\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 LD A,2 ;SEND RESTART IND. TO CR80 (AND RCDP)\r RSTIND: PUSH AF\r OGEPAI ;\r JP NC,RSTM1 ;\r PUSH DE ;\r POP IX ;\r LD (IX+2),1 ;LOAD BYTECOUNT\r LD (IX+10),0EFH ;LOAD MESSAGECODE\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 LD L,NOCH-2 ;SCANNING RESTART\r LD A,2\r PUSH AF\r PUSH HL\r IGEPA1 ;DEQUEUE NEXT CHANNEL QUEUE\r JP NC,DDM2 ;IF CHANNEL WAS NOT EMPTY THEN\r ;BEGIN\r DDM3: POP HL\r LD L,NOCH-2\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 LD A,2 ; LOAD CHANNEL 2\r ; ENDIF\r DDM4: PUSH AF\r PUSH HL\r IGEPA1 ; 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 VALID (BYTECOUNT # 0)\r JP NZ,DDM5A ;IF YES THEN\r JP DDM5 ;EXIT\r DDM5A: PUSH DE ;ELSE\r LD DE,6 ;\r ADD HL,DE ;\r POP DE ;\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: IDEPA1 Y,BFSIZE ; ENQUEUE Q-ELEMENT IN EMP.BUF.QUEUE\r RET ; RETURN TO SCAN ROUTINE\r ;END\r ;ELSE\r ;BEGIN\r ;FIND PROCESS NO./ROUTINE ADDRESS IN TABL1\r DDM6: LD HL,TABL1+NUMMES*3-1;\r SLA C\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 BC\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 POP BC ; LOAD (MESSAGE CODE LIST NO.)*2\r LD HL,3 ; INTO Q-ELEMENT, WORD H.\r ADD HL,DE\r LD (HL),C\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,5\r CPIR ;TEST IF MESSAGE CODE WAS ILLEGAL\r JP NZ,RTEXIT ;IF YES THEN GOTO EXIT ROUTINE\r ;ENDIF\r LD HL,RTABL+0DH ;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 0E5H\r DB 80H\r DB 84H\r DB 0E4H\r DW ROUT1\r DW ROUT2\r DW ROUT3\r DW ROUT5\r DW ROUT6\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.F5).EQ.0\r LIST S ;+++++#RCDP AND #MATRIX\r ;***** 'SET CR80 CHANNEL' ROUTINE ************************\r ;\r ROUT2: PUSH DE\r POP IX ;Q-ELEMENT POINTER\r NLIST S\r IF F4.EQ.1\r LIST S ;+++++RCP\r INC IX ;ADJUST Q-ELEMENT POINTER TO RCP FORMAT\r NLIST S\r ENDIF\r LIST S\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 9\r DDM31: RLCA\r RLCA\r RLCA\r RLCA\r CPL\r OR 0FH\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\r JP DDM34\r DDM32: CP 2\r JP NZ,DDM33\r LD C,DIS2\r JP DDM34\r DDM33: CP 3\r JP NZ,DDM38\r LD C,DIS3\r NLIST S\r ENDIF\r IF F41.EQ.1\r LIST S ;+++++RCP(M I)\r CP 6 ;FIND CHARACTER TO BE DISPLAYED\r JP Z,DDM30\r CP 8\r JP Z,DDM30\r CP 15H\r JP Z,DDM30\r LD A,0EFH\r JP DDM31\r DDM30: LD A,0DFH\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\r JP DDM34\r DDM32: CP 1AH\r JP NZ,DDM33\r LD C,TPDIS\r JP DDM34\r DDM33: CP 22H\r JP NZ,DDM35\r LD C,TMDIS\r JP DDM34\r DDM35: CP 2AH\r JP NZ,DDM36\r LD C,DDIS\r JP DDM34\r DDM36: CP 31H\r JP NZ,DDM38\r LD C,SDIS\r NLIST S\r ENDIF\r IF F42.EQ.1\r LIST S ;+++++RCP(M II)\r CP 6 ;FIND CHARACTER TO BE DISPLAYED\r JP Z,DDM31\r CP 8\r JP Z,DDM31\r CP 15H\r JP Z,DDM31\r CP 18H\r JP Z,DDM31\r CP 1AH\r JP Z,DDM30\r LD A,0EFH\r JP DDM31\r DDM30: LD A,0DFH\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\r JP DDM34\r DDM32: CP 19H\r JP NZ,DDM33\r LD C,TPDIS\r JP DDM34\r DDM33: CP 21H\r JP NZ,DDM35\r LD C,TMDIS\r JP DDM34\r DDM35: CP 29H\r JP NZ,DDM36\r LD C,DDIS\r JP DDM34\r DDM36: CP 11H\r JP NZ,DDM37\r LD C,ADIS\r JP DDM34\r DDM37: CP 9\r JP NZ,DDM38\r LD C,VDIS\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 C,IDLSBM\r LD B,(IX+9)\r LD DE,70H\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 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 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+0A) ;\r CP 0C8H ;TEST IF DELEGATION IS TO VTRA\r JP Z,DDM44 ;IF NO THEN\r LD A,3 ;BEGIN\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 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 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 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 F811.EQ.1\r LIST S ;+++++VTR6-8\r ;******** 'ESTABLISH DELEGATION TO VTRA' ROUTINE *****************\r ;\r ROUT4: 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 NLIST S\r IF F812.EQ.1\r LIST S ;+++++VTR7\r ADD A,10H ;ADJUST CRID(LSB) TO VTRA CHANNEL IN RCP\r NLIST S\r ENDIF\r IF F813.EQ.1\r LIST S ;+++++VTR8\r ADD A,20H ;ADJUST CRID(LSB) TO VTRA CHANNEL IN RCP\r NLIST S\r ENDIF\r LIST S\r PUSH DE\r LD C,A ;\r LD B,(IX+9) ;\r LD DE,60H\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 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\r JP DDM25\r DDM23: CP 2\r JP NZ,DDM24\r LD C,DIS2\r JP DDM25\r DDM24: CP 3\r JP NZ,DDM28\r LD C,DIS3\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\r JP DDM27\r DDM23: CP 1AH\r JP NZ,DDM24\r LD C,TPDIS\r JP DDM27\r DDM24: CP 22H\r JP NZ,DDM25\r LD C,TMDIS\r JP DDM27\r DDM25: CP 2AH\r JP NZ,DDM26\r LD C,DDIS\r JP DDM27\r DDM26: CP 31H\r JP NZ,DDM28\r LD C,SDIS\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\r JP DDM29\r DDM23: CP 19H\r JP NZ,DDM24\r LD C,TPDIS\r JP DDM29\r DDM24: CP 21H\r JP NZ,DDM25\r LD C,TMDIS\r JP DDM29\r DDM25: CP 29H\r JP NZ,DDM26\r LD C,DDIS\r JP DDM29\r DDM26: CP 11H\r JP NZ,DDM27\r LD C,ADIS\r JP DDM29\r DDM27: CP 9\r JP NZ,DDM28\r LD C,VDIS\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 ;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 IF F43.EQ.1\r LIST S ;+++++ RCP(VTR)\r PUSH 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 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,DDM12 ;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 NLIST S\r ENDIF\r LIST S\r DDM12: PUSH AF ;\r OGEPA1 5 ;GET EMPTY OUTGOING Q-ELEMENT\r JP C,DDM20 ;IF QUEUE WAS EMPTY THEN\r POP AF ;\r POP DE\r JP RTEXIT ;GOTO EXIT ROUTINE\r ;ENDIF\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 NZ,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 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 ; 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 ;END\r NLIST S\r ENDIF\r LIST S\r DDM22: LD (IX+0AH),A ;LOAD PANEL CODE INTO Q-ELEMENT\r LD (IX+0BH),#DEVNO ;LOAD OWN TDX DEV.NO. INTO Q-ELEMENT\r PUSH BC\r ODEPA1 Y,BFSIZE ;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 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 NZ,DDM16 ;IF YES THEN\r NLIST S\r IF F43.EQ.1\r LIST S ;+++++RCP(VTR)\r ; BEGIN\r INC E ;\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 NZ,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 OGEPA1 5 ;GET EMPTY OUTGOING Q-ELEMENT\r POP BC\r JP C,DDM19 ;IF QUEUE WAS EMPTY THEN\r POP DE\r POP DE\r JP RTEXIT ;GOTO EXIT ROUTINE\r ;ENDIF\r DDM19: 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 (IX+0BH),#DEVNO ;LOAD OWN TDX DEVICE NO. INTO Q-ELEMENT\r ODEPA1 Y,BFSIZE ;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 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 ;******* 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 ;\r ;************************************************************************\r ; I G E P A 1\r ; VERSION 801125/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\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,(IX+2) ;\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 801127/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\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 ; O G E P A I\r ; VERSION 801127/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 JP NC,A#$YM\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 ; O G E P A 3\r ; VERSION 801127/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 SCF\r CCF\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+2 \r ;ENDIF\r ;\r B#$YM: CP A ;SET Z-FLAG\r SCF\r CCF ;RESET C-FLAG\r JP A#$YM+2 ;\r ;ENDIF\r A#$YM: CP 1 ;RESET Z-FLAG\r ;\r ;################### End macro #######################################\r LIST M\r ENDM\r ;\r ;\r ;************************************************************************\r ; O G E P A 2\r ; VERSION 801127/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 801129/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 HL,23 ;REFORMAT BUFFER\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 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 ECOND2\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 ;\r ; END\r ;ELSE\r A#$YM: LD A,(IX-2) ; BEGIN\r POP DE ; ENQUEUE BUFFER IN CHANNEL QUEUE\r CALL ODEPA ;\r IF '#EI'.EQ.'Y'\r EI ; END\r ENDIF ;ENDIF\r ;################# End macro #####################################\r LIST M\r ENDM\r ;\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 LIST S\r ;\r