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: 13647 (0x354f) Types: TextFile Names: »SYNCRO.SRC«
└─⟦8347abc8e⟧ Bits:30005501 8" CR80 Floppy CR80FD_0033 ( ATR Source and Abs-files ) └─⟦8347abc8e⟧ Intel_ISIS_II └─ ⟦this⟧ »SYNCRO.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: SYNCRONIZATION PROCESS *\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 SYNCPR,SYNCRO,STAC08\r EXTRN MESCOD,MTCCOD,MTC00,DELAY,ESTABR,TCCOMP,SCOMMON\r EXTRN OUTPUT,TCCSTA,ADDRTC,DIFREG,TMPCOD,TCSUB,TTCCOD,TTCDIF\r EXTRN FLAG2,CONS00,CONS01,FLAG1,MTCREG,MTCDIF,CONS17,COMBYT\r EXTRN CONS16,CNS140,CNS141,CNS142,CNS143,CNS144,CNS145,SYSRAM\r EXTRN ST0,ST1,ST2,ST3,ST4,ST5,FW0,FW1,FW2,FW3,FW4,FW5\r EXTRN DACRAM,FLAG3,UTCCOD\r \r CSEG\r SYNCPR: LD SP,STAC08 ;INITIALIZE STACKPOINTER\r \r LD DE,5800H\r LD (SAVMTC),DE\r \r LD A,00H ;\r OUT (DAC),A ;INITIALIZE DA-CONVERTER\r OUT (DAC+1),A ;\r PASSIVATE S,SYNCNR\r CALL SCOMMON\r EI\r \r SYNCRO: LD SP,STAC08\r LD HL,0\r LD (DACRAM),HL\r LD HL,FLAG2\r RES 6,(HL) ;RESET SYNC-ON FLAG\r LD A,(MESCOD)\r CP 3FH\r JR Z,S3 ;IF MTC-SYNC COMMAND THEN\r ;BEGIN\r ; WHILE MTC =< MTC00 DO\r S1: LD IX,MTCCOD ; BEGIN\r LD IY,MTC00 ;\r CALL TCCOMP ;\r JP P,S3 ;\r CALL SCOMMON ;\r EI ;\r JR S1 ; END\r ;END\r S3: CALL PAUSE ;SET THE ATR IN PLAY MODE\r \r LD HL,FLAG2\r RES 0,(HL) ;RESET MTC-FLAG\r S30: CALL SCOMMON\r EI\r LD HL,FLAG2\r BIT 0,(HL)\r JR Z,S30 ;IF MTC FLAG ISE SET THEN CARRY ON\r RES 0,(HL) ;WITH SYNCRONIZATION TEST\r \r LD IX,(ADDRTC)\r LD IY,DIFREG\r LD BC,TMPCOD\r CALL TCSUB\r CALL MTEST\r LD HL,FLAG3\r SET 3,(HL) ;SET INIT-FLAG\r LD HL,FLAG2\r BIT 7,(HL)\r LD HL,FLAG3\r JR Z,S31\r SET 2,(HL) ;\r JR S4 ;SET INIT M-FLAG\r S31: RES 2,(HL) ;\r \r S4: LD HL,FLAG1\r SET 1,(HL) ;SET READ FLAG\r LD IX,(ADDRTC)\r LD IY,DIFREG\r LD BC,TMPCOD\r CALL TCSUB ;EXPECTED TTC' = MTC - (DIFREG)\r \r CALL MTEST ;CALCULATE ABSOLUTE VALUE OF DT = |TTC - TTC'|\r ;AND UPDATE M-BIT\r CALL SYNCTST ;UPDATE SYNC-FLAG\r \r LD HL,FLAG3\r BIT 3,(HL)\r JR Z,S8 ;IF INIT SYNCRONIZATION THEN\r LD HL,FLAG2 ;BEGIN\r BIT 7,(HL) ;\r LD HL,FLAG3 ;\r JR Z,S41 ;\r BIT 2,(HL) ;\r JR NZ,S5 ;\r JR S6 ;\r S41: BIT 2,(HL) ;\r JR NZ,S6 ; IF M-FLAG = INIT M-FLAG THEN\r S5: LD HL,FLAG1 ; BEGIN\r RES 2,(HL) ; RESET SYNC-FLAG\r JR S8 ; END ELSE\r S6: LD HL,FLAG3 ; BEGIN\r RES 3,(HL) ; RESET INIT-FLAG\r LD HL,FLAG2 ;\r BIT 7,(HL) ;\r JR NZ,S61 ; IF TTC >= TTC' THEN\r LD HL,0F9E0H ; DO NORMAL SPEED - 0.2 %\r LD (DACRAM),HL ;\r JR S8 ; ELSE\r S61: LD HL,0600H ; DO NORMAL SPEED + 0.2 %\r LD (DACRAM),HL ;\r ; END\r ;END\r S8: CALL REGUL ;MAKE PROPER REGULATION OF THE ATR\r \r CALL DISPLAY ;DISPLAY ATR STATUS\r \r S9: LD HL,FLAG2\r BIT 6,(HL) ;IF NORMAL SPEED-SYNCRONIZATION HAS NOT\r JR NZ,PROEND ;BEGUN YET THEN\r LD A,(MESCOD) ;BEGIN\r CP 3FH ;\r JR Z,S13 ; IF MTC-SYNC COMMAND THEN\r ; BEGIN\r LD IX,MTCCOD ;\r LD IY,MTCREG ;\r LD BC,MTCDIF ;\r CALL TCSUB ; DM = MTC - SPEC.MTC\r LD IX,CONS17 ;\r LD IY,MTCDIF ;\r CALL TCCOMP ;\r JP M,S12 ; IF MTC NOW HAS PASSED THE SPEC.MTC THEN\r LD HL,FLAG2 ; BEGIN\r SET 6,(HL) ; SET SYNC-ON FLAG\r LD A,(MESCOD) ;\r CP 25H ;\r JR NZ,S10 ; IF MTC SYNC-PLAY COMMAND THEN\r LD A,0FEH ; SET ATR IN PLAY MODE\r JR S11 ; IF MTC SYNC-RECORD COMMAND THEN\r S10: LD A,0FCH ; SET ATR IN RECORD MODE\r S11: LD (COMBYT),A ;\r CALL OUTPUT ;\r JR PROEND ; END ELSE\r S12: LD IX,MTCDIF ;\r LD IY,CONS16 ;\r CALL TCCOMP ; IF TIME FOR COARSE REGULATION THEN\r CALL M,COARSE ; DO COARSE REGULATION IF NECESSARY\r JR PROEND ; END ELSE\r S13: LD HL,FLAG1 ; BEGIN\r BIT 2,(HL) ;\r JR Z,S14 ; IF THE ATR HAS SYNCRONIZED THEN\r LD A,0FEH ; BEGIN\r LD (COMBYT),A ;\r CALL OUTPUT ; SET ATR IN PLAY MODE\r LD HL,FLAG2 ;\r SET 6,(HL) ; SET SYNC-ON FLAG\r JR PROEND ; END ELSE\r S14: CALL COARSE ; DO COARSE REGULATION IF NECESSARY\r ; END\r ;END\r \r \r PROEND: CALL SCOMMON\r EI\r LD HL,FLAG2\r BIT 0,(HL)\r JR Z,PROEND ;IF MTC FLAG IS SET THEN CARRY ON\r RES 0,(HL) ;WITH SYNCRONIZATION TEST\r JP S4\r \r ;-----------------------------------------------------------------------\r MTEST: LD IX,TTCCOD\r LD IY,TMPCOD\r LD BC,TTCDIF\r CALL TCCOMP\r LD HL,FLAG2\r JP M,MT1 ;IF TTC >= TTC' THEN\r RES 7,(HL) ;RESET M-BIT\r CALL TCSUB ;AND DO DT = TTC - TTC'\r RET ;ELSE\r MT1: SET 7,(HL) ;SET M-BIT\r LD IX,TMPCOD ;AND\r LD IY,TTCCOD ;\r CALL TCSUB ;DO DT = TTC' - TTC\r RET\r \r ;-------------------------------\r SYNCTST LD HL,FLAG2\r BIT 7,(HL)\r JP NZ,SYN2 ;IF TTC >= TTC' THEN\r LD IX,TTCDIF ;BEGIN\r LD IY,CONS01 ;\r CALL TCCOMP ;\r JP P,SYN1 ; IF ATR IS SYNCRONOUS THEN\r LD HL,FLAG1 ;\r SET 2,(HL) ; SET SYNC-FLAG\r LD HL,FLAG3 ;\r RES 0,(HL) ; CLEAR ASYNC-COUNTER\r RES 1,(HL) ;\r RET ; ELSE\r SYN1: LD HL,FLAG3 ;\r BIT 1,(HL) ;\r JP Z,SYN11 ; IF ASYNC-COUNTER = 2\r LD HL,FLAG1 ; THEN\r RES 2,(HL) ; RESET SYNC-FLAG\r RET ; ELSE\r SYN11: INC (HL) ; INCREMENT ASYNC-COUNTER\r RET ;END\r SYN2: ;BEGIN\r LD IX,CONS01 ;\r LD IY,TTCDIF ;\r CALL TCCOMP ;\r JP M,SYN3 ; IF ATR IS SYNCRONOUS THEN\r LD HL,FLAG1 ;\r SET 2,(HL) ; SET SYNC-FLAG\r LD HL,FLAG3 ;\r RES 0,(HL) ; CLEAR ASYNC-COUNTER\r RES 1,(HL) ;\r RET ; ELSE\r SYN3: LD HL,FLAG3 ;\r BIT 1,(HL) ;\r JP Z,SYN33 ; IF ASYNC-COUNTER = 2\r LD HL,FLAG1 ; THEN\r RES 2,(HL) ; RESET SYNC-FLAG\r RET ; ELSE\r SYN33: INC (HL) ; INCREMENT ASYNC-COUNTER\r RET ;END\r \r ;----------------------------------------------------------------------\r REGUL: LD HL,FLAG2\r BIT 7,(HL)\r JP NZ,REGUL2 ;IF TTC >= TTC' THEN\r LD HL,FLAG1 ;BEGIN\r BIT 2,(HL) ;\r JP Z,REGUL1 ; IF ATR IS SYNCRONOUS THEN\r LD A,(DACRAM+1) ; BEGIN\r CP 0F9H ;\r JP NZ,RE0 ;\r LD HL,0F9E0H ;\r CALL DACOUT ;\r RET ;\r RE0: BIT 7,A ;\r JP NZ,RE00 ;\r LD HL,0FFE0H ;\r LD (DACRAM),HL ;\r CALL DACOUT ;\r RET ;\r RE00: LD BC,20H ; MAKE NORMAL REGULATION TOWARDS\r LD HL,(DACRAM) ; NORMAL SPEED - 0.2 %\r AND A ;\r SBC HL,BC ;\r LD (DACRAM),HL ;\r CALL DACOUT ;\r RET ; END ELSE\r REGUL1: LD HL,0B400H ; BEGIN\r CALL DACOUT ; ADJ. SPEED TO NORM.SPEED - 4 %\r RET ; END\r ;END ELSE\r REGUL2: LD HL,FLAG1 ;BEGIN\r BIT 2,(HL) ;\r JP Z,REGUL3 ; IF ATR IS SYNCRONOUS THEN\r LD A,(DACRAM+1) ; BEGIN\r CP 06H ;\r JP NZ,RE1 ;\r LD HL,0600H ;\r CALL DACOUT ;\r RET ;\r RE1: BIT 7,A ;\r JP Z,RE11 ;\r LD HL,0000H ;\r LD (DACRAM),HL ;\r CALL DACOUT ;\r RET ;\r RE11: LD BC,20H ; MAKE REGULATION TOWARDS\r LD HL,(DACRAM) ; NORMAL SPEED + 0.2 %\r ADD HL,BC ;\r LD (DACRAM),HL ;\r CALL DACOUT ;\r RET ; END ELSE\r REGUL3: LD HL,4C00H ; BEGIN\r CALL DACOUT ; ADJ. SPEED OF ATR TO NORM.SPEED + 4 %\r RET ; END\r ;END\r ;-------------------------------------------------------------------------\r DACOUT: LD C,20H\r OUT (C),L\r INC C\r OUT (C),H\r RET\r ;-------------------------------------------------------------------------\r COARSE: LD HL,FLAG2\r LD IX,TTCDIF\r LD IY,CNS140\r CALL TCCOMP\r RET M ;RETURN IF NO COARSE REGULATION\r LD IY,CNS145\r CALL TCCOMP\r JP P,COARS5\r LD IY,CNS144\r CALL TCCOMP\r JP P,COARS4\r LD IY,CNS143\r CALL TCCOMP\r JP P,COARS3\r LD IY,CNS142\r CALL TCCOMP\r JP P,COARS2\r LD IY,CNS141\r CALL TCCOMP\r JP P,COARS1\r \r ;--------------------------------\r COARS0: BIT 7,(HL)\r JR Z,STOP0\r JP FWD0\r COARS1: BIT 7,(HL)\r JR Z,STOP1\r JP FWD1\r COARS2: BIT 7,(HL)\r JR Z,STOP2\r JP FWD2\r COARS3: BIT 7,(HL)\r JR Z,STOP3\r JP FWD3\r COARS4: BIT 7,(HL)\r JR Z,STOP4\r JP FWD4\r COARS5: BIT 7,(HL)\r JR Z,STOP5\r JP FWD5\r \r ;--------------------------------\r STOP0: LD A,0EFH\r CALL OUTPUT\r UPDATM SYNCTIM,ST0.LOW.\r JP CRSEND\r STOP1: LD A,0EFH\r CALL OUTPUT\r UPDATM SYNCTIM,ST1.LOW.\r JP CRSEND\r STOP2: LD A,0EFH\r CALL OUTPUT\r UPDATM SYNCTIM,ST2.LOW.\r JR CRSEND\r STOP3: LD A,0EFH\r CALL OUTPUT\r UPDATM SYNCTIM,ST3.LOW.\r JR CRSEND\r STOP4: LD A,0EFH\r CALL OUTPUT\r UPDATM SYNCTIM,ST4.LOW.\r JR CRSEND\r STOP5: LD A,0EFH\r CALL OUTPUT\r UPDATM SYNCTIM,ST5.LOW.\r JR CRSEND\r \r FWD0: LD A,0FBH\r CALL OUTPUT\r UPDATM SYNCTIM,FW0.LOW.\r JR CRSEND\r FWD1: LD A,0FBH\r CALL OUTPUT\r UPDATM SYNCTIM,FW1.LOW.\r JR CRSEND\r FWD2: LD A,0FBH\r CALL OUTPUT\r UPDATM SYNCTIM,FW2.LOW.\r JR CRSEND\r FWD3: LD A,0FBH\r CALL OUTPUT\r UPDATM SYNCTIM,FW3.LOW.\r JR CRSEND\r FWD4: LD A,0FBH\r CALL OUTPUT\r UPDATM SYNCTIM,FW4.LOW.\r JR CRSEND\r FWD5: LD A,0FBH\r CALL OUTPUT\r UPDATM SYNCTIM,FW5.LOW.\r \r ;----------------------------------\r CRSEND: LESTAB SYNCTIM\r PASSIVATE S,SYNCNR\r CALL SCOMMON\r EI\r CALL PAUSE ;SET PLAY ON\r RET\r \r \r ;-----------------------------------------------------------------------------\r PAUSE: LD A,0FEH\r CALL OUTPUT ;SET ATR IN PLAY MODE\r P1: CALL SCOMMON\r EI\r LD A,(TCCSTA)\r AND 1FH\r CP 01H\r JR NZ,P1\r LD A,0FEH\r CALL OUTPUT\r UPDATM SYNCTIM,60\r LESTAB SYNCTIM\r PASSIVATE S,SYNCNR\r CALL SCOMMON\r EI\r RET\r \r \r ;--------------------------------------------------------------------------\r DISPLAY IN A,(0D0H)\r BIT 7,A\r RET Z\r \r LD DE,(SAVMTC)\r LD HL,MTCCOD+1\r LD BC,3\r LDIR\r LD HL,TTCCOD+1\r LD BC,3\r LDIR\r LD HL,UTCCOD+1\r LD BC,3\r LDIR\r \r IN A,(32H)\r CPL\r LD (DE),A\r INC DE\r IN A,(30H)\r LD (DE),A\r INC DE\r \r LD HL,DACRAM+1\r LDI\r DEC HL\r DEC HL\r LDI\r \r LD HL,FLAG1\r LDI\r LDI\r LDI\r \r LD HL,(SAVMTC)\r LD BC,16\r ADD HL,BC\r LD (SAVMTC),HL\r LD A,74H\r CP H\r RET NZ\r LD H,58H\r LD (SAVMTC),HL\r RET\r \r \r DSEG\r SAVMTC DS 2\r DS 32\r STAC08:\r END\r