|
|
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: 8046 (0x1f6e)
Types: TextFile
Names: »DORCOM.TMP«
└─⟦b678e5579⟧ Bits:30005502 8" CR80 Floppy CR80FD_0031 ( TELECINE BACKUP )
└─⟦b678e5579⟧ Intel_ISIS_II
└─⟦this⟧ »DORCOM.TMP«
;************************************************************************\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
;################# 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
ENDM\r
;\r
;\r
;************************************************************************\r
; O G E P A 1\r
; VERSION 801127/CGR\r
;************************************************************************\r
;\r
OGEPA1 MACRO #CHAN\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
ENDM\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
;################### Ogepa3 macro ###################################\r
IF #CHAN.EQ.6\r
;+++++ #CHAN = 6\r
LD A,(PANCO)\r
ENDIF\r
IF #CHAN.EQ.7\r
;+++++ #CHAN = 7\r
LD A,(PANCOM)\r
ENDIF\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
IF #CHAN.EQ.6\r
;+++++ #CHAN = 6\r
LD A,(PANCO)\r
ENDIF\r
IF #CHAN.EQ.7\r
;+++++ #CHAN = 7\r
LD A,(PANCOM)\r
ENDIF\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
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
;#################### 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
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
;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
ENDM\r
\r