diff --git a/spaceship.nes b/spaceship.nes new file mode 100644 index 0000000..3acfbf4 Binary files /dev/null and b/spaceship.nes differ diff --git a/src/controllers.o b/src/controllers.o new file mode 100644 index 0000000..4a695eb Binary files /dev/null and b/src/controllers.o differ diff --git a/src/reset.o b/src/reset.o new file mode 100644 index 0000000..d6b603c Binary files /dev/null and b/src/reset.o differ 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 0000000..0f4aef0 Binary files /dev/null and b/src/spaceship.o differ