|
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: 10975 (0x2adf) Types: TextFile Names: »SEARCH.SRC«
└─⟦8347abc8e⟧ Bits:30005501 8" CR80 Floppy CR80FD_0033 ( ATR Source and Abs-files ) └─⟦8347abc8e⟧ Intel_ISIS_II └─ ⟦this⟧ »SEARCH.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: SEARCH 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 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 SEARPR,SEARCH,SEAPLA,SEAFWD,SEAREW,STAC07\r EXTRN COUNT1,CODSAV,TCCSTA,TTCCOD,TTCF0,TCCOMP,COMBYT,SYNCRO\r EXTRN TTCREG,TTC0,TTCF1,TTCR1,TTCR0,MESCOD,DELAY,ESTABR,OUTPUT\r EXTRN SCOMMON,FLAG1,FLAG2,SYSRAM,TTCSAV,CONS30,TMPCOD,TCSUB\r EXTRN TTCF2,TTCR2,CNS142,TCADD\r \r CSEG\r SEARPR LD SP,STAC07 ;INITIALIZE STACKPOINTER\r PASSIVATE S,SEARNR ;PASSIVATE SEARCH PROCESS\r CALL SCOMMON ;SCHEDULE\r EI\r ;-----------------------------------------------------------------------\r SEARCH LD SP,STAC07 ;INITIALIZE STACKPOINTER\r CALL SEAINI ;COUNT1 = 3 AND RESET SEARCH READY-FLAG\r \r LD A,(MESCOD)\r CP 20H\r JR Z,REPLAY\r LD A,(TCCSTA)\r AND 1FH\r CP 10H\r JR NZ,REPLAY\r LD IX,TTCCOD\r LD IY,TTCREG\r CALL TCCOMP\r JP M,REPLAY\r LD IX,TTCREG\r LD IY,CNS142\r LD BC,TMPCOD\r CALL TCADD\r LD IX,TMPCOD\r LD IY,TTCCOD ;IF NOT A SEARCH-PLAY COMMAND AND\r CALL TCCOMP ;IF THE ATR IS ALLREADY PARKED\r JP P,ENDCOD ;CORRECTLY THEN SKIP SEARCHING\r ;-------------------------------------------------------------------------\r REPLAY: LD HL,FLAG1\r RES 1,(HL) ;RESET READ FLAG\r \r LD A,0FEH ;\r CALL OUTPUT ;\r N1: ;WHILE THE ATR HAS NOT ENTERED\r LD A,(TCCSTA) ;THE PLAY MODE YET THEN WAIT\r AND 1FH ;\r CP 01H ;\r JR Z,N2 ;\r CALL SCOMMON ;\r EI ;\r JR N1 ;\r \r N2: UPDATM SEARTIM,45\r CALL PAUSE\r JR COMPAR\r \r SEAPLA LD SP,STAC07 ;INITIALIZE STACKPOINTER\r CALL SEAINI ;COUNT1 = 3 AND RESET SEARCH READY-FLAG\r LD A,0FEH ;\r CALL OUTPUT ;SET THE ATR IN PLAY MODE\r \r COMPAR: LD IX,TTCCOD\r LD IY,TTCF0\r CALL TCCOMP ;IF TTC < TTCF0 THEN\r JP M,FORWIND ;START FORWIND EXECUTION\r LD IX,TTCREG\r LD IY,TTCCOD\r CALL TCCOMP ;IF TTC' < TTC THEN\r JP M,REWIND ;START REWIND EXECUTION\r \r ;-----------------------------------------------------------------------\r PLAY: ;PLAY EXECUTION\r LD HL,FLAG1\r SET 1,(HL) ;SET READ FLAG\r LD IX,TTCCOD\r LD IY,TTC0\r CALL TCCOMP\r JP P,P1 ;IF TTC < TTC0 THEN\r LD A,(COUNT1) ;BEGIN\r AND A ;\r JR Z,P1 ; IF COUNT1 > 0 THEN\r LD A,0FBH ; BEGIN\r CALL OUTPUT ; PERFORM A FORWIND-"SHOT"\r UPDATM SEARTIM,70 ;\r CALL PAUSE ; END\r JR REPLAY ;END ELSE\r \r P1: LD IY,TTCREG\r CALL TCCOMP\r JP P,ENDCOD ;IF TTC >= TTC' THEN MAKE ENDCODE INSERTION\r CALL SCOMMON ;ELSE WAIT\r EI\r JR COMPAR\r \r ;------------------------------------------------------------------------\r FORWIND: ;FORWIND EXECUTION\r LD A,(COUNT1) ;\r AND A ;\r JP Z,PLAY ;IF COUNT1 = 0 THEN GOTO PLAY\r JR FX1\r \r SEAFWD LD SP,STAC07 ;INITIALIZE STACKPOINTER\r CALL SEAINI ;COUNT1 = 3 AND RESET SEARCH READY-FLAG\r \r FX1: LD A,0FBH ;\r CALL OUTPUT ;PERFORM A FORWIND PULSE\r UPDATM SEARTIM,50 ;\r CALL PAUSE ;\r LD A,7FH ;\r OUT (PORT1),A ;PERFORM EDIT FUNCTION\r UPDATM SEARTIM,45 ;\r CALL PAUSE ;\r \r F1: LD HL,FLAG1\r SET 1,(HL) ;SET READ-FLAG\r \r LD IX,TTCCOD\r LD IY,TTCF2\r CALL TCCOMP\r JP P,F0 ;IF TTC < TTCF2 THEN\r \r LD A,0FBH ;BEGIN\r OUT (PORT1),A ;\r UPDATM SEARTIM,250 ;\r CALL PAUSE ; PERFORM A 2 SEC.FORWIND+EDIT OFF PULSE\r LD A,7FH ;\r OUT (PORT1),A ;\r UPDATM SEARTIM,60 ;\r CALL PAUSE ; PERFORM A 500 MSEC EDIT ON PULSE\r JR F1 ;END ELSE\r \r F0: LD IX,TTCCOD\r LD IY,TTCF1\r CALL TCCOMP\r JP P,F01 ;IF TTC < TTCF1 THEN\r CALL SCOMMON ;WAIT\r EI\r JR F1\r \r \r F01: LD IX,TTCCOD\r LD IY,TTC0\r CALL TCCOMP\r JP P,REPLAY ;IF TTC >= TTC0 THEN GOTO REPLAY\r \r LD DE,TTCSAV\r LD HL,TTCCOD\r LD BC,4\r LDIR ;SAVE TTC(N)\r UPDATM SEARTIM,5 ;\r CALL PAUSE ;WAIT 40 MSEC\r LD IX,TTCCOD\r LD IY,TTCSAV\r LD BC,TMPCOD\r CALL TCSUB ;DO DT = TTC(N) - TTC(N-1)\r LD IX,CONS30\r LD IY,TMPCOD\r CALL TCCOMP\r JP P,F3 ;IF DT > SPEED CONSTANT THEN\r LD A,77H ;MAKE A REWIND PULSE\r CALL OUTPUT\r JP F1 ;ELSE\r F3: LD A,7BH ;MAKE A FORWIND PULSE\r CALL OUTPUT\r JP F1\r \r ;---------------------------------------------------------------------------\r REWIND: ;REWIND EXECUTION\r LD A,(COUNT1) ;\r AND A ;\r JP Z,PLAY ;IF COUNT1 = 0 THEN GOTO PLAY\r JR RX1\r \r SEAREW LD SP,STAC07 ;INITIALIZE STACKPOINTER\r CALL SEAINI ;COUNT1 = 3 AND RESET SEARCH READY-FLAG\r \r RX1: LD A,0F7H ;\r CALL OUTPUT ;PERFORM A REWIND PULSE\r UPDATM SEARTIM,150 ;\r CALL PAUSE ;\r LD A,7FH ;\r OUT (PORT1),A ;PERFORM EDIT FUNCTION\r UPDATM SEARTIM,45 ;\r CALL PAUSE ;\r \r R1: LD HL,FLAG1\r SET 1,(HL) ;SET READ-FLAG\r \r LD IX,TTCR2\r LD IY,TTCCOD\r CALL TCCOMP\r JP P,R0 ;IF TTCR2 < TTC THEN\r \r LD A,0F7H ;BEGIN\r OUT (PORT1),A ;\r UPDATM SEARTIM,250 ;\r CALL PAUSE ; PERFORM A 2 SEC. REWIND+EDIT OFF PULSE\r LD A,7FH ;\r OUT (PORT1),A ;\r UPDATM SEARTIM,60 ;\r CALL PAUSE ; PERFORM A 500 MSEC EDIT ON PULSE\r JR R1 ;END ELSE\r \r R0: LD IX,TTCR1\r LD IY,TTCCOD\r CALL TCCOMP\r JP P,R01 ;IF TTC > TTCR1 THEN\r CALL SCOMMON ;WAIT\r EI\r JR R1\r \r \r R01: LD IX,TTCR0\r LD IY,TTCCOD\r CALL TCCOMP\r JP M,R21 ;IF TTCR0 >= TTC THEN\r LD HL,COUNT1 ;BEGIN\r DEC (HL) ; COUNT1 = COUNT1 - 1\r JP REPLAY ; GOTO REPLAY\r ;END\r ;ELSE\r R21: LD DE,TTCSAV\r LD HL,TTCCOD\r LD BC,4\r LDIR ;SAVE TTC(N)\r UPDATM SEARTIM,5 ;\r CALL PAUSE ;WAIT 40 MSEC\r LD IX,TTCSAV\r LD IY,TTCCOD\r LD BC,TMPCOD\r CALL TCSUB ;DO DT = TTC(N-1) - TTC(N)\r LD IX,TMPCOD\r LD IY,CONS30\r CALL TCCOMP\r JP P,R3 ;IF DT < SPEED CONSTANT THEN\r LD A,77H ;MAKE A REWIND PULSE\r CALL OUTPUT\r JP R1 ;ELSE\r R3: LD A,7BH ;MAKE A FORWIND PULSE\r CALL OUTPUT\r JP R1\r \r ;---------------------------------------------------------------------------\r SEAINI: LD A,3\r LD (COUNT1),A ;COUNT1 = 3\r LD HL,FLAG2\r RES 1,(HL) ;RESET SEARCH READY-FLAG\r RET\r \r ;--------------------------------------------------------------------------\r PAUSE: LESTAB SEARTIM\r PASSIVATE S,SEARNR\r CALL SCOMMON\r EI\r RET\r \r ;--------------------------------------------------------------------------\r ENDCOD: LD A,(MESCOD) ;GET MESSAGE CODE\r CP 20H\r JP NZ,S1 ;IF SEARCH-PLAY COMMAND THEN\r LD A,0FEH ;SET ATR IN PLAY-MODE\r JR S2 ;ELSE\r S1: LD A,0EFH ;SET ATR IN STOP-MODE\r S2: LD (COMBYT),A \r CALL OUTPUT \r LD A,(MESCOD) ;GET MESSAGE CODE\r CP 3FH\r JR Z,PASPRO ;GOTO PASPRO IF LOCK COMMAND\r CP 2AH\r JR Z,PASPRO ;GOTO PASPRO IF SEARCH-STOP COMMAND\r CP 20H\r JR Z,PASPRO ;GOTO PASPRO IF SEARCH-PLAY COMMAND\r \r ;IF MTC-SYNC COMMAND THEN\r RESTART S,SYNCNR,SYNCRO ;INITIALIZE SYNCRONIZATION PROCESS\r \r PASPRO: LD HL,FLAG2\r SET 1,(HL) ;SET SEARCH READY-FLAG\r PASSIVATE S,SEARNR ;PASSIVATE SEARCH PROCESS\r CALL SCOMMON ;SCHEDULE\r EI\r JP SEARCH\r \r DSEG\r DS 32\r STAC07:\r END\r