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 ($DD55)===
===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 ldh (D6),a
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, h4
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 9A DD call printHex
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 9A DD call printHex
CD 65 CC call printHex
7B ld a, e
7B ld a, e
CD 9A DD call printHex
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 9A DD call printHex
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 A1 DD call .firstHex
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
30 02 jr nc, .hexIsNumber
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
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
AF xor a
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 62 BA call sampleDpad
CD 74 CC call sampleDpad
0F rrca
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 1C BA call printHex
CD 65 CC call printHex
18 E8 jr, .inputALoop
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
07 rlca
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>
3E 03 ld a, $03
11 20 CC ld de, CC20
D5 push de
CD E1 30 call OpenSRAM
01 C0 00 ld bc, $00C0
21 E1 B9 ld hl, sBox14Species
CD 1A 31 call CopyBytes ; deploy RAM writer A to CC20
11 E0 B9 ld de, $B9E0
21 55 DD ld hl, $DD55
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
01 C0 00 ld bc, $00C0
0E 12 ld c, 12
11 55 DD ld de, $DD55
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=