home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Misc / GXY-INF.LHA / infos / dma-byteload.s < prev    next >
Encoding:
Text File  |  1996-03-09  |  5.1 KB  |  222 lines

  1.  
  2. J
  3.  
  4.     MOVE.W    #$4000,$DFF09A
  5.     BSR.S    READTRACKS
  6.     MOVE.W    #$E02C,$DFF09A
  7.     RTS
  8.         
  9. READTRACKS
  10. LB_0000    MOVEM.L    D0-A6,-(A7)
  11.     LEA    $00DFF000,A6
  12.     LEA    $00BFD100,A4
  13.     LEA    LB_0226(PC),A2        ; Track counter
  14.     LEA    $00160000,A1        ; BUFFER
  15.     MOVE.L    #$0000,D0        ; START SECTOR
  16.     MOVE.L    #$0400,D1        ; LENGHT
  17.     MOVE.L    #$170000,A0        ; DATA AREA
  18.     MOVE.L    A0,A5            ; load addr to a5
  19.     ADDA.L    D1,A5            ; add length to load addr
  20.     MOVE.B    #$7D,(A4)        ; Activate drive
  21.     BCLR    #$03,(A4)        ; Select drive 0
  22.     BSR.B    LB_007E            ; wait
  23.     CLR.L    D4            ; clr d4
  24.     DIVU.W    #$1600,D0        ; d0 = Start
  25.     SWAP    D0
  26.     MOVE.W    D0,D4
  27.     SWAP    D0
  28.     BSR.W    LB_012C            ; finds the desired start track
  29.     MOVEQ    #$05,D5            ; number of retryes
  30.  
  31. LB_0044    BSR.B    LB_0088            ; Read track
  32.     BNE.B    LB_006C            ; Failed?
  33.     BSR.W    LB_0174            ; Decode
  34.     BNE.B    LB_006C            ; Failed?
  35.     CMPA.L    A0,A5            ; Reading done?
  36.     BLE.B    LB_0058            ; if so return!
  37.     BSR.W    LB_00FE            ; goto next track
  38.     BRA.B    LB_0044            ; read again
  39.  
  40. LB_0058    MOVE.B    #$FD,(A4)               ; return to game!
  41.     BCLR    #$03,(A4)
  42.     BSET    #$03,(A4)
  43.     BSR.B    LB_007E            ; wait for drive
  44.     MOVEM.L    (A7)+,D0-A6
  45.     RTS                ; back to game
  46.  
  47. LB_006C    SUBQ.L    #1,D5            ; Fail !
  48.     BNE.B    LB_0044            ; try again (5 times!)
  49. LB_0070    MOVE.W    D0,$0180(A6)        ; FAIL! failed 5 times!
  50.     ADDQ.L    #1,D0
  51.     BRA.B    LB_0070
  52.  
  53. ;--------------------------Wait rutines!------------------------------------
  54. LB_0078    MOVE.W    #$1600,D1
  55.     BRA.B    LB_0082
  56. LB_007E    MOVE.W    #$3000,D1
  57. LB_0082    DBF    D1,LB_0082
  58.     RTS    
  59. ;-----------------------------Read rutine!--------------------------
  60. LB_0088    CLR.L    D0
  61.     MOVE.L    A1,$0020(A6)
  62.     MOVE.W    #$8210,$0096(A6)
  63.     MOVE.W    #$7F00,$009E(A6)
  64.     MOVE.W    #$9500,$009E(A6)
  65.     MOVE.W    #$4000,$0024(A6)
  66.     MOVE.W    #$4489,$007E(A6)
  67. LB_00AC    BTST    #$05,$0F01(A4)
  68.     BNE.B    LB_00AC
  69.     MOVE.W    #$9980,D1
  70.     MOVE.W    D1,$0024(A6)
  71.     MOVE.W    D1,$0024(A6)
  72.     MOVE.L    #$00025000,D2
  73.     MOVE.W    #$0002,$009C(A6)
  74. LB_00CC    BTST    #$01,$001F(A6)
  75.     BNE.B    LB_00DA
  76.     SUBQ.L    #1,D2
  77.     BNE.B    LB_00CC
  78.     MOVEQ    #-$01,D0
  79. LB_00DA    TST.L    D0
  80.     RTS    
  81.  
  82. ;-------------------Wait for Drive rutine!-----------------------
  83. LB_00DE    BTST    #$05,$0F01(A4)        ; Drive ready to receive commands?
  84.     BNE.B    LB_00DE                 ; of not!
  85.     RTS                ; return
  86.  
  87.  
  88. ;---------------Get Track zero rutine!------------------------
  89. LB_00E8    BTST    #$04,$0F01(A4)        ; Track zero?
  90.     BEQ.B    LB_00FA            ; yes!
  91.     BSET    #$01,(A4)        ; not! saet step direction udaf
  92.     BSR.B    LB_011A            ; step!
  93.     BSR.B    LB_00DE            ; wait for drive to be ready
  94.     BRA.B    LB_00E8            ; Check again!
  95. LB_00FA    CLR.B    (A2)
  96.     RTS    
  97.  
  98.  
  99. ;------------------------Jump to next track rutine-------------
  100. LB_00FE    ADDQ.B    #1,(A2)            ; Add 1 to track count!
  101.     MOVE.B    (A2),D1            ;
  102.     BTST    #$00,D1            ;Change side?
  103.     BNE.B    LB_0110            ;if not equal change!
  104.     BCLR    #$01,(A4)        ;step direction out
  105.     BSR.B    LB_011A            ; do step
  106.     BSR.B    LB_00DE            ; wait for drive
  107. LB_0110    BCHG    #$02,(A4)        ; Change side
  108.     BSR.W    LB_007E            ; big wait
  109.     RTS    
  110.  
  111. ;--------------------- Main step routine! --------------------
  112. LB_011A    BCLR    #$00,(A4)        ; Step in desired direction
  113.     NOP                ; ---
  114.     NOP                ; ---
  115.     BSET    #$00,(A4)        ; ---
  116.     BSR.W    LB_0078            ; Wait!
  117.     BRA.B    LB_00DE            ; Wait for drive ready and return
  118.  
  119. ;----------------Find step direction & step until desired track---------------
  120. LB_012C    MOVEM.L    D1/D2,-(A7)
  121.     CMPI.B    #$FF,(A2)        ; on track zero?
  122.     BNE.B    LB_0138            ; if yes! go-on
  123.     BSR.B    LB_00E8            ; get Track zero
  124. LB_0138    CLR.L    D1
  125.     CLR.L    D2
  126.     MOVE.B    (A2),D1            ; move zero indicator to d1
  127.     MOVE.B    D0,D2            ; Select side
  128.     BSET    #$02,(A4)               ; set side 0 (undersiden)
  129.     BTST    #$00,D0            ; wich side?
  130.     BEQ.B    LB_014E            ; if equal side 0
  131.     BCLR    #$02,(A4)        ; set side 1 (oversiden)
  132. LB_014E    LSR.W    #1,D2
  133.     LSR.W    #1,D1
  134.     SUB.W    D1,D2
  135.     BCS.B    LB_0160            ; if lower then step in!
  136.     BHI.B    LB_015A                 ; if higher then step out
  137.     BRA.B    LB_016C                 ; Same!
  138.  
  139. LB_015A    BCLR    #$01,(A4)        ; set step direction out!
  140.     BRA.B    LB_0166
  141.  
  142. LB_0160    NEG.W    D2            ; set step direction in!
  143.     BSET    #$01,(A4)
  144.  
  145. LB_0166    BSR.B    LB_011A            ; step
  146.     SUBQ.W    #1,D2                   
  147.     BNE.B    LB_0166                 ; if not on track then step again
  148. LB_016C    MOVE.B    D0,(A2)            ; save track count
  149.     MOVEM.L    (A7)+,D1/D2
  150.     RTS    
  151.  
  152. ;-----------------------The decode rutine!-------------------------------
  153. LB_0174    MOVEM.L    A1-A6,-(A7)
  154.     MOVE.L    A0,A2
  155.     MOVE.L    A0,A3
  156.     ADDA.L    D4,A3
  157.     MOVE.L    A0,A4
  158.     CMPI.W    #$4489,(A1)
  159.     BNE.B    LB_01D8
  160.     MOVEQ    #$0A,D5
  161. LB_0188    BSR.W    LB_01DE
  162.     MOVEQ    #$7F,D6
  163. LB_018E    MOVE.L    $0200(A1),D1
  164.     MOVE.L    (A1)+,D0
  165.     EOR.L    D0,D2
  166.     EOR.L    D1,D2
  167.     BSR.W    LB_0214
  168.     CMPA.L    A3,A2
  169.     BGE.B    LB_01A4
  170.     ADDQ.L    #4,A2
  171.     BRA.B    LB_01B0
  172. LB_01A4    MOVE.L    A2,A6
  173.     ADDQ.L    #4,A2
  174.     SUBA.L    D4,A6
  175.     CMPA.L    A5,A6
  176.     BGE.B    LB_01B0
  177.     MOVE.L    D0,(A6)+
  178. LB_01B0    DBF    D6,LB_018E
  179.     ANDI.L    #$55555555,D2
  180.     CMP.L    D2,D7
  181.     BNE.B    LB_01D8
  182.     DBF    D5,LB_0188
  183.     MOVE.L    #$00001600,D0
  184.     SUB.L    D4,D0
  185.     ADDA.L    D0,A0
  186.     CLR.L    D0
  187.     CLR.L    D4
  188. LB_01D0    MOVEM.L    (A7)+,A1-A6
  189.     TST.L    D0
  190.     RTS    
  191. LB_01D8    MOVE.L    A4,A0
  192.     MOVEQ    #-$01,D0
  193.     BRA.B    LB_01D0
  194. LB_01DE    MOVE.W    #$4489,D1
  195. LB_01E2    CMP.W    (A1)+,D1
  196.     BNE.B    LB_01E2
  197.     CMP.W    (A1),D1
  198.     BNE.B    LB_01EC
  199.     ADDQ.L    #2,A1
  200. LB_01EC    MOVE.L    $0030(A1),D0
  201.     MOVE.L    $0034(A1),D1
  202.     BSR.W    LB_0214
  203.     MOVE.L    D0,D7
  204.     MOVE.L    (A1),D0
  205.     MOVE.L    $0004(A1),D1
  206.     BSR.B    LB_0214
  207.     LSR.W    #8,D0
  208.     LEA    $0038(A1),A1
  209.     ADD.W    D0,D0
  210.     ASL.W    #8,D0
  211.     LEA    $00(A4,D0.W),A2
  212.     CLR.L    D2
  213.     RTS    
  214.  
  215. LB_0214    ASL.L    #1,D0
  216.     ANDI.L    #$AAAAAAAA,D0
  217.     ANDI.L    #$55555555,D1
  218.     OR.L    D1,D0
  219.     RTS    
  220.  
  221. LB_0226    DC.B    -1                ; Track zero indicator $FF=NOP
  222.