Originally Posted by R. Belmont
Thanks Rob. Does the entire font get loaded in one VBL? This is something that would be interesting to test on hardware.

Ahh, my description using the word 'all' was a little bit misleading. It looks like it is able to load 8 characters x 8 rows each VBL period. This lines up with the number of screen holes available. I relooked at an example of font loading code that i recently disassembled (makes more sense now), and they preload the 8 characters font data, enable the chrwrt, and then wait for pos VBL, then neg VLB, then disable chrwrt. This lines up with the thinking on how the video scanning loads them. See below for code snip of this.

/Rob

ldx #$90 ;msb of address for font data
lda #$00 ;lsb of address for font data
jsr L0CAB ;go load font
jmp L0E00

; load character set
L0CAB: sta SRCPTR
stx SRCPTR+1
lda #$00
sta L1401
sta STARTBLK
lda #$18 ;disable VBL interupts
sta E_IER
lda E_PCR
and #$0f
ora #$30 ;set CB1 positive edge, CB2 negative edge
sta E_PCR
@L0CC5: lda #$07
sta ENDBLK
@L0CC9: jsr @L0CFE
inc STARTBLK
lda SRCPTR
clc
adc #$08
sta SRCPTR
bcc @L0CD9
inc $01
@L0CD9: dec ENDBLK
bpl @L0CC9
bit SETENCWRT ;enable font loading
ldx #$18 ;clear both CB1 & CB2 flags
stx E_IFR
@L0CE5: lda E_IFR
and #$10 ;look for CB1 flag, pos edge start VBL
beq @L0CE5
stx E_IFR
@L0CEF: lda E_IFR
and #$18 ;look for CB1 & CB2 flag, CB2 = neg edge end VBL
beq @L0CEF
bit CLRENCWRT ;disable font loading
lda STARTBLK
bpl @L0CC5
rts