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

  1. ùúùúÿ:ÿ:ÿ:ÿ:ÿ:ÿ:ÿ:ÿ:ÿ:****************************************
  2. *** Routines for reading DOS sectors ***
  3. ***        With error checking       ***
  4. ***         and timer waiting        ***
  5. *** Coded 901222 by Conqueror  AGILE ***
  6. ****************************************
  7.  
  8. ;    SECTORLOADER... FOR STANDARD AMIGADOS
  9. ;    PLEASE DONT SPREAD THIS ONE, KYLE !!
  10.  
  11. DriveNr:    =0        ;0=df0:, 1=df1: etc
  12. DiskBuf:    =$78000        ;put disk buffer here
  13. Retries:    =5        ;# of retries if read error
  14.  
  15. Head:        =2    ;dont
  16. Count:        =4    ;change
  17.  
  18. S:    Pea    Trap(pc)
  19.     Move.L    (sp)+,$80.W
  20.     Trap    #0
  21.     Rts
  22. Trap:    Move.W    #$2700,SR
  23.     Bsr.S    LS
  24.     Rte
  25.  
  26. LS:    Movem.L    d0-d7/a0-a6,-(sp)
  27.     Lea    $bfd100,a5
  28.     Bclr    #7,(a5)
  29.     Lea    CurrentTrack(pc),a6    ;put temp data here
  30.     Bset    #DriveNr+3,(a5)
  31.     Move.L    #$55555555,d5
  32.     Bclr    #DriveNr+3,(a5)
  33.  
  34.     Lea    $40000,a0    ;load address
  35.     Move.W    #0,d0        ;start sector
  36.     Move.W    #23,d1        ;# of sectors to load
  37.  
  38. LoadMore:
  39.     Bsr.S    Load
  40.     Addq.W    #1,d0
  41.     Subq.W    #1,d1
  42.     Bne.S    LoadMore
  43.  
  44. Exit:    Bset    #7,(a5)
  45.     Bset    #DriveNr+3,(a5)
  46.     Bclr    #DriveNr+3,(a5)
  47.     Movem.L    (sp)+,d0-d7/a0-a6
  48.     Rts
  49.  
  50.  
  51. StepMore:
  52.     Bset    #1,(a5)        ;Towards Track 0
  53.     Bsr.S    Step
  54. FindTrack0:
  55.     Btst    #4,$f01(a5)
  56.     Bne.S    StepMore
  57.     Sf    (a6)
  58. FindTrack:
  59.     Tst.B    (a6)
  60.     Bmi.S    FindTrack0
  61. NextTrack:
  62.     Cmp.B    (a6),d2
  63.     Beq.S    SameTrack
  64.     Bcc.S    LowerTrack
  65. HigherTrack:
  66.     Bset    #1,(a5)
  67.     Subq.B    #1,(a6)
  68.     Bra.S    GetCloser
  69. LowerTrack:
  70.     Bclr    #1,(a5)
  71.     Addq.B    #1,(a6)
  72. GetCloser:
  73.     Bsr.S    Step
  74.     Bra.S    NextTrack
  75.  
  76. Step:    Bclr    #0,(a5)
  77.     Bset    #0,(a5)
  78. Wait:    Move.B    #$00,$500(a5)
  79.     Move.B    #$10,$600(a5)    ;change this for step delay
  80.     Move.B    #$19,$e00(a5)
  81. Delay:    Btst    #0,$e00(a5)
  82.     Bne.S    Delay
  83. SameTrack:
  84.     Btst    #5,$f01(a5)
  85.     Bne.S    SameTrack
  86.     Rts
  87.  
  88. Load:    Lea    DiskBuf,a4
  89.     Move.L    d0,d2
  90.     Ext.L    d2
  91.     Divu    #11,d2
  92.     Move.L    d2,d4
  93.     Swap    d4
  94.     Cmp.W    Head(a6),d2
  95.     Beq.S    InMem
  96.     Move.W    d2,Head(a6)
  97.     Bset    #2,(a5)
  98.     Btst    #0,d2
  99.     Beq.S    Side0
  100.     Bclr    #2,(a5)
  101. Side0:    Lsr.W    #1,d2
  102.     Bsr.S    FindTrack
  103.     Move.W    #Retries,Count(a6)    ;retries to read if error
  104.     Bra.S    Read
  105. ReadError:
  106.     Subq.W    #1,Count(a6)
  107.     Bne.S    Read
  108.     Moveq    #-1,d2
  109.     Move.L    d2,(a6)
  110.     Bra.S    Load
  111. Read:    Lea    DiskBuf,a4
  112.     Lea    $dff024,a3
  113.     Move.W    #$8210,$72(a3)
  114.     Move.L    #$00027f00,$78(a3)
  115.     Move.W    #$9500,$7a(a3)
  116.     Move.W    #$4489,$5a(a3)
  117.     Move.L    a4,-4(a3)
  118.     Move.W    #$8000+$1900,(a3)
  119.     Move.W    #$8000+$1900,(a3)
  120.     Move.L    #$a0000,d7
  121. DskBlk:    Subq.L    #1,d7
  122.     Beq.S    ReadError
  123.     Btst    #1,-5(a3)
  124.     Beq.S    DskBlk
  125.  
  126. InMem:
  127.  
  128. DeCode:    Moveq    #11-1,d6
  129. FindSync:
  130.     Cmp.W    #$4489,(a4)+
  131.     Bne.S    FindSync
  132.     Cmp.W    #$4489,(a4)
  133.     Beq.S    FindSync
  134.     Movem.L    (a4),d2/d3
  135.     Bsr.S    DecodeLWord
  136.     Lsr.W    #8,d2
  137.     Cmp.W    d4,d2
  138.     Beq.S    JustOk
  139.     Lea    [512+28]*2(a4),a4        ;loop 11 ggr
  140.     Dbf    d6,FindSync
  141.     Bra.S    ReadError
  142.  
  143. JustOk:    Swap    d2
  144.     Cmp.B    Head+1(a6),d2
  145.     Bne.S    ReadError
  146.  
  147.     Lea    $30(a4),a4
  148.     Move.L    (a4)+,d2
  149.     Move.L    (a4)+,d3
  150.     Bsr.S    DecodeLWord
  151.     Move.W    #$ff,d7        ;$400 LWords raw data
  152.     Moveq    #0,d3
  153. CalcCheck:
  154.     Move.L    (a4)+,d4
  155.     Eor.L    d4,d3
  156.     Dbf    d7,CalcCheck
  157.     And.L    d5,d3
  158.     Cmp.L    d3,d2        ;checksum error
  159.     Bne.L    ReadError
  160.  
  161.     Lea    -$400(a4),a4
  162.     Moveq    #[512/4]-1,d7
  163. DCode:    Move.L    512(a4),d3
  164.     Move.L    (a4)+,d2
  165.     And.L    d5,d2
  166.     And.L    d5,d3
  167.     Add.L    d2,d2
  168.     Or.L    d3,d2
  169.     Move.L    d2,(a0)+
  170.     Dbf    d7,DCode
  171.     Rts
  172.  
  173. DecodeLWord:
  174.     And.L    d5,d2
  175.     And.L    d5,d3
  176.     Add.L    d2,d2
  177.     Or.L    d3,d2
  178.     Rts
  179.  
  180. CurrentTrack:
  181.     Dc.W    -1
  182. CurrentHead:
  183.     Dc.W    -1
  184. ErrCount:
  185.     Dc.W    Retries
  186. E:
  187.  
  188.