Character Set Accessibility Varies by VIC-II Bank

On page 124, the footnote states:

“The Commodore 64 character set is not available to the VIC-II chip in BANKS 1 and 3.”


Many programmers may know about video bank switching, but may not realize that if you switch to certain banks (specifically banks 1 or 3), the character generator ROM is not accessible to the VIC-II for screen rendering. This affects custom character graphics and can cause “garbage” characters if not properly managed.

Here’s some example Kick Assembler code that will simple switch to bank 1 and then set the charset memory pointers. Result is garbage written to your screen.

BasicUpstart2(start)

start:
   lda #%00000010 // Set VIC bank to BANK 1 (bit 1 = 1)
   sta $DD00 // CIA2 port A

   lda #$10 // Screen at $4000 (bits 4–7 = $10 << 6 = $4000)
   sta $D018 // Set VIC-II memory pointers (screen/charset)

   rts