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_set_2bpp_data.s
1 .include "global.s"
2
3 .title "VRAM utilities"
4 .module VRAMUtils
5
6 .ez80
7
8 .area _INITIALIZED
9 __current_2bpp_palette::
10 .ds 0x02
11
12 .area _INITIALIZER
13 .dw 0b0011001000010000
14
15 .area _HOME
16
17 ; void set_tile_2bpp_data(uint16_t start, uint16_t ntiles, const void *src, uint16_t palette) __z88dk_callee __preserves_regs(iyh,iyl);
18 _set_tile_2bpp_data::
19 DISABLE_VBLANK_COPY ; switch OFF copy shadow SAT
20
21 pop de ; pop ret address
22 pop hl
23
24 add hl, hl
25 add hl, hl
26 add hl, hl
27 add hl, hl
28 add hl, hl
29
30 ld bc, #.VDP_VRAM
31 add hl, bc
32
33 VDP_WRITE_CMD h, l
34
35 ex de, hl ; hl = ret
36
37 pop bc ; bc = ntiles
38 pop de ; de = src
39 ex (sp), hl ; hl = palette
40
41 ex de, hl
42
43 inc b
44 inc c
45 push ix
46 push iy
47 ld iy, #-4
48 add iy, sp
49 ld sp, iy
50 push bc
51 jr 2$
52
53 1$:
54 ex (sp), hl
55
56 ld ixh, #8
57 6$:
58 ld c, (hl)
59 inc hl
60 ld b, (hl)
61 inc hl
62
63 ld ixl, #8
64 5$:
65 xor a
66 srl b
67 rla
68 srl c
69 rla
70
71 push de ; save palette
72
73 inc a
74 dec a
75 jr nz, 10$
76 ; zero
77 ld a, e
78 jr 13$
79 10$:
80 dec a
81 jr nz, 11$
82 ; one
83 ld a, e
84 jr 14$
85 11$:
86 dec a
87 jr nz, 12$
88 ; two
89 ld a, d
90 jr 13$
91 12$:
92 ;three
93 ld a, d
94 14$:
95 rra
96 rra
97 rra
98 rra
99 13$:
100 and #0x0F
101
102 rra
103 rr 0 (iy)
104 rra
105 rr 1 (iy)
106 rra
107 rr 2 (iy)
108 rra
109 rr 3 (iy)
110
111 pop de ; restore palette
112
113 dec ixl
114 jr nz, 5$
115
116 ld a, 0 (iy)
117 out (.VDP_DATA), a
118 ld a, 1 (iy)
119 out (.VDP_DATA), a
120 ld a, 2 (iy)
121 out (.VDP_DATA), a
122 ld a, 3 (iy)
123 out (.VDP_DATA), a
124
125 dec ixh
126 jr nz, 6$
127 2$:
128 ex (sp), hl
129
130 dec l
131 jr nz, 1$
132
133 dec h
134 jr nz, 1$
135
136 ld iy, #6
137 add iy, sp
138 ld sp, iy
139 pop iy
140 pop ix
141
142 ENABLE_VBLANK_COPY ; switch ON copy shadow SAT
143
144 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.