/
generic_console.asm
136 lines (120 loc) · 2.56 KB
/
generic_console.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
;
;
SECTION code_clib
PUBLIC generic_console_cls
PUBLIC generic_console_printc
PUBLIC generic_console_scrollup
PUBLIC generic_console_set_ink
PUBLIC generic_console_set_paper
PUBLIC generic_console_set_attribute
PUBLIC generic_console_xypos_graphics
EXTERN generic_console_flags
EXTERN generic_console_font32
EXTERN generic_console_udg32
EXTERN CRT_FONT
EXTERN CONSOLE_COLUMNS
EXTERN CONSOLE_ROWS
defc DISPLAY=$c03c+4
generic_console_set_ink:
generic_console_set_paper:
generic_console_set_attribute:
ret
generic_console_cls:
ld hl, $c000
ld de, $c001
ld bc, 8191
ld (hl), 0
ldir
ret
; c = x
; b = y
; a = d character to print
; e = raw
generic_console_printc:
call generic_console_xypos_graphics
ex de, hl ;de = destination
ld bc, (generic_console_font32)
ld l, a
ld h, 0
bit 7, l
jr z, not_udg
res 7, l
ld bc, (generic_console_udg32)
inc b
not_udg:
add hl, hl
add hl, hl
add hl, hl
add hl, bc
dec h ;-32 characters
ex de, hl ;hl = screen, de = font
ld a, (generic_console_flags)
rlca
sbc a
ld c, a ;c = 0/c = 255 = inverse
ld b, 8
loop:
push bc
ld a, (generic_console_flags)
bit 4, a
ld a, (de)
jr z, not_bold
ld b, a
rrca
or b
not_bold:
xor c
ld c, a
rlca
rlca
xor c
and 0xaa
xor c
ld c, a
rlca
rlca
rlca
rrc c
xor c
and 0x66
xor c
ld (hl), a
inc de
ld bc, 30
add hl, bc
pop bc
djnz loop
ld a, (generic_console_flags)
bit 3, a
ret z
ld bc, -30
add hl, bc
ld (hl), 255
ret
; Calculate the address for the graphics mode
generic_console_xypos_graphics:
ld hl, DISPLAY-30*8
ld de, 30*8
inc b
generic_console_xypos_graphics_1:
add hl, de
djnz generic_console_xypos_graphics_1
add hl, bc
ret
generic_console_scrollup:
push de
push bc
ld de, DISPLAY
ld hl, DISPLAY+30*8
ld bc, CONSOLE_ROWS*30*8
ldir
ex de, hl
ld d, h
ld e, l
inc de
ld bc, 30*8-1
ld (hl), 0
ldir
pop bc
pop de
ret