* The Player 6.0A for DevPac 3 and later * ;start = 6 ;Starting position fade = 0 ;0 = normal ;1 = use master volume system = 1 ;0 = killer ;1 = friendly CIA = system!1 ;0 = disabled ;1 = enabled ;System friendly version always CIA exec = 1 ;0 = ExecBase destroyed ;1 = ExecBase valid lev6 = 1 ;0 = NonLev6 ;1 = Lev6 used opt020 = 0 ;0 = MC680x0 ;1 = MC68020 or better channels = 4 ;amount of channels to be played use = -1 ;The Usecode incdir include: include Player6.i section Player6.0A,code movem.l d0-a6,-(sp) lea $dff000,a6 ifeq system move $1c(a6),-(sp) move #$7fff,$9a(a6) move #$e000,$9a(a6) move 2(a6),-(sp) move #$7ff,$96(a6) endc lea P60_data,a0 ;Module sub.l a1,a1 ;Samples lea samples,a2 ;Sample buffer moveq #0,d0 ;Auto Detect bsr P60_motuuli+P60_InitOffset tst d0 ;Went ok? bne P60_exit P60_sync ifeq CIA move.l 4(a6),d0 andi.l #$1ff00,d0 cmp.l #$8100,d0 bne.b P60_sync P60_sync2 move.l 4(a6),d0 andi.l #$1ff00,d0 cmp.l #$8200,d0 bne.b P60_sync2 move #$fff,$180(a6) bsr P60_motuuli+P60_MusicOffset clr $180(a6) moveq #0,d0 move 6(a6),d0 sub.l #$8200,d0 cmp.l P60_raster(pc),d0 ble.b P60_kosj move d0,P60_raster+2 P60_kosj tst P60_raster2+2 bne.b P60_doing move d0,P60_raster2+2 bra.b P60_doneg P60_doing add.l P60_raster2(pc),d0 asr.l #1,d0 move.l d0,P60_raster2 P60_doneg addq.l #1,P60_frames ifne fade btst #10,$16(a6) bne.b P60_jid move P60_diri(pc),d0 sub d0,P60_motuuli+P60_MasterVolume bne.b P60_judo neg P60_diri bra.b P60_jid P60_judo cmp #64,P60_motuuli+P60_MasterVolume bne.b P60_jid neg P60_diri endc P60_jid endc btst #6,$bfe001 bne P60_sync P60_exit bsr P60_motuuli+P60_EndOffset ifeq system move (sp)+,d7 bset #15,d7 move #$7ff,$96(a6) move d7,$96(a6) move (sp)+,d7 bset #15,d7 move #$7fff,$9a(a6) move d7,$9a(a6) endc movem.l (sp)+,d0-a6 move.l P60_raster(pc),d0 move.l P60_raster2(pc),d1 move.l P60_frames(pc),d2 move.l P60_positionbase(pc),a0 move.l P60_patternbase(pc),a1 move.l P60_spos(pc),a2 rts P60_IRQsave dc 0 P60_DMAsave dc 0 P60_raster dc.l 0 P60_raster2 dc.l 0 P60_frames dc.l 0 P60_diri dc 1 ********************************* * Player 6.0A ฎ * * All in one-DevPac3-version * * Version 600.2 * * ฉ 1992-93 Jarno Paananen * * All rights reserved * ********************************* ******** START OF BINARY FILE ************** P60_motuuli bra P60_Init ifeq CIA bra P60_Music else rts rts endc bra P60_End rts ;no P60_SetRepeat rts P60_master dc 64 ;Master volume (0-64) P60_Tempo dc 1 ;Use tempo? 0=no,non-zero=yes P60_play dc 1 ;Stop flag (0=stop) P60_E8 dc 0 ;Info nybble after command E8 P60_Temp0Offset dc.l P60_temp0-P60_motuuli P60_Temp1Offset dc.l P60_temp1-P60_motuuli P60_Temp2Offset dc.l P60_temp2-P60_motuuli P60_Temp3Offset dc.l P60_temp3-P60_motuuli P60_getnote macro moveq #$7e,d0 and.b (a5),d0 beq.b .nonote ifne P60_vib clr.b P60_VibPos(a5) endc ifne P60_tre clr.b P60_TrePos(a5) endc ifne P60_ft add P60_Fine(a5),d0 endc move d0,P60_Note(a5) move (a2,d0),P60_Period(a5) .nonote endm ifne CIA ifeq system P60_intti movem.l d0-a6,-(sp) tst.b $bfdd00 move.b #$7e,$bfdd00 lea $dff000,a6 ; move #$fff,$180(a6) bsr P60_Music ; move #0,$180(a6) move #$2000,$9c(a6) movem.l (sp)+,d0-a6 rte else P60_lev6server movem.l d2-d7/a2-a6,-(sp) lea $dff000,a6 lea P60_cn(pc),a3 move P60_server(pc),d0 beq.b P60_musica subq #1,d0 beq P60_dmason bra P60_setrepeat P60_musica bsr P60_Music P60_ohi movem.l (sp)+,d2-d7/a2-a6 moveq #1,d0 rts endc endc ;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ ;ญ Call P60_Init to initialize the playroutine ญ ;ญ D0 --> Timer detection (for CIA-version) ญ ;ญ A0 --> Address to the module ญ ;ญ A1 --> Address to samples/0 ญ ;ญ A2 --> Address to sample buffer ญ ;ญ D0 <-- 0 if succeeded ญ ;ญ A6 <-- $DFF000 ญ ;ญ Uses D0-A6 ญ ;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ P60_Init cmp.l #"P60A",(a0)+ beq.b .modok subq.l #4,a0 .modok ifne CIA move d0,-(sp) endc moveq #0,d0 cmp.l d0,a1 bne.b .redirect move (a0),d0 lea (a0,d0.l),a1 .redirect move.l a2,a6 lea 8(a0),a2 moveq #$40,d0 and.b 3(a0),d0 bne.b .buffer move.l a1,a6 subq.l #4,a2 .buffer lea P60_cn(pc),a3 moveq #$1f,d1 and.b 3(a0),d1 move.l a0,-(sp) lea P60_Samples(pc),a4 subq #1,d1 moveq #0,d4 P60_lopos move.l a6,(a4)+ move (a2)+,d4 bpl.b P60_kook neg d4 lea P60_Samples-16(pc),a5 ifeq opt020 asl #4,d4 move.l (a5,d4),d6 else add d4,d4 move.l (a5,d4*8),d6 endc move.l d6,-4(a4) move 4(a5,d4),d4 sub.l d4,a6 sub.l d4,a6 bra.b P60_jatk P60_kook move.l a6,d6 tst.b 3(a0) bpl.b P60_jatk move.l d4,d0 subq.l #2,d0 bmi.b P60_jatk move.l a6,a5 move.b (a5)+,d2 sub.b (a5),d2 move.b d2,(a5)+ .loop sub.b (a5),d2 move.b d2,(a5)+ sub.b (a5),d2 move.b d2,(a5)+ dbf d0,.loop P60_jatk move d4,(a4)+ moveq #0,d2 move.b (a2)+,d2 moveq #0,d3 move.b (a2)+,d3 moveq #0,d0 move (a2)+,d0 bmi.b .norepeat move d4,d5 sub d0,d5 move.l d6,a5 add.l d0,a5 add.l d0,a5 move.l a5,(a4)+ move d5,(a4)+ bra.b P60_gene .norepeat move.l d6,(a4)+ move #1,(a4)+ P60_gene move d3,(a4)+ moveq #$f,d0 and d2,d0 mulu #74,d0 move d0,(a4)+ tst -6(a2) bmi.b .nobuffer moveq #$40,d0 and.b 3(a0),d0 beq.b .nobuffer move d4,d7 tst.b d2 bpl.b .copy subq #1,d7 moveq #0,d5 moveq #0,d4 .lo move.b (a1)+,d4 moveq #$f,d3 and d4,d3 lsr #4,d4 sub.b .table(pc,d4),d5 move.b d5,(a6)+ sub.b .table(pc,d3),d5 move.b d5,(a6)+ dbf d7,.lo bra.b .kop .copy add d7,d7 subq #1,d7 .cob move.b (a1)+,(a6)+ dbf d7,.cob bra.b .kop .table dc.b 0,1,2,4,8,16,32,64,128,-64,-32,-16,-8,-4,-2,-1 .nobuffer add.l d4,a6 add.l d4,a6 .kop dbf d1,P60_lopos move.l (sp)+,a0 and.b #$7f,3(a0) move.l a2,-(sp) lea P60_temp0(pc),a1 lea P60_temp1(pc),a2 lea P60_temp2(pc),a4 lea P60_temp3(pc),a5 moveq #Channel_Block_SIZE/2-2,d0 moveq #0,d1 .cl move d1,(a1)+ move d1,(a2)+ move d1,(a4)+ move d1,(a5)+ dbf d0,.cl move.l (sp)+,a2 move.l a2,P60_positionbase-P60_cn(a3) moveq #$7f,d1 and.b 2(a0),d1 ifeq opt020 lsl #3,d1 lea (a2,d1.l),a4 else lea (a2,d1.l*8),a4 endc move.l a4,P60_possibase-P60_cn(a3) move.l a4,a1 moveq #-1,d0 .search cmp.b (a1)+,d0 bne.b .search move.l a1,P60_patternbase-P60_cn(a3) ifd start lea start(a4),a4 endc moveq #0,d0 move.b (a4)+,d0 move.l a4,P60_spos-P60_cn(a3) lsl #3,d0 add.l d0,a2 move.l a1,a4 moveq #0,d0 move (a2)+,d0 lea (a4,d0.l),a1 move.l a1,P60_ChaPos+P60_temp0-P60_cn(a3) move (a2)+,d0 lea (a4,d0.l),a1 move.l a1,P60_ChaPos+P60_temp1-P60_cn(a3) move (a2)+,d0 lea (a4,d0.l),a1 move.l a1,P60_ChaPos+P60_temp2-P60_cn(a3) move (a2)+,d0 lea (a4,d0.l),a1 move.l a1,P60_ChaPos+P60_temp3-P60_cn(a3) lea P60_setrepeat(pc),a0 move.l a0,P60_intaddr-P60_cn(a3) move #63,P60_rowpos-P60_cn(a3) move #6,P60_speed-P60_cn(a3) move #5,P60_speed2-P60_cn(a3) clr P60_speedis1-P60_cn(a3) ifne P60_pl clr.l P60_plcount-P60_cn(a3) endc ifne P60_pde clr P60_pdelay-P60_cn(a3) endc clr (a3) moveq #2,d0 and.b $bfe001,d0 move.b d0,P60_ofilter-P60_cn(a3) bset #1,$bfe001 ifeq system ifne exec move.l 4.w,a6 moveq #0,d0 btst d0,297(a6) beq.b .no68010 lea P60_liko(pc),a5 jsr -$1e(a6) .no68010 move.l d0,a0 lea $78(a0),a0 else lea $78.w,a0 endc move.l a0,P60_vektori-P60_cn(a3) move.l (a0),P60_oldlev6-P60_cn(a3) lea P60_dmason(pc),a1 move.l a1,(a0) endc moveq #0,d0 lea $dff000,a6 move d0,$a8(a6) move d0,$b8(a6) move d0,$c8(a6) move d0,$d8(a6) move #$f,$96(a6) ifeq system move #$2000,$9a(a6) lea $bfd000,a0 move.b #$7f,$d00(a0) move.b #8,$e00(a0) endc ifeq CIA move.b #$4a,$400(a0) move.b #1,$500(a0) move.b #$81,$d00(a0) endc ifne CIA move (sp)+,d0 subq #1,d0 beq.b P60_ForcePAL subq #1,d0 beq.b P60_NTSC ifne exec move.l 4.w,a1 cmp.b #60,$212(a1) ;VBlankFrequency beq.b P60_NTSC endc P60_ForcePAL move.l #1773447,d0 ;PAL bra.b P60_setcia P60_NTSC move.l #1789773,d0 ;NTSC P60_setcia move.l d0,P60_timer-P60_cn(a3) divu #125,d0 move d0,P60_thi2-P60_cn(a3) sub #$1c8*2,d0 move d0,P60_thi-P60_cn(a3) ifeq system move.b d0,$400(a0) lsr #8,d0 move.b d0,$500(a0) lea P60_intti(pc),a1 move.l a1,P60_tintti-P60_cn(a3) move.l P60_vektori(pc),a2 move.l a1,(a2) move.b #$81,$d00(a0) move.b #$19,$e00(a0) moveq #0,d0 endc endc ifeq system move #$e000,$9a(a6) rts ifne exec P60_liko dc.l $4E7A0801 ;MOVEC VBR,d0 rte endc endc ifne system move.l a6,-(sp) clr P60_server-P60_cn(a3) move.l 4.w,a6 moveq #-1,d0 jsr -$14a(a6) move.b d0,P60_sigbit-P60_cn(a3) bmi P60_err lea P60_allocport(pc),a1 move.l a1,P60_portti-P60_cn(a3) move.b d0,15(a1) move.l a1,-(sp) suba.l a1,a1 jsr -$126(a6) move.l (sp)+,a1 move.l d0,16(a1) lea P60_reqlist(pc),a0 move.l a0,(a0) addq.l #4,(a0) clr.l 4(a0) move.l a0,8(a0) lea P60_dat(pc),a1 move.l a1,P60_reqdata-P60_cn(a3) lea P60_allocreq(pc),a1 lea P60_audiodev(pc),a0 moveq #0,d0 moveq #0,d1 move.l 4.w,a6 jsr -$1bc(a6) tst.b d0 bne P60_err st.b P60_audioopen-P60_cn(a3) lea P60_timerint(pc),a1 move.l a1,P60_timerdata-P60_cn(a3) lea P60_lev6server(pc),a1 move.l a1,P60_timerdata+8-P60_cn(a3) moveq #0,d3 lea P60_cianame(pc),a1 move.b #'b',3(a1) P60_openciares moveq #0,d0 jsr -$1f2(a6) move.l d0,P60_ciares-P60_cn(a3) beq.b P60_tryCIAA move.l d0,a6 lea P60_timerinterrupt(pc),a1 moveq #0,d0 jsr -6(a6) tst.l d0 beq.b P60_gottimer addq.l #4,d3 lea P60_timerinterrupt(pc),a1 moveq #1,d0 jsr -6(a6) tst.l d0 beq.b P60_gottimer P60_tryCIAA lea P60_cianame(pc),a1 cmp.b #'b',3(a1) bne.b P60_err subq.b #1,3(a1) moveq #8,d3 bra.b P60_openciares P60_gottimer lea P60_craddr+8(pc),a6 move.l P60_ciaaddr(pc,d3),d0 move.l d0,(a6) sub #$100,d0 move.l d0,-(a6) moveq #2,d3 btst #9,d0 bne.b P60_timerB subq.b #1,d3 add #$100,d0 P60_timerB add #$900,d0 move.l d0,-(a6) move.l d0,a0 and.b #%10000000,(a0) move.b d3,P60_timeropen-P60_cn(a3) moveq #0,d0 move.l P60_craddr+4(pc),a1 move.b P60_tlo(pc),(a1) move.b P60_thi(pc),$100(a1) or.b #$19,(a0) P60_pois move.l (sp)+,a6 rts P60_err moveq #-1,d0 bra.b P60_pois rts P60_ciaaddr dc.l $bfd500,$bfd700,$bfe501,$bfe701 endc ;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ ;ญ Call P60_End to stop the music ญ ;ญ A6 --> Customchip baseaddress ($DFF000) ญ ;ญ Uses D0/D1/A0/A1/A3 ญ ;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ P60_End moveq #0,d0 move d0,$a8(a6) move d0,$b8(a6) move d0,$c8(a6) move d0,$d8(a6) move #$f,$96(a6) and.b #~2,$bfe001 move.b P60_ofilter(pc),d0 or.b d0,$bfe001 ifeq system move #$2000,$9a(a6) move.l P60_vektori(pc),a0 move.l P60_oldlev6(pc),(a0) else move.l a6,-(sp) lea P60_cn(pc),a3 moveq #0,d0 move.b P60_timeropen(pc),d0 beq.b P60_rem1 move.l P60_ciares(pc),a6 lea P60_timerinterrupt(pc),a1 subq.b #1,d0 jsr -12(a6) P60_rem1 move.l 4.w,a6 tst.b P60_audioopen-P60_cn(a3) beq.b P60_rem2 lea P60_allocreq(pc),a1 jsr -$1c2(a6) clr.b P60_audioopen-P60_cn(a3) P60_rem2 moveq #0,d0 move.b P60_sigbit(pc),d0 bmi.b P60_rem3 jsr -$150(a6) st P60_sigbit-P60_cn(a3) P60_rem3 move.l (sp)+,a6 endc rts ifne fade P60_mfade move P60_master(pc),d0 move P60_temp0+P60_Shadow(pc),d1 mulu d0,d1 lsr #6,d1 move d1,$a8(a6) ifgt channels-1 move P60_temp1+P60_Shadow(pc),d1 mulu d0,d1 lsr #6,d1 move d1,$b8(a6) endc ifgt channels-2 move P60_temp2+P60_Shadow(pc),d1 mulu d0,d1 lsr #6,d1 move d1,$c8(a6) endc ifgt channels-3 move P60_temp3+P60_Shadow(pc),d1 mulu d0,d1 lsr #6,d1 move d1,$d8(a6) endc rts endc ;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ ;ญ Call P60_Music every frame to play the music ญ ;ญ A6 --> Customchip baseaddress ($DFF000) ญ ;ญ Uses A0-A5/D0-D7 ญ ;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ P60_Music lea P60_cn(pc),a3 tst P60_play-P60_cn(a3) bne.b P60_ohitaaa ifne CIA ifeq system move.l P60_vektori(pc),a5 move.l P60_tintti(pc),(a5) move.b P60_tlo2(pc),$bfd400 move.b P60_thi2(pc),$bfd500 else move.l P60_craddr+4(pc),a0 move.b P60_tlo2(pc),(a0) move.b P60_thi2(pc),$100(a0) endc endc rts P60_ohitaaa ifne fade pea P60_mfade(pc) endc moveq #Channel_Block_SIZE,d6 moveq #16,d7 move (a3),d4 addq #1,d4 cmp P60_speed(pc),d4 beq P60_playtime move d4,(a3) P60_delay ifne CIA ifeq system move.l P60_vektori(pc),a5 move.l P60_tintti(pc),(a5) move.b P60_tlo2(pc),$bfd400 move.b P60_thi2(pc),$bfd500 else move.l P60_craddr+4(pc),a0 move.b P60_tlo2(pc),(a0) move.b P60_thi2(pc),$100(a0) endc endc lea P60_temp0(pc),a5 lea $a0(a6),a4 moveq #channels-1,d5 P60_lopas tst P60_OnOff(a5) beq P60_contfxdone moveq #$f,d0 and (a5),d0 ifeq opt020 add d0,d0 move P60_jtab2(pc,d0),d0 else move P60_jtab2(pc,d0*2),d0 endc jmp P60_jtab2(pc,d0) P60_jtab2 dc P60_contfxdone-P60_jtab2 ifne P60_pu dc P60_portup-P60_jtab2 else dc P60_contfxdone-P60_jtab2 endc ifne P60_pd dc P60_portdwn-P60_jtab2 else dc P60_contfxdone-P60_jtab2 endc ifne P60_tp dc P60_toneport-P60_jtab2 else dc P60_contfxdone-P60_jtab2 endc ifne P60_vib dc P60_vib2-P60_jtab2 else dc P60_contfxdone-P60_jtab2 endc ifne P60_tpvs dc P60_tpochvslide-P60_jtab2 else dc P60_contfxdone-P60_jtab2 endc ifne P60_vbvs dc P60_vibochvslide-P60_jtab2 else dc P60_contfxdone-P60_jtab2 endc ifne P60_tre dc P60_tremo-P60_jtab2 else dc P60_contfxdone-P60_jtab2 endc ifne P60_arp dc P60_arpeggio-P60_jtab2 else dc P60_contfxdone-P60_jtab2 endc dc P60_contfxdone-P60_jtab2 ifne P60_vs dc P60_volslide-P60_jtab2 else dc P60_contfxdone-P60_jtab2 endc dc P60_contfxdone-P60_jtab2 dc P60_contfxdone-P60_jtab2 dc P60_contfxdone-P60_jtab2 ifne P60_ec dc P60_contecommands-P60_jtab2 else dc P60_contfxdone-P60_jtab2 endc dc P60_contfxdone-P60_jtab2 ifne P60_ec P60_contecommands move.b P60_Info(a5),d0 and #$f0,d0 lsr #3,d0 move P60_etab2(pc,d0),d0 jmp P60_etab2(pc,d0) P60_etab2 dc P60_contfxdone-P60_etab2 ifne P60_fsu dc P60_fineup2-P60_etab2 else dc P60_contfxdone-P60_etab2 endc ifne P60_fsd dc P60_finedwn2-P60_etab2 else dc P60_contfxdone-P60_etab2 endc dc P60_contfxdone-P60_etab2 dc P60_contfxdone-P60_etab2 dc P60_contfxdone-P60_etab2 dc P60_contfxdone-P60_etab2 dc P60_contfxdone-P60_etab2 dc P60_contfxdone-P60_etab2 ifne P60_rt dc P60_retrig-P60_etab2 else dc P60_contfxdone-P60_etab2 endc ifne P60_fvu dc P60_finevup2-P60_etab2 else dc P60_contfxdone-P60_etab2 endc ifne P60_fvd dc P60_finevdwn2-P60_etab2 else dc P60_contfxdone-P60_etab2 endc ifne P60_nc dc P60_notecut-P60_etab2 else dc P60_contfxdone-P60_etab2 endc ifne P60_nd dc P60_notedelay-P60_etab2 else dc P60_contfxdone-P60_etab2 endc dc P60_contfxdone-P60_etab2 dc P60_contfxdone-P60_etab2 endc ifne P60_fsu P60_fineup2 tst (a3) bne P60_contfxdone moveq #$f,d0 and.b P60_Info(a5),d0 sub d0,P60_Period(a5) moveq #113,d0 cmp P60_Period(a5),d0 ble.b .jup move d0,P60_Period(a5) .jup move P60_Period(a5),6(a4) bra P60_contfxdone endc ifne P60_fsd P60_finedwn2 tst (a3) bne P60_contfxdone moveq #$f,d0 and.b P60_Info(a5),d0 add d0,P60_Period(a5) cmp #856,P60_Period(a5) ble.b .jup move #856,P60_Period(a5) .jup move P60_Period(a5),6(a4) bra P60_contfxdone endc ifne P60_fvu P60_finevup2 tst (a3) bne P60_contfxdone moveq #$f,d0 and.b P60_Info(a5),d0 add d0,P60_Volume(a5) moveq #64,d0 cmp P60_Volume(a5),d0 bge.b .jup move d0,P60_Volume(a5) .jup move P60_Volume(a5),8(a4) bra P60_contfxdone endc ifne P60_fvd P60_finevdwn2 tst (a3) bne P60_contfxdone moveq #$f,d0 and.b P60_Info(a5),d0 sub d0,P60_Volume(a5) bpl.b .jup clr P60_Volume(a5) .jup move P60_Volume(a5),8(a4) bra P60_contfxdone endc ifne P60_nc P60_notecut moveq #$f,d0 and.b P60_Info(a5),d0 cmp (a3),d0 bne P60_contfxdone ifeq fade clr 8(a4) else clr P60_Shadow(a5) endc clr P60_Volume(a5) bra P60_contfxdone endc ifne P60_nd P60_notedelay moveq #$f,d0 and.b P60_Info(a5),d0 cmp (a3),d0 bne P60_contfxdone moveq #$7e,d0 and.b (a5),d0 beq P60_contfxdone move P60_DMABit(a5),d0 move d0,$96(a6) or d0,P60_dma-P60_cn(a3) move.l P60_Sample(a5),a1 move.l (a1)+,(a4)+ move (a1),(a4)+ move P60_Period(a5),(a4) subq.l #6,a4 ifeq system lea P60_dmason(pc),a1 move.l P60_vektori(pc),a0 move.l a1,(a0) endc ifeq CIA move.b #$19,$bfde00 else ifeq system move.b #$4a,$bfd400 move.b #1,$bfd500 else move #1,P60_server-P60_cn(a3) move.l P60_craddr+4(pc),a1 move.b #$4a,(a1) move.b #1,$100(a1) endc endc bra P60_contfxdone endc ifne P60_rt P60_retrig subq #1,P60_RetrigCount(a5) bne P60_contfxdone move P60_DMABit(a5),d0 move d0,$96(a6) or d0,P60_dma-P60_cn(a3) move.l P60_Sample(a5),a1 move.l (a1)+,(a4) move (a1),4(a4) ifeq system lea P60_dmason(pc),a1 move.l P60_vektori(pc),a0 move.l a1,(a0) endc ifeq CIA move.b #$19,$bfde00 else ifeq system move.b #$4a,$bfd400 move.b #1,$bfd500 else move #1,P60_server-P60_cn(a3) move.l P60_craddr+4(pc),a1 move.b #$4a,(a1) move.b #1,$100(a1) endc endc moveq #$f,d0 and.b P60_Info(a5),d0 move d0,P60_RetrigCount(a5) bra P60_contfxdone endc ifne P60_arp P60_arplist 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 P60_arpeggio move (a3),d0 move.b P60_arplist(pc,d0),d0 beq.b .arp0 subq.b #1,d0 beq.b P60_arp1 moveq #$f,d0 and.b P60_Info(a5),d0 bra.b P60_arp3 .arp0 move P60_Note(a5),d0 move P60_periods(pc,d0),6(a4) bra P60_contfxdone P60_arp1 move.b P60_Info(a5),d0 lsr #4,d0 P60_arp3 add d0,d0 add P60_Note(a5),d0 move P60_periods(pc,d0),6(a4) bra P60_contfxdone endc P60_periods ifne P60_ft incbin periods else incbin periods.nft endc ifne P60_vs P60_volslide move.b P60_Info(a5),d0 sub.b d0,P60_Volume+1(a5) bpl.b .test clr P60_Volume(a5) ifeq fade clr 8(a4) else clr P60_Shadow(a5) endc bra P60_contfxdone .test moveq #64,d0 cmp P60_Volume(a5),d0 bge.b .ncs move d0,P60_Volume(a5) ifeq fade move d0,8(a4) else move d0,P60_Shadow(a5) endc bra.b P60_contfxdone .ncs ifeq fade move P60_Volume(a5),8(a4) else move P60_Volume(a5),P60_Shadow(a5) endc bra.b P60_contfxdone endc ifne P60_tpvs P60_tpochvslide move.b P60_Info(a5),d0 sub.b d0,P60_Volume+1(a5) bpl.b .test clr P60_Volume(a5) ifeq fade clr 8(a4) else clr P60_Shadow(a5) endc bra.b P60_toneport .test moveq #64,d0 cmp P60_Volume(a5),d0 bge.b .ncs move d0,P60_Volume(a5) .ncs ifeq fade move P60_Volume(a5),8(a4) else move P60_Volume(a5),P60_Shadow(a5) endc endc ifne P60_tp P60_toneport move P60_ToPeriod(a5),d0 beq.b P60_contfxdone move P60_TPSpeed(a5),d1 cmp P60_Period(a5),d0 blt.b .topoup add d1,P60_Period(a5) cmp P60_Period(a5),d0 bgt.b P60_toposetper move d0,P60_Period(a5) clr P60_ToPeriod(a5) move d0,6(a4) bra.b P60_contfxdone .topoup sub d1,P60_Period(a5) cmp P60_Period(a5),d0 blt.b P60_toposetper move d0,P60_Period(a5) clr P60_ToPeriod(a5) P60_toposetper move P60_Period(a5),6(a4) else nop endc P60_contfxdone ifne P60_il bsr P60_funk2 endc add.l d6,a5 add.l d7,a4 dbf d5,P60_lopas cmp P60_speed2(pc),d4 beq.b P60_preplay rts ifne P60_pu P60_portup moveq #0,D0 move.b P60_Info(a5),d0 sub d0,P60_Period(a5) moveq #113,d0 cmp P60_Period(a5),d0 ble.b .skip move d0,P60_Period(a5) move d0,6(a4) bra.b P60_contfxdone .skip move P60_Period(a5),6(a4) bra.b P60_contfxdone endc ifne P60_pd P60_portdwn moveq #0,d0 move.b P60_Info(a5),d0 add d0,P60_Period(a5) cmp #856,P60_Period(a5) ble.b .skip move #856,d0 move d0,P60_Period(a5) move d0,6(a4) bra.b P60_contfxdone .skip move P60_Period(a5),6(a4) bra.b P60_contfxdone endc P60_preplay ifne P60_pde tst P60_pdelay-P60_cn(a3) beq.b .djdj rts .djdj endc lea P60_temp0(pc),a5 lea P60_Samples-16(pc),a0 moveq #channels-1,d5 P60_loaps ifne P60_pl lea P60_TData(a5),a1 move 2(a5),(a1)+ move.l P60_ChaPos(a5),(a1)+ move.l P60_TempPos(a5),(a1)+ move P60_TempLen(a5),(a1) endc tst.b P60_Pack(a5) beq.b P60_takeone bmi.b .keepsame subq.b #1,P60_Pack(a5) clr P60_OnOff(a5) add.l d6,a5 dbf d5,P60_loaps rts .keepsame addq.b #1,P60_Pack(a5) bra.b P60_dko P60_takeone tst.b P60_TempLen+1(a5) beq.b P60_takenorm subq.b #1,P60_TempLen+1(a5) move.l P60_TempPos(a5),a2 P60_jedi move.b (a2)+,(a5) bpl.b P60_normal not.b (a5)+ move.b (a2)+,(a5)+ ifeq opt020 move.b (a2)+,(a5)+ move.b (a2)+,(a5)+ else move (a2)+,(a5)+ endc subq.l #4,a5 move.l a2,P60_TempPos(a5) bra.b P60_dko P60_normal ifeq opt020 move.b (a2)+,1(a5) move.b (a2)+,2(a5) else move (a2)+,1(a5) endc move.l a2,P60_TempPos(a5) bra.b P60_dko P60_takenorm move.l P60_ChaPos(a5),a2 move.b (a2)+,(a5) bmi.b P60_packed ifeq opt020 move.b (a2)+,1(a5) move.b (a2)+,2(a5) else move (a2)+,1(a5) endc move.l a2,P60_ChaPos(a5) bra.b P60_dko P60_kuiskus move.b (a2)+,P60_TempLen+1(a5) moveq #0,d0 ifeq opt020 move.b (a2)+,d0 lsl #8,d0 move.b (a2)+,d0 else move (a2)+,d0 endc move.l a2,P60_ChaPos(a5) sub.l d0,a2 bra.b P60_jedi P60_packed cmp.b #$80,(a5) beq.b P60_kuiskus not.b (a5)+ move.b (a2)+,(a5)+ ifeq opt020 move.b (a2)+,(a5)+ move.b (a2)+,(a5)+ else move (a2)+,(a5)+ endc subq.l #4,a5 move.l a2,P60_ChaPos(a5) P60_dko st P60_OnOff(a5) move (a5),d0 and #$1f0,d0 beq.b .koto lea (a0,d0),a1 move.l a1,P60_Sample(a5) ifne P60_ft move.l P60_SampleVolume(a1),P60_Volume(a5) else move P60_SampleVolume(a1),P60_Volume(a5) endc ifne P60_il move.l P60_RepeatOffset(a1),P60_Wave(a5) endc ifne P60_sof clr P60_Offset(a5) endc .koto add.l d6,a5 dbf d5,P60_loaps rts P60_playtime clr (a3) ifne P60_pde tst P60_pdelay-P60_cn(a3) beq.b .djdj subq #1,P60_pdelay-P60_cn(a3) bra P60_delay .djdj endc tst P60_speedis1-P60_cn(a3) beq.b .mo bsr P60_preplay .mo lea P60_temp0(pc),a5 lea $a0(a6),a4 ifne system moveq #1,d4 move d4,P60_server-P60_cn(a3) move.l P60_craddr+4(pc),a1 move.b #$4a,(a1) move.b d4,$100(a1) else lea P60_dmason(pc),a1 move.l P60_vektori(pc),a2 move.l a1,(a2) ifeq CIA move.b #$19,$bfde00 else move.b #$4a,$bfd400 move.b #1,$bfd500 endc endc lea P60_periods(pc),a2 moveq #0,d4 moveq #channels-1,d5 P60_los tst P60_OnOff(a5) beq.b P60_nocha moveq #$f,d0 and (a5),d0 lea P60_jtab(pc),a1 add d0,d0 add.l d0,a1 add (a1),a1 jmp (a1) P60_fxdone moveq #$7e,d0 and.b (a5),d0 beq.b P60_nocha ifne P60_vib clr.b P60_VibPos(a5) endc ifne P60_tre clr.b P60_TrePos(a5) endc ifne P60_ft add P60_Fine(a5),d0 endc move d0,P60_Note(a5) move (a2,d0),P60_Period(a5) P60_zample ifne P60_sof tst P60_Offset(a5) bne P60_pek endc or P60_DMABit(a5),d4 move d4,$96(a6) move.l P60_Sample(a5),a1 move.l (a1)+,(a4) move (a1),4(a4) P60_nocha ifeq fade move.l P60_Period(a5),6(a4) else move P60_Period(a5),6(a4) move P60_Volume(a5),P60_Shadow(a5) endc P60_skip ifne P60_il bsr P60_funk2 endc add.l d6,a5 add.l d7,a4 dbf d5,P60_los move.b d4,P60_dma+1-P60_cn(a3) ifne P60_pl tst.b P60_plflag+1-P60_cn(a3) beq.b P60_ohittaa lea P60_temp0(pc),a1 lea P60_looppos(pc),a0 moveq #channels-1,d0 .talt move.b 1(a0),3(a1) addq.l #2,a0 move.l (a0)+,P60_ChaPos(a1) move.l (a0)+,P60_TempPos(a1) move (a0)+,P60_TempLen(a1) add.l d6,a1 dbf d0,.talt move P60_plrowpos(pc),P60_rowpos-P60_cn(a3) clr.b P60_plflag+1-P60_cn(a3) rts endc P60_ohittaa subq #1,P60_rowpos-P60_cn(a3) bmi.b P60_nextpattern rts P60_nextpattern ifne P60_pl clr P60_plflag-P60_cn(a3) endc move.l P60_patternbase(pc),a4 moveq #63,d0 move d0,P60_rowpos-P60_cn(a3) move.l P60_spos(pc),a1 move.b (a1)+,d0 bpl.b P60_dk move.l P60_possibase(pc),a1 move.b (a1)+,d0 P60_dk move.l a1,P60_spos-P60_cn(a3) lsl #3,d0 move.l P60_positionbase(pc),a1 add.l d0,a1 move (a1)+,d0 lea (a4,d0.l),a2 move.l a2,P60_ChaPos+P60_temp0-P60_cn(a3) move (a1)+,d0 lea (a4,d0.l),a2 move.l a2,P60_ChaPos+P60_temp1-P60_cn(a3) move (a1)+,d0 lea (a4,d0.l),a2 move.l a2,P60_ChaPos+P60_temp2-P60_cn(a3) move (a1),d0 add.l d0,a4 move.l a4,P60_ChaPos+P60_temp3-P60_cn(a3) rts ifne P60_tp P60_settoneport move.b P60_Info(a5),d0 beq.b P60_toponochange move.b d0,P60_TPSpeed+1(a5) P60_toponochange moveq #$7e,d0 and.b (a5),d0 beq P60_nocha add P60_Fine(a5),d0 move d0,P60_Note(a5) move (a2,d0),P60_ToPeriod(a5) bra P60_nocha endc ifne P60_sof P60_sampleoffse moveq #$7e,d0 and.b (a5),d0 beq P60_nocha ifne P60_vib clr.b P60_VibPos(a5) endc ifne P60_tre clr.b P60_TrePos(a5) endc ifne P60_ft add P60_Fine(a5),d0 endc move d0,P60_Note(a5) move (a2,d0),P60_Period(a5) moveq #0,d1 move #$ff00,d1 and 2(a5),d1 beq.b P60_pek add d1,P60_Offset(a5) P60_pek move P60_Offset(a5),d1 move d1,P60_Offset(a5) or P60_DMABit(a5),d4 move d4,$96(a6) move.l P60_Sample(a5),a1 move.l (a1)+,d0 add.l d1,d0 move.l d0,(a4) lsr #1,d1 move (a1),d0 sub d1,d0 bpl.b P60_offok move.l -4(a1),(a4) moveq #1,d0 P60_offok move d0,4(a4) bra P60_nocha endc ifne P60_vl P60_volum move.b P60_Info(a5),P60_Volume+1(a5) bra P60_fxdone endc ifne P60_pj P60_posjmp moveq #0,d0 move.b P60_Info(a5),d0 add.l P60_possibase(pc),d0 move.l d0,P60_spos-P60_cn(a3) endc ifne P60_pb P60_pattbreak moveq #64,d0 move d0,P60_rowpos-P60_cn(a3) move.l P60_spos(pc),a1 move.l P60_patternbase(pc),a0 move.b (a1)+,d0 bpl.b P60_dk2 move.l P60_possibase(pc),a1 move.b (a1)+,d0 P60_dk2 move.l a1,P60_spos-P60_cn(a3) move.l P60_positionbase(pc),a1 lsl #3,d0 add.l d0,a1 movem (a1),d0-d3 lea (a0,d0.l),a1 move d1,d0 move.l a1,P60_ChaPos+P60_temp0-P60_cn(a3) lea (a0,d0.l),a1 move.l a1,P60_ChaPos+P60_temp1-P60_cn(a3) move d2,d0 lea (a0,d0.l),a1 move.l a1,P60_ChaPos+P60_temp2-P60_cn(a3) move d3,d0 add.l d0,a0 move.l a0,P60_ChaPos+P60_temp3-P60_cn(a3) bra P60_fxdone endc ifne P60_vib P60_vibrato move.b P60_Info(a5),d0 beq P60_fxdone move.b d0,d1 move.b P60_VibCmd(a5),d2 and.b #$f,d0 beq.b P60_vibskip and.b #$f0,d2 or.b d0,d2 P60_vibskip and.b #$f0,d1 beq.b P60_vibskip2 and.b #$f,d2 or.b d1,d2 P60_vibskip2 move.b d2,P60_VibCmd(a5) bra P60_fxdone endc ifne P60_tre P60_settremo move.b P60_Info(a5),d0 beq P60_fxdone move.b d0,d1 move.b P60_TreCmd(a5),d2 moveq #$f,d3 and.b d3,d0 beq.b P60_treskip and.b #$f0,d2 or.b d0,d2 P60_treskip and.b #$f0,d1 beq.b P60_treskip2 and.b d3,d2 or.b d1,d2 P60_treskip2 move.b d2,P60_TreCmd(a5) bra P60_fxdone endc ifne P60_ec P60_ecommands move.b P60_Info(a5),d0 and.b #$f0,d0 lsr #3,d0 move P60_etab(pc,d0),d0 jmp P60_etab(pc,d0) P60_etab ifne P60_fi dc P60_filter-P60_etab else dc P60_fxdone-P60_etab endc ifne P60_fsu dc P60_fineup-P60_etab else dc P60_fxdone-P60_etab endc ifne P60_fsd dc P60_finedwn-P60_etab else dc P60_fxdone-P60_etab endc dc P60_fxdone-P60_etab dc P60_fxdone-P60_etab ifne P60_sft dc P60_setfinetune-P60_etab else dc P60_fxdone-P60_etab endc ifne P60_pl dc P60_patternloop-P60_etab else dc P60_fxdone-P60_etab endc dc P60_fxdone-P60_etab ifne P60_timing dc P60_sete8-P60_etab else dc P60_fxdone-P60_etab endc ifne P60_rt dc P60_setretrig-P60_etab else dc P60_fxdone-P60_etab endc ifne P60_fvu dc P60_finevup-P60_etab else dc P60_fxdone-P60_etab endc ifne P60_fvd dc P60_finevdwn-P60_etab else dc P60_fxdone-P60_etab endc dc P60_fxdone-P60_etab ifne P60_nd dc P60_ndelay-P60_etab else dc P60_fxdone-P60_etab endc ifne P60_pde dc P60_pattdelay-P60_etab else dc P60_fxdone-P60_etab endc ifne P60_il dc P60_funk-P60_etab else dc P60_fxdone-P60_etab endc endc ifne P60_fi P60_filter move.b P60_Info(a5),d0 and.b #$fd,$bfe001 or.b d0,$bfe001 bra P60_fxdone endc ifne P60_fsu P60_fineup P60_getnote moveq #$f,d0 and.b P60_Info(a5),d0 sub d0,P60_Period(a5) moveq #113,d0 cmp P60_Period(a5),d0 ble.b .jup move d0,P60_Period(a5) .jup moveq #$7e,d0 and.b (a5),d0 bne P60_zample bra P60_nocha endc ifne P60_fsd P60_finedwn P60_getnote moveq #$f,d0 and.b P60_Info(a5),d0 add d0,P60_Period(a5) cmp #856,P60_Period(a5) ble.b .jup move #856,P60_Period(a5) .jup moveq #$7e,d0 and.b (a5),d0 bne P60_zample bra P60_nocha endc ifne P60_sft P60_setfinetune moveq #$f,d0 and.b P60_Info(a5),d0 ifeq opt020 add d0,d0 move P60_mulutab(pc,d0),P60_Fine(a5) else move P60_mulutab(pc,d0*2),P60_Fine(a5) endc bra P60_fxdone P60_mulutab dc 0,74,148,222,296,370,444,518,592,666,740,814,888,962,1036,1110 endc ifne P60_pl P60_patternloop moveq #$f,d0 and.b P60_Info(a5),d0 beq.b P60_setloop tst.b P60_plflag-P60_cn(a3) bne.b P60_noset move d0,P60_plcount-P60_cn(a3) st.b P60_plflag-P60_cn(a3) P60_noset tst P60_plcount-P60_cn(a3) bne.b P60_looppaa clr.b P60_plflag-P60_cn(a3) bra P60_fxdone P60_looppaa st.b P60_plflag+1-P60_cn(a3) subq #1,P60_plcount-P60_cn(a3) bra P60_fxdone P60_setloop tst.b P60_plflag-P60_cn(a3) bne P60_fxdone move P60_rowpos(pc),P60_plrowpos-P60_cn(a3) lea P60_temp0+P60_TData(pc),a1 lea P60_looppos(pc),a0 moveq #channels-1,d0 .talt move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1),(a0)+ subq.l #8,a1 add.l d6,a1 dbf d0,.talt bra P60_fxdone endc ifne P60_fvu P60_finevup moveq #$f,d0 and.b P60_Info(a5),d0 add d0,P60_Volume(a5) moveq #64,d0 cmp P60_Volume(a5),d0 bge P60_fxdone move d0,P60_Volume(a5) bra P60_fxdone endc ifne P60_fvd P60_finevdwn moveq #$f,d0 and.b P60_Info(a5),d0 sub d0,P60_Volume(a5) bpl P60_fxdone clr P60_Volume(a5) bra P60_fxdone endc ifne P60_timing P60_sete8 moveq #$f,d0 and.b P60_Info(a5),d0 move d0,P60_E8-P60_cn(a3) bra P60_fxdone endc ifne P60_rt P60_setretrig moveq #$f,d0 and.b P60_Info(a5),d0 move d0,P60_RetrigCount(a5) bra P60_fxdone endc ifne P60_nd P60_ndelay moveq #$7e,d0 and.b (a5),d0 beq P60_skip ifne P60_vib clr.b P60_VibPos(a5) endc ifne P60_tre clr.b P60_TrePos(a5) endc ifne P60_ft add P60_Fine(a5),d0 endc move d0,P60_Note(a5) move (a2,d0),P60_Period(a5) ifeq fade move P60_Volume(a5),8(a4) else move P60_Volume(a5),P60_Shadow(a5) endc bra P60_skip endc ifne P60_pde P60_pattdelay moveq #$f,d0 and.b P60_Info(a5),d0 move d0,P60_pdelay-P60_cn(a3) bra P60_fxdone endc ifne P60_sd P60_cspeed move.b P60_Info(a5),d0 ifne CIA tst P60_Tempo-P60_cn(a3) beq.b P60_VBlank cmp.b #32,d0 bhs.b P60_STempo endc P60_VBlank cmp.b #1,d0 beq.b P60_jkd move.b d0,P60_speed+1-P60_cn(a3) subq.b #1,d0 move.b d0,P60_speed2+1-P60_cn(a3) clr P60_speedis1-P60_cn(a3) bra P60_fxdone P60_jkd move.b d0,P60_speed+1-P60_cn(a3) move.b d0,P60_speed2+1-P60_cn(a3) st P60_speedis1-P60_cn(a3) bra P60_fxdone ifne CIA P60_STempo move.l P60_timer(pc),d1 divu d0,d1 move d1,P60_thi2-P60_cn(a3) sub #$1c8*2,d1 move d1,P60_thi-P60_cn(a3) bra P60_fxdone endc endc ifne P60_vbvs P60_vibochvslide move.b P60_Info(a5),d0 sub.b d0,P60_Volume+1(a5) bpl.b P60_test62 clr P60_Volume(a5) ifeq fade clr 8(a4) else clr P60_Shadow(a5) endc bra.b P60_vib2 P60_test62 moveq #64,d0 cmp P60_Volume(a5),d0 bge.b .ncs2 move d0,P60_Volume(a5) .ncs2 ifeq fade move P60_Volume(a5),8(a4) else move P60_Volume(a5),P60_Shadow(a5) endc endc ifne P60_vib P60_vib2 move #$f00,d0 move P60_VibCmd(a5),d1 and d1,d0 lsr #2,d0 lsr #1,d1 and #$3e,d1 add d1,d0 move P60_Period(a5),d1 tst.b P60_VibPos(a5) bmi.b .vibneg add P60_vibtab(pc,d0),d1 bra.b P60_vib4 .vibneg sub P60_vibtab(pc,d0),d1 P60_vib4 move d1,6(a4) move.b P60_VibCmd(a5),d0 lsr.b #2,d0 and #$3c,d0 add.b d0,P60_VibPos(a5) bra P60_contfxdone endc ifne P60_tre P60_tremo move #$f00,d0 move P60_TreCmd(a5),d1 and d1,d0 lsr #2,d0 lsr #1,d1 and #$3e,d1 add d1,d0 move P60_Volume(a5),d1 tst.b P60_TrePos(a5) bmi.b .treneg add P60_vibtab(pc,d0),d1 cmp #64,d1 ble.b P60_tre4 moveq #64,d1 bra.b P60_tre4 .treneg sub P60_vibtab(pc,d0),d1 bpl.b P60_tre4 moveq #0,d1 P60_tre4 ifeq fade move d1,8(a4) else move d1,P60_Shadow(a5) endc move.b P60_TreCmd(a5),d0 lsr.b #2,d0 and #$3c,d0 add.b d0,P60_TrePos(a5) bra P60_contfxdone endc ifne P60_vib!P60_tre P60_vibtab incbin vibtab endc ifne P60_il P60_funk moveq #$f,d0 and.b P60_Info(a5),d0 move.b d0,P60_Funkspd(a5) bra P60_fxdone P60_funk2 moveq #0,d0 move.b P60_Funkspd(a5),d0 beq.b P60_funkend move.b P60_FunkTable(pc,d0),d0 add.b d0,P60_Funkoff(a5) bpl.b P60_funkend clr.b P60_Funkoff(a5) move.l P60_Sample(a5),a1 move.l P60_RepeatOffset(a1),d1 move P60_RepeatLength(a1),d0 add.l d0,d0 add.l d1,d0 move.l P60_Wave(a5),a0 addq.l #1,a0 cmp.l d0,a0 blo.b P60_funkok move.l d1,a0 P60_funkok move.l a0,P60_Wave(a5) not.b (a0) P60_funkend rts P60_FunkTable dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128 endc P60_jtab dc P60_fxdone-* dc P60_fxdone-* dc P60_fxdone-* ifne P60_tp dc P60_settoneport-* else dc P60_fxdone-* endc ifne P60_vib dc P60_vibrato-* else dc P60_fxdone-* endc ifne P60_tpvs dc P60_toponochange-* else dc P60_fxdone-* endc dc P60_fxdone-* ifne P60_tre dc P60_settremo-* else dc P60_fxdone-* endc dc P60_fxdone-* ifne P60_sof dc P60_sampleoffse-* else dc P60_fxdone-* endc dc P60_fxdone-* ifne P60_pj dc P60_posjmp-* else dc P60_fxdone-* endc ifne P60_vl dc P60_volum-* else dc P60_fxdone-* endc ifne P60_pb dc P60_pattbreak-* else dc P60_fxdone-* endc ifne P60_ec dc P60_ecommands-* else dc P60_fxdone-* endc ifne P60_sd dc P60_cspeed-* else dc P60_fxdone-* endc P60_dmason ifeq system tst.b $bfdd00 move.l a0,-(sp) move.l P60_vektori(pc),a0 move.l P60_intaddr(pc),(a0) move.l (sp)+,a0 move P60_dma(pc),$dff096 move #$2000,$dff09c move.b #$19,$bfde00 rte else move P60_dma(pc),$96(a6) addq #1,P60_server-P60_cn(a3) move.l P60_craddr(pc),a0 move.b #$19,(a0) bra P60_ohi endc P60_setrepeat ifeq system tst.b $bfdd00 movem.l a0/a1,-(sp) lea $dff0a0,a1 else lea $a0(a6),a1 endc move.l P60_Sample+P60_temp0(pc),a0 addq.l #6,a0 move.l (a0)+,(a1)+ move (a0),(a1) ifgt channels-1 move.l P60_Sample+P60_temp1(pc),a0 addq.l #6,a0 move.l (a0)+,12(a1) move (a0),16(a1) endc ifgt channels-2 move.l P60_Sample+P60_temp2(pc),a0 addq.l #6,a0 move.l (a0)+,28(a1) move (a0),32(a1) endc ifgt channels-3 move.l P60_Sample+P60_temp3(pc),a0 addq.l #6,a0 move.l (a0)+,44(a1) move (a0),48(a1) endc ifne system clr P60_server-P60_cn(a3) move.l P60_craddr+4(pc),a0 move.b P60_tlo(pc),(a0) move.b P60_thi(pc),$100(a0) bra P60_ohi else move #$2000,-8(a1) ifne CIA move.l P60_vektori(pc),a0 move.l P60_tintti(pc),(a0) move.b P60_tlo(pc),$bfd400 move.b P60_thi(pc),$bfd500 endc movem.l (sp)+,a0/a1 rte endc P60_temp0 dcb.b Channel_Block_SIZE-2 dc 1 P60_temp1 dcb.b Channel_Block_SIZE-2 dc 2 P60_temp2 dcb.b Channel_Block_SIZE-2 dc 4 P60_temp3 dcb.b Channel_Block_SIZE-2 dc 8 P60_cn dc 0 P60_dma dc $8200 P60_rowpos dc 0 P60_speed dc 0 P60_speed2 dc 0 P60_speedis1 dc 0 P60_spos dc.l 0 ifeq system P60_vektori dc.l 0 endc P60_ofilter dc 0 ifne CIA P60_tintti dc.l 0 P60_thi dc.b 0 P60_tlo dc.b 0 P60_thi2 dc.b 0 P60_tlo2 dc.b 0 P60_timer dc.l 0 endc ifne P60_pl P60_plcount dc 0 P60_plflag dc 0 P60_plreset dc 0 P60_plrowpos dc 0 P60_looppos dcb.b 12*channels endc ifne P60_pde P60_pdelay dc 0 endc P60_Samples dcb.b 16*31 P60_positionbase dc.l 0 P60_possibase dc.l 0 P60_patternbase dc.l 0 P60_intaddr dc.l 0 P60_oldlev6 dc.l 0 ifne system P60_server dc 0 P60_miscbase dc.l 0 P60_audioopen dc.b 0 P60_sigbit dc.b -1 P60_ciares dc.l 0 P60_craddr dc.l 0,0,0 P60_dat dc $f00 P60_timerinterrupt dc 0,0,0,0,127 P60_timerdata dc.l 0,0,0 P60_allocport dc.l 0,0 dc.b 4,0 dc.l 0 dc.b 0,0 dc.l 0 P60_reqlist dc.l 0,0,0 dc.b 5,0 P60_allocreq dc.l 0,0 dc 127 dc.l 0 P60_portti dc.l 0 dc 68 dc.l 0,0,0 dc 0 P60_reqdata dc.l 0 dc.l 1,0,0,0,0,0,0 dc 0 P60_audiodev dc.b 'audio.device',0 P60_cianame dc.b 'ciax.resource',0 P60_timeropen dc.b 0 P60_timerint dc.b 'P60TimerInterrupt',0 endc P60_etu ******** END OF BINARY FILE ************** section chip,data_c P60_data incbin "ram:P60.pid.alkumusa.s" section smp,bss_c samples ;ds.b $32600 ;uncomment if you have packed samples ;and insert sample buffer length