From 43c1a4979d1d9878ff1ffdc2ce63f44f78a9944b Mon Sep 17 00:00:00 2001 From: pkali Date: Thu, 5 Dec 2024 00:07:10 -0500 Subject: [PATCH] WIP music (does not work yet) --- art/Mild West.fnt | Bin 0 -> 1024 bytes art/muzyka.rmt | Bin 0 -> 1396 bytes art/muzyka_stripped.rmt | Bin 0 -> 1289 bytes art/rmt_feat.a65 | 41 ++ art/rmtplayr.a65 | 1356 +++++++++++++++++++++++++++++++++++++++ averybreakout.asm | 129 +++- averybreakout.xex | Bin 7736 -> 10523 bytes averybreakout_2012.xex | Bin 4652 -> 0 bytes 8 files changed, 1500 insertions(+), 26 deletions(-) create mode 100644 art/Mild West.fnt create mode 100644 art/muzyka.rmt create mode 100644 art/muzyka_stripped.rmt create mode 100644 art/rmt_feat.a65 create mode 100644 art/rmtplayr.a65 delete mode 100644 averybreakout_2012.xex diff --git a/art/Mild West.fnt b/art/Mild West.fnt new file mode 100644 index 0000000000000000000000000000000000000000..cc0a65c9c935bff1e5365c499280f03a143f2a39 GIT binary patch literal 1024 zcmXw2!D`z;5S_}#(ZM8p+{0p!?d z5=1Hf1fN6C#e|-85Tm{sxr40PH}m$5c4kd9n1PY^w0d#Sz#C?HD0W}M^Vre*%c(6c z-_q67b-dWDGMT2a=MR2Sie5a_aomV?%+z)^{Ap z6ooN}cbtU;CVZE1N3Q(vi+N1UNpXa)z-P|JxmjR;6$Haa;fuEZoFn;2DdXKKVS_v* z03qm4N-7E}U*A65J-n0s%vFVW1^rHN5?$a*u+&egk-9D=!gt(O=mV0%KpqW59$m;} zU$yPpn{7o21`6#Cd|!k2^Y`ET+izRZ$5z#6(Gz^bpQRpmH(SvUavtVdM+3I<#qEMe z-TIynI}#9fm3kQ=^Tao(7Xs$8457Iw>~t~$9>YQ~KJ0~ew4PpWHs>xUYwdiF*XU?i zwk=5N@xrog;YTOK;F?G2FvoO7#H zj#&|D{r^dn>U*tQ#u!VQy(^qzyIP=vBs5|+f$lV?vJdz$gh%(hl(BRITo-t7DFy_qlJ92`=4_T#00+5x z6uK1FD0mdg7gnO6jMAAIRfoH$Ls^HCE&`O!&tE3ENqBLTA-mXq1 zv5gCYE0^W6yHrfd!nrxYoB#sQ(_vrUKn>2~b3|({cR4#qf+r~9h_EAK=Z*>cO4y+= zJ2xaOB5b6E+5mBrAIJHde53`~A80rEk=Dn2ANjBMp}__Q8yakE*am(C22-JtVQZ1h zVE!+~|LsG3 z`T!9cb~-eC6bFTf16qK=Kn774tdNzW18YX2($-YJXu?*kI?kclv#|^F*n=1%qC6Yr zSrmV%C>!J@Z#-R$K*IFE@Z~`9^YrCpBP4i7f_EhT2_6w?)br11=0xf&1f7I2<|koN zugFd66}iJ%dm@Bn;*~?8tgYdnFC7`aQc#L0!dXagu8>48z=;5Z122{4T;Uda4KWqt zHhKZ|&9uPNGj#e6g55p$Qk8n;X{%Xn)T~acxdrRhPJP>2f_A+D%hgWD+Su7^Kznbe wX6?3`HCU-XSgGz>t#+*ms~1tLY~8os)Yo^ayRD0gm#lOx^XjcHU^rI914L#y%b7>-j)iv3Zmw|t7}C)OK*#yhtNMD{s#}e z=g?3nLfI@EmW`z+&z?N?G~;_SYpjw)aCqOm+4tV}-prRM2-u6q51-yYur13Adcj_B z5*-9@f)Byx;A>C~+u>gLBz*Or-P`}zdhqh?r_=ARkHhd8uIFY&5$8KQ01EUPa~N?L zau{&v|FRwjW1MepnmXJEF7#dKxfI}hdwY>k9#fr6b-s-|KaM)r18<|R4Lqzfvn(o3 zTo}1<=)%w~n_)lG61#G~yZgIkyE1OWsBIm3F!W&HLEnR(wuT32x_7+}@a|Eyf;2@9 zZd_JrcCS;>gYJ zCJQHZGQ=uBFY~K>?j*=hoK?PXrkI~%|K&avG81wpkQ^6H8j6l zx|GFemn^>02XiiNod1d^EJmAa%Ho{s;LCzT*5Hm#Hl0{4A<(G-dtfl*w z(`f`Yv@;Rwf%NlC^<dkqB-*f*GPs4_K~ziJMo%!`(n%t>#_M+w I^6qu?6QY#3{r~^~ literal 0 HcmV?d00001 diff --git a/art/rmt_feat.a65 b/art/rmt_feat.a65 new file mode 100644 index 0000000..6f1b9dd --- /dev/null +++ b/art/rmt_feat.a65 @@ -0,0 +1,41 @@ +;* --------BEGIN-------- +;* Z:\home\pkalinowski\Seafile\atari\projects\Avery_Breakout\art\muzyka_stripped.rmt +FEAT_SFX equ 1 +FEAT_GLOBALVOLUMEFADE equ 0 ;RMTGLOBALVOLUMEFADE variable +FEAT_NOSTARTINGSONGLINE equ 0 +FEAT_INSTRSPEED equ 1 +FEAT_CONSTANTSPEED equ 5 ;(0 times) +FEAT_COMMAND1 equ 1 ;(25 times) +FEAT_COMMAND2 equ 0 ;(0 times) +FEAT_COMMAND3 equ 0 ;(0 times) +FEAT_COMMAND4 equ 0 ;(0 times) +FEAT_COMMAND5 equ 0 ;(0 times) +FEAT_COMMAND6 equ 0 ;(0 times) +FEAT_COMMAND7SETNOTE equ 0 ;(0 times) +FEAT_COMMAND7VOLUMEONLY equ 0 ;(0 times) +FEAT_PORTAMENTO equ 0 ;(0 times) +FEAT_FILTER equ 0 ;(0 times) +FEAT_FILTERG0L equ 0 ;(0 times) +FEAT_FILTERG1L equ 0 ;(0 times) +FEAT_FILTERG0R equ 0 ;(0 times) +FEAT_FILTERG1R equ 0 ;(0 times) +FEAT_BASS16 equ 0 ;(0 times) +FEAT_BASS16G1L equ 0 ;(0 times) +FEAT_BASS16G3L equ 0 ;(0 times) +FEAT_BASS16G1R equ 0 ;(0 times) +FEAT_BASS16G3R equ 0 ;(0 times) +FEAT_VOLUMEONLYG0L equ 0 ;(0 times) +FEAT_VOLUMEONLYG2L equ 0 ;(0 times) +FEAT_VOLUMEONLYG3L equ 0 ;(0 times) +FEAT_VOLUMEONLYG0R equ 0 ;(0 times) +FEAT_VOLUMEONLYG2R equ 0 ;(0 times) +FEAT_VOLUMEONLYG3R equ 0 ;(0 times) +FEAT_TABLETYPE equ 0 ;(0 times) +FEAT_TABLEMODE equ 0 ;(0 times) +FEAT_TABLEGO equ 0 ;(0 times) +FEAT_AUDCTLMANUALSET equ 0 ;(0 times) +FEAT_VOLUMEMIN equ 1 ;(1 times) +FEAT_EFFECTVIBRATO equ 1 ;(1 times) +FEAT_EFFECTFSHIFT equ 1 ;(1 times) +;* --------END-------- + diff --git a/art/rmtplayr.a65 b/art/rmtplayr.a65 new file mode 100644 index 0000000..73baa3e --- /dev/null +++ b/art/rmtplayr.a65 @@ -0,0 +1,1356 @@ +;* +;* Raster Music Tracker, RMT Atari routine version 1.20090108 +;* (c) Radek Sterba, Raster/C.P.U., 2002 - 2009 +;* http://raster.atari.org +;* +;* Warnings: +;* +;* 1. RMT player routine needs 19 itself reserved bytes in zero page (no accessed +;* from any other routines) as well as cca 1KB of memory before the "PLAYER" +;* address for frequency tables and functionary variables. It's: +;* a) from PLAYER-$03c0 to PLAYER for stereo RMTplayer +;* b) from PLAYER-$0320 to PLAYER for mono RMTplayer +;* +;* 2. RMT player routine MUST (!!!) be compiled from the begin of the memory page. +;* i.e. "PLAYER" address can be $..00 only! +;* +;* 3. Because of RMTplayer provides a lot of effects, it spent a lot of CPU time. +;* +STEREOMODE equ 0 ;0 => compile RMTplayer for 4 tracks mono +;* ;1 => compile RMTplayer for 8 tracks stereo +;* ;2 => compile RMTplayer for 4 tracks stereo L1 R2 R3 L4 +;* ;3 => compile RMTplayer for 4 tracks stereo L1 L2 R3 R4 +;* + IFT STEREOMODE==1 +TRACKS equ 8 + ELS +TRACKS equ 4 + EIF +;* +;PLAYER equ $3400 +;* +;* RMT FEATures definitions file +;* For optimizations of RMT player routine to concrete RMT modul only! + icl "rmt_feat.a65" +;* +;* RMT ZeroPage addresses + org RMT_zpvars +p_tis +p_instrstable org *+2 +p_trackslbstable org *+2 +p_trackshbstable org *+2 +p_song org *+2 +ns org *+2 +nr org *+2 +nt org *+2 +reg1 org *+1 +reg2 org *+1 +reg3 org *+1 +tmp org *+1 + IFT FEAT_COMMAND2 +frqaddcmd2 org *+1 + EIF + IFT TRACKS>4 + org PLAYER-$400+$40 + ELS + org PLAYER-$400+$e0 + EIF +track_variables +trackn_db org *+TRACKS +trackn_hb org *+TRACKS +trackn_idx org *+TRACKS +trackn_pause org *+TRACKS +trackn_note org *+TRACKS +trackn_volume org *+TRACKS +trackn_distor org *+TRACKS +trackn_shiftfrq org *+TRACKS + IFT FEAT_PORTAMENTO +trackn_portafrqc org *+TRACKS +trackn_portafrqa org *+TRACKS +trackn_portaspeed org *+TRACKS +trackn_portaspeeda org *+TRACKS +trackn_portadepth org *+TRACKS + EIF +trackn_instrx2 org *+TRACKS +trackn_instrdb org *+TRACKS +trackn_instrhb org *+TRACKS +trackn_instridx org *+TRACKS +trackn_instrlen org *+TRACKS +trackn_instrlop org *+TRACKS +trackn_instrreachend org *+TRACKS +trackn_volumeslidedepth org *+TRACKS +trackn_volumeslidevalue org *+TRACKS + IFT FEAT_VOLUMEMIN +trackn_volumemin org *+TRACKS + EIF +FEAT_EFFECTS equ FEAT_EFFECTVIBRATO||FEAT_EFFECTFSHIFT + IFT FEAT_EFFECTS +trackn_effdelay org *+TRACKS + EIF + IFT FEAT_EFFECTVIBRATO +trackn_effvibratoa org *+TRACKS + EIF + IFT FEAT_EFFECTFSHIFT +trackn_effshift org *+TRACKS + EIF +trackn_tabletypespeed org *+TRACKS + IFT FEAT_TABLEMODE +trackn_tablemode org *+TRACKS + EIF +trackn_tablenote org *+TRACKS +trackn_tablea org *+TRACKS +trackn_tableend org *+TRACKS + IFT FEAT_TABLEGO +trackn_tablelop org *+TRACKS + EIF +trackn_tablespeeda org *+TRACKS + IFT FEAT_FILTER||FEAT_BASS16 +trackn_command org *+TRACKS + EIF + IFT FEAT_BASS16 +trackn_outnote org *+TRACKS + EIF + IFT FEAT_FILTER +trackn_filter org *+TRACKS + EIF +trackn_audf org *+TRACKS +trackn_audc org *+TRACKS + IFT FEAT_AUDCTLMANUALSET +trackn_audctl org *+TRACKS + EIF +v_aspeed org *+1 +track_endvariables + org PLAYER-$100-$140-$40+2 +INSTRPAR equ 12 +tabbeganddistor + dta frqtabpure-frqtab,$00 + dta frqtabpure-frqtab,$20 + dta frqtabpure-frqtab,$40 + dta frqtabbass1-frqtab,$c0 + dta frqtabpure-frqtab,$80 + dta frqtabpure-frqtab,$a0 + dta frqtabbass1-frqtab,$c0 + dta frqtabbass2-frqtab,$c0 + IFT FEAT_EFFECTVIBRATO +vibtabbeg dta 0,vib1-vib0,vib2-vib0,vib3-vib0 +vib0 dta 0 +vib1 dta 1,-1,-1,1 +vib2 dta 1,0,-1,-1,0,1 +vib3 dta 1,1,0,-1,-1,-1,-1,0,1,1 +vibtabnext + dta vib0-vib0+0 + dta vib1-vib0+1,vib1-vib0+2,vib1-vib0+3,vib1-vib0+0 + dta vib2-vib0+1,vib2-vib0+2,vib2-vib0+3,vib2-vib0+4,vib2-vib0+5,vib2-vib0+0 + dta vib3-vib0+1,vib3-vib0+2,vib3-vib0+3,vib3-vib0+4,vib3-vib0+5,vib3-vib0+6,vib3-vib0+7,vib3-vib0+8,vib3-vib0+9,vib3-vib0+0 + EIF + org PLAYER-$100-$140 + IFT FEAT_BASS16 +frqtabbasslo + dta $F2,$33,$96,$E2,$38,$8C,$00,$6A,$E8,$6A,$EF,$80,$08,$AE,$46,$E6 + dta $95,$41,$F6,$B0,$6E,$30,$F6,$BB,$84,$52,$22,$F4,$C8,$A0,$7A,$55 + dta $34,$14,$F5,$D8,$BD,$A4,$8D,$77,$60,$4E,$38,$27,$15,$06,$F7,$E8 + dta $DB,$CF,$C3,$B8,$AC,$A2,$9A,$90,$88,$7F,$78,$70,$6A,$64,$5E,$00 + EIF + org PLAYER-$100-$100 +frqtab + ERT [255 + ldy #0 + tya +ri0 sta track_variables,y + sta track_endvariables-$100,y + iny + bne ri0 + ELS + ldy #track_endvariables-track_variables + lda #0 +ri0 sta track_variables-1,y + dey + bne ri0 + EIF + ldy #4 + lda (ns),y + sta v_maxtracklen + iny + IFT FEAT_CONSTANTSPEED==0 + lda (ns),y + sta v_speed + EIF + IFT FEAT_INSTRSPEED==0 + iny + lda (ns),y + sta v_instrspeed + sta v_ainstrspeed + ELI FEAT_INSTRSPEED>1 + lda #FEAT_INSTRSPEED + sta v_ainstrspeed + EIF + ldy #8 +ri1 lda (ns),y + sta p_tis-8,y + iny + cpy #8+8 + bne ri1 + IFT FEAT_NOSTARTINGSONGLINE==0 + pla + pha + IFT TRACKS>4 + asl @ + asl @ + asl @ + clc + adc p_song + sta p_song + pla + php + and #$e0 + asl @ + rol @ + rol @ + rol @ + ELS + asl @ + asl @ + clc + adc p_song + sta p_song + pla + php + and #$c0 + asl @ + rol @ + rol @ + EIF + plp + adc p_song+1 + sta p_song+1 + EIF + jsr GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3 +rmt_silence + IFT STEREOMODE>0 + lda #0 + sta $d208 + sta $d218 + ldy #3 + sty $d20f + sty $d21f + ldy #8 +si1 sta $d200,y + sta $d210,y + dey + bpl si1 + ELS + lda #0 + sta $d208 + ldy #3 + sty $d20f + ldy #8 +si1 sta $d200,y + dey + bpl si1 + EIF + IFT FEAT_INSTRSPEED==0 + lda v_instrspeed + ELS + lda #FEAT_INSTRSPEED + EIF + rts +GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3 +GetSongLine + ldx #0 + stx v_abeat +nn0 +nn1 txa + tay + lda (p_song),y + cmp #$fe + bcs nn2 + tay + lda (p_trackslbstable),y + sta trackn_db,x + lda (p_trackshbstable),y +nn1a sta trackn_hb,x + lda #0 + sta trackn_idx,x + lda #1 +nn1a2 sta trackn_pause,x + lda #$80 + sta trackn_instrx2,x + inx +xtracks01 cpx #TRACKS + bne nn1 + lda p_song + clc +xtracks02 adc #TRACKS + sta p_song + bcc GetTrackLine + inc p_song+1 +nn1b + jmp GetTrackLine +nn2 + beq nn3 +nn2a + lda #0 + beq nn1a2 +nn3 + ldy #2 + lda (p_song),y + tax + iny + lda (p_song),y + sta p_song+1 + stx p_song + ldx #0 + beq nn0 +GetTrackLine +oo0 +oo0a + IFT FEAT_CONSTANTSPEED==0 + lda #$ff +v_speed equ *-1 + sta v_bspeed + EIF + ldx #-1 +oo1 + inx + dec trackn_pause,x + bne oo1x +oo1b + lda trackn_db,x + sta ns + lda trackn_hb,x + sta ns+1 +oo1i + ldy trackn_idx,x + inc trackn_idx,x + lda (ns),y + sta reg1 + and #$3f + cmp #61 + beq oo1a + bcs oo2 + sta trackn_note,x + IFT FEAT_BASS16 + sta trackn_outnote,x + EIF + iny + lda (ns),y + lsr @ + and #$3f*2 + sta trackn_instrx2,x +oo1a + lda #1 + sta trackn_pause,x + ldy trackn_idx,x + inc trackn_idx,x + lda (ns),y + lsr @ + ror reg1 + lsr @ + ror reg1 + lda reg1 + IFT FEAT_GLOBALVOLUMEFADE + sec + sbc #$00 +RMTGLOBALVOLUMEFADE equ *-1 + bcs voig + lda #0 +voig + EIF + and #$f0 + sta trackn_volume,x +oo1x +xtracks03sub1 cpx #TRACKS-1 + bne oo1 + IFT FEAT_CONSTANTSPEED==0 + lda #$ff +v_bspeed equ *-1 + sta v_speed + ELS + lda #FEAT_CONSTANTSPEED + EIF + sta v_aspeed + jmp InitOfNewSetInstrumentsOnly +oo2 + cmp #63 + beq oo63 + lda reg1 + and #$c0 + beq oo62_b + asl @ + rol @ + rol @ + sta trackn_pause,x + jmp oo1x +oo62_b + iny + lda (ns),y + sta trackn_pause,x + inc trackn_idx,x + jmp oo1x +oo63 + lda reg1 + IFT FEAT_CONSTANTSPEED==0 + bmi oo63_1X + iny + lda (ns),y + sta v_bspeed + inc trackn_idx,x + jmp oo1i +oo63_1X + EIF + cmp #255 + beq oo63_11 + iny + lda (ns),y + sta trackn_idx,x + jmp oo1i +oo63_11 + jmp GetSongLine +p2xrmtp3 jmp rmt_p3 +p2x0 dex + bmi p2xrmtp3 +InitOfNewSetInstrumentsOnly +p2x1 ldy trackn_instrx2,x + bmi p2x0 + IFT FEAT_SFX + jsr SetUpInstrumentY2 + jmp p2x0 +rmt_sfx + sta trackn_note,x + IFT FEAT_BASS16 + sta trackn_outnote,x + EIF + lda #$f0 ;* sfx note volume*16 +RMTSFXVOLUME equ *-1 ;* label for sfx note volume parameter overwriting + sta trackn_volume,x + EIF +SetUpInstrumentY2 + lda (p_instrstable),y + sta trackn_instrdb,x + sta nt + iny + lda (p_instrstable),y + sta trackn_instrhb,x + sta nt+1 + IFT FEAT_FILTER + lda #1 + sta trackn_filter,x + EIF + IFT FEAT_TABLEGO + IFT FEAT_FILTER + tay + ELS + ldy #1 + EIF + lda (nt),y + sta trackn_tablelop,x + iny + ELS + ldy #2 + EIF + lda (nt),y + sta trackn_instrlen,x + iny + lda (nt),y + sta trackn_instrlop,x + iny + lda (nt),y + sta trackn_tabletypespeed,x + IFT FEAT_TABLETYPE||FEAT_TABLEMODE + and #$3f + EIF + sta trackn_tablespeeda,x + IFT FEAT_TABLEMODE + lda (nt),y + and #$40 + sta trackn_tablemode,x + EIF + IFT FEAT_AUDCTLMANUALSET + iny + lda (nt),y + sta trackn_audctl,x + iny + ELS + ldy #6 + EIF + lda (nt),y + sta trackn_volumeslidedepth,x + IFT FEAT_VOLUMEMIN + iny + lda (nt),y + sta trackn_volumemin,x + IFT FEAT_EFFECTS + iny + EIF + ELS + IFT FEAT_EFFECTS + ldy #8 + EIF + EIF + IFT FEAT_EFFECTS + lda (nt),y + sta trackn_effdelay,x + IFT FEAT_EFFECTVIBRATO + iny + lda (nt),y + tay + lda vibtabbeg,y + sta trackn_effvibratoa,x + EIF + IFT FEAT_EFFECTFSHIFT + ldy #10 + lda (nt),y + sta trackn_effshift,x + EIF + EIF + lda #128 + sta trackn_volumeslidevalue,x + sta trackn_instrx2,x + asl @ + sta trackn_instrreachend,x + sta trackn_shiftfrq,x + tay + lda (nt),y + sta trackn_tableend,x + adc #0 + sta trackn_instridx,x + lda #INSTRPAR + sta trackn_tablea,x + tay + lda (nt),y + sta trackn_tablenote,x +xata_rtshere + IFT FEAT_SFX + rts + ELS + jmp p2x0 + EIF +rmt_play +rmt_p0 + jsr SetPokey +rmt_p1 + IFT FEAT_INSTRSPEED==0||FEAT_INSTRSPEED>1 + dec v_ainstrspeed + bne rmt_p3 + EIF + IFT FEAT_INSTRSPEED==0 + lda #$ff +v_instrspeed equ *-1 + sta v_ainstrspeed + ELI FEAT_INSTRSPEED>1 + lda #FEAT_INSTRSPEED + sta v_ainstrspeed + EIF +rmt_p2 + dec v_aspeed + bne rmt_p3 + inc v_abeat + lda #$ff +v_abeat equ *-1 + cmp #$ff +v_maxtracklen equ *-1 + beq p2o3 + jmp GetTrackLine +p2o3 + jmp GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3 +go_ppnext jmp ppnext +rmt_p3 + lda #>frqtab + sta nr+1 +xtracks05sub1 ldx #TRACKS-1 +pp1 + lda trackn_instrhb,x + beq go_ppnext + sta ns+1 + lda trackn_instrdb,x + sta ns + ldy trackn_instridx,x + lda (ns),y + sta reg1 + iny + lda (ns),y + sta reg2 + iny + lda (ns),y + sta reg3 + iny + tya + cmp trackn_instrlen,x + bcc pp2 + beq pp2 + lda #$80 + sta trackn_instrreachend,x +pp1b + lda trackn_instrlop,x +pp2 sta trackn_instridx,x + lda reg1 + IFT TRACKS>4 + cpx #4 + bcc pp2s + lsr @ + lsr @ + lsr @ + lsr @ +pp2s + EIF + and #$0f + ora trackn_volume,x + tay + lda volumetab,y + sta tmp + lda reg2 + and #$0e + tay + lda tabbeganddistor,y + sta nr + lda tmp + ora tabbeganddistor+1,y + sta trackn_audc,x +InstrumentsEffects + IFT FEAT_EFFECTS + lda trackn_effdelay,x + beq ei2 + cmp #1 + bne ei1 + lda trackn_shiftfrq,x + IFT FEAT_EFFECTFSHIFT + clc + adc trackn_effshift,x + EIF + IFT FEAT_EFFECTVIBRATO + clc + ldy trackn_effvibratoa,x + adc vib0,y + EIF + sta trackn_shiftfrq,x + IFT FEAT_EFFECTVIBRATO + lda vibtabnext,y + sta trackn_effvibratoa,x + EIF + jmp ei2 +ei1 + dec trackn_effdelay,x +ei2 + EIF + ldy trackn_tableend,x + cpy #INSTRPAR+1 + bcc ei3 + lda trackn_tablespeeda,x + bpl ei2f +ei2c + tya + cmp trackn_tablea,x + bne ei2c2 + IFT FEAT_TABLEGO + lda trackn_tablelop,x + ELS + lda #INSTRPAR + EIF + sta trackn_tablea,x + bne ei2a +ei2c2 + inc trackn_tablea,x +ei2a + lda trackn_instrdb,x + sta nt + lda trackn_instrhb,x + sta nt+1 + ldy trackn_tablea,x + lda (nt),y + IFT FEAT_TABLEMODE + ldy trackn_tablemode,x + beq ei2e + clc + adc trackn_tablenote,x +ei2e + EIF + sta trackn_tablenote,x + lda trackn_tabletypespeed,x + IFT FEAT_TABLETYPE||FEAT_TABLEMODE + and #$3f + EIF +ei2f + sec + sbc #1 + sta trackn_tablespeeda,x +ei3 + lda trackn_instrreachend,x + bpl ei4 + lda trackn_volume,x + beq ei4 + IFT FEAT_VOLUMEMIN + cmp trackn_volumemin,x + beq ei4 + bcc ei4 + EIF + tay + lda trackn_volumeslidevalue,x + clc + adc trackn_volumeslidedepth,x + sta trackn_volumeslidevalue,x + bcc ei4 + tya + sbc #16 + sta trackn_volume,x +ei4 + IFT FEAT_COMMAND2 + lda #0 + sta frqaddcmd2 + EIF + IFT FEAT_COMMAND1||FEAT_COMMAND2||FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + lda reg2 + IFT FEAT_FILTER||FEAT_BASS16 + sta trackn_command,x + EIF + and #$70 + IFT 1==[FEAT_COMMAND1+FEAT_COMMAND2+FEAT_COMMAND3+FEAT_COMMAND4+FEAT_COMMAND5+FEAT_COMMAND6+[FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY]] + beq cmd0 + ELS + lsr @ + lsr @ + sta jmx+1 +jmx bcc * + jmp cmd0 + nop + jmp cmd1 + IFT FEAT_COMMAND2||FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + nop + jmp cmd2 + EIF + IFT FEAT_COMMAND3||FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + nop + jmp cmd3 + EIF + IFT FEAT_COMMAND4||FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + nop + jmp cmd4 + EIF + IFT FEAT_COMMAND5||FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + nop + jmp cmd5 + EIF + IFT FEAT_COMMAND6||FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + nop + jmp cmd6 + EIF + IFT FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + nop + jmp cmd7 + EIF + EIF + ELS + IFT FEAT_FILTER||FEAT_BASS16 + lda reg2 + sta trackn_command,x + EIF + EIF +cmd1 + IFT FEAT_COMMAND1 + lda reg3 + jmp cmd0c + EIF +cmd2 + IFT FEAT_COMMAND2 + lda reg3 + sta frqaddcmd2 + lda trackn_note,x + jmp cmd0a + EIF +cmd3 + IFT FEAT_COMMAND3 + lda trackn_note,x + clc + adc reg3 + sta trackn_note,x + jmp cmd0a + EIF +cmd4 + IFT FEAT_COMMAND4 + lda trackn_shiftfrq,x + clc + adc reg3 + sta trackn_shiftfrq,x + lda trackn_note,x + jmp cmd0a + EIF +cmd5 + IFT FEAT_COMMAND5&&FEAT_PORTAMENTO + IFT FEAT_TABLETYPE + lda trackn_tabletypespeed,x + bpl cmd5a1 + ldy trackn_note,x + lda (nr),y + clc + adc trackn_tablenote,x + jmp cmd5ax + EIF +cmd5a1 + lda trackn_note,x + clc + adc trackn_tablenote,x + cmp #61 + bcc cmd5a2 + lda #63 +cmd5a2 + tay + lda (nr),y +cmd5ax + sta trackn_portafrqc,x + ldy reg3 + bne cmd5a + sta trackn_portafrqa,x +cmd5a + tya + lsr @ + lsr @ + lsr @ + lsr @ + sta trackn_portaspeed,x + sta trackn_portaspeeda,x + lda reg3 + and #$0f + sta trackn_portadepth,x + lda trackn_note,x + jmp cmd0a + ELI FEAT_COMMAND5 + lda trackn_note,x + jmp cmd0a + EIF +cmd6 + IFT FEAT_COMMAND6&&FEAT_FILTER + lda reg3 + clc + adc trackn_filter,x + sta trackn_filter,x + lda trackn_note,x + jmp cmd0a + ELI FEAT_COMMAND6 + lda trackn_note,x + jmp cmd0a + EIF +cmd7 + IFT FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY + IFT FEAT_COMMAND7SETNOTE + lda reg3 + IFT FEAT_COMMAND7VOLUMEONLY + cmp #$80 + beq cmd7a + EIF + sta trackn_note,x + jmp cmd0a + EIF + IFT FEAT_COMMAND7VOLUMEONLY +cmd7a + lda trackn_audc,x + ora #$f0 + sta trackn_audc,x + lda trackn_note,x + jmp cmd0a + EIF + EIF +cmd0 + lda trackn_note,x + clc + adc reg3 +cmd0a + IFT FEAT_TABLETYPE + ldy trackn_tabletypespeed,x + bmi cmd0b + EIF + clc + adc trackn_tablenote,x + cmp #61 + bcc cmd0a1 + lda #0 + sta trackn_audc,x + lda #63 +cmd0a1 + IFT FEAT_BASS16 + sta trackn_outnote,x + EIF + tay + lda (nr),y + clc + adc trackn_shiftfrq,x + IFT FEAT_COMMAND2 + clc + adc frqaddcmd2 + EIF + IFT FEAT_TABLETYPE + jmp cmd0c +cmd0b + cmp #61 + bcc cmd0b1 + lda #0 + sta trackn_audc,x + lda #63 +cmd0b1 + tay + lda trackn_shiftfrq,x + clc + adc trackn_tablenote,x + clc + adc (nr),y + IFT FEAT_COMMAND2 + clc + adc frqaddcmd2 + EIF + EIF +cmd0c + sta trackn_audf,x +pp9 + IFT FEAT_PORTAMENTO + lda trackn_portaspeeda,x + beq pp10 + dec trackn_portaspeeda,x + bne pp10 + lda trackn_portaspeed,x + sta trackn_portaspeeda,x + lda trackn_portafrqa,x + cmp trackn_portafrqc,x + beq pp10 + bcs pps1 + adc trackn_portadepth,x + bcs pps8 + cmp trackn_portafrqc,x + bcs pps8 + jmp pps9 +pps1 + sbc trackn_portadepth,x + bcc pps8 + cmp trackn_portafrqc,x + bcs pps9 +pps8 + lda trackn_portafrqc,x +pps9 + sta trackn_portafrqa,x +pp10 + lda reg2 + and #$01 + beq pp11 + lda trackn_portafrqa,x + clc + adc trackn_shiftfrq,x + sta trackn_audf,x +pp11 + EIF +ppnext + dex + bmi rmt_p4 + jmp pp1 +rmt_p4 + IFT FEAT_AUDCTLMANUALSET + lda trackn_audctl+0 + ora trackn_audctl+1 + ora trackn_audctl+2 + ora trackn_audctl+3 + tax + ELS + ldx #0 + EIF +qq1 + stx v_audctl + IFT FEAT_FILTER + IFT FEAT_FILTERG0L + lda trackn_command+0 + bpl qq2 + lda trackn_audc+0 + and #$0f + beq qq2 + lda trackn_audf+0 + clc + adc trackn_filter+0 + sta trackn_audf+2 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2L + lda trackn_audc+2 + and #$10 + bne qq1a + EIF + lda #0 + sta trackn_audc+2 +qq1a + txa + ora #4 + tax + EIF +qq2 + IFT FEAT_FILTERG1L + lda trackn_command+1 + bpl qq3 + lda trackn_audc+1 + and #$0f + beq qq3 + lda trackn_audf+1 + clc + adc trackn_filter+1 + sta trackn_audf+3 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG3L + lda trackn_audc+3 + and #$10 + bne qq2a + EIF + lda #0 + sta trackn_audc+3 +qq2a + txa + ora #2 + tax + EIF +qq3 + IFT FEAT_FILTERG0L||FEAT_FILTERG1L + cpx v_audctl + bne qq5 + EIF + EIF + IFT FEAT_BASS16 + IFT FEAT_BASS16G1L + lda trackn_command+1 + and #$0e + cmp #6 + bne qq4 + lda trackn_audc+1 + and #$0f + beq qq4 + ldy trackn_outnote+1 + lda frqtabbasslo,y + sta trackn_audf+0 + lda frqtabbasshi,y + sta trackn_audf+1 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG0L + lda trackn_audc+0 + and #$10 + bne qq3a + EIF + lda #0 + sta trackn_audc+0 +qq3a + txa + ora #$50 + tax + EIF +qq4 + IFT FEAT_BASS16G3L + lda trackn_command+3 + and #$0e + cmp #6 + bne qq5 + lda trackn_audc+3 + and #$0f + beq qq5 + ldy trackn_outnote+3 + lda frqtabbasslo,y + sta trackn_audf+2 + lda frqtabbasshi,y + sta trackn_audf+3 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2L + lda trackn_audc+2 + and #$10 + bne qq4a + EIF + lda #0 + sta trackn_audc+2 +qq4a + txa + ora #$28 + tax + EIF + EIF +qq5 + stx v_audctl + IFT TRACKS>4 + IFT FEAT_AUDCTLMANUALSET + lda trackn_audctl+4 + ora trackn_audctl+5 + ora trackn_audctl+6 + ora trackn_audctl+7 + tax + ELS + ldx #0 + EIF + stx v_audctl2 + IFT FEAT_FILTER + IFT FEAT_FILTERG0R + lda trackn_command+0+4 + bpl qs2 + lda trackn_audc+0+4 + and #$0f + beq qs2 + lda trackn_audf+0+4 + clc + adc trackn_filter+0+4 + sta trackn_audf+2+4 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2R + lda trackn_audc+2+4 + and #$10 + bne qs1a + EIF + lda #0 + sta trackn_audc+2+4 +qs1a + txa + ora #4 + tax + EIF +qs2 + IFT FEAT_FILTERG1R + lda trackn_command+1+4 + bpl qs3 + lda trackn_audc+1+4 + and #$0f + beq qs3 + lda trackn_audf+1+4 + clc + adc trackn_filter+1+4 + sta trackn_audf+3+4 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG3R + lda trackn_audc+3+4 + and #$10 + bne qs2a + EIF + lda #0 + sta trackn_audc+3+4 +qs2a + txa + ora #2 + tax + EIF +qs3 + IFT FEAT_FILTERG0R||FEAT_FILTERG1R + cpx v_audctl2 + bne qs5 + EIF + EIF + IFT FEAT_BASS16 + IFT FEAT_BASS16G1R + lda trackn_command+1+4 + and #$0e + cmp #6 + bne qs4 + lda trackn_audc+1+4 + and #$0f + beq qs4 + ldy trackn_outnote+1+4 + lda frqtabbasslo,y + sta trackn_audf+0+4 + lda frqtabbasshi,y + sta trackn_audf+1+4 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG0R + lda trackn_audc+0+4 + and #$10 + bne qs3a + EIF + lda #0 + sta trackn_audc+0+4 +qs3a + txa + ora #$50 + tax + EIF +qs4 + IFT FEAT_BASS16G3R + lda trackn_command+3+4 + and #$0e + cmp #6 + bne qs5 + lda trackn_audc+3+4 + and #$0f + beq qs5 + ldy trackn_outnote+3+4 + lda frqtabbasslo,y + sta trackn_audf+2+4 + lda frqtabbasshi,y + sta trackn_audf+3+4 + IFT FEAT_COMMAND7VOLUMEONLY&&FEAT_VOLUMEONLYG2R + lda trackn_audc+2+4 + and #$10 + bne qs4a + EIF + lda #0 + sta trackn_audc+2+4 +qs4a + txa + ora #$28 + tax + EIF + EIF +qs5 + stx v_audctl2 + EIF +rmt_p5 + IFT FEAT_INSTRSPEED==0||FEAT_INSTRSPEED>1 + lda #$ff +v_ainstrspeed equ *-1 + ELS + lda #1 + EIF + rts +SetPokey + IFT STEREOMODE==1 ;* L1 L2 L3 L4 R1 R2 R3 R4 + ldy #$ff +v_audctl2 equ *-1 + lda trackn_audf+0+4 + ldx trackn_audf+0 +xstastx01 sta $d210 + stx $d200 + lda trackn_audc+0+4 + ldx trackn_audc+0 +xstastx02 sta $d211 + stx $d201 + lda trackn_audf+1+4 + ldx trackn_audf+1 +xstastx03 sta $d212 + stx $d202 + lda trackn_audc+1+4 + ldx trackn_audc+1 +xstastx04 sta $d213 + stx $d203 + lda trackn_audf+2+4 + ldx trackn_audf+2 +xstastx05 sta $d214 + stx $d204 + lda trackn_audc+2+4 + ldx trackn_audc+2 +xstastx06 sta $d215 + stx $d205 + lda trackn_audf+3+4 + ldx trackn_audf+3 +xstastx07 sta $d216 + stx $d206 + lda trackn_audc+3+4 + ldx trackn_audc+3 +xstastx08 sta $d217 + stx $d207 + lda #$ff +v_audctl equ *-1 +xstysta01 sty $d218 + sta $d208 + ELI STEREOMODE==0 ;* L1 L2 L3 L4 + ldy #$ff +v_audctl equ *-1 + lda trackn_audf+0 + ldx trackn_audc+0 + sta $d200 + stx $d201 + lda trackn_audf+1 + ldx trackn_audc+1 + sta $d200+2 + stx $d201+2 + lda trackn_audf+2 + ldx trackn_audc+2 + sta $d200+4 + stx $d201+4 + lda trackn_audf+3 + ldx trackn_audc+3 + sta $d200+6 + stx $d201+6 + sty $d208 + ELI STEREOMODE==2 ;* L1 R2 R3 L4 + ldy #$ff +v_audctl equ *-1 + lda trackn_audf+0 + ldx trackn_audc+0 + sta $d200 + stx $d201 + sta $d210 + lda trackn_audf+1 + ldx trackn_audc+1 + sta $d210+2 + stx $d211+2 + lda trackn_audf+2 + ldx trackn_audc+2 + sta $d210+4 + stx $d211+4 + sta $d200+4 + lda trackn_audf+3 + ldx trackn_audc+3 + sta $d200+6 + stx $d201+6 + sta $d210+6 + sty $d218 + sty $d208 + ELI STEREOMODE==3 ;* L1 L2 R3 R4 + ldy #$ff +v_audctl equ *-1 + lda trackn_audf+0 + ldx trackn_audc+0 + sta $d200 + stx $d201 + lda trackn_audf+1 + ldx trackn_audc+1 + sta $d200+2 + stx $d201+2 + lda trackn_audf+2 + ldx trackn_audc+2 + sta $d210+4 + stx $d211+4 + sta $d200+4 + lda trackn_audf+3 + ldx trackn_audc+3 + sta $d210+6 + stx $d211+6 + sta $d200+6 + sty $d218 + sty $d208 + EIF + rts +RMTPLAYEREND diff --git a/averybreakout.asm b/averybreakout.asm index 3c708e1..63e9b85 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -4,10 +4,21 @@ ;あめでと ;--------------------------------------------------- + OPT r+ ; saves 10 bytes, and probably works :) https://github.com/tebe6502/Mad-Assembler/issues/10 + +;--------------------------------------------------- +.macro build + dta d"1.00" ; number of this build (4 bytes) +.endm + +.macro RMTSong + lda #:1 + jsr RMTSongSelect +.endm +;--------------------------------------------------- icl 'lib/ATARISYS.ASM' icl 'lib/MACRO.ASM' -EOLA = 155 ; Atari EOL code CR_PC = 13 ; PC CR code LF_PC = 10 ; PC LF code display = $a000 @@ -39,8 +50,9 @@ maxBrickLines = 14 ; maximum number of lines of bricks to be eradicated .zpvar inlevel .word .zpvar clearCount clearBallNr .byte .zpvar DLI_A DLI_X dliCount .byte + .zpvar RMT_blocked noSfx SFX_EFFECT .byte .zpvar AutoPlay .byte ; Auto Play flag ($80 - auto) -end_of_zpvars +RMT_zpvars = AutoPlay+1 ; POZOR!!! RMT vars go here ;--------------------------------------------------- org $2000 ;--------------------------------------------------- @@ -206,7 +218,25 @@ JNotFire sta hexDump+1 mva #0 dliCount - mva #13 VSCROL + ; mva #13 VSCROL ; FOX gfx mode only + bit RMT_blocked + bmi SkipRMTVBL + ; ------- RMT ------- + lda sfx_effect + bmi lab2 + asl @ ; * 2 + tay ;Y = 2,4,..,16 instrument number * 2 (0,2,4,..,126) + ldx #0 ;X = 0 channel (0..3 or 0..7 for stereo module) + lda #0 ;A = 0 note (0..60) + bit noSfx + smi:jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!) + + lda #$ff + sta sfx_effect ;reinit value +lab2 + jsr RASTERMUSICTRACKER+3 ;1 play + ; ------- RMT ------- +SkipRMTVBL jmp XITVBV .endp ;-------------------------------------------------- @@ -277,7 +307,9 @@ main jsr BuildLevelFromBuffer jsr LevelScreen gameloop + RMTsong song_main_menu jsr MainScreen + RMTsong song_ingame jsr PlayLevel bit EndLevelFlag ; reason for end level bmi EndOfLife ; end of life :) @@ -295,6 +327,7 @@ EndOfLife jmp gameloop gameOver ;game over + RMTSong song_game_over jsr HiScoreCheckWrite jsr GameOverScreen @ lda RANDOM @@ -1195,6 +1228,15 @@ brickcolorTab mva #$7C COLBAKS mva #0 dliCount + sta RMT_blocked + + lda #$ff + sta sfx_effect + + ; pokeys init + lda #3 ; stereo (pseudo) + sta POKEY+$0f ; stereo + sta POKEY+$1f ; stereo lda dmactls and #$fc @@ -1435,7 +1477,7 @@ nextnumber inw inlevel cmp #CR_PC ; skip PC CR beq nextnumber - cmp #EOLA ; Atari LF + cmp #EOL ; Atari LF beq nextnumber2 cmp #LF_PC ; PC LF beq nextnumber2 @@ -1480,7 +1522,7 @@ singlepixel inw inlevel cmp #CR_PC ; skip PC CR beq singlepixel - cmp #EOLA ; Atari LF + cmp #EOL ; Atari LF beq makeBricks cmp #LF_PC ; PC LF bne singlepixel @@ -1498,7 +1540,7 @@ drawBricksLoop inw inlevel cmp #CR_PC ; skip PC CR beq drawBricksLoop - cmp #EOLA ; Atari LF + cmp #EOL ; Atari LF beq EndOfLine cmp #LF_PC ; PC LF beq EndOfLine ; next line @@ -1540,33 +1582,50 @@ LevelDataError jmp level000 .endp ;-------------------------------------------------- +.proc RmtSongSelect +; starting song line 0-255 to A reg +;-------------------------------------------------- +/* + cmp #song_main_menu + beq noingame ; noMusic blocks only ingame songs + bit noMusic + spl:lda #song_silencio +noingame +*/ + mvx #$ff RMT_blocked + ldx #MODUL ; hi byte of RMT module to Y reg + jsr RASTERMUSICTRACKER ; Init + mva #0 RMT_blocked + rts +.endp ;-------------------------------------------------- Menu_data - .byte '200',EOLA ; number of bricks in ATASCII - .byte '1',EOLA ; brick size in pixels + .byte '200',EOL ; number of bricks in ATASCII + .byte '1',EOL ; brick size in pixels ; 0 1 2 3 4 5 6 7 ; 01234567890123456789012345678901234567890123456789012345678901234567890123456789 - .byte EOLA - .byte ' #### ## ## ####### ###### ## ##',EOLA - .byte ' ###### ## ## ## ## ## ## ##',EOLA - .byte ' ## ## ## ## ##### ###### ####',EOLA - .byte ' ######## #### ## ## ## ##',EOLA - .byte ' ## ## ## ####### ## ## ##',EOLA - .byte EOLA - .byte ' ##### ###### ####### #### ## ## ###### ## ## ########',EOLA - .byte ' ## ## ## ## ## ###### ## ## ## ## ## ## ##',EOLA - .byte ' ##### ###### ##### ## ## #### ## ## ## ## ##',EOLA - .byte ' ## ## ## ## ## ######## ## ## ## ## ## ## ##',EOLA - .byte ' ###### ## ## ####### ## ## ## ## ###### ###### ##',EOLA - .byte EOLA + .byte EOL + .byte ' #### ## ## ####### ###### ## ##',EOL + .byte ' ###### ## ## ## ## ## ## ##',EOL + .byte ' ## ## ## ## ##### ###### ####',EOL + .byte ' ######## #### ## ## ## ##',EOL + .byte ' ## ## ## ####### ## ## ##',EOL + .byte EOL + .byte ' ##### ###### ####### #### ## ## ###### ## ## ########',EOL + .byte ' ## ## ## ## ## ###### ## ## ## ## ## ## ##',EOL + .byte ' ##### ###### ##### ## ## #### ## ## ## ## ##',EOL + .byte ' ## ## ## ## ## ######## ## ## ## ## ## ## ##',EOL + .byte ' ###### ## ## ####### ## ## ## ## ###### ###### ##',EOL + .byte EOL .byte 0 Level000_data - .byte '100',EOLA ; '952',EOLA ; number of bricks (pixes) in ATASCII - .byte '2',EOLA ; brick size in pixels + .byte '100',EOL ; '952',EOL ; number of bricks (pixes) in ATASCII + .byte '2',EOL ; brick size in pixels ; 0 1 2 3 ; 0123456789012345678901234567890123456789 - .byte EOLA,EOLA,EOLA - :14 .byte ' ##################################',EOLA + .byte EOL,EOL,EOL + :14 .byte ' ##################################',EOL .byte 0 LevelFileBuff LevelFileBuffLen=(screenWidth*maxLines)+20 @@ -1577,7 +1636,7 @@ LevelNumber StartLevelNumber .byte '000' fname - .byte 'D:LEVEL000.DAT',EOLA + .byte 'D:LEVEL000.DAT',EOL ;-------------------------------------------------- EndLevelFlag .byte 0 ; $ff - level over, $00 - level ended @@ -1675,5 +1734,23 @@ dyDisp ballDisp dta d" " marginLine :40 .byte 0 + .align $100 +PLAYER +;-------------------------------- +; names of RMT instruments (sfx) +;-------------------------------- +sfx_ping = $07 +sfx_pong = $08 +;-------------------------------- +; RMT songs (lines) +;-------------------------------- +song_main_menu = $00 +song_ingame = $07 +song_game_over = $12 + icl 'art/rmtplayr.a65' + org $6000 +MODUL + ins 'art/muzyka.rmt',+6 +MODULEND RUN main diff --git a/averybreakout.xex b/averybreakout.xex index c2615d7c55eb661d4dc8610fb0c5327621a17e2d..6c0455dd510183125ab3df06f980ef07ede144fa 100644 GIT binary patch delta 4685 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 QBk;ObbUh;fL{6Lk1$(m%)Bpeg delta 1922 zcmc&#Z)j6j6o2ofiEWyuv38nPIv=BAQf*#RbPlO7wxaL#UDG-CWnZ=+%2tN^R0e}V z(m&UxX|MhB(pIexO6Lu}!jlDIy2)e8bS!0bk5M+p7&x|eu1)LfRNT-lJ4u{Y8T&L? zKAfC$?mfSA?){x}-^9xoo9($A!_&0=N~yzATWp%Bd{OFUQ_6hlp=e_pCH_ipdyoX$ zGzOp6Du{g!9r_8M(qd$@sh7_=oy0juYE63TdA@8re^21Q^MeALRo*RVHN@rP-xV~5 z*d%^ukna!iZ#3{`t*!z$qZorLdKHakOYMPvuSqAd-PNng+4M+C)t2B-PuU_`e` zR#ni!SB3bUAt)?g(9U2)V*zK1GnPelQJnGIMJ)|b88{Y2Wy0CSmMOE&T_8)!Ux`i& zsea=yGHs|iU|f}P%*e{P)2K$c%V$%FOMv!dSaaW*LFDk zaB`XBCj{+1@;Mmzv@US|`(+#v@=HNZt0y6D^3^H7c6or|jDM{E7N4n95*kA z$*5>IRu`tt`7oiRg}w8Xv^#xm>;z5vz-{#}Y$$oV`dY zRylp|;H~kWj^vvvlLKghfHm9!= z9>>A+c3hyb)WFi1zbP~@1!bOW^4zN1f94x-rvI;0y|@=rMQ{XC`N7-~H!9dQUo4v2 zC)2^**GY${Uo`2*v%|PwtUmQKycO*i3pu4=hGd@pGlrvZDqnI`=j?_9%4>-iBWT2N zkwzWDLL~0kSDMFdl)94~)=qE4VFc|p{(Tc1R=*RtL*49=vQomXdX+XW)NQ3H3W2WkRhmCEivP-XkAlU^5b+ZAcF0nYBcco*g81)av zX>f4ppc7~>#M20DrF{@iqp))^<~Dmy)Y6)Tn!+X>$aMm9HMMY_Xd}mT&thHj{IdRs zXS$9m(38Nvo+!|hs_gJ~M`W0lS|C#pV>-MWyH}2K(i$E~j~poFuZlX(4&g9gAuNtK zR%M2!RFqKBgo=_Xx~rm;il~axD!Qkl$-MqpPFU|R31f3Y#PKU!%g}lV2({}LX2KzG z&4G&p*Ein^nMHxXxFC>4Au}(K1tIfLAoD`zfj}M#nK^+x5N^*2@)6ErwO75c{Xh(n zS&r`(*e$XI;>Y8BhrmzNXPP;2vyvmtU?Xmh@kHVhg(S~r`w@5B#E~N_Y@J+@SQGI| zEJ?Z~_8RGtlE?`!?(0-Pkl-5okouA2gsTjOPb9d_VE9bRuUYlgB#MFzpk2@`XcaUH z1OajYF@O}{TaaJt)PEvM({fY|z@Yz@=nM^PONgJVXD&<=j70S7}>N2CU~@^2P>oUAmE2 zDmYs|j?b*w-R~)r`UZcYdvrGMXptk+KmMbC<9UE2B}$kukSyV@fs_GSLfXK+5+;j~ zo(B}Fk%==~Dy%j;a`5ifOLDhTT{z5NaXF^UK$(Fu17!xv43rrtGf-yW|HQzj*DO$O a=M7{0yf|L{u&b-5I5{NNxJTU4+CKr`X1po@