gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
gbdk-lib/libc/targets/mos6502/nes/set_data.s
1 .module SetData
2 .include "global.s"
3
4 .area GBDKOVR (PAG, OVR)
5 _set_sprite_data_PARM_3::
6 _set_bkg_data_PARM_3::
7 _set_win_data_PARM_3:: .ds 2
8 .ppu_addr_lo: .ds 1
9 .ppu_addr_hi: .ds 1
10 src: .ds 2
11 tmpX: .ds 1
12
13 .area _HOME
14
15 _set_bkg_data::
16 _set_win_data::
17 sta *.ppu_addr_lo
18 lda *_set_bkg_data_PARM_3
19 sta *src
20 lda *_set_bkg_data_PARM_3+1
21 sta *src+1
22 lda *_shadow_PPUCTRL
23 and #PPUCTRL_BG_CHR
24 lsr
25 jmp .copy_tiles
26 _set_sprite_data::
27 sta *.ppu_addr_lo
28 lda *_set_sprite_data_PARM_3
29 sta *src
30 lda *_set_sprite_data_PARM_3+1
31 sta *src+1
32 lda *_shadow_PPUCTRL
33 and #PPUCTRL_SPR_CHR
34 .copy_tiles:
35 lsr
36 lsr
37 lsr
38 ; *= 16
39 asl *.ppu_addr_lo
40 rol
41 asl *.ppu_addr_lo
42 rol
43 asl *.ppu_addr_lo
44 rol
45 asl *.ppu_addr_lo
46 rol
47 bit *__oam_valid_display_on
48 bvc .copy_tiles_indirect
49 ; Direct write
50 sta PPUADDR
51 lda *.ppu_addr_lo
52 sta PPUADDR
53 .copy_tiles_loop:
54 ; plane0 - 8 even bytes
55 ldy #0
56 jsr .copy_tiles_1plane
57 ; plane1 - 8 odd bytes
58 ldy #1
59 jsr .copy_tiles_1plane
60 ; src += 16
61 lda *src
62 clc
63 adc #16
64 sta *src
65 lda *src+1
66 adc #0
67 sta *src+1
68 dex
69 bne .copy_tiles_loop
70 rts
71
72 .copy_tiles_indirect:
73 sta *.ppu_addr_hi
74 .copy_tiles_indirect_loop:
75 stx *tmpX
76 ;
77 ldx *.ppu_addr_hi
78 lda *.ppu_addr_lo
79 jsr .ppu_stripe_begin_horizontal
80 ;
81 ldx *__vram_transfer_buffer_pos_w
82 ldy #0
83 jsr .copy_tiles_indirect_2planes
84 lda .identity+16,x
85 sta *__vram_transfer_buffer_pos_w
86 jsr .ppu_stripe_end
87 ; src += 16
88 lda *src
89 clc
90 adc #16
91 sta *src
92 lda *src+1
93 adc #0
94 sta *src+1
95 ; tmp += 16
96 lda *.ppu_addr_lo
97 clc
98 adc #16
99 sta *.ppu_addr_lo
100 lda *.ppu_addr_hi
101 adc #0
102 sta *.ppu_addr_hi
103 ;
104 ldx *tmpX
105 dex
106 bne .copy_tiles_indirect_loop
107 rts
108
109 .copy_tiles_1plane:
110 lda [*src],y
111 iny
112 iny
113 sta PPUDATA
114 ;
115 lda [*src],y
116 iny
117 iny
118 sta PPUDATA
119 ;
120 lda [*src],y
121 iny
122 iny
123 sta PPUDATA
124 ;
125 lda [*src],y
126 iny
127 iny
128 sta PPUDATA
129 ;
130 lda [*src],y
131 iny
132 iny
133 sta PPUDATA
134 ;
135 lda [*src],y
136 iny
137 iny
138 sta PPUDATA
139 ;
140 lda [*src],y
141 iny
142 iny
143 sta PPUDATA
144 ;
145 lda [*src],y
146 iny
147 iny
148 sta PPUDATA
149 ;
150 rts
151
152 .copy_tiles_indirect_2planes:
153 lda [*src],y
154 iny
155 sta __vram_transfer_buffer+0,x
156 lda [*src],y
157 iny
158 sta __vram_transfer_buffer+8,x
159 ;
160 lda [*src],y
161 iny
162 sta __vram_transfer_buffer+1,x
163 lda [*src],y
164 iny
165 sta __vram_transfer_buffer+9,x
166 ;
167 lda [*src],y
168 iny
169 sta __vram_transfer_buffer+2,x
170 lda [*src],y
171 iny
172 sta __vram_transfer_buffer+10,x
173 ;
174 lda [*src],y
175 iny
176 sta __vram_transfer_buffer+3,x
177 lda [*src],y
178 iny
179 sta __vram_transfer_buffer+11,x
180 ;
181 lda [*src],y
182 iny
183 sta __vram_transfer_buffer+4,x
184 lda [*src],y
185 iny
186 sta __vram_transfer_buffer+12,x
187 ;
188 lda [*src],y
189 iny
190 sta __vram_transfer_buffer+5,x
191 lda [*src],y
192 iny
193 sta __vram_transfer_buffer+13,x
194 ;
195 lda [*src],y
196 iny
197 sta __vram_transfer_buffer+6,x
198 lda [*src],y
199 iny
200 sta __vram_transfer_buffer+14,x
201 ;
202 lda [*src],y
203 iny
204 sta __vram_transfer_buffer+7,x
205 lda [*src],y
206 iny
207 sta __vram_transfer_buffer+15,x
208 ;
209 rts
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.