From 3a42da655bf235e48edbf472a98d40b8dd0817a1 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Thu, 12 Sep 2024 08:26:53 -0400 Subject: [PATCH] In which John learns about the playfield hardware and sprite priorities --- bun.c | 7 +++++ main | Bin 61004 -> 61040 bytes main.c | 69 +++++++++++++++++++++++++++++++++--------------- system/system.s | 3 ++- 4 files changed, 56 insertions(+), 23 deletions(-) diff --git a/bun.c b/bun.c index 7028730..a2b9feb 100644 --- a/bun.c +++ b/bun.c @@ -310,6 +310,13 @@ void calculateBunPositions( bunPositions[current][0] = x; bunPositions[current][1] = y; + + // for the blitter video + /* + if (frame == 0) { + printf("%d,%d\n", bunPositions[current][0], bunPositions[current][1]); + } + */ } } diff --git a/main b/main index 46b75975c97dffaeb387327b456818bcf6f3f508..295416bc918bc4c5ba51286550cb95f6cfae8589 100755 GIT binary patch delta 2825 zcmZV=4NM#7^?l}iHjV+qc?8xlj>Fg-7(+`p%hJQqtz8Tb=6f7%4ii$v?CI$P=z8?qKvF*;}BFu(-x7i_Zibw z+DY&GdEa~Qd+&Yk=O$({7G^SHPJ@xVSnev^c^t$#fDBDFI6vMszO*Pe2|co(Z@btb zcXh{gZo0iybaT^u6ab>K!bhb#AVB;hOPhSr5E$|h7g;$Kx+jrC0&6EYz<#6v&%&~o z@3^G%QE!rO7ti=do;Xy4N0FQOQwS#ztBJbMo#x=!`4(Lm&_JrAHd2_=8sxQh72q5B zF!T%kbR#Lr>YY6Ei>N_CWffkfK~hTg(eq?m*FZHm6tMyvp#pc9Zxt1(8~`;Plog?0 zVyoB1urN?Q=(glg*Z|1$GT9Ej}fN{^L#qr9xSBkw-OhjS~Q?H7w1XS+`OPqx#W zhV0z#1K@nN;VTnYSC{iyjhnwjlZKaaFN>NPcJ`Ex!|Xx>Ds-8?kg=U~(@PnDUe^-< zLk)VQ9|6}HS60>yN1-(UtL_9KYqCN??6sAXM1-p+n|m9^JkbEayKPMoSUCy+`34!+ z2f#9n^Tui(MGORBG5LJ~^s#Xr>7gEeH!9K1{{~09X&a7vO~-JYFm1rmVBS!I=7_ia zC;yTZ*lN;$Qp|~sVkp|;7&M5vP8TxQBu-jk8>oDY+-g6r|0z%_#JOt%O8r z+*U<~=$E#u?Ec&;yz+W(HDcy-*Of*~q6N@6D^9GKnvY)pm)U>Pe@x8TwJd9Eo(nm{ zd8Ld$@43uDmDePU>_Ix2_j8oy5uSOqJpfB#H(*S5ge;;GfWixyO&z|oA#-CAGK7fA zH$H?6a5T=AqiK7Zm(sRYfxa$lPD40Eb`; zS~M$jfVQOOSBAM6YAq`3IUI@~+3m<_ckA?q@4imUtXIq&18{Q4vpr}4^H z*Y^3&9OmEGx!Xr9S|)P~)@!LE%+0A>%bAMZzB5NT43|d;mb8nvx+|Xdns*I#q@3emS4w!?ReD45+)}teIQF$L* zgnSSHBhl&kF&U()r>Icx1c*EFJOnT-)yI*mvli?45Pi$@wpTxdHJj7RA=M!5446;(3u}wWB-Pipkbz6JM{*~ZFMKkM-kL&~rl)HwS5JrR zlCpgAbpOS1eETVcX*yP0L=^fZj^ENn96w0>aNSkXbq^2Y2;@h>3@>!VNF5rFx}xC`?ul!(Qs#I`nnM_RS4 zL|R!?M3@t|V_m+Dx6B2zy^mp9GB2wr%$bv55dJ|w#bBAc8)d$AC>YVVL?tEV0sd)CRH-J0N@yE#I{ z#OHTQ28>jj%$Vg&|wIbkWJb|DhY(#J%*s%KyAq*l6AoL@|5PA`M7y|+az~lAC zdk8xb?1-8|JboG9B7BVtYjw68I~m`W>T~RMHo0H%p9G+T4@{(u4nGKyDQcUq`!6dD BgUA2? delta 2792 zcmYjT4@^||9sj=L-Q$5L9K0LCD&z4u?s#wqD?!&+|~!20FIBv-FPIQ=bkE zOPHLkQEG`pf1NQKv1VbLZLZ|(na&tuX+sv;;li4xF~$^QrnT)A&0?0$q3rVxaDB=5 z_vicX_x*l<-|zSL?p@EAyq+=Wvhe>sQQ?65>D8tY#t`E0N%+0DTQl}ae>Q8j3 zeR?9!U+CN>d-w}NjEG{YCUhtb#1R)9nOozJMaYs5T-zd5(x)JykZm_P$+4>tG@sfi zG@pzM9gQhLlMe+)9y)c4S5sSrZGg?d2IRP;FG%nveO+AYF-U1(cCIM5HY^yOI?>na zD|A}wW~;fhdm7`Kmjp&OC9=VI0Y8UZRSMXAv;g5xF!AowZK{_wj5bumio#muPg@B}cdWdh2 z3)>cK%rSIc>S_R=!n>qsL*C| z!X&RB?nY$OV8tVKM@-zG7HGW+%ngn_I-=*B7|1q6M98i-iY`V1M5nzlX->hFygTA8;p+3^%$Se+>3ECa}`F5xT+NH$k&4V zKS)XDYAU#2&K(>@D%ulB8elH7ds)kq-J*rF2;Z@utY30^GL==ral~v(_CQJRl82m# zbv665Z4LG}ZSP_nT>4wio^<6jaoFt4E$1{gm|KkXNbXw6UV22N)}#7g1Jg7%e>R)V zb=C>rmA@|1KR#?qWr}6}A~pU8h8#@q$=pNaqrfyDGmUJInFg{}`&uYHZZG9JSi)Y- z#n>12^XB<^)j0BUUJWoac`M60N@Il-n3g9OT`fS=|1Adh2lvXkTjq5&=er>p%`Y?M z^PkG<)dfRAX7{qG{GUUcS9;<_Ektus4$Sak*mQPsTRuxSRhwLIqN28TG$k&H`sv$;2uLqB@UswVV8 zzehS8=KV***-Dg8$XkMgUTTYDg`Iyee50tBIO#C!bjm-q-VRaDs6qB(l-oTy6AmL- z!M(mOsh~0{_3IA9G4(F-$|f`0UE9qpuiPjv4c~zi{p=%Wb@9azW$mcahzHoi*@n#w zfH9{RR7LrV%vN4%9fGC-R##rljWNBvNE!?d>iMET7F1m|iDsR#f%5gmrWDcVVinq1 zX4s+j;xeZt!?319I#d2MSIfMvVvGUTPfAf~b5pGdjV$N|rVi|T!D)oZ=1fbx<7%og zbv_4M4VSR>HS;uQ<^u0!g<50b{6(pSQFTG}F{b=4t(R zP;;7%sLS%sqKi60WSv#^kR3hnEc;yj^;u2b4D;cHiE_dTyaw}G6I=p763{KVfA?B|t*)U|D z{P2>=q57;9-!s0UDP>*0K4q=lkg_&=HldjfZ$-nLmrY9@zIC+m!CV2H9AJs67grem zL$3($#re@)*+!Nb7W8YSGRlwX{MJL2+x>_3@JN^Yfb4}3H+!m{7&`xPMDfS@p|EK1 zo)>g_q#-+p)&awgd3G)759g$>zd-6uTB@yFN&jx!`)`vNUgLk8C{m9=^vl|Ncp}u7 ziI9md?~l1&rhAKv`gap0T%bpY&M8d^NbRmeACIw9-nSb2ccN$W{S}mcARQ)tp|j)h z3}>egwMo7Dq@u0=itJ^m0V4HTslTk5cB} z`Kwr8RDJvy*5iQB0RJ>SjO9tA={aATOwR?<^@XY!M-+&AX8r{QFwOi>qZTmP_ls8<_ET`cSZUMf@c!MSt`wn?f}60K2HL$O$a6vIF>=%942_7L0`< z(wMvvefb7X84Kq$KA@|LIB%jfCZ@@aFbJtWj?zX1 zW9Ssrhz_UGx^;2u4Ru+g_4+;z|74bZ7FDx8!V2w6klD2-D=gBTB>&Wv5ss3d-YVs| zH> 16); + *(currentCopperlist++) = custom_sprite + i * 4; + *(currentCopperlist++) = (spriteDataPointer >> 16); - *(currentCopperlist++) = custom_sprite + 2 + i * 4; - *(currentCopperlist++) = (spriteDataPointer & 0xffff); + *(currentCopperlist++) = custom_sprite + 2 + i * 4; + *(currentCopperlist++) = (spriteDataPointer & 0xffff); + } + } else { + printf("Skipping render\n"); + currentCopperlist = setUpEmptySpritesInCopperlist(currentCopperlist); } *(currentCopperlist++) = custom_color; *(currentCopperlist++) = 0x3a6; for (y = 0; y < 256; ++y) { - for (i = 0; i < 8; ++i) { - // set sprite color - *(currentCopperlist++) = custom_color + 32 + ( - // sprite color group - (i / 2) * 4 + - // 0 is transparent - 1 + - i % 2 - ) * 2; - *(currentCopperlist++) = *(currentSpriteCopperlist++); + if (RENDER_SPRITES) { + for (i = 0; i < 8; ++i) { + // set sprite color + *(currentCopperlist++) = custom_color + 32 + ( + // sprite color group + (i / 2) * 4 + + // 0 is transparent + 1 + + i % 2 + ) * 2; + *(currentCopperlist++) = *(currentSpriteCopperlist++); - // set sprite position - *(currentCopperlist++) = custom_sprite_control + i * 8; - *(currentCopperlist++) = *(currentSpriteCopperlist++); + // set sprite position + *(currentCopperlist++) = custom_sprite_control + i * 8; + *(currentCopperlist++) = *(currentSpriteCopperlist++); - *(currentCopperlist++) = custom_sprite_control + i * 8 + 2; - *(currentCopperlist++) = *(currentSpriteCopperlist++); + *(currentCopperlist++) = custom_sprite_control + i * 8 + 2; + *(currentCopperlist++) = *(currentSpriteCopperlist++); + } + } else { + printf("Skipping render\n"); } for (i = 3; i < 8; ++i) { @@ -188,6 +200,19 @@ int main(void) { endCopperlist(currentCopperlist); + /* + copperlist debugging + for (i = 0; i < 20; ++i) { + printf( + "%x %x %x %x\n", + *(copperlist + (i * 4)), + *(copperlist + (i * 4) + 1), + *(copperlist + (i * 4) + 2), + *(copperlist + (i * 4) + 3) + ); + } + */ + takeOverSystem(); setCopperlist(copperlist); diff --git a/system/system.s b/system/system.s index 078b8c7..34d869d 100644 --- a/system/system.s +++ b/system/system.s @@ -360,7 +360,8 @@ _setUpDisplay: MOVE.W D0,bplcon0(A1) MOVE.W #0,bplcon1(A1) - MOVE.W #0,bplcon2(A1) + ; sprites always on top + MOVE.W #$0020,bplcon2(A1) MOVE.W #0,bpl1mod(A1) MOVE.W #0,bpl2mod(A1) MOVE.W #$2c81,diwstrt(A1)