;REQUESTER TEST execbase =4 openlib =-408 closelib =-414 dmacon =$96 cop1lc =$80 copjmp1 =$88 openlibrary =-30-552 forbid =-30-102 permit =-30-108 open =-30 read =-42 close =-36 mode_old =1005 startlist =38 custom =$dff000 bplcon0 =$100 bplcon1 =$102 bplcon2 =$104 bpl1pth =$0e0 bpl1mod =$108 bpl2mod =$10a diwstrt =$08e diwstop =$090 ddfstrt =$092 ddfstop =$094 color00 =$180 color01 =$182 color17 =$1a2 color18 =$1a4 color19 =$1a6 vhposr =$006 opendos: move.l execbase,a6 ;open the dos library lea dosname(pc),a1 ;name of library moveq #0,d0 ;existing file jsr openlib(a6) ;open library move.l d0,dosbase ;store base address openint: ;open intuition library lea intname(pc),a1 ;name of library moveq #0,d0 ;existing file jsr openlib(a6) ;open it move.l d0,intbase ;store base address taskoff: jsr forbid(a6) ;muti-tasking off copbuild: ;make bitplane copperlist move.l #bitmap,d2 ;bit plane address no 1 moveq #1,d4 ;2 planes=2 loops to run move.l cladr,a0 ;copper list address in a0 move.l d2,d1 ;1st bit plane address in d1 move.w #bpl1pth,d3 ;first register to d3 makecl: move.w d3,(a0)+ ;bplxpth ins ram addq.w #2,d3 ;next register swap d1 move.w d1,(a0)+ ;hi word of plane address move.w d3,(a0)+ ;bplxptl ins ram addq.w #2,d3 ;next register swap d1 move.w d1,(a0)+ ;lo word of plane address add.l #10240,d1 ;plane size for next address dbf d4,makecl ;continue untill end bsr cop0build ;display etc jmp joy2 ;go and check firbutton etc cop0build: lea sprtno,a1 ;make sprite0 copperlist move.l (a1),d1 ;sprite0 address moveq #0,d4 ;0=1 sprites -1 loop to run move.l cladr0,a0 ;copper list address in a0 move.w #$120,d3 ;high byte to d3 bsr.s makecl0 add.l #168,(a1) move.l (a1),d1 moveq #0,d4 bsr.s makecl0 add.l #168,(a1) move.l (a1),d1 moveq #0,d4 bsr.s makecl0 add.l #168,(a1) move.l (a1),d1 moveq #0,d4 bsr.s makecl0 move.l #sprite47,d1 moveq #3,d4 bsr.s makecl0 bra.s copset makecl0: move.w d3,(a0)+ ;spr0pth stored in ram addq.w #2,d3 ;next register swap d1 move.w d1,(a0)+ ;high word of address move.w d3,(a0)+ ;spr0ptl stored in ram addq.w #2,d3 ;next register swap d1 move.w d1,(a0)+ ;lo word of address dbf d4,makecl0 ;continue till all done rts ;return done copset: ;initialise copper list lea custom,a5 ;register base address move.l cladr,cop1lc(a5) ;address of copper list move.w #$2981,diwstrt(a5) ;upper left of screen move.w #$29c1,diwstop(a5) ;lower right of screen ;ddfs's set for low res move.w #$0038,ddfstrt(a5) ;start of bit plane dma move.w #$00d0,ddfstop(a5) ;end of bit plane dma ;0010 (10)=2 bit planes move.w #%0010001000000000,bplcon0(a5) ;no of planes (2) clr.w bplcon1(a5) ;no scrolling ? clr.w bplcon2(a5) ;priority makes no diffrence clr.w bpl1mod(a5) ;modulo for all planes=null? clr.w bpl2mod(a5) ;same clr.w copjmp1(a5) ;load copper list to pc rts ;end of display enda: move.l #grname,a1 ;set for open library clr.l d0 ;existing file jsr openlib(a6) ;open graphics library move.l d0,a4 ;address of graphics base move.l d0,grbase ;store base address move.l startlist(a4),cop1lc(a5) ;old copperlist clr.w copjmp1(a5) ;load into pc move.w #$83e0,dmacon(a5) ;all dma on jsr permit(a6) ;enable muti-tasking endb: move.l execbase,a6 move.l dosbase(pc),a1 ;close dos.library jsr closelib(a6) move.l intbase(pc),a1 ;close intuition library jsr closelib(a6) move.l grbase(pc),a1 ;close graphics library jsr closelib(a6) rts ;all done finished dosname: dc.b 'dos.library',0,0 even dosbase: blk.l 1,0 intname: dc.b "intuition.library",0 even intbase: blk.l 1,0 grname: dc.b "graphics.library",0 even grbase: blk.l 1,0 cladr: dc.l list cladr0: dc.l list0 list: blk.l 4,0 ;BITPLANE COPPER LIST (2*2planes=4) list0: blk.l 16,0 ;SPRITE COPPER LIST (2*8sprites=16 lwords) list2: ;COLOR MAP COPPER LIST dc.w $0180,$0000,$0182,$0555,$0184,$0E52,$0186,$0AAA dc.w $0188,$0455,$018A,$0500,$018C,$0060,$018E,$0000 dc.w $0190,$0000,$0192,$0000,$0194,$0000,$0196,$0006 dc.w $0198,$0000,$019A,$0400,$019C,$0000,$019E,$0500 dc.w $01A0,$0000,$01A2,$0f00,$01A4,$0fff,$01A6,$00bf dc.w $01A8,$0000,$01AA,$0f00,$01AC,$0fff,$01AE,$00bf dc.w $01B0,$0000,$01B2,$0000,$01B4,$0000,$01B6,$0000 dc.w $01B8,$0000,$01BA,$0000,$01BC,$0000,$01BE,$0000 dc.w $ffff,$fffe bitmap: blk.b 20480,0 ;BIT PLANE INFORMATION (2 planes) even sprtno: dc.l sprites sprites: blk.b 15456,0 ;sprites A to 20 info even sprites1: blk.b 3360,0 ;sprites 21 to 25 info even sprites2: blk.b 5376,0 ;sprites a to g eqalizer even sprite47: blk.l 42,0 ;4-7 dummy sprite info even store: dc.l sprites count: blk.l 1,0 joy2: btst #6,$bfe001 beq.L out delay: move.l #12000,d1 loop1: sub.l #1,d1 cmp.l #0,d1 bne.s loop1 checkcount: lea store,a0 move.l (a0),a0 move.l a0,sprtno add.l #672,a0 move.l a0,store move.l count,d0 at1: cmp.l #22,d0 beq.s cntup add.l #1,count cmp.l #3,d0 ;intro sprite? bgt.s rebeam ;no so display next move.l #300000,d1 ;intro frame loop2: ;delay next frame sub.l #1,d1 ;decrement count cmp.l #0,d1 ;end of delay? bne.s loop2 ;nope then next decrement cmp.l #3,d0 ;is this the 3rd screen beq.s setmus ;yes go and run music rebeam: bsr.s beamcheck ;check beam postion jsr cop0build ;go and display sprite bra.s joy2 ;re-check fire button beamcheck: lea custom,a1 ;check the beam position move.b vhposr(a1),d6 ; cmp.b #$24,d6 ;on last line ? bne.s beamcheck ;nope then re-check rts ;return cntup: ;top sprite reached move.l #4,count ;reset counter move.l #23,at1+2 lea sprites+2016,a0 ;set sprite pointer to start move.l a0,store ;store for future recall bra.s rebeam ;go and display next jobby out: bsr.L stopmus ;end this part/stop mus bsr.s scr3set ;transfer new music etc bra.s changecol ;goto next section setmus: bsr.L gomus ;go and set up music bra.s rebeam ;return to check beam pos scr3set: lea mt_data1,a0 ;copy new music to data move.l mtpoint,a1 ;pointer to go to move.l #61004,d0 ;number of bytes to copy copy: move.b (a0)+,(a1)+ dbf d0,copy rts changecol: bsr.s beamcheck ;check beam position move.w #$0f90,list2+70 ;set up copper colors move.w #$01f0,list2+74 ;for new screen move.w #$0f90,list2+86 move.w #$01f0,list2+90 bsr.L gomus ;restart music screen3: lea sprites1,a0 ;set sprites pointer move.l a0,store ;pointer in store move.l #0,count ;reset counter to zero move.l #0,newdo nextspr: lea store,a0 ;get stored pointer move.l (a0),a0 ;from store move.l a0,sprtno ;save to pointer move.l count,d0 ;get counter cmp.l newdo,d0 ;is new reqd same? beq.s update ;yes so display same add.l #672,a0 ;setup next sprite move.l a0,store ;save for next display run add.l #1,count ;increment counter cmp.l #5,count ;check counter number beq.s screen3 ;reset if > last sprite update: bsr.L beamcheck ;check beam position jsr cop0build ;display sprite next1: bsr.L beamcheck ;check beam position move.l #8000,d1 ;load delay to check next2: sub.l #1,d1 ;count down delay bne.s next2 ;not finished yet next3: btst #6,$bfe001 ;left button? beq.s addspr ;yes so update sprite btst #10,$dff016 ;right button? beq.s options ;yes so goto options bra.s nextspr ;no buttons so re-display addspr: cmp.l #0,olddo ;check button delay=0? beq.s incdo ;yes so new press sub.l #1,olddo ;no so dec counter cmp.l #0,olddo ;is counter at zero? bne.L nextspr ;no so display as is add.l #1,newdo ;yes so update display bra.L nextspr ;and display new sprite incdo: add.l #2,olddo ;set button delay bra.L nextspr ;and display old jobbie options: move.l count,d0 ;check which sprite display cmp.l #0,d0 ;up when right button beq.s music0 ;was hit? cmp.l #1,d0 ;and select music beq.s music1 ;accordingly cmp.l #2,d0 beq.s music2 cmp.l #3,d0 beq.s music3 cmp.l #4,d0 ;check quit displayed beq.s quit ;yes so quit bra.L nextspr ;no selection re-display quit: bsr.L stopmus jmp enda olddo: blk.l 1,0 newdo: blk.l 1,0 filehd: blk.l 1,0 mus0: dc.b "music0",0 even mus1: dc.b "music1",0 even mus2: dc.b "music2",0 even mus3: dc.b "music3",0 even music0: move.l #mus0,d1 bra.s loader music1: move.l #mus1,d1 bra.s loader music2: move.l #mus2,d1 bra.s loader music3: move.l #mus3,d1 bra.s loader loader: move.l #mode_old,d2 ;load data from disk move.l dosbase,a6 ;filename in d1 jsr open(a6) move.l d0,filehd move.l #$ffffff,d3 ;size of file move.l #mt_data1,d2 ;destination address move.l dosbase,a6 move.l filehd(pc),d1 jsr read(a6) move.l d0,d6 move.l dosbase,a6 move.l filehd(pc),d1 jsr close(a6) bsr.L stopmus ;stop soundtrack bsr.L scr3set ;copy new music to buffer bsr.L gomus ;restart soundtrack bra.s graphic ;next screen ec1: ;graphic eqalizer counters blk.l 1,0 ;holds time value ec2: ;higher the newer blk.l 1,0 ec3: blk.l 1,0 ec4: blk.l 1,0 graphic: bsr beamcheck move.w #$0f00,list2+70 move.w #$0ff0,list2+74 move.w #$00f0,list2+78 move.w #$0f00,list2+86 move.w #$0ff0,list2+90 move.w #$00f0,list2+94 bsr.L cop1info graphica: move.l #8000,d0 loop3: sub.l #1,d0 cmp.l #0,d0 bne.s loop3 btst #6,$bfe001 beq.s back lea ec1,a1 bsr.s deceqalizer lea ec2,a1 bsr.s deceqalizer lea ec3,a1 bsr.s deceqalizer lea ec4,a1 bsr.s deceqalizer bsr.s cop1info bra.s graphica back: bsr beamcheck move.w #$0f90,list2+70 move.w #$01f0,list2+74 move.w #$00bf,list2+78 move.w #$0f90,list2+86 move.w #$01f0,list2+90 move.w #$00bf,list2+94 bra nextspr deceqalizer: move.l (a1),d0 cmp.l #0,d0 beq.s nodec sub.l #1,d0 move.l d0,(a1) nodec: rts cop1info: jsr beamcheck move.l cladr0,a0 move.w #$120,d3 lea sprites2,a1 ;base sprite info value lea ec1,a2 ;get display value bsr.s cop1build ;make that copper lea sprites2+168,a1 lea ec2,a2 bsr.s cop1build lea sprites2+336,a1 lea ec3,a2 bsr.s cop1build lea sprites2+504,a1 lea ec4,a2 bsr.s cop1build move.l #sprite47,d1 moveq #3,d4 jsr makecl0 jmp copset cop1build: move.l (a2),d0 ;value in display mulu #672,d0 ;multiply by next block add.l d0,a1 ;add to base value move.l a1,d1 ;transfer moveq #0,d4 ;number of runs = 0 jsr makecl0 ;go to it ! rts ;NOISETRACKER INTERUPT PLAY ROUTINE ;A.R. NELSON 1990 mtpoint: dc.l mt_data gomus: bsr mt_init ;set up music etc lea inter(pc),a1 moveq #5,d0 move.l 4,a6 jsr -168(a6) rts ;music up and running stopmus: move.l 4,a6 ;stop music etc moveq #32,d0 lea inter(pc),a1 jsr -174(a6) move.w #$f,$dff096 clr.l d0 rts ;music stopped return mt_init:lea mt_data(pc),a0 move.l a0,a1 add.l #$3b8,a1 moveq #$7f,d0 moveq #0,d1 mt_loop:move.l d1,d2 subq.w #1,d0 mt_lop2:move.b (a1)+,d1 cmp.b d2,d1 bgt.s mt_loop dbf d0,mt_lop2 addq.b #1,d2 lea mt_samplestarts(pc),a1 asl.l #8,d2 asl.l #2,d2 add.l #$43c,d2 add.l a0,d2 move.l d2,a2 moveq #$1e,d0 mt_lop3:clr.l (a2) move.l a2,(a1)+ moveq #0,d1 move.w 42(a0),d1 asl.l #1,d1 add.l d1,a2 add.l #$1e,a0 dbf d0,mt_lop3 or.b #$2,$bfe001 move.b #$6,mt_speed clr.w $dff0a8 clr.w $dff0b8 clr.w $dff0c8 clr.w $dff0d8 clr.b mt_songpos clr.b mt_counter clr.w mt_pattpos rts mt_end: clr.w $dff0a8 clr.w $dff0b8 clr.w $dff0c8 clr.w $dff0d8 move.w #$f,$dff096 rts spadgewirq: movem.l d0-d7/a0-a6,-(a7) bsr mt_music movem.l (a7)+,d0-d7/a0-a6 moveq #0,d0 rts mt_music: movem.l d0-d4/a0-a3/a5-a6,-(a7) lea mt_data(pc),a0 addq.b #$1,mt_counter move.b mt_counter,D0 cmp.b mt_speed,D0 blt.s mt_nonew clr.b mt_counter bra.L mt_getnew mt_nonew: lea mt_voice1(pc),a6 lea $dff0a0,a5 bsr.L mt_checkcom lea mt_voice2(pc),a6 lea $dff0b0,a5 bsr.L mt_checkcom lea mt_voice3(pc),a6 lea $dff0c0,a5 bsr.L mt_checkcom lea mt_voice4(pc),a6 lea $dff0d0,a5 bsr.L mt_checkcom bra.L mt_endr mt_arpeggio: moveq #0,d0 move.b mt_counter,d0 divs #$3,d0 swap d0 cmp.w #$0,d0 beq.s mt_arp2 cmp.w #$2,d0 beq.s mt_arp1 moveq #0,d0 move.b $3(a6),d0 lsr.b #4,d0 bra.s mt_arp3 mt_arp1:moveq #0,d0 move.b $3(a6),d0 and.b #$f,d0 bra.s mt_arp3 mt_arp2:move.w $10(a6),d2 bra.s mt_arp4 mt_arp3:asl.w #1,d0 moveq #0,d1 move.w $10(a6),d1 lea mt_periods(pc),a0 moveq #$24,d7 mt_arploop: move.w (a0,d0.w),d2 cmp.w (a0),d1 bge.s mt_arp4 addq.l #2,a0 dbf d7,mt_arploop rts mt_arp4:move.w d2,$6(a5) rts mt_getnew: lea mt_data(pc),a0 move.l a0,a3 move.l a0,a2 add.l #$c,a3 add.l #$3b8,a2 add.l #$43c,a0 moveq #0,d0 move.l d0,d1 move.b mt_songpos,d0 move.b (a2,d0.w),d1 asl.l #8,d1 asl.l #2,d1 add.w mt_pattpos,d1 clr.w mt_dmacon lea $dff0a0,a5 lea mt_voice1(pc),a6 bsr.s mt_playvoice lea $dff0b0,a5 lea mt_voice2(pc),a6 bsr.s mt_playvoice lea $dff0c0,a5 lea mt_voice3(pc),a6 bsr.s mt_playvoice lea $dff0d0,a5 lea mt_voice4(pc),a6 bsr.s mt_playvoice bra.L mt_setdma mt_playvoice: move.l (a0,d1.l),(a6) addq.l #4,d1 moveq #0,d2 move.b $2(a6),d2 and.b #$f0,d2 lsr.b #4,d2 move.b (a6),d0 and.b #$f0,d0 or.b d0,d2 tst.b d2 beq.s mt_setregs moveq #0,d3 lea mt_samplestarts(pc),a1 move.l d2,d4 subq.l #$1,d2 asl.l #2,d2 mulu #$1e,d4 move.l (a1,d2.l),$4(a6) move.w (a3,d4.l),$8(a6) move.w $2(a3,d4.l),$12(a6) move.w $4(a3,d4.l),d3 tst.w d3 beq.s mt_noloop move.l $4(a6),d2 asl.w #1,d3 add.l d3,d2 move.l d2,$a(a6) move.w $4(a3,d4.l),d0 add.w $6(a3,d4.l),d0 move.w d0,8(a6) move.w $6(a3,d4.l),$e(a6) move.w $12(a6),$8(a5) bra.s mt_setregs mt_noloop: move.l $4(a6),d2 add.l d3,d2 move.l d2,$a(a6) move.w $6(a3,d4.l),$e(a6) move.w $12(a6),$8(a5) mt_setregs: move.w (a6),d0 and.w #$fff,d0 beq.L mt_checkcom2 move.b $2(a6),d0 and.b #$F,d0 cmp.b #$3,d0 bne.s mt_setperiod bsr.L mt_setmyport bra.L mt_checkcom2 mt_setperiod: chan: move.l #8,d0 cmp.l #$dff0a0,a5 beq.s chan1 cmp.l #$dff0b0,a5 beq.s chan2 cmp.l #$dff0c0,a5 beq.s chan3 cmp.l #$dff0d0,a5 beq.s chan4 bra.s non chan1: move.l d0,ec1 bra.s non chan2: move.l d0,ec2 bra.s non chan3: move.l d0,ec3 bra.s non chan4: move.l d0,ec4 non: move.w (a6),$10(a6) and.w #$fff,$10(a6) move.w $14(a6),d0 move.w d0,$dff096 clr.b $1b(a6) move.l $4(a6),(a5) move.w $8(a6),$4(a5) move.w $10(a6),d0 and.w #$fff,d0 move.w d0,$6(a5) move.w $14(a6),d0 or.w d0,mt_dmacon bra.L mt_checkcom2 mt_setdma: move.w #$12c,d0 mt_wait:dbf d0,mt_wait move.w mt_dmacon,d0 or.w #$8000,d0 move.w d0,$dff096 move.w #$12c,d0 mt_wai2:dbf d0,mt_wai2 lea $dff000,a5 lea mt_voice4(pc),a6 move.l $a(a6),$d0(a5) move.w $e(a6),$d4(a5) lea mt_voice3(pc),a6 move.l $a(a6),$c0(a5) move.w $e(a6),$c4(a5) lea mt_voice2(pc),a6 move.l $a(a6),$b0(a5) move.w $e(a6),$b4(a5) lea mt_voice1(pc),a6 move.l $a(a6),$a0(a5) move.w $e(a6),$a4(a5) add.w #$10,mt_pattpos cmp.w #$400,mt_pattpos bne.s mt_endr mt_nex: clr.w mt_pattpos clr.b mt_break addq.b #1,mt_songpos and.b #$7f,mt_songpos move.b mt_songpos,d1 cmp.b mt_data+$3b6,d1 bne.s mt_endr clr.b mt_songpos mt_endr:tst.b mt_break bne.s mt_nex movem.l (a7)+,d0-d4/a0-a3/a5-a6 rts mt_setmyport: move.w (a6),d2 and.w #$fff,d2 move.w d2,$18(a6) move.w $10(a6),d0 clr.b $16(a6) cmp.w d0,d2 beq.s mt_clrport bge.s mt_rt move.b #$1,$16(a6) rts mt_clrport: clr.w $18(a6) mt_rt: rts mt_myport: move.b $3(a6),d0 beq.s mt_myslide move.b d0,$17(a6) clr.b $3(a6) mt_myslide: tst.w $18(a6) beq.s mt_rt moveq #0,d0 move.b $17(a6),d0 tst.b $16(a6) bne.s mt_mysub add.w d0,$10(a6) move.w $18(a6),d0 cmp.w $10(a6),d0 bgt.s mt_myok move.w $18(a6),$10(a6) clr.w $18(a6) mt_myok:move.w $10(a6),$6(a5) rts mt_mysub: sub.w d0,$10(a6) move.w $18(a6),d0 cmp.w $10(a6),d0 blt.s mt_myok move.w $18(a6),$10(a6) clr.w $18(a6) move.w $10(a6),$6(a5) rts mt_vib: move.b $3(a6),d0 beq.s mt_vi move.b d0,$1a(a6) mt_vi: move.b $1b(a6),d0 lea mt_sin(pc),a4 lsr.w #$2,d0 and.w #$1f,d0 moveq #0,d2 move.b (a4,d0.w),d2 move.b $1a(a6),d0 and.w #$f,d0 mulu d0,d2 lsr.w #$6,d2 move.w $10(a6),d0 tst.b $1b(a6) bmi.s mt_vibmin add.w d2,d0 bra.s mt_vib2 mt_vibmin: sub.w d2,d0 mt_vib2:move.w d0,$6(a5) move.b $1a(a6),d0 lsr.w #$2,d0 and.w #$3c,d0 add.b d0,$1b(a6) rts mt_nop: move.w $10(a6),$6(a5) rts mt_checkcom: move.w $2(a6),d0 and.w #$fff,d0 beq.s mt_nop move.b $2(a6),d0 and.b #$f,d0 tst.b d0 beq.L mt_arpeggio cmp.b #$1,d0 beq.s mt_portup cmp.b #$2,d0 beq.L mt_portdown cmp.b #$3,d0 beq.L mt_myport cmp.b #$4,d0 beq.L mt_vib move.w $10(a6),$6(a5) cmp.b #$a,d0 beq.s mt_volslide rts mt_volslide: moveq #0,d0 move.b $3(a6),d0 lsr.b #4,d0 tst.b d0 beq.s mt_voldown add.w d0,$12(a6) cmp.w #$40,$12(a6) bmi.s mt_vol2 move.w #$40,$12(a6) mt_vol2:move.w $12(a6),$8(a5) rts mt_voldown: moveq #0,d0 move.b $3(a6),d0 and.b #$f,d0 sub.w d0,$12(a6) bpl.s mt_vol3 clr.w $12(a6) mt_vol3:move.w $12(a6),$8(a5) rts mt_portup: moveq #0,d0 move.b $3(a6),d0 sub.w d0,$10(a6) move.w $10(a6),d0 and.w #$fff,d0 cmp.w #$71,d0 bpl.s mt_por2 and.w #$f000,$10(a6) or.w #$71,$10(a6) mt_por2:move.w $10(a6),d0 and.w #$fff,d0 move.w d0,$6(a5) rts mt_portdown: clr.w d0 move.b $3(a6),d0 add.w d0,$10(a6) move.w $10(a6),d0 and.w #$fff,d0 cmp.w #$358,d0 bmi.s mt_por3 and.w #$f000,$10(a6) or.w #$358,$10(a6) mt_por3:move.w $10(a6),d0 and.w #$fff,d0 move.w d0,$6(a5) rts mt_checkcom2: move.b $2(a6),d0 and.b #$f,d0 cmp.b #$e,d0 beq.s mt_setfilt cmp.b #$d,d0 beq.s mt_pattbreak cmp.b #$b,d0 beq.s mt_posjmp cmp.b #$c,d0 beq.s mt_setvol cmp.b #$f,d0 beq.s mt_setspeed rts mt_setfilt: move.b $3(a6),d0 and.b #$1,d0 asl.b #$1,d0 and.b #$fd,$bfe001 or.b d0,$bfe001 rts mt_pattbreak: not.b mt_break rts mt_posjmp: move.b $3(a6),d0 subq.b #$1,d0 move.b d0,mt_songpos not.b mt_break rts mt_setvol: cmp.b #$40,$3(a6) ble.s mt_vol4 move.b #$40,$3(a6) mt_vol4:move.b $3(a6),$8(a5) rts mt_setspeed: move.b $3(a6),d0 and.w #$1f,d0 beq.s mt_rts2 clr.b mt_counter move.b d0,mt_speed mt_rts2:rts mt_sin: dc.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd dc.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18 mt_periods: dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0 dc.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe dc.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087 dc.w $007f,$0078,$0071,$0000,$0000 mt_speed: dc.b $6 mt_songpos: dc.b $0 mt_pattpos: dc.w $0 mt_counter: dc.b $0 mt_break: dc.b $0 mt_dmacon: dc.w $0 mt_samplestarts:blk.l $1f,0 mt_voice1: blk.w 10,0 dc.w $1 blk.w 3,0 mt_voice2: blk.w 10,0 dc.w $2 blk.w 3,0 mt_voice3: blk.w 10,0 dc.w $4 blk.w 3,0 mt_voice4: blk.w 10,0 dc.w $8 blk.w 3,0 inter: dc.l 0,0 dc.b 2,127 dc.l 0,0 dc.l spadgewirq mt_data: blk.b 67414,0 mt_data1: blk.b 61004,0 done: