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: 19834 (0x4d7a) Types: TextFile Names: »LOCK.SRC«
└─⟦8347abc8e⟧ Bits:30005501 8" CR80 Floppy CR80FD_0033 ( ATR Source and Abs-files ) └─⟦8347abc8e⟧ Intel_ISIS_II └─ ⟦this⟧ »LOCK.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: LOCK 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 LIST S\r PUBLIC LOCKPR,LOCK,STAC09\r EXTRN SCOMMON,OUTPUT,TCCSTA,UTCCOD,FLAG2,REG1,TCCOMP,CODSAV\r EXTRN REG3,TCSUB,FLAG1,TTCCOD,REG2,REG4,LOCREG,REG5,REG6\r EXTRN CONS23,CPOINTS,TTCREG,CONS25,COMBYT,CONS22,CONS24\r EXTRN SEARCH,SYNCRO,TMPCOD,DELAY,ESTABR,CLEARY,COUNT5\r EXTRN TCADD,COUNT4,CONS00,CONS01,CONS02,SYSRAM,FORWAR\r EXTRN CONS26,CNS201,CNS202,CNS203,CNS204,REG7,CONS08,CNS199\r EXTRN SEAPLA,SEAFWD,SEAREW\r \r CSEG\r LOCKPR: LD SP,STAC09 ;INITIALIZE STACKPOINTER\r PASSIVATE S,LOCKNR\r CALL SCOMMON\r EI\r LOCK: LD SP,STAC09 ;INITIALIZE STACKPOINTER\r LD A,0FEH\r CALL OUTPUT ;SET PLAY ON\r L1: LD A,(TCCSTA) ;\r AND 1FH ;\r CP 01H ;\r JR Z,L11 ;\r CALL SCOMMON ;\r EI ;\r JR L1 ;\r \r L11: UPDATM LOCKTIM,45\r LESTAB LOCKTIM\r PASSIVATE S,LOCKNR\r CALL SCOMMON\r EI\r \r LD DE,REG1\r LD HL,UTCCOD\r LD BC,4\r LDIR ;DO (REG1) = UTC(N)\r \r LD HL,COMBYT\r LD (HL),0FFH\r CALL CLEARY\r LD HL,FLAG1\r SET 5,(HL) ;SET LOCK-FLAG\r RES 1,(HL) ;RESET READ-FLAG\r RESTART S,SYNCNR,SYNCRO ;RESTART SYNCRONIZATION PROCESS\r LD B,10H\r CALL LOFLAG ;SET "SYNCRONIZATION IN PROGRESS"-FLAG\r \r UPDATM LOCKTIM,10\r PASPRO: LESTAB LOCKTIM\r LP0: PASSIVATE S,LOCKNR\r CALL SCOMMON\r EI\r \r LP1: LD IX,UTCCOD\r LD IY,REG1\r CALL TCCOMP\r JP M,L2 ;IF UTC-VALUES ARE INCREASING THEN\r ;BEGIN\r LD BC,REG3 ;\r CALL TCSUB ; DO (REG3) = ABSOLUTE VALUE OF UTC SPEED\r LD HL,FLAG1 ;\r SET 4,(HL) ; SET UTC FORWARD DIRECTION-BIT\r JR L3 ;END ELSE\r L2: LD IX,REG1 ;BEGIN\r LD IY,UTCCOD ;\r LD BC,REG3 ;\r CALL TCSUB ; DO (REG3) = ABSOLUTE VALUE OF UTC SPEED\r LD HL,FLAG1 ;\r RES 4,(HL) ; RESET UTC FORWARD DIRECTION-BIT\r ;END\r \r L3: LD DE,REG1 ;\r LD HL,UTCCOD ;\r LD BC,4 ;\r LDIR ;DO (REG1) = UTC(N)\r \r LD HL,FLAG1\r BIT 1,(HL)\r JP Z,PROEND ;IF READ-FLAG IS NOT SET THEN SKIP ELSE\r \r LD IX,TTCCOD ;\r LD IY,REG2 ;\r CALL TCCOMP ;\r JP M,TC1 ;\r LD BC,REG4 ;\r CALL TCSUB ;DO (REG4) = ABSOLUTE VALUE OF TTC SPEED\r JR TC2 ;\r TC1: LD IX,REG2 ;\r LD IY,TTCCOD ;\r LD BC,REG4 ;\r CALL TCSUB ;\r \r TC2: LD DE,REG2 ;\r LD HL,TTCCOD ;\r LD BC,4 ;\r LDIR ;DO (REG2) = TTC(N)\r \r LD IX,REG1 ;\r LD IY,LOCREG ;\r LD BC,REG5 ;\r CALL TCSUB ;DO (REG5) = TTC'(N) = UTC(N)-(LOCREG)\r \r CALL ABSDISP ;DO (REG6) = ABSOLUTE VALUE OF TTC-UTC DISPL.MENT\r \r L7: LD A,(FLAG2)\r AND 3CH\r CP 20H\r JP Z,RTIN1 ;SEARCHING IN PROGRESS\r CP 10H\r JP Z,RTIN2 ;SYNCRONIZATION IN PROGRESS\r CP 08H\r JP Z,RTIN3 ;FAST WINDING IN PROGRESS\r \r JP RTIN4 ;LOCK MONITORING IN PROGRESS\r \r ;-------------------------------------------------------------------------\r ;SEARCHING IN PROGRESS :\r \r RTIN1: LD HL,FLAG1\r RES 1,(HL) ;RESET READ-FLAG\r RES 2,(HL) ;RESET SYNC FLAG\r CALL UTCLOW\r JP P,R11 ;IF SPEED OF UTC IS NOT LOW THEN\r ;BEGIN\r CALL QROUT ; CHECK TTC-UTC DISPLACEMENT AND\r ; TAKE PROPER ACTION\r JP PROEND ;END ELSE\r R11: ;BEGIN\r LD HL,FLAG2 ;\r BIT 1,(HL) ;\r JP Z,R12 ; IF SEARCHING IS FINISHED THEN\r CALL LOCKST ; SET ATR IN STOP MODE AND\r ; SET LOCK MON.-FLAG\r LD HL,FLAG1 ;\r SET 1,(HL) ; SET READ FLAG\r SET 2,(HL) ; SET SYNC FLAG\r JP PROEND ; ELSE\r R12: LD IX,REG5 ; BEGIN\r LD IY,CONS23 ;\r LD BC,TTCREG ;\r CALL TCADD ; DO (TTCREG) = TTC'(N) + S.P.OFFSET\r CALL CPOINTS ; CALCULATE CHECKPOINTS\r JP PROEND ; END\r ;END\r \r ;------------------------------------------------------------------------\r ;SYNCRONIZATION IN PROGRESS :\r \r RTIN2: LD HL,FLAG1\r RES 1,(HL) ;RESET READ FLAG\r CALL UTCNUL\r JR NZ,R21 ;IF UTC IS NOT MOVING THEN\r CALL SROUT ;CALL SROUT\r RESTART S,SEARNR,SEAPLA ;RESTART SEARCH PROCESS\r JP PROEND ;ELSE\r R21: LD IX,REG6\r LD IY,CONS25\r CALL TCCOMP ;IF DISPLACEMENT DT'(N) >= DT2 THEN\r CALL P,QROUT ;CHECK TTC-UTC DISPLACEMENT AND\r ;TAKE PROPER ACTION\r JP PROEND ;\r \r ;-----------------------------------------------------------------------\r ;FAST WINDING IN PROGRESS :\r \r RTIN3: LD HL,FLAG1\r RES 2,(HL) ;RESET SYNC FLAG\r CALL UTCNUL\r JR NZ,R30\r LD HL,COUNT5\r DEC (HL)\r JR NZ,R31 ;IF UTC SPEED = 0 REPEATEDLY THEN\r INC (HL) ;BEGIN\r CALL SROUT ; CALL SROUT\r IN A,(PORT1) ;\r BIT 7,A ;\r JR Z,RX1 ; IF EDIT IS NOT ON THEN\r RX0: RESTART S,SEARNR,SEARCH ; RESTART SEARCH PROCESS FROM "SEARCH"\r JP PROEND ;\r RX1: IN A,(PORT4) ;\r BIT 3,A ;\r JR NZ,RX2 ; IF ATR IN FORWIND THEN\r RESTART S,SEARNR,SEAFWD ; RESTART SEARCH PROCESS FROM "SEAFWD"\r JP PROEND ; IF ATR IN REWIND THEN\r RX2: RESTART S,SEARNR,SEAREW ; RESTART SEARCH PROCESS FROM "SEAREW"\r JP PROEND ;END\r ;ELSE\r R30: LD A,25\r LD (COUNT5),A ;COUNT5 = 25\r R31: LD HL,COUNT4\r DEC (HL)\r JP NZ,PROEND ;IF COUNT4 > 0 THEN SKIP\r INC (HL) ;ELSE\r IN A,(PORT1)\r BIT 7,A\r JR Z,R36 ;IF EDIT IS NOT ON THEN\r R32: ;BEGIN\r LD A,(TCCSTA) ;\r AND 9FH ;\r CP 04H ;\r JR Z,R35 ;\r CP 08H ;\r JR Z,R35 ;\r CP 01H ;\r JP NZ,PROEND ; IF PLAY INDICATION THEN\r LD IX,REG5 ; BEGIN\r LD IY,TTCCOD ; GET ATR DIRECTION (A-REG)\r CALL TCCOMP ;\r JP M,R34 ; IF FORWARD ATR DIRECTION THEN\r R33: LD A,0FBH ; BEGIN\r CALL OUTPUT ; SET ATR IN FORWIND MODE\r LD A,7 ;\r LD (COUNT4),A ; COUNT4 = 7\r JP PROEND ; END ELSE\r R34: LD A,0F7H ; BEGIN\r CALL OUTPUT ; SET ATR IN REWIND MODE\r LD A,12 ;\r LD (COUNT4),A ; COUNT4 = 12\r JP PROEND ; END\r ; END ELSE\r R35: LD A,7FH ; IF RESTARTING IS FINISHED THEN\r OUT (PORT1),A ; SET EDIT ON\r LD A,5 ;\r LD (COUNT4),A ; COUNT4 = 5\r JP PROEND ;END\r ;ELSE\r R36: LD IX,CONS22 ;BEGIN\r LD IY,REG4 ;\r CALL TCCOMP ; IF SPEED OF ATR IS LESS THAN MINIMUM\r JP M,R37 ; SPEED SPX THEN\r ; BEGIN\r CALL LOCKST ; SET ATR IN STOP MODE AND SET LOCK MON.FLAG\r JP PROEND ; END\r ; ELSE\r R37: ; BEGIN\r CALL FWROUT ; SET ATR IN RIGHT MODE OF OPERATION\r UPDATM LOCKTIM,5 ;\r ;\r LD HL,FLAG1 ;\r BIT 4,(HL) ;\r JP Z,PROEND ;\r IN A,(PORT4) ;\r BIT 3,A ;\r JP NZ,PROEND ;\r LD IX,CONS02 ;\r LD IY,REG3 ;\r CALL TCCOMP ;\r JP M,PROEND ;\r LD IX,CONS26 ;\r LD IY,REG4 ;\r CALL TCCOMP ;\r JP M,PROEND ;\r LD IX,CONS01 ; IF VTR IN PLAY (OR AT LOWER SPEED) ,\r LD IY,REG6 ; ATR AT LOW SPEED FORWARD AND DISPLACEMENT DT'(N)\r CALL TCCOMP ; ONE FRAME OR LESS THEN\r CALL P,QROUT ; START SYNCRONIZATION/SEARCHING\r JP PROEND ; END\r ;END\r \r ;---------------------------------------------------------------------------\r ;LOCK MONITOR ROUTINE :\r \r RTIN4: CALL UTCNUL\r JP Z,R42 ;IF UTC SPEED > 0 THEN\r ;BEGIN\r CALL UTCLOW ;\r JP P,PROEND ; IF UTC SPEED IS LOW THEN SKIP\r ; ELSE\r LD IX,REG6 ;\r LD IY,CONS24 ;\r CALL TCCOMP ;\r JP P,R41 ;\r LD IX,REG5 ;\r LD IY,TTCREG ; IF DT'(N) < DT1 ,\r CALL TCCOMP ; TTC'(N) < (TTCREG) AND\r JP P,R41 ; UTC FORWARD THEN\r LD HL,FLAG1 ;\r BIT 4,(HL) ;\r JR Z,R41 ;\r LESTAB LOCKTIM ; BEGIN\r R40: CALL SCOMMON ; WHILE THE VTR IS RUNNING BUT HAS NOT REACHED\r EI ; THE CORRESPONDING STARTING TTC OF ATR DO\r LD HL,FORWAR ; BEGIN\r LD BC,LOCKTIM ;\r ADD HL,BC ;\r BIT 7,(HL) ; IF LOCK-TIMER IS PASSIVE THEN\r JP NZ,LP1 ; GOTO LP1\r LD DE,TMPCOD ; ELSE\r LD HL,UTCCOD ;\r LD BC,4 ;\r LDIR ;\r LD IX,TMPCOD ;\r LD IY,LOCREG ;\r LD BC,REG5 ; CHECK IF THE VTR HAS REACHED\r CALL TCSUB ; THE STARTING TTC OF THE ATR\r LD IX,REG5 ;\r LD IY,CONS01 ;\r LD BC,TMPCOD ;\r CALL TCADD ;\r LD IX,TMPCOD ;\r LD IY,TTCREG ;\r CALL TCCOMP ;\r JP M,R40 ; END-WHILE\r LD A,0FEH ; ELSE\r CALL OUTPUT ; SET THE ATR IN PLAY MODE\r JP LP0 ; GOTO LP0 AND WAIT FOR TIMER ACTIVATION\r ; END\r ; ELSE\r R41: ; CHECK TTC-UTC DISPLACEMENT AND\r CALL QROUT ; TAKE PROPER ACTION\r JR PROEND ;END\r ;ELSE\r R42: ;BEGIN\r LD IX,REG5 ;\r LD IY,CONS23 ;\r LD BC,TMPCOD ;\r CALL TCADD ;\r LD IX,TMPCOD ;\r LD IY,TTCREG ;\r CALL TCCOMP ;\r JR Z,PROEND ; IF ATR IS NOT PARKED CORRECTLY THEN\r CALL SROUT ; CALL SROUT AND\r RESTART S,SEARNR,SEARCH ; RESTART SEARCH PROCESS FROM "SEARCH"\r ;END\r \r ;--------------------------------------------------------------------------\r PROEND: JP PASPRO\r \r ;----------------------------------------------------------------------------\r ;----------------------------------------------------------------------------\r ABSDISP LD IX,REG2 ;\r LD IY,REG5 ;\r CALL TCCOMP ;\r JP M,AB1 ;\r LD BC,REG6 ;\r CALL TCSUB ;DO (REG6) = ABSOLUTE VALUE OF TTC-UTC DISPL.MENT\r RET ;\r AB1: LD IX,REG5 ;\r LD IY,REG2 ;\r LD BC,REG6 ;\r CALL TCSUB ;\r RET ;\r \r \r LOFLAG: LD A,(FLAG2)\r AND 0C3H\r OR B\r LD (FLAG2),A\r RET\r \r \r LOCKST: LD A,0EFH\r LD (COMBYT),A\r CALL OUTPUT ;SET ATR IN STOP MODE\r LD B,04H\r CALL LOFLAG ;SET "LOCK MONITORING IN PROGRESS" -FLAG\r UPDATM LOCKTIM,10\r RET\r \r \r UTCNUL: LD IX,CONS00\r LD IY,REG3\r CALL TCCOMP\r RET\r \r UTCLOW: LD IX,CONS01\r LD IY,REG3\r CALL TCCOMP\r RET\r \r \r ;--------------------------------------------------------------------------\r SROUT: LD IX,REG5\r LD IY,CONS23\r LD BC,TTCREG\r CALL TCADD ;DO (TTCREG) = TTC'(N) + S.P.OFFSET\r CALL CPOINTS ;CALCULATE CHECKPOINTS\r LD HL,COMBYT\r LD (HL),0FFH\r CALL CLEARY\r LD HL,FLAG1\r RES 1,(HL) ;RESET READ FLAG\r SET 5,(HL) ;SET LOCK FLAG\r LD B,20H\r CALL LOFLAG ;SET "SEARCHING IN PROGRESS"-FLAG\r UPDATM LOCKTIM,10\r RET\r \r \r ;---------------------------------------------------------------------------\r QROUT: UPDATM LOCKTIM,10\r LD IX,REG6 ;\r LD IY,CONS25 ;\r CALL TCCOMP ;\r JP P,Q1 ;\r LD HL,FLAG1 ;\r BIT 4,(HL) ;IF DISPLACEMENT DT'(N) < DT2 AND\r JR Z,Q1 ;THE UTC-VALUES ARE INCREASING THEN\r LD HL,COMBYT ;BEGIN\r LD (HL),0FFH ;\r CALL CLEARY ;\r LD HL,FLAG1 ;\r SET 5,(HL) ; SET LOCK-FLAG\r RES 1,(HL) ; RESET READ FLAG\r RESTART S,SYNCNR,SYNCRO ; RESTART SYNCRONIZATION PROCESS\r LD B,10H ;\r CALL LOFLAG ; SET "SYNCRONIZATION IN PROGRESS"-FLAG\r RET ;END ELSE\r ;BEGIN\r Q1: CALL CLEARY ;\r LD HL,FLAG1 ;\r SET 1,(HL) ; SET READ FLAG\r SET 5,(HL) ; SET LOCK-FLAG\r LD A,(FLAG2) ;\r BIT 5,A ;\r JR Z,Q2 ; IF THE ATR WAS SEARCHING THEN\r ; BEGIN\r LD A,(TCCSTA) ;\r AND 9FH ;\r CP 01H ;\r JR Z,Q2 ; IF THE ATR WAS FAST WINDING THEN\r LD A,7FH ; PUT ON EDIT\r OUT (PORT1),A ;\r LD A,2 ;\r LD (COUNT4),A ; COUNT4 = 2\r LD A,25 ;\r LD (COUNT5),A ; COUNT5 = 25\r LD B,08H ;\r CALL LOFLAG ; SET "FAST WINDING IN PROGRESS"-FLAG\r RET ; END ELSE\r Q2: LD A,0FEH ; BEGIN\r CALL OUTPUT ; SET ATR IN PLAY MODE\r LD A,1 ;\r LD (COUNT4),A ; COUNT4 = 1\r LD A,25 ;\r LD (COUNT5),A ; COUNT5 = 25\r LD B,08H ;\r CALL LOFLAG ; SET "FAST WINDING IN PROGRESS"-FLAG\r RET ; END\r ;END\r \r \r ;-----------------------------------------------------------------------------\r \r FWROUT: IN A,(PORT4)\r BIT 3,A\r JP NZ,RWFW ;IF ATR IN FORWIND THEN\r FWFW: ;BEGIN\r LD HL,FLAG1 ;\r BIT 4,(HL) ;\r JR Z,FW4 ; IF VTR IN FORWIND TOO THEN\r CALL SPUCHK ; BEGIN\r JP P,FW2 ; IF SPEED OF VTR NOT HIGH THEN\r ; BEGIN\r CALL CORLOW ; MAKE LOW SPEED CORRECTION\r CALL DT6CHK ;\r JP P,FW1 ; IF DT'(N) < DT6 THEN\r CALL NORMFW ; USE NORMAL SPEED REGULATION\r JR FWEND ; ELSE\r FW1: CALL FULLFW ; USE FULL SPEED REGULATION\r JR FWEND ; END ELSE\r FW2: ; BEGIN\r CALL CORHIGH ; MAKE HIGH SPEED CORRECTION\r CALL DT4CHK ;\r JP P,FW3 ; IF DT'(N) < DT4 THEN\r CALL NORMFW ; USE NORMAL SPEED REGULATION\r JR FWEND ; ELSE\r FW3: CALL FULLFW ; USE FULL SPEED REGULATION\r JR FWEND ; END\r ; END ELSE\r FW4: CALL DT5CHK ; BEGIN\r JP P,FW5 ; IF DT'(N) < DT5 THEN\r CALL NULSPD ; BRAKE\r JR FWEND ; ELSE\r FW5: CALL FULLFW ; USE FULL SPEED REGULATION\r ; END\r ;\r FWEND: LD IX,REG7 ;\r LD IY,REG4 ;\r CALL TCCOMP ;\r JP P,FW6 ;\r LD A,77H ;\r CALL OUTPUT ; FORWIND/REWIND REGULATION\r RET ;\r FW6: LD A,7BH ;\r CALL OUTPUT ;\r RET ;\r ;\r NORMFW: CALL FWSTAT ;\r CP 0FBH ;\r LD IX,REG3 ;\r LD IY,CONS01 ;\r LD BC,REG7 ;\r JR NZ,FW7 ; IF ATR IS BEHIND THE VTR THEN\r ; BEGIN\r CALL TCADD ; INCREASE SPEED\r LD IX,REG7 ;\r LD IY,CONS02 ;\r CALL TCCOMP ;\r RET P ; IF WANTED SPEED OF ATR IS TOO LOW\r LD HL,CONS02 ; SET SPEED TO MINIMAL SPEED\r LD DE,REG7 ;\r LD BC,4 ;\r LDIR ;\r RET ; END ELSE\r FW7: ; BEGIN\r CALL TCSUB ; DECREASE SPEED\r RET NC ; IF WANTED SPEED OF ATR IS NEGATIVE\r LD HL,CONS00 ; SET SPEED TO ZERO\r LD DE,REG7 ;\r LD BC,4 ;\r LDIR ;\r RET ; END\r ;\r FULLFW: CALL FWSTAT ;\r CP 0FBH ;\r LD DE,REG7 ;\r LD BC,4 ;\r JR NZ,FW8 ; IF ATR IS BEHIND THE VTR THEN\r LD HL,CONS08 ; FULL SPEED\r LDIR ;\r RET ; ELSE\r FW8: LD HL,CONS00 ; NULL SPEED\r LDIR ;\r RET ;\r ;END\r ;-------------------------------\r ;ELSE\r RWFW: ;BEGIN\r LD HL,FLAG1 ;\r BIT 4,(HL) ;\r JR NZ,RW4 ; IF VTR IN REWIND TOO THEN\r CALL SPUCHK ; BEGIN\r JP P,RW2 ; IF SPEED OF VTR NOT HIGH THEN\r ; BEGIN\r CALL CORLOW ; MAKE LOW SPEED CORRECTION\r CALL DT6CHK ;\r JP P,RW1 ; IF DT'(N) < DT6 THEN\r CALL NORMRW ; USE NORMAL SPEED REGULATION\r JR RWEND ; ELSE\r RW1: CALL FULLRW ; USE FULL SPEED REGULATION\r JR RWEND ; END ELSE\r RW2: ; BEGIN\r CALL CORHIGH ; MAKE HIGH SPEED CORRECTION\r CALL DT4CHK ;\r JP P,RW3 ; IF DT'(N) < DT4 THEN\r CALL NORMRW ; USE NORMAL SPEED REGULATION\r JR RWEND ; ELSE\r RW3: CALL FULLRW ; USE FULL SPEED REGULATION\r JR RWEND ; END\r ; END ELSE\r RW4: CALL DT5CHK ; BEGIN\r JP P,RW5 ; IF DT'(N) < DT5 THEN\r CALL NULSPD ; BRAKE\r JR RWEND ; ELSE\r RW5: CALL FULLRW ; USE FULL SPEED REGULATION\r ; END\r ;\r RWEND: LD IX,REG7 ;\r LD IY,REG4 ;\r CALL TCCOMP ;\r JP M,RW6 ;\r LD A,77H ;\r CALL OUTPUT ; FORWIND/REWIND REGULATION\r RET ;\r RW6: LD A,7BH ;\r CALL OUTPUT ;\r RET ;\r ;\r NORMRW: CALL FWSTAT ;\r CP 0FBH ;\r LD IX,REG3 ;\r LD IY,CONS01 ;\r LD BC,REG7 ;\r JR Z,RW7 ; IF ATR IS BEHIND THE VTR THEN\r CALL TCADD ; INCREASE SPEED\r RET ; ELSE\r RW7: CALL TCSUB ; DECREASE SPEED\r RET NC ;\r LD HL,CONS00 ;\r LD DE,REG7 ;\r LD BC,4 ;\r LDIR ;\r RET ;\r ;\r FULLRW: CALL FWSTAT ;\r CP 0FBH ;\r LD DE,REG7 ;\r LD BC,4 ;\r JR Z,RW8 ; IF ATR IS BEHIND THE VTR THEN\r LD HL,CONS08 ; FULL SPEED\r LDIR ;\r RET ; ELSE\r RW8: LD HL,CONS00 ; NULL SPEED\r LDIR ;\r RET ;\r ;END\r ;\r ;\r NULSPD: LD HL,CONS00 ;\r LD DE,REG7 ;\r LD BC,4 ;\r LDIR ;\r RET ;\r ;\r FWSTAT: LD IX,TTCCOD ;\r LD IY,REG5 ;\r CALL TCCOMP ;\r JP M,FWST1 ; FORWIND/REWIND REGULATION\r FWST0: LD A,0F7H ;\r RET ;\r FWST1: LD A,0FBH ;\r RET ;\r ;\r SPUCHK: LD IX,REG3 ;\r LD IY,CONS26 ;\r CALL TCCOMP ;\r RET ;\r ;\r DT4CHK: LD IX,REG6 ;\r LD IY,CNS202 ;\r CALL TCCOMP ;\r RET ;\r ;\r DT5CHK: LD IX,REG6 ;\r LD IY,CNS203 ;\r CALL TCCOMP ;\r RET ;\r ;\r DT6CHK: LD IX,REG6 ;\r LD IY,CNS204 ;\r CALL TCCOMP ;\r RET ;\r CORLOW LD IX,REG5\r LD IY,CNS201\r LD BC,REG5\r CALL TCSUB ;DO (REG5) = (REG5) - LOW SPEED OFFSET\r CALL ABSDISP ;DO (REG6) = ABSOLUTE VALUE OF TTC-UTC DISPL.MENT\r RET\r \r CORHIGH LD IX,REG5\r LD IY,CNS199\r LD BC,REG5\r CALL TCSUB ;DO (REG5) = (REG5) - HIGH SPEED OFFSET\r CALL ABSDISP ;DO (REG6) = ABSOLUTE VALUE OF TTC-UTC DISPL.MENT\r RET\r \r \r DSEG\r DS 32\r STAC09:\r END\r