gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
gbdk-lib/libc/targets/sm83/set_xy_t.s
1 .include "global.s"
2
3 .title "Set tile map"
4 .module SetTileMap
5
6 .area _INITIALIZED
7
8 __map_tile_offset::
9 .ds 0x01
10
11 .area _INITIALIZER
12
13 .db 0x00
14
15 .area _HOME
16
17 ;; Set window tile table from BC at XY = DE of size WH = HL
18 .set_xy_wtt::
19 PUSH HL ; Store WH
20 LDH A,(.LCDC)
21 AND #LCDCF_WIN9C00
22 JR Z,.is98
23 JR .is9c
24 ;; Set background tile table from (BC) at XY = DE of size WH = HL
25 .set_xy_btt::
26 PUSH HL ; Store WH
27 LDH A,(.LCDC)
28 AND #LCDCF_BG9C00
29 JR NZ,.is9c
30 .is98:
31 LD HL,#0x9800
32 JR .set_xy_tt
33 .is9c:
34 LD HL,#0x9C00
35 ;; Set background tile from (BC) at XY = DE, size WH on stack, to vram from address (HL)
36 .set_xy_tt::
37 PUSH BC ; Store source
38
39 SWAP E
40 RLC E
41 LD A,E
42 AND #0x03
43 ADD H
44 LD B,A
45 LD A,#0xE0
46 AND E
47 ADD D
48 LD C,A ; dest BC = HL + 0x20 * Y + X
49
50 POP HL ; HL = source
51 POP DE ; DE = WH
52 PUSH DE ; store WH
53 PUSH BC ; store dest
54
55 3$: ; Copy W tiles
56
57 LD A, (__map_tile_offset)
58 ADD (HL)
59 LD E, A
60 WAIT_STAT
61 LD A, E
62 LD (BC), A
63 INC HL
64
65 LD A, C ; inc dest and wrap around
66 AND #0xE0
67 LD E, A
68 LD A, C
69 INC A
70 AND #0x1F
71 OR E
72 LD C, A
73
74 DEC D
75 JR NZ, 3$
76
77 POP BC
78 POP DE
79
80 DEC E
81 RET Z
82
83 PUSH DE
84
85 LD A, B ; next row and wrap around
86 AND #0xFC
87 LD E, A ; save high bits
88
89 LD A,#0x20
90
91 ADD C
92 LD C, A
93 ADC B
94 SUB C
95 AND #0x03
96 OR E ; restore high bits
97 LD B, A
98
99 PUSH BC
100
101 JR 3$
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.