From a3fa44cfb56ada614b06525b3976aad7be1543d5 Mon Sep 17 00:00:00 2001 From: AArt1256 Date: Mon, 17 Nov 2025 13:20:59 +0300 Subject: [PATCH] tower beam almost done --- loader/samples/minexample/Makefile | 1 + loader/samples/minexample/conv_zx0.sh | 5 +- loader/samples/minexample/minexample.s | 277 ++++++++++++------- loader/samples/minexample/tower_beam.bin | Bin 0 -> 28808 bytes loader/samples/minexample/tower_beam.zx0 | Bin 0 -> 5330 bytes loader/samples/minexample/tower_beam.zx0.prg | Bin 0 -> 5332 bytes 6 files changed, 184 insertions(+), 99 deletions(-) create mode 100644 loader/samples/minexample/tower_beam.bin create mode 100644 loader/samples/minexample/tower_beam.zx0 create mode 100644 loader/samples/minexample/tower_beam.zx0.prg diff --git a/loader/samples/minexample/Makefile b/loader/samples/minexample/Makefile index 09c063b..b1140a9 100644 --- a/loader/samples/minexample/Makefile +++ b/loader/samples/minexample/Makefile @@ -168,6 +168,7 @@ $(DISKIMAGE): $(ASSEMBLE) $(CC1541) -f "scrmap" -w tilemap.bin.lz \ -f "intrbmp" -w title_320-prepared.zx0.prg \ -f "tower" -w tower.zx0.prg \ + -f "towerbm" -w tower_beam.zx0.prg \ $@ diff --git a/loader/samples/minexample/conv_zx0.sh b/loader/samples/minexample/conv_zx0.sh index f419899..c3f41f8 100644 --- a/loader/samples/minexample/conv_zx0.sh +++ b/loader/samples/minexample/conv_zx0.sh @@ -7,4 +7,7 @@ printf "\x00\x80" > title_320-prepared.zx0.prg cat title_320-prepared.zx0 >> title_320-prepared.zx0.prg zx02/zx02 tower.bin tower.zx0 printf "\x00\x80" > tower.zx0.prg -cat tower.zx0 >> tower.zx0.prg \ No newline at end of file +cat tower.zx0 >> tower.zx0.prg +zx02/zx02 tower_beam.bin tower_beam.zx0 +printf "\x00\x80" > tower_beam.zx0.prg +cat tower_beam.zx0 >> tower_beam.zx0.prg \ No newline at end of file diff --git a/loader/samples/minexample/minexample.s b/loader/samples/minexample/minexample.s index 710e064..fc34fe0 100644 --- a/loader/samples/minexample/minexample.s +++ b/loader/samples/minexample/minexample.s @@ -180,7 +180,146 @@ code_start: ;sta frame_delay ;jsr wait_loop -/* + ;jsr intro + + lda #$0b + sta $d011 + + sei + ldx #introname + jsr loadraw + + lda #0 + sta ZX0_src + lda #$80 + sta ZX0_src+1 + lda #0 + sta ZX0_dst + lda #$10 + jsr zx02 + + ldx #sidname + jsr loadraw + + ldx #towername + jsr loadraw + + lda #fake_kernal_irq + sta $ffff + + lda #1 + sta $d01a + + jsr run_nufli_bmp + sei + jsr init_2x + lda #$0b + sta $d011 + + jsr clr_txt + ldx #story_writ + jsr write_txt3 + ldx #$30 + ldy #$01 + jsr init_timer + lda #1 + sta timer_mode + + lda #0 + sta ZX0_src + lda #$80 + sta ZX0_src+1 + lda #0 + sta ZX0_dst + lda #$20 + jsr zx02 + +: + lda timer_reached + beq :- + + ldx #$b8 + ldy #$01 + jsr init_timer + lda #2 + sta timer_mode +: + lda timer_reached + beq :- + + jsr init_bmp + + lda #0 + sta vbl + + lda #$11 + sta frame_until + jsr wait_frame_until_2x + + ldx #$6c +: + jsr wait_frame + jsr wait_frame + dex + bpl :- + + lda #$0b + sta $d011 + + jsr clr_txt + ldx #scenario_writ + jsr write_txt2 + ldx #$80 + ldy #$01 + jsr init_timer + lda #1 + sta timer_mode + + ldx #towerbeamname + jsr loadraw + lda #0 + sta ZX0_src + lda #$80 + sta ZX0_src+1 + lda #0 + sta ZX0_dst + lda #$20 + jsr zx02 + +: + lda timer_reached + beq :- + + ldx #$90 + ldy #$01 + jsr init_timer + lda #2 + sta timer_mode +: + lda timer_reached + beq :- + + jsr init_bmp + + lda #0 + sta vbl + + lda #$1f + sta frame_until + jsr wait_frame_until_2x + + jmp * + + +intro: lda #0 jsr sfx_init @@ -245,103 +384,7 @@ code_start: lda #120 sta frame_delay jsr wait_loop -*/ - - lda #$0b - sta $d011 - - sei - ldx #introname - jsr loadraw - - lda #0 - sta ZX0_src - lda #$80 - sta ZX0_src+1 - lda #0 - sta ZX0_dst - lda #$10 - jsr zx02 - - ldx #sidname - jsr loadraw - - ldx #towername - jsr loadraw - - lda #fake_kernal_irq - sta $ffff - - lda #1 - sta $d01a - - jsr run_nufli_bmp - sei - jsr init_2x - lda #$0b - sta $d011 - ;ldx #3 -;: - ;jsr wait_frame - ;dex - ;bpl :- - jsr clr_txt - ldx #story_writ - jsr write_txt3 - ldx #$30 - ldy #$01 - jsr init_timer - lda #1 - sta timer_mode - - lda #0 - sta ZX0_src - lda #$80 - sta ZX0_src+1 - lda #0 - sta ZX0_dst - lda #$20 - jsr zx02 - -: - lda timer_reached - beq :- - - ldx #$b8 - ldy #$01 - jsr init_timer - lda #2 - sta timer_mode -: - lda timer_reached - beq :- - - jsr init_bmp - - lda #0 - sta vbl - - lda #$11 - sta frame_until - jsr wait_frame_until_2x - - ldx #$6c -: - jsr wait_frame - jsr wait_frame - dex - bpl :- - - lda #$0b - sta $d011 - jmp * - + rts wait_frame: @loop: @@ -365,6 +408,13 @@ story_writ: .byte "tomoo yamane" .res 40-(12+11+5), ' ' +scenario_writ: +.res (40-24)/2, ' ' +.byte " scenario written by " +.res (40-24)/2, ' ' +.res (40-24)/2, ' ' +.byte " tomoyoshi miyazaki" +.res (40-24)/2, ' ' clr_txt: lda #$80 @@ -846,6 +896,7 @@ fontname: .byte "font",0 sidname: .byte "sid", 0 introname: .byte "intrbmp", 0 towername: .byte "tower", 0 +towerbeamname: .byte "towerbm", 0 darmtower_txt: .res (40-26)/2, ' ' @@ -904,6 +955,36 @@ write_txt3: bne :- rts +write_txt2: + stx text_ptr + sty text_ptr+1 + + ldx #0 + ldy #0 +: + lda (text_ptr), y + sec + sbc #$20 + ora #$80 + sta $400+11*40, x + iny + inx + cpx #40 + bne :- + + ldx #0 +: + lda (text_ptr), y + sec + sbc #$20 + ora #$80 + sta $400+13*40, x + iny + inx + cpx #40 + bne :- + rts + upload_text: lda #$34 sta $01 diff --git a/loader/samples/minexample/tower_beam.bin b/loader/samples/minexample/tower_beam.bin new file mode 100644 index 0000000000000000000000000000000000000000..e376ad6600178ec5d2f9d5ce85287cc9318e5935 GIT binary patch literal 28808 zcmeG^4OmlGmhZir1RjqE87!eTQgnB^1~~23E&*#HsSt z@uyKp#&*7K?e6&VO^~fv+-@UH7!2DMQB;U_XJ;7Nk^Ga9PE4d-FMFYIq%$a&OP^}3=@Yq2jU!vbKtXa!1+1DXB)*Am+Et7pYw~$ ziO)9jIR8Ey-()JMv&fjE*Xt!d8Y6dS(FA<8)Ax2t=YSi~IpC_-%kADScRFdk%_iMH zc`b@mN!3yVx!v34E^~!43?6K9#fZBB zmpFheo!-W|+%9~R=ZUNs42Q!KOCtBkGu*;YJdv9_Fc9jWK6}obgoKPa5&Qtfr+9_} z#53RpKyLSTxxVEAjOwU}$JaZufS% zw|VO9H8nNcf~W-bdJnzo^%es_PEJmzPUp5-nSBvu{b@MZwL>8R=N z@4wj}yj}Pv&of=W>8YwG4;Wq5d-64!X=xx+LC@e|lhe7y@`Ei~WX3TZ{2|P7%@Stu zFGloWfd^%9aL}W_d9$;_Xk2QfNVm}?ukMK__AU8tdg8r_f0IPEaZOFOeU*FnzOtpb zm~q$Ex<|7DR3H&JLW01zrlzJv)N+TzZAHeuf$mV~!_oL(_UEpLMe%FmH&VGoE-^7F zk!fo?J>%-{hPvEtEBv`X!9SEkkVN3~F<8d4XM1oJ>sPMo8!%@V}BGI7C!qw&7% z&%#~bTs|#xWz{3=f2LTxbLW5W)Ei1m4;{&27;AUqjfJOR{<^mw{bmXBL2YBQDL*_ z{o}Xi_jQb&YcXyI7skn7>)e(;t6z=e9s_%_3Gf8^o~PL3pbCPZR5JK)9HhU-S6rdu-xzu(2^UpNiQA`q zE9NnZ!g*EikNsk5qJoX$MN3>Ee;+HK4Eq`RY}n6m`;wkuF`$4)o_+>P2wsNs3R~z4 zh!*BtN|vf^={*cLReX(=52<>Hd`#6$NMXu5tbF>?Oyu*IW+I=!^b&4gYCkI&rlx%tUPvKfc#H&v0i|%#k2yKk*(`9c-(iDbu@ti7hl6(4 z3HeR>VNQ-!@q!$!x=!SH)d`;MOK;@lFx6F_Bxd+HIXc4+$7fFPa)gHC$=nP-?F|Dn zJR^r@CZ~ERpH{9)C+wy>Q;8gNxXQCH-1!wEha7&zGhdJJH%Fh7W6JS~a8e3jxBDdi z78FQ_fIY;13>cY^k@_y-kiQVK?ekt3=&u0&3JEHWkWe9UwcqP){hxksYXwOl9G4^{ za213gS6i*G;X8Q2v5Ewaks@J*+KK*FBL zN@tm=%-XdUGk|d?G)k#~0t?lyCK#2%ddCiKQTT&S)49ChEM(|9F*dX{17+TOur6=Wo2s2<}grOAX{Fe)Gm4-Iw01aIEFe8F!2 zrF{uexYG}D*Vf*=nf=Fi7R^#B(iLA(a*NqLjKxxvy>`u-rz^?P+FHh4Tqr7i$Q(Wd?ZGL=qK{y{*mk&wB{q9szb66x~V)t8GHC)6^(1n;dAuo)?s9832(Fiq4uQWfp0D4ldO~H64ku> z-kY?b%aqT*9r!`=$#v^iBfIjD}^700Kv(GoM)!t`Zh z9mDju&y(tyl=XUA>M}gCFqqBH6H_Xfo7F=S;vX-0|Gdsbd@ID8^ORbn(3 zAvk^F{u)O$%(9xIfY|Hxy^_#7yF(vezV^}0_fU3Ru8VD{$E9U%wYsSQRR}B!#=XwB z_T>M^GW&Fa!*96X{QB$JufA~abb)?DvY6c=P?m8gPO#kZN0!eNCZ|oFd{=JK@|g@l zek4qvzccOrm-F+4tquQ}xNZ6JXYz#Q&gx^wezMV#CooDyExvSnV8pa#A6)KeBqUS5Gugtwly(_QU8v1Db?=79!$qT-COnYL$u zN3U35F!VTA=PdJygX@DH=cSc^0x$G+@E>ps_3NsYcKd&R)OYh;^8N2`hXd^D?Y$HQ zWz9>tAEms@Zr>hR|KiD$(g}AjVRacFa*_zW0wTnaB%R^~`UOAz0)`b`6izEzfzJqn zI2Ja~i{kWqW_(L47Q%wI0*W>UPp~R$$D)dB>1U)1*`6>*$^WZ%qrGPH^f2Um9#NVU`;7p1RqD(UN<_x0i1+8G>4I>xmUN_RiaWSt|l95&{!b zk_7sNV+RCwl)=eq#S81(PA|>f@_|DPj^ABgzH`(0t*{_AhJW#k^75C<&XR{7y4-WN{o|68;^IdN z3$xFh>i3IVJTp@Wj4G2@y`=`vLIFMnbkql5HmH_HYo&5JKjqg_msC{1hn`&r0;MGj zK^RP%yuh5?AHI{ElERTGVp0P-EkP?Jbu# zP7y&46wg2Z{Eq*PPK^O!pr9pGNTCdJx+yh)LPMpdg)uBGb|X$?d{|_FUGy%9zx&$xqnn%cw^h3{vhG>r7ax7JI{yznJ>P2)QvslF z9wfVPVACe>XHSD*(^13H_@zH^{qTZ^@6(E`GBw=Tc%*tS2UcANn$z0CC(obsRHSpl z2)xVHbK`7>@dtake_DFuMsKg{rAp5I&dG;PZ2jr+v;6e*P(vuR;M-mNi!Z*|+{_>5 z&%z3kK+AyKmsk9F?dq;b*EoQbRM6D$tQFs%a&-U2r?20bBD%q3gErPd=bP@>&VkC8 zhRWaDU30j-?pjqd*U;E$%E?MYrpO`#x&$TS2- zymFUX;Y~?29nBfW63m;J|?^S=@(^-Qg}Qw9X{h^9%r3-Bf#k`WK&hX8DS> zD^{$?$ckJj}wI5V+C`>R<=)7yuf(Lp!0)Z~<9461WVdevxE^wv*37`3wXYu?` zUwk!bCfWY;{YQ_!Tz*C?hObpUQ1!2_hRGa$DPWkD=dk1Z0JI|N3tR*OQ=FZfYs@|K zzE=F;gZ`%jtF_unuJsf;cs)IpTp;lDL#8!>0DML_1IiUBc%r*Akt_lxiVOJ%Gx`5o zv2NXS&%OO-Ccoh83l@BPp!+<}v4wXgg9ZVpsHo72isCy{$omvdgGsnMD@6s)B3sEF zXgv5{wob=Xau=#TYF(V1nN`UpZ<;(O@=3vpFv@w~+Ff?K!vw0{`P;;8=gk9$v_ zvwC&!6~i8wfzDHM?copexKnrh-3tTH&2Ma{A7yGcvybOapFUl-8z8c9_&_)h-!=@r zJHpQ(BrNk0oid?`Nq05bYA2O#quMcGEA_;r2gTx^%r~_3F)= zH~R?8vFw$~$~`{Ve0eB>7fKSuQbg;h{~#w^(~fA$wbUifPcAuN%tqKuLITr9A8BuI z9~?YZXUC4lYd-px`VZ2h!RaGXZgM#6XKh#ssj_}4mVw(2VuFs$&IY58)Ymv%u;p~n zjvxiR?pZ8#(`0ZcnPG%L4iq?6TB7~~wy8H*!fF&{2%Ln&&}FraX14f99lS(8-A6XA zmv`|sRVV2#{y4!cz+gBW=q0vQu)UyodVO0DZYh0)CiS{PP>O!2S(OGv7!-U z;f+-n@gL+)$3hvaZu~gMSQODZxi5yH{zLQ;cliiou=r1imP9)mRf6=&TlpP5~cXlLoiX=*a0cvkGEE8=YTDsLJO_YNA579?CL2HI` z{1{G@B3k!HyeEU}eD! zX$a5)pkuNBAVOoK)Bu`F4e97WSEHy~LzHJ!XPNqXwB3jd7leR@G)mB*BIuvM5DubI zMMV!j08xNf$Kt5b{m>BD1+4{mRzn&Z8eRry(2!Tk4mQAC!0r-^t{?o^|KyWTmRfv( zvJv1~mmhp1j|WsLSP&Wl%Br9g zlI4n!Qd;T9C|=2OQChZ7efMzIyP9w@5oWzwGEk7_ttRZ;w8sEX%I=;*6c|#Llbh2? zkanW?sO1R)g`DD?Mif7q^mIg7VbEXBah@EpVR}H8^PJU$Mw8{V-^T?x@pl)Fg{JGHZ`0GNJ+5Js5;|3S5i`X|KpG4tlyOkyBqk^ z>2@(>e#S+vyZh3G3l|=IFpKw4zB~;l3~~Z!x)dOm^C5Q$az-T3Vt_a!LqJUiBal-c z)A{buzqBq+oUFAa(*UuY6KE6UtU#L}=LOmz=p$tYmf^`7%?+d_njL797CYnzN_7lm z2+|VG5wtOKmLSwg%0OCR=w`$6J$(3ZjY~t;Ae5Gt;wHglDkvz(rzIl*`1nx@Wx4WA z2DbCA1F$Srq!hf;&9J021TJ|9)H}y8Gc5cVGE@P$l5r=YBKc<#y1Fz3D3+BB4h~AL zJQAp4$fyd4w$jxFKSHS7U9SO|xOVO1k3aSg_hI)lR0T-G$v64PxpU{hfgS0=QWan_ znvEMkGxolQxS7a&6vxr&!!v>}YY zy&byJ5ZL(C!8R-yI}-(RD>{BuxUf!O{D5~2fx530LB%MLM^LVIQr4ovM9>hJC_r>; zb3j&(QHIuB2Dr3pm4&oWdJp~5DelR>wIvi1>Ay>b{CnAph@ZYs~t7I z7-b8Q06bF#tAoM<0)|!xVfc%I_|elf93OKz4!Z&%l|w_J z(9qDDD-k&kfYAkMJwnA5#CvE6UZ5NwhI#~~C>>g}<_bza%CW&T%Ys22j7{u9O|Za}Cf;B1P`X^9(<*lAGA>%ucKUa!ld_!&t23?!a~70*T=Cma3$0oDpl@&Et; literal 0 HcmV?d00001 diff --git a/loader/samples/minexample/tower_beam.zx0 b/loader/samples/minexample/tower_beam.zx0 new file mode 100644 index 0000000000000000000000000000000000000000..a7a00b9f7635d4a445881b114050a1b6161cd425 GIT binary patch literal 5330 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 ZP8G#SJH#>4NGxVyBu4uG<^JY#{{v*wxoQ9a literal 0 HcmV?d00001 diff --git a/loader/samples/minexample/tower_beam.zx0.prg b/loader/samples/minexample/tower_beam.zx0.prg new file mode 100644 index 0000000000000000000000000000000000000000..b5711e4a740e4c1d36dbe44740b2a2085e71e487 GIT binary patch literal 5332 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 bn9`}D7-@$%MjDC5ER4iR|G(VdeC~e$&g!}9 literal 0 HcmV?d00001