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: 12056 (0x2f18) Types: TextFile Names: »REAL.DOR«
└─⟦b678e5579⟧ Bits:30005502 8" CR80 Floppy CR80FD_0031 ( TELECINE BACKUP ) └─⟦b678e5579⟧ Intel_ISIS_II └─ ⟦this⟧ »REAL.DOR«
;\r ;\r ;file: REAL.DOR, version: 801212/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 BSCHES\r JP INIT\r NOP\r NOP\r NOP\r NOP\r ERROR: EI ;FAULT RECOVERY INTERRUPT (NMI, ADDRESSING ERROR)\r RETN\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 IN A,(ADIPSW) ;\r BIT 0,A ;\r JP Z,NOMONI ;\r CREATE S,15,MONINI ;\r NOMONI: CREATE S,1,START,D\r JP 38H ;GOTO BASIC SCHEDULER\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 RST 38H ;SCHEDULE\r POP HL ;RESTORE SP\r LD SP,HL\r RET\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 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 ;\r END\r