From b56f86a1cd3dae5d909648889ef486f9def25325 Mon Sep 17 00:00:00 2001 From: Tyrel Souza Date: Mon, 13 Feb 2023 23:25:29 -0500 Subject: [PATCH] game title screen --- atlantico/Makefile | 2 +- atlantico/atlantico.asm | 214 +++++++++++++++++++++++++++++++++++++- atlantico/atlantico.nes | Bin 49168 -> 49168 bytes atlantico/atlantico.o | Bin 69980 -> 75050 bytes atlantico/state.inc | 6 ++ atlantico/titlescreen.chr | Bin 8192 -> 8192 bytes atlantico/titlescreen.nam | Bin 0 -> 1024 bytes atlantico/utils.inc | 7 ++ 8 files changed, 226 insertions(+), 3 deletions(-) create mode 100644 atlantico/state.inc create mode 100755 atlantico/titlescreen.nam diff --git a/atlantico/Makefile b/atlantico/Makefile index e953e5d..b4b6c20 100755 --- a/atlantico/Makefile +++ b/atlantico/Makefile @@ -15,5 +15,5 @@ clean: # Rule to run the final cartridge .nes file in the FCEUX emulator ############################################################################### run: - on-workspace 1 "fceux ./atlantico.nes && i3-msg '[id=$(xdotool getactivewindow)] floating enable'" + on-workspace 1 "fceux /home/tyrel/code/6502nes/atlantico/atlantico.nes && i3-msg '[id=$(xdotool getactivewindow)] floating enable'" #on-workspace 1 "fceux atlantico.nes" diff --git a/atlantico/atlantico.asm b/atlantico/atlantico.asm index 61d90bd..473e835 100755 --- a/atlantico/atlantico.asm +++ b/atlantico/atlantico.asm @@ -2,12 +2,14 @@ .include "header.inc" .include "actor.inc" .include "reset.inc" +.include "state.inc" .include "utils.inc" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Variables declared in RAM zero-page ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .segment "ZEROPAGE" +MenuItem: .res 1 ; Keep track of menu item Score: .res 4 ; Score (1s, 10s, 100s, and 1000s digits in decimal) Collision: .res 1 ; Flag if a collision happened or not @@ -31,6 +33,7 @@ Clock60: .res 1 ; Counter that increments per second (60 frames) BgPtr: .res 2 ; Pointer to background address - 16bits (lo,hi) SprPtr: .res 2 ; Pointer to the sprite address - 16bits (lo,hi) BufPtr: .res 2 ; Pointer to the buffer address - 16bits (lo,hi) +PalPtr: .res 2 XScroll: .res 1 ; Store the horizontal scroll position CurrNametable: .res 1 ; Store the current starting nametable (0 or 1) @@ -53,6 +56,8 @@ PrevOAMCount: .res 1 ; Store the previous number of bytes that were sent Seed: .res 2 ; Initialize 16-bit seed to any value except 0 +GameState: .res 1 ; Keep track of game state + ActorsArray: .res MAX_ACTORS * .sizeof(Actor) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -207,13 +212,44 @@ DoneIncrementing: ;; Subroutine to load all 32 color palette values from ROM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .proc LoadPalette + ldx MenuItem + cpx #0 + bne :+ + lda #PaletteDataClear + sta PalPtr+1 + jmp LoadPaletteBytes + : + ldx MenuItem + cpx #1 + bne :+ + lda #PaletteDataCloudy + sta PalPtr+1 + jmp LoadPaletteBytes + : + ldx MenuItem + cpx #2 + bne :+ + lda #PaletteDataNight + sta PalPtr+1 + jmp LoadPaletteBytes + : + + +LoadPaletteBytes: PPU_SETADDR $3F00 ldy #0 ; Y = 0 -: lda PaletteData,y ; Lookup byte in ROM +: lda (PalPtr),y ; Lookup byte in ROM sta PPU_DATA ; Set value to send to PPU_DATA iny ; Y++ cpy #32 ; Is Y equal to 32? bne :- ; Not yet, keep looping + rts ; Return from subroutine .endproc @@ -774,6 +810,34 @@ FinishCollisionCheck: rts .endproc +.proc LoadTitleScreen + lda #TitleScreenData + sta BgPtr+1 + + PPU_SETADDR $2000 + ldx #$00 + ldy #$00 + OuterLoop: + InnerLoop: + lda (BgPtr),y + sta PPU_DATA + iny + cpy #0 + beq IncreaseHiByte + jmp InnerLoop + IncreaseHiByte: + inc BgPtr+1 + inx + cpx #4 + bne OuterLoop + + rts +.endproc + + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Subroutine to switch CHR banks ;; Params = A has the bank number @@ -789,6 +853,133 @@ FinishCollisionCheck: Reset: INIT_NES ; Macro to initialize the NES to a known state +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;; T I T L E S C R E E N ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.proc TitleScreen ; using proc to define scope + lda #1 + jsr SwitchCHRBank + + lda #State::TITLESCREEN + sta GameState ; GameState = TITLESCREEN + + lda #1 + sta MenuItem + + jsr LoadPalette + jsr LoadTitleScreen ; Load tiles and attributes to the PPU + + lda #0 + sta MenuItem + + +DrawMenuArrow: + ; Sprite y pos $0200 + lda #92 + sta $0200 + + ; Sprite Tile# $0201 + lda #$23 + sta $0201 + + ; Sprite Attribs $0202 + lda #%00000001 + sta $0202 + + ; Sprite X positon $0203 + lda #95 + sta $0203 + + +EnableNMI: + lda #%10010000 + sta PPU_CTRL + lda #%00011110 + sta PPU_MASK + +TitleScreenLoop: + lda Buttons + sta PrevButtons + + jsr ReadControllers + CheckStartButtons: + lda Buttons + and #BUTTON_START + beq :+ + jmp GamePlay + : + CheckDownButton: + lda Buttons + and #BUTTON_DOWN + beq :+ + cmp PrevButtons ; only one press considered, not hold + beq :+ + lda MenuItem + cmp #2 ; prevent past 2 + beq :+ + ;; increment menu item + inc MenuItem + + lda $0200 + clc + adc #17 + sta $0200 + : + + CheckUpButton: + lda Buttons + and #BUTTON_UP + beq :+ + cmp PrevButtons ; only one press considered, not hold + beq :+ + lda MenuItem + beq :+ + dec MenuItem + lda $0200 + sec + sbc #17 + sta $0200 + : + + WaitForVBlank: ; We lock the execution of the game logic here + lda IsDrawComplete ; Here we check and only perform a game loop call once NMI is done drawing + beq WaitForVBlank ; Otherwise, we keep looping + + lda #0 + sta IsDrawComplete ; Once we're done, we set the DrawComplete flag back to 0 + + jmp TitleScreenLoop + +.endproc ; End titleScreen + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;; G A M E P L A Y ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.proc GamePlay + lda #0 + jsr SwitchCHRBank + + lda #State::PLAYING + sta GameState ; GameState = Playing + + PPU_DISABLE_NMI + + InitVariables: lda #0 sta Frame ; Frame = 0 @@ -938,6 +1129,8 @@ GameLoop: jmp GameLoop +.endproc ; EndGameplay Proc + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; NMI interrupt handler ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -979,7 +1172,11 @@ BackgroundCopy: ; Here is where we copy/draw the background buffer jmp BufferLoop ; Loop back until we finish the buffer (find an entry with Length=0) EndBackgroundCopy: + lda GameState + cmp #State::PLAYING + bne EndScrolling ; Bypass scrolling if not in gameplay state +;; Only GAMEPLAY NewColumnCheck: lda XScroll and #%00000111 ; Check if the scroll a multiple of 8 @@ -1034,6 +1231,8 @@ ScrollBackground: lda #0 sta PPU_SCROLL ; No vertical scrolling +EndScrolling: + RefreshRendering: lda #%10010000 ; Enable NMI, sprites from Pattern Table 0, background from Pattern Table 1 ora CurrNametable ; OR with CurrNametable (0 or 1) to set PPU_CTRL bit-0 (starting nametable) @@ -1067,9 +1266,15 @@ IRQ: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Hardcoded list of color values in ROM to be loaded by the PPU ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -PaletteData: +PaletteDataCloudy: .byte $1C,$0F,$22,$1C, $1C,$37,$3D,$0F, $1C,$37,$3D,$30, $1C,$0F,$3D,$30 ; Background palette .byte $1C,$0F,$2D,$10, $1C,$0F,$20,$27, $1C,$2D,$38,$18, $1C,$0F,$1A,$32 ; Sprite palette +PaletteDataClear: +.byte $1C,$0F,$22,$1C, $1C,$36,$21,$0B, $1C,$36,$21,$30, $1C,$0F,$3D,$30 ; Background palette +.byte $1C,$0F,$2D,$10, $1C,$0F,$20,$27, $1C,$2D,$38,$18, $1C,$0F,$1A,$32 ; Sprite palette +PaletteDataNight: +.byte $0C,$0F,$1C,$0C, $0C,$26,$0C,$0F, $0C,$26,$0C,$2D, $0C,$36,$07,$2D ; Background palette +.byte $0C,$0F,$1D,$2D, $0C,$0F,$20,$27, $0C,$2D,$38,$18, $0C,$0F,$1A,$21 ; Sprite palette ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Background data (contains 4 screens that should scroll horizontally) @@ -1244,6 +1449,11 @@ AttributeData: .byte $ff,$aa,$aa,$aa,$59,$00,$00,$00 .byte $ff,$aa,$aa,$aa,$5a,$00,$00,$00 + +TitleScreenData: +.incbin "titlescreen.nam" + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Here we add the CHR-ROM data, included from an external .CHR file ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/atlantico/atlantico.nes b/atlantico/atlantico.nes index cbf190d351fa719267d9909fb66ce25d97a2851f..bc291133cea21d13c43ac1a9e240cb20ff061e7f 100644 GIT binary patch delta 2753 zcmb_eU1(ER96$HoB&}_1k~XRNvOPDg{ch8^tybOIz6iAhsoTUCabfsiiW41-32xk* z*3+pYkSuf)VUV^Q;dBTswXmmA#+1gV`?#kq&aG1%+hqgoK$iW_y}4=J7e4Htd(Z#l z_y0Wi+)Fa5lu;$+$f4JQq8LLKF@ZSJ&0`aA-vrj-$ZRF@wY0acqc0;K-hWwpOnM6_ zK?Q$OAVQ%|>t=`uROG4%Y7kVBN?esdtp`=2Hm=$d>>OzZ-Iqs9%KA1K&ia%M_9}=x zAi+80F*u~>oFP~eH&78lrt@SMn-sOL@;D4hCUIq(X<0I1WO*R>`K?* zjdiR&PSC)_!~_Y`;9;Sz&aWgf*-b-roJb1|ajccL_>(K3wI*jtE3>5$zA0k58#2)_ zEDJ4=u!SeQt364S6D8Xq4^KTY;ZLqZ{!sT*D?k-5PHbr1jGEJ#|Ii3GE6iHyCf z(ZDSdArX8fMcu^7opu&PEx;sjdQ^7uL&M;qaF?BltK$o3)(+M7LN!TiUyG8CwL#Lk z7WF5aN!QvS@2MNdrm0=8VQ6k3J}_-|w3Rx&l%VqMj!b|?Zg*yyK<--J33B&x4HJkx z{`xdLb2|(Jscl+xZE*OZFgLht<7w6uC?FA;7Z9MIUsF(^jw85J#V6GGt!e1oy%yy$ zQ8R|yq`%vYb_y-p^#p8&7fLqekx|p31z{X0K_YMf+ZZN$ps#j(WhVaSj8YJ)-~_-3 zV4DR)@$Fz+Id~hDs!%te62wZCSX&i338+wAxZJLyOYytY*T%o=OLD8oDlt?2rapCKQ()9-AeEsE@o zv?Q_&ybP=*Enw;(H5jSX(d~xRH!gu-(|xyVbPq)ZQLo=bHxazd9>@Vut=6* zlQzO59#tZuDTpvO0Hy61uD@)As_%kPRX!-3pz4OejCDKX`;3=T_}Dc5Vw#%6yW%I0 zlkuzL*T!o%8SA2SKX=B9)&vSbcKd4*rcIK^ova^WIs;9;`gbhQiC5W77>|Ho(TXawqLw^@j$b~-zpF1Y)hLpA+Q*KW9Rr?Y?9?{o#_#aX*Y@%@jKpZ~{XmN`FfNxq7} z>vKC8Dz+*KP}#%{C+?M>m*IvVzd!-p&`mdU<;jeUCSLY7{H@S(yfP0378c=WF2-sp zz!w&wz<-hq4*bV2gA5gxvXOI>{LhkMR*Y~S3T_-f^Um3+i*HR$gJ|U|hnsj+jT_dRZw=z+QYkl@_2n+k z?Z|!Fd@ASuz@GDc^eA^>&Ix+^>R_(un6%omxLzhRp0DPFmagm1>fHYH_uroU^5gw` N#e4Uk!2HYhKLJwFou~i+ delta 1365 zcmZ8h&2Jk;6rcU@+HyXdn)Uc2>q(p@abk(KxdegQUZ_%Qg%Aj;N*wmUA$x-h;*?$6 zc@c`RWXrM?ak5g)VIqoB1s}KtkszDX{s;5`5vT&~1<1isc;nQ;VzoOn@BQBUz2AIo z-Ph{A=DqXw`)O6ZLxzt~AW}0Ql<<3o-D0GE?zCfkIlfq^tB>CJBKRAYd&J>{x(bk9 zJSYePge%fi&`hJLa8;Trnqz3HT$85eh)>`(v=eP2v__&USR>(e#d|oE36AWMXV4?P z>;=KbDXL7|uNh1bY}(|z51|%i-D4K~<#4l9DnW`TA1U!Tbs3~NjmrlzoJuImGt~VI zt*i@>6?%=ZXDZ`qWa6os;jw+IO`c~Y;ZMOo&X6dNM3TBxqV6&B(?WkpDV?LVEy$w4 zHo4|xS9Hg*FwRrdjX}y@FFX6>g%zedD?Jj%cB!i!*iXuQ)@!YBtF_8=t)j!H)_)!A zX+c(~Fe`orizWPlfNvoOIrg~Br(jG5jrY_bB{U3r`6`II`C-Jkv%9fRc66+E7prN( zLT457og!dQT@!9~ic-@eyDW1(^rC{aR_uQHO45(z%>##9r}=t{=S~;uH*tLHa017R zhf$$`ZqHY62X&kca_hnCo#OiMN~?INOBz`~14|ZAP|mR|5SIX3^4UkeU8$h(>CUQ5 zS-nc}q*ME!6MX|YJuCRi!Ns_VC1=`XP}2y~I3KJ5IXq5GFqlVObL?@|zFqApBdCKY zK~%p+)e%&`%JoKIZ3Lc1Si@xPI$0k<-$hgzE&NJusM&j!y^WKl!yDqVG1I+%?R(Wt zSQ_jM&!LyI#>^S(^7(``tj3Jo607^$FLS|*&4cD2+Cz`P1WbVmNuc6WhzbrdF%1P+ zW=&rhxc3Asks0hdYMJFxuy|}}CJ{A(vTuBDN^0|ra@u3TpXg6wxQWOa#rs6$M2689 zgJ=dOr_^(GkQpzpGcIICU1pG4gyAc!n!oog^M~W2;D4<2!(A` z+2>`JudpvGd@}4K^`z}?Z|rXDZN$zdgj!2H82%&P#9NsN(+Az>3B0QRwO9Al{$ZP& zg=jD?XGrn56+EEm$psp_@S9O%?vBaLz>wD&lH8PPrD{=+B;^bS$|rhn1;*JFs+hn< zm~1{VmY;ra+&DVPJpA}5$lQwpWK7w)v|V*mgE diff --git a/atlantico/atlantico.o b/atlantico/atlantico.o index 69d69f7fb5422d175baa6a1281cf720cad50c01a..f51db0d091d3254afd46b78d0fd46a8d5fda5b6d 100644 GIT binary patch literal 75050 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 literal 69980 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 diff --git a/atlantico/state.inc b/atlantico/state.inc new file mode 100644 index 0000000..3a05801 --- /dev/null +++ b/atlantico/state.inc @@ -0,0 +1,6 @@ +.enum State + TITLESCREEN + PLAYING + GAMEOVER + PAUSED +.endenum diff --git a/atlantico/titlescreen.chr b/atlantico/titlescreen.chr index 7da32cfb0ccc263e0501555d1a466a0412fdfc05..90b5dafb8b9362f365d60ca1989206051a581d11 100755 GIT binary patch delta 248 zcmZp0XmAi{_y-36|2Klc|BV8QO#BTE4IL8}9B_E>;m3~;4-QN=WID8&iTNLs0|UeV zRsVs21bQ`8J(%9?z^2SS*+5W)odG2L|NmrtLD9+CqMQ?ZQzo&qPG%K)Jvl>^XJW6) xW(DB~YymJ=!RQZA0MQI08NdL>|L_5o4-)_L^Yi!j&mTX0@bK~X&4TP3SOKDpnoa-! delta 185 zcmZp0XmAi`}1S71Di7Upy5ixt?}0McGw!TSwyO$wD{qn7Y%ssy{ro3M9&8`>%}U5 zZ{r8+L$!sPe||ljV8@9YtY-9 oTiWp#Xm{CVzXQDvIM*)d