home *** CD-ROM | disk | FTP | other *** search
/ Dave Lowe: Amiga Krusty Music PC Disk / Lowe_AmigaKrustyMusic_PCDisk.img / test.s < prev    next >
Encoding:
Text File  |  1993-01-01  |  10.1 KB  |  692 lines

  1.     opt    p+    make sure it's position independent code
  2.  
  3. IniTune    equ    $0000
  4. Refresh    equ    $000e
  5. TurnOff    equ    $001c
  6. InitFX    equ    $0038
  7.  
  8. q
  9. ;fx ; Should/Will be defined if using Sampled FX.
  10.  
  11.     bra    do_load
  12.  
  13. sample_name    dc.b    'SND.BIN',0
  14.     even
  15. filesize    equ    79710
  16.  
  17.  
  18. * equates for loader
  19.  
  20. memf_chip    equ    1<<1
  21.  
  22. z_Open    equ    -30
  23. z_Close    equ    -36
  24. z_Read    equ    -42
  25. z_write    equ    -48
  26. z_Output    equ    -60
  27. z_AllocMem    equ    -198
  28. z_FreeMem    equ    -210
  29. z_OpenLibrary    equ    -552
  30.  
  31.  
  32. sysbase        equ    4
  33. discbase    dc.l    0
  34. file        dc.l    0    handle
  35.  
  36.  
  37. * Call a library  Using System variable 'sysbase'
  38. calls    MACRO      ; calls <library_vector_offset>,<library_pointer>
  39.     move.l    \2,a6
  40.         jsr    z_\1(a6)
  41.         ENDM
  42.  
  43. * Call a library  Using MyProg variable 'discbase'
  44. calli    MACRO      ; calli <library_vector_offset>,<library_pointer>
  45.     move.l    \2(pc),a6
  46.         jsr    z_\1(a6)
  47.         ENDM
  48.  
  49.  
  50. do_load
  51.     move.l    #filesize,d0        Request memory biginuf
  52.     move.l    #memf_chip,d1
  53.     calls    AllocMem,sysbase
  54.     lea    code_address(pc),a6
  55.     move.l    d0,(a6)            Base address of mem block
  56.     beq    not_enough_memory
  57.  
  58.     lea    libname(PC),A1
  59.     moveq    #0,d0
  60.     calls    OpenLibrary,sysbase    Open the disk library
  61.     lea    discbase(pc),a6
  62.     move.l    d0,(a6)
  63.  
  64.     lea    sample_name(pc),a6
  65.     move.l    a6,d1            Address of file name 
  66.     move.l    #1005,d2        'file is Read only'
  67.     calli    Open,discbase
  68.     lea    file(pc),a6
  69.     move.l    d0,(a6)            Unique file handle
  70.     beq    load_error
  71.     move.l    d0,d1            file handle
  72.     move.l    code_address(pc),d2        Start Address
  73.     move.l    #filesize,d3        Maximum length
  74.     calli    Read,discbase    
  75.     move.l    file(pc),d1        file handle
  76.     calli    Close,discbase
  77.  
  78.  
  79.     bra    dunload
  80.  
  81.  
  82. libname dc.b    'dos.library',0
  83.         even
  84.  
  85.  
  86. not_enough_memory
  87.     calli    Output,discbase
  88.     move.l    d0,d1
  89.     move.l    #err_len,d3
  90.     lea    mem_error_dat(pc),a6
  91.     move.l    a6,d2            address of message
  92.     calli    write,discbase        and send it
  93.     rts
  94.  
  95. load_error
  96.     calli    Output,discbase
  97.     move.l    d0,d1
  98.     move.l    #derr_len,d3
  99.     lea    load_error_dat(pc),a6
  100.     move.l    a6,d2            address of message
  101.     calli    write,discbase        and send it
  102.  
  103.     move.l    #filesize,d0
  104.     move.l    code_address(pc),a1
  105.     calls    FreeMem,sysbase
  106.     rts
  107.  
  108. code_address    dc.l    0
  109.  
  110. mem_error_dat    dc.b    'Not Enough Memory!',10
  111. err_len        equ    *-mem_error_dat
  112.         even
  113.  
  114. load_error_dat    dc.b    'I Cannot Find The File!',10
  115. derr_len    equ    *-load_error_dat
  116.         even
  117.  
  118.  
  119. dunload
  120.     move.l    #$fffff,d0        If you don't have this delay
  121. ddelay    subq.l    #1,d0            the disk motor will stay on!
  122.     bne.s    ddelay
  123.  
  124. color00    equ    $180
  125.  
  126. coloop    move.w    d0,custom+color00
  127.     subq.w    #1,d0
  128.     bne.s    coloop
  129.  
  130.  
  131.     lea    oldintena(pc),a0
  132.     move.w    custom+intenar,(a0)+
  133.     move.w    #%0011111111111111,custom+intena    disable chip irq
  134.  
  135.     move.l    $0068,(a0)+    old int2
  136.     move.l    $006c,(a0)+    old int3
  137.  
  138.     lea    vbl(pc),a0
  139.     move.l    a0,$006c                revector int3
  140.     move.w    #%1100000000100000,custom+intena    enable vertb irq
  141.  
  142.     bsr    keyenable
  143.  
  144.  
  145.     moveq    #0,d0
  146.     move.l    code_address(pc),a0
  147.     jsr    IniTune(a0)
  148.  
  149. loop
  150.     lea    q(pc),a0
  151.     sf    fly-q(a0)
  152. wf    tst.b    fly-q(a0)
  153.     beq.s    wf
  154.  
  155.     move.w  #$07e0,d0
  156. onscn   dbra    d0,onscn
  157.  
  158.  
  159.     move.w  #$bbb,custom+color00
  160.  
  161.     move.l    code_address(pc),a0
  162.     jsr    Refresh(a0)
  163.  
  164.     move.w  #$000,custom+color00
  165.  
  166.     lea    keycode(pc),a0
  167.     move.b    (a0),d0
  168.     move.b    #$ff,(a0)
  169.  
  170.  
  171.     move.l    code_address(pc),a0
  172.     lea    q(pc),a3
  173.  
  174.  
  175.     cmp.b    #$45,d0        (Esc)
  176.     bne.s    nesc
  177.     move.w    #%0011111111111111,custom+intena    disable chip irq
  178.     move.w    #%0011111111111111,custom+intreq    clr any req bits
  179.  
  180.     jsr    TurnOff(a0)
  181.  
  182.     move.l    #filesize,d0
  183.     move.l    code_address(pc),a1
  184.     calls    FreeMem,sysbase
  185.  
  186.  
  187.     move.l    oldint2(pc),$0068        revector int2
  188.     move.l    oldvbl(pc),$006c        revector int3
  189.     move.w    oldintena(pc),d1
  190.     or.w    #%1100000000000000,d1        make sure we're writing
  191.     moveq    #0,d0                ret with no errors
  192.     move.w    d1,custom+intena        old intena
  193.     rts
  194. nesc
  195.  
  196.  
  197.     cmp.b    #$60,d0
  198.     bne.s    nosh1
  199.     st    shift-q(a3)
  200. nosh1
  201.     cmp.b    #$61,d0
  202.     bne.s    nosh2
  203.     st    shift-q(a3)
  204. nosh2
  205.     cmp.b    #$60+$80,d0
  206.     bne.s    nosh11
  207.     sf    shift-q(a3)
  208. nosh11
  209.     cmp.b    #$61+$80,d0
  210.     bne.s    nosh22
  211.     sf    shift-q(a3)
  212. nosh22
  213.  
  214.     cmp.b    #$0a,d0        (0)
  215.     bne.s    nk0
  216.     jsr    TurnOff(a0)
  217.     bra    loop
  218. nk0
  219.  
  220.     cmp.b    #$01,d0        (1)
  221.     bne.s    nk1
  222.     moveq    #0,d0
  223.     jsr    IniTune(a0)
  224.     bra    loop
  225. nk1
  226.     cmp.b    #$02,d0        (2)
  227.     bne.s    nk2
  228.     moveq    #1,d0
  229.     jsr    IniTune(a0)
  230.     bra    loop
  231. nk2
  232.     cmp.b    #$03,d0        (3)
  233.     bne.s    nk3
  234.     move.w    #2,d0
  235.     jsr    IniTune(a0)
  236.     bra    loop
  237. nk3
  238.     cmp.b    #$04,d0        (4)
  239.     bne.s    nk4
  240.     moveq    #3,d0
  241.     jsr    IniTune(a0)
  242.     bra    loop
  243. nk4
  244.     cmp.b    #$05,d0        (5)
  245.     bne.s    nk5
  246.     moveq    #4,d0
  247.     jsr    IniTune(a0)
  248.     bra    loop
  249. nk5
  250.     cmp.b    #$06,d0        (6)
  251.     bne.s    nk6
  252.     moveq    #5,d0
  253.     jsr    IniTune(a0)
  254.     bra    loop
  255. nk6
  256.     cmp.b    #$07,d0        (7)
  257.     bne.s    nk7
  258.     moveq    #6,d0
  259.     jsr    IniTune(a0)
  260.     bra    loop
  261. nk7
  262.     cmp.b    #$08,d0        (8)
  263.     bne.s    nk8
  264.     move.b    #7,d0
  265.     jsr    IniTune(a0)
  266.     bra    loop
  267. nk8
  268.     cmp.b    #$09,d0        (9)
  269.     bne.s    nk9
  270.     moveq    #8,d0
  271.     jsr    IniTune(a0)
  272.     bra    loop
  273. nk9
  274.     cmp.b    #$0B,d0        (-)
  275.     bne.s    nkB
  276.     moveq    #9,d0
  277.     jsr    IniTune(a0)
  278.     bra    loop
  279. nkB
  280.     cmp.b    #$0C,d0        (=)
  281.     bne.s    nkC
  282.     moveq    #10,d0
  283.     jsr    IniTune(a0)
  284.     bra    loop
  285. nkC
  286.  
  287.  
  288.     cmp.b    #$10,d0        (Q)    Fx Now !
  289.     bne.s    nf1
  290.     move.w    #$00,d0
  291.     move.w    #$03,d1
  292.     jsr    InitFX(a0)
  293.     bra    loop
  294. nf1
  295.     cmp.b    #$11,d0        (W)
  296.     bne.s    nf2
  297.     move.w    #$01,d0
  298.     move.w    #$03,d1
  299.     jsr    InitFX(a0)
  300.     bra    loop
  301. nf2
  302.     cmp.b    #$12,d0        (E)
  303.     bne.s    nf3
  304.     move.w    #$02,d0
  305.     move.w    #$03,d1
  306.     jsr    InitFX(a0)
  307.     bra    loop
  308. nf3
  309.     cmp.b    #$13,d0        (R)
  310.     bne.s    nf4
  311.     move.w    #$03,d0
  312.     move.w    #$03,d1
  313.     jsr    InitFX(a0)
  314.     bra    loop
  315. nf4
  316.     cmp.b    #$14,d0        (T)
  317.     bne.s    nf5
  318.     move.w    #$04,d0
  319.     move.w    #$03,d1
  320.     jsr    InitFX(a0)
  321.     bra    loop
  322. nf5
  323.     cmp.b    #$15,d0        (Y)
  324.     bne.s    nf6
  325.     move.w    #$05,d0
  326.     move.w    #$03,d1
  327.     jsr    InitFX(a0)
  328.     bra    loop
  329. nf6
  330.     cmp.b    #$16,d0        (U)
  331.     bne.s    nf7
  332.     move.w    #$06,d0
  333.     move.w    #$03,d1
  334.     jsr    InitFX(a0)
  335.     bra    loop
  336. nf7
  337.     cmp.b    #$17,d0        (I)
  338.     bne.s    nf8
  339.     move.w    #$07,d0
  340.     move.w    #$03,d1
  341.     jsr    InitFX(a0)
  342.     bra    loop
  343. nf8
  344.     cmp.b    #$18,d0        (O)
  345.     bne.s    nf9
  346.     move.w    #$08,d0
  347.     move.w    #$03,d1
  348.     jsr    InitFX(a0)
  349.     bra    loop
  350. nf9
  351.     cmp.b    #$19,d0        (P)
  352.     bne.s    nf10
  353.     move.w    #$09,d0
  354.     move.w    #$03,d1
  355.     jsr    InitFX(a0)
  356.     bra    loop
  357. nf10
  358.     cmp.b    #$20,d0        (A)
  359.     bne.s    nf11
  360.     move.w    #$0a,d0
  361.     move.w    #$03,d1
  362.     jsr    InitFX(a0)
  363.     bra    loop
  364. nf11
  365.     cmp.b    #$21,d0        (S)
  366.     bne.s    nf12
  367.     move.w    #$0b,d0
  368.     move.w    #$03,d1
  369.     jsr    InitFX(a0)
  370.     bra    loop
  371. nf12
  372.     cmp.b    #$22,d0        (D)
  373.     bne.s    nf13
  374.     move.w    #$0c,d0
  375.     move.w    #$03,d1
  376.     jsr    InitFX(a0)
  377.     bra    loop
  378. nf13
  379.     cmp.b    #$23,d0        (F)
  380.     bne.s    nf14
  381.     move.w    #$0d,d0
  382.     move.w    #$03,d1
  383.     jsr    InitFX(a0)
  384.     bra    loop
  385. nf14
  386.     cmp.b    #$24,d0        (G)
  387.     bne.s    nf15
  388.     move.w    #$0e,d0
  389.     move.w    #$03,d1
  390.     jsr    InitFX(a0)
  391.     bra    loop
  392. nf15
  393.     cmp.b    #$25,d0        (H)
  394.     bne.s    nf16
  395.     move.w    #$0f,d0
  396.     move.w    #$03,d1
  397.     jsr    InitFX(a0)
  398.     bra    loop
  399. nf16
  400.     cmp.b    #$26,d0        (J)
  401.     bne.s    nf17
  402.     move.w    #$10,d0
  403.     move.w    #$03,d1
  404.     jsr    InitFX(a0)
  405.     bra    loop
  406. nf17
  407.     cmp.b    #$27,d0        (K)
  408.     bne.s    nf18
  409.     move.w    #$11,d0
  410.     move.w    #$03,d1
  411.     jsr    InitFX(a0)
  412.     bra    loop
  413. nf18
  414.     cmp.b    #$28,d0        (L)
  415.     bne.s    nf19
  416.     move.w    #$12,d0
  417.     move.w    #$03,d1
  418.     jsr    InitFX(a0)
  419.     bra    loop
  420. nf19
  421.     cmp.b    #$31,d0        (Z)
  422.     bne.s    nf20
  423.     move.w    #$13,d0
  424.     move.w    #$03,d1
  425.     jsr    InitFX(a0)
  426.     bra    loop
  427. nf20
  428.     cmp.b    #$32,d0        (X)
  429.     bne.s    nf21
  430.     move.w    #$14,d0
  431.     move.w    #$03,d1
  432.     jsr    InitFX(a0)
  433.     bra    loop
  434. nf21
  435.     cmp.b    #$33,d0        (C)
  436.     bne.s    nf22
  437.     move.w    #$15,d0
  438.     move.w    #$03,d1
  439.     jsr    InitFX(a0)
  440.     bra    loop
  441. nf22
  442.     cmp.b    #$34,d0        (V)
  443.     bne.s    nf23
  444.     move.w    #$16,d0
  445.     move.w    #$03,d1
  446.     jsr    InitFX(a0)
  447.     bra    loop
  448. nf23
  449.  
  450.     ifd    fx
  451.  
  452. ; Now Sampled Fx
  453.     tst.b    shift-q(a3)
  454.     bne    yesshift
  455.  
  456.     cmp.b    #$50,d0        (F1)
  457.     bne.s    nof1
  458.     move.w    #$80,d0
  459.     move.w    #$03,d1
  460.     jsr    InitFX(a0)
  461.     bra    loop
  462. nof1
  463.     cmp.b    #$51,d0        (F2)
  464.     bne.s    nof2
  465.     move.w    #$81,d0
  466.     move.w    #$03,d1
  467.     jsr    InitFX(a0)
  468.     bra    loop
  469. nof2
  470.     cmp.b    #$52,d0        (F3)
  471.     bne.s    nof3
  472.     move.w    #$82,d0
  473.     move.w    #$03,d1
  474.     jsr    InitFX(a0)
  475.     bra    loop
  476. nof3
  477.     cmp.b    #$53,d0        (F4)
  478.     bne.s    nof4
  479.     move.w    #$83,d0
  480.     move.w    #$03,d1
  481.     jsr    InitFX(a0)
  482.     bra    loop
  483. nof4
  484.     cmp.b    #$54,d0        (F5)
  485.     bne.s    nof5
  486.     move.w    #$84,d0
  487.     move.w    #$03,d1
  488.     jsr    InitFX(a0)
  489.     bra    loop
  490. nof5
  491.     cmp.b    #$55,d0        (F6)
  492.     bne.s    nof6
  493.     move.w    #$85,d0
  494.     move.w    #$03,d1
  495.     jsr    InitFX(a0)
  496.     bra    loop
  497. nof6
  498.     cmp.b    #$56,d0        (F7)
  499.     bne.s    nof7
  500.     move.w    #$86,d0
  501.     move.w    #$03,d1
  502.     jsr    InitFX(a0)
  503.     bra    loop
  504. nof7
  505.     cmp.b    #$57,d0        (F8)
  506.     bne.s    nof8
  507.     move.w    #$87,d0
  508.     move.w    #$03,d1
  509.     jsr    InitFX(a0)
  510.     bra    loop
  511. nof8
  512.     cmp.b    #$58,d0        (F9)
  513.     bne.s    nof9
  514.     move.w    #$88,d0
  515.     move.w    #$03,d1
  516.     jsr    InitFX(a0)
  517.     bra    loop
  518. nof9
  519.     cmp.b    #$59,d0        (F10)
  520.     bne.s    nof10
  521.     move.w    #$89,d0
  522.     move.w    #$03,d1
  523.     jsr    InitFX(a0)
  524.     bra    loop
  525. nof10
  526.  
  527. yesshift
  528.  
  529.     tst.b    shift-q(a3)
  530.     beq    noshift
  531.  
  532.     cmp.b    #$50,d0        (Shift F1)
  533.     bne.s    nosf1
  534.     move.w    #$80+10,d0
  535.     move.w    #$03,d1
  536.     jsr    InitFX(a0)
  537.     bra    loop
  538. nosf1
  539.     cmp.b    #$51,d0        (Shift F2)
  540.     bne.s    nosf2
  541.     move.w    #$81+10,d0
  542.     move.w    #$03,d1
  543.     jsr    InitFX(a0)
  544.     bra    loop
  545. nosf2
  546.     cmp.b    #$52,d0        (Shift F3)
  547.     bne.s    nosf3
  548.     move.w    #$82+10,d0
  549.     move.w    #$03,d1
  550.     jsr    InitFX(a0)
  551.     bra    loop
  552. nosf3
  553.     cmp.b    #$53,d0        (Shift F4)
  554.     bne.s    nosf4
  555.     move.w    #$83+10,d0
  556.     move.w    #$03,d1
  557.     jsr    InitFX(a0)
  558.     bra    loop
  559. nosf4
  560.     cmp.b    #$54,d0        (Shift F5)
  561.     bne.s    nosf5
  562.     move.w    #$84+10,d0
  563.     move.w    #$03,d1
  564.     jsr    InitFX(a0)
  565.     bra    loop
  566. nosf5
  567.     cmp.b    #$55,d0        (Shift F6)
  568.     bne.s    nosf6
  569.     move.w    #$85+10,d0
  570.     move.w    #$03,d1
  571.     jsr    InitFX(a0)
  572.     bra    loop
  573. nosf6
  574.     cmp.b    #$56,d0        (Shift F7)
  575.     bne.s    nosf7
  576.     move.w    #$86+10,d0
  577.     move.w    #$03,d1
  578.     jsr    InitFX(a0)
  579.     bra    loop
  580. nosf7
  581.     ifd    skip
  582.     
  583.     cmp.b    #$57,d0        (Shift F8)
  584.     bne.s    nosf8
  585.     move.w    #$87+10,d0
  586.     move.w    #$03,d1
  587.     jsr    InitFX(a0)
  588.     bra    loop
  589. nosf8
  590.     endc
  591. noshift
  592.     endc
  593.  
  594.  
  595.     cmp.b    #$5f,d0        (Help)
  596.     bne.s    nh
  597.     bchg    #1,$bfe001
  598.     bra    loop
  599. nh
  600.  
  601.  
  602.     bra    loop
  603.  
  604.  
  605. vbl    movem.l    d0/a0,-(sp)
  606.     move.w    custom+intreqr,d0
  607.     and.w    custom+intenar,d0
  608.     and.w    #%0000000000100000,d0    is it a vbl irq ?
  609.     beq.s    vbx            no
  610.     move.w    d0,custom+intreq    yes so clr req bit
  611.     lea    fly(pc),a0
  612.     st    (a0)
  613. vbx    movem.l    (sp)+,d0/a0
  614.     rte
  615.  
  616. fly    dc.w    0
  617.  
  618. oldintena    dc.w    0    old interrupt enable
  619. oldint2        dc.l    0    old int2
  620. oldvbl        dc.l    0    old int3
  621.  
  622. ciaa    equ    $bfe001
  623. talo    equ    $400
  624. tahi    equ    $500
  625. sdr    equ    $c00
  626. icr    equ    $d00
  627. cra    equ    $e00
  628.  
  629. keyenable
  630.     lea    ciaa,a0
  631.     move.b    #%00000000,cra(a0)    set input mode
  632.     move.b    #%10001000,icr(a0)    enable sp intr
  633.     lea    int2(pc),a0
  634.     move.l    a0,$0068
  635.     move.w    #%1100000000001000,custom+intena
  636.     lea    keycode(pc),a0
  637.     move.b    #$ff,(a0)
  638.     rts
  639.  
  640.  
  641. int2    movem.l    d0/a0/a1,-(sp)
  642.     move.w    custom+intreqr,d0
  643.     and.w    #%0000000000001000,d0
  644.     move.w    d0,custom+intreq
  645.     lea    ciaa,a0
  646.     move.b    icr(a0),d0
  647.     btst    #4,d0
  648.     bne.s    int2x
  649.     btst    #3,d0
  650.     bne.s    keys    
  651. int2x    movem.l    (sp)+,d0/a0/a1
  652.     rte
  653.  
  654. keys    move.b    sdr(a0),d0
  655.     move.b    #%00000001,sdr(a0)    set output pulse
  656.     move.b    #%01000000,cra(a0)    set output mode
  657.  
  658.     move.b    #255,talo(a0)        set timera latch
  659.     move.b    #0,tahi(a0)        to 255
  660.     bset    #0,cra(a0)        start timer
  661.  
  662.     not.b    d0
  663.     ror.b    #1,d0
  664.     lea    keycode(pc),a1
  665.     move.b    d0,(a1)
  666.  
  667. key1    btst    #0,icr(a0)
  668.     beq.s    key1
  669.     move.b    #%00000000,cra(a0)    set input mode
  670.     bra.s    int2x
  671.  
  672. keycode    dc.b    $ff
  673. shift    dc.b    0
  674.     even
  675.  
  676.  
  677. * hardware register equates
  678.  
  679. custom    equ    $dff000
  680.  
  681. dmaconr    equ    $002
  682. intenar    equ    $01c
  683. intreqr    equ    $01e
  684. dmacon    equ    $096
  685. intena    equ    $09a
  686. intreq    equ    $09c
  687. adkcon    equ    $09e
  688.  
  689.     end
  690.  
  691.  
  692.