1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
CopyBytes::
; copy bc bytes from hl to de
inc b ; we bail the moment b hits 0, so include the last run
inc c ; same thing; include last byte
jr .HandleLoop
.CopyByte:
ld a, [hli]
ld [de], a
inc de
.HandleLoop:
dec c
jr nz, .CopyByte
dec b
jr nz, .CopyByte
ret
SwapBytes::
; swap bc bytes between hl and de
.Loop:
; stash [hl] away on the stack
ld a, [hl]
push af
; copy a byte from [de] to [hl]
ld a, [de]
ld [hli], a
; retrieve the previous value of [hl]; put it in [de]
pop af
ld [de], a
inc de
; handle loop stuff
dec bc
ld a, b
or c
jr nz, .Loop
ret
ByteFill::
; fill bc bytes with the value of a, starting at hl
inc b ; we bail the moment b hits 0, so include the last run
inc c ; same thing; include last byte
jr .HandleLoop
.PutByte:
ld [hli], a
.HandleLoop:
dec c
jr nz, .PutByte
dec b
jr nz, .PutByte
ret
GetFarByte::
; retrieve a single byte from a:hl, and return it in a.
; bankswitch to new bank
ldh [hTempBank], a
ldh a, [hROMBank]
push af
ldh a, [hTempBank]
rst Bankswitch
; get byte from new bank
ld a, [hl]
ldh [hFarByte], a
; bankswitch to previous bank
pop af
rst Bankswitch
; return retrieved value in a
ldh a, [hFarByte]
ret
GetFarWord::
; retrieve a word from a:hl, and return it in hl.
; bankswitch to new bank
ldh [hTempBank], a
ldh a, [hROMBank]
push af
ldh a, [hTempBank]
rst Bankswitch
; get word from new bank, put it in hl
ld a, [hli]
ld h, [hl]
ld l, a
; bankswitch to previous bank and return
pop af
rst Bankswitch
ret
FarCopyWRAM::
ldh [hTempBank], a
ldh a, [rSVBK]
push af
ldh a, [hTempBank]
ldh [rSVBK], a
call CopyBytes
pop af
ldh [rSVBK], a
ret
GetFarWRAMByte::
ldh [hTempBank], a
ldh a, [rSVBK]
push af
ldh a, [hTempBank]
ldh [rSVBK], a
ld a, [hl]
ldh [hFarByte], a
pop af
ldh [rSVBK], a
ldh a, [hFarByte]
ret
GetFarWRAMWord:: ; unreferenced
ldh [hTempBank], a
ldh a, [rSVBK]
push af
ldh a, [hTempBank]
ldh [rSVBK], a
ld a, [hli]
ld h, [hl]
ld l, a
pop af
ldh [rSVBK], a
ret
|