From ff800acbfc62371a4da7f51f28492ee7cfb7be16 Mon Sep 17 00:00:00 2001 From: LinkHpp Date: Tue, 1 Apr 2025 08:17:37 +0200 Subject: [PATCH] Change NMI to use only necessary, the rest in mainloop --- spaceship.nes | Bin 0 -> 40976 bytes src/controllers.o | Bin 0 -> 831 bytes src/reset.o | Bin 0 -> 1014 bytes src/spaceship.asm | 100 ++++++++++++++++++++++++++++++++++------------ src/spaceship.o | Bin 0 -> 20433 bytes 5 files changed, 75 insertions(+), 25 deletions(-) create mode 100644 spaceship.nes create mode 100644 src/controllers.o create mode 100644 src/reset.o create mode 100644 src/spaceship.o diff --git a/spaceship.nes b/spaceship.nes new file mode 100644 index 0000000000000000000000000000000000000000..3acfbf4ed578bd9cf30d63af911863d79bb52bfe GIT binary patch literal 40976 zcmeI5e{37&8OI-=FZQ){a+fr9jGHFc%q30}XjTesA&U=VDic+xly=H8O-q>+LbXZR z773$ewu{;-0xpUMNC*jmqW)2Xf%W^D@`D4DjLv=MxvVX&pQ7B!voje^ZLi# zxs8){3<=Qp)%o7%*ZVxr`?23RxqtHD{SOBv7g;0m;es*OVJwthT$v+%&ZW<3#(<>r zrG2$PnbJ!nt?_x{`q`(^3}<4 zL*alI;_P(m8Odxn7PpW|I_pjPV!ODr*g@snQQws;RzOfGSl=jaQmm^i!Xd^SrMS zUqW%^JXbX0ODGC^T8S^A$n0q)zN!gcm-L0moJU`v^6fA5r0LaHmi6rC!lTzbnL}n9 zWu7!Q(*nIhZ??miblQg?T};%XI1bztj5DX?=g1 zk!G72@dFaaWpZXaz28n(I%u(jvR@s1=R~Q|P)Qq9ecN}dP5xeWQ?O6%WVyBH4z=wE zd(_RLJNb2&y5-irs=s%ydP{hp8tB`nZr!Fc%C3J(78O#S*dzjdfJ zv96x|X4{eotk-Hwo%8hc+ULIku=Nvj5y!jcEGgtz`MTCx*2}A6_aESp#v^w0$5sF8 zog5+J>;EcelEAokse0HVzQyzki^yzmccD=SERCX|J4ru}I79uAG0L`0(@j zmw8fRN3TEs8%20|H2OUQb`Sso5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH z0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5C8!X z009sH0T2KI5C8!X009sH0T2KI5C8!X009sH0T2KI5cuv8_(_`5qv`6uZMCLa|CXUD z)a=*JR-9Yyjzm(aioU_c!|ir&+Emf!(>#`zmaR=$~NbjI1A@Q;Lo4*$#{XFc9eQj#3~mHV~x ziQ@J93xz^~I{z43to))GE?K8@N=r{lazJdBf zULwO5?e5uD-CAu=M%dry?-0+alrB~Ex?0+fKR3COCGvG9a=B&i)-C=1ut9EbOQ%S) zl0QFm*G7*km)jTciCyGRzBd2b$vjbFCN-0wp`qx76BnXGL_-tF37)#Qf3V?$?c7(_ zaB;Yck{mHK#8Yx&Y-}P)-frH;r{^wmCT=YfSse7Sh}9|fY(QE8O*Z`%m(+1VBJDdcr;;b*Z#y}RaSnr5H)`=v{%my3^|4woK( z`D*fczw%{qCV1kwLX$6yFNr8B6iozB z$Xn#gx4`}Ei0sfe+C7xG&gD!?|1 z0^mND0N-JZX%$exO%NxDD&TwE0I}X;Jps&cAsrP+X(9#q2D8amfLXxLSdCg$!27&K z6)W7S0DeFj@Gr|XM8Kzb74ReOFy#RcP?2ewB0VC2Y4d_g7gQ#~sJj)_5c60T*$RF^ zvHqIwDB>DDdcD9OXN!e40!T3lCfXgK#OWob9VR*$Ajh)CDP04w!W54hOnDZG)8$Aw zO;ErUrZm^GOiN63+u6Sb>8QpcQNRX^!rctlR+v<#B1?sWUP`sgoNlwww<3boU@^Km zn$N<;{OD-12x@-ttT^)bcGZWCTK$%KL+wmMwZ7NbZH}AuM(%t(2>n?Y)TXmhqTe6r zo@23hHTOZ1-1RhX;6|i7wiWd>!*F=U&^#?+YhBJ|a-*xIbi3#Aoaxk)ZLc?U?sfJ( zg~>ASo`GRM>d9Og^rI2_3CCOFf@@l)?!_6~k!sR&e_YQjCjNN%|FYEKBpg0@5r*?w j5U&N(n24@R`K4-7-BLSJ zVJ3Pc)hGN!yi@#zxDtOY9*}w~;k@{FjYy1MiNJsS%}S}{=WlP`dlY{?`f~HRuE9Pi z&yh5prd3u^;vJqQ{=_<|!z2%pb`VMOl!RmMBYwAEm}8_pm1n&;)POJ~0a+ma$fLwRA@jWGp0bEj zMsUiAJb#}%i63&@zppqh`5Dh52mJfY0pcu21N+2Lk4!fve?k#x{Dh1Xnh;`lchX(c zRD_2)%7c7{13Vxa=Xb15J&=FY#nMAdLkg!t`XD`+C&;%rejUJGUF4qZ?ze(g1ppd%((Geq{ zIfxG}XF=VN5h?1$nt?bBnS#g_5k*1c5D(%x0h*#vt65oWR$J9}%xP^6SDfV~<4PhH zUo{qt^;+AAFDI5(Hdo?_Fd8e{jaJ)fv|F)Sqv9aWzRPP4r2Yz6;sCG=E2o$*+Ce73e$Eb0K?wTzW7nClrmSITCIeghkVnx6mw literal 0 HcmV?d00001 diff --git a/src/spaceship.asm b/src/spaceship.asm index 4c9fcfe..6fe4b49 100644 --- a/src/spaceship.asm +++ b/src/spaceship.asm @@ -9,35 +9,43 @@ .import read_controller .proc nmi_handler + + PHP + PHA + TXA + PHA + TYA + PHA + + ; copy sprite data to OAM LDA #$00 STA OAMADDR LDA #$02 STA OAMDMA - ;Update tiles *after* DMA transfer - JSR update_player - JSR draw_player - JSR read_controller - - - LDA scroll - CMP #$00 - BNE set_scroll_positions - - LDA ppucrtl_settings - EOR #%00000010 - STA ppucrtl_settings + ; set PPUCTRL + LDA ppuctrl_settings STA PPUCTRL - LDA #240 - STA scroll -set_scroll_positions: - LDA #$00 + ; set scroll values + LDA #$00 ; X scroll first STA PPUSCROLL - DEC scroll LDA scroll STA PPUSCROLL + ; all done + LDA #$00 + STA sleeping + + LDA#$00 + STA sleeping + + PLA + TAY + PLA + TAX + PLA + PLP RTI .endproc @@ -160,9 +168,6 @@ done_checking: .export main .proc main - LDA #239 - STA scroll - LDX PPUSTATUS LDX #$3f STX PPUADDR @@ -236,7 +241,7 @@ insideloop2: BNE outsideloop2 LDA #%10010000 - STA ppucrtl_settings + STA ppuctrl_settings STA PPUCTRL vblankwait: ; wait for another vblank before continuing @@ -247,8 +252,34 @@ vblankwait: ; wait for another vblank before continuing STA PPUCTRL LDA #%00011110 ; turn on screen STA PPUMASK -forever: - JMP forever + +mainloop: + ;Update tiles *after* DMA transfer + JSR update_player + JSR draw_player + JSR read_controller + + ; Check if PPUCTRL needs to change + LDA scroll ; did we reach the end of a nametable? + BNE update_scroll + ; if yes, + ; Update base nametable + LDA ppuctrl_settings + EOR #%00000010 ; flip bit 1 to its opposite + STA ppuctrl_settings + ; Reset scroll to 240 + LDA #240 + STA scroll +update_scroll: + DEC scroll + + ; Done processing; wait for next Vblank + INC sleeping +sleep: + LDA sleeping + BNE sleep + + JMP mainloop .endproc .segment "ZEROPAGE" @@ -257,11 +288,30 @@ player_y: .res 1 pointerLo: .res 1 pointerHi: .res 1 scroll: .res 1 -ppucrtl_settings: .res 1 +ppuctrl_settings: .res 1 pad1: .res 1 .exportzp player_x, player_y .exportzp pad1 +sleeping: .res 1 + +NUM_ENEMIES = 5 +; enemy object pool +enemy_x_pos: .res NUM_ENEMIES +enemy_y_pos: .res NUM_ENEMIES +enemy_x_vels: .res NUM_ENEMIES +enemy_y_vels: .res NUM_ENEMIES +enemy_flags: .res NUM_ENEMIES + +; player bullet pool +bullet_xs: .res 3 +bullet_ys: .res 3 + +;export all pools +.exportzp enemy_x_pos, enemy_y_pos +.exportzp enemy_x_vels, enemy_y_vels +.exportzp enemy_flags + .segment "RODATA" palettes: .incbin "background.pal" diff --git a/src/spaceship.o b/src/spaceship.o new file mode 100644 index 0000000000000000000000000000000000000000..0f4aef0ad33c614d67361d75d68d3daa34b46d04 GIT binary patch literal 20433 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 literal 0 HcmV?d00001