gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
gbdk-lib/libc/targets/sm83/get_data.s
1 .include "global.s"
2
3 .globl .copy_vram
4
5 .area _HOME
6
7 _get_bkg_data::
8 _get_win_data::
9 LDH A,(.LCDC)
10 AND #LCDCF_BG8000
11 JP NZ,_get_sprite_data
12
13 PUSH BC
14
15 LDA HL,7(SP) ; Skip return address and registers
16 LD A,(HL-) ; BC = data
17 LD B, A
18 LD A,(HL-)
19 LD C, A
20 LD A,(HL-) ; E = nb_tiles
21 LD E, A
22 LD L,(HL) ; L = first_tile
23 PUSH HL
24
25 XOR A
26 OR E ; Is nb_tiles == 0?
27 JR NZ,1$
28 LD DE,#0x1000 ; DE = nb_tiles = 256
29 JR 2$
30 1$:
31 LD H,#0x00 ; HL = nb_tiles
32 LD L,E
33 ADD HL,HL ; HL *= 16
34 ADD HL,HL
35 ADD HL,HL
36 ADD HL,HL
37 LD D,H ; DE = nb_tiles
38 LD E,L
39 2$:
40 POP HL ; HL = first_tile
41 LD A,L
42 RLCA ; Sign extend (patterns have signed numbers)
43 SBC A
44 LD H,A
45 ADD HL,HL ; HL *= 16
46 ADD HL,HL
47 ADD HL,HL
48 ADD HL,HL
49
50 PUSH BC
51 LD BC,#0x9000
52 ADD HL,BC
53 POP BC
54
55 3$: ; Special version of '.copy_vram'
56 BIT 3,H ; Bigger than 0x9800
57 JR Z,4$
58 BIT 4,H
59 JR Z,4$
60 RES 4,H ; Switch to 0x8800
61 4$:
62 WAIT_STAT
63
64 LD A,(HL+)
65 LD (BC),A
66 INC BC
67 DEC DE
68 LD A,D
69 OR E
70 JR NZ,3$
71
72 POP BC
73 RET
74
75 _get_sprite_data::
76 PUSH BC
77
78 LDA HL,5(SP) ; Skip return address and registers
79 LD A,(HL-) ; E = nb_tiles
80 LD E, A
81 LD L,(HL) ; L = first_tile
82 PUSH HL
83
84 XOR A
85 OR E ; Is nb_tiles == 0?
86 JR NZ,1$
87 LD DE,#0x1000 ; DE = nb_tiles = 256
88 JR 2$
89 1$:
90 XOR A
91 LD H,A ; HL = nb_tiles
92 LD L,E
93 ADD HL,HL ; HL *= 16
94 ADD HL,HL
95 ADD HL,HL
96 ADD HL,HL
97 LD B,H ; BC = nb_tiles
98 LD C,L
99 2$:
100 POP HL ; HL = first_tile
101 LD H,A
102 ADD HL,HL ; HL *= 16
103 ADD HL,HL
104 ADD HL,HL
105 ADD HL,HL
106
107 LD DE,#0x8000
108 ADD HL,DE
109 LD D,H
110 LD E,L ; DE = dest
111
112 LDA HL,7(SP)
113 LD A,(HL-)
114 LD L,(HL)
115 LD H,D
116 LD D,A
117 LD A,L
118 LD L,E
119 LD E,A ; HL = sour, DE = dest
120
121 CALL .copy_vram
122
123 POP BC
124 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.