|
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: 23033 (0x59f9) Types: TextFile Names: »EHP.BAK«
└─⟦b678e5579⟧ Bits:30005502 8" CR80 Floppy CR80FD_0031 ( TELECINE BACKUP ) └─⟦b678e5579⟧ Intel_ISIS_II └─ ⟦this⟧ »EHP.BAK«
TITLE '>>>> ERROR HANDLING PROCESS, MACRO <<<<'\r NAME EHPROC\r ;\r *************************************************************************\r * *\r * E R R O R H A N D L I N G P R O C E S S *\r * *\r * VERSION 801203/CGR *\r * *\r *************************************************************************\r ;\r ;\r NLIST S\r ;\r ;\r EHPROC MACRO #DEVNO,#TIME,#ETIMNO\r F1: DEFL 0 ;VDU\r F11: DEFL 0 ;VDU-D\r F2: DEFL 0 ;PRINTER\r F3: DEFL 0 ;RCDP\r F4: DEFL 0 ;RCP\r F5: DEFL 0 ;MATRIX\r F7: DEFL 0 ;PREEDIT (VCR/VCR)\r IF #DEVNO.EQ.4\r F3: DEFL 1\r ENDIF\r IF #DEVNO.EQ.28\r F2: DEFL 1\r ENDIF\r IF #DEVNO.GT.29\r IF #DEVNO.LT.32\r F1: DEFL 1\r F11: DEFL 1\r ENDIF\r IF #DEVNO.GT.31\r IF #DEVNO.LT.34\r F1: DEFL 1\r ENDIF\r IF #DEVNO.EQ.34\r F5: DEFL 1\r ENDIF\r IF #DEVNO.GT.34\r IF #DEVNO.LT.38\r F4: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.GT.39\r IF #DEVNO.LT.47\r F7: DEFL 1\r ENDIF\r IF #DEVNO.GT.49\r IF #DEVNO.LT.53\r F1: DEFL 1\r ENDIF\r IF #DEVNO.EQ.55\r F2: DEFL 1\r ENDIF\r IF #DEVNO.EQ.60\r F1: DEFL 1\r ENDIF\r IF #DEVNO.GT.61\r IF #DEVNO.LT.65\r F4: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.EQ.70\r F1: DEFL 1\r ENDIF\r IF #DEVNO.GT.73\r IF #DEVNO.LT.77\r F4: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.EQ.80\r F1: DEFL 1\r ENDIF\r IF #DEVNO.GT.83\r IF #DEVNO.LT.87\r F4: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.GT.89\r IF #DEVNO.LT.95\r F1: DEFL 1\r ENDIF\r ENDIF\r IF #DEVNO.GT.96\r IF #DEVNO.LT.100\r F4: DEFL 1\r ENDIF\r ENDIF\r ENDIF\r ENDIF\r ENDIF\r ENDIF\r ;\r NLIST S\r IF (F1.OR.F2.OR.F7).EQ.1\r LIST S ;+++++ VDU, PRINTER OR PREEDIT\r BFSIZE: DEFL 128\r NLIST S\r ENDIF\r IF (F1.OR.F2.OR.F7).EQ.0\r LIST S ;+++++ #VDU, PRINTER & PREEDIT\r BFSIZE: DEFL 16\r NLIST S\r ENDIF\r LIST S\r ;\r ;\r PUBLIC EHINI,ETIMER\r EXTRN CR80NO,OGEPA,ODEPA\r EXTRN ECOND1,ECOND2\r EXTRN ERRPAT,LCRID,MCRID\r EXTRN NOCH,INISP\r EXTRN ESTABR,SUSPND\r EXTRN SYSRAM,SUBENQ,SUBDEQ,SCOMMON\r EXTRN COMM,QHEADS\r NLIST S\r IF F11.EQ.1\r LIST S ;+++++VDU-D\r EXTRN CR80SS\r NLIST S\r ENDIF\r LIST S\r ;\r DSEG\r DS 64 ;PRIVAT STACK\r EHPSP: DS 1\r ;\r CSEG\r EHINI: LD SP,EHPSP\r EHBEG: CALL SCOMMON\r EI\r ;\r ;>>>>>>>>>>>>>>>>>>>>>> POWER STATUS CHANGE <<<<<<<<<<<<<<<<<<<<<<<\r ;\r EHM2: LD DE,ECOND2 ;COMPARE 'POWER OFF' INDICATION WITH OLD\r LD A,(DE) ;'POWER OFF' STATUS IN ERRPAT REGISTER.\r AND 1\r LD B,A\r LD HL,ERRPAT\r LD A,(HL)\r AND 1\r CP B\r JP Z,EHM3 ;IF CHANGE THEN\r LD A,1 ; BEGIN\r XOR (HL) ; REGISTER CHANGE IN ERRPAT REG.\r LD (HL),A\r EX DE,HL\r SET 7,(HL) ; REQUEST TRANSMISSION OF 'ERROR CONDITION'\r ; END\r ;ENDIF\r ;\r ;>>>>>>>>>>>>>>>>>>>>>>>>>> END <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\r ;\r ;>>>>>>>>>>>>>>>>>> DEVICE CONTROL ERROR<<<<<<<<<<<<<<<<<<<<<<<<<<<<\r ;\r EHM3: LD HL,ECOND2 ;TEST IF A 'DEVICE CONTROL' ERROR HAS\r BIT 1,(HL) ;BEEN DETECTED.\r JP Z,EHM4 ;IF YES THEN\r LD DE,ERRPAT ; BEGIN\r EX DE,HL\r BIT 1,(HL) ; TEST IF ERROR IS REGISTERED\r JP NZ,EHM4 ; IF NO THEN\r ; BEGIN\r SET 1,(HL) ; REGISTER ERROR\r EX DE,HL\r RES 1,(HL)\r SET 7,(HL) ; REQUEST TRANSMISSION OF \r ; 'ERROR CONDITION'\r ; END\r ; ENDIF\r ; END\r ;ENDIF\r ;\r ;>>>>>>>>>>>>>>>>>>>>>>>>>> END <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\r ;\r ;>>>>>>>>>>>>>>>>>>> TRANSMISSION ERROR <<<<<<<<<<<<<<<<<<<<<<\r ;\r EHM4: LD A,(NOCH-1) ;START BUFFER SCANNING AT HIGHEST CHANNEL NO.\r EHM4A: PUSH AF ;REPEAT UNTIL A NOT EMPTY CHANNEL IS FOUND OR\r ; ALL CHANNELS HAS BEEN TESTED\r CALL OGEPA ; TEST IF CHANNEL IS EMPTY\r JP C,EHM5 ; IF NO THEN EXAMINE BUFFER\r POP AF ;\r DEC A ;\r CP 2 ; TEST IF LAST CHANNEL HAS BEEN TESTED\r JP M,EHM15 ; IF YES THEN GOTO 'ERROR CONDITION REQUEST' ROUTINE\r JP EHM4A ;END REPEAT\r EHM5: PUSH DE ;TEST IF BUFFER CONTAINS ERROR MESSAGE\r POP IX ;\r LD A,(IX+7) ;\r AND 6 ;\r CP 0 ;\r JP Z,EHM5A ;\r CP 5 ;\r JP M,EHM6 ;IF NO THEN\r EHM5A: POP AF ; DELIVER BUFFER TO EMPTY QUEUE\r PUSH AF ;\r PUSH DE ;\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 POP AF ;\r DEC A ;\r CP 2 ; TEST IF LAST CHANNEL HAS BEEN TESTED\r JP P,EHM4A ; IF NO THEN CONTINUE SCANNING\r JP EHM15 ; GOTO 'ERROR CONDITION REQUEST' ROUTINE\r EHM6: POP AF ;ELSE\r PUSH AF ;\r PUSH DE ; DELIVER BUFFER TO 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 POP DE ;\r CALL SUBENQ ;\r POP AF ; PROCEED ERROR HANDLING:\r NLIST S\r IF (((F1.OR.F2).OR.F5).OR.F7).EQ.0\r LIST S\r ;++++++++IF LTUX # VDU-VCR/VCR-MATRIX-PRINTER\r ; BEGIN\r CP 5 ; TEST IF ERRONEOUS CHANNEL IS A CR80 CHANNEL\r JP M,EHM8 ; IF NO THEN\r ; BEGIN\r PUSH AF ;\r LD BC,2 ; START TIMER\r CALL ESTABR ;\r LD HL,ECOND2\r LD A,(HL)\r AND 0E3H\r OR #TIME.AND.1CH ; SET UP TIME (NO. OF HALF-SEC.)\r LD (HL),A\r POP AF ;\r LD E,A ;\r SLA E\r SLA E\r SLA E\r SLA E\r LD D,0 ;\r LD A,4 ;\r W1: CALL COMM ; TEST IF IDENTICAL WITH PRE-\r BIT 7,A ; CEEDING TRANSMISSION ERROR.\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: LD A,(LCRID) ;\r CP C ;\r JP NZ,EHM30\r LD A,(MCRID)\r CP B ;\r JP Z,EHM10 ; IF YES THEN GOTO DDM10\r ; ELSE\r ; BEGIN\r EHM30: LD HL,ECOND2 ; REQUEST TRANSMISSION OF 'ERROR CONDITION'\r SET 7,(HL)\r LD A,E\r LD (LCRID),A ; LOAD LCRID REGISTER WITH CRID(LSB)\r ; FROM FIFO.\r LD A,D\r LD (MCRID),A ; LOAD MCRID REGISTER WITH CRID(MSB)\r ; FROM FIFO\r LD IY,ERRPAT\r SET 5,(IY+0) ; UPDATE ERROR PATTERN\r ; END\r JP EHM10\r ; ELSE\r NLIST S\r ENDIF\r LIST S\r EHM8:\r NLIST S\r IF (F3.OR.F5).EQ.0\r LIST S ;+++++ # RCDP AND MATRIX\r LD A,0 ; BEGIN\r LD (ERRPAT),A ; CLEAR ERRPAT REGISTER\r ; END\r NLIST S\r ENDIF\r LIST S\r EHM10:\r ; ENDIF\r NLIST S\r IF (((F1.OR.F3).OR.F5).OR.F7).EQ.1\r LIST S\r ;++++++++IF LTUX = VDU-VCR/VCR-MATRIX-RCDP\r LD A,(ECOND1) ; TEST IF THE LAST Q-ELEMENT WAS THE\r BIT 7,A ; LAST IN A MESSAGE (BYTECOUNT = 16)\r JP NZ,EHM13A ; IF NO THEN\r EHM13: SET 6,A ; SET 'TRANSMISSION CANCELED' FLAG\r LD (ECOND1),A ;\r ; ENDIF\r NLIST S\r ENDIF\r LIST S\r EHM13A:\r NLIST S\r IF F11.EQ.1\r LIST S\r ;++++++++IF LTUX = VDU-D\r LD A,(CR80NO) ; TEST IF THE APPROPRIATE CR80 STATUS\r ; SWITCH REGISTER = 0\r SUB 2\r LD C,A\r LD B,0\r LD HL,CR80SS\r ADD HL,BC\r BIT 0,(HL)\r JP NZ,EHM16 ; IF YES THEN\r ; BEGIN\r SET 0,(HL) ; SET CR80 SWITCH STATUS REGISTER\r PUSH HL\r LD BC,2 ; ACTIVATE TIMER\r CALL ESTABR ;\r LD A,(IY+0) ; CLEAR ECOND2 TIMESCALER\r AND 0E3H\r LD (IY+0),A\r ; END\r POP HL ; ENDIF\r EHM16: BIT 4,(IY+0) ; TEST IF TIME OUT\r JP Z,EHM22 ; IF YES THEN\r ; BEGIN\r LD HL,CR80SS ; TEST IF ALL CR80 CHANNELS ARE TRIED\r LD A,(HL)\r INC HL\r AND (HL)\r INC HL\r AND (HL)\r JP NZ,EHM22 ; IF NO THEN\r ; BEGIN\r LD HL,CR80NO ; SWITCH TO NEXT CR80 CHANNEL\r INC (HL)\r LD A,(HL)\r CP 5\r JP NZ,EHM17\r LD A,2\r LD (HL),A\r EHM17: OGEPA2 ; GET EMPTY BUFFER\r JP NC,EHM15\r PUSH DE ; LOAD EMPTY BUFFER WITH\r POP IX ; 'CHANNEL CHECK' MESSAGE\r LD A,0EBH\r LD (IX+8),A\r LD A,(CR80SS)\r LD (IX+9),A\r LD A,(CR80SS+1)\r LD (IX+0AH),A\r LD A,(CR80SS+2)\r LD (IX+0BH),A\r LD (IX+2),4\r ODEPA1 Y,BFSIZE ; TRANSMIT BUFFER\r ; END\r ; ENDIF\r ; END\r ; ENDIF\r ; END\r ; ENDIF\r ; END\r ; ENDIF\r JP EHM22\r ; END\r ;ENDIF\r ENDIF\r ;\r LIST S\r ;>>>>>>>>>>>>>>>>>>>>>>>>>> END <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\r ;\r ;>>>>>>>>>>>>>>>> ERROR CONDITION REQUEST <<<<<<<<<<<<<<<<<<<<<\r ;\r EHM15:\r NLIST S\r IF F11.EQ.1\r LIST S ;+++++ VDU-D\r LD HL,ECOND2 ;TEST IF A 'SET CHANNEL' COMMAND \r BIT 5,(HL) ;HAS BEEN RECEIVED\r JP Z,EHM15A ;IF YES THEN\r ; BEGIN\r RES 5,(HL) ; RESET 'SET CHANNEL' FLAG\r LD IY,CR80SS ; CLEAR CR80SS TO CR80SS+2\r LD (IY+0),0\r LD (IY+1),0\r LD (IY+2),0\r LD BC,2 ; STOP TIMER\r CALL SUSPND ;\r EHM15B: CALL GETMES ; CLEAR FIFO\r JP NC,EHM15B ;\r ;ENDIF\r NLIST S\r ENDIF\r LIST S\r EHM15A: LD HL,ECOND2 ;TEST IF THERE IS AN 'ERROR CONDITION' REQUEST\r BIT 7,(HL)\r JP Z,EHM19 ;IF YES THEN\r ; BEGIN\r RES 7,(HL) ; RESET FLAG\r NLIST S\r IF (F3.OR.F5).EQ.0\r LIST S ;+++++ #RCDP AND MATRIX\r OGEPA2 ; GET EMPTY BUFFER\r PUSH DE\r POP IX\r LD (IX+8),0F0H ; LOAD BUFFER WITH 'ERROR CONDITION' MESSAGE\r LD A,(ERRPAT)\r LD (IX+9),A\r LD A,(LCRID)\r LD (IX+0AH),A\r LD A,(MCRID)\r LD (IX+0BH),A\r LD A,0\r LD (IX+0CH),A\r LD A,0\r LD (IX+0DH),A\r LD (IX+2),6\r ODEPA1 Y,BFSIZE ; TRANSMIT BUFFER TO CR80\r NLIST S\r ENDIF\r IF (F3.OR.F5).EQ.1\r LIST S ;+++++RCDP OR MATRIX\r OGEPA1 2 ; GET EMPTY BUFFER CH.2\r PUSH DE\r POP IX\r LD (IX+8),0F0H ; LOAD BUFFER WITH 'ERROR CONDITION' MESSAGE\r LD A,(ERRPAT)\r LD (IX+9),A\r LD A,(LCRID)\r LD (IX+0AH),A\r LD A,(MCRID)\r LD (IX+0BH),A\r LD A,0\r LD (IX+0CH),A\r LD A,0\r LD (IX+0DH),A\r LD (IX+2),6\r ODEPA1 Y,BFSIZE ; TRANSMIT BUFFER TO CR80(E)\r OGEPA1 3 ; GET EMPTY BUFFER CH.3\r PUSH DE\r POP IX\r LD (IX+8),0F0H ; LOAD BUFFER WITH 'ERROR CONDITION' MESSAGE\r LD A,(ERRPAT)\r LD (IX+9),A\r LD A,(LCRID)\r LD (IX+0AH),A\r LD A,(MCRID)\r LD (IX+0BH),A\r LD A,0\r LD (IX+0CH),A\r LD A,0\r LD (IX+0DH),A\r LD (IX+2),6\r ODEPA1 Y,BFSIZE ; TRANSMIT BUFFER TO CR80(PC)\r OGEPA1 4 ; GET EMPTY BUFFER CH.4\r PUSH DE\r POP IX\r LD (IX+8),0F0H ; LOAD BUFFER WITH 'ERROR CONDITION' MESSAGE\r LD A,(ERRPAT)\r LD (IX+9),A\r LD A,(LCRID)\r LD (IX+0AH),A\r LD A,(MCRID)\r LD (IX+0BH),A\r LD A,0\r LD (IX+0CH),A\r LD A,0\r LD (IX+0DH),A\r LD (IX+2),6\r ODEPA1 Y,BFSIZE ; TRANSMIT BUFFER TO CR80(B)\r NLIST S\r ENDIF\r ; END\r IF F4.EQ.1\r LIST S\r ;+++++++++IF LTUX = RCP\r ; BEGIN\r OGEPA1 5 ; GET EMPTY BUFFER\r PUSH DE\r POP IX\r LD (IX+8),0F0H ; LOAD BUFFER WITH 'ERROR CONDITION' MESSAGE\r LD A,(ERRPAT)\r LD (IX+9),A\r LD A,(LCRID)\r LD (IX+0AH),A\r LD A,(MCRID)\r LD (IX+0BH),A\r LD A,0\r LD (IX+0CH),A\r LD A,0\r LD (IX+0DH),A\r LD (IX+2),6\r ODEPA1 Y,BFSIZE ; TRANSMIT BUFFER TO RCDP\r ; END\r NLIST S\r ENDIF\r LIST S\r ;ENDIF\r EHM19: JP EHBEG ;RETURN TO SCHEDULER\r ;\r ;>>>>>>>>>>>>>>>>>>>> END <<<<<<<<<<<<<<<<<<<<<<<<<<\r ;\r ;>>>>>>>>>>>>> TIMER 2 - SUBROUTINE <<<<<<<<<<<<<<<<\r ;\r NLIST S\r IF F11.EQ.0\r LIST S ;+++++ #VDU-D\r ETIMER: LD HL,ECOND2\r LD A,(HL)\r LD B,A\r AND 1CH\r SUB 4\r PUSH AF\r LD C,A\r LD A,B\r AND 0E3H\r OR C\r LD (HL),A\r POP AF\r JP NZ,EHM33\r LD HL,LCRID\r LD A,0\r LD (HL),A\r INC HL\r LD (HL),A\r LD HL,ERRPAT\r RES 5,(HL)\r RET\r EHM33: LD BC,#ETIMNO\r CALL ESTABR\r RET\r NLIST S\r ENDIF\r IF F11.EQ.1\r LIST S ;+++++ VDU-D\r ETIMER: LD HL,ECOND2\r LD A,(HL)\r LD B,A\r AND 1CH\r ADD A,4\r BIT 4,A\r PUSH AF\r LD C,A\r LD A,B\r AND 0E3H\r OR C\r LD (HL),A\r POP AF\r RET NZ\r LD BC,#ETIMNO\r CALL ESTABR\r RET\r NLIST S\r ENDIF\r LIST S\r ;\r ;\r ;\r ;\r ;\r ;******* E N D O F E R R O R H A N D L I N G P R O C E S S*******\r ;\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