home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d509 / multi_player.lha / Multi_Player / sources / normalreplay.s < prev    next >
Text File  |  1991-06-29  |  8KB  |  506 lines

  1.  
  2. ;­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  3. ;­   NoisetrackerV2.0 Normal replay   ­
  4. ;­     Uses registers d0-d3/a0-a5     ­
  5. ;­ Mahoney & Kaktus - (C) E.A.S. 1990 ­
  6. ;­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  7. ; !!!!
  8.     XDEF    _mt_init,_mt_music,_mt_end
  9.     XREF    _adr_data
  10. ; !!!!
  11.  
  12.  
  13. _mt_init:
  14.     movem.l    d0-d2/a0-a2,-(a7)
  15.     move.l    _adr_data,a0
  16.     lea    $3b8(a0),a1
  17.     moveq    #$7f,d0
  18.     moveq    #0,d2
  19.     moveq    #0,d1
  20. mt_lop2:move.b    (a1)+,d1
  21.     cmp.b    d2,d1
  22.     ble.s    mt_lop
  23.     move.l    d1,d2
  24. mt_lop:    dbf    d0,mt_lop2
  25.     addq.b    #1,d2
  26.  
  27.     asl.l    #8,d2
  28.     asl.l    #2,d2
  29.     lea    4(a1,d2.l),a2
  30.     lea    mt_samplestarts(pc),a1
  31.     add.w    #42,a0
  32.     moveq    #$1e,d0
  33. mt_lop3:clr.l    (a2)
  34.     move.l    a2,(a1)+
  35.     moveq    #0,d1
  36.     move.w    (a0),d1
  37.     asl.l    #1,d1
  38.     add.l    d1,a2
  39.     add.l    #$1e,a0
  40.     dbf    d0,mt_lop3
  41.  
  42.     or.b    #2,$bfe001
  43.     move.b    #6,mt_speed
  44.     moveq    #0,d0
  45.     lea    $dff000,a0
  46.     move.w    d0,$a8(a0)
  47.     move.w    d0,$b8(a0)
  48.     move.w    d0,$c8(a0)
  49.     move.w    d0,$d8(a0)
  50.     clr.b    mt_songpos
  51.     clr.b    mt_counter
  52.     clr.w    mt_pattpos
  53.     movem.l    (a7)+,d0-d2/a0-a2
  54.     rts
  55.  
  56. _mt_end:
  57.     clr.w    $dff0a8
  58.     clr.w    $dff0b8
  59.     clr.w    $dff0c8
  60.     clr.w    $dff0d8
  61.     move.w    #$f,$dff096
  62.     rts
  63.  
  64.  
  65. _mt_music:
  66.     movem.l    d0-d3/a0-a5,-(a7)
  67.     move.l    _adr_data,a0
  68.     addq.b    #1,mt_counter
  69.     move.b    mt_counter(pc),d0
  70.     cmp.b    mt_speed(pc),d0
  71.     blt    mt_nonew
  72.     clr.b    mt_counter
  73.  
  74.     move.l    _adr_data,a0
  75.     lea    $c(a0),a3
  76.     lea    $3b8(a0),a2
  77.     lea    $43c(a0),a0
  78.  
  79.     moveq    #0,d0
  80.     moveq    #0,d1
  81.     move.b    mt_songpos(pc),d0
  82.     move.b    (a2,d0.w),d1
  83.     lsl.w    #8,d1
  84.     lsl.w    #2,d1
  85.     add.w    mt_pattpos(pc),d1
  86.     clr.w    mt_dmacon
  87.  
  88.     lea    $dff0a0,a5
  89.     lea    mt_voice1(pc),a4
  90.     bsr    mt_playvoice
  91.     addq.l    #4,d1
  92.     lea    $dff0b0,a5
  93.     lea    mt_voice2(pc),a4
  94.     bsr    mt_playvoice
  95.     addq.l    #4,d1
  96.     lea    $dff0c0,a5
  97.     lea    mt_voice3(pc),a4
  98.     bsr    mt_playvoice
  99.     addq.l    #4,d1
  100.     lea    $dff0d0,a5
  101.     lea    mt_voice4(pc),a4
  102.     bsr    mt_playvoice
  103.  
  104.     move.w    mt_dmacon(pc),d0
  105.     beq.s    mt_nodma
  106.  
  107.     bsr    mt_wait
  108.     or.w    #$8000,d0
  109.     move.w    d0,$dff096
  110.     bsr    mt_wait
  111. mt_nodma:
  112.     lea    mt_voice1(pc),a4
  113.     lea    $dff000,a3
  114.     move.l    $a(a4),$a0(a3)
  115.     move.w    $e(a4),$a4(a3)
  116.     move.l    $a+$1c(a4),$b0(a3)
  117.     move.w    $e+$1c(a4),$b4(a3)
  118.     move.l    $a+$38(a4),$c0(a3)
  119.     move.w    $e+$38(a4),$c4(a3)
  120.     move.l    $a+$54(a4),$d0(a3)
  121.     move.w    $e+$54(a4),$d4(a3)
  122.  
  123.     add.w    #$10,mt_pattpos
  124.     cmp.w    #$400,mt_pattpos
  125.     bne.s    mt_exit
  126. mt_next:clr.w    mt_pattpos
  127.     clr.b    mt_break
  128.     addq.b    #1,mt_songpos
  129.     and.b    #$7f,mt_songpos
  130.     move.b    -2(a2),d0
  131.     cmp.b    mt_songpos(pc),d0
  132.     bne.s    mt_exit
  133.     move.b    -1(a2),mt_songpos
  134. mt_exit:tst.b    mt_break
  135.     bne.s    mt_next
  136.     movem.l    (a7)+,d0-d3/a0-a5
  137.     rts
  138.  
  139. mt_wait:moveq    #3,d3
  140. mt_wai2:move.b    $dff006,d2
  141. mt_wai3:cmp.b    $dff006,d2
  142.     beq.s    mt_wai3
  143.     dbf    d3,mt_wai2
  144.     moveq    #8,d2
  145. mt_wai4:dbf    d2,mt_wai4
  146.     rts
  147.  
  148. mt_nonew:
  149.     lea    mt_voice1(pc),a4
  150.     lea    $dff0a0,a5
  151.     bsr    mt_com
  152.     lea    mt_voice2(pc),a4
  153.     lea    $dff0b0,a5
  154.     bsr    mt_com
  155.     lea    mt_voice3(pc),a4
  156.     lea    $dff0c0,a5
  157.     bsr    mt_com
  158.     lea    mt_voice4(pc),a4
  159.     lea    $dff0d0,a5
  160.     bsr    mt_com
  161.     bra.s    mt_exit
  162.  
  163. mt_mulu:
  164.     dc.w $000,$01e,$03c,$05a,$078,$096,$0b4,$0d2,$0f0,$10e,$12c,$14a
  165.     dc.w $168,$186,$1a4,$1c2,$1e0,$1fe,$21c,$23a,$258,$276,$294,$2b2
  166.     dc.w $2d0,$2ee,$30c,$32a,$348,$366,$384,$3a2
  167.  
  168. mt_playvoice:
  169.     move.l    (a0,d1.l),(a4)
  170.     moveq    #0,d2
  171.     move.b    2(a4),d2
  172.     lsr.b    #4,d2
  173.     move.b    (a4),d0
  174.     and.b    #$f0,d0
  175.     or.b    d0,d2
  176.     beq.s    mt_oldinstr
  177.  
  178.     lea    mt_samplestarts-4(pc),a1
  179.     asl.w    #2,d2
  180.     move.l    (a1,d2.l),4(a4)
  181.     lsr.w    #1,d2
  182.     move.w    mt_mulu(pc,d2.w),d2
  183.     move.w    (a3,d2.w),8(a4)
  184.     move.w    2(a3,d2.w),$12(a4)
  185.     moveq    #0,d3
  186.     move.w    4(a3,d2.w),d3
  187.     tst.w    d3
  188.     beq.s    mt_noloop
  189.     move.l    4(a4),d0
  190.     asl.w    #1,d3
  191.     add.l    d3,d0
  192.     move.l    d0,$a(a4)
  193.     move.w    4(a3,d2.w),d0
  194.     add.w    6(a3,d2.w),d0
  195.     move.w    d0,8(a4)
  196.     bra.s    mt_hejaSverige
  197. mt_noloop:
  198.     move.l    4(a4),d0
  199.     add.l    d3,d0
  200.     move.l    d0,$a(a4)
  201. mt_hejaSverige:
  202.     move.w    6(a3,d2.w),$e(a4)
  203.     moveq    #0,d0
  204.     move.b    $13(a4),d0
  205.     move.w    d0,8(a5)
  206.  
  207. mt_oldinstr:
  208.     move.w    (a4),d0
  209.     and.w    #$fff,d0
  210.     beq    mt_com2
  211.     tst.w    8(a4)
  212.     beq.s    mt_stopsound
  213.     tst.b    $12(a4)
  214.     bne.s    mt_stopsound
  215.     move.b    2(a4),d0
  216.     and.b    #$f,d0
  217.     cmp.b    #5,d0
  218.     beq.s    mt_setport
  219.     cmp.b    #3,d0
  220.     beq.s    mt_setport
  221.  
  222.     move.w    (a4),$10(a4)
  223.     and.w    #$fff,$10(a4)
  224.     move.w    $1a(a4),$dff096
  225.     clr.b    $19(a4)
  226.  
  227.     move.l    4(a4),(a5)
  228.     move.w    8(a4),4(a5)
  229.     move.w    $10(a4),6(a5)
  230.  
  231.     move.w    $1a(a4),d0    ;dmaset
  232.     or.w    d0,mt_dmacon
  233.     bra    mt_com2
  234.  
  235. mt_stopsound:
  236.     move.w    $1a(a4),$dff096
  237.     bra    mt_com2
  238.  
  239. mt_setport:
  240.     move.w    (a4),d2
  241.     and.w    #$fff,d2
  242.     move.w    d2,$16(a4)
  243.     move.w    $10(a4),d0
  244.     clr.b    $14(a4)
  245.     cmp.w    d0,d2
  246.     beq.s    mt_clrport
  247.     bge    mt_com2
  248.     move.b    #1,$14(a4)
  249.     bra    mt_com2
  250. mt_clrport:
  251.     clr.w    $16(a4)
  252.     rts
  253.  
  254. mt_port:move.b    3(a4),d0
  255.     beq.s    mt_port2
  256.     move.b    d0,$15(a4)
  257.     clr.b    3(a4)
  258. mt_port2:
  259.     tst.w    $16(a4)
  260.     beq.s    mt_rts
  261.     moveq    #0,d0
  262.     move.b    $15(a4),d0
  263.     tst.b    $14(a4)
  264.     bne.s    mt_sub
  265.     add.w    d0,$10(a4)
  266.     move.w    $16(a4),d0
  267.     cmp.w    $10(a4),d0
  268.     bgt.s    mt_portok
  269.     move.w    $16(a4),$10(a4)
  270.     clr.w    $16(a4)
  271. mt_portok:
  272.     move.w    $10(a4),6(a5)
  273. mt_rts:    rts
  274.  
  275. mt_sub:    sub.w    d0,$10(a4)
  276.     move.w    $16(a4),d0
  277.     cmp.w    $10(a4),d0
  278.     blt.s    mt_portok
  279.     move.w    $16(a4),$10(a4)
  280.     clr.w    $16(a4)
  281.     move.w    $10(a4),6(a5)
  282.     rts
  283.  
  284. mt_sin:
  285.     dc.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  286.     dc.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  287.  
  288. mt_vib:    move.b    $3(a4),d0
  289.     beq.s    mt_vib2
  290.     move.b    d0,$18(a4)
  291.  
  292. mt_vib2:move.b    $19(a4),d0
  293.     lsr.w    #2,d0
  294.     and.w    #$1f,d0
  295.     moveq    #0,d2
  296.     move.b    mt_sin(pc,d0.w),d2
  297.     move.b    $18(a4),d0
  298.     and.w    #$f,d0
  299.     mulu    d0,d2
  300.     lsr.w    #7,d2
  301.     move.w    $10(a4),d0
  302.     tst.b    $19(a4)
  303.     bmi.s    mt_vibsub
  304.     add.w    d2,d0
  305.     bra.s    mt_vib3
  306. mt_vibsub:
  307.     sub.w    d2,d0
  308. mt_vib3:move.w    d0,6(a5)
  309.     move.b    $18(a4),d0
  310.     lsr.w    #2,d0
  311.     and.w    #$3c,d0
  312.     add.b    d0,$19(a4)
  313.     rts
  314.  
  315.  
  316. mt_arplist:
  317.     dc.b 0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1
  318.  
  319. mt_arp:    moveq    #0,d0
  320.     move.b    mt_counter(pc),d0
  321.     move.b    mt_arplist(pc,d0.w),d0
  322.     beq.s    mt_arp0
  323.     cmp.b    #2,d0
  324.     beq.s    mt_arp2
  325. mt_arp1:moveq    #0,d0
  326.     move.b    3(a4),d0
  327.     lsr.b    #4,d0
  328.     bra.s    mt_arpdo
  329. mt_arp2:moveq    #0,d0
  330.     move.b    3(a4),d0
  331.     and.b    #$f,d0
  332. mt_arpdo:
  333.     asl.w    #1,d0
  334.     move.w    $10(a4),d1
  335.     and.w    #$fff,d1
  336.     lea    mt_periods(pc),a0
  337.     moveq    #$24,d2
  338. mt_arp3:cmp.w    (a0)+,d1
  339.     bge.s    mt_arpfound
  340.     dbf    d2,mt_arp3
  341. mt_arp0:move.w    $10(a4),6(a5)
  342.     rts
  343. mt_arpfound:
  344.     move.w    -2(a0,d0.w),6(a5)
  345.     rts
  346.  
  347. mt_normper:
  348.     move.w    $10(a4),6(a5)
  349.     rts
  350.  
  351. mt_com:    move.w    2(a4),d0
  352.     and.w    #$fff,d0
  353.     beq.s    mt_normper
  354.     move.b    2(a4),d0
  355.     and.b    #$f,d0
  356.     tst.b    d0
  357.     beq.s    mt_arp
  358.     cmp.b    #1,d0
  359.     beq.s    mt_portup
  360.     cmp.b    #2,d0
  361.     beq.s    mt_portdown
  362.     cmp.b    #3,d0
  363.     beq    mt_port
  364.     cmp.b    #4,d0
  365.     beq    mt_vib
  366.     cmp.b    #5,d0
  367.     beq.s    mt_volport
  368.     cmp.b    #6,d0
  369.     beq.s    mt_volvib
  370.     move.w    $10(a4),6(a5)
  371.     cmp.b    #$a,d0
  372.     beq.s    mt_volslide
  373.     rts
  374.  
  375. mt_portup:
  376.     moveq    #0,d0
  377.     move.b    3(a4),d0
  378.     sub.w    d0,$10(a4)
  379.     move.w    $10(a4),d0
  380.     cmp.w    #$71,d0
  381.     bpl.s    mt_portup2
  382.     move.w    #$71,$10(a4)
  383. mt_portup2:
  384.     move.w    $10(a4),6(a5)
  385.     rts
  386.  
  387. mt_portdown:
  388.     moveq    #0,d0
  389.     move.b    3(a4),d0
  390.     add.w    d0,$10(a4)
  391.     move.w    $10(a4),d0
  392.     cmp.w    #$358,d0
  393.     bmi.s    mt_portdown2
  394.     move.w    #$358,$10(a4)
  395. mt_portdown2:
  396.     move.w    $10(a4),6(a5)
  397.     rts
  398.  
  399. mt_volvib:
  400.      bsr    mt_vib2
  401.      bra.s    mt_volslide
  402. mt_volport:
  403.      bsr    mt_port2
  404.  
  405. mt_volslide:
  406.     moveq    #0,d0
  407.     move.b    3(a4),d0
  408.     lsr.b    #4,d0
  409.     beq.s    mt_vol3
  410.     add.b    d0,$13(a4)
  411.     cmp.b    #$40,$13(a4)
  412.     bmi.s    mt_vol2
  413.     move.b    #$40,$13(a4)
  414. mt_vol2:moveq    #0,d0
  415.     move.b    $13(a4),d0
  416.     move.w    d0,8(a5)
  417.     rts
  418.  
  419. mt_vol3:move.b    3(a4),d0
  420.     and.b    #$f,d0
  421.     sub.b    d0,$13(a4)
  422.     bpl.s    mt_vol4
  423.     clr.b    $13(a4)
  424. mt_vol4:moveq    #0,d0
  425.     move.b    $13(a4),d0
  426.     move.w    d0,8(a5)
  427.     rts
  428.  
  429. mt_com2:move.b    $2(a4),d0
  430.     and.b    #$f,d0
  431.     cmp.b    #$e,d0
  432.     beq.s    mt_filter
  433.     cmp.b    #$d,d0
  434.     beq.s    mt_pattbreak
  435.     cmp.b    #$b,d0
  436.     beq.s    mt_songjmp
  437.     cmp.b    #$c,d0
  438.     beq.s    mt_setvol
  439.     cmp.b    #$f,d0
  440.     beq.s    mt_setspeed
  441.     rts
  442.  
  443. mt_filter:
  444.     move.b    3(a4),d0
  445.     and.b    #1,d0
  446.     asl.b    #1,d0
  447.     and.b    #$fd,$bfe001
  448.     or.b    d0,$bfe001
  449.     rts
  450.  
  451. mt_pattbreak:
  452.     move.b    #1,mt_break
  453.     rts
  454.  
  455. mt_songjmp:
  456.     move.b    #1,mt_break
  457.     move.b    3(a4),d0
  458.     subq.b    #1,d0
  459.     move.b    d0,mt_songpos
  460.     rts
  461.  
  462. mt_setvol:
  463.     cmp.b    #$40,3(a4)
  464.     bls.s    mt_sv2
  465.     move.b    #$40,3(a4)
  466. mt_sv2:    moveq    #0,d0
  467.     move.b    3(a4),d0
  468.     move.b    d0,$13(a4)
  469.     move.w    d0,8(a5)
  470.     rts
  471.  
  472. mt_setspeed:
  473.     moveq    #0,d0
  474.     move.b    3(a4),d0
  475.     cmp.b    #$1f,d0
  476.     bls.s    mt_sp2
  477.     moveq    #$1f,d0
  478. mt_sp2:    tst.w    d0
  479.     bne.s    mt_sp3
  480.     moveq    #1,d0
  481. mt_sp3:    move.b    d0,mt_speed
  482.     rts
  483.  
  484. mt_periods:
  485.     dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  486.     dc.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  487.     dc.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  488.     dc.w $007f,$0078,$0071,$0000
  489.  
  490. mt_speed:    dc.b    6
  491. mt_counter:    dc.b    0
  492. mt_pattpos:    dc.w    0
  493. mt_songpos:    dc.b    0
  494. mt_break:    dc.b    0
  495. mt_dmacon:    dc.w    0
  496. mt_samplestarts:dcb.l    $1f,0
  497. mt_voice1:    dcb.w    13,0
  498.         dc.w    1
  499. mt_voice2:    dcb.w    13,0
  500.         dc.w    2
  501. mt_voice3:    dcb.w    13,0
  502.         dc.w    4
  503. mt_voice4:    dcb.w    13,0
  504.         dc.w    8
  505.  
  506.