From 937bea7699fb2e6979000e26cb230a0d4abbc0dc Mon Sep 17 00:00:00 2001 From: Natt Akuma Date: Wed, 26 Nov 2025 00:03:50 +0700 Subject: [PATCH] Add clouds part --- assets/clouds.png | Bin 0 -> 2167 bytes assets/clouds.prg | Bin 0 -> 10003 bytes assets/clouds_sprites.png | Bin 0 -> 1597 bytes assets/clouds_sprites.prg | Bin 0 -> 1026 bytes loader/samples/minexample/Makefile | 4 +- loader/samples/minexample/clouds.bin | Bin 0 -> 10001 bytes loader/samples/minexample/minexample.s | 135 ++++++++++++++++++++++--- 7 files changed, 123 insertions(+), 16 deletions(-) create mode 100644 assets/clouds.png create mode 100644 assets/clouds.prg create mode 100644 assets/clouds_sprites.png create mode 100644 assets/clouds_sprites.prg create mode 100644 loader/samples/minexample/clouds.bin diff --git a/assets/clouds.png b/assets/clouds.png new file mode 100644 index 0000000000000000000000000000000000000000..311418fcea7ae03c45c77d6fd3d983616506d5bb GIT binary patch literal 2167 zcma)7do&Xa8{bf?2IMg;K~}Zo}sOvdV2?$a=S_bV0mbSm@2I7@CpX z$Cg}@<<5{r&E?f>qvf{i=l$>d<2&d5oK<(hs6#zia*y-YVpVa4U#;3g5UX{JW6*&b! z&Gh3XX36H+R8zI6Lz}nCj)$60_GX?_`f%jRdF|?xZ|;(6mVhTq{^`ACNU*TBzCx4J z*7C%*z<0I(K9)9DO$x9=5go>rk`}Hpi$$8J@B=C0eaK*`11CUKWcdGvo4+rUFgL{C z@#QuT1B5G+Rz_KKHa8`UEX)24R^3wommt%q!oYS2S(Os9@aIqwUGh26G4+jWl>Z7t zpoSk`IM8oH@J>y8U3i7TrqhvnKu+gs)wKv)5z zURl<;_= zR>;Rjl`ej(sryA?UqAl*HsQi&d6>3 zm|lV7y#!t0l9Fgyv5nSg09^VW$;%py`1p-U-me+oryN>)eJN0EwU*P`FqK_yW+lf%c#4@v;in+Nf~EPx_8lA zrJBJyAnrLmDLVW&;dVVQNK}9bb9=q(D!NYGz7;~R7(d-5Dyo%|@FbuAMEu?-?hKi=9$MA3MZOtocf3pa~amIYV(uXldjKLVYd}oNG^h?(}MxUc4x9K zWnb&AX0n6RYz<3K5UIpJRX0k6Ld|%hFs4JUX2)_B(FQpgW-_HqgtYP3{IOVx{pmh-oC=28ap;2EKVPw=rB{#Ksc97M^ zx2g?ry}OM+q?O-onSZ^gK2Gh$y>q5Pxaf^BTywD;KdWKM?=02E>?V8`KS&P7fN+8MX9p_W8m8lIkPt zA7$=bq0)hs$`s6Ee@KtK1P=PEF^>Jmy%L1iyoNh+kE$8J<+WL?u;WPEiW)< z=4SHQ3q61ZD=HtB#m)X4&w%t9ycIN4M3zl^2tx)>_NETJO1O!jgqSrbif*HyqKLC1 zZWMoFdgvuEIIUvnK--i_8MvHsk2n{}cu+F2Jd2Gyd?JHfB|U3LV9XVcUYdxlbxN2|>Z|jeDNa3RATc8{HkPA9L1Y_Fd`nUm+-+De) zvKXJ+iP-B6owxp#1AzFNVu$I9f|!m<%rCt<+S`5z|EK{MY#&YhFRC8etbYOR38`OA zVK3k}SoB^$GcPc0eM78H+75!0m9H3lmLAq5LoI&#!D4;YUJkpShbO za1fIq5R1cUG7D+EYn>A)c!Rq9$9Lu0aPs0Ebyl()I4Sl!fSdBpqUn#;(=sNR#=&N4 zW|;7b>xPu#+?cPt#~0>$xBUjxXB(WPpI=?-cXcN)hNjACoezlx5mvN7V^EU3t zGu8t7tApdi#yH(XOnN7nYjJbCn`pBIuh@^IMC*>}CFDy-bHTS@qCGYe%JBWu2wXIj zqu36%i^=V7E4bj&OfEL3U*merVM0W2-8AOKhc|C>7n51NPz2~q_CG2e7Ak%J%}C5I zG^FlS6pGUB(iIN3%EF@H42fIck=-+!$sh57%|KzrTFtY3zWR=bsoAz)#lba#baSNO z=lh5#li2G+^!<=S^S29cH2GU%Qey~{ZpGPKwAHZP6+o>ym4*iD=Nm1ec822uF!yK1 zfm#!s!s$VRs9$@SXjmf-%@x`#w|D2PAPdKm#^jlqM~M}$X>adrd;jKgdt|1|*m%k& zGJ)~f+F-*Y;8FRZ`8?ln7vCf8AIHBm6`MHp_~XjCwdB2j|FQpzfiD+n51YcKH20`f P|J8P~cfVL`7kcYI!(=!# literal 0 HcmV?d00001 diff --git a/assets/clouds.prg b/assets/clouds.prg new file mode 100644 index 0000000000000000000000000000000000000000..0cd92cbc68f8e0586449a6b4412e3255c1bd1149 GIT binary patch literal 10003 zcmeH}&5qMB5XV`bgqL#AW)GYeX*bgL#G`l*+`CdHTKfc2Q;|GH4sb})_5OM%aTJ_4HKqPVh{-8yRoI;IgTS4V?}5>S#CxLX0h&%J1YGf` zJ?~B@bx-iIPRaMcX!{pRPxnDCf_rRE(r9=ee^?p{QN}B=D_RfGbV^~@I{tKg^QmU) zvh{%GjsJe9IO?hnd(|oV9vERY)>#S%cs1G5I@vCNqdC9Wj{K{(2WUE_5NiopXja`Q zTq_n4tCnl)TopiF*P}_2$h`FTK>qnVDX)&Mrn&Dg=j)a4??XBz-vc93#u%-Y&NBaM zT`h#5yf8$RQl6KDBWrAmI^|LHF)td76=hjEjTu_&*=lV~(-?-^9n=!_Je$qy@EwX` zVHvx~O6Riki1BJ|>vbB%$!L^CF(x;SU9OCC#u~;he;A|0h4<~8{~d%Nb&yi2$undw zL?I~4%AydZPu~V93L-xU!%R9w0SG#z<|~8gINK7btx3n6DWY)GvlgCk^Oj{sI1HkN zAbt%vm~|c>^BElHl)jBHKb;iL38>=}x+$fgn17N70S`%H%^Vex5nY{f6a&%ty{{yX z%8Rc_FHqFt9PRzYhmOnlkNYH3izQUX{oVf+S#ZOm1kHz-fzU{y%%Ru;sR)`Z%I zfSi}IoTK!;h%?SFl~SQ|01vD`!(W$FUDq1x#4<~XB3by{u~utJiD4>zADn#StWs03 z@_M;Y$|$sOgD!b1U#LK5eQSXQ9(^b literal 0 HcmV?d00001 diff --git a/assets/clouds_sprites.png b/assets/clouds_sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..121b6549e401f2519a7a4e08e7d8918b55b24c81 GIT binary patch literal 1597 zcmV-D2EzG?P)Px)_en%SRCt{2UCVLXFccIsx~2f%bxZC^0aPzcN9@IFAO-lwdkRPa%GeR8Xvv-T z!Gj<%*cp$9GKtUI_XQxjJD<6n>2$g);i%gN1)PYN5<6weDNJOB(55Ir?y@u!6ICJMsEr4}AeSWzaD8>TsfI1@h)Zg&!c3hIi zOPHS%ER0!%Rx!;4B-3Xd&6+|cY7JT)2tG}Cmo$;|Hz=>Qf}+n8!KZPuBt)x_?kq@x zG=N0ZLI4-RFFtodB1UST{T*GEw_xqkj+oW=YKcJtFsqutrD3~P0=&=Vg1JP|0wmwN z+uaJ->-$jS6AmDF>=y}=u2JxeU<6Y%e4Y`Eu2Wkl?U|-C6GKR8AM^3(Tc^uJ7r`zC z$uz+QQM*;&oZ9L87Zq^`c0W@LNs$mqF0%`=0$qtU{maeQ5h(aafh1lt0b0RpF&JaY zvq8#=%$0B{L5)It%vD*jbWyfEUu$U?16aKjz8}B_I0vZ<(%(npL@_ooSEeOOs(h`k zjSKV5MHYt|&VTlCq&W+ffdLFEzZ`ECoKFuZ^0Ct_A0lTd9Y;AZy1_ zm_SgH@GDu8M3Z=z{2h;&9cCZ~Q8f=w8HriDc z&w>zaYj08p*~Qw7urwC`Q1&-ePhHiW#NTV}^%MLr3NJ za=q>5!uo20Y6N(F=HS%K+;7;IN;`|KhKd~pziDv@`kJh_eh7bGP-#SE4c@vz>Yu&S zLb@*(@4aNTmRoR4!h!&+rsDltAFA!=ObFP@%K>Ksv>F-Z zT3Ghb2?E}n1xP_ytD(6Ta5fUK6$=pGoclh}e<%B{dDeBFhQKU{rD4n!S+frbTO(gx z2WU-SOTboKNG{AT>u7lLwV+01B?7kQyQ2`k7Sw$G?*G^i*b2f4Xs+f#m!lij(f*B9 vWi$dRqY+RUjeyE%1XM;NpfVZ(ySn%T@nIi`K*1-;00000NkvXXu0mjfP!8Zt literal 0 HcmV?d00001 diff --git a/assets/clouds_sprites.prg b/assets/clouds_sprites.prg new file mode 100644 index 0000000000000000000000000000000000000000..c651a6b08e20aa8289d39e89beef619608033c58 GIT binary patch literal 1026 zcmd6mF>BjE6vzJ}R=i|zOJvB<(4~8q7P=*n?h4$Kk%QvJCnE(n9jcTJZofj8laW#- zOHW1$Zl)wOQ@?}*8ayT;hIVT+6ihD;EiUl~=;OzqcaL|+`#(55#>^-Ii+};`3AC!I zxlHrThyKcgS09$$kIPn4tn70wR6|cvpmi7(I_1L>dx+-u6_kf;1fVV0kqbU67mR_XXfeQI-q5km(U4@1HFN= znlnIo2)%&53ymfWppBuOK}!I8f_jYuE<#QuiA1|o^XfaD_@@<*cf{DGt8MRM+YP)l zXrJ?rXbp;;usAM`Z$UT@N}x} HzfFGwzgzCA literal 0 HcmV?d00001 diff --git a/loader/samples/minexample/Makefile b/loader/samples/minexample/Makefile index a82fee3..34d520d 100644 --- a/loader/samples/minexample/Makefile +++ b/loader/samples/minexample/Makefile @@ -138,7 +138,8 @@ ZX0PRGS = \ falling_star.zx0.prg \ lilia.zx0.prg \ lilia_hero.zx0.prg \ - island.zx0.prg + island.zx0.prg \ + clouds.zx0.prg LZPRGS = \ island_map.lz.prg @@ -189,6 +190,7 @@ $(DISKIMAGE): $(ASSEMBLE) $(CC1541) $(ZX0PRGS) $(LZPRGS) -f "lilhero" -w lilia_hero.zx0.prg \ -f "island" -w island.zx0.prg \ -f "islandmap" -w island_map.lz.prg \ + -f "clouds" -w clouds.zx0.prg \ $@ diff --git a/loader/samples/minexample/clouds.bin b/loader/samples/minexample/clouds.bin new file mode 100644 index 0000000000000000000000000000000000000000..81495c14bf35c4d46bc6779aad03fc3e478c876f GIT binary patch literal 10001 zcmeHNKX2Ps5I-SSyku~T$Uuf>>)xdWx+OrmD*%szXeeGx8IoYDLzN@MY^o@w%GuA$cRt(v<#zGc+j47J!4$Tf6Z>YeYxvCuGeB zP{V`@-NyyiEY$h-cC+p^U#z}7e7jY7R<1nv3)?>C%8!10q}05p>-Fcao-n=H+F8YV zjUk}mrGmV+pO^OYMA*$^3)L1|V@y)nT92)@ajh*&nk*qo1(fobZDAI3SzIS%CyGFK^Gd%gXZHxvsq~9TV-{FmsU07v1U9`4PFwgp`m9QdPdWi zH7%n)%cxYYr`7EY%4u?bL&MiTwh!{V78*8cZB;Fh_oZAbztTdJq1jTY)R_9Lu4;AE zsAQ_n@&vl}-Cd|@*&53t#e>-#mHBLrSY2Z3lBPjX1$hl*3Gg0B#CH;20tw&;fbS_3 z#BcB8t-F{3yaiv}f}3ern#4bD(8F-!Y|!uYq|Bm(3(~zs=^m8}Hy3WugG0Oo@YOqN z?`_6&nj|v{I>7l70Cz7!1aijCNAj#ENHW;^2%o&U$@$y%j}HjF0-< z5Dm-PRdFn$&7sS|Iht|UChnbcduF;52WPyI0H##O=bgISpA`US9JYyjr;m`KUIub9 znWxREi~_Q*JwFP0vWhmeE?RBk;EXpeisRpopS-Hkua7NIwJP4<^Z^UKkJzgjhi&2> zMH9slPY!Tz_Y|#_)9_Cu<;~NPPgPGGobiSd*hGT>y#t@F6$2T)qvI%!y#%Oszq(tg z*p4gifvo$Q`$8=1dyeQI9Uc!w|1xOCVVk(e{V)uJzzN8xA`BHivtY*Rk>dWZewJtQkugt%$Cacq`l zWZrSqKQ?5gQmvY@LX$_M=x7+maTtY&^*3SYTbsgm9E-mzLF76ieqXjWOtvmP0CxKWg8zOmbhV~fPf3O{gdi!1DR`$~XEPEyQ_GQ#9sR~aP(=UP)_ zl7LE($Vowaf;hLvaoL?=B8?(a5ou?8M@d_FXGG~4#-!D;gLoJb zVtx>C%55S-PLS&!QtAt`N{rQg-%mPMprH6odUUzp@Am_WlfrauN|J%_onnnb*QR0a ziay~asyOofJ;F-J?Sb!yKGkG~x?E_9L?!4VQAY#|Sun@bI3Mjfl$f*;md|anCzi7V z!uNy-x&-&r{=A+eFh^jHz#M@&0&@heJ_7IkVegU#{+iPqfjI)79Dz%EoUex2)H!;O t*XOiS^#39k(Rj*5S|1$$$EqK(?#Y}F+7*Kz()-wT|1WwMg7yDU_#4B)T#o<% literal 0 HcmV?d00001 diff --git a/loader/samples/minexample/minexample.s b/loader/samples/minexample/minexample.s index 16bd582..50354a3 100644 --- a/loader/samples/minexample/minexample.s +++ b/loader/samples/minexample/minexample.s @@ -659,10 +659,11 @@ part_9: @finish: lda #0 sta timer_mode + sta $d015 ; TODO is there a delay here -part_10: - jmp * + ; we run out of space before the fixed location vector return now + jmp part_10 drawrow: ldy #0 @@ -810,13 +811,15 @@ init_2x: lda #$00 sta $d012 +position_2x_to_display: + lda #51 +position_2x: : bit $d011 bpl :- : bit $d011 bmi :- - lda #51 : cmp $d012 bne :- @@ -1259,18 +1262,19 @@ irq_badguy: pla rti -badguy: .byte "badguy",0 -fontname: .byte "font",0 -sidname: .byte "sid", 0 -introname: .byte "intrbmp", 0 -towername: .byte "tower", 0 -towerbeamname: .byte "towerbm", 0 -fieldname: .byte "field", 0 -fallingstarname: .byte "fallstar", 0 -lilianame: .byte "lilia", 0 -liliaheroname: .byte "lilhero", 0 -islandname: .byte "island", 0 -islandmapname: .byte "islandmap", 0 +badguy: .byte "badguy",0 +fontname: .byte "font",0 +sidname: .byte "sid", 0 +introname: .byte "intrbmp", 0 +towername: .byte "tower", 0 +towerbeamname: .byte "towerbm", 0 +fieldname: .byte "field", 0 +fallingstarname: .byte "fallstar", 0 +lilianame: .byte "lilia", 0 +liliaheroname: .byte "lilhero", 0 +islandname: .byte "island", 0 +islandmapname: .byte "islandmap", 0 +cloudsname: .byte "clouds", 0 darmtower_txt: @@ -1429,6 +1433,107 @@ load_8000_zx02: pla jmp zx02 +part_10: + ; the sprite data is embedded into first few bitmap pixels + ; which are hidden by black border attributes +@y = $60 + ldx #cloudsname + jsr load_8000_zx02_2000 + jsr init_bmp + ldx #0 + stx $d010 + stx $d017 + stx $d01d + stx $d025 + stx frame + dex + stx $d01b + stx $d01c + lda #11 + sta $d026 + lda #@y+50 + jsr position_2x + ; draw top half +@loop: + bit $d011 + bpl @loop + ldx #0 + ldy #0 + lda frame + cmp #200 ; TODO + bcc :+ + jmp @finish +: + adc @sprxs,x + sta $d000,y + sta temp + lda @sprys,x + sta $d001,y + txa + ora #$80 + sta $7f8,x + lda @sprcols,x + sta $d027,x + lda temp + iny + iny + inx + cpx #8 + bcc :- + lda #$ff + sta $d015 + + ; draw bottom half +: + bit $d011 + bmi :- + lda #@y+37 +: + cmp $d012 + bcs :- + + ldx #0 + ldy #0 + lda frame + clc +: + adc @sprxs+8,x + sta $d000,y + sta temp + lda @sprys+8,x + sta $d001,y + txa + ora #$88 + sta $7f8,x + lda @sprcols+8,x + sta $d027,x + lda temp + iny + iny + inx + cpx #6 + nop + bcc :- + + inc frame + jmp @loop + +@sprxs: + .byte 200, <-24, 24, 24, <-64, 24, 24, 24 + .byte 200-40, 24, 24, 24, <-44, 24 + +@sprys: + .byte @y-8, @y, @y, @y, @y+21, @y+21, @y+21, @y+21 + .byte @y+42, @y+42, @y+42, @y+42, @y+63, @y+63 + +@sprcols: + .byte 2, 5, 5, 5, 14, 14, 14, 6 + .byte 2, 2, 2, 9, 2, 2 + +@finish: + jmp * + clear_2bufs: ldy #$44 .byte $2c ; skip next instruction