;Player-testcode ;start = 10 ;Starting position fade = 0 ;0 = normal ;1 = use master volume CIA = 1 ;0 = disabled ;1 = enabled system = 1 ;0 = killer ;1 = friendly channels = 4 ;amount of channels to be played use = -1 ;The Usecode include Player.i section Player5.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 P50_data,a0 sub.l a1,a1 moveq #0,d0 ;Auto Detect bsr P50_motuuli+P50_InitOffset tst d0 bne P50_exit P50_sync ifeq CIA move.l 4(a6),d0 andi.l #$1ff00,d0 cmp.l #$8100,d0 bne.b P50_sync P50_sync2 move.l 4(a6),d0 andi.l #$1ff00,d0 cmp.l #$8200,d0 bne.b P50_sync2 move #$fff,$180(a6) bsr P50_motuuli+P50_MusicOffset clr $180(a6) moveq #0,d0 move 6(a6),d0 sub.l #$8200,d0 cmp.l P50_raster(pc),d0 ble.b P50_kosj move d0,P50_raster+2 P50_kosj tst P50_raster2+2 bne.b P50_doing move d0,P50_raster2+2 bra.b P50_doneg P50_doing add.l P50_raster2(pc),d0 asr.l #1,d0 move.l d0,P50_raster2 P50_doneg addq.l #1,P50_frames ifne fade btst #10,$16(a6) bne.b P50_jid move P50_diri(pc),d0 sub d0,P50_motuuli+P50_MasterVolume bne.b P50_judo neg P50_diri bra.b P50_jid P50_judo cmp #64,P50_motuuli+P50_MasterVolume bne.b P50_jid neg P50_diri endc P50_jid endc btst #6,$bfe001 bne P50_sync P50_exit bsr P50_motuuli+P50_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 movem.l P50_raster(pc),d0-d2 move.l P50_positionbase(pc),a0 move.l P50_patternbase(pc),a1 move.l P50_spos(pc),a2 rts P50_IRQsave dc 0 P50_DMAsave dc 0 P50_raster dc.l 0 P50_raster2 dc.l 0 P50_frames dc.l 0 P50_diri dc 1 ********************************* * Player v5.0A ฎ * * All in one-version * * MC68000/68010-version * * Version 503.1 * * ฉ 1992 Jarno Paananen * * All rights reserved * ********************************* ******** START OF BINARY FILE ************** P50_motuuli bra P50_Init ifeq CIA bra P50_Music else rts rts endc bra P50_End rts ;no P50_SetRepeat rts P50_master dc 64 ;Master volume (0-64) P50_Tempo dc 1 ;Use tempo? 0=no,non 0=yes P50_play dc 1 ;Stop flag (0=stop) P50_Temp0Offset dc.l P50_temp0-P50_motuuli P50_Temp1Offset dc.l P50_temp1-P50_motuuli P50_Temp2Offset dc.l P50_temp2-P50_motuuli P50_Temp3Offset dc.l P50_temp3-P50_motuuli P50_getnote macro moveq #$7e,d0 and.b (a5),d0 beq.b .nonote\@ ifne P50_vib clr.b P50_VibPos(a5) endc ifne P50_ft add P50_Fine(a5),d0 endc move d0,P50_Note(a5) move (a2,d0),P50_Period(a5) .nonote\@ endm ifne CIA ifeq system P50_intti movem.l d0-a6,-(sp) tst.b $bfdd00 move.b #$7e,$bfdd00 lea $dff000,a6 ; move #$fff,$180(a6) bsr P50_Music ; move #0,$180(a6) move #$2000,$9c(a6) movem.l (sp)+,d0-a6 rte else P50_lev6server movem.l d2-d7/a2-a6,-(sp) lea $dff000,a6 lea P50_cn(pc),a3 move P50_server(pc),d0 bne.b P50_eieka pea P50_ohi(pc) bra P50_Music P50_eieka subq #1,d0 beq P50_dmason bra P50_setrepeat P50_ohi movem.l (sp)+,d2-d7/a2-a6 moveq #1,d0 rts endc endc ;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ ;ญ Call P50_Init to initialize the playroutine ญ ;ญ D0 --> Timer detection (for CIA-version) ญ ;ญ A0 --> Address to the module ญ ;ญ A1 --> Address to samples/0 ญ ;ญ A6 --> Customchip baseaddress ($DFF000) ญ ;ญ D0 <-- 0 if succeeded ญ ;ญ Uses A0-A5/D0-D6 ญ ;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ P50_Init cmp.l #"P50A",(a0)+ beq.b .modok subq.l #4,a0 .modok basereg P50_cn,a3 lea P50_cn(pc),a3 ifne CIA move d0,-(sp) endc move.l a1,d0 bne.b .redirect moveq #0,d0 move (a0),d0 lea (a0,d0.l),a1 .redirect lea 4(a0),a2 lea P50_Samples(pc),a4 moveq #0,d1 move.b 3(a0),d1 subq #1,d1 moveq #0,d4 P50_lopos move.l a1,(a4)+ move (a2)+,d4 bpl.b P50_kook neg d4 asl #4,d4 lea P50_Samples-16(pc),a5 move.l (a5,d4),d6 move.l d6,-4(a4) move 4(a5,d4),d4 sub.l d4,a1 sub.l d4,a1 bra.b P50_jatk P50_kook move.l a1,d6 P50_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 add.l d0,d0 move.l d6,a5 lea (a5,d0.l),a5 move.l a5,(a4)+ move d5,(a4)+ bra.b P50_gene .norepeat move.l d6,(a4)+ move #1,(a4)+ P50_gene move d3,(a4)+ mulu #74,d2 move d2,(a4)+ add.l d4,a1 add.l d4,a1 dbf d1,P50_lopos lea P50_temp0(pc),a1 lea P50_temp1(pc),a2 lea P50_temp2(pc),a4 lea P50_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 moveq #0,d0 move.b 3(a0),d0 mulu #6,d0 lea 4(a0,d0.l),a1 move.l a1,P50_positionbase(a3) move.b 2(a0),d1 lsl #3,d1 lea (a1,d1.l),a4 move.l a4,P50_possibase(a3) move.l a4,a2 moveq #-1,d0 .search cmp.b (a2)+,d0 bne.b .search move.l a2,P50_patternbase(a3) ifd start lea start(a4),a4 endc moveq #0,d0 move.b (a4)+,d0 move.l a4,P50_spos(a3) lsl #2,d0 add.l d0,a1 move.l a2,a4 moveq #0,d0 move (a1)+,d0 lea (a4,d0.l),a2 move.l a2,P50_ChaPos+P50_temp0(a3) move (a1)+,d0 lea (a4,d0.l),a2 move.l a2,P50_ChaPos+P50_temp1(a3) move (a1)+,d0 lea (a4,d0.l),a2 move.l a2,P50_ChaPos+P50_temp2(a3) move (a1)+,d0 lea (a4,d0.l),a2 move.l a2,P50_ChaPos+P50_temp3(a3) lea P50_setrepeat(pc),a0 move.l a0,P50_intaddr(a3) move #63,P50_rowpos(a3) move #6,P50_speed(a3) move #5,P50_speed2(a3) clr P50_speedis1(a3) ifne P50_pl clr P50_plflag(a3) clr P50_plcount(a3) endc ifne P50_pde clr P50_pdelay(a3) endc clr (a3) bset #1,$bfe001 ifeq system move.l 4.w,a6 moveq #0,d0 btst d0,297(a6) beq.b .no68010 lea P50_liko(pc),a5 jsr -$1e(a6) .no68010 move.l d0,P50_vektori(a3) move.l d0,a0 move.l $78(a0),P50_oldlev6(a3) 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) .wati btst d0,$d00(a0) beq.b .wati move.b #$81,$d00(a0) move #$e000,$9a(a6) endc ifne CIA move (sp)+,d0 subq #1,d0 beq.b P50_ForcePAL subq #1,d0 beq.b P50_NTSC move.l 4.w,a1 cmp.b #60,$212(a1) ;VBlankFrequency beq.b P50_NTSC P50_ForcePAL move.l #1773447,d0 ;PAL bra.b P50_setcia P50_NTSC move.l #1789773,d0 ;NTSC P50_setcia move.l d0,P50_timer(a3) divu #125,d0 move d0,P50_thi2(a3) sub #$1c8*2,d0 move d0,P50_thi(a3) ifeq system move.b d0,$400(a0) lsr #8,d0 move.b d0,$500(a0) lea P50_intti(pc),a1 move.l a1,P50_tintti(a3) move.l P50_vektori(pc),a2 move.l a1,$78(a2) move.b #$81,$d00(a0) move.b #$19,$e00(a0) moveq #0,d0 endc endc ifeq system move #$e000,$9a(a6) rts P50_liko dc.l $4E7A0801 ;MOVEC VBR,d0 rte endc ifne system move.l 4.w,a6 moveq #-1,d0 jsr -$14a(a6) move.b d0,P50_sigbit(a3) bmi P50_err lea P50_allocport(pc),a1 move.l a1,P50_portti(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 P50_reqlist(pc),a0 move.l a0,(a0) addq.l #4,(a0) clr.l 4(a0) move.l a0,8(a0) lea P50_dat(pc),a1 move.l a1,P50_reqdata(a3) lea P50_allocreq(pc),a1 lea P50_audiodev(pc),a0 moveq #0,d0 moveq #0,d1 move.l 4.w,a6 jsr -$1bc(a6) tst.b d0 bne P50_err st.b P50_audioopen(a3) lea P50_timerint(pc),a1 move.l a1,P50_timerdata(a3) lea P50_lev6server(pc),a1 move.l a1,P50_timerdata+8(a3) moveq #8,d3 lea P50_cianame(pc),a1 move.b #'b',3(a1) P50_openciares moveq #0,d0 jsr -$1f2(a6) move.l d0,P50_ciares(a3) beq.b P50_tryCIAA move.l d0,a6 lea P50_timerinterrupt(pc),a1 moveq #0,d0 jsr -6(a6) tst.l d0 beq.b P50_gottimer addq.l #4,d3 lea P50_timerinterrupt(pc),a1 moveq #1,d0 jsr -6(a6) tst.l d0 beq.b P50_gottimer P50_tryCIAA lea P50_cianame(pc),a1 cmp.b #'b',3(a1) bne.b P50_err subq.b #1,3(a1) moveq #0,d3 bra P50_openciares P50_gottimer lea P50_craddr+8(pc),a6 move.l P50_ciaaddr(pc,d3),d0 move.l d0,(a6) sub #$100,d0 move.l d0,-(a6) moveq #2,d3 btst #9,d0 bne.b P50_timerB subq.b #1,d3 add #$100,d0 P50_timerB add #$900,d0 move.l d0,-(a6) move.l d0,a0 and.b #%10000000,(a0) move.b d3,P50_timeropen(a3) moveq #0,d0 move.l P50_craddr+4(pc),a1 move.b P50_tlo(pc),(a1) move.b P50_thi(pc),$100(a1) or.b #$19,(a0) rts P50_err moveq #-1,d0 rts P50_ciaaddr dc.l $bfe501,$bfe701,$bfd500,$bfd700 endc ;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ ;ญ Call P50_End to stop the music ญ ;ญ A6 --> Customchip baseaddress ($DFF000) ญ ;ญ Uses D0/A0 ญ ;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ P50_End moveq #0,d0 move d0,$a8(a6) move d0,$b8(a6) move d0,$c8(a6) move d0,$d8(a6) bclr #1,$bfe001 move #$f,$96(a6) ifeq system move #$2000,$9a(a6) move.l P50_vektori(pc),a0 move.l P50_oldlev6(pc),$78(a0) else lea P50_cn(pc),a3 moveq #0,d0 move.b P50_timeropen(pc),d0 beq.b P50_rem1 move.l P50_ciares(pc),a6 lea P50_timerinterrupt(pc),a1 subq.b #1,d0 jsr -$c(a6) P50_rem1 move.l 4.w,a6 tst.b P50_audioopen(a3) beq.b P50_rem2 lea P50_allocreq(a3),a1 jsr -$1c2(a6) clr.b P50_audioopen(a3) P50_rem2 moveq #0,d0 move.b P50_sigbit(pc),d0 bmi.b P50_rem3 jsr -$150(a6) st P50_sigbit(a3) P50_rem3 endc rts ifne fade P50_mfade move P50_master(pc),d0 move P50_temp0+P50_Shadow(pc),d1 mulu d0,d1 lsr #6,d1 move d1,$a8(a6) ifgt channels-1 move P50_temp1+P50_Shadow(pc),d1 mulu d0,d1 lsr #6,d1 move d1,$b8(a6) endc ifgt channels-2 move P50_temp2+P50_Shadow(pc),d1 mulu d0,d1 lsr #6,d1 move d1,$c8(a6) endc ifgt channels-3 move P50_temp3+P50_Shadow(pc),d1 mulu d0,d1 lsr #6,d1 move d1,$d8(a6) endc rts endc ;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ ;ญ Call P50_Music every frame to play the music ญ ;ญ A6 --> Customchip baseaddress ($DFF000) ญ ;ญ Uses A0-A5/D0-D7 ญ ;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ P50_Music lea P50_cn(pc),a3 tst P50_play(a3) bne.b P50_ohitaaa ifne CIA ifeq system move.l P50_vektori(pc),a5 move.l P50_tintti(pc),$78(a5) move.b P50_tlo2(pc),$bfd400 move.b P50_thi2(pc),$bfd500 else clr P50_server(a3) move.l P50_craddr+4(pc),a0 move.b P50_tlo2(pc),(a0) move.b P50_thi2(pc),$100(a0) endc endc rts P50_ohitaaa ifne fade pea P50_mfade(pc) endc moveq #Channel_Block_SIZE,d6 moveq #16,d7 move (a3),d4 addq #1,d4 cmp P50_speed(pc),d4 beq P50_playtime move d4,(a3) P50_delay ifne CIA ifeq system move.l P50_vektori(pc),a5 move.l P50_tintti(pc),$78(a5) move.b P50_tlo2(pc),$bfd400 move.b P50_thi2(pc),$bfd500 else clr P50_server(a3) move.l P50_craddr+4(pc),a0 move.b P50_tlo2(pc),(a0) move.b P50_thi2(pc),$100(a0) endc endc lea P50_temp0(pc),a5 lea $a0(a6),a4 moveq #channels-1,d5 P50_lopas tst P50_OnOff(a5) beq P50_contfxdone moveq #$f,d0 and (a5),d0 add d0,d0 move P50_jtab2(pc,d0),d0 jmp P50_jtab2(pc,d0) P50_jtab2 dc P50_contfxdone-P50_jtab2 ifne P50_pu dc P50_portup-P50_jtab2 else dc P50_contfxdone-P50_jtab2 endc ifne P50_pd dc P50_portdwn-P50_jtab2 else dc P50_contfxdone-P50_jtab2 endc ifne P50_tp dc P50_toneport-P50_jtab2 else dc P50_contfxdone-P50_jtab2 endc ifne P50_vib dc P50_vib2-P50_jtab2 else dc P50_contfxdone-P50_jtab2 endc ifne P50_tpvs dc P50_tpochvslide-P50_jtab2 else dc P50_contfxdone-P50_jtab2 endc ifne P50_vbvs dc P50_vibochvslide-P50_jtab2 else dc P50_contfxdone-P50_jtab2 endc ifne P50_tre dc P50_tremo-P50_jtab2 else dc P50_contfxdone-P50_jtab2 endc ifne P50_arp dc P50_arpeggio-P50_jtab2 else dc P50_contfxdone-P50_jtab2 endc dc P50_contfxdone-P50_jtab2 ifne P50_vs dc P50_volslide-P50_jtab2 else dc P50_contfxdone-P50_jtab2 endc dc P50_contfxdone-P50_jtab2 dc P50_contfxdone-P50_jtab2 dc P50_contfxdone-P50_jtab2 ifne P50_ec dc P50_contecommands-P50_jtab2 else dc P50_contfxdone-P50_jtab2 endc dc P50_contfxdone-P50_jtab2 ifne P50_ec P50_contecommands move.b P50_Info(a5),d0 and.b #$f0,d0 lsr #3,d0 move P50_etab2(pc,d0),d0 jmp P50_etab2(pc,d0) P50_etab2 dc P50_contfxdone-P50_etab2 ifne P50_fsu dc P50_fineup2-P50_etab2 else dc P50_contfxdone-P50_etab2 endc ifne P50_fsd dc P50_finedwn2-P50_etab2 else dc P50_contfxdone-P50_etab2 endc dc P50_contfxdone-P50_etab2 dc P50_contfxdone-P50_etab2 dc P50_contfxdone-P50_etab2 dc P50_contfxdone-P50_etab2 dc P50_contfxdone-P50_etab2 dc P50_contfxdone-P50_etab2 ifne P50_rt dc P50_retrig-P50_etab2 else dc P50_contfxdone-P50_etab2 endc ifne P50_fvu dc P50_finevup2-P50_etab2 else dc P50_contfxdone-P50_etab2 endc ifne P50_fvd dc P50_finevdwn2-P50_etab2 else dc P50_contfxdone-P50_etab2 endc dc P50_notecut-P50_etab2 ifne P50_nd dc P50_notedelay-P50_etab2 else dc P50_contfxdone-P50_etab2 endc dc P50_contfxdone-P50_etab2 dc P50_contfxdone-P50_etab2 endc ifne P50_fsu P50_fineup2 tst (a3) bne P50_contfxdone moveq #$f,d0 and.b P50_Info(a5),d0 sub d0,P50_Period(a5) moveq #113,d0 cmp P50_Period(a5),d0 ble .jup move d0,P50_Period(a5) .jup move P50_Period(a5),6(a4) bra P50_contfxdone endc ifne P50_fsd P50_finedwn2 tst (a3) bne P50_contfxdone moveq #$f,d0 and.b P50_Info(a5),d0 add d0,P50_Period(a5) cmp #856,P50_Period(a5) ble .jup move #856,P50_Period(a5) .jup move P50_Period(a5),6(a4) bra P50_contfxdone endc ifne P50_fvu P50_finevup2 tst (a3) bne P50_contfxdone moveq #$f,d0 and.b P50_Info(a5),d0 add d0,P50_Volume(a5) moveq #64,d0 cmp P50_Volume(a5),d0 bge.b .jup move d0,P50_Volume(a5) .jup move P50_Volume(a5),8(a4) bra P50_contfxdone endc ifne P50_fvd P50_finevdwn2 tst (a3) bne P50_contfxdone moveq #$f,d0 and.b P50_Info(a5),d0 sub d0,P50_Volume(a5) bpl.b .jup clr P50_Volume(a5) .jup move P50_Volume(a5),8(a4) bra P50_contfxdone endc ifne P50_nc P50_notecut moveq #$f,d0 and.b P50_Info(a5),d0 cmp (a3),d0 bne P50_contfxdone ifeq fade clr 8(a4) else clr P50_Shadow(a5) endc clr P50_Volume(a5) bra P50_contfxdone endc ifne P50_nd P50_notedelay moveq #$f,d0 and.b P50_Info(a5),d0 cmp (a3),d0 bne P50_contfxdone moveq #$7e,d0 and.b (a5),d0 beq P50_contfxdone move P50_DMABit(a5),d0 move d0,$96(a6) or d0,P50_dma(a3) move.l P50_Sample(a5),a1 move.l (a1)+,(a4)+ move (a1),(a4)+ move P50_Period(a5),(a4) subq.l #6,a4 ifeq system lea P50_dmason(pc),a1 move.l a1,d0 move.l P50_vektori(pc),a1 move.l d0,$78(a1) endc ifeq CIA move.b #$19,$bfde00 else ifeq system move.b #$4a,$bfd400 move.b #1,$bfd500 else move #1,P50_server(a3) move.l P50_craddr+4(pc),a1 move.b #$4a,(a1) move.b #1,$100(a1) endc endc bra P50_contfxdone endc ifne P50_rt P50_retrig subq #1,P50_RetrigCount(a5) bne P50_contfxdone move P50_DMABit(a5),d0 move d0,$96(a6) or d0,P50_dma(a3) move.l P50_Sample(a5),a1 move.l (a1)+,(a4) move (a1),4(a4) ifeq system lea P50_dmason(pc),a1 move.l a1,d0 move.l P50_vektori(pc),a1 move.l d0,$78(a1) endc ifeq CIA move.b #$19,$bfde00 else ifeq system move.b #$4a,$bfd400 move.b #1,$bfd500 else move #1,P50_server(a3) move.l P50_craddr+4(pc),a1 move.b #$4a,(a1) move.b #1,$100(a1) endc endc moveq #$f,d0 and.b P50_Info(a5),d0 move d0,P50_RetrigCount(a5) bra P50_contfxdone endc ifne P50_arp P50_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 P50_arpeggio move (a3),d0 move.b P50_arplist(pc,d0),d0 beq.b .arp0 ror.b #1,d0 bcc.b P50_arp1 moveq #$f,d0 and.b P50_Info(a5),d0 bra.b P50_arp3 .arp0 move P50_Note(a5),d0 move P50_periods(pc,d0),6(a4) bra P50_contfxdone P50_arp1 move.b P50_Info(a5),d0 lsr #4,d0 P50_arp3 add d0,d0 add P50_Note(a5),d0 move P50_periods(pc,d0),6(a4) bra P50_contfxdone endc P50_periods ifne P50_ft incbin periodtable else incbin periods.nft endc ifne P50_vs P50_volslide move.b P50_Info(a5),d0 sub.b d0,P50_Volume+1(a5) bpl.b .test clr P50_Volume(a5) ifeq fade clr 8(a4) else clr P50_Shadow(a5) endc bra P50_contfxdone .test moveq #64,d0 cmp P50_Volume(a5),d0 bge.b .ncs move d0,P50_Volume(a5) ifeq fade move d0,8(a4) else move d0,P50_Shadow(a5) endc bra.b P50_contfxdone .ncs ifeq fade move P50_Volume(a5),8(a4) else move P50_Volume(a5),P50_Shadow(a5) endc bra.b P50_contfxdone endc ifne P50_tpvs P50_tpochvslide move.b P50_Info(a5),d0 sub.b d0,P50_Volume+1(a5) bpl.b .test clr P50_Volume(a5) ifeq fade clr 8(a4) else clr P50_Shadow(a5) endc bra.b P50_toneport .test moveq #64,d0 cmp P50_Volume(a5),d0 bge.b .ncs move d0,P50_Volume(a5) .ncs ifeq fade move P50_Volume(a5),8(a4) else move P50_Volume(a5),P50_Shadow(a5) endc endc ifne P50_tp P50_toneport move P50_ToPeriod(a5),d0 beq.b P50_contfxdone move P50_TPSpeed(a5),d1 cmp P50_Period(a5),d0 blt.b .topoup add d1,P50_Period(a5) cmp P50_Period(a5),d0 bgt.b P50_toposetper move d0,P50_Period(a5) clr P50_ToPeriod(a5) move d0,6(a4) bra.b P50_contfxdone .topoup sub d1,P50_Period(a5) cmp P50_Period(a5),d0 blt.b P50_toposetper move d0,P50_Period(a5) clr P50_ToPeriod(a5) P50_toposetper move P50_Period(a5),6(a4) else nop endc P50_contfxdone add.l d6,a5 add.l d7,a4 dbf d5,P50_lopas cmp P50_speed2(pc),d4 beq.b P50_preplay rts ifne P50_pu P50_portup moveq #0,D0 move.b P50_Info(a5),d0 sub d0,P50_Period(a5) moveq #113,d0 cmp P50_Period(a5),d0 ble.b .skip move d0,P50_Period(a5) move d0,6(a4) bra.b P50_contfxdone .skip move P50_Period(a5),6(a4) bra.b P50_contfxdone endc ifne P50_pd P50_portdwn moveq #0,d0 move.b P50_Info(a5),d0 add d0,P50_Period(a5) cmp #856,P50_Period(a5) ble.b .skip move #856,d0 move d0,P50_Period(a5) move d0,6(a4) bra.b P50_contfxdone .skip move P50_Period(a5),6(a4) bra.b P50_contfxdone endc P50_preplay ifne P50_pde tst P50_pdelay(a3) beq.b .djdj rts .djdj endc lea P50_temp0(pc),a5 lea P50_Samples-16(pc),a0 moveq #channels-1,d5 P50_loaps ifne P50_pl move.l (a5),P50_TData(a5) move.l P50_ChaPos(a5),P50_TChaPos(a5) move.l P50_TempPos(a5),P50_TTempPos(a5) move P50_TempLen(a5),P50_TTempLen(a5) endc tst.b P50_Pack(a5) beq.b P50_takeone bmi.b .keepsame subq.b #1,P50_Pack(a5) clr P50_OnOff(a5) add.l d6,a5 dbf d5,P50_loaps rts .keepsame addq.b #1,P50_Pack(a5) bra.b P50_dko P50_takeone tst.b P50_TempLen+1(a5) beq.b P50_takenorm subq.b #1,P50_TempLen+1(a5) move.l P50_TempPos(a5),a2 P50_jedi move.l (a5),P50_TData(a5) move.b (a2)+,(a5) bpl.b P50_normal not.b (a5)+ move.b (a2)+,(a5)+ move.b (a2)+,(a5)+ move.b (a2)+,(a5)+ subq.l #4,a5 move.l a2,P50_TempPos(a5) bra.b P50_dko P50_normal move.b (a2)+,1(a5) move.b (a2)+,2(a5) move.l a2,P50_TempPos(a5) bra.b P50_dko P50_takenorm move.l P50_ChaPos(a5),a2 move.b (a2)+,(a5) bmi.b P50_packed move.b (a2)+,1(a5) move.b (a2)+,2(a5) move.l a2,P50_ChaPos(a5) bra.b P50_dko P50_kuiskus move.b (a2)+,P50_TempLen+1(a5) moveq #0,d0 move.b (a2)+,d0 lsl #8,d0 move.b (a2)+,d0 move.l a2,P50_ChaPos(a5) sub.l d0,a2 bra.b P50_jedi P50_packed cmp.b #$80,(a5) beq.b P50_kuiskus not.b (a5)+ move.b (a2)+,(a5)+ move.b (a2)+,(a5)+ move.b (a2)+,(a5)+ subq.l #4,a5 move.l a2,P50_ChaPos(a5) P50_dko st P50_OnOff(a5) move (a5),d0 and #$1f0,d0 beq.b .koto lea (a0,d0),a1 move.l a1,P50_Sample(a5) ifne P50_ft move.l P50_SampleVolume(a1),P50_Volume(a5) else move P50_SampleVolume(a1),P50_Volume(a5) endc .koto add.l d6,a5 dbf d5,P50_loaps rts P50_playtime clr (a3) ifne P50_pde tst P50_pdelay(a3) beq.b .djdj subq #1,P50_pdelay(a3) bra P50_delay .djdj endc tst P50_speedis1(a3) beq.b .mo bsr P50_preplay .mo lea P50_temp0(pc),a5 lea $a0(a6),a4 ifne system moveq #1,d4 move d4,P50_server(a3) move.l P50_craddr+4(pc),a1 move.b #$4a,(a1) move.b d4,$100(a1) else lea P50_dmason(pc),a1 move.l P50_vektori(pc),a2 move.l a1,$78(a2) ifeq CIA move.b #$19,$bfde00 else move.b #$4a,$bfd400 move.b #1,$bfd500 endc endc lea P50_periods(pc),a2 moveq #0,d4 moveq #channels-1,d5 P50_los tst P50_OnOff(a5) beq P50_nocha moveq #$f,d0 and (a5),d0 lea P50_jtab(pc),a1 add d0,d0 add.l d0,a1 add (a1),a1 jmp (a1) P50_fxdone moveq #$7e,d0 and.b (a5),d0 beq.b P50_nocha ifne P50_vib clr.b P50_VibPos(a5) endc ifne P50_ft add P50_Fine(a5),d0 endc move d0,P50_Note(a5) move (a2,d0),P50_Period(a5) P50_zample or P50_DMABit(a5),d4 move d4,$96(a6) move.l P50_Sample(a5),a1 move.l (a1)+,(a4) move (a1),4(a4) P50_nocha ifeq fade move.l P50_Period(a5),6(a4) else move P50_Period(a5),6(a4) move P50_Volume(a5),P50_Shadow(a5) endc P50_skip add.l d6,a5 add.l d7,a4 dbf d5,P50_los move.b d4,P50_dma+1(a3) ifne P50_pl tst.b P50_plflag+1(a3) beq.b P50_ohittaa lea P50_temp0(pc),a1 lea P50_looppos(pc),a0 moveq #channels-1,d0 .talt move.b 3(a0),3(a1) addq.l #4,a0 move.l (a0)+,P50_ChaPos(a1) move.l (a0)+,P50_TempPos(a1) move (a0)+,P50_TempLen(a1) add.l d6,a1 dbf d0,.talt move P50_plrowpos(pc),P50_rowpos(a3) clr.b P50_plflag+1(a3) rts endc P50_ohittaa subq #1,P50_rowpos(a3) bmi.b P50_nextpattern rts P50_nextpattern ifne P50_pl clr P50_plflag(a3) endc move.l P50_patternbase(pc),a4 moveq #63,d0 move d0,P50_rowpos(a3) move.l P50_spos(a3),a1 move.b (a1)+,d0 bpl.b P50_dk move.l P50_possibase(pc),a1 move.b (a1)+,d0 P50_dk move.l a1,P50_spos(a3) lsl #2,d0 move.l P50_positionbase(pc),a1 add.l d0,a1 move (a1)+,d0 lea (a4,d0.l),a2 move (a1)+,d0 move.l a2,P50_ChaPos+P50_temp0(a3) lea (a4,d0.l),a2 move.l a2,P50_ChaPos+P50_temp1(a3) move (a1)+,d0 lea (a4,d0.l),a2 move.l a2,P50_ChaPos+P50_temp2(a3) move (a1),d0 add.l d0,a4 move.l a4,P50_ChaPos+P50_temp3(a3) rts ifne P50_tp P50_settoneport move.b P50_Info(a5),d0 beq.b P50_toponochange move.b d0,P50_TPSpeed+1(a5) P50_toponochange moveq #$7e,d0 and.b (a5),d0 beq P50_nocha add P50_Fine(a5),d0 move d0,P50_Note(a5) move (a2,d0),P50_ToPeriod(a5) bra P50_nocha endc ifne P50_sof P50_sampleoffse moveq #$7e,d0 and.b (a5),d0 beq P50_nocha ifne P50_vib clr.b P50_VibPos(a5) endc ifne P50_ft add P50_Fine(a5),d0 endc move d0,P50_Note(a5) move (a2,d0),P50_Period(a5) or P50_DMABit(a5),d4 move d4,$96(a6) moveq #0,d1 move #$ff00,d1 and 2(a5),d1 bne.b P50_djidd move P50_Offset(a5),d1 P50_djidd move d1,P50_Offset(a5) move.l P50_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 P50_offok move.l -4(a1),(a4) moveq #1,d0 P50_offok move d0,4(a4) bra P50_nocha endc ifne P50_vl P50_volum move.b P50_Info(a5),P50_Volume+1(a5) bra P50_fxdone endc ifne P50_pj P50_posjmp moveq #0,d0 move.b P50_Info(a5),d0 add.l P50_possibase(pc),d0 move.l d0,P50_spos(a3) endc ifne P50_pb P50_pattbreak moveq #64,d0 move d0,P50_rowpos(a3) move.l P50_spos(pc),a1 move.l P50_patternbase(pc),a0 move.b (a1)+,d0 bpl.b P50_dk2 move.l P50_possibase(pc),a1 move.b (a1)+,d0 P50_dk2 move.l a1,P50_spos(a3) move.l P50_positionbase(pc),a1 lsl #2,d0 add.l d0,a1 movem (a1)+,d0-d3 lea (a0,d0.l),a1 move d1,d0 move.l a1,P50_ChaPos+P50_temp0(a3) lea (a0,d0.l),a1 move.l a1,P50_ChaPos+P50_temp1(a3) move d2,d0 lea (a0,d0.l),a1 move.l a1,P50_ChaPos+P50_temp2(a3) move d3,d0 add.l d0,a0 move.l a0,P50_ChaPos+P50_temp3(a3) bra P50_fxdone endc ifne P50_vib P50_vibrato move.b P50_Info(a5),d0 beq P50_fxdone move.b d0,d1 move.b P50_VibCmd(a5),d2 and.b #$f,d0 beq.b P50_vibskip and.b #$f0,d2 or.b d0,d2 P50_vibskip and.b #$f0,d1 beq.b P50_vibskip2 and.b #$f,d2 or.b d1,d2 P50_vibskip2 move.b d2,P50_VibCmd(a5) bra P50_fxdone endc ifne P50_tre P50_settremo move.b P50_Info(a5),d0 beq P50_fxdone move.b d0,d1 move.b P50_TreCmd(a5),d2 moveq #$f,d3 and.b d3,d0 beq.b P50_treskip and.b #$f0,d2 or.b d0,d2 P50_treskip and.b #$f0,d1 beq.b P50_treskip2 and.b d3,d2 or.b d1,d2 P50_treskip2 move.b d2,P50_TreCmd(a5) bra P50_fxdone endc ifne P50_ec P50_ecommands move.b P50_Info(a5),d0 and.b #$f0,d0 lsr #3,d0 move P50_etab(pc,d0),d0 jmp P50_etab(pc,d0) P50_etab ifne P50_fi dc P50_filter-P50_etab else dc P50_fxdone-P50_etab endc ifne P50_fsu dc P50_fineup-P50_etab else dc P50_fxdone-P50_etab endc ifne P50_fsd dc P50_finedwn-P50_etab else dc P50_fxdone-P50_etab endc dc P50_fxdone-P50_etab dc P50_fxdone-P50_etab ifne P50_sft dc P50_setfinetune-P50_etab else dc P50_fxdone-P50_etab endc ifne P50_pl dc P50_patternloop-P50_etab else dc P50_fxdone-P50_etab endc dc P50_fxdone-P50_etab dc P50_fxdone-P50_etab ifne P50_rt dc P50_setretrig-P50_etab else dc P50_fxdone-P50_etab endc ifne P50_fvu dc P50_finevup-P50_etab else dc P50_fxdone-P50_etab endc ifne P50_fvd dc P50_finevdwn-P50_etab else dc P50_fxdone-P50_etab endc dc P50_fxdone-P50_etab ifne P50_nd dc P50_ndelay-P50_etab else dc P50_fxdone-P50_etab endc ifne P50_pde dc P50_pattdelay-P50_etab else dc P50_fxdone-P50_etab endc dc P50_fxdone-P50_etab endc ifne P50_fi P50_filter move.b P50_Info(a5),d0 and.b #$fd,$bfe001 or.b d0,$bfe001 bra P50_fxdone endc ifne P50_fsu P50_fineup P50_getnote moveq #$f,d0 and.b P50_Info(a5),d0 sub d0,P50_Period(a5) moveq #113,d0 cmp P50_Period(a5),d0 ble .jup move d0,P50_Period(a5) .jup moveq #$7e,d0 and.b (a5),d0 bne P50_zample bra P50_nocha endc ifne P50_fsd P50_finedwn P50_getnote moveq #$f,d0 and.b P50_Info(a5),d0 add d0,P50_Period(a5) cmp #856,P50_Period(a5) ble .jup move #856,P50_Period(a5) .jup moveq #$7e,d0 and.b (a5),d0 bne P50_zample bra P50_nocha endc ifne P50_sft P50_setfinetune moveq #$f,d0 and.b P50_Info(a5),d0 add d0,d0 move P50_mulutab(pc,d0),P50_Fine(a5) bra P50_fxdone P50_mulutab dc 0,74,148,222,296,370,444,518,592,666,740,814,888,962,1036,1110 endc ifne P50_pl P50_patternloop moveq #$f,d0 and.b P50_Info(a5),d0 beq.b P50_setloop tst.b P50_plflag(a3) bne.b P50_noset move d0,P50_plcount(a3) st.b P50_plflag(a3) P50_noset tst P50_plcount(a3) bne.b P50_looppaa clr.b P50_plflag(a3) bra P50_fxdone P50_looppaa st.b P50_plflag+1(a3) subq #1,P50_plcount(a3) bra P50_fxdone P50_setloop tst.b P50_plflag(a3) bne P50_fxdone move P50_rowpos(pc),P50_plrowpos(a3) lea P50_temp0(pc),a1 lea P50_looppos(pc),a0 moveq #channels-1,d0 .talt move.l P50_TData(a1),(a0)+ move.l P50_TChaPos(a1),(a0)+ move.l P50_TTempPos(a1),(a0)+ move P50_TTempLen(a1),(a0)+ add.l d6,a1 dbf d0,.talt bra P50_fxdone endc ifne P50_fvu P50_finevup moveq #$f,d0 and.b P50_Info(a5),d0 add d0,P50_Volume(a5) moveq #64,d0 cmp P50_Volume(a5),d0 bge P50_fxdone move d0,P50_Volume(a5) bra P50_fxdone endc ifne P50_fvd P50_finevdwn moveq #$f,d0 and.b P50_Info(a5),d0 sub d0,P50_Volume(a5) bpl P50_fxdone clr P50_Volume(a5) bra P50_fxdone endc ifne P50_rt P50_setretrig moveq #$f,d0 and.b P50_Info(a5),d0 move d0,P50_RetrigCount(a5) bra P50_fxdone endc ifne P50_nd P50_ndelay moveq #$7e,d0 and.b (a5),d0 beq P50_skip ifne P50_vib clr.b P50_VibPos(a5) endc ifne P50_ft add P50_Fine(a5),d0 endc move d0,P50_Note(a5) move (a2,d0),P50_Period(a5) ifeq fade move P50_Volume(a5),8(a4) else move P50_Volume(a5),P50_Shadow(a5) endc bra P50_skip endc ifne P50_pde P50_pattdelay moveq #$f,d0 and.b P50_Info(a5),d0 move d0,P50_pdelay(a3) bra P50_fxdone endc ifne P50_sd P50_cspeed move.b P50_Info(a5),d0 ifne CIA tst P50_Tempo(a3) beq.b P50_VBlank cmp.b #32,d0 bhs.b P50_STempo endc P50_VBlank cmp.b #1,d0 bne.b P50_jkd move.b d0,P50_speed+1(a3) move.b d0,P50_speed2+1(a3) st P50_speedis1(a3) bra P50_fxdone P50_jkd move.b d0,P50_speed+1(a3) subq.b #1,d0 move.b d0,P50_speed2+1(a3) clr P50_speedis1(a3) bra P50_fxdone ifne CIA P50_STempo move.l P50_timer(pc),d1 divu d0,d1 move d1,P50_thi2(a3) sub #$1c8*2,d1 move d1,P50_thi(a3) bra P50_fxdone endc endc ifne P50_vbvs P50_vibochvslide move.b P50_Info(a5),d0 sub.b d0,P50_Volume+1(a5) bpl.b P50_test62 clr P50_Volume(a5) ifeq fade clr 8(a4) else clr P50_Shadow(a5) endc bra.b P50_vib2 P50_test62 moveq #64,d0 cmp P50_Volume(a5),d0 bge.b .ncs2 move d0,P50_Volume(a5) .ncs2 ifeq fade move P50_Volume(a5),8(a4) else move P50_Volume(a5),P50_Shadow(a5) endc endc ifne P50_vib P50_vib2 move #$f00,d0 move P50_VibCmd(a5),d1 and d1,d0 lsr #2,d0 lsr #1,d1 and #$3e,d1 add d1,d0 move P50_Period(a5),d1 tst.b P50_VibPos(a5) bmi.b .vibneg add P50_vibtab(pc,d0),d1 bra.b P50_vib4 .vibneg sub P50_vibtab(pc,d0),d1 P50_vib4 move d1,6(a4) move.b P50_VibCmd(a5),d0 lsr.b #2,d0 and #$3c,d0 add.b d0,P50_VibPos(a5) bra P50_contfxdone endc ifne P50_tre P50_tremo move #$f00,d0 move P50_TreCmd(a5),d1 and d1,d0 lsr #2,d0 lsr #1,d1 and #$3e,d1 add d1,d0 move P50_Volume(a5),d1 tst.b P50_TrePos(a5) bmi.b .treneg add P50_vibtab(pc,d0),d1 cmp #64,d1 ble.b P50_tre4 moveq #64,d1 bra.b P50_tre4 .treneg sub P50_vibtab(pc,d0),d1 bpl.b P50_tre4 moveq #0,d1 P50_tre4 ifeq fade move d1,8(a4) else move d1,P50_Shadow(a5) endc move.b P50_TreCmd(a5),d0 lsr.b #2,d0 and #$3c,d0 add.b d0,P50_TrePos(a5) bra P50_contfxdone endc ifne P50_vib!P50_tre P50_vibtab incbin vibtab endc P50_jtab dr P50_fxdone dr P50_fxdone dr P50_fxdone ifne P50_tp dr P50_settoneport else dr P50_fxdone endc ifne P50_vib dr P50_vibrato else dr P50_fxdone endc ifne P50_tpvs dr P50_toponochange else dr P50_fxdone endc dr P50_fxdone ifne P50_tre dr P50_settremo else dr P50_fxdone endc dr P50_fxdone ifne P50_sof dr P50_sampleoffse else dr P50_fxdone endc dr P50_fxdone ifne P50_pj dr P50_posjmp else dr P50_fxdone endc ifne P50_vl dr P50_volum else dr P50_fxdone endc ifne P50_pb dr P50_pattbreak else dr P50_fxdone endc ifne P50_ec dr P50_ecommands else dr P50_fxdone endc ifne P50_sd dr P50_cspeed else dr P50_fxdone endc P50_dmason ifeq system tst.b $bfdd00 move.l a0,-(sp) move.l P50_vektori(pc),a0 move.l P50_intaddr(pc),$78(a0) move.l (sp)+,a0 move P50_dma(pc),$dff096 move #$2000,$dff09c move.b #$19,$bfde00 rte else move P50_dma(pc),$96(a6) addq #1,P50_server(a3) move.l P50_craddr(pc),a0 move.b #$19,(a0) bra P50_ohi endc P50_setrepeat ifeq system tst.b $bfdd00 movem.l a0/a1,-(sp) lea $dff0a0,a1 else lea $a0(a6),a1 endc move.l P50_Sample+P50_temp0(pc),a0 addq.l #6,a0 move.l (a0)+,(a1)+ move (a0),(a1) ifgt channels-1 move.l P50_Sample+P50_temp1(pc),a0 addq.l #6,a0 move.l (a0)+,12(a1) move (a0),16(a1) endc ifgt channels-2 move.l P50_Sample+P50_temp2(pc),a0 addq.l #6,a0 move.l (a0)+,28(a1) move (a0),32(a1) endc ifgt channels-3 move.l P50_Sample+P50_temp3(pc),a0 addq.l #6,a0 move.l (a0)+,44(a1) move (a0),48(a1) endc ifne system clr P50_server(a3) move.l P50_craddr+4(pc),a0 move.b P50_tlo(pc),(a0) move.b P50_thi(pc),$100(a0) bra P50_ohi else move #$2000,-8(a1) move.l P50_vektori(pc),a0 ifeq CIA move.l P50_oldlev6(pc),$78(a0) else move.l P50_tintti(pc),$78(a0) move.b P50_tlo(pc),$bfd400 move.b P50_thi(pc),$bfd500 endc movem.l (sp)+,a0/a1 rte endc P50_temp0 dcb.b Channel_Block_SIZE-2 dc 1 P50_temp1 dcb.b Channel_Block_SIZE-2 dc 2 P50_temp2 dcb.b Channel_Block_SIZE-2 dc 4 P50_temp3 dcb.b Channel_Block_SIZE-2 dc 8 P50_cn dc 0 P50_dma dc $8200 P50_rowpos dc 63 P50_speed dc 6 P50_speed2 dc 5 P50_speedis1 dc 0 P50_spos dc.l 0 P50_vektori dc.l 0 ifne CIA P50_tintti dc.l 0 P50_thi dc.b 0 P50_tlo dc.b 0 P50_thi2 dc.b 0 P50_tlo2 dc.b 0 P50_timer dc.l 0 endc ifne P50_pl P50_plcount dc 0 P50_plflag dc 0 P50_plreset dc 0 P50_plrowpos dc 0 P50_looppos dcb.b 14*channels endc ifne P50_pde P50_pdelay dc 0 endc P50_Samples dcb.b 16*31 P50_positionbase dc.l 0 P50_possibase dc.l 0 P50_patternbase dc.l 0 P50_intaddr dc.l 0 P50_oldlev6 dc.l 0 ifne system P50_server dc 0 P50_miscbase dc.l 0 P50_audioopen dc.b 0 P50_sigbit dc.b -1 P50_ciares dc.l 0 P50_craddr dc.l 0,0,0 P50_dat dc $f00 P50_timerinterrupt dc 0,0,0,0,127 P50_timerdata dc.l 0,0,0 P50_allocport dc.l 0,0 dc.b 4,0 dc.l 0 dc.b 0,0 dc.l 0 P50_reqlist dc.l 0,0,0 dc.b 5,0 P50_allocreq dc.l 0,0 dc 127 dc.l 0 P50_portti dc.l 0 dc 68 dc.l 0,0,0 dc 0 P50_reqdata dc.l 0 dc.l 1,0,0,0,0,0,0 dc 0 P50_audiodev dc.b 'audio.device',0 P50_cianame dc.b 'ciax.resource',0 P50_timeropen dc.b 0 P50_timerint dc.b 'P50TimerInterrupt',0 endc P50_etu endb a3 ******** END OF BINARY FILE ************** section chip,data_c P50_data incbin "modules/P50..huuliherpes." P50_dend ; section smp,data_c ;samples incbin "ram:SMP.let there be funk2"