|
|
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: 11982 (0x2ece)
Types: TextFile
Names: »REAL.DOR«
└─⟦755b1f38b⟧ Bits:30005549 8" CR80 Floppy CR80FD_0032 ( TELECINE Source and Abs-files )
└─⟦755b1f38b⟧ Intel_ISIS_II
└─⟦this⟧ »REAL.DOR«
└─⟦8347abc8e⟧ Bits:30005501 8" CR80 Floppy CR80FD_0033 ( ATR Source and Abs-files )
└─⟦8347abc8e⟧ Intel_ISIS_II
└─⟦this⟧ »REAL.DOR«
└─⟦af81bc460⟧ Bits:30005550 8" CR80 Floppy CR80FD_0034 ( MATRIX Source and Abs-files )
└─⟦af81bc460⟧ Intel_ISIS_II
└─⟦this⟧ »REAL.DOR«
;\r
;\r
;file: REAL.DOR, version: 810424/CGR\r
;************************************************************************\r
;\r
; Z80 REALTIME OPERATING SYSTEM\r
;\r
; Modified for DORA applications\r
;\r
;************************************************************************\r
;\r
;\r
;\r
NLIST S\r
;\r
BSCHES MACRO\r
NLIST M ;DESCRIP: THE MODULE SEARCHES THE SCHEDULE-\r
; LIST FOR THE NEXT ACTIVE PROCESS\r
; AND RETURNS CONTROL TO THIS PROCESS.\r
; IF LINK-PARAM. IS SET A JUMP TO EX.\r
; SCHEDULER IS EXECUTED IN CASE OF\r
; NO ACTIVE SPECIAL PROCESSES\r
;ENTRY: ADD 38H\r
;EXIT: ADD IN FIRST ACTIVE PROCESS-DESCRIP\r
; OR EXTENDED SCHEDULER\r
;DESTR: REG A,F,H,L,SP\r
\r
X#$YM: LD SP,INISP ;INITIALIZE SP\r
EI ;INTERRUPT INTERVAL\r
NOP\r
NOP\r
NOP\r
DI\r
S#$YM: LD HL,SYSRAM+0FAH \r
IF LINK.EQ.1\r
JR Z#$YM ;TEST IF LINKELEMENT ZERO\r
ENDIF\r
R#$YM: DEC (HL) ;DEC. CURRENT SCHEDULE COUNT\r
JP NZ,C#$YM ;TEST IF CURRENT SCHEDULE COUNT ZERO\r
LD (HL),SLL ;REINITIALIZE CURRENT SCHEDULE COUNT\r
LD HL,0H\r
JP I#$YM\r
C#$YM: LD L,(HL)\r
LD H,0H\r
I#$YM: LD DE,ADDSL\r
ADD HL,DE ;SCHEDULE LIST ADDRESS IMPLEMENTED\r
LD L,(HL)\r
LD DE,SYSRAM+200H ;OFFSET-ADD OF PD\r
LD H,D ;ADDRESS OF PD IMPLEMENTED\r
IF S.GT.16\r
LD H,0\r
SLA L\r
RL H ;MULTIPLY ADD BY 2\r
ENDIF\r
IF S.GT.32\r
SLA L\r
RL H ;MULTIPLY ADD BY 2\r
ENDIF\r
IF S.GT.64\r
SLA L\r
RL H ;MULTIPLY ADD BY 2\r
ENDIF\r
IF S.GT.128\r
SLA L\r
RL H\r
ENDIF\r
IF S.GT.16\r
LD DE,SYSRAM+205H\r
ADD HL,DE\r
ENDIF\r
BIT 7,(HL) ;TEST ACTIVE/PASSIV\r
JR Z,X#$YM ;JUMP IF PASSIV\r
INC L\r
LD SP,HL ;SP POINTS AT XXX6\r
INC L\r
INC L\r
LD (SYSRAM+0F8H),HL;SAVE ADDRESS OF\r
;EXECUTING PD\r
RET\r
IF LINK.EQ.1\r
EXTRN EXSCHED\r
Z#$YM: INC HL ;IMPLEMENT ADD OF LINK ELEMENT\r
LD A,(HL) ;\r
AND A ;IF LINK-ELEMENT 0 THEN\r
JP Z,EXSCHED ;GOTO EXTENDED SCHEDULER\r
DEC HL ;ELSE\r
JP R#$YM ;RETURN TO BASIC SCHEDULER\r
ENDIF\r
LIST M\r
ENDM\r
EJEC\r
LSCHED MACRO\r
NLIST M\r
;DESCRIP: THE MODUL SETS UP A \r
; SCHEDULE LIST CONFIGU-\r
; RATION WITH EQUALIZED\r
; DISTRIBUTION OF ADDRESSES\r
;DESTR: REG A,F,B,C,D,E,H,L\r
\r
LD HL,SYSRAM+1FFH ;IMPLEMENT ADD OF LAST LIST-ELEMENT\r
S#$YM: LD BC,S-1 ;INIT PROCESS-COUNT\r
L#$YM: LD D,B ;IMPLEMENT RELATIV ADD OF \r
LD E,C ;PROCESS-DESCRIPT FROM CURRENT \r
IF S.LT.256 ;PROCESS-COUNT\r
SLA E\r
RL D ;THE RELATIVE ADD IS\r
IF S.LT.128 ;(PROCESS-COUNT)*256/S\r
SLA E\r
RL D\r
IF S.LT.64\r
SLA E\r
RL D\r
IF S.LT.32 ;IF S EQU 16 THEN\r
SLA E ;BEGIN\r
RL D\r
LD A,E ;IMPLEMENT ABSOLUT ADD\r
ADD A,5 ;BY ADDING 5 TO RELATIVE ADD\r
LD E,A ;END\r
ENDIF\r
ENDIF\r
ENDIF\r
ENDIF\r
LD (HL),E ;LOAD SCHEDUL LIST ELEMENT\r
DEC L ;DEC CURRENT SCHEDUL LIST ELEMENT\r
LD A,L ;IF LAST SCHEDULE LIST ELEMENT THEN\r
CP 0FFH \r
JR Z,E#$YM ;GOTO E#$YM\r
DEC C ;ELSE\r
LD A,C ;DECREMENT CURRENT PROCESS-COUNT\r
CP 0FFH ;IF CURRENT PROCESS-COUNT=0 THEN\r
JR Z,S#$YM ;GOTO S#$YM (INIT PROCESS-COUNT)\r
;ELSE\r
JR L#$YM ;GOTO L#$YM (CONTINUE LOOP)\r
E#$YM: LIST M\r
ENDM\r
EJEC\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
\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
EJEC\r
PASSIVATE MACRO #ID,#NO\r
NLIST M\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
\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
LIST M\r
ENDM\r
EJEC\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
\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
EJEC\r
BSCHED MACRO\r
NLIST M\r
;DESCRIP: THE MODULE SEARCHES THE SCHEDULE-\r
; LIST FOR THE NEXT ACTIVE PROCESS\r
; AND RETURNS CONTROL TO THIS PROCESS.\r
; IF LINK-PARAM. IS SET A JUMP TO EX.\r
; SCHEDULER IS EXECUTED IN CASE OF\r
; NO ACTIVE SPECIAL PROCESSES\r
; (THE CHEDULER SUPPORTS DYNAMIC\r
; SCHEDULE-LIST)\r
;ENTRY: ADD 38H\r
;EXIT: ADD IN FIRST ACTIVE PROCESS-DESCRIP\r
; OR EXTENDED SCHEDULER\r
;DESTR: REG A,F,H,L,SP\r
\r
X#$YM: LD HL,INISP\r
LD SP,HL ;INITIATE SP\r
EI ;INTERRUPT INTERVAL\r
NOP\r
NOP\r
DI\r
S#$YM: LD HL,SYSRAM+0FAH \r
IF LINK.EQ.1\r
JR Z#$YM ;TEST IF LINKELEMENT ZERO\r
ENDIF\r
R#$YM: INC (HL) ;INC CURRENT LIST ELEMENT\r
LD L,(HL)\r
INC H ;SHEDULE LIST ADD IMPLEMENTED\r
LD L,(HL)\r
INC H ;ADD OF PD IMPLEMENTED\r
IF S.GT.16\r
LD H,0\r
SLA L\r
RL H ;MULTIPLY ADD BY 2\r
ENDIF\r
IF S.GT.32\r
SLA L\r
RL H ;MULTIPLY ADD BY 2\r
ENDIF\r
IF S.GT.64\r
SLA L\r
RL H ;MULTIPLY ADD BY 2\r
ENDIF\r
IF S.GT.128\r
SLA L\r
RL H\r
ENDIF\r
IF S.GT.16\r
LD DE,SYSRAM+205H\r
ADD HL,DE ;ADD RELATIVE ADDRESS\r
ENDIF\r
BIT 7,(HL) ;TEST ACTIVE/PASSIV\r
JR Z,X#$YM ;JUMP IF PASSIV\r
INC L\r
LD SP,HL ;SP POINTS AT XXX6\r
INC L\r
INC L\r
LD (SYSRAM+0F8H),HL;SAVE ADDRESS OF\r
;EXECUTING PD\r
RET\r
IF LINK.EQ.1\r
EXTRN EXSCHED\r
Z#$YM: INC HL ;IMPLEMENT ADD OF LINK ELEMENT\r
LD A,(HL) ;\r
AND A ;IF LINK-ELEMENT 0 THEN\r
JP Z,EXSCHED ;GOTO EXTENDED SCHEDULER\r
DEC HL ;ELSE\r
JP R#$YM ;RETURN TO BASIC SCHEDULER\r
ENDIF\r
LIST M\r
ENDM\r
EJEC\r
RESTORE MACRO #N,#R1,#R2,#R3,#R4\r
NLIST M\r
;DESCRIP:THE MODULE RESTORES THE #N REG.-PAIR(S) ; SPECIFIED AND INITIALIZES SP.\r
; THE REG.-PAIRS ARE RESTORED FROM\r
; BYTE 8,9,10,11,2,13,14,15 IN POCESS-\r
; DESCRIPTION. THE SPECIFIED REG.-PAIR\r
; WITH HIGHEST INDEX IS RESTORED FROM\r
; BYTE 8\r
;DESTR: REG H,L,SP\r
\r
IF #N.GT.3 ;THE ROUTINE RESTORES\r
POP #R4 ;#R4\r
ENDIF\r
IF #N.GT.2\r
POP #R3 ;#R3\r
ENDIF\r
IF #N.GT.1\r
POP #R2 ;#R2\r
ENDIF\r
IF #N.GT.0\r
POP #R1 ;#R1\r
ENDIF\r
LD SP,INISP ;INIT SP\r
LIST M\r
ENDM\r
EJEC\r
SCHEDULE MACRO #N,#R1,#R2,#R3,#R4\r
NLIST M\r
;DESCRIP: THE MODULE DISABLES INTERRUPTS\r
; SAVES THE #N SPECIFIED REG.-PAIR(S)\r
; AND JUMPS TO ADD 38H (BASIC SCHEDULER).\r
; THE REG.-PAIRS ARE SAVED IN PROCESS-\r
; DESCRIPTION BYTE 8,9,10,11,12,13,14,15\r
; WITH THE SPECIFIED REGISTER WITH\r
; HIGHEST INDEX SAVED IN BYTE 8\r
;EXIT: ADD 38H\r
;DESTR: REG. H,L,SP\r
; SPEC. BYTES IN PROCESS-DESCRIPTION\r
\r
IF #N.GT.0\r
LD HL,(SYSRAM+0F8H);ADD OF EXECUTING PD TO HL\r
PUSH AF ;STORE AF\r
LD A,L\r
ADD A,#N*2-1\r
LD L,A\r
INC HL\r
POP AF ;RESTORE AF\r
DI\r
LD SP,HL ;STORE REGISTERS ON STACK\r
ENDIF\r
IF #N.EQ.0\r
DI\r
LD SP,(SYSRAM+0F8H)\r
ENDIF\r
IF #N.GT.0\r
PUSH #R1 ;#R1\r
IF #N.GT.1\r
PUSH #R2 ;#R2\r
IF #N.GT.2\r
PUSH #R3 ;#R3\r
IF #N.GT.3\r
PUSH #R4 ;#R4\r
ENDIF\r
ENDIF\r
ENDIF\r
ENDIF\r
RST 38H ;SCHEDULE\r
LIST M\r
ENDM\r
EJEC\r
COMMON MACRO #N,#R1,#R2,#R3,#R4\r
NLIST M\r
;DESCRIP: THE MODULE DISABLES INTERRUPT,\r
; SAVES THE #N SPECIFIED REG.-PAIR(S) IN\r
; PROCESS-DESCRIPTION, ENFORCES A SCHE-\r
; DULING, RESTORES THE #N SPECIFIED\r
; REG.-PAIR(S) AND ENABLES INTERRUPT.\r
;DESTR: REG. H,L,SP\r
; SPECIFIED BYTES IN PROCESS-DESCRIP.\r
; NOT SPECIFIED REG.-PAIRS\r
\r
SCHEDULE #N,#R1,#R2,#R3,#R4\r
NLIST M\r
RESTORE #N,#R1,#R2,#R3,#R4\r
\r
ENDM\r
EJEC\r
LISTSCHED MACRO #START,#ELEMENT,#STEP\r
NLIST M\r
;DESCRIP: THE MODULE INSERTS #ELEMENT IN SCHEDULE-\r
; LIST AS ELEMENT-NO #START+#STEP*N, WHERE\r
; N IS A NON-NEGATIVE INTEGER\r
;DESTR: REG A,F,H,L\r
\r
LD HL,SYSRAM+100H+#START\r
L#$YM: LD (HL),#ELEMENT ;LOAD LIST WITH ELEMENT\r
LD A,L\r
ADD A,#STEP ;IMPLEMENT NEXT LIST ELEMENT\r
LD L,A ;IF LAST LIST-ELEMENT THEN\r
JR NC,L#$YM ;FINISH\r
;ELSE GOTO L#$YM\r
LIST M\r
ENDM\r
EJEC\r
ENASCH MACRO\r
NLIST M\r
;DESCRIP: THE MODULE ENABLES BASIC SCHEDULER\r
;DESTR: REG H,L\r
\r
LD HL,SYSRAM+0F5H\r
SET 7,(HL)\r
LIST M\r
ENDM\r
EJEC\r
DISSCH MACRO\r
NLIST M\r
;DESCRIP: THE MODULE DISABLES BASIC SCHEDULER\r
;DESTR: REG H,L\r
LD HL,SYSRAM+0F5H\r
RES 7,(HL)\r
LIST M\r
ENDM\r
EJEC\r
FILLRAM MACRO\r
NLIST M\r
;DESCRIP: RAM IS FILLED WITH SPECIFIED\r
; PATTERN\r
;ENTRY: PATTERN IN REG C\r
; LOWER ADD IN REG HL\r
; UPPER ADD IN REG DE\r
;EXIT: PATTERN IN REG C\r
; UPPER ADD IN REG DE,HL\r
;DESTR: REG A,F\r
\r
F#$YM: LD (HL),C ;FILL PATTERN IN RAM\r
INC HL ;INC CURRENT ADD\r
LD A,D\r
CP H ;IF CURRENT ADD EQU.\r
JR NZ,F#$YM;MAX ADD THEN\r
LD A,E ;JUMP OUT\r
CP L ;ELSE\r
JR NZ,F#$YM;GOTO F#$YM\r
LIST M\r
ENDM\r
LIST S\r
;\r
;\r
;\r
;\r
PUBLIC SUBENQ,SUBDEQ\r
PUBLIC SCOMMON\r
EXTRN SYSRAM,ENDRAM\r
EXTRN START,INISP\r
LINK EQU 0\r
ADIPSW EQU 0D0H\r
ORG 30H\r
JP BEGIN\r
;\r
SCOMMON: ;SCHEDULING PRIMITIV SAVING SP IN PD\r
LD HL,0\r
ADD HL,SP\r
DI\r
LD SP,(SYSRAM+0F8H) ;LOAD SP WITH ADD OF EXEC. PD\r
POP DE\r
PUSH HL ;SAVE SP IN PD OF EXECUTING PD\r
CALL BEGIN+8 ;SCHEDULE\r
POP HL ;RESTORE SP\r
LD SP,HL\r
RET\r
;\r
SUBENQ INC HL ;1 INCREMENT NUMBER OF ELEMENT\r
LD A,(HL) ;1\r
INC (HL) ;1\r
AND A ;1\r
JR NZ,ENQ1 ;2 IF NUMBER OF ELEMENT WAS = 0\r
INC HL ;2 THEN DO;\r
LD (HL),E ;3 REMOVE NEW ELEMENT ADDRESS\r
INC HL ;3 IN QUEUE AS FIRST ELEMENT\r
LD (HL),D ;3 AND LAST ELEMENT\r
INC HL ;3\r
LD (HL),E ;3\r
INC HL ;3\r
LD (HL),D ;3 RETURN\r
RET ;3 END;\r
ENQ1 SCF ;4 ELSE DO;\r
INC HL ;4 REMOVE NEW ELEMENT ADDRESS\r
INC HL ;4 TO OLD LAST ELEMENT DESCRIPTION\r
INC HL ;4\r
LD C,(HL) ;4\r
INC HL ;4\r
LD B,(HL) ;4\r
LD (HL),D ;4\r
DEC HL ;4 REMOVE NEW ELEMENT ADDRESS\r
LD (HL),E ;4 TO NEW LAST ELEMENT IN QUEUE\r
LD L,C ;4\r
LD H,B ;4\r
LD (HL),E ;4\r
INC HL ;4\r
LD (HL),D ;4 RETURN\r
RET ;4 END;\r
;\r
ORG 66H\r
NMI: LD A,0 ;NMI LOOP\r
OUT (0C0H),A ;\r
JP NMI ;\r
;\r
BEGIN: BSCHES\r
INIT: LD C,0\r
LD HL,SYSRAM ;LOAD LOWER ADDRESS\r
LD DE,ENDRAM ;LOAD UPPER ADDRESS\r
FILLRAM\r
ENASCHED\r
LD A,SLL\r
LD (SYSRAM+0FAH),A ;INIT CURRENT SCHEDULE-COUNT\r
CREATE S,1,START,D\r
JP BEGIN+8 ;GOTO BASIC SCHEDULER\r
;\r
SUBDEQ INC HL ;1\r
DEC (HL) ;1 DECREMENT NUMBER OF ELEMENT\r
SCF ;2 SET QUEUE NOT EMPTY FLAG (CARRY=1)\r
JP M,DEQ1 ;3 IF NUMBER OF ELEMENT > 0\r
INC HL ;3 THEN DO;\r
LD E,(HL) ;3 REMOVE ADDRESS OF FIRST ELEMENT\r
INC HL ;3 TO REGISTER DE\r
LD D,(HL) ;3\r
EX DE,HL ;3 REMOVE SECOND ELEMENT TO NEW\r
DEC DE ;3 FIRST ELEMENT IN QUEUE\r
LDI ;3\r
LDD ;3\r
EX DE,HL ;3\r
RET ;3 END;\r
DEQ1 CCF ;4 ELSE DO;\r
INC (HL) ;4 SET QUEUE EMPTY FLAG (CARRY=0)\r
;4 NUMBER OF ELEMENT=0\r
RET ;4 END;\r
;\r
END\r