gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
gbdk-lib/libc/asm/sm83/bcd.s
1 ;--------------------------------------------------------------------------
2 ; bcd.s
3 ;
4 ; Copyright (C) 2020, Tony Pavlov
5 ;
6 ; This library is free software; you can redistribute it and/or modify it
7 ; under the terms of the GNU General Public License as published by the
8 ; Free Software Foundation; either version 2, or (at your option) any
9 ; later version.
10 ;
11 ; This library is distributed in the hope that it will be useful,
12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ; GNU General Public License for more details.
15 ;
16 ; You should have received a copy of the GNU General Public License
17 ; along with this library; see the file COPYING. If not, write to the
18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
19 ; MA 02110-1301, USA.
20 ;
21 ; As a special exception, if you link this library with other files,
22 ; some of which are compiled with SDCC, to produce an executable,
23 ; this library does not by itself cause the resulting executable to
24 ; be covered by the GNU General Public License. This exception does
25 ; not however invalidate any other reasons why the executable file
26 ; might be covered by the GNU General Public License.
27 ;--------------------------------------------------------------------------
28
29 .module bcd
30
31 .area _HOME
32
33 ; void uint2bcd(uint16_t i, BCD * value) __naked
34 _uint2bcd::
35 lda HL, 2(SP)
36 ld A, (HL+) ; DE: uint
37 ld E, A
38 ld A, (HL+)
39 ld D, A
40 ld A, (HL+)
41 ld H, (HL)
42 ld L, A ; HL: dest
43
44 push BC
45
46 ; clear value
47 xor A
48 ld BC, #-4
49
50 ld (HL+), A
51 ld (HL+), A
52 ld (HL+), A
53 ld (HL+), A
54 add HL, BC
55
56 ld B, #16
57 1$:
58 sla E
59 rl D
60
61 ld A, (HL)
62 adc A
63 daa
64 ld (HL+), A
65 ld A, (HL)
66 adc A
67 daa
68 ld (HL+), A
69 ld A, (HL)
70 adc A
71 daa
72 ld (HL-), A
73
74 dec HL
75
76 dec B
77 jr NZ, 1$
78
79 pop BC
80 ret
81
82 ;void bcd_add(BCD * sour, BCD * value) __naked
83 _bcd_add::
84 lda HL, 5(SP)
85 ld D, (HL)
86 dec HL
87 ld E, (HL) ; DE: value
88 dec HL
89 ld A, (HL-)
90 ld L, (HL)
91 ld H, A ; HL: sour
92
93 or A ; clear C, HC
94
95 ld A,(DE)
96 add (HL)
97 daa
98 ld (HL+), A
99 inc DE
100
101 ld A,(DE)
102 adc (HL)
103 daa
104 ld (HL+), A
105 inc DE
106
107 ld A,(DE)
108 adc (HL)
109 daa
110 ld (HL+), A
111 inc DE
112
113 ld A,(DE)
114 adc (HL)
115 daa
116 ld (HL+), A
117
118 ret
119
120 ; void bcd_sub(BCD * sour, BCD * value) __naked
121 _bcd_sub::
122 lda HL, 2(SP)
123 ld E, (HL)
124 inc HL
125 ld D, (HL) ; DE: sour
126 inc HL
127 ld A, (HL+)
128 ld H, (HL)
129 ld L, A ; HL: value
130
131 or A ; clear C, HC
132
133 ld A,(DE)
134 sub (HL)
135 daa
136 ld (DE), A
137 inc DE
138 inc HL
139
140 ld A,(DE)
141 sbc (HL)
142 daa
143 ld (DE), A
144 inc DE
145 inc HL
146
147 ld A,(DE)
148 sbc (HL)
149 daa
150 ld (DE), A
151 inc DE
152 inc HL
153
154 ld A,(DE)
155 sbc (HL)
156 daa
157 ld (DE), A
158
159 ret
160
161 ;uint8_t bcd2text(BCD * bcd, uint8_t tile_offset, uint8_t * buffer) __naked
162 _bcd2text::
163 push BC
164
165 lda HL, 4(SP)
166 ld E, (HL)
167 inc HL
168 ld D, (HL) ; DE: bcd
169 inc HL
170 ld C, (HL) ; C: digit offset
171 inc HL
172 ld A, (HL+)
173 ld H, (HL)
174 ld L, A ; HL: buffer
175
176 inc DE
177 inc DE
178 inc DE
179
180 ld B, #0x0f
181
182 ld A, (DE)
183 swap A
184 and B
185 add C
186 ld (HL+), A
187 ld A, (DE)
188 and B
189 add C
190 ld (HL+), A
191 dec DE
192
193 ld A, (DE)
194 swap A
195 and B
196 add C
197 ld (HL+), A
198 ld A, (DE)
199 and B
200 add C
201 ld (HL+), A
202 dec DE
203
204 ld A, (DE)
205 swap A
206 and B
207 add C
208 ld (HL+), A
209 ld A, (DE)
210 and B
211 add C
212 ld (HL+), A
213 dec DE
214
215 ld A, (DE)
216 swap A
217 and B
218 add C
219 ld (HL+), A
220 ld A, (DE)
221 and B
222 add C
223 ld (HL+), A
224 dec DE
225
226 xor A
227 ld (HL+), A
228
229 ld D, A
230 ld E, #0x08
231
232 pop BC
233 ret
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.