gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
gbdk-lib/libc/targets/sm83/gb_decompress.s
1 ; GB-Deompress routine
2 ; Compatible with GBTD
3
4 .include "global.s"
5
6 .title "GB Decompress"
7 .module GBDecompress
8
9 .area _CODE
10
11 _gb_decompress::
12 ld h,d
13 ld l,e
14 ld d,b
15 ld e,c
16
17 ; hl = source; de = dest
18 gb_decompress::
19 push de
20 1$:
21 ld a,(hl+) ; load command
22 or a
23 jr z,9$ ; exit, if last byte
24 bit 7,a
25 jr nz,5$ ; string functions
26 bit 6,a
27 jr nz,3$
28 ; RLE byte
29 and #63 ; calc counter
30 inc a
31 ld b,a
32 ld a,(hl+)
33 2$:
34 ld (de),a
35 inc de
36 dec b
37 jr nz,2$
38 jr 1$ ; next command
39 3$: ; RLE word
40 and #63
41 inc a
42 ld b,(hl) ; load word into bc
43 inc hl
44 ld c,(hl)
45 inc hl
46 4$:
47 push af
48 ld a,b ; store word
49 ld (de),a
50 inc de
51 ld a,c
52 ld (de),a
53 inc de
54 pop af
55 dec a
56 jr nz,4$
57 jr 1$ ; next command
58 5$:
59 bit 6,a
60 jr nz,7$
61 ; string repeat
62 and a,#63
63 inc a
64 push hl
65 ld c,(hl)
66 inc hl
67 ld b,(hl)
68 ld h,d
69 ld l,e
70 add hl,bc
71 ld b,a
72 6$:
73 ld a,(hl+)
74 ld (de),a
75 inc de
76 dec b
77 jr nz,6$
78 pop hl
79 inc hl
80 inc hl
81 jr 1$ ; next command
82 7$: ; string copy
83 and #63
84 inc a
85 ld b,a
86 8$:
87 ld a,(hl+)
88 ld (de),a
89 inc de
90 dec b
91 jr nz,8$
92 jr 1$ ; next command
93 9$:
94 pop hl
95 ld a, e
96 sub l
97 ld c, a
98 ld a, d
99 sbc h
100 ld b, a
101
102 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.