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

  1.  
  2.     org    $40200
  3.     load    $40200
  4. j    move.w    #$7fff,$dff09a
  5.     move.w    #$7fff,$dff09c
  6.     LEA    C92(PC),A0
  7.     MOVE.L    A0,$10
  8.     ILLEGAL
  9. C92    move.l    4.w,a6
  10.     move.b    $212(a6),d0
  11.     cmp.b    #$32,d0
  12.     seq    $dd20
  13.     bsr    c094
  14.  
  15.     LeA    $40000,SP
  16.     MOVE.W    #0,SR
  17.     LEA    $40100,SP
  18.     MOVE.W    #$7FFF,D0
  19.     MOVE.W    D0,$00DFF09A
  20.     MOVE.W    #$0C7F,$00DFF096
  21.     LEA    $00BFD000,A0
  22.     ORI.B    #$F8,$0100(A0)
  23.     ANDI.B    #$87,$0100(A0)
  24.     ORI.B    #$78,$0100(A0)
  25.     MOVE.B    #$7F,$1D01(A0)
  26.     MOVE.B    #$7F,$0D00(A0)
  27.     MOVE.W    D0,$00DFF09C
  28.     MOVE.W    #$7FFF,$00DFF09E
  29.     MOVE.W    #$9500,$00DFF09E
  30.     MOVE.W    #$4489,$00DFF07E
  31.     LEA    main+4,A1
  32.     LEA    $DD00,A0
  33.     MOVEQ    #7,D0
  34. C01C    MOVE.L    (A0)+,(A1)+
  35.     DBRA    D0,C01C
  36.     MOVE.B    (A0)+,(A1)
  37.     LEA    $00DFF142,A0
  38.     MOVEQ    #$07,D0
  39. LB_F090    CLR.W    (A0)
  40.     ADDQ.W    #8,A0
  41.     DBF    D0,LB_F090
  42.  
  43. ;    LEA    routines,A0
  44. ;    LEA    $7f000,A1
  45. ;    MOVE.W    #[routines1-routines]-1,D0
  46. ;LB_F0A6    MOVE.b    (A0)+,(A1)+
  47. ;    DBF    D0,LB_F0A6
  48.  
  49.     LEA    main,A0
  50.     LEA    $0100.W,A1
  51.     MOVE.L    A1,A2
  52.     MOVE.W    #$0FFF,D0
  53. .w    MOVE.L    (A0)+,(A1)+
  54.     DBF    D0,.w
  55.  
  56.     move.l    #$954,a2
  57.     move.l    #$854,d0
  58.     lea    $50000,a6
  59.     jmp    (A2)
  60. C094    LEA    pic+12(PC),A5
  61. C098    MOVE.L    (A5)+,D0
  62.     CMP.L    #$424F4459,D0
  63.     BEQ.S    C0EC
  64.     CMP.L    #$434D4150,D0
  65.     BEQ.S    C0B0
  66.     MOVE.L    (A5)+,D0
  67.     ADDA.L    D0,A5
  68.     BRA.S    C098
  69. C0B0    MOVE.L    (A5)+,D0
  70.     ADD.L    A5,D0
  71.     MOVE.L    D0,-(SP)
  72. C0B6    MOVE.L    $DFF004,D0
  73.     AND.L    #$1FF00,D0
  74.     CMP.L    #$A00,D0
  75.     BCC.S    C0B6
  76.     LEA    $DD00,A2
  77.     MOVEQ    #15,D2
  78. C0D2    MOVEQ    #0,D1
  79.     MOVE.B    (A5)+,D1
  80.     LSL.W    #4,D1
  81.     MOVE.B    (A5)+,D1
  82.     MOVE.B    (A5)+,D0
  83.     LSR.B    #4,D0
  84.     OR.B    D0,D1
  85. ;    moveq    #0,d1
  86.     MOVE.W    D1,(A2)+
  87.     DBRA    D2,C0D2
  88.     MOVEA.L    (SP)+,A5
  89.     BRA.S    C098
  90.  
  91. C0EC    ADDQ.W    #4,A5
  92.     MOVE.W    #$EF,D7
  93.     LEA    $E600,A0
  94.     LEA    $3EC,A1
  95.     MOVE.L    A0,(A1)+
  96.     ADDA.W    #$2940,A0
  97.     MOVE.L    A0,(A1)+
  98.     ADDA.W    #$2940,A0
  99.     MOVE.L    A0,(A1)+
  100.     ADDA.W    #$2940,A0
  101.     MOVE.L    A0,(A1)+
  102. C110    MOVEQ    #3,D5
  103.     LEA    $3EC,A2
  104. C116    MOVEA.L    (A2),A3
  105.     MOVE.W    #$2B,D6
  106. C11C    MOVEQ    #0,D0
  107.     MOVE.B    (A5)+,D0
  108.     BPL.S    C130
  109.     NEG.B    D0
  110.     SUB.W    D0,D6
  111.     MOVE.B    (A5)+,D3
  112. C128    MOVE.B    D3,(A3)+
  113.     DBRA    D0,C128
  114.     BRA.S    C138
  115. C130    SUB.W    D0,D6
  116. C132    MOVE.B    (A5)+,(A3)+
  117.     DBRA    D0,C132
  118. C138    DBRA    D6,C11C
  119.     ADDI.L    #$2C,(A2)
  120.     ADDQ.W    #4,A2
  121.     DBRA    D5,C116
  122.     DBRA    D7,C110
  123.     BSR.L    C390
  124. C150    MOVE.L    $DFF004,D0
  125.     AND.L    #$1FF00,D0
  126.     CMP.L    #$A00,D0
  127.     BCC.S    C150
  128.     MOVE.W    #$8180,$DFF096
  129.     MOVE.W    #$4200,$DFF100
  130.     RTS
  131. C390    LEA    $30000,A0
  132.     MOVE.L    #$1201FFFE,(A0)+
  133.     LEA    $E600,A1
  134.     MOVEQ    #3,D0
  135.     MOVE.W    #$E0,D1
  136. C3A8    MOVE.W    D1,(A0)+
  137.     MOVE.L    A1,D2
  138.     SWAP    D2
  139.     MOVE.W    D2,(A0)+
  140.     ADDQ.W    #2,D1
  141.     MOVE.W    D1,(A0)+
  142.     SWAP    D2
  143.     MOVE.W    D2,(A0)+
  144.     ADDA.W    #$2940,A1
  145.     ADDQ.W    #2,D1
  146.     DBRA    D0,C3A8
  147.     LEA    $DD00,A1
  148.     MOVE.W    #$180,D3
  149.     MOVEQ    #15,D0
  150. C3CE    MOVE.W    D3,(A0)+
  151.     MOVE.W    (A1)+,(A0)+
  152.     ADDQ.W    #2,D3
  153.     DBRA    D0,C3CE
  154.     MOVE.L    #$FFFFFFFE,(A0)
  155.     MOVE.L    #$30000,$DFF080
  156.     TST.B    $DD20
  157.     BNE.L    C406
  158.     MOVE.W    #$1571,$DFF08E
  159.     MOVE.W    #$5D1,$DFF090
  160.     BRA.L    C416
  161. C406    MOVE.W    #$3C71,$DFF08E
  162.     MOVE.W    #$2CD1,$DFF090
  163. C416    MOVE.W    #$30,$DFF092
  164.     MOVE.W    #$D8,$DFF094
  165.     MOVE.W    #0,$DFF108
  166.     MOVE.W    #0,$DFF10A
  167.     MOVE.W    #$200,$DFF100
  168.     MOVE.L    #0,$DFF102
  169.     MOVE.W    #0,$DFF088
  170.     RTS
  171. pic    incbin    "pic"
  172.  
  173.  
  174.  
  175.     org    $45000
  176.     load    $45000
  177. main    incbin    "dlmain1a"
  178.  
  179.  
  180. DATA    =    $2d550
  181.  
  182. WRONGDISK    =    -5
  183. WRONGTRACK    =    -6
  184. CHECKSUMERROR    =    -6
  185.  
  186. PARTS    =    22    ;22 Tracks On The Extra Disk
  187. WAIT    =    $b
  188.  
  189. * Dragons Lair III routines
  190.     org    $7f000
  191.     load    $7f000
  192.  
  193. Routines:
  194.     bra.l    Calc_Sector
  195.     bra.l    Block_Finished
  196.     bra.l    Decode_Sector
  197.     bra.l    Check_HighTrack
  198.  
  199. Calc_Sector:
  200.     moveq    #0,d1
  201.     move.w    d0,d1
  202.     lea    COLOR(pc),a0
  203.     clr.w    (a0)
  204.     lea    DIRECTORY(pc),a0
  205.     clr.l    (a0)    ;Directory, Extra, Request, Executed
  206.     clr.b    4(a0)    ;HighOn
  207.     mulu    #$640,d1
  208.     seq    (a0)
  209.     divu    #$1600,d1
  210.     move.w    d1,$2e4.w
  211.     lea    DOSOFFSET(pc),a0
  212.     swap    d1
  213.     move.w    d1,(a0)
  214.     move.l    d0,d1
  215.     moveq    #0,d0
  216.     rts
  217.  
  218. Block_Finished:
  219.     movem.l    d1-d2/d4-d7/a0-a6,-(a7)
  220.     bsr.s    Check_Dos_Data
  221.     bmi.s    Fuckit
  222.     beq.s    Fuckit
  223.     moveq    #-1,d3
  224.     tst.b    $359.w
  225.     bne.s    DiskEn
  226.     move.w    #$1600,d2
  227.     sub.w    DOSOFFSET(pc),d2
  228. Block_Loop:
  229.     addq.l    #1,d3
  230.     sub.w    #$640,d2
  231.     bgt.s    Block_Loop
  232.     bra.s    BloFin
  233.  
  234. DiskEn:    move.b    EXTRA(pc),d1
  235.     beq.s    Dosofn
  236.     subq.l    #1,d3
  237. Dosofn:    move.l    $334.w,a0
  238.     moveq    #1,d4
  239. End_Loop:
  240.     addq.l    #1,d3
  241.     cmp.b    (a0)+,d4
  242.     bne.s    End_Loop
  243. BloFin:    move.w    d3,$338.w
  244. Fuckit:    movem.l    (a7)+,d1-d2/d4-d7/a0-a6
  245.     tst.w    d0
  246.     rts
  247.  
  248. Check_Dos_Data:
  249.     lea    Data,a0
  250.     lea    -$38(a0),a4    ;Skip Dos Header
  251.     lea    [$1b00*2]-$400(a0),a2
  252.     lea    SectorTable_End(pc),a1
  253.     moveq    #-1,d1
  254.     moveq    #5,d2
  255. ClSectors:
  256.     move.l    d1,-(a1)
  257.     dbf    d2,ClSectors
  258.  
  259.     moveq    #11-1,d2
  260.     move.w    #$4489,d6
  261.     move.l    #$55555555,d4
  262.     moveq    #$f,d5
  263.     lea    $2e5.w,a6
  264.  
  265. Sync:    cmp.l    a0,a2
  266.     bcs.s    Check_Finished
  267.     cmp.w    (a0)+,d6
  268.     bne.s    Sync
  269.     cmp.w    (a0),d6
  270.     beq.s    Sync
  271.  
  272.     move.l    a0,a3
  273.     moveq    #0,d0
  274.     move.w    #$10d,d7
  275. GetDChk:move.l    (a3)+,d1
  276.     eor.l    d1,d0
  277.     dbf    d7,GetDChk
  278.     and.l    d4,d0
  279.     bne.s    Sync
  280.  
  281.     move.l    a0,d3
  282.     sub.l    a4,d3
  283.  
  284.     exg    a0,a3
  285.     bsr.L    Decode1LW
  286.     swap    d1
  287.     moveq    #WRONGTRACK,d0
  288.     cmp.b    (a6),d1
  289.     bne.s    Check_Error
  290.     rol.l    #8,d1
  291.     and.w    d5,d1
  292.     add.w    d1,d1
  293.     move.w    d3,(a1,d1.w)
  294.  
  295.     dbf    d2,Sync
  296.  
  297. Check_Finished:
  298.     moveq    #WRONGTRACK,d0
  299.     moveq    #11-1,d2
  300. Cheer:    tst.w    (a1)+
  301.     dbmi    d2,Cheer
  302.     bmi.s    Check_Error
  303.  
  304.     move.w    #2,$2fc.w
  305.  
  306.     move.b    REQUEST(pc),d1
  307.     bne.s    Reqer
  308.  
  309.     lea    DIRECTORY(pc),a2
  310.     moveq    #1,d0
  311.     tst.b    (a2)
  312.     beq.s    Check_Error
  313.     
  314. Reqer:    moveq    #WRONGDISK,d0
  315.  
  316.     moveq    #$38,d1
  317.     bsr.s    ReadDir
  318.     move.l    #"SKID",d2
  319.     cmp.l    d1,d2
  320.     bne.s    Check_Error
  321.  
  322.     moveq    #$3c,d1
  323.     bsr.s    ReadDir
  324.  
  325.     move.w    d1,$342.w
  326.     cmp.w    $330.w,d1
  327.     bne.s    Check_Error
  328.     sf    (a2)
  329.     moveq    #1,d0
  330. Check_Error:
  331.     lea    REQUEST(pc),a0
  332.     move.b    (a0),d1
  333.     clr.w    (a0)        ;Clear Request + Executed
  334.     tst.b    d1
  335.     bne.s    Req_IdCode
  336. Check_Done:
  337.     tst.w    d0
  338.     bne.s    Blop
  339.     subq.w    #1,$2e4.w
  340.     tst.w    d0
  341. Blop:    rts
  342.  
  343. Req_IDCode:
  344.     st    $2e8.w
  345.     tst.w    $2e4.w
  346.     beq.s    Req_TrOk
  347.     clr.w    $2e4.w
  348.     moveq    #WRONGTRACK,d0
  349.     bra.s    Check_Done
  350. Req_TrOk:
  351.     moveq    #1,d1        ;All Read Ok
  352.     cmp.w    d1,d0
  353.     beq.s    Req_IDOk
  354.     moveq    #WRONGDISK,d1    ;Disk is different from [$330].w
  355.     cmp.w    d1,d0
  356.     bne.s    Req_IDFinished
  357.     cmp.l    #"SKID",d2    ;SKID Id Is Not There!
  358.     beq.s    Req_IDFinished
  359. Req_IDOk:
  360.     st    1(a0)    ;Set Executed    = All Id Read Ok
  361. Req_IDFinished:
  362.     moveq    #0,d0
  363.     bra.s    Check_Done
  364.  
  365. ReadDir:
  366.     lea    SECTORTABLE(pc),a1
  367.     sub.l    a0,a0
  368.     move.w    6(a1),a0
  369.     add.l    #$2d550,a0
  370.     add.l    d1,a0
  371.     move.l    (a0),d1
  372.     and.l    d4,d1
  373.     add.l    d1,d1
  374.     move.l    $200(a0),d2
  375.     and.l    d4,d2
  376.     or.l    d2,d1
  377.     rts
  378.  
  379. Decode1LW:
  380.     move.l    (a3)+,d1
  381.     and.l    d4,d1
  382.     add.l    d1,d1
  383.     move.l    (a3)+,d0
  384.     and.l    d4,d0
  385.     or.l    d0,d1
  386.     rts
  387.  
  388. Wait_Blit:
  389.     move.w    #$0040,$dff09a
  390.     btst    #6,$dff002
  391. .e    btst    #6,$dff002
  392.     bne.s    .e
  393.     move.w    #$8040,$dff09a
  394.     rts
  395.  
  396. Copiere:
  397.     bsr.s    Copier
  398.     bra    Finitor
  399.  
  400. Copier:    sf    $2f8.w
  401.     bsr    Wait_Blit
  402.     lea    $3b610,a0
  403.     move.l    a0,$050(a5)
  404.     add.l    #$17700,a0
  405.     move.l    a0,$054(a5)
  406.     moveq    #0,d2
  407.     move.l    d2,$064(a5)
  408.     move.w    #$9f0,$040(a5)
  409.     move.w    d2,$042(a5)
  410.     move.w    #$c801,$058(a5)
  411.     rts
  412.  
  413. Decode_Sector:
  414.     movem.l    d1-d7/a1-a6,-(a7)
  415.     lea    $31a.w,a6
  416.     move.l    #$640,d5
  417.     lea    $dff000,a5
  418.     moveq    #0,d1
  419.     moveq    #0,d4
  420.     tst.b    $2f8.w
  421.     bne.s    Copiere
  422.     moveq    #-1,d7        ;Normal Decode Type
  423.  
  424.     move.l    (a6),d0
  425.     sub.l    #$3afd0,d0
  426.     beq.s    N_Type
  427.  
  428.     move.l    $334.w,a4
  429.     move.l    a4,d0
  430.     sub.l    #$3afd0-1,d0
  431.  
  432.     move.b    (a4)+,d7
  433.     move.l    a4,$334.w
  434.     tst.b    d7
  435.     bne.s    N_Type
  436.     addq.w    #2,$2be.w
  437.     addq.l    #4,a6        ;31e
  438.     add.w    d5,d5        ;640+640=c80
  439. N_Type:
  440.     lea    EXTRA(pc),a0
  441.     move.b    (a0),d1
  442.     sf    (a0)
  443.     tst.b    d1
  444.     beq.s    No_Correct
  445.     addq.w    #1,d0
  446. No_Correct:
  447.     lea    DOSOFFSET(pc),a3
  448.     clr.w    (a3)
  449.     move.l    (a6),a1        ;Destination
  450.     add.l    d5,(a6)        ;End
  451.  
  452.     mulu    #$640,d0
  453.     divu    #$1600,d0
  454.     clr.w    d0
  455.     swap    d0
  456.     move.l    d0,d3
  457.  
  458.     tst.b    d1
  459.     beq.s    Complete_Sector
  460.  
  461.     moveq    #0,d3    ;Start At Sector 0
  462.     add.l    d5,a1
  463.     move.l    d0,d4
  464.     sub.l    d0,a1
  465.     tst.b    d7
  466.     bne.s    Niebig
  467.     sub.l    d0,a1
  468. Niebig:
  469.     bra.s    Half_Sector
  470. Complete_Sector:
  471.     move.w    #$640,d4
  472.     add.w    d4,d0
  473.     sub.w    #$1600,d0
  474.     bcs.s    Half_Sector
  475.     beq.s    Half_Sector
  476.     sub.l    d5,(a6)
  477.     moveq    #0,d5
  478.     st    (a0)        ;Set EXTRA Flag
  479.     subq.l    #1,$334.w
  480.     sub.w    d0,d4
  481.     move.w    d0,(a3)
  482. Half_Sector:
  483. * D4 # Of bytes To Decode
  484.  
  485.     moveq    #-2,d0
  486.     moveq    #0,d2
  487.     move.w    d3,d2
  488.     lsr.w    #8,d3
  489.     and.w    d0,d3
  490.     and.w    #$1ff,d2
  491.  
  492.     lea    SECTORTABLE(pc),a3
  493.     
  494. Next_Sector:
  495.     move.w    #$200,d0
  496.     sub.w    d2,d0
  497.     cmp.w    d0,d4
  498.     bcc.s    LenOk
  499.     move.w    d4,d0
  500. LenOk:    sub.l    a0,a0
  501.     move.w    0(a3,d3.w),a0
  502.     add.l    #$2d550,a0
  503.     add.l    d2,a0
  504.     bsr.L    Blit_Dec
  505.     moveq    #0,d2
  506.     addq.w    #2,d3
  507.     sub.w    d0,d4
  508.     beq.s    Oooops
  509.     bcc.s    Next_Sector
  510. Oooops:    tst.w    d5
  511.     beq.s    Finitor
  512.     tst.b    d7
  513.     beq.s    Finiq
  514.     move.l    (a6),a0
  515.     move.l    a0,d2
  516.     sub.l    #$3b610+$640,d2
  517.     seq    $2f8.w
  518.     cmp.l    #$17700-$640,d2
  519.     bne.s    Finitor
  520.     sub.l    #$17700,a0
  521.     move.l    a0,(a6)
  522.     bra.s    Finitor
  523. Finiq:    move.l    (a6),a1
  524.     cmp.l    #$3afd0,a1
  525.     bne.s    NoDecPR
  526.     lea    $30d50,a1
  527. NoDecPR:move.l    a1,(a6)
  528.     clr.w    $2be.w
  529. Finitor:
  530.     bsr    Wait_Blit
  531.     tst.b    d1
  532.     beq.s    AllOk
  533.     tst.b    $2f8.w
  534.     beq.s    NoDeal
  535.     bsr    Copier
  536. NoDeal:    movem.l    (a7)+,d1-d7/a1-a6
  537.     bra.L    Decode_Sector
  538. AllOk:    moveq    #-1,d0
  539.     sub.l    a0,a0
  540.     tst.b    $2f8.w
  541.     bne.s    End_it
  542.     move.w    $308.w,d0
  543.     addq.w    #2,$308.w
  544.     move.w    $338.w,d1
  545.     add.w    d1,d1
  546.     cmp.w    d1,d0
  547.     bne    NotFun
  548.     lea    $3ad0.w,a0
  549. NotFun:    moveq    #0,d0
  550. End_It:    movem.l    (a7)+,d1-d7/a1-a6
  551.     tst.w    d0
  552.     rts
  553.  
  554. Blit_Dec:
  555. * D0 Length
  556. * A0 Source
  557. * A5 DFF000    
  558.     
  559.     bclr    #0,d0
  560.     tst.b    d7        ;Decrunch ?
  561.     beq    Decruncher
  562.     bsr.s    Use_Blitter
  563.     rts
  564.  
  565. Use_Blitter:
  566.     move.l    a1,$328.w
  567.     lea    -1(a1,d0.w),a1
  568.     lea    -1(a0,d0.w),a0
  569.     move.w    d0,d6
  570.     lsl.w    #5,d6
  571.     addq.w    #1,d6
  572.     lea    $200(a0),a2
  573.  
  574.     bsr    Wait_Blit
  575.  
  576.     move.l    #$FFFFFFFF,$044(a5)
  577.     move.l    a0,$050(a5)
  578.     move.l    a2,$04c(a5)
  579.     move.w    #$5555,$070(a5)
  580.     move.l    a1,$054(a5)
  581.     addq.l    #1,a1
  582.  
  583.     clr.l    $062(a5)
  584.     clr.w    $066(a5)
  585.     clr.w    $042(a5)
  586.     move.l    #$1dd80002,$040(a5)
  587.     
  588.     move.w    d6,$058(a5)
  589.     rts
  590.  
  591. Do_Decrunch:
  592. * D0 Length
  593. * A0 Source
  594. * A1 Destination
  595.  
  596.     move.w    d0,d6
  597.     lsl.l    #4,d6
  598.     or.w    #$0002,d6
  599.     bsr    Wait_Blit
  600.     move.l    #$F0F0F0F0,$044(a5)
  601.     move.l    a0,$050(a5)
  602.     move.l    a1,$054(a5)
  603.  
  604.     clr.w    $064(a5)
  605.     move.w    #$0004,$066(a5)
  606.  
  607.     move.w    #$09f0,$040(a5)
  608.     clr.w    $042(a5)
  609.     
  610.     move.w    d6,$058(a5)
  611.  
  612.     bsr    Wait_Blit
  613.     lea    -2(a0,d0.w),a0
  614.     lea    (a1,d0.w),a1
  615.     lea    -2(a1,d0.w),a1
  616.     move.l    #$FFFF0FFF,$044(a5)
  617.     move.l    a0,$050(a5)
  618.     move.l    a1,$054(a5)
  619.     addq.l    #2,a1
  620.  
  621.     clr.w    $064(a5)
  622.     move.w    #$0004,$066(a5)
  623.  
  624.     move.l    #$49f00002,$040(a5)
  625.     
  626.     move.w    d6,$058(a5)
  627.     bsr    Wait_Blit
  628.     move.l    #$FFFFFFFF,$044(a5)
  629.     rts
  630.  
  631. Decruncher:
  632.     move.l    a1,a4
  633.     move.l    a0,a1
  634.     bsr.L    Use_Blitter
  635.     move.l    $328.w,a0
  636.     move.l    a4,a1
  637.     bsr.L    Do_Decrunch
  638.     rts
  639.  
  640. Check_HighTrack:
  641.     lea    COLOR(pc),a1
  642.     lea    HIGHON(pc),a0
  643.     tst.b    (a0)
  644.     bne.w    In_Progress
  645.     moveq    #0,d0
  646.     move.w    $2e4.w,d0
  647.     sub.w    #$a0,d0
  648.     bcs.s    Lower160
  649. Higher160:
  650.     move.w    d0,$2e4.w
  651.     move.b    NEWDISK(pc),d1
  652.     bne.s    Track_Ok
  653.     move.w    $330.w,$302.w
  654.     move.w    #$00f,(a1)
  655.     st    (a0)
  656.     moveq    #0,d1
  657.     move.w    $330.w,d1
  658.     subq.w    #1,d1
  659.     mulu    #PARTS,d1
  660.     addq.w    #4,d1
  661.     add.w    d0,d1
  662.     lea    STARTTRACK(pc),a0
  663.     move.w    d1,(a0)
  664. .k    move.w    #$f0f,$dff180
  665.     btst    #6,$bfe001
  666.     bne.s    .k
  667.     moveq    #0,d0
  668.     bsr    Request_Disk
  669.     bra.s    Track_Ok
  670. Lower160:
  671.     tst.w    (a1)
  672.     bne.s    Track_Ok
  673.     move.w    $330.w,d1
  674.     cmp.w    $302.w,d1
  675.     beq.s    SameDisk
  676.     lea    NEWDISK(pc),a0
  677.     sf    (a0)
  678.     bra.s    Track_Ok
  679. SameDisk:
  680.     move.b    NEWDISK(pc),d1
  681.     beq.s    Track_Ok
  682.     move.w    #$0f0,(a1)
  683.     st    (a0)
  684.     move.w    $2e4.w,d1
  685.     lea    STARTTRACK(pc),a0
  686.     move.w    d1,(a0)
  687.     move.w    $33e.w,d0
  688.     bsr    Request_Disk
  689.  
  690. Track_Ok
  691.     move.b    #$ff,$bfd300
  692.     or.b    #$7,$bfd100
  693.     rts
  694.  
  695. In_Progress:
  696.     lea    EXECUTED(pc),a0
  697.     move.b    (a0),d1
  698.     sf    (a0)
  699.     tst.b    d1
  700.     bne.s    In_IDOk
  701.     bsr    Request_Again
  702.     bra.s    Track_Ok    
  703. In_IDOk:
  704.     movem.l    d2-d3,-(a7)
  705.     lea    REQUEST(pc),a0
  706.     st    (a0)
  707.     move.w    $342.w,d0
  708.     moveq    #-1,d3
  709.     moveq    #8,d1
  710.     move.w    COLOR(pc),d2
  711.     cmp.w    #$00f,d2
  712.     beq.s    D1Ok
  713.     moveq    #0,d3
  714.     move.w    $330.w,d1
  715. D1Ok:    cmp.w    d1,d0
  716.     bne.s    DiskNOk
  717.     clr.l    (a0)    ;Request, Highon & Executed
  718.     lea    NEWDISK(pc),a0
  719.     move.b    d3,(a0)
  720.     move.w    STARTTRACK(pc),$2e4.w
  721. DiskNOk:
  722.     movem.l    (a7)+,d2-d3
  723.     bra.s    Track_Ok
  724.  
  725. Request_Disk:
  726. * D0 Drive Number
  727.     lea    REQUEST(pc),a1
  728.     st    (a1)
  729.     bsr    Select_Drive
  730.     rts
  731.  
  732. Request_Again:
  733.     lea    REQUEST(pc),a1
  734.     st    (a1)
  735.     bra.s    Select_Again
  736.  
  737.  
  738. Select_Drive:
  739.     move.w    d0,$300.w
  740. Select_Again:
  741.     move.w    $300.w,d0
  742.     bsr    motoron
  743.     bne.s    select_bon
  744.     st    active
  745.  
  746.     btst    #6,$dff002
  747. .r12    btst    #6,$dff002
  748.     bne.s    .r12
  749.  
  750.     move.w    #$4000,$dff09a
  751.     move.w    $dff002,d2
  752.     and.w    #$f,d2
  753.     or.w    #$8000,d2
  754.     clr.w    dda+2
  755.     move.w    d2,dda+2
  756.     move.w    #$f,$dff096
  757.     move.l    #cop,$dff080
  758.     move.w    #%11000000,d2
  759. WaitM    move.b    $bfe001,d1
  760.     and.b    d2,d1
  761.     cmp.w    d2,d1
  762.     beq.s    WaitM
  763.     bra.w    Select_Again
  764. Select_Bon:
  765.     tst.b    active
  766.     beq.s    .r
  767. .rra    sf    active
  768.     bsr.w    return
  769.     move.w    #$c000,$dff09a
  770. .r    rts
  771.  
  772. active    dc.w    0
  773.  
  774. *********************************
  775. * Select a Drive, Drive # in D0 *
  776. *********************************
  777. MotorOn        addq.w    #3,d0
  778.         move.b    #$ff,$bfd100
  779.         nop
  780.         nop
  781.         and.b    #$87,$bfd100
  782.         nop
  783.         nop
  784.         move.b    #$ff,$bfd100
  785.         nop
  786.         nop
  787.         MOVE.B    #$7D,$bfd100
  788.         NOP
  789.         move.b    #$7D,d1
  790.         bclr    d0,d1
  791.         MOVE.B    d1,$bfd100
  792.         BTST    #5,$bfe001
  793.         Beq.S    .Wloka
  794.         moveq    #0,d0
  795.         rts
  796. .wloka        MOVEQ    #1,D0
  797.         RTS
  798.  
  799.  
  800. return    MOVE.L    #$1ee,$DFF080
  801.     TST.B    $124.w
  802.     BNE.W    C4061
  803.     MOVE.W    #$1571,$DFF08E
  804.     MOVE.W    #$5D1,$DFF090
  805.     BRA.W    C4161
  806. C4061    MOVE.W    #$3C71,$DFF08E
  807.     MOVE.W    #$2CD1,$DFF090
  808. C4161    MOVE.W    #$30,$DFF092
  809.     MOVE.W    #$D8,$DFF094
  810.     MOVE.W    #$4200,$DFF100
  811.     MOVE.W    #0,$DFF108
  812.     MOVE.W    #0,$DFF10A
  813.     MOVE.L    #0,$DFF102
  814.     MOVE.W    #0,$DFF088
  815. dda    move.w    #$0,$dff096
  816.     rts
  817. cop    dc.l    $008e9081
  818.     dc.l    $00909ac1
  819.     dc.l    $00920038
  820.     dc.l    $009400d0
  821.     dc.l    $00e00000+[[disk8>>16]&$ffff]
  822.     dc.l    $00e20000+[disk8&$ffff]
  823.     dc.l    $01001200
  824.     dc.l    $01800000
  825.     dc.l    $01820fff
  826.     dc.l    $01020000
  827.     dc.l    $01080000
  828.     dc.l    $010a0000
  829.     dc.l    -2
  830. disk8    incbin    "diskbrush.bit"
  831.  
  832. SectorTable:
  833.     blk.w    12,0
  834. SectorTable_End:
  835.     blk.w    4,0
  836.  
  837. COLOR        dc.w    0
  838. STARTTRACK    dc.w    0
  839. DOSOFFSET    dc.w    0
  840. DIRECTORY    dc.b    0
  841. EXTRA        dc.b    0
  842. REQUEST        dc.b    0
  843. EXECUTED    dc.b    0
  844. HIGHON        dc.b    0
  845.         dc.b    0
  846. NEWDISK        dc.b    0
  847.     even
  848. routines1
  849.  
  850.  
  851.