Change NMI to use only necessary, the rest in mainloop
This commit is contained in:
parent
21ae3b4cc6
commit
ff800acbfc
BIN
spaceship.nes
Normal file
BIN
spaceship.nes
Normal file
Binary file not shown.
BIN
src/controllers.o
Normal file
BIN
src/controllers.o
Normal file
Binary file not shown.
BIN
src/reset.o
Normal file
BIN
src/reset.o
Normal file
Binary file not shown.
@ -9,35 +9,43 @@
|
|||||||
.import read_controller
|
.import read_controller
|
||||||
|
|
||||||
.proc nmi_handler
|
.proc nmi_handler
|
||||||
|
|
||||||
|
PHP
|
||||||
|
PHA
|
||||||
|
TXA
|
||||||
|
PHA
|
||||||
|
TYA
|
||||||
|
PHA
|
||||||
|
|
||||||
|
; copy sprite data to OAM
|
||||||
LDA #$00
|
LDA #$00
|
||||||
STA OAMADDR
|
STA OAMADDR
|
||||||
LDA #$02
|
LDA #$02
|
||||||
STA OAMDMA
|
STA OAMDMA
|
||||||
|
|
||||||
;Update tiles *after* DMA transfer
|
; set PPUCTRL
|
||||||
JSR update_player
|
LDA ppuctrl_settings
|
||||||
JSR draw_player
|
|
||||||
JSR read_controller
|
|
||||||
|
|
||||||
|
|
||||||
LDA scroll
|
|
||||||
CMP #$00
|
|
||||||
BNE set_scroll_positions
|
|
||||||
|
|
||||||
LDA ppucrtl_settings
|
|
||||||
EOR #%00000010
|
|
||||||
STA ppucrtl_settings
|
|
||||||
STA PPUCTRL
|
STA PPUCTRL
|
||||||
LDA #240
|
|
||||||
STA scroll
|
|
||||||
|
|
||||||
set_scroll_positions:
|
; set scroll values
|
||||||
LDA #$00
|
LDA #$00 ; X scroll first
|
||||||
STA PPUSCROLL
|
STA PPUSCROLL
|
||||||
DEC scroll
|
|
||||||
LDA scroll
|
LDA scroll
|
||||||
STA PPUSCROLL
|
STA PPUSCROLL
|
||||||
|
|
||||||
|
; all done
|
||||||
|
LDA #$00
|
||||||
|
STA sleeping
|
||||||
|
|
||||||
|
LDA#$00
|
||||||
|
STA sleeping
|
||||||
|
|
||||||
|
PLA
|
||||||
|
TAY
|
||||||
|
PLA
|
||||||
|
TAX
|
||||||
|
PLA
|
||||||
|
PLP
|
||||||
RTI
|
RTI
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -160,9 +168,6 @@ done_checking:
|
|||||||
.export main
|
.export main
|
||||||
.proc main
|
.proc main
|
||||||
|
|
||||||
LDA #239
|
|
||||||
STA scroll
|
|
||||||
|
|
||||||
LDX PPUSTATUS
|
LDX PPUSTATUS
|
||||||
LDX #$3f
|
LDX #$3f
|
||||||
STX PPUADDR
|
STX PPUADDR
|
||||||
@ -236,7 +241,7 @@ insideloop2:
|
|||||||
BNE outsideloop2
|
BNE outsideloop2
|
||||||
|
|
||||||
LDA #%10010000
|
LDA #%10010000
|
||||||
STA ppucrtl_settings
|
STA ppuctrl_settings
|
||||||
STA PPUCTRL
|
STA PPUCTRL
|
||||||
|
|
||||||
vblankwait: ; wait for another vblank before continuing
|
vblankwait: ; wait for another vblank before continuing
|
||||||
@ -247,8 +252,34 @@ vblankwait: ; wait for another vblank before continuing
|
|||||||
STA PPUCTRL
|
STA PPUCTRL
|
||||||
LDA #%00011110 ; turn on screen
|
LDA #%00011110 ; turn on screen
|
||||||
STA PPUMASK
|
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
|
.endproc
|
||||||
|
|
||||||
.segment "ZEROPAGE"
|
.segment "ZEROPAGE"
|
||||||
@ -257,11 +288,30 @@ player_y: .res 1
|
|||||||
pointerLo: .res 1
|
pointerLo: .res 1
|
||||||
pointerHi: .res 1
|
pointerHi: .res 1
|
||||||
scroll: .res 1
|
scroll: .res 1
|
||||||
ppucrtl_settings: .res 1
|
ppuctrl_settings: .res 1
|
||||||
pad1: .res 1
|
pad1: .res 1
|
||||||
.exportzp player_x, player_y
|
.exportzp player_x, player_y
|
||||||
.exportzp pad1
|
.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"
|
.segment "RODATA"
|
||||||
palettes: .incbin "background.pal"
|
palettes: .incbin "background.pal"
|
||||||
|
|
||||||
|
BIN
src/spaceship.o
Normal file
BIN
src/spaceship.o
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user