home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 3 / CDPDIII.bin / pd / programming / assembler / thesource / volume1 / source / modplayers / noisepacker30.lha / NP3replay.s < prev   
Encoding:
Text File  |  1992-11-25  |  7.6 KB  |  412 lines

  1. * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2. * NoisePacker V3.0 PlayRoutine ©1991 Twins of Phenomena *
  3. * Used registers are d0-d7/a0-a6     It use lev6irq     *
  4. * How to use it? 1. bsr np_init                         *
  5. *                2. bsr np_music (every vert.)          *
  6. *                3. bsr np_end                          *
  7. * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  8.  
  9. np_data=$60000
  10.  
  11. np_init:    moveq    #1,d0
  12.         moveq    #0,d1
  13.         lea    np_data,a4
  14.         lea    $dff000,a5
  15.         lea    np_oldirq(pc),a6
  16.  
  17.         move.l    $78.w,(a6)+
  18.         move.w    d0,(a6)+
  19.         move.l    a4,a3
  20.         add.w    (a4)+,a3
  21.         move.l    a3,(a6)+
  22.         move.w    d1,(a6)+
  23. np_ini1:    add.w    (a4)+,a3
  24.         move.l    a3,(a6)+
  25.         dbf    d0,np_ini1
  26.         move.w    (a4)+,d0
  27.         add.l    d0,a3
  28.  
  29.         move.l    #$82000006,(a6)+
  30.         move.w    #$0100,(a6)+
  31.         move.l    #np_portup,(a6)+
  32.         move.l    #np_portdown,(a6)+
  33.         move.l    #np_port,(a6)+
  34.         move.l    #np_vib,(a6)+
  35.         move.l    #np_port2,(a6)+
  36.         move.l    #np_vib2,(a6)+
  37.         move.l    #np_volslide,(a6)+
  38.         move.l    #np_arp,(a6)+
  39.         move.l    #np_songjmp,(a6)+
  40.         move.l    #np_setvol,(a6)+
  41.         move.l    #np_pattbreak,(a6)+
  42.         move.l    #np_filter,(a6)+
  43.         move.l    #np_setspeed,(a6)+
  44.  
  45.         moveq    #0,d0
  46.         move.l    a4,a6
  47.         add.w    -8(a4),a6
  48.         sub.w    #12,a6
  49. np_ini2:    move.l    a3,2(a4)
  50.         move.l    a3,a2
  51.         move.w    14(a4),d0
  52.         add.w    d0,d0
  53.         add.l    d0,a2
  54.         move.l    a2,8(a4)
  55.         move.w    6(a4),d0
  56.         add.w    d0,d0
  57.         add.l    d0,a3
  58.         add.w    #16,a4
  59.         cmp.l    a4,a6
  60.         bne.b    np_ini2
  61.  
  62.         bset.b    #1,$bfe001
  63.         move.w    d1,$a8(a5)
  64.         move.w    d1,$b8(a5)
  65.         move.w    d1,$c8(a5)
  66.         move.w    d1,$d8(a5)
  67.         move.w    #$f,$96(a5)
  68.  
  69.         move.w    #$2000,$9a(a5)
  70.         lea    $bfd000,a0
  71.         move.b    #$7f,$d00(a0)
  72.         move.b    #$08,$e00(a0)
  73.         move.b    #$80,$400(a0)
  74.         move.b    #$01,$500(a0)
  75. np_ini3:    btst.b    #0,$d00(a0)
  76.         beq.b    np_ini3
  77.         move.b    #$81,$d00(a0)
  78.         move.w    #$e000,$9a(a5)
  79.         rts
  80.  
  81. np_end:        moveq    #0,d0
  82.         lea    $dff000,a5
  83.         move.w    d0,$a8(a5)
  84.         move.w    d0,$b8(a5)
  85.         move.w    d0,$c8(a5)
  86.         move.w    d0,$d8(a5)
  87.         bclr.b    #1,$bfe001
  88.         move.w    #$f,$96(a5)
  89.         move.w    #$2000,$9a(a5)
  90.         move.l    np_oldirq(pc),$78.w
  91.         rts
  92.  
  93. np_music:    moveq    #0,d6
  94.         lea    $dff0d0,a4
  95.         lea    np_block(pc),a6
  96.         subq.w    #1,(a6)+
  97.         bhi.w    np_nonew
  98.  
  99.         move.l    (a6)+,a1
  100.         add.w    (a6)+,a1
  101.         move.l    (a6)+,a0
  102.         add.w    (a1),a0
  103.         move.l    (a6)+,d2
  104.         lea    np_data-8,a1
  105.         lea    np_voidat1(pc),a2
  106.  
  107.         moveq    #8,d0
  108.         moveq    #0,d1
  109.         moveq    #0,d4
  110.         moveq    #0,d5
  111. np_loop1:    move.w    (a0)+,d1
  112.  
  113.         tst.w    (a2)+
  114.         bpl.b    np_lop3
  115.         addq.w    #1,-(a2)
  116.         add.w    #32,a2
  117.         addq.w    #8,a4
  118.         bra.w    np_lop7
  119. np_lop3:    move.l    d2,a3
  120.         add.l    d1,a3
  121.         add.w    (a2),a3
  122.  
  123.         move.b    (a3)+,d1
  124.         bpl.b    np_lop4
  125.         ext.w    d1
  126.         addq.w    #1,d1
  127.         addq.w    #1,(a2)
  128.         move.w    d1,-(a2)
  129.         move.w    d6,8(a2)
  130.         add.w    #32,a2
  131.         addq.w    #8,a4
  132.         bra.w    np_lop7
  133. np_lop4:    move.b    (a3)+,d3
  134.         move.b    (a3)+,d4
  135.         addq.w    #3,(a2)+
  136.  
  137.         move.l    a1,a3
  138.         move.b    d1,d7
  139.         lsl.w    #8,d7
  140.         or.b    d3,d7
  141.         andi.w    #$1f0,d7
  142.         bne.b    np_loop3
  143.  
  144.         add.w    (a2)+,a3
  145.         addq.w    #2,a2
  146.         addq.w    #2,a3
  147.         bra.b    np_loop4
  148. np_loop3:    move.w    d7,(a2)+
  149.         add.w    d7,a3
  150.         move.w    (a3)+,(a2)+
  151. np_loop4:    andi.w    #$f,d3
  152.         move.w    d3,(a2)+
  153.         move.w    d4,(a2)+
  154.  
  155.         andi.w    #$fe,d1
  156.         beq.b    np_loop5
  157.  
  158.         move.w    np_periods-2(pc,d1.w),d7
  159.  
  160.         subq.w    #3,d3
  161.         beq.w    np_setport
  162.         subq.w    #2,d3
  163.         beq.w    np_setport
  164.  
  165.         or.w    d0,d5
  166.         move.w    d7,(a2)+
  167.         move.w    d1,(a2)+
  168.         move.w    d6,(a2)+
  169.  
  170.         move.l    (a3)+,(a4)+
  171.         move.w    (a3)+,(a4)+
  172.         move.l    (a3)+,(a2)+
  173.         move.w    (a3)+,(a2)+
  174.  
  175.         subq.w    #6,d3
  176.         bmi.b    np_loop6
  177.         add.w    d3,d3
  178.         add.w    d3,d3
  179.         move.l    38(a6,d3.w),a3
  180.         jmp    (a3)
  181.  
  182. np_loop5:    add.w    #12,a2
  183.         addq.w    #6,a4
  184.         sub.w    #11,d3
  185.         bmi.b    np_loop6
  186.         add.w    d3,d3
  187.         add.w    d3,d3
  188.         move.l    38(a6,d3.w),a3
  189.         jmp    (a3)
  190.  
  191. np_periods:    dc.w    $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a
  192.         dc.w    $01fc,$01e0,$01c5,$01ac,$0194,$017d,$0168,$0153,$0140
  193.         dc.w    $012e,$011d,$010d,$00fe,$00f0,$00e2,$00d6,$00ca,$00be
  194.         dc.w    $00b4,$00aa,$00a0,$0097,$008f,$0087,$007f,$0078,$0071
  195.  
  196. np_loop6:    move.w    -12(a2),(a4)+
  197. np_loop7:    move.w    -18(a2),(a4)
  198.         addq.w    #8,a2
  199. np_lop7:    sub.w    #$18,a4
  200.         lsr.w    #1,d0
  201.         bne.w    np_loop1
  202.  
  203.         move.w    d5,6(a4)
  204.         or.w    d5,(a6)+
  205.         move.w    (a6)+,-20(a6)
  206.         move.l    #np_irq1,$78.w
  207.         move.b    #$19,$bfde00
  208.  
  209.         bset.b    #0,(a6)+
  210.         beq.b    np_break
  211.         addq.b    #1,(a6)
  212.         cmp.b    #64,(a6)
  213.         bne.b    np_next
  214. np_break:    move.b    d6,(a6)
  215.         move.l    d6,-32(a2)
  216.         move.l    d6,-64(a2)
  217.         move.l    d6,-96(a2)
  218.         move.l    d6,-128(a2)
  219.         lea    np_block+2(pc),a6
  220.         move.l    (a6)+,a0
  221.         addq.w    #2,(a6)
  222.         move.w    (a6),d0
  223.         cmp.w    -4(a0),d0
  224.         bne.b    np_next
  225.         move.w    -2(a0),(a6)
  226. np_next:    rts
  227.  
  228. np_setvol:    move.w    d4,-18(a2)
  229.         bra.b    np_loop6
  230.  
  231. np_pattbreak:    move.b    d6,4(a6)
  232.         bra.b    np_loop6
  233.  
  234. np_songjmp:    move.b    #63,5(a6)
  235.         move.b    d4,-9(a6)
  236.         bra.b    np_loop6
  237.  
  238. np_setspeed:    move.w    d4,2(a6)
  239.         bra.w    np_loop6
  240.  
  241. np_filter:    andi.b    #$fd,$bfe001
  242.         or.b    d4,$bfe001
  243.         bra.w    np_loop6
  244.  
  245. np_setport:    add.w    #12,a2
  246.         addq.w    #8,a4
  247.         cmp.w    -12(a2),d7
  248.         slt.b    (a2)
  249.         beq.b    np_clear
  250.         move.w    d7,2(a2)
  251.         bra.w    np_loop7
  252. np_clear:    move.w    d6,2(a2)
  253.         bra.w    np_loop7
  254.  
  255. np_nonew:    lea    np_voidat1(pc),a0
  256.         moveq    #3,d0
  257. np_lop1:    move.w    8(a0),d1
  258.         beq.b    np_lop2
  259.         subq.w    #8,d1
  260.         bhi.b    np_lop2
  261.         addq.w    #7,d1
  262.         add.w    d1,d1
  263.         add.w    d1,d1
  264.         move.l    20(a6,d1.w),a3
  265.         jmp    (a3)
  266. np_lop2:    addi.w    #32,a0
  267.         subi.w    #$0010,a4
  268.         dbf    d0,np_lop1
  269.         rts
  270.  
  271. np_portup:    move.w    10(a0),d2
  272.         sub.w    d2,12(a0)
  273.         cmpi.w    #$0071,12(a0)
  274.         bpl.b    np_portup2
  275.         move.w    #$71,12(a0)
  276. np_portup2:    move.w    12(a0),6(a4)
  277.         bra.b    np_lop2
  278.  
  279. np_portdown:    move.w    10(a0),d2
  280.         add.w    d2,12(a0)
  281.         cmpi.w    #$0358,12(a0)
  282.         bmi.b    np_portdown2
  283.         move.w    #$358,12(a0)
  284. np_portdown2:    move.w    12(a0),6(a4)
  285.         bra.b    np_lop2
  286.  
  287. np_arp:        move.w    -2(a6),d2
  288.         sub.w    16(a6),d2
  289.         neg.w    d2
  290.         move.b    np_arplist(pc,d2.w),d2
  291.         beq.b    np_arp0
  292.         subq.w    #2,d2
  293.         beq.b    np_arp2
  294. np_arp1:    move.w    10(a0),d2
  295.         lsr.w    #3,d2
  296.         andi.w    #$000e,d2
  297.         bra.b    np_arp3
  298. np_arp2:    move.w    10(a0),d2
  299.         andi.w    #$000f,d2
  300.         add.w    d2,d2
  301. np_arp3:    add.w    14(a0),d2
  302.         cmpi.w    #$0048,d2
  303.         bls.b    np_arp4
  304.         moveq    #$48,d2
  305. np_arp4:    lea    np_periods-2(pc),a3
  306.         move.w    (a3,d2.w),6(a4)
  307.         bra.w    np_lop2
  308. np_arp0:    move.w    12(a0),6(a4)
  309.         bra.w    np_lop2
  310.  
  311. np_arplist:
  312.     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
  313.  
  314. np_sin:    dc.b    $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  315.     dc.b    $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  316.  
  317. np_vib:        move.w    10(a0),d3
  318.         beq.b    np_vib2
  319.         move.w    d3,30(a0)
  320. np_vib2:    move.w    16(a0),d3
  321.         lsr.w    #2,d3
  322.         andi.w    #$001f,d3
  323.         moveq    #0,d2
  324.         move.b    np_sin(pc,d3.w),d2
  325.         move.w    30(a0),d3
  326.         andi.w    #$000f,d3
  327.         mulu    d3,d2
  328.         lsr.w    #7,d2
  329.         move.w    12(a0),d3
  330.         tst.b    17(a0)
  331.         bmi.b    np_vibsub
  332.         add.w    d2,d3
  333.         bra.b    np_vib3
  334. np_vibsub:    sub.w    d2,d3
  335. np_vib3:    move.w    d3,6(a4)
  336.         move.w    30(a0),d3
  337.         lsr.w    #2,d3
  338.         andi.w    #$003c,d3
  339.         add.b    d3,17(a0)
  340.         cmp.b    #20,d1
  341.         bne.w    np_lop2
  342.  
  343. np_volslide:    move.w    10(a0),d2
  344.         add.b    d2,7(a0)
  345.         bmi.b    np_vol3
  346.         cmp.w    #$40,6(a0)
  347.         bmi.b    np_vol2
  348.         move.w    #$40,6(a0)
  349. np_vol2:    move.w    6(a0),8(a4)
  350.         bra.w    np_lop2
  351.  
  352. np_vol3:    move.w    d6,6(a0)
  353.         move.w    d6,8(a4)
  354.         bra.w    np_lop2
  355.  
  356. np_port:    move.w    10(a0),d2
  357.         beq.b    np_port2
  358.         move.w    d2,28(a0)
  359.  
  360. np_port2:    move.w    26(a0),d2
  361.         beq.b    np_rts
  362.         move.w    28(a0),d3
  363.         tst.w    24(a0)
  364.         bne.b    np_sub
  365.         add.w    d3,12(a0)
  366.         cmp.w    12(a0),d2
  367.         bgt.b    np_portok
  368.         move.w    d2,12(a0)
  369.         move.w    d6,26(a0)
  370. np_portok:    move.w    12(a0),6(a4)
  371. np_rts:        cmp.b    #16,d1
  372.         beq.b    np_volslide
  373.         bra.w    np_lop2
  374.  
  375. np_sub:        sub.w    d3,12(a0)
  376.         cmp.w    12(a0),d2
  377.         blt.b    np_portok
  378.         move.w    d2,12(a0)
  379.         move.w    d6,26(a0)
  380.         move.w    12(a0),6(a4)
  381.         cmp.b    #16,d1
  382.         beq.w    np_volslide
  383.         bra.w    np_lop2
  384.  
  385. np_irq1:    tst.b    $bfdd00
  386.         move.b    #$19,$bfde00
  387.         move.l    #np_irq2,$78.w
  388.         move.w    np_block+16(pc),$dff096
  389.         move.w    #$2000,$dff09c
  390.         rte
  391.  
  392. np_irq2:    move.l    a0,-(a7)
  393.         lea    $dff000,a0
  394.         tst.b    $bfdd00
  395.         move.l    np_voidat1+18(pc),$d0(a0)
  396.         move.w    np_voidat1+22(pc),$d4(a0)
  397.         move.l    np_voidat1+50(pc),$c0(a0)
  398.         move.w    np_voidat1+54(pc),$c4(a0)
  399.         move.l    np_voidat1+82(pc),$b0(a0)
  400.         move.w    np_voidat1+86(pc),$b4(a0)
  401.         move.l    np_voidat1+114(pc),$a0(a0)
  402.         move.w    np_voidat1+118(pc),$a4(a0)
  403.         move.l    np_oldirq(pc),$78.w
  404.         move.w    #$2000,$9c(a0)
  405.         move.l    (a7)+,a0
  406.         rte
  407.  
  408. np_oldirq:    dc.l    0
  409. np_block:    blk.l    19,0
  410. np_voidat1:    blk.l    32,0
  411.  
  412.