;; 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

    lda #$00
    ldx #$FF
@loop:
    sty $2006
    stx $2006
    sta $2007

    dex
    bne @loop

    iny
    cpy #$24
    bne @loop

    rts
.endproc
