aboutsummaryrefslogtreecommitdiff
path: root/shared/clear.s
diff options
context:
space:
mode:
Diffstat (limited to 'shared/clear.s')
-rw-r--r--shared/clear.s39
1 files changed, 39 insertions, 0 deletions
diff --git a/shared/clear.s b/shared/clear.s
new file mode 100644
index 0000000..a099387
--- /dev/null
+++ b/shared/clear.s
@@ -0,0 +1,39 @@
+;; Clear the first nametable by resetting it to the default tile ID. This is a
+;; rather drastic measure only to be done on examples that don't actually load
+;; columns in "clever" ways, but they just want a clean slate.
+.macro CLEAR_SCREEN
+ ldy #$20
+ jsr clear_screen_y
+.endmacro
+
+;; Clear the given two nametables. `ONE` and `OTHER` have to be the high byte
+;; for each nametable to clear. For example, on an horizontal scrolling game:
+;; `CLEAR_SCREENS $20, $24`.
+.macro CLEAR_SCREENS ONE, OTHER
+ ldy #ONE
+ jsr clear_screen_y
+
+ ldy #OTHER
+ jsr clear_screen_y
+.endmacro
+
+;; Clear the nametable with the high byte as defined in the `y` register.
+.proc clear_screen_y
+ bit $2002
+
+ ldx #$FF
+@loop:
+ sty $2006
+ stx $2006
+ lda #$00
+ sta $2007
+
+ dex
+ bne @loop
+
+ iny
+ cpy #$24
+ bne @loop
+
+ rts
+.endproc