home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / diskutil / ff32src / flop.s < prev    next >
Text File  |  1993-08-05  |  5KB  |  166 lines

  1. ;   This is FastFlop, which speeds up your Atari ST's floppy disks
  2. ;   Copyright (C) 1989  by Robert Fischer
  3. ;
  4. ;    This program costs no money; you can redistribute it and/or modify it
  5. ;    under the terms of the Lynxware General License as published by Robert
  6. ;    Fischer; either version 1, or (at your option) any later version. 
  7. ;
  8. ;   This program is distributed in the hope that it will be useful,
  9. ;   but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. ;   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. ;   Lynxware General License for more details.
  12. ;
  13. ;   You should have received a copy of the Lynxware General License
  14. ;   along with this program; if not, write to the author.
  15. ;
  16. ;   To contact the author, call or write:
  17. ;       Robert Fischer
  18. ;       80 Killdeer Road
  19. ;       Hamden, CT    06517
  20. ;       (203) 288-9599
  21. ;        E-mail: fischer-robert@cs.yale.edu
  22.  
  23. .extern _oxbios_p
  24. .extern _flopwr_vec        ; address of flopwr routine
  25. .extern _floprd_vec
  26.  
  27. * These are AL support routines for FastFlop
  28. * Assemble with MADMAC
  29. *----------------------------------------------------------
  30. * Fastcpy -- copy unaligned 512 byte blocks
  31. *----------------------------------------------------------
  32. _fastcpy::
  33.         move.l      4(sp), a0
  34.         move.l      8(sp), a1
  35.         move.w      #63, d0
  36.  
  37. fast1:  move.b      (a0)+, (a1)+
  38.         move.b      (a0)+, (a1)+
  39.         move.b      (a0)+, (a1)+
  40.         move.b      (a0)+, (a1)+
  41.         move.b      (a0)+, (a1)+
  42.         move.b      (a0)+, (a1)+
  43.         move.b      (a0)+, (a1)+
  44.         move.b      (a0)+, (a1)+
  45.         dbra        d0, fast1
  46.         rts
  47.  
  48. ; ************ A patch to go2track
  49.  
  50. *------ Floppy state variables in DSB:
  51. recal       =   $ff00
  52. dcurtrack   =   0
  53. dseekrt     =   dcurtrack+2
  54. dsbsiz      =   dseekrt+2
  55.  
  56.  
  57. *---------- Addresses which must be relocated
  58. flopcmds    = $17340001
  59. ctrack      = $1702
  60. ;dcurtrack  = $1703
  61.  
  62. *---------- Patch to change the way that go2track works
  63. _go2tr_patch::
  64.         move.w  ctrack(a5), d7
  65.         cmp     dcurtrack(a1), d7 ; already on correct track?
  66.         bne     go2ver        ; (no) verify
  67.         move.w  #$10, d6      ; (yes) use "seek w/o verify"
  68. go2ver:
  69.         jsr     flopcmds
  70.         bne     go2trr
  71.         move.w  ctrack(a5), dcurtrack(a1)
  72.         and.b   #$18, d7
  73. go2trr:     rts
  74.  
  75. *---------- The other patch, to call critic() correctly from change()
  76. _change_patch::
  77.         move.w  d0,-(sp)
  78.         move.w  #-17,-(sp)
  79.         bsr.s   _critic
  80. _cpatch_jmp::
  81.         jmp     $DDDDDDDD   ; <-- To be relocated, jump back to RAM code
  82.  
  83. *----------------------------------------------------------
  84. * Critical Error Handler
  85. *----------------------------------------------------------
  86. etv_critic  =   $404
  87. _critic::   move.l  etv_critic,-(sp)
  88. _critich:   moveq   #-1, d0
  89.             rts
  90.  
  91. ; ----------------------------------------------------------
  92. ; Stuff to replace the Xbios Floprd and Flopwr handler
  93. ; Replace the X-Bios trap handler
  94. ; ----------------------------------------------------------
  95. ; THIS DOESN'T WORK AND IS NOT NEEDED!  THAT'S WHY IT'S COMMENTED OUT!!!
  96.  
  97. _nxbios::
  98. ;    move.l    saveptr, a1            ; Allocate save-area storage
  99. ;    sub.l    #10, a1
  100. ;    move.l    a1, saveptr
  101. ;
  102. ;    move.w    (sp)+, d0
  103. ;    move.w    d0, 8(a1)            ; Save SR
  104. ;    move.l    (sp)+, 4(a1)        ; Save Return Address
  105. ;    move.l    a7, (a1)            ; Save stack ptr
  106. ;
  107. ;                            ; SR in d0
  108. ;    btst    #13, d0            ; Test SR, to switch to correct stack
  109. ;    bne.s    .b_supr
  110. ;    move.l    usp, a7            ; Put on user stack instead
  111. ;.b_supr:
  112. ;
  113. ;    tst.w    10(sp)            ; Test device number
  114. ;    beq.s    .good_dev        ; Pass on if wrong drive
  115. ;    cmp.w    #1, 10(sp)
  116. ;    bne.s    .pass_on
  117. ;.good_dev:
  118. ;
  119. ;    cmp.w    #9, (sp)            ; Check for flopwr
  120. ;    beq.s    .l3
  121. ;    cmp.w    #8, (sp)            ; Check for floprd
  122. ;    beq.s    .l3
  123. ;
  124. ;.pass_on:
  125. ;    move.l    (a1), a7                ; Restore old stack ptr
  126. ;    move.l    4(a1), -(sp)            ; Restore Ret. addr and SR
  127. ;    move.w    8(a1), -(sp)
  128. ;    add.l    #10, a1
  129. ;    move.l    a1, saveptr
  130. ;
  131. ;    move.l    _oxbios_p, -(sp)        ; do old Xbios.
  132. ;    rts
  133. ;
  134. ;.l3:
  135. ;    sub.l    #36, a1                ; 40 bytes used minus stuff used for a7
  136. ;    move.l    a1, saveptr
  137. ;
  138. ;    movem.l    d3-d7/a3-a7, (a1)    ; Save C registers
  139. ;
  140. ;    move.w    (sp)+, d0            ; Pop Function number
  141. ;    cmp.w    #8, d0                ; Check for floprd
  142. ;    beq.s    .lfloprd
  143. ;
  144. ;.lflopwr:
  145. ;    move.l    _flopwr_vec, a1
  146. ;    bra.s    .do_it
  147. ;.lfloprd:
  148. ;    move.l    _floprd_vec, a1
  149. ;
  150. ;.do_it:
  151. ;    jsr        (a1)
  152. ;
  153. ;    move.l    saveptr, a1                ; Restore back to system stack, exit
  154. ;    movem.l    (a1)+, d3-d7/a3-a7
  155. ;    move.l    (a1)+, -(sp)
  156. ;    move.w    (a1)+, -(sp)
  157. ;    move.l    a1, saveptr                ; Restore save pointer
  158. ;    rte
  159. ;
  160. ;    .bss
  161. ;save_satrt:    ds.b    460                ; Every call uses 46 bytes
  162. ;save_end:
  163. ;
  164. ;    .data
  165. ;saveptr: dc.l save_end
  166.