From 52d118027565df01df85040a7960d5e7778d28d4 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Thu, 15 Aug 2024 10:13:13 +0200 Subject: [PATCH] Finito! --- dino.asm | 49 +- dino.xex | Bin 9742 -> 8731 bytes intro/tech_diff.asm | 38 +- intro/tech_diff.lab | 79 ++- intro/tech_diff.lst | 830 ++++++++++++++++--------- intro/tech_diff.xex | Bin 27495 -> 29148 bytes music/playlzs16.asm | 18 +- music/{playlzs16.obx => playlzs16.xex} | Bin 3123 -> 3123 bytes td.xex | Bin 38742 -> 37879 bytes 9 files changed, 658 insertions(+), 356 deletions(-) rename music/{playlzs16.obx => playlzs16.xex} (95%) diff --git a/dino.asm b/dino.asm index bc80a2a..827b7c4 100644 --- a/dino.asm +++ b/dino.asm @@ -24,6 +24,7 @@ swap_table=$0600 ; table for swap bytes in left characters :) .zpvar JumpPhase .byte .zpvar Hit .byte .zpvar Level .byte + .zpvar play_flag .byte ;--------------------------------------------------- icl 'lib/ATARISYS.ASM' icl 'lib/MACRO.ASM' @@ -42,9 +43,9 @@ swap_table=$0600 ; table for swap bytes in left characters :) ;--------------------------------------------------- org $2000 PLAYER - ins 'music/pl_2000.bin',+6 ; MPT player $2000 + icl 'music/playlzs16.asm' ; Music Player - org $2800 + org $3000 PMgraph org PMGraph+$800 ; P/M graphics for clouds ;--------------------------------------------------- @@ -127,6 +128,7 @@ NewGame jsr PlayInGameMusic jsr GameR jsr GameOverR + jsr PlayGameOverMusic AnyKey jsr FadeColorsOUT jsr HiScoreR @@ -137,6 +139,7 @@ NewGame jsr PlayInGameMusic jsr GameL jsr GameOverL + jsr PlayGameOverMusic AnyKey jsr FadeColorsOUT jsr HiScoreL @@ -1304,29 +1307,35 @@ pressed .endp ;-------------------------------------------------- .proc PrepareMusicPlayer - ;jsr StopMusic + jsr StopMusic VMAIN VBLinterrupt,7 ; jsr SetVBL rts .endp .proc PlayInGameMusic - lda #$00 - ldy #MUSIC1_DATA - jmp PLAYER ; rts + jsr StopMusic + mwa #MUSIC1_DATA song_start_ptr + mwa #MUSIC1_DATA_END song_end_ptr + jsr init_song + mva #1 play_flag + rts .endp .proc PlayGameOverMusic - lda #$00 - ldy #MUSIC2_DATA - jmp PLAYER ; rts + jsr StopMusic + mwa #MUSIC2_DATA song_start_ptr + mwa #MUSIC2_DATA_END song_end_ptr + jsr init_song + mva #1 play_flag + rts .endp .proc StopMusic - lda #$02 - jmp PLAYER ; rts + mva #0 play_flag + rts .endp .proc VBLinterrupt - jsr PLAYER+3 - pla + lda play_flag + beq @+ + jsr PLAYER +@ pla tay pla tax @@ -1365,10 +1374,12 @@ font4l ; SCR_HEIGHT lines 256bytes each screen .ds $100*SCR_HEIGHT - org $6900 ; POZOR!!! + .align $100 MUSIC1_DATA - ins 'music/ingame.mpt',+6 ; ingame music + ins 'music/InGame.lzss' ; ingame music +MUSIC1_DATA_END + .align $100 MUSIC2_DATA - ins 'music/gameover.mpt',+6 ; game over music - + ins 'music/GameOver.lzss' ; game over music +MUSIC2_DATA_END run FirstSTART diff --git a/dino.xex b/dino.xex index 3316547f5ce6cc1323709bd6aa186385d7bec15c..97b85c0811470dc5169ad9654e22ef636176b936 100644 GIT binary patch delta 6098 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 QUZRLgq~{PZOiT~|9{}|e*#H0l literal 9742 zcmeHL3v?7!n!a7t>F$J1x(R_akdR7us-Q7Qg@-iIlSJML5j7(|kVm1WB@iPzEF`>A zmCz8`l#_F2-KCuEoi+;6NRwpMWqO9JEvO{XBy|{PaAd?r9b|Mi(+)l&gw+1Gs`CO= zI5TI@p0oQ`_r3Rj-0%PIe_z$DD2N@+29P+F2q>cNH~UlGOo{fYP3|M&V*;^=I?5Cs zaDWNTbWdV}PNw5BUB99;i;0p&d#MK0@@u+{tiPq@BJE9U`G)qUA9gUU&1t?wrnWh) zO_4{mBr*x2gE?4~Lpk#jd}Eml5xv~j?O^aHiveUO(?I&p(7usOyY(ADw%UTdw3r1_ z3{KRO)ZWZ?>&0$t_vc%fXciXhKzxa6IZ6L$8WT9TGJW`$bm%q)8llaM_zLYO8w{bBX&*WjYNX!*Owy-26*@^L(hLl=y}j0Y zPBfk3T0Y04`U{LIE=|_^8fos>Yjl{3I-1j5SK^uMqfC@=MnMiE7AG=&uhH;v8l&Ti z3LGsT($VCzpVD%o?^C*^k#<_56W)?TPc0eN&4QVAyGR{&^|SK-^+B1 zj*05e>KN|W6*{zy7Hcy@+iCHs%pyfOJCb2_+_AAtNKw2KT5*{XH$m2M0pyEkT1GRF z!((UYzB6?5gtk7Ax8*l2gOte=4^LsDHrJnYPRqgO%U)$)ycO41{JJI|Iwvc~?<=r?@1i4_ZB#VAu9vRM z!c6co4f6^OXP$2~Q}j|MwbYKe3>-*eTZSCJH$l9WdHNQH!|}!YmAYG)RtO{EAdJd~ z^Nxq-!@2iU&1p`HuZxCiV_{*T?+VU$Lc$Wjj$_t2!@iHP!1o~yndX9%7^ktYu-+=C zv~=O~@wTmf{Yi!M55Z#hj<$Lyf6L2E~sI=GgjwCl?0*i;n#!QS$+ z%H!5i+P32~UG#;Wn&5!mP~!Dgw9OGvj&;#25zt}1?=<~E7cHB>bAjUPqFW$i&b;)G zX*?wD_naIFW(D6c)x$ItYuGQWOaAB#mQ?1q_P<)-w(rzAZ1&urhHg z!1p(FxG^Q+6gJ_Wp32m*jF}2Y4LRjteb|7fc>9zyL`zO1e;7o+-Mgo z?WOtRKV^!~W(KD+qMZ?+u!~#mrAT}xQ~Y@**p-IGMGkKoXhFEx;Y~lE?vHOylP=P= z)}GE@x~PDr3TRN{{oOzY$Ym^3Pk^Ui!|way$YuJ%(@rL!Q+IMOK*OX45798ApyY6` z$&;PrA&$By3%ZPC@Cnd}7Y$Z9cfvstpkUcS9B`Hd2mr;Vz*6sIQuo@y%KzKKCc^*j zKCwMZJe>uOrZ8eQ6U=7t!q>@he$<`KH1{33Rn2p}RZMsnKCsc7`-U*Ba>sdPzw+i4 z`At}Uuu3q-RHo4X+pEE;BU!;IjNGHfF_nQ84beFBY^6Ht^Gw(S0UZt!WZugF;O$i- z;)0nB>c*s z**~*ivg;j5jugix#}keUN42BQ@r>i&9LF6a=>mFn*7&Sj>Ho@lD$B^^BMSX5AUy#= z{B`<2f8?q|>o2VT3vW8I==?Lcf8A8he*NoR#r7{-{acsMNcrl$mKVe=+%nh1(S~m> zoas98%fk)N*4I{5Y+V1yYLu909x);zA>L#%8jS`+TwI(Uh{Qx_q#Hulj@pXYM)$@T z&6~pF7O`<-G2)8R+G6xjF?zTdJyMKHijk)nJ$gG_c0*~^zVOVQ)2hAA*Jyo1J7?Mz(LuYvYzggCSoJ%&mU z+J-hm^<>(F?K`f4x>*6$FrC^sjaogO+C7&_noH%+q<%k}IzF9xZ4OmGmwFag_d8G-ykksd@vPXO|n>C~xN{mAzW8epWr{ewLAgpvPYMquTj6vJTT zy9PzrS<%}$oZk}aU?t1iTI)B#4_I+bN$@Nyrj`UhgtjLbfwl*18W33dENd^+TEE6- zU;t)d3}&gS*%&ZGA(Stn1rk~!p&|+0C82vHbiagFhR{3-Es{{7gqBIDSVH$oXoZAU zhtPZpEtb$y3Ee57A4}*y2|XyGH6e7ngzgTZg%VmGLIo0fAcXFa(5hD1=SRD$nd&=d*XDxs;Za<|_Yip-NLvL$|MC{ip{+$!-?YOSAh{`>%v&at)DOPoI& zn&?ppc_dUKp+_Y2u!J6x&{_#`welZ1Sf34OcXi7-men7mmd-q1eV{s$FaM=q5t!_) z!Airy12xovnQzs^3_j**8Ub8eT+_FuCOIBA_0Tl78D&*&0ETe(i5WTZ zyh!D6-G|-XL3j5NcXwl~}dBks<|Sjly7WrJJUwsG>jfK}Yec2}~&O3Y3N zwvz2`a%0b@Co#x&D0rt^%ER*M4uCUN-ID-DZp?o!{*zLx*AFWLW!f_jz}Fz0p4h zc8Kw8fE5#1E-+=F8QS9Z@}b>sui!_`JWKk}Bewl~DdFYoiSvRcDY-`CxkmD+Yd`-d zgO_h2-V!dfh6(xKxgpTHzZ-O|^%brmZofBf*TK-`xe&SzLJ#YstHN>72h<^0TTn^V z5O~nLM<$wiA5x=_8yF9$Jww&%PzKeI0Cgw{14D_E4{wf@72JE27n(L4h$*yAy-#p9UZ`0 zdkxlg(68?P2G@{v?UX(UQ+l6Y4}-ti99|Q{uqmyz9v+y`C)Ei}nXOLf>e>C?ZYr_E zyE8arhjHI)fF2 zlZa;HN*7HFTIFbJ&~mEno9Ng!C29=DpK8mD#=*hlTR@E3xggcDji?1m$a%ACms*RdU&*?OnU1WVbDEo?n4rv=xu9TjYS zrkotyz;;x!_35%HSjKj2W$VXs!Og6=4xg}MDL!_^_4r^GH{jD+EYptKb*%KNcGLz} z4xq0ZKwmw8zGeWO8-l)4MPH?&uU665sOX%AzLJ$*j~(Qw?oFcZEuyZKs0$NyuM>60 ziMkW9SE|;qRsJ|&7Q=-2Iw2k>#1jO(rhJ!mt@V%i#|`{aWyKsKkQ>Ow|N7wftiUAE z_-=p@(`C>jS=7lQA&aEU1v6y0;=a}9W|}TIUCUZfcsVl4e?5jO+Z{ah-p=q7)b764$t# zHy_vY=3^e0{qjYN7c9hF;nF1qigMT8%kC_?Ls9Ni?p2nn{T@*6S8GN2@jcj1QC1Wi zjh2b2Q!{4Wd0*b*HIF{-9!|+4Er}!IO-B5iW(eUo_h$Dm-8zDV-#LU1y`VfkRVkw(3f6B>YB4m+Bs1`xIsIiHjF6s($cz zW5n|(K2?;eybO!cpf~hO5z5G$m6w;7o437JxzgL)(-Vzw6op3X>J%3J(2BBVc%2CEFsQZ3_RELB9jHKRx`zv3Z z3;*mLgm`#{;$uL}8%d+#O9Qr(R9>|M7$Z6TafO5*pnN#e*Rv~%5b%%!gfzaZDmO_< z>P+HeIQpcdq-C9*U5MgqFsbDXn%OWQp)hMEp@PK$_+d2u%$YN1 z->YyTlR54F`(3uXSgZ9S$gRcGl2cOl)vEv}vTfGl85upLyYBTa|-np~f z1HW-G!9svlw7m@YT#hUE+e4s%pc-&=26%Ee6XLuVXb3j*H7Vm z{e?HC8VBx%{Xe{+D)%-lciYqrht=i^b>raugW&trOVR6$NZCXGs;3bPXwV20xY zyM@X^kg5a=dv+e)0VMw4qhE@U(UNGvl#z#*Vqafx&wI6|xv``Xk#!X#iGdo ze8_?B1g^eCeN|9JdR4<%fpM$ymX+Zg_E>G#%|SnIRbHj)zsI^yv%5pNqaTYP@L;db zK))6t9clRmIEV8o-3D$3s7m<|q&-SB+WTcR8i_y}cs@L!h9d@(#%r;r*?waSqc9&C z7Hd`BSo1j;1MZK{Gz9Tz(d<#ZA{2!hR&&*dQ1w)4z=OCMmQmx6j|ii_H+B!h#TM$i ziq#pG39A3TH$0lWbor))4RbcE-|*~)_6?UdOfFkdwzuq8WuKLedrU*Wk+SfypFCFc z*qO(u@*U+rEAJ>*%5S9C-_7QWPfoube)Z6E`+mBos^ZBFC2LkJzia8@`FU>F%xP1z zCr_dsnHlM6<7}y8Qbr|@v|5tjUr_iD6y6ooR|53c^Y3@Q_8++aQ~cH^p#REy@4930 zf?T!#lppS|eDTS9?crBnYLK4ZQ&stsjh?kDmKQHw0s+jPHJ!x(S(zCV(#DTX9W(lR z0bD%)`*&V{HP|54*YcH5mU*}bm)~8qWI?`rHpKtK{@dUG?9zIme4`G*9g$LLKOB)Q;NFN%R(a6TN{>z;hg)*Wm%8 za4|>+?FZ3|=m6S}UKsW~kF;m4KDJe`bD;e(`SYkjeV)_A-&uNf)j9#5Q^-4UwM z9<(2tcVJ$_yzl9iOsLAAqB>NIyl5AyLDfk3o(`I7kIoCvE_iC-sg6AY#CZKE1CB%J z5DFkIO9#|U?T0Mj2WL#DH)+6Tt?EMWT$Ot*`vdv64iB*ry%a-#QJn|uVd#_7k00x% zdBt;s^Zy(?*C8{CMT5}u_Wqf?e!bQZ3kcqwFfFJd1rvP98q;?+c#}ym)buUfO+G==OQwtBb`vbf|IgEUPm#iVZZ?Z&MC?pFWTua3@BzpDVkR|mc>@D+it zh5x?_erToD>UP63^g8Ij5^%i>E-mef>Bnib_aD{T0o{KM^k1E8iT~NF;3c?}w2K>G z2G_j^;E#yE@hYe$=kt>m3AqbQJUM@odOO^hh~!Oz3BCqCZvG^puTZcqbQjiG1q-e$ z-^(R}N#a7@?JgX#&@IeyEfGv6d~RAuk~bKIgzw|x;&`J;Fza-@K29(#7E)69WWidU y%v&s0tB{<+r>3L|WBJtG$sh;iXst-*Qleet_speek4 leet_screen .ds 32*9 -leet_screen_end - ini $2000 +leet_screen_end +;-------------------------------------------------- +.proc PlayMusic + mwa #MUSIC_DATA song_start_ptr + mwa #MUSIC_DATA_END song_end_ptr + jsr init_song + VMAIN VBLinterrupt,7 ; jsr SetVBL + rts +.endp +.proc StopMusic + VMAIN XITVBV,7 ; jsr SetVBL + rts +.endp +.proc VBLinterrupt + jsr PLAYER + pla + tay + pla + tax + pla + rti +.endp + .align $100 +MUSIC_DATA + ins '../music/Title.lzss' ; title music +MUSIC_DATA_END + + ini start1 ;--------------------------------------------------- org $3000 diff --git a/intro/tech_diff.lab b/intro/tech_diff.lab index ec9b63b..2fcfd5e 100644 --- a/intro/tech_diff.lab +++ b/intro/tech_diff.lab @@ -1,4 +1,4 @@ -mads 2.1.7 +mads 2.1.7 build 3 (13 Sep 23) Label table: 00 E400 EDITRV 00 E410 SCRENV @@ -577,36 +577,65 @@ FFFD 0000 @KBCODE 00 0082 TEMP_B 00 0083 TEMP_W2 00 0085 TEMP_W3 -00 2C24 LEET_ANIM -00 2C4D 0@ -00 2C71 NEXT_LETTER -00 2C90 LEET_END -00 2C94 WAIT_FOR_RELEASING_KEYZ -00 2C94 WAIT_FOR_RELEASING_KEYZ.1@ -00 2C9B WAIT_FOR_RELEASING_KEYZ.2@ -00 2CA6 WAIT_FOR_RELEASING_KEYZ.3@ -00 2CAC DL_PRE -00 2CCC PRE_SCREEN -00 2DEC PRE_SCREEN_END -00 2DEC LEET_SPEEK1 -00 2E06 LEET_SPEEK2 -00 2E20 LEET_SPEEK3 -00 2E3A LEET_SPEEK4 -00 2E54 LEET_SPEEKS_L -00 2E58 LEET_SPEEKS_H -00 2E5C LEET_SCREEN -00 2F7C LEET_SCREEN_END +00 2000 PLAYER +00 00E0 SONG_START_PTR +00 00E2 SONG_END_PTR +00 00E4 CHN_COPY +00 00ED CHN_POS +00 00F6 BPTR +00 00F8 CUR_POS +00 00F9 CHN_BITS +00 00FA BIT_DATA +00 2003 INIT_SONG +00 2006 INIT_SONG.0@ +00 2040 INIT_SONG.CLEAR +00 2048 INIT_SONG.CBUF +00 2056 PLAY_FRAME +00 2062 PLAY_FRAME.CHN_LOOP +00 2074 PLAY_FRAME.GOT_BIT +00 2080 PLAY_FRAME.DO_COPY_BYTE +00 2088 PLAY_FRAME.STORE +00 208F PLAY_FRAME.SKIP_CHN +00 2096 PLAY_FRAME.CHECK_END_SONG +00 20A8 GET_BYTE +00 20A9 SONG_PTR +00 2100 BUFFERS +00 2C00 START1 +00 2C27 LEET_ANIM +00 2C50 1@ +00 2C74 NEXT_LETTER +00 2C93 LEET_END +00 2C9A WAIT_FOR_RELEASING_KEYZ +00 2C9A WAIT_FOR_RELEASING_KEYZ.2@ +00 2CA1 WAIT_FOR_RELEASING_KEYZ.3@ +00 2CAC WAIT_FOR_RELEASING_KEYZ.4@ +00 2CB2 DL_PRE +00 2CD2 PRE_SCREEN +00 2DF2 PRE_SCREEN_END +00 2DF2 LEET_SPEEK1 +00 2E0C LEET_SPEEK2 +00 2E26 LEET_SPEEK3 +00 2E40 LEET_SPEEK4 +00 2E5A LEET_SPEEKS_L +00 2E5E LEET_SPEEKS_H +00 2E62 LEET_SCREEN +00 2F82 LEET_SCREEN_END +00 2F82 PLAYMUSIC +00 2F9F STOPMUSIC +00 2FA9 VBLINTERRUPT +00 3000 MUSIC_DATA +00 357F MUSIC_DATA_END 00 3000 SCREEN 00 3410 DL 00 343C START 00 3482 PLEASE_WAIT_LOOP -00 3498 4@ +00 3498 5@ 00 3499 SAMPLE_LOAD -00 34FA 5@ +00 34FA 6@ 00 3504 EXIT_TECH_DIFF -00 3504 6@ -00 350B 7@ -00 3516 8@ +00 3504 7@ +00 350B 8@ +00 3516 9@ 00 352A SAMPLE1 00 4896 SAMPLE_END1 00 4896 SAMPLE2 diff --git a/intro/tech_diff.lst b/intro/tech_diff.lst index c215819..4f8a958 100644 --- a/intro/tech_diff.lst +++ b/intro/tech_diff.lst @@ -931,157 +931,387 @@ Source: MACRO.ASM 186 mva #3 SKSTAT 187 .ENDM 14 ;--------------------------------------------------- - 15 ; BASIC off - 16 ORG $2700 - 17 FFFF> 2700-295B> A9 FF + mva #$ff portb - 18 2705 A9 AC 8D 30 02 A9 + mwa #DL_pre dlptrs - 19 270F A9 21 lda #@dmactl(narrow|dma) ; narrow screen width, DL on - 20 2711 8D 2F 02 sta dmactls - 21 2714 A9 00 8D C6 02 mva #0 COLOR2 - 22 2719 8D 1A D0 sta COLBAK - 23 271C A9 0F 8D C5 02 mva #15 COLOR1 - 24 2721 20 94 27 jsr wait_for_releasing_keyz - 25 - 26 2724 leet_anim - 27 ; test for going further - 28 2724 AD 1F D0 lda CONSOL - 29 2727 C9 07 cmp #7 - 30 2729 D0 65 bne leet_end - 31 ; check keyboard - 32 272B AD 0F D2 lda SKSTAT - 33 272E C9 F7 cmp #$f7 ; SHIFT - 34 2730 F0 5E beq leet_end - 35 2732 C9 FF cmp #$ff - 36 2734 D0 5A bne leet_end - 37 2736 AD 10 D0 lda TRIG0 - 38 2739 F0 55 beq leet_end - 39 - 40 - 41 273B A9 CC 85 80 A9 27 + mwa #pre_screen temp_w - 42 2743 A9 5C 85 85 A9 29 + mwa #leet_screen temp_w3 - 43 274B A0 00 ldy #0 - 44 @ - 45 274D B1 80 lda (temp_w),y - 46 274F F0 20 beq next_letter ; ignore zeroes - 47 ;is the letter leetable? - 48 2751 C9 61 cmp #"a" - 49 2753 90 1C bcc next_letter - 50 2755 C9 7B cmp #"z"+1 - 51 2757 B0 18 bcs next_letter - 52 ;letter is leetable - 53 2759 F0 16 beq next_letter - 54 275B 38 sec - 55 275C E9 61 sbc #"a" - 56 275E A8 tay ;save the letter - 57 275F AD 0A D2 lda RANDOM - 58 2762 29 03 and #%00000011 ; 0-3 - 59 2764 AA tax - 60 2765 BD 54 29 lda leet_speeks_l,x - 61 2768 85 83 sta temp_w2 - 62 276A BD 58 29 lda leet_speeks_h,x - 63 276D 85 84 sta temp_w2+1 - 64 276F B1 83 lda (temp_w2),y - 65 2771 next_letter - 66 2771 A0 00 ldy #0 - 67 2773 91 85 sta (temp_w3),y - 68 2775 E6 80 D0 02 E6 81 inw temp_w - 69 277B E6 85 D0 02 E6 86 inw temp_w3 - 70 2781 A5 81 C9 28 D0 04 + cpw temp_w #pre_screen_end - 71 278B F0 97 beq leet_anim - 72 278D 4C 4D 27 jmp @- - 73 - 74 2790 leet_end - 75 2790 20 94 27 jsr wait_for_releasing_keyz - 76 2793 60 rts - 77 - 78 - 79 2794 .proc wait_for_releasing_keyz - 80 2794 AD 1F D0 @ lda CONSOL - 81 2797 C9 07 cmp #7 - 82 2799 D0 F9 bne @- - 83 ; check keyboard - 84 279B AD 0F D2 @ lda SKSTAT - 85 279E C9 F7 cmp #$f7 ; SHIFT - 86 27A0 F0 F9 beq @- - 87 27A2 C9 FF cmp #$ff - 88 27A4 D0 F5 bne @- - 89 27A6 AD 10 D0 @ lda TRIG0 - 90 27A9 F0 FB beq @- - 91 27AB 60 rts - 92 .endp - 93 - 94 27AC DL_pre - 95 27AC 70 70 70 70 70 70 + :8 .by SKIP8 - 96 27B4 42 .by LMS+MODE2 - 97 27B5 5C 29 .wo leet_screen - 98 27B7 00 02 .by SKIP1, MODE2 - 99 27B9 70 .by SKIP8 - 100 27BA 00 02 .by SKIP1, MODE2 - 101 27BC 70 .by SKIP8 - 102 27BD 00 02 00 02 00 02 + :6 .by SKIP1, MODE2 - 103 27C9 41 .by JVB - 104 27CA AC 27 .wo DL_pre - 105 27CC pre_screen - 106 ; 01234567890123456789012345678901" - 107 27CC 74 68 69 73 00 6C + dta "this little game was created in " - 108 27EC 00 66 6F 75 72 00 + dta " four evenings before SV2K24SE " - 109 280C 73 6F 72 72 79 00 + dta "sorry for technical difficulties" - 110 282C 63 6F 64 65 1A 00 + dta "code: " - 111 284C 00 00 00 00 00 00 + dta " pecus & pirx " - 112 286C 73 6F 75 6E 64 1A + dta "sound: " - 113 288C 00 00 00 00 00 00 + dta " alex, jochen hippel " - 114 28AC 67 66 78 1A 00 00 + dta "gfx: " - 115 28CC 00 00 00 00 00 00 + dta " alphabet, inc. " - 116 28EC pre_screen_end - 117 28EC leet_speek1 - 118 28EC 61 62 63 64 65 66 + dta "abcdefghijklmnopqrstuvwxyz" - 119 2906 leet_speek2 - 120 2906 21 22 23 24 25 26 + dta "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - 121 2920 leet_speek3 - 122 2920 14 06 3B 09 65 26 + dta "4&[)eF9-|jk_mn0p@r57uvw*y2" - 123 293A leet_speek4 - 124 293A 3E 62 08 1E 5B 41 + dta "^b(>",$5b,$41,"gh1",$4c+$80,"k",$4b+$80,"M\",$54,$49+$80,"q",$51,"5",$57,"uvwxy/" - 125 - 126 2954 leet_speeks_l - 127 2954 EC .by leet_speek1 - 133 2959 29 .by >leet_speek2 - 134 295A 29 .by >leet_speek3 - 135 295B 29 .by >leet_speek4 - 136 295C leet_screen - 137 = 295C .ds 32*9 - 138 2A7C leet_screen_end - 139 02E2-02E3> 00 20 ini $2000 - 140 ;--------------------------------------------------- + 15 org $2000 + 16 PLAYER + 17 icl '../music/playlzs16.asm' ; Music Player +Source: playlzs16.asm + 1 ; + 2 ; LZSS Compressed SAP player for 16 match bits + 3 ; -------------------------------------------- + 4 ; + 5 ; (c) 2020 DMSC + 6 ; Code under MIT license, see LICENSE file. + 7 ; + 8 ; This player uses: + 9 ; Match length: 8 bits (1 to 256) + 10 ; Match offset: 8 bits (1 to 256) + 11 ; Min length: 2 + 12 ; Total match bits: 16 bits + 13 ; + 14 ; Compress using: + 15 ; lzss -b 16 -o 8 -m 1 input.rsap test.lz12 + 16 ; + 17 ; Assemble this file with MADS assembler, the compressed song is expected in + 18 ; the `test.lz16` file at assembly time. + 19 ; + 20 ; The plater needs 256 bytes of buffer for each pokey register stored, for a + 21 ; full SAP file this is 2304 bytes. + 22 ; + 23 org $e0 + 24 + 25 = 00E0 song_start_ptr .ds 2 + 26 = 00E2 song_end_ptr .ds 2 + 27 = 00E4 chn_copy .ds 9 + 28 = 00ED chn_pos .ds 9 + 29 = 00F6 bptr .ds 2 + 30 = 00F8 cur_pos .ds 1 + 31 = 00F9 chn_bits .ds 1 + 32 + 33 = 00FA bit_data .ds 1 + 34 + 35 + 36 + 37 ;POKEY = $D200 + 38 + 39 org $2000 + 40 + 41 + 42 ;player + 43 FFFF> 2000-20B3> 4C 56 + jmp play_frame + 44 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + 45 ; Song Initialization - this runs in the first tick: + 46 ; + 47 2003 .proc init_song + 48 + 49 ;clear buffers + 50 2003 A9 00 lda #0 + 51 2005 AA tax + 52 @ + 53 2006 9D 00 21 9D 00 22 + :9 sta buffers+#*$100,x + 54 2021 E8 inx + 55 2022 D0 E2 bne @- + 56 + 57 2024 A9 01 85 FA mva #1 bit_data + 58 + 59 ; here initializes song pointer: + 60 2028 18 A5 E0 69 01 8D + adw song_start_ptr #1 song_ptr + 61 + 62 2037 A9 21 8D 4A 20 mva #>(buffers+255) cbuf+2 + 63 ; Init all channels: + 64 203C A2 08 ldx #8 + 65 203E A0 00 ldy #0 + 66 2040 clear + 67 ; Read just init value and store into buffer and POKEY + 68 2040 20 A8 20 jsr get_byte + 69 2043 9D 00 D2 sta POKEY, x + 70 2046 94 E4 sty chn_copy, x + 71 2048 cbuf + 72 2048 8D FF 21 sta buffers + 255 + 73 204B EE 4A 20 inc cbuf + 2 + 74 204E CA dex + 75 204F 10 EF bpl clear + 76 + 77 ; Initialize buffer pointer: + 78 2051 84 F6 sty bptr + 79 2053 84 F8 sty cur_pos + 80 2055 60 rts + 81 .endp + 82 + 83 + 84 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + 85 ; Play one frame of the song + 86 ; + 87 2056 .proc play_frame + 88 2056 A9 21 lda #>buffers + 89 2058 85 F7 sta bptr+1 + 90 + 91 205A A0 00 ldy #0 + 92 205C B1 E0 lda (song_start_ptr),y + 93 205E 85 F9 sta chn_bits + 94 2060 A2 08 ldx #8 + 95 + 96 ; Loop through all "channels", one for each POKEY register + 97 2062 chn_loop: + 98 2062 46 F9 lsr chn_bits + 99 2064 B0 29 bcs skip_chn ; C=1 : skip this channel + 100 + 101 2066 B5 E4 lda chn_copy, x ; Get status of this stream + 102 2068 D0 16 bne do_copy_byte ; If > 0 we are copying bytes + 103 + 104 ; We are decoding a new match/literal + 105 206A 46 FA lsr bit_data ; Get next bit + 106 206C D0 06 bne got_bit + 107 206E 20 A8 20 jsr get_byte ; Not enough bits, refill! + 108 2071 6A ror ; Extract a new bit and add a 1 at the high bit (from C set above) + 109 2072 85 FA sta bit_data ; + 110 2074 got_bit: + 111 2074 20 A8 20 jsr get_byte ; Always read a byte, it could mean "match size/offset" or "literal byte" + 112 2077 B0 0F bcs store ; Bit = 1 is "literal", bit = 0 is "match" + 113 + 114 2079 95 ED sta chn_pos, x ; Store in "copy pos" + 115 + 116 207B 20 A8 20 jsr get_byte + 117 207E 95 E4 sta chn_copy, x ; Store in "copy length" + 118 + 119 ; And start copying first byte + 120 2080 do_copy_byte: + 121 2080 D6 E4 dec chn_copy, x ; Decrease match length, increase match position + 122 2082 F6 ED inc chn_pos, x + 123 2084 B4 ED ldy chn_pos, x + 124 + 125 ; Now, read old data, jump to data store + 126 2086 B1 F6 lda (bptr), y + 127 + 128 2088 store: + 129 2088 A4 F8 ldy cur_pos + 130 208A 9D 00 D2 sta POKEY, x ; Store to output and buffer + 131 208D 91 F6 sta (bptr), y + 132 + 133 208F skip_chn: + 134 ; Increment channel buffer pointer + 135 208F E6 F7 inc bptr+1 + 136 + 137 2091 CA dex + 138 2092 10 CE bpl chn_loop ; Next channel + 139 + 140 2094 E6 F8 inc cur_pos 141 - 142 org $3000 - 143 3000 screen - 144 3000-98F4> FF FE FF F0 + ins 'difficulties.bmp',+62 - 145 3410 DL - 146 3410 70 70 70 70 70 70 + :13 .by SKIP8 - 147 341D 4F .by MODEF+LMS - 148 341E 00 30 .wo screen - 149 3420 0F 0F 0F 0F 0F 0F + :25 .by MODEF - 150 3439 41 .by JVB - 151 343A 10 34 .wo DL - 152 - 153 343C start - 154 343C A9 10 8D 30 02 A9 + mwa #DL dlptrs - 155 3446 A9 3E lda #@dmactl(standard|dma|players|missiles|lineX1) ; normal screen width, DL on, P/M on - 156 3448 8D 2F 02 sta dmactls - 157 344B A9 00 8D C6 02 mva #0 COLOR2 - 158 3450 8D 1A D0 sta COLBAK - 159 3453 A9 0F 8D C5 02 mva #15 COLOR1 - 160 3458 POKEY_INIT + 142 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + 143 ; Check for ending of song and jump to the next frame + 144 ; + 145 2096 check_end_song + 146 2096 AD AA 20 C5 E3 D0 + cpw song_ptr song_end_ptr + 147 20A2 90 03 20 03 20 scc:jsr init_song + 148 20A7 60 rts + 149 .endp + 150 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + 151 20A8 get_byte + 152 20A8 AD FF FF lda song_ptr: $ffff ;song_data+1 + 153 20AB EE A9 20 D0 03 EE + inw song_ptr + 154 20B3 60 rts + 155 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + 156 /* start + 157 mwa #song_data song_start_ptr + 158 mwa #song_end song_end_ptr + 159 jsr init_song + 160 @ + 161 lda:cmp:req 20 + 162 jsr player + 163 + 164 lda $d01f ;consol + 165 cmp #7 + 166 seq:jsr init_song + 167 + 168 jmp @- */ + 168 + 169 + 170 + 171 + 172 + 173 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + 174 20B4 .align $100 + 175 2100 buffers + 176 = 2100 .ds 256 * 9 + 177 + 178 ;song_data + 179 ; ins 'InGame.lzss' + 180 ;song_end + 181 + 182 + 183 ; run start + 184 + 18 ;--------------------------------------------------- + 19 ; BASIC off + 20 ORG $2c00 + 21 2C00 start1 + 22 2C00-2E61> A9 FF 8D 01 + mva #$ff portb + 23 2C05 A9 B2 8D 30 02 A9 + mwa #DL_pre dlptrs + 24 2C0F A9 21 lda #@dmactl(narrow|dma) ; narrow screen width, DL on + 25 2C11 8D 2F 02 sta dmactls + 26 2C14 A9 00 8D C6 02 mva #0 COLOR2 + 27 2C19 8D 1A D0 sta COLBAK + 28 2C1C A9 0F 8D C5 02 mva #15 COLOR1 + 29 2C21 20 9A 2C jsr wait_for_releasing_keyz + 30 2C24 20 82 2F jsr PlayMusic + 31 2C27 leet_anim + 32 ; test for going further + 33 2C27 AD 1F D0 lda CONSOL + 34 2C2A C9 07 cmp #7 + 35 2C2C D0 65 bne leet_end + 36 ; check keyboard + 37 2C2E AD 0F D2 lda SKSTAT + 38 2C31 C9 F7 cmp #$f7 ; SHIFT + 39 2C33 F0 5E beq leet_end + 40 2C35 C9 FF cmp #$ff + 41 2C37 D0 5A bne leet_end + 42 2C39 AD 10 D0 lda TRIG0 + 43 2C3C F0 55 beq leet_end + 44 + 45 + 46 2C3E A9 D2 85 80 A9 2C + mwa #pre_screen temp_w + 47 2C46 A9 62 85 85 A9 2E + mwa #leet_screen temp_w3 + 48 2C4E A0 00 ldy #0 + 49 @ + 50 2C50 B1 80 lda (temp_w),y + 51 2C52 F0 20 beq next_letter ; ignore zeroes + 52 ;is the letter leetable? + 53 2C54 C9 61 cmp #"a" + 54 2C56 90 1C bcc next_letter + 55 2C58 C9 7B cmp #"z"+1 + 56 2C5A B0 18 bcs next_letter + 57 ;letter is leetable + 58 2C5C F0 16 beq next_letter + 59 2C5E 38 sec + 60 2C5F E9 61 sbc #"a" + 61 2C61 A8 tay ;save the letter + 62 2C62 AD 0A D2 lda RANDOM + 63 2C65 29 03 and #%00000011 ; 0-3 + 64 2C67 AA tax + 65 2C68 BD 5A 2E lda leet_speeks_l,x + 66 2C6B 85 83 sta temp_w2 + 67 2C6D BD 5E 2E lda leet_speeks_h,x + 68 2C70 85 84 sta temp_w2+1 + 69 2C72 B1 83 lda (temp_w2),y + 70 2C74 next_letter + 71 2C74 A0 00 ldy #0 + 72 2C76 91 85 sta (temp_w3),y + 73 2C78 E6 80 D0 02 E6 81 inw temp_w + 74 2C7E E6 85 D0 02 E6 86 inw temp_w3 + 75 2C84 A5 81 C9 2D D0 04 + cpw temp_w #pre_screen_end + 76 2C8E F0 97 beq leet_anim + 77 2C90 4C 50 2C jmp @- + 78 + 79 2C93 leet_end + 80 2C93 20 9F 2F jsr StopMusic + 81 2C96 20 9A 2C jsr wait_for_releasing_keyz + 82 2C99 60 rts + 83 + 84 + 85 2C9A .proc wait_for_releasing_keyz + 86 2C9A AD 1F D0 @ lda CONSOL + 87 2C9D C9 07 cmp #7 + 88 2C9F D0 F9 bne @- + 89 ; check keyboard + 90 2CA1 AD 0F D2 @ lda SKSTAT + 91 2CA4 C9 F7 cmp #$f7 ; SHIFT + 92 2CA6 F0 F9 beq @- + 93 2CA8 C9 FF cmp #$ff + 94 2CAA D0 F5 bne @- + 95 2CAC AD 10 D0 @ lda TRIG0 + 96 2CAF F0 FB beq @- + 97 2CB1 60 rts + 98 .endp + 99 + 100 2CB2 DL_pre + 101 2CB2 70 70 70 70 70 70 + :8 .by SKIP8 + 102 2CBA 42 .by LMS+MODE2 + 103 2CBB 62 2E .wo leet_screen + 104 2CBD 00 02 .by SKIP1, MODE2 + 105 2CBF 70 .by SKIP8 + 106 2CC0 00 02 .by SKIP1, MODE2 + 107 2CC2 70 .by SKIP8 + 108 2CC3 00 02 00 02 00 02 + :6 .by SKIP1, MODE2 + 109 2CCF 41 .by JVB + 110 2CD0 B2 2C .wo DL_pre + 111 2CD2 pre_screen + 112 ; 01234567890123456789012345678901" + 113 2CD2 74 68 69 73 00 6C + dta "this little game was created in " + 114 2CF2 00 66 6F 75 72 00 + dta " four evenings before SV2K24SE " + 115 2D12 73 6F 72 72 79 00 + dta "sorry for technical difficulties" + 116 2D32 63 6F 64 65 1A 00 + dta "code: " + 117 2D52 00 00 00 00 00 00 + dta " pecus & pirx " + 118 2D72 73 6F 75 6E 64 1A + dta "sound: " + 119 2D92 00 00 00 00 00 00 + dta " alex, jochen hippel " + 120 2DB2 67 66 78 1A 00 00 + dta "gfx: " + 121 2DD2 00 00 00 00 00 00 + dta " alphabet, inc. " + 122 2DF2 pre_screen_end + 123 2DF2 leet_speek1 + 124 2DF2 61 62 63 64 65 66 + dta "abcdefghijklmnopqrstuvwxyz" + 125 2E0C leet_speek2 + 126 2E0C 21 22 23 24 25 26 + dta "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + 127 2E26 leet_speek3 + 128 2E26 14 18 3B 09 65 26 + dta "48[)eF9-|jk_mn0p@r57uvw*y2" + 129 2E40 leet_speek4 + 130 2E40 3E 62 08 1E 5B 41 + dta "^b(>",$5b,$41,"gh1",$4c+$80,"k",$4b+$80,"M\",$54,$49+$80,"q",$51,"5",$57,"uvwxy/" + 131 + 132 2E5A leet_speeks_l + 133 2E5A F2 .by leet_speek1 + 139 2E5F 2E .by >leet_speek2 + 140 2E60 2E .by >leet_speek3 + 141 2E61 2E .by >leet_speek4 + 142 2E62 leet_screen + 143 = 2E62 .ds 32*9 + 144 2F82 leet_screen_end + 145 ;-------------------------------------------------- + 146 2F82 .proc PlayMusic + 147 2F82-2FB1> A9 00 85 E0 + mwa #MUSIC_DATA song_start_ptr + 148 2F8A A9 7F 85 E2 A9 35 + mwa #MUSIC_DATA_END song_end_ptr + 149 2F92 20 03 20 jsr init_song + 150 2F95 VMAIN VBLinterrupt,7 ; jsr SetVBL +Macro: VMAIN [Source: MACRO.ASM] + 15 2F95 A0 A9 LDY # VBLINTERRUPT + 17 2F99 A9 07 LDA #7 + 18 2F9B 20 5C E4 JSR SETVBV +Source: tech_diff.asm + 151 2F9E 60 rts + 152 .endp + 153 2F9F .proc StopMusic + 154 2F9F VMAIN XITVBV,7 ; jsr SetVBL +Macro: VMAIN [Source: MACRO.ASM] + 15 2F9F A0 62 LDY # XITVBV + 17 2FA3 A9 07 LDA #7 + 18 2FA5 20 5C E4 JSR SETVBV +Source: tech_diff.asm + 155 2FA8 60 rts + 156 .endp + 157 2FA9 .proc VBLinterrupt + 158 2FA9 20 00 20 jsr PLAYER + 159 2FAC 68 pla + 160 2FAD A8 tay + 161 2FAE 68 pla + 162 2FAF AA tax + 163 2FB0 68 pla + 164 2FB1 40 rti + 165 .endp + 166 2FB2 .align $100 + 167 3000 MUSIC_DATA + 168 3000-357E> 00 04 88 00 + ins '../music/Title.lzss' ; title music + 169 357F MUSIC_DATA_END + 170 + 171 02E2-02E3> 00 2C ini start1 + 172 ;--------------------------------------------------- + 173 + 174 org $3000 + 175 3000 screen + 176 3000-98F4> FF FE FF F0 + ins 'difficulties.bmp',+62 + 177 3410 DL + 178 3410 70 70 70 70 70 70 + :13 .by SKIP8 + 179 341D 4F .by MODEF+LMS + 180 341E 00 30 .wo screen + 181 3420 0F 0F 0F 0F 0F 0F + :25 .by MODEF + 182 3439 41 .by JVB + 183 343A 10 34 .wo DL + 184 + 185 343C start + 186 343C A9 10 8D 30 02 A9 + mwa #DL dlptrs + 187 3446 A9 3E lda #@dmactl(standard|dma|players|missiles|lineX1) ; normal screen width, DL on, P/M on + 188 3448 8D 2F 02 sta dmactls + 189 344B A9 00 8D C6 02 mva #0 COLOR2 + 190 3450 8D 1A D0 sta COLBAK + 191 3453 A9 0F 8D C5 02 mva #15 COLOR1 + 192 3458 POKEY_INIT Macro: POKEY_INIT [Source: MACRO.ASM] 2 3458 A9 00 8D 08 D2 mva #0 AUDCTL 3 345D A9 03 8D 0F D2 mva #3 SKSTAT Source: tech_diff.asm - 161 3462 pause 3 + 193 3462 pause 3 Macro: PAUSE [Source: MACRO.ASM] 2 3462 A2 03 ldx #3 3 3464 ?PAUSELOOP @@ -1097,157 +1327,157 @@ Source: tech_diff.asm 5 3477 CA dex 6 3478 D0 EA bne ?PAUSELOOP Source: tech_diff.asm - 162 347A A9 00 lda #0 - 163 347C 8D 0E D4 sta $d40e ; NMI OFF - 164 347F 78 sei ; IRQ OFF - 165 - 166 - 167 ;-----playa-da-sampla----- - 168 3480 A2 00 ldx #0 - 169 - 170 3482 please_wait_loop - 171 3482 BD C9 98 lda samples_l,x - 172 3485 8D 99 34 sta sample_load - 173 3488 BD D4 98 lda samples_h,x - 174 348B 8D 9A 34 sta sample_load+1 - 175 - 176 348E BD DF 98 lda samples_end_l,x - 177 3491 85 80 sta temp_w - 178 3493 BD EA 98 lda samples_end_h,x - 179 3496 85 81 sta temp_w+1 - 180 - 181 @ - 182 3498 AD FF FF lda sample_load: $ffff - 183 349B A8 tay - 184 349C 38 sec - 185 349D 6A 6A 6A 6A :4 ror - 186 34A1 8D 01 D2 sta AUDC1 - 187 34A4 8D 03 D2 sta AUDC2 - 188 34A7 8D 05 D2 sta AUDC3 - 189 ;sta AUDC4 - 190 34AA 8D 0A D4 sta wsync ;------------ - 191 ; test for going further - 192 34AD AD 1F D0 lda CONSOL - 193 34B0 C9 07 cmp #7 - 194 34B2 D0 50 bne exit_tech_diff - 195 ; check keyboard - 196 34B4 AD 0F D2 lda SKSTAT - 197 34B7 C9 F7 cmp #$f7 ; SHIFT - 198 34B9 F0 49 beq exit_tech_diff - 199 34BB C9 FF cmp #$ff - 200 34BD D0 45 bne exit_tech_diff - 201 34BF 8D 0A D4 sta wsync ;------------ - 202 34C2 AD 10 D0 lda TRIG0 - 203 34C5 F0 3D beq exit_tech_diff - 204 34C7 8D 0A D4 sta wsync ;------------ - 205 - 206 34CA 98 tya - 207 34CB 29 0F and #$0F - 208 34CD 09 10 ora #$10 - 209 34CF 8D 01 D2 sta AUDC1 - 210 34D2 8D 03 D2 sta AUDC2 - 211 34D5 8D 05 D2 sta AUDC3 - 212 ;sta AUDC4 - 213 - 214 - 215 34D8 EE 99 34 D0 03 EE + inw sample_load - 216 34E0 8D 0A D4 sta wsync - 217 34E3 AD 9A 34 C5 81 D0 + cpw sample_load temp_w - 218 34EF 8D 0A D4 sta wsync - 219 34F2 F0 06 beq @+ - 220 34F4 8D 0A D4 sta wsync - 221 34F7 4C 98 34 jmp @- - 222 @ - 223 34FA E8 inx - 224 34FB E0 0B cpx #11 - 225 34FD D0 02 A2 01 sne:ldx #1 - 226 3501 4C 82 34 jmp please_wait_loop - 227 - 228 3504 exit_tech_diff - 229 ; wait for releasing keyz - 230 3504 AD 1F D0 @ lda CONSOL - 231 3507 C9 07 cmp #7 - 232 3509 D0 F9 bne @- - 233 ; check keyboard - 234 350B AD 0F D2 @ lda SKSTAT - 235 350E C9 F7 cmp #$f7 ; SHIFT - 236 3510 F0 F9 beq @- - 237 3512 C9 FF cmp #$ff - 238 3514 D0 F5 bne @- - 239 3516 AD 10 D0 @ lda TRIG0 - 240 3519 F0 FB beq @- - 241 - 242 ; - 243 351B A9 40 lda #$40 - 244 351D 8D 0E D4 sta $d40e ; NMI On - 245 3520 58 cli ; IRQ on - 246 3521 A9 00 8D 2F 02 mva #0 DMACTLS - 247 3526 8D 00 D4 sta dmactl - 248 3529 60 rts - 249 - 250 352A sample1 - 251 352A 57 77 77 77 77 77 + ins 'wait1.wav.bin' - 252 4896 sample_end1 - 253 4896 sample2 - 254 4896 43 33 33 33 33 33 + ins 'wait2.wav.bin' - 255 6B7B sample_end2 - 256 6B7B sample3 - 257 6B7B 32 22 22 22 22 22 + ins 'wait3.wav.bin' - 258 6E15 sample_end3 - 259 6E15 sample4 - 260 6E15 56 66 66 66 66 66 + ins 'wait4.wav.bin' - 261 70AF sample_end4 - 262 70AF sample5 - 263 70AF 57 67 67 67 67 67 + ins 'wait5.wav.bin' - 264 98C9 sample_end5 - 265 - 266 98C9 samples_l - 267 98C9 2A .by sample1 - 280 98D5 48 .by >sample2 - 281 98D6 6B .by >sample3 - 282 98D7 48 .by >sample2 - 283 98D8 6E .by >sample4 - 284 98D9 48 .by >sample2 - 285 98DA 70 .by >sample5 - 286 98DB 48 .by >sample2 - 287 98DC 6B .by >sample3 - 288 98DD 48 .by >sample2 - 289 98DE 6E .by >sample4 - 290 98DF samples_end_l - 291 98DF 96 .by sample_end1 - 304 98EB 6B .by >sample_end2 - 305 98EC 6E .by >sample_end3 - 306 98ED 6B .by >sample_end2 - 307 98EE 70 .by >sample_end4 - 308 98EF 6B .by >sample_end2 - 309 98F0 98 .by >sample_end5 - 310 98F1 6B .by >sample_end2 - 311 98F2 6E .by >sample_end3 - 312 98F3 6B .by >sample_end2 - 313 98F4 70 .by >sample_end4 - 314 98F5 finito - 315 02E2-02E3> 3C 34 ini start + 194 347A A9 00 lda #0 + 195 347C 8D 0E D4 sta $d40e ; NMI OFF + 196 347F 78 sei ; IRQ OFF + 197 + 198 + 199 ;-----playa-da-sampla----- + 200 3480 A2 00 ldx #0 + 201 + 202 3482 please_wait_loop + 203 3482 BD C9 98 lda samples_l,x + 204 3485 8D 99 34 sta sample_load + 205 3488 BD D4 98 lda samples_h,x + 206 348B 8D 9A 34 sta sample_load+1 + 207 + 208 348E BD DF 98 lda samples_end_l,x + 209 3491 85 80 sta temp_w + 210 3493 BD EA 98 lda samples_end_h,x + 211 3496 85 81 sta temp_w+1 + 212 + 213 @ + 214 3498 AD FF FF lda sample_load: $ffff + 215 349B A8 tay + 216 349C 38 sec + 217 349D 6A 6A 6A 6A :4 ror + 218 34A1 8D 01 D2 sta AUDC1 + 219 34A4 8D 03 D2 sta AUDC2 + 220 34A7 8D 05 D2 sta AUDC3 + 221 ;sta AUDC4 + 222 34AA 8D 0A D4 sta wsync ;------------ + 223 ; test for going further + 224 34AD AD 1F D0 lda CONSOL + 225 34B0 C9 07 cmp #7 + 226 34B2 D0 50 bne exit_tech_diff + 227 ; check keyboard + 228 34B4 AD 0F D2 lda SKSTAT + 229 34B7 C9 F7 cmp #$f7 ; SHIFT + 230 34B9 F0 49 beq exit_tech_diff + 231 34BB C9 FF cmp #$ff + 232 34BD D0 45 bne exit_tech_diff + 233 34BF 8D 0A D4 sta wsync ;------------ + 234 34C2 AD 10 D0 lda TRIG0 + 235 34C5 F0 3D beq exit_tech_diff + 236 34C7 8D 0A D4 sta wsync ;------------ + 237 + 238 34CA 98 tya + 239 34CB 29 0F and #$0F + 240 34CD 09 10 ora #$10 + 241 34CF 8D 01 D2 sta AUDC1 + 242 34D2 8D 03 D2 sta AUDC2 + 243 34D5 8D 05 D2 sta AUDC3 + 244 ;sta AUDC4 + 245 + 246 + 247 34D8 EE 99 34 D0 03 EE + inw sample_load + 248 34E0 8D 0A D4 sta wsync + 249 34E3 AD 9A 34 C5 81 D0 + cpw sample_load temp_w + 250 34EF 8D 0A D4 sta wsync + 251 34F2 F0 06 beq @+ + 252 34F4 8D 0A D4 sta wsync + 253 34F7 4C 98 34 jmp @- + 254 @ + 255 34FA E8 inx + 256 34FB E0 0B cpx #11 + 257 34FD D0 02 A2 01 sne:ldx #1 + 258 3501 4C 82 34 jmp please_wait_loop + 259 + 260 3504 exit_tech_diff + 261 ; wait for releasing keyz + 262 3504 AD 1F D0 @ lda CONSOL + 263 3507 C9 07 cmp #7 + 264 3509 D0 F9 bne @- + 265 ; check keyboard + 266 350B AD 0F D2 @ lda SKSTAT + 267 350E C9 F7 cmp #$f7 ; SHIFT + 268 3510 F0 F9 beq @- + 269 3512 C9 FF cmp #$ff + 270 3514 D0 F5 bne @- + 271 3516 AD 10 D0 @ lda TRIG0 + 272 3519 F0 FB beq @- + 273 + 274 ; + 275 351B A9 40 lda #$40 + 276 351D 8D 0E D4 sta $d40e ; NMI On + 277 3520 58 cli ; IRQ on + 278 3521 A9 00 8D 2F 02 mva #0 DMACTLS + 279 3526 8D 00 D4 sta dmactl + 280 3529 60 rts + 281 + 282 352A sample1 + 283 352A 57 77 77 77 77 77 + ins 'wait1.wav.bin' + 284 4896 sample_end1 + 285 4896 sample2 + 286 4896 43 33 33 33 33 33 + ins 'wait2.wav.bin' + 287 6B7B sample_end2 + 288 6B7B sample3 + 289 6B7B 32 22 22 22 22 22 + ins 'wait3.wav.bin' + 290 6E15 sample_end3 + 291 6E15 sample4 + 292 6E15 56 66 66 66 66 66 + ins 'wait4.wav.bin' + 293 70AF sample_end4 + 294 70AF sample5 + 295 70AF 57 67 67 67 67 67 + ins 'wait5.wav.bin' + 296 98C9 sample_end5 + 297 + 298 98C9 samples_l + 299 98C9 2A .by sample1 + 312 98D5 48 .by >sample2 + 313 98D6 6B .by >sample3 + 314 98D7 48 .by >sample2 + 315 98D8 6E .by >sample4 + 316 98D9 48 .by >sample2 + 317 98DA 70 .by >sample5 + 318 98DB 48 .by >sample2 + 319 98DC 6B .by >sample3 + 320 98DD 48 .by >sample2 + 321 98DE 6E .by >sample4 + 322 98DF samples_end_l + 323 98DF 96 .by sample_end1 + 336 98EB 6B .by >sample_end2 + 337 98EC 6E .by >sample_end3 + 338 98ED 6B .by >sample_end2 + 339 98EE 70 .by >sample_end4 + 340 98EF 6B .by >sample_end2 + 341 98F0 98 .by >sample_end5 + 342 98F1 6B .by >sample_end2 + 343 98F2 6E .by >sample_end3 + 344 98F3 6B .by >sample_end2 + 345 98F4 70 .by >sample_end4 + 346 98F5 finito + 347 02E2-02E3> 3C 34 ini start diff --git a/intro/tech_diff.xex b/intro/tech_diff.xex index e1f68885601e51b15503f6f96647a7c7211d26c1..9be7ad10f30f2fb2c808c9265f3f58d4dd698052 100644 GIT binary patch delta 1835 zcmY+Ee^3~<+xLR~ zqwllx?*8%4?(=;1Gv9xV>;8U6=hrkKe=L{3CaWM80=XgZR0upB0(l|uObA#*;5#9( zDg^TXnY^v)ltpvztv7V-s@(g<8=yTVtGVr^a+q`hxlay(t4F5VwcOcKc|@9PnQwVe zrRFLNU10E*@^zSazWy*jK9$V!EGBt&dXKWm_76>-_h#7ry{Yl3`I+C$49@pFVDC9R zKfN#_U73C`5R)(5N$Lkw`NHjYpbX`z0Zp4#poXMI=tfB)(>oQ zpkUz1WCACv2TWHJ3-`7sw4`@HO5WS7UR9b@o6@ZAJY1H$)@xS|eY)MQvdHWwE@ufm+mvI5eoX_6i{J|n))dfPF)&NW7qzy^+m5=iuO!iq@2)w^8$$f zNf`!z41hm0Q||Yl`vFKpY3Qvq)Yf*QwKW)2c*3XE7$~Wrq*}zOq7Fcb=-|zwnG($* z5|O-H>9q=0VK1L)$J_jsm0s`Gty`=lM_pqnJ5dJ?WCk*WX3LhE>VHRsh;Z;Ue!Zrqy0d!s?p-43 zVEs11`~D#~WEz5{#!_RD963#bWbC4O)ITna3zz+4W22)ZBZ(jZLDtT4X{65ALBMHZ zkvmAek4lWKq-hs5ZKGQhL?OfU;zsu9cDYL2uD?E>{djid8Qi-D_mmeprLrPe1UJ3( zJbWGkQ4%E&s52KiiX0x>{*5(1aewc*M%W0yzdqoHAOJ-qq9WAzToDSgwqT|AC_D;} zqvPlbD-b4Oa+KAgadAb2M98k!Hh%&?fmA9l)1(JO!jO=W_i}l8Sy^#u=?{j?Wu?RB zL_tNOU^eqhJh$@X3=V&Vf43+t>bt?2LJHbu00k5M6!*vPYO4R#rKP^uwTE-j=yi?b zdM0%*bl;qafH)7Sx!$b+9tQw3rE>x_XQfOrz|1FCW(3kJQl5zLQ%S@o@z9D4&Uj8} zF+9elxv7KvE6b!g6l{jP9^H71gWQ?UCrJOXVYRz27L7l}oqu{XqStTFp~%0^3iDB$ zl~80&x7o2FhZ0+p=5w03pLsx$quB8TUUSB_`q|Yl3%#3h53EE%5VnN;Zp7sxX=Og=Ja{R*cc| zi~IIy4uZ3l$z@zAS~u*Z^H_JxkQYDSJgV38Y=V4bm8|JIUiB96BB8!bn$P_Le}wr2 zN{SupU*etSisrJ{c~NTo21^~;ox8&iQ&gzrJ!I-Io~ZP0-LmypJb{~@b>r}H)O+0A zo5uMgC_SQsrx7JljR1HSWl|EzDb{e|uqpM~U!=%=w{Wdv?G*zskRfz~<+sR=Gk9c! z9ck>()n%rT{j#16`WCo(VnJ`WE^+9yR;p39Ca7?CY45`*x1@1`j**(1XwGV5a9UUH z2>LUW0E1KgesDZOoOjJon=ZYM=Ds3I8h+;pk+&SM5w9Wy=&Hp zL?(n^!$a^sDm5lhG9RTN1j*>QFg6NPF_9XcAz)KW6n9_?w7}Ne+#L?sKCb1o+W!K# Cc$y~w delta 158 zcmccfnDO~FM(_Xs8FZrcR{rm0yu5NvuL09aonAwxm5ROkOe-0Bk1_R1U0BKAdz49G ziq2a33n$qxq^{+^bn^R$xRd`cM6DIL@F8^NnbwAtI<1W>VwKngKn5@ev z$MNRFbRS|(buffers+255) cbuf+1 ;clear buffers lda #0 tax @@ -60,6 +59,7 @@ player ; here initializes song pointer: adw song_start_ptr #1 song_ptr + mva #>(buffers+255) cbuf+2 ; Init all channels: ldx #8 ldy #0 @@ -153,7 +153,7 @@ get_byte inw song_ptr rts ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -start +/* start mwa #song_data song_start_ptr mwa #song_end song_end_ptr jsr init_song @@ -165,7 +165,7 @@ start cmp #7 seq:jsr init_song - jmp @- + jmp @- */ @@ -175,10 +175,10 @@ start buffers .ds 256 * 9 -song_data - ins 'InGame.lzss' -song_end +;song_data +; ins 'InGame.lzss' +;song_end - run start +; run start diff --git a/music/playlzs16.obx b/music/playlzs16.xex similarity index 95% rename from music/playlzs16.obx rename to music/playlzs16.xex index 776c135fe32c8c54ab223850a2cdc696bd15840c..93e0427ce8dd2a0e88aeceeeaeffdcd24b11a007 100644 GIT binary patch delta 25 hcmdliu~~xS|9=LBI|@Ew6M0QpRx0*-ZFKy^4FG|*3BmvX delta 25 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 delta 5920 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