|
|
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: 11215 (0x2bcf)
Types: TextFile
Names: »MACSAV.SRC«
└─⟦b678e5579⟧ Bits:30005502 8" CR80 Floppy CR80FD_0031 ( TELECINE BACKUP )
└─⟦b678e5579⟧ Intel_ISIS_II
└─⟦this⟧ »MACSAV.SRC«
NLIST S\r
SETOBIT MACRO #PORTADDRESS,#ACTION,#VALUE\r
;SETOBIT IS USED TO SET OR RESET\r
;BITS ONE A OUTPUT PORT SPECIFIED\r
;BY THE PARAMETERS:\r
;VAL: SPECIFIED THE BIT WHICH HAS \r
; TO BE SET OR RESET (0-0FFH).\r
;ACTION: TELL THE ROUTINE WHICH\r
; ACTION IT HAS TO PERFORME\r
; SET OR RESET\r
;PORTADDRESS: SPECIFIED THE ADDRESS\r
; WHERE THE ACTION HAS TO \r
; BE PERFORMED.\r
IF '#ACTION'.EQ.'S'\r
LD C,#PORTADDRESS\r
LD B,#VALUE ;\r
CALL SETBIT ;\r
ENDIF\r
IF '#ACTION'.EQ.'R'\r
LD C,#PORTADDRESS\r
LD A,#VALUE\r
CALL RESBIT ;\r
ENDIF\r
ENDM\r
\r
\r
PASSIVATE MACRO #ID,#NO\r
;DESRIP: THE MODULE PASSIVATES\r
; SPECIFIED PROCES.\r
; IF LINK IS SET AND ACTIV\r
; SPECIAL PROCESS IS PASSIVATED\r
; THE LINK-ELEMENT IS \r
; DECREMENTED\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 Z,O#$YM ;IF PROCESS WAS NOT PASSIVE THEN\r
LD HL,SYSRAM+0FBH ;BEGIN\r
DEC (HL) ;DEC 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
RES 7,(HL) ;PASSIVATE\r
ENDM\r
ACTIVATE MACRO #ID,#NO\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
ENDM\r
CREATE MACRO #ID,#NO,#NAME,#PRIO\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
ENDM\r
\r
\r
LESTAB MACRO #PRNUM\r
LD BC,#PRNUM\r
CALL ESTABR\r
ENDM\r
\r
LSUSPN MACRO #PRNUM\r
LD BC,#PRNUM\r
CALL SUSPND\r
ENDM\r
\r
GESTAM MACRO\r
LD HL,ONOFF\r
LD (HL),0FFH\r
ENDM\r
\r
GSUSPM MACRO\r
LD HL,ONOFF\r
LD (HL),0\r
ENDM\r
\r
UPDATM MACRO #PRNUM,#VALUE\r
LD HL,DELAY+#PRNUM\r
LD (HL),#VALUE\r
ENDM\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
;################# 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
LIST S\r