home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 4: Demo 1 / almathera_demo1.bin / sourcecode / xmas / xmas4.s < prev    next >
Text File  |  1995-03-17  |  27KB  |  1,381 lines

  1.  
  2.      section merry-xmas,code_c    ; Put into chip memory
  3.      opt     c-,o+,o3-        ; No case sensitivity, Optimize on
  4.  
  5.     move.l 4.w,a6
  6.     jsr -132(a6)            ; CALLEXEC FORBID()
  7.  
  8.      lea     gfxlib,a1
  9.      moveq     #0,d0
  10.      move.l  4.w,a6
  11.      jsr     -$228(a6)         ; Open Graphics library
  12.      tst     d0
  13.      beq     error
  14.      move.l  D0,gfxbse
  15.  
  16.     move.l #deadptr,d0
  17.     move.w d0,sk0l
  18.     swap d0
  19.     move.w d0,sk0h
  20.                     ; generate snow-fields
  21.     lea     sprite0,a0    
  22.     move.l     #$2c002d00,d0        ; first longword
  23.     moveq     #69,d1            ; 60 sprites
  24. spr0lp    swap    d0
  25.     move.b     $dff007,d2
  26.     eor.b     d2,d0
  27.     swap     d0
  28.     
  29.     mulu d3,d3    
  30.     mulu d3,d3
  31.     mulu d3,d3
  32.     mulu d3,d3
  33.  
  34.     move.l d0,(a0)+
  35.     move.l #$10000,(a0)+
  36.     add.l #$02000200,d0    
  37.     dbra d1,spr0lp    
  38.  
  39.     move.l #sprite0,d0
  40.     move.w d0,sp0l
  41.     swap d0
  42.     move.w d0,sp0h
  43.  
  44.                 
  45.     lea     sprite1,a0    
  46.     move.l     #$2d002e00,d0        ; first longword
  47.     moveq     #69,d1            ; 60 sprites
  48. spr1lp    swap    d0
  49.     move.b     $dff007,d2
  50.     eor.b     d2,d0
  51.     swap     d0
  52.     
  53.     mulu d3,d3    
  54.     mulu d3,d3
  55.     mulu d3,d3
  56.     mulu d3,d3
  57.  
  58.     move.l d0,(a0)+
  59.     move.l #$10000,(a0)+
  60.     add.l #$03000300,d0    
  61.     dbra d1,spr1lp    
  62.  
  63.     move.l #sprite1,d0
  64.     move.w d0,sp1l
  65.     swap d0
  66.     move.w d0,sp1h
  67.  
  68.     lea     sprite2,a0    
  69.     move.l     #$2c002d00,d0        ; first longword
  70.     moveq     #69,d1            ; 60 sprites
  71. spr2lp    swap    d0
  72.     move.b     $dff007,d2
  73.     eor.b     d2,d0
  74.     swap     d0
  75.     
  76.     mulu d3,d3    
  77.     mulu d3,d3
  78.     mulu d3,d3
  79.     mulu d3,d3
  80.  
  81.     move.l d0,(a0)+
  82.     move.l #$10001,(a0)+
  83.     add.l #$04000400,d0    
  84.     dbra d1,spr2lp    
  85.  
  86.     move.l #sprite2,d0
  87.     move.w d0,sp2l
  88.     swap d0
  89.     move.w d0,sp2h
  90.  
  91.                 
  92.     lea     sprite3,a0    
  93.     move.l     #$2c002d00,d0        ; first longword
  94.     moveq     #69,d1            ; 60 sprites
  95. spr3lp    swap    d0
  96.     move.b     $dff007,d2
  97.     eor.b     d2,d0
  98.     swap     d0
  99.     
  100.     mulu d3,d3    
  101.     mulu d3,d3
  102.     mulu d3,d3
  103.     mulu d3,d3
  104.  
  105.     move.l d0,(a0)+
  106.     move.l #$10001,(a0)+
  107.     add.l #$03000300,d0    
  108.     dbra d1,spr3lp    
  109.  
  110.     move.l #sprite3,d0
  111.     move.w d0,sp3l
  112.     swap d0
  113.     move.w d0,sp3h
  114.  
  115.     move.l #name+80,d0
  116.      move.w d0,bl0l
  117.     swap    d0
  118.     move.w d0,bl0h
  119.  
  120.      move.l  #logo,d0        ; Store screen address in
  121.      move.w  d0,pl0l            ; Copper list
  122.      swap    d0
  123.      move.w  d0,pl0h
  124.     swap    d0
  125.     add.l     #3920,d0
  126.     move.w     d0,pl1l
  127.     swap    d0
  128.     move.w    d0,pl1h
  129.     swap     d0
  130.     add.l     #3920,d0
  131.     move.w     d0,pl2l
  132.     swap    d0
  133.     move.w    d0,pl2h
  134.     swap     d0
  135.     add.l     #3920,d0
  136.     move.w     d0,pl3l
  137.     swap    d0
  138.     move.w    d0,pl3h
  139.     swap     d0
  140.     add.l    #3920,d0
  141.  
  142.     
  143.     lea topcols,a1
  144.     move.l d0,a0
  145.     move.w #$180,d0
  146.     moveq #15,d1
  147. toplp    move.w d0,(a1)+
  148.     move.w (a0)+,(a1)+
  149.     addq.w #2,d0
  150.     dbra d1,toplp
  151.  
  152.  
  153.     bsr mt_init
  154.  
  155.  
  156.      move.l  #piccy,d0        ; Store screen address in
  157.      move.w  d0,mp0l            ; Copper list
  158.      swap    d0
  159.      move.w  d0,mp0h
  160.     swap    d0
  161.     add.l     #6440,d0
  162.     move.w     d0,mp1l
  163.     swap    d0
  164.     move.w    d0,mp1h
  165.     swap     d0
  166.     add.l     #6440,d0
  167.     move.w     d0,mp2l
  168.     swap    d0
  169.     move.w    d0,mp2h
  170.     swap     d0
  171.     add.l     #6440,d0
  172.     move.w     d0,mp3l
  173.     swap    d0
  174.     move.w    d0,mp3h
  175.     swap     d0
  176.     add.l    #6440,d0
  177.     move.w     d0,mp4l
  178.     swap     d0
  179.     move.w    d0,mp4h
  180.     swap    d0
  181.     add.l     #6440,d0
  182.  
  183.     
  184.     lea botcols,a1
  185.     move.l d0,a0
  186.     move.w #$180,d0
  187.     moveq #31,d1
  188. botlp    move.w d0,(a1)+
  189.     move.w (a0)+,(a1)+
  190.     addq.w #2,d0
  191.     dbra d1,botlp
  192.  
  193.      move.l  #first,d0        ; Store screen address in
  194.      move.w  d0,zl0l            ; Copper list
  195.      swap    d0
  196.      move.w  d0,zl0h
  197.     swap    d0
  198.     add.l     #4200,d0
  199.     move.w     d0,zl1l
  200.     swap    d0
  201.     move.w    d0,zl1h
  202.     swap     d0
  203.     add.l     #4200,d0
  204.     move.w     d0,zl2l
  205.     swap    d0
  206.     move.w    d0,zl2h
  207.     swap     d0
  208.     add.l     #4200,d0
  209.     move.w     d0,zl3l
  210.     swap    d0
  211.     move.w    d0,zl3h
  212.     swap     d0
  213.     add.l    #4200,d0
  214.     move.w     d0,zl4l
  215.     swap     d0
  216.     move.w    d0,zl4h
  217.     swap    d0
  218.     add.l     #4200,d0
  219.  
  220.     
  221.     lea fcols,a1
  222.     move.l d0,a0
  223.     move.w #$180,d0
  224.     moveq #31,d1
  225. fotlp    move.w d0,(a1)+
  226.     move.w (a0)+,(a1)+
  227.     addq.w #2,d0
  228.     dbra d1,fotlp
  229.  
  230.      move.l  gfxbse,a6        ; Set up copper list
  231.      add.l    #$32,a6
  232.      move.w  #$80,$dff096
  233.      move.l  (a6),oldcpr
  234.      move.l  #firstcr,(a6)
  235.      move.w  #$8080,$dff096
  236.      move.w  #$8010,$dff09a
  237.      move.l  $6c.w,old
  238.     move.l  $6c.w,old2
  239.     move.l  #new2,$6c.w
  240.  
  241. WAIT:    btst    #6,$bfe001        ; Test for left mousebutton
  242.      bne.s     wait
  243.  
  244.  
  245.     ; and heres a nice little cheat.
  246.  
  247.     moveq #4,d3
  248. fadelp    
  249.  
  250.     
  251.     move.w #8000,d6
  252. pause    mulu d5,d5        ; yes i know processor timings dont work in
  253.                 ; faster machines, but do you really want
  254.                 ; to run this demo on a 68030 amiga?????
  255.  
  256.     dbra d6,pause    
  257.     
  258.     
  259.     lea fcols+2,a0
  260.     moveq #31,d0
  261. falp1    move.w (a0),d1
  262.     lsr.w #1,d1
  263.     and.w #%011101110111,d1
  264.     move.w d1,(a0)
  265.     addq.l #4,a0
  266.     dbra d0,falp1
  267.         
  268.      dbra d3,fadelp
  269.  
  270.  
  271.  
  272.     move.l gfxbse,a6
  273.     add.l     #$32,a6
  274.      move.l  #newcpr,(a6)
  275.      move.w  #$8080,$dff096
  276.      move.w  #$8010,$dff09a
  277.      move.l  #new,$6c.w
  278.  
  279. wait2     btst #10,$dff016
  280.     bne.s wait2
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.      move.l  old,$6c.w        ; Return to workbench
  288.      move.l  gfxbse,a6        ; copper list
  289.      add.l    #$32,a6
  290.      move.w    #$0080,$dff096
  291.      move.l  oldcpr,(a6)
  292.      move.w  #$8080,$dff096
  293.     
  294.     move.l    gfxbse,a1        ; Close graphics library
  295.     move.l  $4.w,a6
  296.     jsr     -$19e(a6)
  297.     bsr mt_end
  298.  
  299. error:  
  300.     
  301.     move.l 4.w,a6
  302.     jsr -138(a6)            ; CALLEXEC PERMIT()
  303.  
  304.     clr.l  d0            ; exit routine
  305.      rts
  306.  
  307. new2:    movem.l d0-d7/a0-a6,-(sp)
  308.     and.w    #$10,$dff01e
  309.     beq.s    out2
  310.     move.w    #$10,$dff09c
  311.  
  312.     bsr mt_music
  313.  
  314. out2:    movem.l (sp)+,d0-d7/a0-a6
  315.      dc.w     $4ef9            ; jsr instruction
  316. old2:     dc.l     0            
  317.  
  318. new:     movem.l d0-d7/a0-a6,-(sp)    ; save all registers
  319.      and.w     #$10,$dff01e            ; check if it is 
  320.      beq.s     out
  321.      move.w     #$10,$dff09c
  322.  
  323.     bsr starmov
  324.  
  325.     bsr.s scroll
  326.     bsr mt_music
  327.  
  328.  
  329.     bsr aniami
  330.  
  331.     bsr robin
  332.     bsr snow1
  333.     bsr sle1
  334.     bsr flashit
  335.  
  336.     bsr barqual
  337. out:    movem.l (sp)+,d0-d7/a0-a6
  338.      dc.w     $4ef9            ; jsr instruction
  339. old:     dc.l     0            
  340.  
  341.  
  342. prnchr: lea     font,a0
  343.     lea     logo+40,a1            ; destination
  344.     sub.b     #32,d0            ; de-ascii
  345.     mulu     #512,d0            ; find position in font
  346.     add.l     d0,a0
  347.     moveq     #3,d1
  348. lp1    moveq     #31,d2
  349.     move.l     a1,a2
  350. lp2    move.l    (a0)+,(a2)
  351.     add.l #44,a2
  352.     dbra d2,lp2
  353.     add.l #3920,a1
  354.     dbra d1,lp1
  355.     rts
  356.  
  357. SCROLL    cmp.b #0,scrlctd
  358.     beq.s scrl2
  359.     subq.b #1,scrlctd
  360.     rts
  361. scrl2    bsr.s blitscr
  362.     move.b scrlptr,d0
  363.     subq.b #1,d0
  364.     beq.s zero
  365.      move.b d0,scrlptr
  366.     rts
  367. zero    move.b #8,scrlptr
  368.     move.l txtptr,a0
  369.     moveq #0,d0
  370.     move.b (a0)+,d0
  371.     cmp.b #0,d0
  372.      bne.s charok
  373.     move.l #text,txtptr
  374.     bra.s zero
  375. charok    cmp.b #254,d0
  376.     bne.s notpuse
  377.     move.b #80,scrlctd
  378.     move.l a0,txtptr
  379.     moveq #32,d0
  380.     bsr prnchr
  381.     rts
  382. notpuse move.l a0,txtptr
  383.     bsr prnchr
  384.     rts    
  385.  
  386.  
  387.  
  388. blitscr    
  389.     moveq     #3,d0
  390.     lea     logo,a0
  391.  
  392. blitlp    btst     #14,$dff002
  393.     bne.s     blitlp
  394.     move.l     a0,$dff050
  395.     move.l     a0,a1
  396.     subq.l     #2,a1
  397.     move.l     a1,$dff054
  398.     clr.l     $dff064
  399.     move.l     #-1,$dff044
  400.     move.w     #%1101100111110000,$dff040
  401.     clr.w    $dff042
  402.     move.w    #22+33*64,$dff058
  403.     add.l     #3920,a0
  404.     dbra d0,blitlp
  405. blitfin    btst     #14,$dff002
  406.     bne.s    blitfin    
  407.     rts
  408.  
  409. barqual 
  410.     
  411.     
  412.     
  413.     move.w chn1,d0    
  414.     lsr.w #1,d0
  415.     move.w d0,chn1
  416.  
  417.     move.w chn2,d0    
  418.     lsr.w #1,d0
  419.     move.w d0,chn2
  420.  
  421.     move.w chn3,d0    
  422.     lsr.w #1,d0
  423.     move.w d0,chn3
  424.  
  425.     move.w chn4,d0    
  426.     lsr.w #1,d0
  427.     move.w d0,chn4
  428.  
  429.     rts
  430.  
  431.  
  432. starmov    bsr.s      move0
  433.     bsr.s     move1
  434.     bsr.s     move2
  435.     bsr     move3
  436.     rts
  437.  
  438. move0    lea sprite0+69*8,a0
  439.     moveq #68,d0
  440.     move.b 1(a0),saveval
  441. mv0lp    move.b -7(a0),1(a0)
  442.     subq.l #8,a0
  443.     dbra d0,mv0lp
  444.     move.b    saveval,d0
  445.     move.b $dff007,d1
  446.     eor.b d1,d0    
  447.     move.b d0,1(a0)
  448.     rts
  449.  
  450. move1    lea sprite1+69*8,a0
  451.     moveq #68,d0
  452.     move.b 1(a0),saveval
  453. mv1lp    move.b -7(a0),1(a0)
  454.     subq.l #8,a0
  455.     dbra d0,mv1lp
  456.     move.b    saveval,d0
  457.     move.b $dff007,d1
  458.     eor.b d1,d0    
  459.     move.b d0,1(a0)
  460.     rts
  461.  
  462.  
  463. move2    lea sprite2+69*8,a0
  464.     moveq #68,d0
  465.     move.b 1(a0),saveval
  466. mv2lp    move.b -7(a0),1(a0)
  467.     subq.l #8,a0
  468.     dbra d0,mv2lp
  469.     move.b    saveval,d0
  470.     move.b $dff007,d1
  471.     eor.b d1,d0    
  472.     move.b d0,1(a0)
  473.     rts
  474.  
  475. move3    lea sprite3+69*8,a0
  476.     moveq #68,d0
  477.     move.b 1(a0),saveval
  478. mv3lp    move.b -7(a0),1(a0)
  479.     subq.l #8,a0
  480.     dbra d0,mv3lp
  481.     move.b    saveval,d0
  482.     move.b $dff007,d1
  483.     eor.b d1,d0    
  484.     move.b d0,1(a0)
  485.     rts
  486.  
  487. aniami    bchg #0,amion
  488.     beq.s goami
  489.     rts
  490. goami
  491.     move.b amiset,d0
  492.     cmp.b #0,d0
  493.     bne.s notfr1
  494.     bra.s amifr1
  495. notfr1    cmp.b #1,d0
  496.     bne.s notfr2
  497.     bra.s amifr2
  498. notfr2    cmp.b #2,d0
  499.     bne.s amifr4
  500.     bra.s amifr3
  501.  
  502. amifr2  lea ami2,a0
  503.      bsr.s plami
  504.     move.b #2,amiset
  505.     rts
  506. amifr3
  507.     lea ami3,a0
  508.     bsr.s plami
  509.     move.b #3,amiset
  510.     rts
  511. amifr4
  512.     lea ami4,a0
  513.     bsr.s plami
  514.     move.b #0,amiset
  515.     rts
  516.  
  517. amifr1    lea ami1,a0
  518.  
  519. plami
  520.     lea piccy+20,a1
  521.     moveq #4,d0        ; 5 bitplanes
  522. af1l1    move.l a1,a2        ; keep a1 clean
  523.     moveq #31,d1        ; 32 lines
  524. af1l2    move.l (a0)+,(a2)+    
  525.     move.l (a0)+,(a2)    
  526.     add.l #36,a2
  527.     dbra d1,af1l2
  528.     add.l #6440,a1
  529.     dbra d0,af1l1
  530.     move.b #1,amiset
  531.     rts
  532.     
  533. robin    move.w chn1,d0
  534.     cmp.w #%1111,d0
  535.     beq.s robfr4
  536.     cmp.b #%111,d0
  537.      beq.s robfr3
  538.     cmp.b #%11,d0
  539.     beq.s robfr2
  540.     cmp.b #%1,d0
  541.     beq.s robfr1
  542.     rts
  543. robfr1    lea rob1,a0
  544.     bra.s robon
  545. robfr2    lea rob2,a0
  546.     bra.s robon
  547. robfr3    lea rob3,a0
  548.     bra.s robon
  549. robfr4    lea rob4,a0
  550.  
  551.  
  552. robon    
  553.     lea piccy+8+40*23,a1
  554.     moveq #4,d0        ; 5 bitplanes
  555. ro1l1    move.l a1,a2        ; keep a1 clean
  556.     moveq #31,d1        ; 32 lines
  557. ro1l2    move.l (a0)+,(a2)+    
  558.     add.l #36,a2
  559.     dbra d1,ro1l2
  560.     add.l #6440,a1
  561.     dbra d0,ro1l1
  562.     rts
  563.  
  564.  
  565. snow1    move.w chn3,d0
  566.     cmp.w #%1111,d0
  567.     beq.s sn1fr4
  568.     cmp.b #%111,d0
  569.      beq.s sn1fr3
  570.     cmp.b #%11,d0
  571.     beq.s sn1fr2
  572.     cmp.b #%1,d0
  573.     beq.s sn1fr1
  574.     rts
  575. sn1fr1    lea sno11,a0
  576.     bra.s sn1on
  577. sn1fr2    lea sno12,a0
  578.     bra.s sn1on
  579. sn1fr3    lea sno13,a0
  580.     bra.s sn1on
  581. sn1fr4    lea sno14,a0
  582.  
  583.  
  584. sn1on    
  585.     lea piccy+4+40*74,a1
  586.     moveq #4,d0        ; 5 bitplanes
  587. sn1l1    move.l a1,a2        ; keep a1 clean
  588.     moveq #31,d1        ; 32 lines
  589. sn1l2    move.w (a0)+,(a2)+    
  590.     addq.l #2,a0
  591.     add.l #38,a2
  592.     dbra d1,sn1l2
  593.     add.l #6440,a1
  594.     dbra d0,sn1l1
  595.     rts
  596.  
  597.  
  598.  
  599.  
  600. sle1    move.w chn4,d0
  601.     cmp.w #%1111,d0
  602.     beq.s sl1fr4
  603.     cmp.b #%111,d0
  604.      beq.s sl1fr3
  605.     cmp.b #%11,d0
  606.     beq.s sl1fr2
  607.     cmp.b #%1,d0
  608.     beq.s sl1fr1
  609.     rts
  610. sl1fr1    lea sley1,a0
  611.     bra.s sl1on
  612. sl1fr2    lea sley2,a0
  613.     bra.s sl1on
  614. sl1fr3    lea sley3,a0
  615.     bra.s sl1on
  616. sl1fr4    lea sley4,a0
  617.  
  618.  
  619. sl1on    
  620.     lea piccy+12+40*15,a1
  621.     moveq #4,d0        ; 5 bitplanes
  622. sl1l1    move.l a1,a2        ; keep a1 clean
  623.     moveq #31,d1        ; 32 lines
  624. sl1l2    move.l (a0)+,(a2)+    
  625.     add.l #36,a2
  626.     dbra d1,sl1l2
  627.     add.l #6440,a1
  628.     dbra d0,sl1l1
  629.     rts
  630.  
  631. flashit    move.l flashptr,a0
  632.     move.w (a0)+,d0
  633.     cmp.w #$ffff,d0
  634.     bne.s flash2
  635.     move.l #flashdata,flashptr
  636.     bra.s flashit
  637. flash2    move.l a0,flashptr
  638.     move.w d0,flcol
  639.     rts
  640.  
  641.  
  642. amion dc.b 0
  643. amiset    dc.b    0
  644. saveval    dc.b     0
  645. scrlptr    dc.b    6
  646. scrlctd    dc.b    0
  647.     even
  648. txtptr    dc.l     text
  649. text    dc.b     "                         IT'S CHRISTMAS TIME AND TIME FOR A FAIRLY SEASONAL AMIGA COMPUTING DEMO. "
  650.     DC.B     " THIS DEMO EVOLVED IN THE PRESENCE OF JOLYON RALPH. THE NICE PICCY BELOW WAS"
  651.     DC.B    " DRAWN BY RUSSEL WARK AND HE ALSO DREW THIS FONT.  "
  652.     dc.b    " FIRSTLY I "
  653.     DC.B     "MUST APOLOGISE TO MY FAN FOR NOT DOING A DEMO LAST MONTH, BUT THINGS GOT TOO BUSY! SORRY! "
  654.     dc.b     "     SPECIAL MESSAGES AND ADVERTISMENTS....  HAVE YOU GOT A MODEM? PHONE THE BEST BBS IN THE WHOLE "
  655.     DC.B     "WORLD,          MAX!     ",254,"  PHONE MAX ON (0905) 52536/56610/57822/754127/754151 NOW!   ALL SPEEDS FROM 300 BAUD (SLOOOOOOW) "
  656.     DC.B     "TO MEGA-SUPER-DOOPER FAST 19.2K BAUD WITH HST AND MNP LEVEL 5 ERROR CORRECTION (LOG ON AND SAY - I SAW THIS ADVERT "
  657.     DC.B     " GET ON AND BOOGY DOWN TO THE HOTTEST BOARD THIS SIDE OF THE UKRAINE. "
  658.     dc.b     " SORRY TO MARK FOR FORGETTING YOU IN THE LAST DEMO. ERM. SORRY I'VE FORGOTTEN WHAT YOU ASKED ME TO SAY.  PERHAPS "
  659.     DC.B     "THE NEXT ONE.  " 
  660.     DC.B     "   MESSAGE TO ALL YOU ST OWNERS OUT THERE...  THE SECRET IS TO BANG THE ROCKS TOGETHER...    "
  661.     DC.B     "OH YES, THE CREDITS... CODE CODED BY THE ONE AND ONLY (EXCEPT FOR ALL THE OTHERS) ---- JOLYON RALPH ----   "
  662.     DC.B     "AND NOW IT'S MY GOOD OLE BUDDY ---- RUSS WARK ---- WRITING INTO THE ETHER..  WATCH OUT FOR HIS WEIRD CARTOONS IN THE MAGAZINE - SMUT - "
  663.  
  664.     dc.b    " HI THIS IS RUSS HERE.  I DREW ALL THE GRAPHICS FOR THIS GREAT DEMO, AND I'M ALWAYS AVAILABLE FOR OTHER GRAPHIC WORK. "
  665.     DC.B    "JUST A FEW PERSONAL GREETS: HI TO... NADEEM (FLASH GIT), DEREK LEIGH-GILCHRIST (SEE YOU SOON), KEVIN COLLIER (TOO LATE FOR AN XMAS TUNE NOW), "
  666.     DC.B     "STEVE HOGG (HOWAY MAN! YA GEET GEORDIE!!!), ADAM LUCAS (HAVE YOU HAD ANOTHER HAIRCUT YET?), RICHARD APLIN (THE LAST ONE TO THE 'OFFY IS A WOMAN!! OH, AND "
  667.     DC.B     "DOUBLE DRAGON II LOOKS CANNY...), JOBY WOOD (DON'T FALL ASLEEP AT THE COMMODORE SHOW), GARETH (I WANNA SEE YOUR PARTY TRICKS...)   (YUUUK. THEY'RE DISGUSTING!  - JOLYON) "
  668.     DC.B    "RASIKA (I WOULDN'T MIND MY VIDEO BACK SOMETIME...)  (AND MINE! - JOLYON). HELLO TO EVERYONE AT CROYDON COLLEGE (SELHURST CENTRE)... "
  669.     DC.B     " AND A REMINDER TO...    TIM      YOU OWE ME FIVE DISKS FROM A YEAR AGO. PAY UP OR DIE!!!!!    "
  670.     DC.B     " WELL DONE TO RED SECTOR FOR THE BEST MEGADEMO SO FAR.. IT WAS AWESOME...       TOMAS DAHLGREN - YOUR MUSIC IS MEGA     "
  671.     DC.B     " MESSAGE TO MATTIAS - TRY NOT TO HAVE TOO MANY MORE 3000 POUND PHONEBILLS!   "
  672.     DC.B    " GOODBYE AND SO LONG - RUSS...    "
  673.     DC.B    "  OK ITS JOLYON BACK ON THE KEYS... "
  674.  
  675.  dc.b     "FIRST A MESSAGE TO ALL YOU BORING OS PROGRAMMERS OUT THERE "
  676.  dc.b     "  DON'T COMPLAIN AT ME IF YOU DON'T LIKE MY CODE. I CODE FOR FUN "
  677.  DC.B    " IF COMMODORE FINALLY RELEASE A BUG-FREE OS THAT'S FAST ENOUGH TO USE THEN "
  678.  DC.B     "I'LL USE IT (WE DON'T RE-INVENT THE WHEEL FOR FUN YOU KNOW, WE WRITE OUR OWN LINE "
  679.  DC.B     "ROUTINES, SCREEN ROUTINES, ETC BECAUSE THE ROM ROUTINES ARE SO SLOW!)  "
  680.  DC.B    "I DON'T LIKE THE IDEA OF SOMEONE TELLING ME WHICH WAY TO WRITE MY CODE. I'LL WRITE IT HOWEVER I LIKE, AND I LIKE HITTING THE HARDWARE "
  681.  DC.B     "  DAVE PARKINSON - IF YOU REALLY THINK YOU COULD WRITE A FAST ARCADE GAME WITH MULTITASKING "
  682.  DC.B     "THEN GO AHEAD AND WRITE ONE, I'LL GUARANTEE IT WILL BE A PILE OF JUNK. CAN YOU SERIOUSLY TELL US "
  683.  DC.B    "THAT THE AMIGA'S MULTITASKING CAN LOAD IN GRAPHICS FOR THE NEXT LEVEL WHILE THE GAME IS PLAYING. "
  684.  DC.B    "IF YOU'VE GOT ENOUGH RASTER TIME LEFT TO DO THAT, THE GAME MUST BE REAL CRAP!    FOR FAST ARCADE GAMES "
  685.  DC.B    "YOU MUST DITCH THE OS. NO QUESTION.    OK?   "
  686.  
  687.  DC.B     "ONE FINAL CUTTING COMMENT...  IF YOU HAD DITCHED MULTITASKING IN BBC EMULATOR IT WOULD HAVE BEEN MUCH EASIER "
  688.  DC.B    "FOR YOU TO MAKE THE EMULATOR READ BBC FORMAT DISKS, MAKING YOUR BBC EMULATOR ACTUALLY RATHER USEFUL. "
  689.  
  690.  dc.b "AND NOW I WILL TELL YOU THE REAL SECRETS OF PROGRAMMING THIS "
  691.  dc.b "WONDERFUL MACHINE, THE SORT OF FACTS THAT NOT EVEN MY ARTICLES "
  692.  dc.b "COULD EXPOSE. FIRSTLY. LEARN TO USE 68000 WELL. LEARN THE INSTRUCTIONS VERY WELL. TRY USING MOVE.W, IT'S A VERY NICE INSTRUCTION "
  693.  dc.b "(MY FAVOURITE). REGISTERS ARE USEFUL TOO. A0 AND D0 ARE MY PERSONAL FAVOURITES, ALTHOUGH I QUITE LIKE D1 TOO. DON`T TOUCH THE "
  694.  dc.b "STACK WITH A BARGE POLE, AND IF YOU DO TOUCH IT WITH A BARGE "
  695.  dc.b "POLE, REMEMBER TO REMOVE THE POLE BEFORE YOU EXIT. IF YOU EVER RUN OUT OF REGISTERS, REMEMBER "
  696.  dc.b "THAT YOU MAY HAVE TO USE SOME OF THEM TWICE. IT WAS VERY THOUGHTLESS OF MOTOROLA TO GIVE US A CHIP THAT COULD ACCESS 16 MEGABYTES "
  697.  dc.b "BUT ONLY TO GIVE US A HANDFULL OF REGISTERS TO ACCESS IT. "
  698.  dc.b "REMEMBER THAT ASSEMBLING YOUR FILE BEFORE EXECUTION IS THE NORM "
  699.  dc.b "NOWDAYS.     AND NOW A SHORT WORD FROM MY GOOD FRIEND RUSS... "
  700.  dc.b "    HI.    YES RUSS, THAT WAS A VERY SHORT WORD. WELL DONE. AND "
  701.  dc.b "COMING UP NOW SOME SPECIAL MESSAGES.... HEY DEREK, IGNORE "
  702.  dc.b "THE REVIEWS, I THOUGHT YOUR GAME (BATTLE VALLEY) WAS VERY GOOD. "
  703.  dc.b "TO MARK IN BELFAST. I HOPE "
  704.  dc.b "THE CGA CARD WORKED. THANKS FOR ALL YOUR HELP. TO JON "
  705.  dc.b "OF MAX. SORRY `BOUT THE OTHER DEMOS, HOPE THIS ADVERT MAKES UP "
  706.  dc.b "FOR IT ALL... TO STEVE.... MONEY SOON I PROMISE.... TO "
  707.  dc.b "KEVIN.... SMART MUSIC DESERVES A SMART MUSICDEMO. I`LL SEE WHAT I "
  708.  dc.b "CAN CONJURE UP... TO DAVE FROM 17 BIT. WHY HAVEN`T I HEARD FROM "
  709.  dc.b "YOU IN SUCH A LONG TIME? TO MY SISTER. LOOK AT ALL THE TROUBLE "
  710.  dc.b "YOUR SPURIOUS COMMENTS ABOUT POLAND CAUSED. THE WHOLE EASTERN "
  711.  dc.b "BLOCK IS NOW IN TURMOIL DUE TO YOUR INSENSITIVE REMARKS. TO "
  712.  dc.b "MY CATS. MEEEOOOWW. AND NOW ANOTHER FREE (ERHM. DONATIONS "
  713.  dc.b "WELCOME) ADVERTISMENT: THE BEST COMPUTER SHOP IN THE WHOLE "
  714.  dc.b "WORLD. NOT ONLY DO THEY SELL CHEAP COMPUTER HARDWARE AND SOFTWARE, BUT EVERY PURCHASE BRINGS THE CUSTOMER 5 YEARS GOOD LUCK "
  715.  dc.b "AND GUARANTEED PROTECTION FROM ALL KNOWN VAMPIRES. WHO AM I "
  716.  dc.b "TALKING ABOUT? SABRE COMPUTER CENTRE, IN-SHOPS, CROYDON. ASK "
  717.  dc.b "FOR TONY, AND SAY ""I`VE BEEN STUPID ENOUGH TO READ ALL THE SCROLLY "
  718.  dc.b "MESSAGE IN THAT BORING AMIGA COMPUTING CHRISTMAS DEMO AND I SAW THE ADVERT AND CAME TO YOUR SHOP"", AND YOU'LL GET A MASSIVE "
  719.  dc.b "0.5% DISCOUNT ON ANY PURCHASE OVER 4000 QUID. "
  720.  dc.b "   SERIOUSLY NOW, SEE TONY IF YOU WANT A GOOD DEAL.    OH, AND TONY,  THANKS FOR LENDING ME THE ARCHIMEDES, I STILL THINK "
  721.  DC.B "THE AMIGA IS A NICER COMPUTER  (MAY NOT BE AS FAST, BUT IT'S A LOT MORE FUN TO PLAY WITH)....   "
  722.  DC.B "  OH WELL, I'VE RUN OUT OF THINGS TO SAY AGAIN.   PERHAPS WE WILL MEET AGAIN IN SOME DISTANT SCROLLY-MESSAGE, PERHAPS NOT. "
  723.  DC.B " WELL, FOR THE MOMENT, IT'S JOLYON RALPH SAYING.   BYEBYE AND HAVE FUN KIDDIES....       ",0 
  724.  
  725.  
  726.  
  727.     DC.B     0
  728.  
  729. deadptr dc.l    0            ; kill da pointer
  730.  
  731. oldcpr: dc.l    0            ; Workbench copperlist
  732.  
  733. firstcr    dc.w     $100,$6200,$102,$0,$104,0,$108,0,$10a,0
  734.      dc.w     $92,$38,$94,$d0,$8e,$7081,$90,$d4c1,$e0
  735. zl0h:     dc.w    0,$e2
  736. zl0l:     dc.w    0,$e4
  737. zl1h:     dc.w     0,$e6
  738. zl1l:     dc.w    0,$e8
  739. zl2h:    dc.w    0,$ea
  740. zl2l:     dc.w    0,$ec
  741. zl3h:    dc.w    0,$ee    
  742. zl3l:    dc.w    0,$f0
  743. zl4h:    dc.w    0,$f2
  744. zl4l:    dc.w     0,$120
  745. sk0h:    dc.w    0,$122
  746. sk0l:    dc.w    0
  747. fcols    ds.w    64
  748.     dc.w     $9c,$8010,$ffff,$fffe
  749.  
  750.     
  751. newcpr:    dc.w     $100,$4200,$102,$0,$104,0,$108,4,$10a,4
  752.      dc.w     $92,$38,$94,$d0,$8e,$2c81,$90,$2cc1,$e0
  753. pl0h:     dc.w    0,$e2
  754. pl0l:     dc.w    0,$e4
  755. pl1h:     dc.w     0,$e6
  756. pl1l:     dc.w    0,$e8
  757. pl2h:    dc.w    0,$ea
  758. pl2l:     dc.w    0,$ec
  759. pl3h:    dc.w    0,$ee    
  760. pl3l:    dc.w    0,$120
  761. sp0h:    dc.w    0,$122
  762. sp0l:    dc.w    0,$124
  763. sp1h:    dc.w    0,$126
  764. sp1l:    dc.w    0,$128
  765. sp2h:    dc.w    0,$12a
  766. sp2l:    dc.w    0,$12c
  767. sp3h:    dc.w    0,$12e
  768. sp3l:    dc.w    0
  769. topcols    ds.w    32
  770.     dc.w    $180,0,$182,0
  771.  
  772.  
  773.     dc.w $3009,$fffe,$186,$1
  774.     dc.w $3109,$fffe,$186,$2
  775.     dc.w $3209,$fffe,$186,$3
  776.     dc.w $3309,$fffe,$186,$4
  777.     dc.w $3409,$fffe,$186,$5
  778.     dc.w $3509,$fffe,$186,$6
  779.     dc.w $3609,$fffe,$186,$7
  780.     dc.w $3709,$fffe,$186,$8
  781.     dc.w $3809,$fffe,$186,$9
  782.     dc.w $3909,$fffe,$186,$a
  783.  
  784.     dc.w $4109,$fffe,$186,$1a
  785.     dc.w $4209,$fffe,$186,$3a
  786.     dc.w $4309,$fffe,$186,$4a
  787.     dc.w $4409,$fffe,$186,$5a
  788.     dc.w $4509,$fffe,$186,$6a
  789.     dc.w $4609,$fffe,$186,$7a
  790.     dc.w $4709,$fffe,$186,$8a
  791.     dc.w $4809,$fffe,$186,$9a
  792.     dc.w $4909,$fffe,$186,$aa
  793.  
  794.  
  795.     dc.w $7709,$fffe,$108,0,$10a,0,$104,%100100
  796.  
  797.     dc.w $7809,$fffe,$100,$5200
  798.     dc.w $e0
  799. mp0h    dc.w 0,$e2
  800. mp0l    dc.w 0,$e4
  801. mp1h    dc.w 0,$e6
  802. mp1l     dc.w 0,$e8
  803. mp2h    dc.w 0,$ea
  804. mp2l    dc.w 0,$ec
  805. mp3h    dc.w 0,$ee
  806. mp3l    dc.w 0,$f0
  807. mp4h    dc.w 0,$f2
  808. mp4l    dc.w 0
  809. botcols    ds.w    64
  810.  
  811.  
  812.  
  813.     dc.w $f009,$fffe
  814.     dc.w $ffdf,$fffe
  815.  
  816.     dc.w $1609,$fffe,$100,$1200,$e0
  817. bl0h    dc.w    0,$e2
  818. bl0l    dc.w    0,$182
  819. flcol    dc.w    0
  820.     
  821.     dc.w $1709,$fffe,$180,$1,$9c,$8010
  822.     dc.w $1809,$fffe,$180,$1
  823.     dc.w $1909,$fffe,$180,$2
  824.     dc.w $1a09,$fffe,$180,$2
  825.     dc.w $1b09,$fffe,$180,$3
  826.     dc.w $1c09,$fffe,$180,$3
  827.     dc.w $1d09,$fffe,$180,$4
  828.     dc.w $1e09,$fffe,$180,$5
  829.     dc.w $1f09,$fffe,$180,$6
  830.     dc.w $2009,$fffe,$180,$7
  831.     dc.w $2109,$fffe,$180,$9
  832.     dc.w $2209,$fffe,$180,$b
  833.     dc.w $2309,$fffe,$180,$9
  834.     dc.w $2409,$fffe,$180,$7
  835.     dc.w $2509,$fffe,$180,$6
  836.     dc.w $2609,$fffe,$180,$5
  837.     dc.w $2709,$fffe,$180,$4
  838.     dc.w $2809,$fffe,$180,$3
  839.     dc.w $2909,$fffe,$180,$3
  840.     dc.w $2a09,$fffe,$180,$2
  841.     dc.w $2b09,$fffe,$180,$2
  842.     dc.w $2c09,$fffe,$180,$1
  843.  
  844.  
  845.  
  846.  
  847.  
  848.       dc.w    $ffff,$fffe         ; End copper
  849.  
  850. gfxlib: dc.b     "graphics.library",0    ; library name
  851.                     ; yes I know you can use
  852.                     ; the cop2ptr for your
  853.                     ; copperlist and return
  854.                     ; to cop1ptr for workbench
  855.                     ; but this is so neat.
  856.  
  857.  
  858. flashdata ds.w 400
  859.     dc.w $444,$888,$ccc,$fff,$eee,$ddd,$ccc,$bbb
  860.     dc.w $aaa,$999,$888,$777,$666,$555,$444,$333
  861.     dc.w $222,$111,$000,$ffff
  862.  
  863.  
  864.      even
  865.  
  866.  
  867. flashptr dc.l flashdata
  868.  
  869. gfxbse: dc.l 0    
  870.  
  871. dummy    dc.l 0                
  872.  
  873. chn1 dc.w 0
  874. chn2 dc.w 0
  875. chn3 dc.w 0
  876. chn4 dc.w 0
  877. eq1p dc.w 381
  878. eq2p dc.w 381
  879. eq3p dc.w 381
  880. eq4p dc.w 381
  881. eqtab dcb.w 40
  882.  
  883.  
  884.  
  885. mt_init:lea    mt_data,a0
  886.     add.l    #$03b8,a0
  887.     moveq    #$7f,d0
  888.     moveq    #0,d1
  889. mt_init1:
  890.     move.l    d1,d2
  891.     subq.w    #1,d0
  892. mt_init2:
  893.     move.b    (a0)+,d1
  894.     cmp.b    d2,d1
  895.     bgt.s    mt_init1
  896.     dbf    d0,mt_init2
  897.     addq.b    #1,d2
  898.  
  899. mt_init3:
  900.     lea    mt_data,a0
  901.     lea    mt_sample1(pc),a1
  902.     asl.l    #8,d2
  903.     asl.l    #2,d2
  904.     add.l    #$438,d2
  905.     add.l    a0,d2
  906.     moveq    #$1e,d0
  907. mt_init4:
  908.     move.l    d2,(a1)+
  909.     moveq    #0,d1
  910.     move.w    42(a0),d1
  911.     asl.l    #1,d1
  912.     add.l    d1,d2
  913.     add.l    #$1e,a0
  914.     dbf    d0,mt_init4
  915.  
  916.     lea    mt_sample1(PC),a0
  917.     moveq    #0,d0
  918. mt_clear:
  919.     move.l    (a0,d0.w),a1
  920.     clr.l    (a1)
  921.     addq.w    #4,d0
  922.     cmp.w    #$7c,d0
  923.     bne.s    mt_clear
  924.  
  925.     clr.w    $dff0a8
  926.     clr.w    $dff0b8
  927.     clr.w    $dff0c8
  928.     clr.w    $dff0d8
  929.     clr.l    mt_partnrplay
  930.     clr.l    mt_partnote
  931.     clr.l    mt_partpoint
  932.  
  933.     move.b    mt_data+$3b6,mt_maxpart+1
  934.     rts
  935.  
  936. ; call 'mt_end' to switch the sound off
  937.  
  938. mt_end:    clr.w    $dff0a8
  939.     clr.w    $dff0b8
  940.     clr.w    $dff0c8
  941.     clr.w    $dff0d8
  942.     move.w    #$f,$dff096
  943.     rts
  944.  
  945. ; the playroutine - call this every frame
  946.  
  947. mt_music:
  948.     addq.w    #1,mt_counter
  949. mt_cool:cmp.w    #6,mt_counter
  950.     bne.s    mt_notsix
  951.     clr.w    mt_counter
  952.     bra    mt_rout2
  953.  
  954. mt_notsix:
  955.     lea    mt_aud1temp(PC),a6
  956.     tst.b    3(a6)
  957.     beq.s    mt_arp1
  958.     lea    $dff0a0,a5        
  959.     bsr.s    mt_arprout
  960. mt_arp1:lea    mt_aud2temp(PC),a6
  961.     tst.b    3(a6)
  962.     beq.s    mt_arp2
  963.     lea    $dff0b0,a5
  964.     bsr.s    mt_arprout
  965. mt_arp2:lea    mt_aud3temp(PC),a6
  966.     tst.b    3(a6)
  967.     beq.s    mt_arp3
  968.     lea    $dff0c0,a5
  969.     bsr.s    mt_arprout
  970. mt_arp3:lea    mt_aud4temp(PC),a6
  971.     tst.b    3(a6)
  972.     beq.s    mt_arp4
  973.     lea    $dff0d0,a5
  974.     bra.s    mt_arprout
  975. mt_arp4:rts
  976.  
  977. mt_arprout:
  978.     move.b    2(a6),d0
  979.     and.b    #$0f,d0
  980.     tst.b    d0
  981.     beq    mt_arpegrt
  982.     cmp.b    #$01,d0
  983.     beq.s    mt_portup
  984.     cmp.b    #$02,d0
  985.     beq.s    mt_portdwn
  986.     cmp.b    #$0a,d0
  987.     beq.s    mt_volslide
  988.     rts
  989.  
  990. mt_portup:
  991.     moveq    #0,d0
  992.     move.b    3(a6),d0
  993.     sub.w    d0,22(a6)
  994.     cmp.w    #$71,22(a6)
  995.     bpl.s    mt_ok1
  996.     move.w    #$71,22(a6)
  997. mt_ok1:    move.w    22(a6),6(a5)
  998.     rts
  999.  
  1000. mt_portdwn:
  1001.     moveq    #0,d0
  1002.     move.b    3(a6),d0
  1003.     add.w    d0,22(a6)
  1004.     cmp.w    #$538,22(a6)
  1005.     bmi.s    mt_ok2
  1006.     move.w    #$538,22(a6)
  1007. mt_ok2:    move.w    22(a6),6(a5)
  1008.     rts
  1009.  
  1010. mt_volslide:
  1011.     moveq    #0,d0
  1012.     move.b    3(a6),d0
  1013.     lsr.b    #4,d0
  1014.     tst.b    d0
  1015.     beq.s    mt_voldwn
  1016.     add.w    d0,18(a6)
  1017.     cmp.w    #64,18(a6)
  1018.     bmi.s    mt_ok3
  1019.     move.w    #64,18(a6)
  1020. mt_ok3:    move.w    18(a6),8(a5)
  1021.     rts
  1022. mt_voldwn:
  1023.     moveq    #0,d0
  1024.     move.b    3(a6),d0
  1025.     and.b    #$0f,d0
  1026.     sub.w    d0,18(a6)
  1027.     bpl.s    mt_ok4
  1028.     clr.w    18(a6)
  1029. mt_ok4:    move.w    18(a6),8(a5)
  1030.     rts
  1031.  
  1032. mt_arpegrt:
  1033.     move.w    mt_counter(PC),d0
  1034.     cmp.w    #1,d0
  1035.     beq.s    mt_loop2
  1036.     cmp.w    #2,d0
  1037.     beq.s    mt_loop3
  1038.     cmp.w    #3,d0
  1039.     beq.s    mt_loop4
  1040.     cmp.w    #4,d0
  1041.     beq.s    mt_loop2
  1042.     cmp.w    #5,d0
  1043.     beq.s    mt_loop3
  1044.     rts
  1045.  
  1046. mt_loop2:
  1047.     moveq    #0,d0
  1048.     move.b    3(a6),d0
  1049.     lsr.b    #4,d0
  1050.     bra.s    mt_cont
  1051. mt_loop3:
  1052.     moveq    #$00,d0
  1053.     move.b    3(a6),d0
  1054.     and.b    #$0f,d0
  1055.     bra.s    mt_cont
  1056. mt_loop4:
  1057.     move.w    16(a6),d2
  1058.     bra.s    mt_endpart
  1059. mt_cont:
  1060.     add.w    d0,d0
  1061.     moveq    #0,d1
  1062.     move.w    16(a6),d1
  1063.     and.w    #$fff,d1
  1064.     lea    mt_arpeggio(PC),a0
  1065. mt_loop5:
  1066.     move.w    (a0,d0),d2
  1067.     cmp.w    (a0),d1
  1068.     beq.s    mt_endpart
  1069.     addq.l    #2,a0
  1070.     bra.s    mt_loop5
  1071. mt_endpart:
  1072.     move.w    d2,6(a5)
  1073.     rts
  1074.  
  1075. mt_rout2:
  1076.     lea    mt_data,a0
  1077.     move.l    a0,a3
  1078.     add.l    #$0c,a3
  1079.     move.l    a0,a2
  1080.     add.l    #$3b8,a2
  1081.     add.l    #$43c,a0
  1082.     move.l    mt_partnrplay(PC),d0
  1083.     moveq    #0,d1
  1084.     move.b    (a2,d0),d1
  1085.     asl.l    #8,d1
  1086.     asl.l    #2,d1
  1087.     add.l    mt_partnote(PC),d1
  1088.     move.l    d1,mt_partpoint
  1089.     clr.w    mt_dmacon
  1090.  
  1091.     lea    $dff0a0,a5
  1092.     lea    mt_aud1temp(PC),a6
  1093.     bsr    mt_playit
  1094.     lea    $dff0b0,a5
  1095.     lea    mt_aud2temp(PC),a6
  1096.     bsr    mt_playit
  1097.     lea    $dff0c0,a5
  1098.     lea    mt_aud3temp(PC),a6
  1099.     bsr    mt_playit
  1100.     lea    $dff0d0,a5
  1101.     lea    mt_aud4temp(PC),a6
  1102.     bsr    mt_playit
  1103.     move.w    #$01f4,d0
  1104. mt_rls:    dbf    d0,mt_rls
  1105.  
  1106.     move.w    #$8000,d0
  1107.     or.w    mt_dmacon,d0
  1108.     move.w    d0,$dff096
  1109.  
  1110.     lea    mt_aud4temp(PC),a6
  1111.     cmp.w    #1,14(a6)
  1112.     bne.s    mt_voice3
  1113.     move.l    10(a6),$dff0d0
  1114.  
  1115.     move.w (a6),eq4p
  1116.     cmp.w #0,(a6)
  1117.     beq.s noplus4
  1118.     move.w #$f,chn4
  1119. noplus4
  1120.  
  1121.  
  1122.  
  1123.     move.w    #1,$dff0d4
  1124. mt_voice3:
  1125.     lea    mt_aud3temp(PC),a6
  1126.     cmp.w    #1,14(a6)
  1127.     bne.s    mt_voice2
  1128.     move.l    10(a6),$dff0c0
  1129.  
  1130.     move.w (a6),eq3p
  1131.     cmp.w #0,(a6)
  1132.     beq.s noplus3
  1133.     move.w #$f,chn3
  1134. noplus3
  1135.     move.w    #1,$dff0c4
  1136. mt_voice2:
  1137.     lea    mt_aud2temp(PC),a6
  1138.     cmp.w    #1,14(a6)
  1139.     bne.s    mt_voice1
  1140.     move.l    10(a6),$dff0b0
  1141.  
  1142.     move.w (a6),eq2p
  1143.     cmp.w #0,(a6)
  1144.     beq.s noplus2
  1145.     move.w #$f,chn2
  1146. noplus2
  1147.  
  1148.  
  1149.     move.w    #1,$dff0b4
  1150. mt_voice1:
  1151.     lea    mt_aud1temp(PC),a6
  1152.     cmp.w    #1,14(a6)
  1153.     bne.s    mt_voice0
  1154.     move.l    10(a6),$dff0a0
  1155.     move.w (a6),eq1p
  1156.     cmp.w #0,(a6)
  1157.     beq.s noplus1
  1158.     move.w #$f,chn1
  1159. noplus1
  1160.  
  1161.     move.w    #1,$dff0a4
  1162. mt_voice0:
  1163.     move.l    mt_partnote(PC),d0
  1164.     add.l    #$10,d0
  1165.     move.l    d0,mt_partnote
  1166.     cmp.l    #$400,d0
  1167.     bne.s    mt_stop
  1168. mt_higher:
  1169.     clr.l    mt_partnote
  1170.     addq.l    #1,mt_partnrplay
  1171.     moveq    #0,d0
  1172.     move.w    mt_maxpart(PC),d0
  1173.     move.l    mt_partnrplay(PC),d1
  1174.     cmp.l    d0,d1
  1175.     bne.s    mt_stop
  1176.     clr.l    mt_partnrplay
  1177. ;    st    Pflag
  1178. mt_stop:tst.w    mt_status
  1179.     beq.s    mt_stop2
  1180.     clr.w    mt_status
  1181.     bra.s    mt_higher
  1182. mt_stop2:
  1183.     rts
  1184.  
  1185. mt_playit:
  1186.     move.l    (a0,d1.l),(a6)
  1187.     addq.l    #4,d1
  1188.     moveq    #0,d2
  1189.     move.b    2(a6),d2
  1190.     and.b    #$f0,d2
  1191.     lsr.b    #4,d2
  1192.  
  1193.     move.b    (a6),d0
  1194.     and.b    #$f0,d0
  1195.     or.b    d0,d2
  1196.     tst.b    d2
  1197.     beq.s    mt_nosamplechange
  1198.  
  1199.     moveq    #0,d3
  1200.     lea    mt_samples(PC),a1
  1201.     move.l    d2,d4
  1202.     asl.l    #2,d2
  1203.     mulu    #$1e,d4
  1204.     move.l    (a1,d2),4(a6)
  1205.     move.w    (a3,d4.l),8(a6)
  1206.     move.w    2(a3,d4.l),18(a6)
  1207.     move.w    4(a3,d4.l),d3
  1208.     tst.w    d3
  1209.     beq.s    mt_displace
  1210.     move.l    4(a6),d2
  1211.     add.l    d3,d2
  1212.     move.l    d2,4(a6)
  1213.     move.l    d2,10(a6)
  1214.     move.w    6(a3,d4.l),8(a6)
  1215.     move.w    6(a3,d4.l),14(a6)
  1216.     move.w    18(a6),8(a5)
  1217.     bra.s    mt_nosamplechange
  1218.  
  1219. mt_displace:
  1220.     move.l    4(a6),d2
  1221.     add.l    d3,d2
  1222.     move.l    d2,10(a6)
  1223.     move.w    6(a3,d4.l),14(a6)
  1224.     move.w    18(a6),8(a5)
  1225. mt_nosamplechange:
  1226.     move.w    (a6),d0
  1227.     and.w    #$fff,d0
  1228.     tst.w    d0
  1229.     beq.s    mt_retrout
  1230.     move.w    (a6),16(a6)
  1231.     move.w    20(a6),$dff096
  1232.     move.l    4(a6),(a5)
  1233.     move.w    8(a6),4(a5)
  1234.     move.w    (a6),d0
  1235.     and.w    #$fff,d0
  1236.     move.w    d0,6(a5)
  1237.     move.w    20(a6),d0
  1238.     or.w    d0,mt_dmacon
  1239.  
  1240. mt_retrout:
  1241.     tst.w    (a6)
  1242.     beq.s    mt_nonewper
  1243.     move.w    (a6),22(a6)
  1244.  
  1245. mt_nonewper:
  1246.     move.b    2(a6),d0
  1247.     and.b    #$0f,d0
  1248.     cmp.b    #$0b,d0
  1249.     beq.s    mt_posjmp
  1250.     cmp.b    #$0c,d0
  1251.     beq.s    mt_setvol
  1252.     cmp.b    #$0d,d0
  1253.     beq.s    mt_break
  1254.     cmp.b    #$0e,d0
  1255.     beq.s    mt_setfil
  1256.     cmp.b    #$0f,d0
  1257.     beq.s    mt_setspeed
  1258.     rts
  1259.  
  1260. mt_posjmp:
  1261.     not.w    mt_status
  1262.     moveq    #0,d0
  1263.     move.b    3(a6),d0
  1264.     subq.b    #1,d0
  1265.     move.l    d0,mt_partnrplay
  1266.     rts
  1267.  
  1268. mt_setvol:
  1269.     move.b    3(a6),8(a5)
  1270.     rts
  1271.  
  1272. mt_break:
  1273.     not.w    mt_status
  1274.     rts
  1275.  
  1276. mt_setfil:
  1277.     moveq    #0,d0
  1278.     move.b    3(a6),d0
  1279.     and.b    #1,d0
  1280.     rol.b    #1,d0
  1281.     and.b    #$fd,$bfe001
  1282.     or.b    d0,$bfe001
  1283.     rts
  1284.  
  1285. mt_setspeed:
  1286.     move.b    3(a6),d0
  1287.     and.b    #$0f,d0
  1288.     beq.s    mt_back
  1289.     clr.w    mt_counter
  1290.     move.b    d0,mt_cool+3
  1291. mt_back:rts
  1292.  
  1293. mt_aud1temp:
  1294.     dcb.w    10,0
  1295.     dc.w    1
  1296.     dcb.w    2,0
  1297. mt_aud2temp:
  1298.     dcb.w    10,0
  1299.     dc.w    2
  1300.     dcb.w    2,0
  1301. mt_aud3temp:
  1302.     dcb.w    10,0
  1303.     dc.w    4
  1304.     dcb.w    2,0
  1305. mt_aud4temp:
  1306.     dcb.w    10,0
  1307.     dc.w    8
  1308.     dcb.w    2,0
  1309.  
  1310. mt_partnote:    dc.l    0
  1311. mt_partnrplay:    dc.l    0
  1312. mt_counter:    dc.w    0
  1313. mt_partpoint:    dc.l    0
  1314. mt_samples:    dc.l    0
  1315. mt_sample1:    dcb.l    31,0
  1316. mt_maxpart:    dc.w    0
  1317. mt_dmacon:    dc.w    0
  1318. mt_status:    dc.w    0
  1319.  
  1320. mt_arpeggio:
  1321.     dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
  1322.     dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
  1323.     dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
  1324.     dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
  1325.     dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000
  1326.  
  1327.  
  1328. notetable:    dc.w    856,808,762,720,678,640,604,570
  1329.         dc.w    538,508,480,453,428,404,381,360
  1330.         dc.w    339,320,302,285,269,254,240,226  
  1331.         dc.w    214,202,190,180,170,160,151,143
  1332.         dc.w    135,127,120,113,000
  1333.  
  1334.  
  1335. mt_data    incbin st-00:modules/grymg2
  1336.  
  1337.  
  1338.  
  1339.  
  1340. sprite0    ds.l 2*70
  1341. sprite1    ds.l 2*70
  1342. sprite2 ds.l 2*70
  1343. sprite3 ds.l 2*70
  1344.  
  1345. logo    ds.b 15712-32
  1346.     dc.w 0,$fff,$eee,$ddd,$ccc,$bbb,$aaa,$999,$888,$777
  1347.     dc.w $666,$555,$444,$333,$222,$111
  1348.  
  1349.  
  1350.      ds.b 1000
  1351. font     ds.b    512
  1352.     incbin sources:xmas/font2 
  1353.  
  1354.  
  1355. piccy    incbin sources:xmas/snowbot
  1356.  
  1357.  
  1358. ami1    incbin sources:xmas/amiga1
  1359. ami2    incbin sources:xmas/amiga2
  1360. ami3    incbin sources:xmas/amiga3
  1361. ami4    incbin sources:xmas/amiga4
  1362.  
  1363. rob1    incbin sources:xmas/robin1
  1364. rob2    incbin sources:xmas/robin2
  1365. rob3    incbin sources:xmas/robin3
  1366. rob4    incbin sources:xmas/robin4
  1367.  
  1368. sno11    incbin sources:xmas/snowman11
  1369. sno12    incbin sources:xmas/snowman12
  1370. sno13    incbin sources:xmas/snowman13
  1371. sno14    incbin sources:xmas/snowman14
  1372.  
  1373. sley1    incbin sources:xmas/sleigh1
  1374. sley2    incbin sources:xmas/sleigh2
  1375. sley3    incbin sources:xmas/sleigh3
  1376. sley4    incbin sources:xmas/sleigh4
  1377.     ds.b 80
  1378. name    incbin sources:xmas/amigacompname
  1379.  
  1380. first    incbin sources:xmas/frontpic
  1381.