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
137
138
139
140
141
142
143
144
145
146
|
;
; Bitmap font
;
;
; Write text on screen
;
; Expects a 4x8 font on "font" label.
;
; in: [a : x]: text to write
; b, y: (x, y) dst coords
put_text:
push y
push b
put_text_loop:
ld y, [a : x]
cmp y, 0
bz
jmp put_text_exit
sub y, 32
push a
push x
rol y, 5
ld x, y
and x, 31
and y, 224
ld a, >font
add a, x
ld x, <font
add x, y
bo
inc a
call put_text_c
pop x
pop a
inc x
bo
inc a
pop b
add b, 4
push b
jmp put_text_loop
put_text_exit:
pop b
pop y
ret
put_text_c:
; settings mode
ld y, 128
ld b, 0xb0
port b, y
; setup
inc b
; addr: char sprite
ld y, x
port b, y
ld y, a
port b, y
; x
ld y, [sp + 4]
port b, y
; y
ld y, [sp + 5]
port b, y
; w
ld y, 4
port b, y
; h
ld y, 8
port b, y
; blit
dec b
; write, transparent
ld y, 3
port b, y
ret
;
; in: [a : x]: number
; b, y: (x, y) dst coords
; stack: 1 byte digits
put_bcd_number:
push y
push b
put_bcd_number_loop:
ld y, [a : x]
inc x
bo
inc a
add y, 16
push a
push x
rol y, 5
ld x, y
and x, 31
and y, 224
ld a, >font
add a, x
ld x, <font
add x, y
bo
inc a
call put_text_c
pop x
pop a
pop b
add b, 4
push b
ld y, [sp + 4]
dec y
ld [sp + 4], y
bnz
jmp put_bcd_number_loop
pop b
pop y
ret
|