gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
gbdk-lib/libc/targets/z80/sms_metasprites.s
1 .include "global.s"
2
3 .title "Metasprites"
4 .module Metasprites
5
6 .ez80
7
8 .area _DATA
9
10 ___current_metasprite::
11 .ds 0x02
12 ___current_base_tile::
13 .ds 0x01
14
15 .area _INITIALIZED
16 ___render_shadow_OAM::
17 .ds 0x01
18
19 .area _INITIALIZER
20 .db #>_shadow_OAM
21
22 .area _CODE
23
24 ; uint8_t __move_metasprite(uint8_t id, int16_t x, int16_t y);
25 ; a == id
26 ; de == x
27 ; (sp+2) == y
28 ___move_metasprite::
29 ld iyl, a
30
31 pop hl
32 pop bc ; de = x, bc = y
33 push hl
34
35 push af
36 push ix
37
38 ld ix, (___current_metasprite)
39
40 ld a, (___render_shadow_OAM)
41 ld iyh, a
42 1$:
43 ld a, 0(ix) ; dy
44 cp #0x80
45 jp z, 2$
46
47 add a, a
48 sbc a, a
49 ld h, a
50 ld l, 0(ix)
51 inc ix
52 add hl, bc
53 ld b, h
54 ld c, l
55
56 ld a, #0x20
57 add l
58 ld l, a
59 adc h
60 sub l
61 jp nz, 5$
62 ld a, l
63 cp #(0x20 + 0xC0)
64 jp c, 6$
65 5$:
66 ld 0(iy), #0xC0
67 jp 7$
68 6$:
69 ld 0(iy), c
70 7$:
71 ld a, 0(ix) ; dx
72 add a, a
73 sbc a, a
74 ld h, a
75 ld l, 0(ix)
76 inc ix
77 add hl, de
78 ex de, hl
79 ld a, d
80 or a
81 jp nz, 4$
82
83 ld a, iyl
84 rlca
85 ld iyl, a
86
87 ld 0x40(iy), e
88
89 ld a, (___current_base_tile)
90 add 0(ix) ; tile
91 inc ix
92 ld 0x41(iy), a
93
94 ld a, iyl
95 rrca
96 inc a
97 ld iyl, a
98
99 jp 1$
100 4$:
101 ld 0(iy), #0xC0
102 inc ix
103 inc iyl
104 jp 1$
105 2$:
106 pop ix
107 pop bc
108
109 ld a, iyl
110 sub b
111 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.