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