From 4424e93b6660837594c3cd521537583ef2c06471 Mon Sep 17 00:00:00 2001 From: RochesterX Date: Mon, 16 Feb 2026 00:27:56 -0500 Subject: [PATCH] Nametable confusion --- .gitignore | 3 + game.cfg => plat.cfg | 0 game.nes => plat.nes | Bin 40976 -> 40976 bytes game.s => plat.s | 306 ++++++++++++++++++++++++++++++++++++++----- sprite.chr | Bin 4096 -> 4096 bytes 5 files changed, 273 insertions(+), 36 deletions(-) create mode 100644 .gitignore rename game.cfg => plat.cfg (100%) rename game.nes => plat.nes (95%) rename game.s => plat.s (65%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c54d2e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.o +.DS_Store +run diff --git a/game.cfg b/plat.cfg similarity index 100% rename from game.cfg rename to plat.cfg diff --git a/game.nes b/plat.nes similarity index 95% rename from game.nes rename to plat.nes index eb36e6c83a1883607aeea56cddda9a3b061dffa1..d118ea3a61b10d260356a3169ddb757c9d47be40 100644 GIT binary patch delta 879 zcmZuvUr1A76hGg0r`zsTHq?z_mLEis1wkZH54uGZbBqY|A$pJz3HsJcU?tu=?aCNT z7WNR)WZk&N2Q3)-67(=DY1`AKe@_JyNrq8O#1LCs=U&@G(Rn!McYf!0{_yc7b2OQw zzKiDvJ1HU1uyM{3z&PCXUOF-v4aS4_gE~}%@P@*P3OY4}@VZiG4nVynWHwWK{8}~&1z!*Y2 z$s17dXbc%|AavN7+==MU9%4EgGQBNi1xIKvx-nV=Gl7Ky7P6qS2Sbs@M`*+*z|TSE zvb3w+1P$7X#N@B_5~Tks{3rdlj*T4-7xXcgv(vjcOXIhjt|*{X7F`PM@cRc>V)yu4 zfa88yp6r8a(eB#k`3lfmtJZ20^=0Ui>-9SH*Vi7(h^nUnqN|%Ays6hG=fC6dTtF{= z$gMnBD&M+s)Q?l-<;UmjLi@q9wTW64t%m)7+1Ag!^xO891> zX}fgtW_E2A&-nCg_{A`aO5Ly2*!!|^-QRDj{4RL+q*Xd`>|^!mFv_Ysi&?tr_zeq^ BMg0H( delta 286 zcmXwwF-XHe7={1)liCCYQ6waSaFf{0$+?S=mLP(QqoW<&6h$wEI0OojE(!+9LBInC zC6j}YF>$)V&B1_0Zc-8I;G&1%+urxymlT*3=xnTSEg~WCpM3!Xpl9yp%2DXY{<)vQ zhY=_yNCX*5BN(#^<&1t2%Hb4)@ohrL$#FjgQ`Iz?(5XIsXQCa=Me_n8k6wrLG1MsY z+#ZR%;4;+M;gC6Q&x)KBFf}mlc2j~^0xoP&IyIHgJDJxa704Ec5!~6Jb-msLx(7CB zttwX=V)7?6l`0EMJ`MM9X_>bNP5L0e1sPdBx2P5Fa!aF*p=vkz>KJ9=B(K94T+5jm WALcjaCuwXmU~l;>!v)=crhftMw`xWJ diff --git a/game.s b/plat.s similarity index 65% rename from game.s rename to plat.s index b96ad37..954594b 100644 --- a/game.s +++ b/plat.s @@ -26,8 +26,9 @@ INES_SRAM = 0 .segment "CODE" reset: sei - lda #0 + lda #%00100000 ; 8x16 sprites sta $2000 + lda #0 sta $2001 sta $4015 sta $4010 @@ -324,7 +325,27 @@ gamepad_poll: .segment "RODATA" + +level: +.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.byte 0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.byte 0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +.byte 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +.byte 0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0 +.byte 0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0 +.byte 0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0 +.byte 0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0 +.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + example_palette: +.byte $0F,$00,$3D,$20 ; greyscale +.byte $0F,$09,$1A,$16 ; grass .byte $0F,$15,$26,$37 ; bg0 purple/pink .byte $0F,$09,$19,$29 ; bg1 green .byte $0F,$01,$11,$21 ; bg2 blue @@ -335,12 +356,16 @@ example_palette: .byte $0F,$12,$22,$32 ; sp3 marine .segment "ZEROPAGE" -velocities: .res 8 +buttons: .res 1 + +vel_x: .res 1 +vel_y: .res 1 cursor_x: .res 1 cursor_y: .res 1 temp_x: .res 1 temp_y: .res 1 +temp_mul: .res 1 var_m: .res 1 var_n: .res 1 var_o: .res 1 @@ -370,14 +395,18 @@ main: jsr init_objects @loop: -@draw: - jsr draw - jsr ppu_update - lda frame_counter clc adc #1 sta frame_counter + + jsr controller + jsr movement + +@draw: + jsr update_background + jsr ppu_update + jmp @loop init_objects: @@ -398,10 +427,6 @@ init_objects: lsr sta oam+1, X - tay - lda #0 - sta velocities, Y - inx inx inx @@ -409,43 +434,119 @@ init_objects: cpx #(8*4) bne :- + lda #0 + sta vel_x + sta vel_y + rts draw: +@end: + rts + +movement: + ; Horizontal velocity + ldx #0 + jsr btn_right + cmp #0 + beq :+ + ldx #1 + lda #3 + sta vel_x + : + + jsr btn_left + cmp #0 + beq :+ + ldx #1 + lda #253 + sta vel_x + : + + cpx #1 + beq @end + lda frame_counter + and #1 + cmp #0 + bne @end + + lda #0 + cmp vel_x + beq @end ; If vel_x = 0, skip decay + + ; If vel_x > 0, decrement + bpl :+ + ldx vel_x + dex + stx vel_x + jmp @end + : + ; Else if vel_x < 0, increment + ldx vel_x + inx + stx vel_x + @end: + + ; Jump + jsr btn_up + cmp #0 + beq :+ + lda #250 + sta vel_y + : + + + ; Gravity lda frame_counter and #1 cmp #0 - bne @end - - ldx #0 - ldy #0 - : - lda velocities, Y + bne :+ + lda vel_y clc adc #1 ; Add 2 to velocity - sta velocities, Y + sta vel_y + : - lda oam+0, X - clc - adc velocities, Y - sta oam+0, X + ; Apply Y velocity + lda oam+0 + clc + adc vel_y + sta oam+0 - cmp #200 - bmi :+ - lda #245 - sta velocities, Y - : + ; Keep grounded + cmp #200 + bcc :+ + lda #0 + sta vel_y + lda #200 + sta oam+0 + : - inx - inx - inx - inx + ; Apply X velocity + lda oam+3 + clc + adc vel_x + sta oam+3 - iny - cpy #8 - bne :-- -@end: - rts + + rts + +update_background: + rts + ;lda $2002 + ;lda #$20 + ;sta $2006 + ;lda #$00 + ;sta $2006 + + ldx #1 + ldy #1 + jsr ppu_update_tile + + lda #1 + sta $2007 + + rts setup_background: lda $2002 ; reset latch @@ -465,14 +566,45 @@ setup_background: dey bne :-- ; set all attributes to 0 + lda #0 ldx #64 ; 64 bytes : + txa + and #%00000011 + asl + asl + asl + asl + sta temp + txa + and #%00000011 + ora temp + lda #0 + sta $2007 dex bne :- + + + + lda $2002 + lda $20 + sta $2006 + lda $00 + sta $2006 + ldy #0 + : + lda level, Y + lda #4 + sta $2007 + iny + cpy #240 + bne :- + + ; fill in an area in the middle with 1/2 checkerboard lda #1 - ldy #8 ; start at row 8 + ldy #0 ; start at row 8 : pha ; temporarily store A, it will be clobbered by ppu_address_tile routine ldx #8 ; start at column 8 @@ -528,3 +660,105 @@ setup_background: rts +mul_x: + sta temp_mul + lda #0 + : + clc + adc temp_mul + dex + bne :- + rts + +mul_y: + sta temp_mul + lda #0 + : + clc + adc temp_mul + dey + bne :- + rts + +controller: + lda #1 + sta $4016 + sta buttons + lda #0 + sta $4016 + : + lda $4016 + lsr + rol buttons + bcc :- + + rts + +btn_right: + lda buttons + and #%00000001 + rts + +btn_left: + lda buttons + and #%00000010 + lsr + rts + +btn_down: + lda buttons + and #%00000100 + lsr + lsr + rts + +btn_up: + lda buttons + and #%00001000 + lsr + lsr + lsr + rts + +btn_start: + lda buttons + and #%00010000 + lsr + lsr + lsr + lsr + rts + +btn_select: + lda buttons + and #%00100000 + lsr + lsr + lsr + lsr + lsr + rts + +btn_b: + lda buttons + and #%01000000 + lsr + lsr + lsr + lsr + lsr + lsr + rts + +btn_a: + lda buttons + and #%10000000 + lsr + lsr + lsr + lsr + lsr + lsr + lsr + rts + diff --git a/sprite.chr b/sprite.chr index 6847b198b711e293b26e4350a505931984f3d4bb..5514dc148b20475bf2db61d630632c277cf90b84 100644 GIT binary patch delta 218 zcmZorXi(U|$YO6Fe6(ZA%1aCkdiM48b+!zDPOO_voi}T zJN~Qr_Xi060rjJR&%Ytuw_iVl86ZOxE-XBBq~XGXgZ1@5Gk~TvvvV6)ZhZU@=!`q- u;`YP=6+MtY+}d&F#f1WUJCG`Seum4-dASX>ul-pQ2UPaw$7V*xha3QWw0|uC delta 17 XcmZorXi(U|$g