1
2console_pos     = $7f2
3console_pos_h   = $7f3
4
5; Print char A to console
6; Preserved: A, X, Y
7print_char:
8	jsr wait_vbl    ; wait for safe access
9print_char_no_wait:
10	pha
11	lda console_pos_h
12	sta $2006
13	inc console_pos
14	lda console_pos
15	sta $2006
16	lda #0      ; restore scroll
17	sta $2005
18	sta $2005
19	pla
20	sta $2007
21	rts
22	.code
23
24; Go to next line
25; Preserved: A, X, Y
26console_newline:
27	pha
28	lda console_pos
29	and #$e0
30	clc
31	adc #$21
32	sta console_pos
33	lda console_pos_h
34	adc #0
35	sta console_pos_h
36	pla
37	rts
38	.code
39
40; Initialize console
41init_console:
42	lda #$81
43	sta console_pos
44	lda #$20
45	sta console_pos_h
46
47	jsr wait_vbl    ; init ppu
48	lda #0
49	sta $2000
50	sta $2001
51
52	lda #$3f        ; load palette
53	jsr set_vpage
54	lda #15     ; bg
55	ldx #48     ; fg
56	ldy #8
57pal:    sta $2007
58	stx $2007
59	stx $2007
60	stx $2007
61	dey
62	bne pal
63
64	lda #$02        ; load tiles
65	jsr set_vpage
66	lda #chr_data.lsb
67	sta <$f0
68	lda #chr_data.msb
69	sta <$f1
70	ldy #0
71	lda #59     ; 59 chars in data
72	sta <$f2
73chr_loop:
74	ldx #8
75	lda #0
76:   sta $2007
77	dex
78	bne -
79
80	ldx #8
81:   lda ($f0),y
82	iny
83	sta $2007
84	dex
85	bne -
86
87	tya
88	bne +
89	inc <$f1
90:   dec <$f2
91	bne chr_loop
92
93	lda #32
94	jsr fill_nametable
95
96	jsr wait_vbl    ; enable ppu
97	lda #0
98	sta $2005
99	sta $2005
100	lda #$0a
101	sta $2001
102	rts
103	.code
104
105chr_data:
106	.incbin "chr.bin"
107
108