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

  1. ****************************************
  2. *A0    LOAD addr
  3. *A1    DISK buffer
  4. *d0    start trk
  5. *d1    nrs to read
  6. **********************
  7. *  OK      D0 = 0
  8. * ERROR    D0 = -1
  9. **********************
  10.  
  11.     ;first 3,7 $60000
  12.     ;next  10,$2c $800
  13.  
  14. org    $70000
  15. load    $70000
  16. j:    move.l    #3,d0    ;START track
  17.     move.l    #41,d1  ;HOW many
  18.     move.w    #0,d2    ;SIDE 0,1 (0 or 1 in D2)
  19.     lea    $c80000,a0
  20.     lea    $75000,a1
  21.     bsr    LOADdata
  22.     rts
  23.  
  24. LOADdata:
  25.     CLR.W    drive
  26.     ST    track
  27.     move.W    d2,side
  28.     lea    $dff000,a6
  29.     move.w    #$7fff,$9a(a6)
  30.     move.w    #$7fff,$96(a6)
  31.     MOVE.W    #$8210,$96(a6)
  32.     move.l    a1,DISKbuffer
  33.     bsr    C148
  34.     bmi.s    notok
  35.     moveq    #0,d0
  36.     bra.s    ok
  37. notok:    moveq    #-1,d0
  38. ok:    move.w    #$87f0,$96(a6)
  39.     move.w    #$e02c,$9a(a6)
  40.     rts
  41.     
  42.  
  43. driveside:    dc.w    0
  44. drive:        dc.w    0
  45. track:        dc.w    0
  46. side:        dc.w    0
  47. RETRY:        dc.w    0
  48. DISKbuffer:    dc.l    0
  49.  
  50.  
  51. C05C:    LEA    $0BFD000,A4
  52.     MOVE.L    #$55555555,D5
  53.     MOVE.W    drive,D2
  54.     MOVEQ    #0,D3
  55.     ADD.W    #3,D2
  56.     BSET    D2,D3
  57.     MOVE.W    side,D2
  58.     BEQ.S    C07E
  59.     BSET    #2,D3
  60. C07E:    MOVE.B    D3,driveside
  61.     MOVE.B    #$FF,$100(A4)
  62.     MOVE.B    #$7F,$100(A4)
  63.     OR.B    #$80,D3
  64.     NOT.B    D3
  65.     MOVE.B    D3,$100(A4)
  66.     MOVE.W    #$C000,D2
  67. C09C:    MOVE.W    D2,D4
  68.     MULU    D4,D4
  69.     MULU    D4,D4
  70.     BTST    #5,$1001(A4)
  71.     DBEQ    D2,C09C
  72.     BNE    C1EE
  73.     MOVEQ    #0,D4
  74.     RTS
  75. C0B4:    MOVE.B    #$FF,$100(A4)
  76.     MOVE.B    #$BF,$100(A4)
  77.     MOVE.B    #$DF,$100(A4)
  78.     MOVE.B    #$EF,$100(A4)
  79.     MOVE.B    #$F7,$100(A4)
  80.     MOVE.B    #$FF,$100(A4)
  81.     RTS
  82. C0DA:    BTST    #4,$1001(A4)
  83.     BEQ.S    C0EA
  84.     MOVEQ    #1,D0
  85.     BSR    C10A
  86.     BRA.S    C0DA
  87. C0EA:    CLR.W    track
  88.     RTS
  89. C0F0:    MOVE.W    D0,D6
  90.     TST.W    track
  91.     BPL.S    C0FA
  92.     BSR.S    C0DA
  93. C0FA:    SUB.W    track,D6
  94.     BEQ.S    C146
  95.     ADD.W    D6,track
  96.     MOVE.W    D6,D0
  97.     BPL.S    C114
  98.     NEG.W    D0
  99. C10A:    MOVE.B    driveside,D1
  100.     OR.B    #$80,D1
  101.     BRA.S    C11C
  102. C114:    MOVE.B    driveside,D1
  103.     OR.B    #$82,D1
  104. C11C:    MOVE.B    D1,D2
  105.     OR.B    #1,D2
  106.     NOT.B    D1
  107.     NOT.B    D2
  108.     SUBQ.W    #1,D0
  109. C128:    MOVE.B    D2,$100(A4)
  110.     NOP
  111.     NOP
  112. C134:    MOVE.B    D1,$100(A4)
  113.     MOVE.W    #$208,D3
  114. C13C:    MULU    D4,D4
  115.     DBRA    D3,C13C
  116.     DBRA    D0,C128
  117. C146:    RTS
  118. C148:    SUBQ.W    #1,D1
  119.     BMI.S    C17C
  120.     BSR    C05C
  121.     BMI.S    C17E
  122. C152:    MOVE.W    #4,RETRY
  123. C158:    MOVEM.W    D0/D1,-(SP)
  124.     MOVE.L    A0,-(SP)
  125.     BSR.S    C0F0
  126.     BSR    C19A
  127.     BMI.S    C186
  128.     MOVE.L    A0,A5
  129.     BSR    C1F2
  130.     BMI.S    C186
  131.     MOVE.L    A5,A0
  132.     ADDQ.W    #4,SP
  133.     MOVEM.W    (SP)+,D0/D1
  134.     ADDQ.W    #1,D0
  135.     DBRA    D1,C152
  136. C17C:    MOVEQ    #0,D4
  137. C17E:    BSR    C0B4
  138.     TST.W    D4
  139.     RTS
  140. C186:    MOVE.L    (SP)+,A0
  141.     MOVEM.W    (SP)+,D0/D1
  142.     SUBQ.W    #1,RETRY
  143.     BMI.S    C17E
  144.     BNE.S    C158
  145.     ST     track
  146.     BRA.S    C158
  147.  
  148. C19A:    MOVE.W    #$4000,$024(A6)
  149.     MOVE.L    DISKbuffer(PC),$020(A6)
  150.     MOVE.l    #$27f00,$09C(A6)
  151.     MOVE.W    #$9500,$09E(A6)
  152.     MOVE.W    #$4489,$07E(A6)
  153.     MOVE.W    #$9960,$024(A6)
  154.     MOVE.W    #$9960,$024(A6)
  155.     MOVEQ    #-1,D0
  156. C1CE:    MULU    D4,D4
  157.     MOVE.W    $01E(A6),D4
  158.     AND.W    #2,D4
  159.     DBNE    D0,C1CE
  160.     BEQ.S    C1E8
  161.     MOVE.W    #$4000,$024(A6)
  162.     MOVEQ    #0,D4
  163.     RTS
  164. C1E8:    MOVE.W    #$4000,$024(A6)
  165. C1EE:    MOVEQ    #-1,D4
  166.     RTS
  167. C1F2:
  168. ***************
  169. * MFM converter
  170. ***************
  171.         move.l    DISKbuffer(PC),a2
  172.         moveq    #10,d0
  173. decode_loop1:    cmp.w    #$4489,(a2)+
  174.         bne.s    decode_loop1
  175.         cmp.w    #$4489,(a2)+
  176.         beq.s    cont
  177.         subq.w    #2,a2
  178. cont:        move.w    #$ff,d1
  179.         bsr    Checksum
  180.         bne.s    Error
  181.         bsr    chkSEC
  182.         bne.s    Error
  183.         lea    $38(a2),a2
  184.         moveq    #$7f,d1
  185. decode_loop2:    move.l    512(a2),d7
  186.         move.l    (a2)+,d2
  187.         bsr    convbit
  188.         move.l    d2,(a0)+
  189.         dbf    d1,decode_loop2
  190. noconv:        lea    $1f8(a2),a2
  191.         dbf    d0,decode_loop1
  192.         add.w    #$1600,a5
  193.         moveq    #0,d4
  194. uji:        tst.l    d4
  195.         rts
  196. error:        moveq    #-1,d4
  197.         bra.s    uji
  198. checksum:    lea    $30(a2),a0
  199.         movem.l    (A0)+,d2/d7
  200.         bsr    convbit
  201.         moveq    #0,d6
  202. checksum_loop:    move.l    (a0)+,d7
  203.         eor.l    d7,d6
  204.         dbf    d1,checksum_loop
  205.         and.l    d5,d6
  206.         cmp.l    d2,d6
  207.         rts
  208. chkSec:        movem.l    (a2),d2/d7
  209.         bsr    convbit
  210.         and.w    #$ff00,d2
  211.         add.w    d2,d2
  212.         move.l    a5,a0
  213.         add.w    d2,a0
  214.         swap    d2
  215.         MOVE.W    track(PC),D1
  216.         ADD.W    D1,D1
  217.         MOVE.W    side(PC),D7
  218.         and.w    #1,d7
  219.         ADD.W    d7,D1
  220.         cmp.b    d2,d1
  221.         rts
  222. convbit:    and.l    d5,d2
  223.         and.l    d5,d7
  224.         asl.l    #1,d2
  225.         or.l    d7,d2
  226.         rts
  227. j1:
  228.