Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pret
GitHub Repository: pret/pokered
Path: blob/master/home/copy2.asm
1270 views
1
FarCopyData2::
2
; Identical to FarCopyData, but uses hROMBankTemp
3
; as temp space instead of wBuffer.
4
ldh [hROMBankTemp], a
5
ldh a, [hLoadedROMBank]
6
push af
7
ldh a, [hROMBankTemp]
8
ldh [hLoadedROMBank], a
9
ld [rROMB], a
10
call CopyData
11
pop af
12
ldh [hLoadedROMBank], a
13
ld [rROMB], a
14
ret
15
16
FarCopyData3::
17
; Copy bc bytes from a:de to hl.
18
ldh [hROMBankTemp], a
19
ldh a, [hLoadedROMBank]
20
push af
21
ldh a, [hROMBankTemp]
22
ldh [hLoadedROMBank], a
23
ld [rROMB], a
24
push hl
25
push de
26
push de
27
ld d, h
28
ld e, l
29
pop hl
30
call CopyData
31
pop de
32
pop hl
33
pop af
34
ldh [hLoadedROMBank], a
35
ld [rROMB], a
36
ret
37
38
FarCopyDataDouble::
39
; Expand bc bytes of 1bpp image data
40
; from a:hl to 2bpp data at de.
41
ldh [hROMBankTemp], a
42
ldh a, [hLoadedROMBank]
43
push af
44
ldh a, [hROMBankTemp]
45
ldh [hLoadedROMBank], a
46
ld [rROMB], a
47
.loop
48
ld a, [hli]
49
ld [de], a
50
inc de
51
ld [de], a
52
inc de
53
dec bc
54
ld a, c
55
or b
56
jr nz, .loop
57
pop af
58
ldh [hLoadedROMBank], a
59
ld [rROMB], a
60
ret
61
62
CopyVideoData::
63
; Wait for the next VBlank, then copy c 2bpp
64
; tiles from b:de to hl, 8 tiles at a time.
65
; This takes c/8 frames.
66
67
ldh a, [hAutoBGTransferEnabled]
68
push af
69
xor a ; disable auto-transfer while copying
70
ldh [hAutoBGTransferEnabled], a
71
72
ldh a, [hLoadedROMBank]
73
ldh [hROMBankTemp], a
74
75
ld a, b
76
ldh [hLoadedROMBank], a
77
ld [rROMB], a
78
79
ld a, e
80
ldh [hVBlankCopySource], a
81
ld a, d
82
ldh [hVBlankCopySource + 1], a
83
84
ld a, l
85
ldh [hVBlankCopyDest], a
86
ld a, h
87
ldh [hVBlankCopyDest + 1], a
88
89
.loop
90
ld a, c
91
cp 8
92
jr nc, .keepgoing
93
94
.done
95
ldh [hVBlankCopySize], a
96
call DelayFrame
97
ldh a, [hROMBankTemp]
98
ldh [hLoadedROMBank], a
99
ld [rROMB], a
100
pop af
101
ldh [hAutoBGTransferEnabled], a
102
ret
103
104
.keepgoing
105
ld a, 8
106
ldh [hVBlankCopySize], a
107
call DelayFrame
108
ld a, c
109
sub 8
110
ld c, a
111
jr .loop
112
113
CopyVideoDataDouble::
114
; Wait for the next VBlank, then copy c 1bpp
115
; tiles from b:de to hl, 8 tiles at a time.
116
; This takes c/8 frames.
117
ldh a, [hAutoBGTransferEnabled]
118
push af
119
xor a ; disable auto-transfer while copying
120
ldh [hAutoBGTransferEnabled], a
121
ldh a, [hLoadedROMBank]
122
ldh [hROMBankTemp], a
123
124
ld a, b
125
ldh [hLoadedROMBank], a
126
ld [rROMB], a
127
128
ld a, e
129
ldh [hVBlankCopyDoubleSource], a
130
ld a, d
131
ldh [hVBlankCopyDoubleSource + 1], a
132
133
ld a, l
134
ldh [hVBlankCopyDoubleDest], a
135
ld a, h
136
ldh [hVBlankCopyDoubleDest + 1], a
137
138
.loop
139
ld a, c
140
cp 8
141
jr nc, .keepgoing
142
143
.done
144
ldh [hVBlankCopyDoubleSize], a
145
call DelayFrame
146
ldh a, [hROMBankTemp]
147
ldh [hLoadedROMBank], a
148
ld [rROMB], a
149
pop af
150
ldh [hAutoBGTransferEnabled], a
151
ret
152
153
.keepgoing
154
ld a, 8
155
ldh [hVBlankCopyDoubleSize], a
156
call DelayFrame
157
ld a, c
158
sub 8
159
ld c, a
160
jr .loop
161
162
ClearScreenArea::
163
; Clear tilemap area cxb at hl.
164
ld a, " "
165
ld de, SCREEN_WIDTH
166
.loopRows
167
push hl
168
push bc
169
.loopTiles
170
ld [hli], a
171
dec c
172
jr nz, .loopTiles
173
pop bc
174
pop hl
175
add hl, de
176
dec b
177
jr nz, .loopRows
178
ret
179
180
CopyScreenTileBufferToVRAM::
181
; Copy wTileMap to the BG Map starting at b * $100.
182
; This is done in thirds of 6 rows, so it takes 3 frames.
183
184
ld c, SCREEN_HEIGHT / 3
185
186
lb hl, 0, 0
187
decoord 0, 6 * 0
188
call .setup
189
call DelayFrame
190
191
lb hl, SCREEN_HEIGHT / 3, 0
192
decoord 0, 6 * 1
193
call .setup
194
call DelayFrame
195
196
lb hl, 2 * SCREEN_HEIGHT / 3, 0
197
decoord 0, 6 * 2
198
call .setup
199
jp DelayFrame
200
201
.setup
202
ld a, d
203
ldh [hVBlankCopyBGSource+1], a
204
call GetRowColAddressBgMap
205
ld a, l
206
ldh [hVBlankCopyBGDest], a
207
ld a, h
208
ldh [hVBlankCopyBGDest+1], a
209
ld a, c
210
ldh [hVBlankCopyBGNumRows], a
211
ld a, e
212
ldh [hVBlankCopyBGSource], a
213
ret
214
215
ClearScreen::
216
; Clear wTileMap, then wait
217
; for the bg map to update.
218
ld bc, SCREEN_AREA
219
inc b
220
hlcoord 0, 0
221
ld a, " "
222
.loop
223
ld [hli], a
224
dec c
225
jr nz, .loop
226
dec b
227
jr nz, .loop
228
jp Delay3
229
230