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: 13763 (0x35c3) Types: TextFile Names: »TEST.SRC«
└─⟦8347abc8e⟧ Bits:30005501 8" CR80 Floppy CR80FD_0033 ( ATR Source and Abs-files ) └─⟦8347abc8e⟧ Intel_ISIS_II └─ ⟦this⟧ »TEST.SRC«
;******************************************************************************\r ;* *\r ;* D O R A A P P L I C A T I O N S / W *\r ;* *\r ;* DEVICE: ATR *\r ;* *\r ;* MODULE: SUBROUTINE & DATA SEGMENT MODULE *\r ;* *\r ;******************************************************************************\r \r LINK DEFL 0\r SCANNR DEFL 5\r DCODNR DEFL 6\r SEARNR DEFL 7\r SYNCNR DEFL 8\r LOCKNR DEFL 9\r TIMGNR DEFL 10\r INSPNR DEFL 11\r STATNR DEFL 12\r READNR DEFL 13\r SEARTIM DEFL 1\r SYNCTIM DEFL 2\r LOCKTIM DEFL 3\r INSPTIM DEFL 4\r SCANTIM DEFL 5\r PORT1 DEFL 30H\r PORT2 DEFL 32H\r PORT3 DEFL 34H\r PORT4 DEFL 31H\r DAC DEFL 20H\r \r NLIST S\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 RESTART 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,#NO\r LD HL,DELAY+#PRNUM\r LD (HL),#NO\r ENDM\r \r \r LIST S\r PUBLIC CLEARY,IOREAD,IOVALU\r PUBLIC FLAG1,FLAG2,MESCOD,OLDSTAT\r PUBLIC CODSAV,COMBYT,COUNT1,COUNT2,COUNT3,TCCSTA,CCBSTA,TESTBT\r PUBLIC DIFREG,BFSAVE,TTCREG,TTC0,TTCF0,TTCF1,TTCR0,TTCR1,MTC00\r PUBLIC TTCCOD,NTTCCO,TTCSAV,MTCREG,PLAYREG,ADDRTC,OLDSTAT\r PUBLIC MTCCOD,NMTCCO,STOPREG,LOCREG,UTCCOD,COUNT4,COUNT5\r PUBLIC NUTCCO,TMPCOD,TTCF2,TTCR2,REGUTC\r PUBLIC TTCDIF,MTCDIF,OUTPUT,CPOINTS,TCCOMP,TCSUB,TCADD\r PUBLIC REG1,REG2,REG3,REG4,REG5,REG6,REG7,PQH6,PQH12\r PUBLIC DACRAM,FLAG3\r EXTRN ESTABR,SUSPND,SYSRAM\r EXTRN CONS03,CONS04,CONS05,CONS06,CONS07,CONS08\r \r CSEG\r CLEARY: PASSIVATE S,SEARNR\r PASSIVATE S,SYNCNR\r PASSIVATE S,LOCKNR\r LSUSPN SEARTIM\r LSUSPN SYNCTIM\r LSUSPN LOCKTIM\r LD HL,FLAG1\r RES 2,(HL) ;CLEAR SYNC FLAG\r RES 5,(HL) ;CLEAR LOCK-FLAG\r LD A,00H\r LD (DACRAM),A\r LD (DACRAM+1),A\r OUT (DAC),A\r OUT (DAC+1),A ;ADJUST SPEED OF THE ATR TO NORMAL SPEED\r RET\r \r CPOINTS LD IX,TTCREG\r LD IY,CONS03\r LD BC,TTC0\r CALL TCSUB ;TTC0 = (TTCREG) - CONS03\r JR NC,C1 ;IF TTC0 IS NEGATIVE THEN\r LD HL,TTCREG ;BEGIN\r LD DE,TTC0 ;\r LD BC,4 ; SET TTC = (TTCREG)\r LDIR ;END\r C1: LD IY,CONS04\r LD BC,TTCF0\r CALL TCSUB ;TTCF0 = (TTCREG) - CONS04\r JR NC,C2 ;IF TTCF0 IS NEGATIVE THEN\r LD HL,TTC0 ;BEGIN\r LD DE,TTCF0 ;\r LD BC,4 ; SET TTCF0 = TTC0\r LDIR ;END\r C2: LD IY,CONS05\r LD BC,TTCF1\r CALL TCSUB ;TTCF1 = (TTCREG) - CONS05\r JR NC,C3 ;IF TTCF1 IS NEGATIVE THEN\r LD HL,TTCF0 ;BEGIN\r LD DE,TTCF1 ;\r LD BC,4 ; SET TTCF1 = TTCF0\r LDIR ;END\r C3: LD IY,CONS06\r LD BC,TTCF2\r CALL TCSUB ;TTCF2 = (TTCREG) - CONS06\r JR NC,C4 ;IF TTCF2 IS NEGATIVE THEN\r LD HL,TTCF1 ;BEGIN\r LD DE,TTCF2 ;\r LD BC,4 ; SET TTCF2 = TTCF1\r LDIR ;END\r C4: LD IY,CONS07\r LD BC,TTCR0\r CALL TCADD ;TTCR0 = (TTCREG) + CONS07\r JR NC,C5 ;IF TTCR0 > 24 H THEN\r LD HL,TTCREG ;BEGIN\r LD DE,TTCR0 ;\r LD BC,4 ; SET TTCR0 = (TTCREG)\r LDIR ;END\r C5: LD IY,CONS08\r LD BC,TTCR1\r CALL TCADD ;TTCR1 = (TTCREG) + CONS08\r JR NC,C6 ;IF TTCR1 > 24 H THEN\r LD HL,TTCR0 ;BEGIN\r LD DE,TTCR1 ;\r LD BC,4 ; SET TTCR1 = TTCR0\r LDIR ;END\r C6: LD IY,CONS06\r LD BC,TTCR2\r CALL TCADD ;TTCR2 = (TTCREG) + CONS06\r RET NC ;IF TTCR2 > 24 H THEN\r LD HL,TTCR1 ;BEGIN\r LD DE,TTCR2 ;\r LD BC,4 ; SET TTCR2 = TTCR1\r LDIR ;END\r RET\r \r \r OUTPUT: LD (CODSAV),A\r OUT (PORT1),A\r CP 0FEH\r JR Z,O1\r CP 0FCH\r JR Z,O2\r CP 0FBH\r JR NZ,O0\r LD HL,FLAG1\r RES 3,(HL) ;RESET STATUS READY-FLAG\r JR O2\r O0: CP 0F7H\r JR NZ,O4\r LD HL,FLAG1\r RES 3,(HL) ;RESET STATUS READY-FLAG\r JR O3\r \r O1: LD A,(TCCSTA)\r AND 9FH\r CP 03H\r JR NZ,O2 ;IF RECORD --> PLAY TRANSITION THEN\r LD A,10H\r OUT (PORT4),A ;ACTIVATE FADER CONTACT\r JR O4\r \r O2: LD A,13H ;IF PLAY/RECORD/FORWIND MODE THEN\r OUT (PORT4),A ;SWITCH TO FORWARD TTC READING\r JR O4\r \r O3: LD A,1BH ;IF REWIND MODE THEN\r OUT (PORT4),A ;SWITCH TO BACKWARDS TTC READING\r \r O4: LESTAB INSPTIM\r PASSIVATE S,INSPNR\r RET\r \r \r IOREAD: LD HL,IOADDR\r ADD HL,BC\r LD D,B\r LD E,C\r LD C,(HL) ;(C) = PORTNUMBER\r IN A,(C) ;(A) = X(N)\r \r LD HL,IOVALU\r SLA E\r ADD HL,DE\r LD C,(HL) ;(C) = X(N-1)\r LD (HL),A ;X(N-1) = X(N)\r INC HL\r CP C\r JR NZ,I1 ;IF X(N) = X(N-1) THEN\r ;BEGIN\r LD A,(HL) ;\r CP C ;\r RET Z ; IF X(STAT) IS UNCHANGED THEN RETURN\r LD B,A ; ELSE\r LD (HL),C ; X(STAT) = X(N)\r LD A,E ;\r AND A ;\r RET NZ ; IF PORT3 THEN RETURN\r LD A,B ; ELSE\r CPL ;\r AND 9FH ;\r LD (OLDSTAT),A ; SAVE OLD X(STAT) VALUE\r RET ;END\r ;ELSE\r I1: ;BEGIN\r LD C,(HL) ; (C) = X(STAT)\r RET ;END\r \r IOADDR DB PORT2 ;PORT2 ADDRESS\r DB PORT3 ;PORT3 ADDRESS\r \r \r **********************************************************************\r ;* *\r ;* TIMECODE COMPARE ROUTINE *\r ;* (VERSION 791019/CGR) *\r ;* *\r ;*********************************************************************\r ;\r ; D E S C R I P T I O N\r ; ---------------------\r ;\r ; THIS ROUTINE COMPARES TWO TIMECODES WITHIN THE SAME DAY\r ; (DORA FORMAT) TC1 - TC2.\r ; ENTRY: ADDRESS OF TC1 IN IX REGISTER.\r ; ADDRESS OF TC2 IN IY REGISTER.\r ; EXIT: THE FLAG ARE SET SIMILAR TO THE Z80 CP s INSTRUCTION.\r ; DESTROY: REGISTERS A,F.\r ;\r ;\r ;\r TCCOMP: LD A,(IX+0)\r CP (IY+0) ;COMPARE HOURS\r RET NZ\r LD A,(IX+1)\r CP (IY+1) ;COMPARE MINUTES\r RET NZ\r LD A,(IX+2)\r CP (IY+2) ;COMPARE SECONDS\r RET NZ\r LD A,(IX+3)\r CP (IY+3) ;COMPARE FRAMES\r RET\r ;\r ;\r ;**************END OF TIMECODE COMPARE ROUTINE**************************\r ;#8\r ;**********************************************************************\r ;* *\r ;* TIMECODE SUBTRACTION ROUTINE *\r ;* (VERSION 791019/CGR) *\r ;**********************************************************************\r ;\r ; D E S C R I P T I O N\r ; ---------------------\r ;\r ; THIS ROUTINE SUBTRACTS TWO TIMECODES (DORA FORMAT) TC1 - TC2 = TC3.\r ; ENTRY: ADDRESS OF TC1 IN IX REGISTER\r ; ADDRESS OF TC2 IN IY REGISTER\r ; ADDRESS OF TC3 IN BC REGISTER\r ; EXIT: RESULT IN RAM MEMORY POINTED TO BY BC REGISTER.\r ; CY=0 IF MIDNIGHT HAS NOT BEEN PASSED\r ; CY=1 IF MIDNIGHT HAS BEEN PASSED.\r ; DESTROY: REGISTERS A,F.\r ;\r ;\r ;\r TCSUB: INC BC\r INC BC\r INC BC\r LD A,(IX+3)\r SUB (IY+3) ;SUBTRACT FRAMES\r DAA\r ;TEST IF THERE IS A BORROW (BASE 100)\r JP NC,LOAD1 ;IF YES THEN\r ; BEGIN\r SUB 75H ; ADJUST TO BASE 25\r DAA\r SCF ; END\r LOAD1: LD (BC),A\r DEC BC\r LD A,(IX+2)\r SBC A,(IY+2) ;SUBTRACT SECONDS\r DAA\r ;TEST IF THERE IS A BORROW (BASE 100)\r JP NC,LOAD2 ;IF YES THEN\r ; BEGIN\r SUB 40H ; ADJUST TO BASE 60\r DAA\r SCF ; END\r LOAD2: LD (BC),A\r DEC BC\r LD A,(IX+1)\r SBC A,(IY+1) ;SUBTRACT MINUTES\r DAA\r ;TEST IF THERE IS A BORROW (BASE 100)\r JP NC,LOAD3 ;IF YES THEN\r ; BEGIN\r SUB 40H ; ADJUST TO BASE 60\r DAA\r SCF ; END\r LOAD3: LD (BC),A\r DEC BC\r LD A,(IX+0)\r SBC A,(IY+0) ;SUBTRACT HOURS\r DAA\r ;TEST IF THERE IS A BORROW (BASE 100)\r JP NC,LOAD4 ;IF YES THEN\r ; BEGIN\r SUB 76H ; ADJUST TO BASE 24\r DAA\r SCF ; END\r LOAD4: LD (BC),A\r RET\r ;*************END OF TIMECODE SUBTRACTION ROUTINE*********************\r ;#9\r ;**********************************************************************\r ;* *\r ;* TIMECODE ADDITION ROUTINE *\r ;* (VERSION 791019/CGR) *\r ;* *\r ;**********************************************************************\r ;\r ;D E S C R I P T I O N\r ;---------------------\r ;\r ;THIS ROUTINE ADDS TWO TIMECODES (DORA FORMAT) TC1 + TC2 = TC3.\r ;ENTRY: ADDRESS OF TC1 IN IX REGISTER.\r ; ADDRESS OF TC2 IN IY REGISTER.\r ; ADDRESS OF TC3 IN BC REGISTER.\r ; THE ADDRESSES MAY EQUAL EACH OTHER.\r ;EXIT: RESULT IN RAM MEMORY POINTED TO BY BC REGISTER.\r ; CY=0 IF MIDNIGHT HAS NOT BEEN PASSED.\r ; CY=1 IF MIDNIGHT HAS BEEN PASSED.\r ;DESTROY: REGISTERS A,F.\r ;\r ;\r ;\r ;\r TCADD: INC BC\r INC BC\r INC BC\r LD A,(IX+3)\r ADD A,(IY+3) ;ADD FRAMES\r DAA\r CP 25H ;TEST IF THERE IS A BASE 25 CARRY.\r CCF\r JP M,L1 ;IF YES THEN\r ; BEGIN\r SUB 25H ; ADJUST TO BASE 25\r DAA\r SCF ; END\r L1: LD (BC),A\r DEC BC\r LD A,(IX+2)\r ADC A,(IY+2) ;ADD SECONDS\r DAA\r ;TEST IF THERE IS A CARRY (BASE 100)\r JP NC,M1 ;IF YES THEN\r ; BEGIN\r ADD A,40H ; ADJUST TO BASE 60 (CASE RESULT > 99H)\r DAA\r SCF ; END\r JP L2\r ;ELSE\r ; BEGIN\r M1: CP 60H ; TEST IF THERE IS A BASE 60 CARRY.\r CCF\r JP M,L2 ; IF YES THEN\r ; BEGIN\r SUB 60H ; ADJUST TO BASE 60 (CASE RESULT < 100H)\r DAA\r SCF ; END\r ; END\r L2: LD (BC),A\r DEC BC\r LD A,(IX+1)\r ADC A,(IY+1) ;ADD MINUTES\r DAA\r ;TEST IF THERE IS A CARRY (BASE 100)\r JP NC,M2 ;IF YES THEN\r ; BEGIN\r ADD A,40H ; ADJUST TO BASE 60 (CASE RESULT > 99H)\r DAA\r SCF ; END\r JP L3\r ;ELSE\r ; BEGIN\r M2: CP 60H ; TEST IF THERE IS A BASE 60 CARRY.\r CCF\r JP M,L3 ; IF YES THEN\r ; BEGIN\r SUB 60H ; ADJUST TO BASE 60 (CASE RESULT < 100H)\r DAA\r SCF ; END\r ; END\r L3: LD (BC),A\r DEC BC\r LD A,(IX+0)\r ADC A,(IY+0) ;ADD HOURS\r DAA\r CP 24H ;TEST IF THERE IS A BASE 24 CARRY\r CCF\r JP M,L4 ;IF YES THEN\r ; BEGIN\r SUB 24H ; ADJUST TO BASE 24\r DAA\r SCF ; END\r L4: LD (BC),A\r RET\r ;\r ;\r ;\r ;***********END OF TIMECODE ADDITION ROUTINE****************************\r \r \r DSEG\r \r FLAG1 DS 1\r FLAG2 DS 1\r FLAG3 DS 1\r COUNT1 DS 1\r COUNT2 DS 1\r COUNT3 DS 1\r OLDSTAT DS 1\r MESCOD DS 1\r CODSAV DS 1\r COMBYT DS 1\r COUNT DS 1\r TCCSTA DS 1\r CCBSTA DS 1\r TESTBT DS 1\r BFSAVE DS 2\r ADDRTC DS 2\r TTCREG DS 4\r TTC0 DS 4\r TTCF0 DS 4\r TTCF1 DS 4\r TTCR0 DS 4\r TTCR1 DS 4\r TTCCOD DS 4\r NTTCCO DS 4\r TTCSAV DS 4\r MTCREG DS 4\r MTC00 DS 4\r MTCCOD DS 4\r NMTCCO DS 4\r TTCF2 DS 4\r LOCREG DS 4\r UTCCOD DS 4\r NUTCCO DS 4\r TTCR2 DS 4\r TMPCOD DS 4\r PLAYREG DS 4\r STOPREG DS 4\r DIFREG DS 4\r TTCDIF DS 4\r MTCDIF DS 4\r REGUTC DS 4\r REG1 DS 4\r REG2 DS 4\r REG3 DS 4\r REG4 DS 4\r REG5 DS 4\r REG6 DS 4\r REG7 DS 4\r COUNT4 DS 1\r COUNT5 DS 1\r DACRAM DS 2\r IOVALU DS 2\r DS 2\r PQH6 DS 10H\r PQH12 DS 10H\r \r END\r