aboutsummaryrefslogtreecommitdiff
path: root/scroll/include/reset.s
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <mikisabate@gmail.com>2025-03-10 22:55:41 +0100
committerMiquel Sabaté Solà <mikisabate@gmail.com>2025-03-10 23:22:22 +0100
commitba0cf9e5293f258c58ced1fcc47f558e7419dae4 (patch)
treeb620422506e5b8a951f7e52756c116bfb1498ea3 /scroll/include/reset.s
parent1a74e6a1856673072a61abd0861759901bc2d939 (diff)
downloadcode.nes-ba0cf9e5293f258c58ced1fcc47f558e7419dae4.tar.gz
code.nes-ba0cf9e5293f258c58ced1fcc47f558e7419dae4.zip
Provide an example on multiscreen scrolling
Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com>
Diffstat (limited to 'scroll/include/reset.s')
-rw-r--r--scroll/include/reset.s62
1 files changed, 62 insertions, 0 deletions
diff --git a/scroll/include/reset.s b/scroll/include/reset.s
new file mode 100644
index 0000000..2402795
--- /dev/null
+++ b/scroll/include/reset.s
@@ -0,0 +1,62 @@
+;; Check `basics/sprite.s` for a deeper look on the logic below.
+.proc reset
+ sei
+ cld
+
+ ldx #$40
+ stx APU::FRAME_COUNTER
+
+ ldx #$FF
+ txs
+
+ inx
+ stx PPU::CONTROL
+ stx PPU::MASK
+ stx APU::DMC
+
+@vblankwait1:
+ bit PPU::STATUS
+ bpl @vblankwait1
+
+ ldx #0
+ lda #0
+@ram_reset_loop:
+ sta $000, x
+ sta $100, x
+ sta $300, x
+ sta $400, x
+ sta $500, x
+ sta $600, x
+ sta $700, x
+ inx
+ bne @ram_reset_loop
+
+ lda #$EF
+@sprite_reset_loop:
+ sta $200, x
+ inx
+ bne @sprite_reset_loop
+
+ lda #$00
+ sta OAM::ADDR
+ lda #$02
+ sta OAM::DMA
+
+@vblankwait2:
+ bit PPU::STATUS
+ bpl @vblankwait2
+
+ lda #$3F
+ sta PPU::ADDRESS
+ lda #$00
+ sta PPU::ADDRESS
+
+ lda #$0F
+ ldx #$20
+@palettes_reset_loop:
+ sta PPU::DATA
+ dex
+ bne @palettes_reset_loop
+
+ jmp main
+.endproc