gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
gbdk-lib/libc/asm/z80/__ultobcd.s
1 ;--------------------------------------------------------------------------
2 ; __ultobcd.s
3 ;
4 ; Copyright (C) 2020, Sergey Belyashov
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 .area _CODE
30
31 .globl ___ultobcd
32 ;
33 ; void __ultobcd (unsigned long v, unsigned char bcd[5])
34 ; __ultobcd converts v to BCD representation to the bcd.
35 ; bcd[] will contain BCD value.
36 ;
37 ___ultobcd:
38 push ix
39 ld ix, #0
40 add ix, sp
41 ld bc, #0x2000
42 ;
43 ;--- begin speed optimization
44 ;
45 ld l, 4 (ix)
46 ld h, 5 (ix)
47 ld e, 6 (ix)
48 ld d, 7 (ix)
49 ld a, e
50 or a, d
51 jr NZ, 101$
52 ;high 2 bytes are zero
53 ld b, #0x10
54 ex de, hl
55 101$:
56 ld a, d
57 or a, a
58 jr NZ, 102$
59 ;high byte is zero
60 ld d, e
61 ld e, h
62 ld h, l
63 ld a, #-8
64 add a, b
65 ld b, a
66 102$:
67 ld 4 (ix), l
68 ld 5 (ix), h
69 ld 6 (ix), e
70 ld 7 (ix), d
71 ;
72 ;--- end speed optimization
73 ;
74 ld hl, #0x0000
75 ld e, l
76 ld d, h
77 ; (ix+0)..(ix+3) - binary value
78 ; CDEHL - future BCD value
79 ; B - bits count (32)
80 103$:
81 sla 4 (ix)
82 rl 5 (ix)
83 rl 6 (ix)
84 rl 7 (ix)
85 ld a, l
86 adc a, a
87 daa
88 ld l, a
89 ld a, h
90 adc a, a
91 daa
92 ld h, a
93 ld a, e
94 adc a, a
95 daa
96 ld e, a
97 ld a, d
98 adc a, a
99 daa
100 ld d, a
101 ld a, c
102 adc a, a
103 daa
104 ld c, a
105 djnz 103$
106 ;
107 ld b, l
108 ld a, h
109 ld l, 8 (ix)
110 ld h, 9 (ix)
111 ld (hl), b
112 inc hl
113 ld (hl), a
114 inc hl
115 ld (hl), e
116 inc hl
117 ld (hl), d
118 inc hl
119 ld (hl), c
120 ;
121 pop ix
122 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.