User:TimoVM/RAM Writer setups: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
Line 1,317: | Line 1,317: | ||
</pre> |
</pre> |
||
===Full RAM writer |
===Full RAM writer=== |
||
<pre> |
<pre> |
||
Installer located at DD55 |
|||
setup |
|||
3E 03 ld a, 03 |
|||
CD E1 30 call OpenSRAM ; open sram bank 3 (defined by register a) |
|||
0E CE ld c, CE |
|||
11 E1 B9 ld de, sBox14Species |
|||
21 74 DD ld hl, DD74 |
|||
CD 1A 31 call CopyBytes ; install payload to SRAM |
|||
0E 2D ld c, 08 |
|||
11 18 D4 ld de, D418 ; entry point of wrong pocket TM33 |
|||
D5 push de |
|||
CD 1A 31 call CopyBytes ; install TM33 bootstrap to D418 |
|||
3E E1 ld a, E1 |
|||
EA B8 D5 ld (D5B8), a ; change item slot #1 to TM33 |
|||
C9 ret ; due to earlier push, jump to Deployer |
|||
RAM writer A |
|||
Setup stored at B9E1, deployed to CC20 |
|||
AF xor a |
AF xor a |
||
3C inc a |
3C inc a |
||
E0 D6 |
E0 D6 ldh (D6),a |
||
21 00 DA ld hl, DA00 |
21 00 DA ld hl, DA00 |
||
resolveDisplay CC27 |
|||
CD 21 DF call resolveInput |
|||
resolveDisplay |
|||
CD AB DD call resolveInput |
|||
E5 push hl |
E5 push hl |
||
11 F8 FF ld de, FFF8 |
11 F8 FF ld de, FFF8 |
||
19 add hl, de |
19 add hl, de |
||
54 ld d, |
54 ld d, h |
||
5D ld e, l |
5D ld e, l |
||
01 0C 00 ld bc, 000C |
01 0C 00 ld bc, 000C |
||
Line 1,337: | Line 1,353: | ||
21 A9 C3 ld hl, C3A9 |
21 A9 C3 ld hl, C3A9 |
||
CD E1 30 call openSramBank |
CD E1 30 call openSramBank |
||
CD |
CD 65 CC call printHex |
||
.displayLoop |
.displayLoop |
||
3E 7C ld a, 7C |
3E 7C ld a, 7C |
||
22 ldi (hl), a |
22 ldi (hl), a |
||
7A ld a, d |
7A ld a, d |
||
CD |
CD 65 CC call printHex |
||
7B ld a, e |
7B ld a, e |
||
CD |
CD 65 CC call printHex |
||
3E E3 ld a, E3 |
3E E3 ld a, E3 |
||
22 ldi (hl), a |
22 ldi (hl), a |
||
1A ld a, (de) |
1A ld a, (de) |
||
CD |
CD 65 CC call printHex |
||
36 7C ld a, 7C |
36 7C ld a, 7C |
||
09 add hl, bc |
09 add hl, bc |
||
Line 1,360: | Line 1,376: | ||
E1 pop hl |
E1 pop hl |
||
18 C2 jr, resolveDisplay |
18 C2 jr, resolveDisplay |
||
printHex CC65 |
|||
printHex |
|||
F5 push af |
F5 push af |
||
CB 37 swap a |
CB 37 swap a |
||
CD |
CD 4C C7 call .firstHex |
||
F1 pop af |
F1 pop af |
||
.firstHex |
.firstHex CC6C |
||
E6 0F and 0F |
E6 0F and 0F |
||
C6 F6 add a, F6 |
C6 F6 add a, F6 |
||
F6 80 or a, 80 |
|||
C6 80 add a, 80 |
|||
22 ldi (hl), a |
22 ldi (hl), a |
||
C9 ret |
C9 ret |
||
sampleDpad CC74 |
|||
ResolveInput |
|||
CD F7 DD call sampleDpad |
|||
CB 5F bit 3, a |
|||
28 02 jr z, .noStartButton |
|||
C1 pop bc |
|||
C9 ret |
|||
.noStartButton |
|||
CB 57 bit 2, a |
|||
28 0A jr z, noSelectButton |
|||
0F rrca |
|||
30 01 jr nc, .changeSramBank |
|||
E9 jp hl |
|||
.changeSramBank |
|||
F0 FE ldh a, (FE) |
|||
83 add e |
|||
E0 FE ldh (FE), a |
|||
C9 ret |
|||
.noSelectButton |
|||
0F rrca |
|||
30 2A jr nc, .noAButton |
|||
E5 push hl |
|||
F0 FE ldh a, (FE) |
|||
CD E1 30 call openSramBank |
|||
46 ld b, (hl) |
|||
.inputALoop |
|||
CD F7 DD call sampleDpad |
|||
0F rrca |
|||
38 12 jr c, .AButtonPressed |
|||
0F rrca |
|||
30 01 jr nc , .BButtonNotPressed |
|||
43 ld b, e |
|||
.BButtonNotPressed |
|||
78 ld a, b |
|||
83 add e |
|||
47 ld b, a |
|||
21 50 C4 ld hl, C450 |
|||
36 EC ld (hl), EC |
|||
23 inc hl |
|||
CD 9A DD call printHex |
|||
18 E8 jr, .inputALoop |
|||
.AButtonPressed |
|||
E1 pop hl |
|||
70 ld (hl), b |
|||
E5 push hl |
|||
3E 05 ld a, 5 |
|||
21 FD 4D ld hl, 4DFD |
|||
CF rst08h |
|||
E1 pop hl |
|||
C9 ret |
|||
.noAButton |
|||
0F rrca |
|||
30 03 jr nc, noBButton |
|||
53 ld d, e |
|||
1E 00 ld e, 00 |
|||
19 add hl, de |
|||
C9 ret |
|||
sampleDpad |
|||
CD 90 37 call JoyTextDelay_ForcehJoyDown |
CD 90 37 call JoyTextDelay_ForcehJoyDown |
||
F0 AB ldh a, (AB) |
F0 AB ldh a, (AB) |
||
11 00 00 ld de, 0000 |
11 00 00 ld de, 0000 |
||
F5 push af |
|||
07 rlca |
07 rlca |
||
30 01 jp nc, .noDown |
30 01 jp nc, .noDown |
||
Line 1,452: | Line 1,407: | ||
1E 10 ld e, 10 |
1E 10 ld e, 10 |
||
.noRight |
.noRight |
||
07 rlca |
|||
F1 pop af |
|||
C9 ret |
|||
</pre> |
|||
RAM Writer B |
|||
===Full RAM writer ($03:B9E1)=== |
|||
ResolveInput deployed to DF21 |
|||
<pre> |
|||
CD 74 CC call sampleDpad |
|||
db 14 //located at B9E0, ensures box 14 having 20 pokémon inside it. |
|||
38 41 jr nc, .startButton |
|||
setup |
|||
07 rlca |
|||
30 0B jr z, noSelectButton |
|||
3C inc a |
|||
07 rlca |
|||
E0 D6 ldh (D6),a |
|||
07 rlca |
|||
21 00 DA ld hl, DA00 |
|||
30 01 jr nc, .changeSramBank |
|||
E9 jp hl |
|||
resolveDisplay |
|||
.changeSramBank |
|||
CD 2C BA call resolveInput |
|||
F0 FE ldh a, (FE) |
|||
E5 push hl |
|||
83 add e |
|||
11 F8 FF ld de, FFF8 |
|||
E0 FE ldh (FE), a |
|||
C9 ret |
|||
.noSelectButton 41 37 79 |
|||
07 rlca |
|||
30 03 jr nc, .noBButton |
|||
53 ld d, e |
|||
1E 00 ld e, 00 |
|||
19 add hl, de |
19 add hl, de |
||
.noBButton |
|||
54 ld d, h |
|||
07 rlca |
|||
5D ld e, l |
|||
30 2A jr nc, .noAButton |
|||
01 0C 00 ld bc, 000C |
|||
21 A9 C3 ld hl, C3AB |
|||
.displayLoop |
|||
3E 7C ld a, 7C |
|||
22 ldi (hl), a |
|||
7A ld a, d |
|||
CD 1B BA call printHex |
|||
7B ld a, e |
|||
CD 1B BA call printHex |
|||
3E E3 ld a, E3 |
|||
22 ldi (hl), a |
|||
1A ld a, (de) |
|||
CD 1B BA call printHex |
|||
36 7C ld a, 7C |
|||
09 add hl, bc |
|||
13 inc de |
|||
7D ld a, l |
|||
FE 13 cp 13 |
|||
20 E5 jr nz, .displayLoop |
|||
21 50 C4 ld hl, C450 |
|||
36 ED ld (hl), ED |
|||
E1 pop hl |
|||
18 CD jr, resolveDisplay |
|||
printHex BA1B |
|||
F5 push af |
|||
CB 37 swap a |
|||
CD 22 BA call .firstHex |
|||
F1 pop af |
|||
.firstHex |
|||
E6 0F and 0F |
|||
C6 F6 add a, F6 |
|||
30 02 jr nc, .hexIsNumber |
|||
C6 80 add a, 80 |
|||
22 ldi (hl), a |
|||
C9 ret |
|||
ResolveInput BA2C |
|||
CD 62 BA call sampleDpad |
|||
CB 5F bit 3, a |
|||
28 02 jr z, .noStartButton |
|||
C1 pop bc |
|||
C9 ret |
|||
.noStartButton |
|||
CB 57 bit 2, a |
|||
28 01 jr z, noSelectButton |
|||
E9 jp hl |
|||
.noSelectButton |
|||
0F rrca |
|||
30 1D jr nc, .noAButton |
|||
E5 push hl |
E5 push hl |
||
F0 FE ldh a, (FE) |
|||
CD E1 30 call openSramBank |
|||
46 ld b, (hl) |
46 ld b, (hl) |
||
.inputALoop |
.inputALoop |
||
CD |
CD 74 CC call sampleDpad |
||
07 rlca |
|||
07 rlca |
|||
38 12 jr c, .AButtonPressed |
|||
0F rrca |
|||
30 01 jr nc , .BButtonNotPressed |
30 01 jr nc , .BButtonNotPressed |
||
43 ld b, e |
43 ld b, e |
||
.BButtonNotPressed |
.BButtonNotPressed |
||
0F rrca |
|||
38 0E jr c, .AButtonPressed |
|||
78 ld a, b |
78 ld a, b |
||
83 add e |
83 add e |
||
Line 1,539: | Line 1,454: | ||
36 EC ld (hl), EC |
36 EC ld (hl), EC |
||
23 inc hl |
23 inc hl |
||
CD |
CD 65 CC call printHex |
||
18 |
18 E7 jr, .inputALoop |
||
.AButtonPressed |
.AButtonPressed |
||
E1 pop hl |
E1 pop hl |
||
70 ld (hl), b |
70 ld (hl), b |
||
E5 push hl |
|||
C9 ret |
|||
3E 05 ld a, 5 |
|||
21 FD 4D ld hl, 4DFD |
|||
CF rst08h |
|||
.startButton |
|||
E1 pop hl |
|||
.noAButton |
.noAButton |
||
0F rrca |
|||
30 03 jr nc, noBButton |
|||
53 ld d, e |
|||
1E 00 ld e, 00 |
|||
19 add hl, de |
|||
C9 ret |
C9 ret |
||
OAM DMA Hijack A |
|||
sampleDpad BA62 |
|||
FA AB CE ld a, (CEAB) |
|||
CD 90 37 call JoyTextDelay_ForcehJoyDown |
|||
FE E1 cp E1 |
|||
F0 AB ldh a, (AB) |
|||
C0 ret nz ; is current selected item TM33? If yes, continue |
|||
11 00 00 ld de, 0000 |
|||
FA C2 CE ld a, (CEC2) |
|||
F5 push af |
|||
FE 90 cp 90 |
|||
07 rlca |
|||
C0 ret nz ; Is TM33 chosen while in battle? If yes, continue |
|||
30 01 jp nc, .noDown |
|||
3E 0D ld a, 0D |
|||
13 inc de |
|||
EA E0 CE ld (CEE0); a ; Force cursor to position #13, enabling use of TM33 |
|||
.noDown |
|||
C9 ret |
|||
30 01 jr nc, .noUp |
|||
1B dec de |
|||
.noUp |
|||
07 rlca |
|||
30 03 jr nc, .noLeft |
|||
11 F0 FF ld de, FFF0 |
|||
.noLeft |
|||
07 rlca |
|||
30 02 jr nc, .noRight |
|||
1E 10 ld e, 10 |
|||
.noRight |
|||
F1 pop af |
|||
c9 ret |
|||
</pre> |
|||
OAM DMA Hijack B |
|||
===Codes that finalise the setup=== |
|||
C3 01 DF jp DF01 ; jump to OAM DMA hijack B |
|||
Deployer located at D418 |
|||
{| class="wikitable" |
|||
3E 03 ld a, 03 |
|||
! backup RAM writer to $B9E0!! recall RAM writer from $B9E0 !! Header text |
|||
CD E1 30 call OpenSRAM |
|||
|- |
|||
0E 71 ld c, 71 |
|||
| <pre> |
|||
11 20 CC ld de, CC20 |
|||
D5 push de |
|||
CD E1 30 call OpenSRAM |
|||
21 E1 B9 ld hl, sBox14Species |
|||
CD 1A 31 call CopyBytes ; deploy RAM writer A to CC20 |
|||
11 E0 B9 ld de, $B9E0 |
|||
0E 48 ld c, 48 |
|||
11 21 DF ld de, DF21 |
|||
C3 1A 31 jp CopyBytes</pre> || <pre>3E 03 ld a, $03 |
|||
CD 1A 31 call CopyBytes ; deploy RAM writer B to DF21 |
|||
CD E1 30 call OpenSRAM |
|||
0E 12 ld c, 12 |
|||
11 |
11 0F DF ld de, DF0F |
||
CD 1A 31 call CopyBytes ; deploy OAM DMA hijack A to DF0F |
|||
21 E0 B9 ld hl, $B9E0 |
|||
0E 03 ld c, 03 |
|||
CD 1A 31 call CopyBytes |
|||
11 8A FF ld de, FF8A |
|||
C3 55 DD jp $DD55</pre> || <pre>3E 03 ld a, $03 |
|||
CD 1A 31 call CopyBytes ; deploy OAM DMA hijack B to FF8A |
|||
CD E1 30 call OpenSRAM |
|||
AF xor a |
|||
C3 E1 B9 jp $B9E1</pre> |
|||
E0 89 ld (FF89), a ; enable OAM DMA hijack by removing C9 |
|||
|} |
|||
C9 ret ; due to earlier push, jump to CC20 |
|||
</pre> |
|||
=Crystal= |
=Crystal= |