User:TimoVM/RAM Writer setups: Difference between revisions
m
→Step 1: Setting all TM quantities to 255
(38 intermediate revisions by 2 users not shown) | |||
Line 14:
General installation overview:
# Assemble
# Catch
# Use the nickname writer to write the large RAM writer in memory.
#
'''Due to differences in memory layout, the nicknames and items used in Yellow will differ slightly from those in Red/Blue.'''
Line 27:
Alongside this ACE setup, you will also need to set up [[Dry underflow glitch|inventory underflow]] to access item slots beyond the usual 20 slots available.
==Install
*The RAM writer itself will be installed in sram bank 3, at address BA53 onward.
*The setup will automatically add the glitch item 4F to your party, along with the necessary bootstrap to use the RAM writer with 4F.
*Upon using 4F, the RAM writer will be copied over to a specific temporary location in RAM, then executed.
*For Red/Blue, the RAM writer will be buffered from C620 onward.
*For Yellow, the RAM writer will be buffered from C978 onward.
==Step 1: Assembling an 8-item code==
Line 108 ⟶ 97:
This item code looks at the nicknames of the pokémon in the currently stored box, then uses pairs of text characters to write a new program. After it finishes, it immediately jumps to execute the newly written program.
==Step 2: Catching and nicknaming
The item code we have assembled converts nicknames into code, which means we'll have to catch pokémon with the right nicknames to do something useful. The pokémon we'll be catching will be stored in a storage box. Make sure the box you pick fulfils the following requirements:
* The box needs to be set as the active box.
* If on VC,
Once that is done, we will fill the box with nicknamed pokémon. We'll be making a list with nicknames using Scottey's nickname converter tool. Simply copy paste the entire code below into the converter, then press the "Run" button to display the list of nicknames. '''Ignore the checksums for now.'''
Line 124 ⟶ 113:
! Red/Blue !! Yellow
|-
! Nickname writer (
|-
| <pre>00 00 00 00 00 11
21 4B CF D1 2A 87 30 09 86 12
0E 01 D5 CD DF 15 CD 31 38 D1
21 4A CF D1 2A 87 30 09 86 12
13 23 81 12 4F 18 F3 21 29 C4
0E 01 D5 CD BF 13 CD 1E 38 D1
F0 B5 A7 28 EE 0F 38 CF 1B 0F
38 E7 0F D0 1B 1B 1B 1B 18 C3 </pre>
|}
Line 152 ⟶ 145:
During the input phase, the controls are as follows:
* '''Press
* '''Press
* '''Press B''' to go back one byte at a time. The checksum will automatically be overwritten by the value written at the current selected address, giving you a measure of how far back you're going. '''This function is only needed if you accidentally confirmed a nickname without writing all 10 characters.'''
* '''Press any other button (except A)''' to immediately start executing the newly written program. '''Only do this when you've finished writing everything.'''
Line 161 ⟶ 155:
![[File:RB Name writer write mode.png|thumb]]!![[File:RB Name writer input mode.png|thumb]]
|-
| Press select to switch between uppercase/lowercase ||
|}
Line 169 ⟶ 163:
|+ Codes to be used with [https://scotteh.me/ace/nick Scotteh's mail code tool]
|-
! Installation for Red/Blue (50 codes) !! Installation for Yellow (50 codes)
|-
| <pre>3E 03 CD 7A D9 21 1E D3 36 59
01 C8 00 11 53 BA 21 BB D8 CD
0F 30 01 4B 79 83 4F 21 50 C4
36 EC 23 CD
E5 06 1C 21 CE 77 CD D6 35 E1
C9 0F 30 03 53 1E 00 19 C9 CD
31 38 F0 B5 76 11 00 00 F5 07
30 01 13 07 30 01 1B 07 30 03
11 F0 FF 07 30 02 1E 10 F1 C9
11 20 C6 D5 21 53 BA C3 B5 00 </pre>|| <pre>21 43 0A 74 65 75 21 1D D3 36
C4 36 EC 23 CD BD C9 18 E8 E1
|}
Once all codes have been entered and verified, you can press any button (with the exception of A, B and DOWN) during input mode to start up the full RAM writer.
==Step 4: Using the full RAM writer
Assuming the program was entered correctly, the game should open up one of the screens as seen in the below screenshots. The RAM writer will draw various values on the screen. The leftmost 4 columns describe the addresses that are currently in view. The rightmost two columns describe the values at each of these addresses. All values on screen are represented in hexadecimal format.
For example: DA01>05 means that the address $DA01 is currently holding the value of $05.
'''Make sure to save the game after you've confirmed that the RAM writer is fully functional.'''
The RAM writer can also be used during battle. Opening and closing the RAM writer in battle will pass your turn to the enemy and cause the battle to continue as usual.
Due to the location the RAM writer is buffered, upon closing the RAM writer in battle in Red/Blue, you will see a slight graphical corruption at the bottom of the screen that will immediately be overwritten by the battle text box. This corruption is purely cosmetic and temporary, meaning that it will not cause any harm to your game.
===Full Writer Controls===
Line 257 ⟶ 235:
{| class="wikitable"
|[[file:Full RB DA96 Read mode.png|288px]]||[[file:Full_RB_DA96_Write_mode
|-
|RAM writer in Read mode ||RAM writer in Write mode.
|}
Line 277 ⟶ 255:
A: toggle write mode
select + up: sram bank -1
select + down: sram bank +1
Line 297 ⟶ 271:
A: exit write mode and load final value into the address
</pre>
==Asm translation of included programs/codes==
Note: these are not yet up to date
===7-item code nickname converter===
Line 751 ⟶ 680:
30 01 13 07 30 01 1B 07 30 03 11 F0 FF 07 30 02 1E 10 F1 C9 }}
=Gold/Silver/Crystal=
General installation overview:
Line 761 ⟶ 690:
==Requirements==
In order to install the RAM writer, you need to have an ACE setup that redirects execution to the 1st or 2nd character of box name 1. Available options are
For Gold & Silver:
* [[User:TimoVM/Coin_Case_ACE_with_stat_xp_redirection|Coin Case ACE]] which uses a pokémon's EVs to redirect to the last read mail, which fixes the stack and then redirects to the start of box names.
* Wrong Pocket TM17 ACE using a Quagsire holding TM01 and with Return as first move.
For Crystal:
* [[User:TimoVM/TMless_0x1500_ACE|TMless 0x1500 ACE setup]] which uses a bad clone and a pokémon with specific EVs to redirect to the last read mail, which redirects to the start of box names.
* (TODO: add Zodiac's page and/or LuckyTyphlosion's setup)
Next, make sure to take care of the following:
* Make sure to empty box 14 of any pokémon you wish to keep. We'll be installing the full RAM writer in the data for box 14, meaning everything inside it will have its data overwritten.
*
==Step 1: Setting all TM quantities to 255==
Enter the following box names. After preparations are complete, execute ACE.
{| class="wikitable"
|+ Caption text
|-
! Gold & Silver !! Crystal
|-
| <pre>
Box 1: A p 'v C é 2 2 5
Box 2: 'v j 'v u é 1 2 5
Line 783 ⟶ 723:
Box 7: 0 9 ♀ 5 ♀ 5 5 5
Box 8: 5 5 5 5 5 5 x 'd
</pre> || | <pre>
Box 1: p 'v 9 é 'd 5 'v *
Box 2: é H 5 'v ♂ é G 5
Box 3: A 4 é m 5 'v 9 5
Box 4: é k 5 F é 'l 5 F
Box 5: 0 B 's 'v 5 u 'v c
Box 6: é n 5 's k 5 'v B
Box 7: 'd 5 5 2 p é 'm 5
Box 8: 'v 'd é 't 5 'v ♂ 5
Box 9: é 's 5 é n 5 v 5
Box 10: 'v L é T 2 0 9 5
Box 11: 5 5 5 5 'm 5 5 ♀
Box 12: 'v F 's k 5 F ? E
Box 13: 's k 5 * 'm k 5 5
</pre>
|}
This will set the quantities of all 50 TMs to 255. For Crystal, this will also change the first item to a TM15 and install a bootstrap to redirect execution to the TM/HM pocket. Do not use this TM15 yet.
===What to do now you have 255 of every TM===
At this moment, there are two main options.
# You can use the quantities in the TM/HM pocket to easily write out simple codes. A list of TM codes can be found on [[User:TimoVM/TM_codes | this page]]. (Currently only supported for Gold/Silver)
# You can continue with the guide and build a RAM writer in order to achieve near-complete ACE control.
==Step 2: Selling TMs to form a mail writer==
Sell TMs such that you get the following quantities:
===Version independent TMs===
{| class="wikitable"
! TM
|-
|TM01 DYNAMICPUNCH ||x17 ||
|-
|TM02 HEADBUTT ||
|-
|TM03 CURSE ||
|-
|TM04 ROLLOUT ||x213
|-
|TM05 ROAR ||x213
|-
|TM06 TOXIC ||x213
|-
|TM07 ZAP CANNON ||
|-
|TM08 ROCK SMASH ||
|-
|TM09 PSYCH UP ||
|-
|TM10 HIDDEN POWER ||
|-
|TM11 SUNNY DAY ||
|-
|TM12 SWEET SCENT ||
|-
|TM13 SNORE ||
|-
|TM14 BLIZZARD ||
|-
|TM15 HYPER BEAM ||
|-
|TM16 ICY WIND ||
|-
|TM17 PROTECT ||
|-
|TM18 RAIN DANCE ||
|-
|TM19 GIGA DRAIN ||
|-
|TM20 ENDURE ||
|-
|TM21 FRUSTRATION ||
|-
|TM22 SOLARBEAM ||
|-
|TM23 IRON TAIL ||
|-
|TM24 DRAGONBREATH ||
|-
|TM25 THUNDER ||
|-
|TM26 EARTHQUAKE ||
|-
|TM27 RETURN ||
|-
|TM28 DIG ||
|-
|TM29 PSYCHIC ||
|-
|TM30 SHADOW BALL ||
|-
|TM31 MUD-SLAP ||
|-
|TM32 DOUBLE TEAM ||
|-
|TM33 ICE PUNCH ||
|-
|TM34 SWAGGER ||
|-
|TM35 SLEEP TALK ||
|-
|TM36 SLUDGE BOMB ||
|-
|TM37 SANDSTORM ||
|-
|TM38 FIRE BLAST ||
|-
|TM39 SWIFT ||
|-
|TM40 DEFENSE CURL ||
|-
|TM41 THUNDERPUNCH ||
|-
|TM42 DREAM EATER ||
|-
|TM43 DETECT ||
|-
|TM44 REST ||
|-
|TM45 ATTRACT ||
|-
|TM46 THIEF ||
|-
|TM47 STEEL WING ||
|-
|TM48 FIRE PUNCH ||
|-
|TM49 FURY CUTTER ||x24
|-
|TM50 NIGHTMARE ||
|}
===
{| class="wikitable"
! Rowspan = "2" | TM || Colspan = "2" | Gold & Silver || Colspan = "2" | Crystal
|-
! Final Quantity !! Sell value !! Final Quantity !! Sell value
|-
|TM02 HEADBUTT ||x85 ||170000||x128 ||127000
|-
|TM03 CURSE ||x221 ||51000||x210 ||67500
|-
|TM08 ROCK SMASH ||x66 ||94500 ||x117 ||69000
|-
|TM09 PSYCH UP ||x98 ||78500 ||x94 ||80500
|-
|TM32 DOUBLE TEAM ||x196 ||59000 ||x197 ||58000
|-
|TM35 SLEEP TALK ||x239 ||8000 ||x204 ||25500
|-
|TM36 SLUDGE BOMB ||x58 ||98500 ||x56 ||99500
|-
|TM39 SWIFT ||x144 ||111000 ||x75 ||180000
|-
|TM40 DEFENSE CURL ||x55 ||100000 ||x53 ||101000
|}
===What to do now you have sold TMs===
Once you've finished selling TMs, set up box names according to the following codes. This code will redirect execution from box names to TMs.
'''For Crystal, you already have a TM15 that will redirect execution to the TM/HM pocket, meaning you can skip setting up this box code.'''
{| class="wikitable"
Line 1,020 ⟶ 895:
| Box 1 || A p 'v C é 'd 2 5
|-
| Box 2 || 5 5 5
|-
| Box 3 || ♀
Line 1,026 ⟶ 901:
| Other || Can be left as they are
|}
==Step 3: Using the mail writer==
Once everything has been double checked, you can use your ACE item (In Crystal, use TM15) in order to start up the mail writer. '''Make sure to save prior to this step. Once you start the mail writer you'll need to finish writing all mail codes before you have an opportunity to save again.'''
===Controls===
Line 1,038 ⟶ 913:
Alongside these actions, the mail writer will now request user input:
* '''Press
* '''Press START''' to immediately jump to and start executing the newly written program. '''Only use this when you've finished every mail.'''
* '''Press any other button''' to go back one byte at a time to correct errors. '''If the printed checksum doesn't match the expected checksum, press DOWN 16 times to retry the last mail.''' This will also overwrite the printed checksum with the value at the currently selected address, giving you a method to check how far back you're going.
{| class="wikitable"
Line 1,055 ⟶ 930:
|+ Codes to be used with [https://scotteh.me/ace/mail/ Scotteh's mail code tool]
|-
!
|-
| <pre>3E 03 CD E1 30 0E CE 11 E1 B9 21
0E 2D 11 18 D4 D5 CD 1A 31
22 AF 3D 22 C9 AF 3C E0 D6 21 00 DA CD 21 DF E5
11 F8 FF 19 54 5D 01 0C 00 F0 FE 21 A9 C3 CD E1
E3 22 1A CD 65 CC 36 7C 09 13 7D FE 13 20 E5 CD
F1 30 21 50 C4 36 ED E1 18 C2 F5 CB 37 CD 6C CC
F1 E6 0F C6 F6 F6 80 22 C9 CD 90 37
AB 07 30 01
30 02 1E 10 07 C9 CD 74 CC 38 41 07 30 0B 07 07
30 01 E9 F0 FE 83 E0 FE C9 07 30 03 53 1E 00 19
07 30 2A E5 F0 FE CD E1 30 46 CD 74 CC 07 07 30
01 43 07 38 0E 78 83 47 21 50 C4 36 EC 23 CD 65
CC 18 E7 E1 70 E5 3E 05 21 FD 4D CF E1 C9 FA AB
CE FE E1 C0 FA C2 CE FE 90 C0 3E 0D EA E0 CE C9
C3 01 DF 3E 03 CD E1 30 0E 71 11 20 CC D5 21 E1
DF CD 1A 31 0E 03 11 8A FF CD 1A 31 AF E0 89 C9 </pre>||<pre>3E 03 CD CB 2F 0E D0 11 E1 B9 21 A6 D2 CD 26 30
0E 2A 11 47 DA D5 CD 26 30 21 BC D8 34 3E D0 4E
09 22 AF 3D 22 C9 AF 3C E0 D4 21 00 DA CD 21 C0
E5 11 F8 FF 19 54 5D 01 0C 00 F0 FE 21 A9 C4 CD
CB 2F CD 65 CD 3E 7C 22 7A CD 65 CD 7B CD 65 CD
3E E3 22 1A CD 65 CD 36 7C 09 13 7D FE 13 20 E5
CD E1 2F 21 50 C5 36 ED E1 18 C2 F5 CB 37 CD 6C
CD F1 E6 0F C6 F6 F6 80 22 C9 CD 4B 35 11 00 00
F0 A9 07 30 01 13 07 30 01 1B 07 30 03 11 F0 FF
07 30 02 1E 10 07 C9 FA 74 CF FE D0 C0 FA 8B CF
FE 90 C0 3E 0D EA A9 CF C9 CD 74 CD 38 41 07 30
0B 07 07 30 01 E9 F0 FE 83 E0 FE C9 07 30 03 53
1E 00 19 07 30 2A E5 F0 FE CD CB 2F 46 CD 74 CD
07 07 30 01 43 07 38 0E 78 83 47 21 50 C5 36 EC
23 CD 65 CD 18 E7 E1 70 E5 3E 05 21 13 4E CF E1
C9 20 8B C3 00 C0 3E 03 CD CB 2F 0E 71 11 20 CD
D5 21 E1 B9 CD 26 30 0E 5A 11 0F C0 CD 26 30 0E
05 11 F9 FF CD 26 30 3E 70 E0 88 3E 18 E0 87 C9 </pre>
|}
Line 1,090 ⟶ 982:
* Save the RAM writer to the contents of box 14.
*
* Install setup to make sure that using TM33/TM17 from the key item
* Automatically start the RAM writer.
Starting the RAM writer, either automatically or through using wrong pocket TM33/TM17, will activate the following effects:
* Copy the necessary data to memory to activate the RAM writer.
* Deploy setup that will enable the use of TM33/TM17 during battle.
* Start the RAM writer.
After exiting the RAM writer, you can restart the RAM writer by using TM33 from the item pack. In battle, you can activate the RAM writer by using TM33/TM17 and selecting "QUIT". Please note that the setup to enable the use of TM33/TM17 during battle does not persist between resets, you can reenable this function by using the RAM writer outside of battle at least once.
As you can see in the screenshots below, the RAM writer will draw various values on the screen. The leftmost 4 columns describe the addresses that are currently in view. The rightmost two columns describe the values at each of these addresses. All values on screen are represented in hexadecimal format.
Line 1,510 ⟶ 1,402:
C9 ret ; due to earlier push, jump to CC20
</pre>
|