TASVideos

Tool-assisted game movies
When human skills are just not enough

Submission #4064: MrWint's GB Pokémon: Blue Version in 28:07.28

Console: Game Boy
Game name: Pokémon: Blue Version
Game version: USA/Europe
ROM filename: Pokemon - Blue Version (UE) [S][!].sgb
Branch:
Emulator: BizHawk 1.4.1
Movie length: 28:07.28
FrameCount: 100777
Re-record count: 36309683
Author's real name: Christian Koch
Author's nickname: MrWint
Submitter: MrWint
Submitted at: 2013-08-27 13:38:13
Text last edited at: 2013-09-10 10:51:57
Text last edited by: Spikestuff
Download: Download (9140 bytes)
Status: published
Click to view the actual publication
Submission instructions
Discuss this submission (also rating / voting)
List all submissions by this submitter
List pages on this site that refer to this submission
View submission text history
Back to the submission list
Author's comments and explanations:

Introduction

Well, that didn't take long. After finishing my first any% TAS on Pokémon Blue (here), I read some comments about how this run is all the same as the save corruption run (here), just with 35 minutes of extra padding to get to that point. In a way they were right, all recent first generation Pokémon TASes are corrupting the inventory to use it as a hex editor, shifting the right bytes to the right places and therefore tricking the game into playing the final cutscene. This makes them look all the same in the end: you scroll through a glitched inventory screen that is filled with hilarious items (e.g. "GARY x97") and swap them around.

It got me thinking whether there may be an alternative way to manipulate the bytes. Sure enough, I found one, which isn't that surprising, considering the multitude of game-breaking glitches that this particular game features. More surprising is the fact that it is actually a lot faster to do than the inventory glitching.

I recommend to watch the movie before reading the technical details below. The movie contains almost none of the usual graphical glitchiness and obvious game breaking that the previous movies had, which lets the end seem rather sudden and magical.

Categories

  • Forgoes save data corruption
  • Aims for the fastest completion time
  • Heavy luck manipulation
  • Heavy glitch abuse
  • Contains speed-entertainment tradeoffs

Used emulator: BizHawk 1.4.1


About the run

I mainly re-used the infrastructure I already had from my last Pokémon Blue TAS. Most of the reasoning behind the general properties and choices made is described in the submission text (here) and is still valid for this movie.

Version choice

Unlike the previous run, this run is indeed version dependent. The route strongly depends on Bellsprout, which can only be found in the Blue version (the Red version has Oddish instead). Bellsprout and Oddish differ in their stats, which are highly important as will be described later. Other than that, there is no significant time advantage for any of the versions.

General Luck manipulation

Luck manipulation is a vital part in any Pokémon TAS, understanding and manipulating the random number generator (RNG) is important to get favourable outcomes quickly.

The game uses two addresses for random numbers, 0xFFD3 and 0xFFD4. Both of them are determined using the value of a hardware register (named DIV) and are considered to be unpredictable. Most of the time, only the value of 0xFFD3 is important, 0xFFD4 is rarely used throughout the game. Since the values change rather erratically and there are only 256 of them, it is quite easy to get the value you want for 0xFFD3 by simply brute-forcing some different input sequences.

The real problem occurs if you need to consider 0xFFD4 as well. Luckily, it is used only in three places thoughout the entire game:

  • determining the high byte of the Trainer ID when starting a new game
  • determining the species of a wild encounter
  • determining the initial first trash can in Vermilion gym.

Only the second point is a concern in this run. In each RNG cycle, 0xFFD3 is incremented by DIV, while 0xFFD4 is decremented by DIV, which makes their sum almost constant (DIV can change slightly inbetween the two operations, and there are carry values to consider). The sum 0xFFD3 + 0xFFD4 therefore has a special name, called the D-Sum. The D-Sum is known to slowly decrease in the overworld, while it increases during battles and menus.

Encounter mechanics

When moving in high grass, the game checks for an encounter after every step. Each area has its own encounter rate, which ranges from around 3% to 12%. Furthermore, each area has a list of 10 possible encounters with fixed probabilities. That is, each slot has a fixed chance, independent from the area you are in, only the encounter you get in that specific slot varies. For example, the encounter list for route 25 looks like this:

Slot Nr. Encounter Value range Chance
1 Lvl 8 Caterpie 0x00 - 0x32 51/256 (~20%)
2 Lvl 9 Metapod 0x33 - 0x65 51/256 (~20%)
3 Lvl 13 Pidgey 0x66 - 0x8C 39/256 (~15%)
4 Lvl 12 Bellsprout 0x8D - 0xA5 25/256 (~10%)
5 Lvl 13 Bellsprout 0xA6 - 0xBE 25/256 (~10%)
6 Lvl 12 Abra 0xBF - 0xD7 25/256 (~10%)
7 Lvl 14 Bellsprout 0xD8 - 0xE4 13/256 (~5%)
8 Lvl 10 Abra 0xE5 - 0xF1 13/256 (~5%)
9 Lvl 7 Kakuna 0xF2 - 0xFC 11/256 (~4%)
10 Lvl 8 Weedle 0xFD - 0xFF 3/256 (~1%)

The encounter rate of route 25 is 0x0F (~5.86%). If you step in high grass in route 25, the values of 0xFFD3 and 0xFFD4 are considered: If the value of 0xFFD3 is lower than the encounter rate 0x0F, you get an encounter. The value of 0xFFD4 determines the species: Depending on the value range which 0xFFD4 lies in, you get the respective encounter.

That means if you want to encounter a Lvl 14 Bellsprout, you need 0xFFD3 to be between 0x00 and 0x0E and 0xFFD4 to be between 0xD8 and 0xE4. Therefore, your D-Sum must be between 0xD8 and 0xF2. This makes manipulating encounters the hardest luck manipulation in this game. There is no way to change your D-Sum quickly, and if it is not in the desired range, there is no other way than to wait for the D-Sum to slowly change in order to get it where you want it. This is especially problematic if you need multiple consecutive encounters: After your first encounter, your D-Sum is always in a certain range (the range you needed it to be for that encounter), which might be not nearly where you need it for the second encounter. For specific encounter combinations, you therefore have no other option than to wait around for several seconds to manipulate the D-Sum.

The problem gets even worse if you need the encounters to have specific stats. The DVs of wild encounters are randomly determined right after the encounter species is chosen, which makes it arguably the hardest thing to manipulate.

Hard luck manipulations featured in this run

  • manipulating the Trainer ID to be 0x2E5E (1/65536; ~0.0015%)
  • manipulating Charmanders DVs to be exactly 7 Attack, 6 Defense, 12 Speed, 9 Special (1/65536; ~0.0015%)
  • manipulating 4 consecutive encounters in route 25:
    • Lvl 12 Bellsprout with Special DV 0 (350/1048576; ~0.03%)
    • Lvl 14 Bellsprout with low Defense and HP DVs (~0.1%)
    • Lvl 9 Metapod (714/65536; ~1%)
    • Lvl 12 Bellsprout with low Defense and HP DVs (~0.4%)

Speed-entertainment tradeoffs

This run follows the usual speed-entertainment tradeoff used for this game, which is forgoing red bar: If a fighting Pokémon is at low health, is produces a constant warning sound that disables all other sound effects and therefore saves time, but the constant beeping is a major annoyance. Unlike the previous run, it does not follow the character naming convention, as the player name is actually an important part of the used route.


Glitches used in this movie

Three of the used glitches were also used in the previous run, I will list them here for completion. A more comprehensive description of them can be found in the previous submission text. The fourth glitch is the newly introduced one that allowed for the great time savings and will be discussed in detail.

Brock skip glitch

Uses save and reset to to skip fighting Brock.

Skipping mandatory trainers (Trainer-Fly)

Uses the Trainer-Fly glitch to disable all trainers in an area and therefore skip them. Used to skip all Mt. Moon trainers.

Encountering arbitrary Pokémon or Trainers (Trainer-Fly)

Re-entering an area after using Trainer-Fly and fighting another trainer produces a wild encounter, the species of which is determined by the special stat of the last fought Pokémon. Used in this run to catch the otherwise unobtainable Pokémon Mew.

Transform glitch

While this gltich is known for a long time, its effects were not well-explored. It is triggered by using the move Transform on an enemy that has more moves than the own Pokémon. If the last move is swapped with the first one while transformed, the original moves will be swapped as well, except that the last transformed move does not exist in the original move list. Therefore, after the swap, the first move slot is empty, a fact that is not well handled by the game. The game expects every Pokémon to have at least one move, so it lets you use the non-existing move in battles.

Disclaimer: The following paragraphs contain technical details of the glitch's mechanics and require a basic understanding of programming and assembly language. If you are not interested, you can skip this part. The bottom line is that tricky arbitrary code execution is performed to trigger the ending cutscene when the move is used.

Since there is no valid data defined for that move, it reads data from other areas that are not meant to be move parameters. This results, at least for this particular version of the game, in a damaging move of the glitch type "Cooltrainer♀" with base power 102, ~20% accuracy, 13 PP and the animation of Fissure. The real use of it, however, lies in its move effect. After a successful attack, the glitch effect 0x74 is triggered, which executes code starting from 0xF928. The address 0xF928 is in a memory segment called "Echo RAM", and is a replicate of the actual RAM address 0xD928.

To exploit this, the goal is to manipulate the memory content starting from 0xD928 to spell out assembly that

  • tricks the game into running the ending cutscene
  • does not crash the game in the process

The following table shows the RAM map of that particular memory region:

Addresses Content Comment
0xD928 - 0xD953 Data of 4th enemy Pokémon This will be the data of Squirtle, since the last trainer with four Pokémon will be the Nugget Bridge rival. Luckily, Squrtle's data does not crash the game, but it's not useful, either.
0xD954 - 0xD97F Data of 5th enemy Pokémon No trainer had a 5th Pokémon, so the data is all 0s. Not dangerous, not helpful.
0xD980 - 0xD9AB Data of 6th enemy Pokémon All 0s as well. Not dangerous, not helpful.
0xD9AC - 0xD9ED Trainer name for the 6 enemy Pokémons The trainer name is always set to the player's name. Limited manipulation is possible here and will be used.
0xD9EE - 0xDA2F Nickname for the 6 enemy Pokémons Empty names, not useful.
0xDA30 - 0xDA31 Pointer to data of current area trainers Potentially dangerous, an area is needed the trainer pointer of which doesn't trigger fatal assembly. No real manipulation potential.
0xDA32 - 0xDA3F Misc. data (e.g. Cinnabar Island gym quiz) Always 0
0xDA40 - 0xDA45 Game time in hours, minutes, seconds, frames Potentially dangerous, the in-game time must be chosen to not crash the game. No real manipulation potential.
0xDA46 - 0xDA7F Misc. data (e.g. Safari Zone/Daycare data) Always 0
0xDA80 - 0xDA95 Species of the 20 Pokémon in the current box Dangerous, the end of list marker 0xFF reads as assembly "RST 38" which crashes the game and must be avoided.
0xDA96 - 0xDAB6 Data of 1st boxed Pokémon This is where the most manipulation potential is. The Trainer ID and the DVs can be fully manipulated, and the experience, EVs, etc. at least to some extend.

The ultimate manipulation goal is to write 0x76 to address 0xD35E. This address holds the current map, and 0x76 is the Hall of Fame room. Since this will happen during a battle, and after each battle the map is reloaded, this is everything that is necessary to trigger the ending cutscene.

The manipulation opportunities are quite limited, however, especially early in the game. The best options are the Trainer name, the Trainer ID and the stored Pokémon's EVs and DVs. We will consider them in reverse order: The EVs and DVs are the last useful information that is stored, so it needs to be the ending of the routine: We want to execute

  LD (HL) 0x76
  RET
which spells out to
  0xDAB0   0x36   // lower byte of Special EV value
  0xDAB1   0x76   // Attack and Defense DVs
  0xDAB2   0xC9   // Speed and Special DVs
What we need to achieve up to this point is getting the value 0xD35E into the registers hl, which means putting 0xD3 into h and 0x5E into l. Register l can be filled using the Trainer ID:
  LD l, 0x5E
spells out to
  0xDAA2   0x2E   // high byte of Trainer ID
  0xDAA3   0x5E   // low byte of Trainer ID
There is not much room left for manipulating h to 0xD3. The best option is to use the Trainer name, but since the available assembly is limited by the characters in the alphabet here, some trickery is required.

The name used in this run is "BD♀(pk)RT", where (pk) is the special character that displays the first half of the text "pkmn".

It spells out to the following assembly

  ADD a,c
  ADD a,e   // after this operation, a happens to have the value 0xD3
  PUSH af   // pushes af onto stack
  POP hl    // pop stack into hl, essentially copying af to hl. h now has the desired value 0xD3.
  SUB a,c   // undo all changes that were made to a. It's necessary because the name occurs four
  SUB a,e   //  times and subsequent occurences would otherwise corrupt h's value.
All other assembly operations are only required to not crash and not mess up the value of hl, which is luckily quite easy to achieve.

For this setup to work, we therefore need to do the following

  • Have a Trainer ID of 0x2E5E (11870 in decimal)
  • Name the player "BD♀(pk)RT"
  • Manipulate Charmander to have 7 Attack DV, 6 Defense DV, 12 Speed DV, 9 Special DV
  • Catch Mew and get it to level 10 to learn Transform (Ditto knows Transform, too, but is way harder to obtain)
  • Get Charmeleon to have 0x36 as the lower byte of its special EV. This is where having Bellsprout instead of Oddish is important.
  • Store Charmeleon in a box
  • Perform the Transform glitch
  • Hope that the game doesn't crash

The last point in the list is added because of an undesired side effect that the use of that glitch move can have, which is commonly called the "TMTRAINER effect". It is caused in the following way: Even though the move itself is perfectly stable and harmless, its name is not. There is no name for the move, so the game looks for it past the actual move name list. Where it ends up is determined by the number of end of string symbols (0x50) in the game's RAM at that point, which is highly unpredictable. This random portion of RAM (20 bytes) is then copied to the name buffer and from there to the string buffer. This last copy operation is where the problem occurs: the programmers assumed that each name always ends with an end of string sybmol, so the copy operation continues until it is found. The random move name that is picked from the memory may not have such a symbol, so the game copies far too many bytes, overwriting other important memory areas, glitching out the game and most likely crashing it.

A full trace log of the actual code executed during this run can be seen in the trace log below.

Trace log:

  F928:B1        OR C            SP:dfed A:28 B:00 C:e6 D:00 E:01 F:00 H:f9 L:28  Cy:69752
  F929:00        NOP             SP:dfed A:ee B:00 C:e6 D:00 E:01 F:00 H:f9 L:28  Cy:69756
  F92A:00        NOP             SP:dfed A:ee B:00 C:e6 D:00 E:01 F:00 H:f9 L:28  Cy:69760
  F92B:00        NOP             SP:dfed A:ee B:00 C:e6 D:00 E:01 F:00 H:f9 L:28  Cy:69764
  F92C:00        NOP             SP:dfed A:ee B:00 C:e6 D:00 E:01 F:00 H:f9 L:28  Cy:69768
  F92D:15        DEC D           SP:dfed A:ee B:00 C:e6 D:00 E:01 F:00 H:f9 L:28  Cy:69772
  F92E:15        DEC D           SP:dfed A:ee B:00 C:e6 D:ff E:01 F:40 H:f9 L:28  Cy:69776
  F92F:2D        DEC L           SP:dfed A:ee B:00 C:e6 D:fe E:01 F:40 H:f9 L:28  Cy:69780
  F930:21 27 91  LD HL,#9127h    SP:dfed A:ee B:00 C:e6 D:fe E:01 F:40 H:f9 L:27  Cy:69784
  F933:37        SCF             SP:dfed A:ee B:00 C:e6 D:fe E:01 F:40 H:91 L:27  Cy:69796
  F934:2E 5E     LD L,#5Eh       SP:dfed A:ee B:00 C:e6 D:fe E:01 F:10 H:91 L:27  Cy:69800
  F936:00        NOP             SP:dfed A:ee B:00 C:e6 D:fe E:01 F:10 H:91 L:5e  Cy:69808
  F937:0C        INC C           SP:dfed A:ee B:00 C:e6 D:fe E:01 F:10 H:91 L:5e  Cy:69812
  F938:30 00     JR NC,F93Ah     SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69816
  F93A:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69824
  F93B:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69828
  F93C:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69832
  F93D:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69836
  F93E:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69840
  F93F:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69844
  F940:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69848
  F941:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69852
  F942:00        NOP             SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69856
  F943:98        SBC A,B         SP:dfed A:ee B:00 C:e7 D:fe E:01 F:10 H:91 L:5e  Cy:69860
  F944:88        ADC A,B         SP:dfed A:ed B:00 C:e7 D:fe E:01 F:40 H:91 L:5e  Cy:69864
  F945:23        INC HL          SP:dfed A:ed B:00 C:e7 D:fe E:01 F:00 H:91 L:5e  Cy:69868
  F946:1E 1E     LD E,#1Eh       SP:dfed A:ed B:00 C:e7 D:fe E:01 F:00 H:91 L:5f  Cy:69876
  F948:19        ADD HL,DE       SP:dfed A:ed B:00 C:e7 D:fe E:1e F:00 H:91 L:5f  Cy:69884
  F949:11 00 2C  LD DE,#2C00h    SP:dfed A:ed B:00 C:e7 D:fe E:1e F:10 H:8f L:7d  Cy:69892
  F94C:00        NOP             SP:dfed A:ed B:00 C:e7 D:2c E:00 F:10 H:8f L:7d  Cy:69904
  F94D:18 00     JR F94Fh        SP:dfed A:ed B:00 C:e7 D:2c E:00 F:10 H:8f L:7d  Cy:69908
  F94F:1D        DEC E           SP:dfed A:ed B:00 C:e7 D:2c E:00 F:10 H:8f L:7d  Cy:69920
  F950:00        NOP             SP:dfed A:ed B:00 C:e7 D:2c E:ff F:50 H:8f L:7d  Cy:69924
  F951:16 00     LD D,#00h       SP:dfed A:ed B:00 C:e7 D:2c E:ff F:50 H:8f L:7d  Cy:69928
  F953:18 00     JR F955h        SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69936
  F955:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69948
  F956:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69952
  F957:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69956
  F958:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69960
  F959:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69964
  F95A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69968
  F95B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69972
  F95C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69976
  F95D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69980
  F95E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69984
  F95F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69988
  F960:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69992
  F961:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:69996
  F962:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70000
  F963:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70004
  F964:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70008
  F965:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70012
  F966:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70016
  F967:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70020
  F968:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70024
  F969:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70028
  F96A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70032
  F96B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70036
  F96C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70040
  F96D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70044
  F96E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70048
  F96F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70052
  F970:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70056
  F971:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70060
  F972:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70064
  F973:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70068
  F974:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70072
  F975:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70076
  F976:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70080
  F977:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70084
  F978:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70088
  F979:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70092
  F97A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70096
  F97B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70100
  F97C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70104
  F97D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70108
  F97E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70112
  F97F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70116
  F980:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70120
  F981:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70124
  F982:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70128
  F983:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70132
  F984:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70136
  F985:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70140
  F986:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70144
  F987:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70148
  F988:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70152
  F989:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70156
  F98A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70160
  F98B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70164
  F98C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70168
  F98D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70172
  F98E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70176
  F98F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70180
  F990:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70184
  F991:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70188
  F992:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70192
  F993:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70196
  F994:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70200
  F995:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70204
  F996:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70208
  F997:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70212
  F998:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70216
  F999:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70220
  F99A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70224
  F99B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70228
  F99C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70232
  F99D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70236
  F99E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70240
  F99F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70244
  F9A0:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70248
  F9A1:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70252
  F9A2:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70256
  F9A3:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70260
  F9A4:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70264
  F9A5:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70268
  F9A6:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70272
  F9A7:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70276
  F9A8:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70280
  F9A9:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70284
  F9AA:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70288
  F9AB:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70292
  F9AC:81        ADD A,C         SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:8f L:7d  Cy:70296
  F9AD:83        ADD A,E         SP:dfed A:d4 B:00 C:e7 D:00 E:ff F:10 H:8f L:7d  Cy:70300
  F9AE:F5        PUSH AF         SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:10 H:8f L:7d  Cy:70304
  F9AF:E1        POP HL          SP:dfeb A:d3 B:00 C:e7 D:00 E:ff F:30 H:8f L:7d  Cy:70320
  F9B0:91        SUB C           SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:30 H:d3 L:30  Cy:70332
  F9B1:93        SUB E           SP:dfed A:ec B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70336
  F9B2:50        LD D,B          SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70340
  F9B3:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70344
  F9B4:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70348
  F9B5:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70352
  F9B6:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70356
  F9B7:81        ADD A,C         SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70360
  F9B8:83        ADD A,E         SP:dfed A:d4 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70364
  F9B9:F5        PUSH AF         SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70368
  F9BA:E1        POP HL          SP:dfeb A:d3 B:00 C:e7 D:00 E:ff F:30 H:d3 L:30  Cy:70384
  F9BB:91        SUB C           SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:30 H:d3 L:30  Cy:70396
  F9BC:93        SUB E           SP:dfed A:ec B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70400
  F9BD:50        LD D,B          SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70404
  F9BE:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70408
  F9BF:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70412
  F9C0:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70416
  F9C1:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70420
  F9C2:81        ADD A,C         SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70424
  F9C3:83        ADD A,E         SP:dfed A:d4 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70428
  F9C4:F5        PUSH AF         SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70432
  F9C5:E1        POP HL          SP:dfeb A:d3 B:00 C:e7 D:00 E:ff F:30 H:d3 L:30  Cy:70448
  F9C6:91        SUB C           SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:30 H:d3 L:30  Cy:70460
  F9C7:93        SUB E           SP:dfed A:ec B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70464
  F9C8:50        LD D,B          SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70468
  F9C9:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70472
  F9CA:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70476
  F9CB:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70480
  F9CC:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70484
  F9CD:81        ADD A,C         SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70488
  F9CE:83        ADD A,E         SP:dfed A:d4 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70492
  F9CF:F5        PUSH AF         SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70496
  F9D0:E1        POP HL          SP:dfeb A:d3 B:00 C:e7 D:00 E:ff F:30 H:d3 L:30  Cy:70512
  F9D1:91        SUB C           SP:dfed A:d3 B:00 C:e7 D:00 E:ff F:30 H:d3 L:30  Cy:70524
  F9D2:93        SUB E           SP:dfed A:ec B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70528
  F9D3:50        LD D,B          SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70532
  F9D4:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70536
  F9D5:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70540
  F9D6:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70544
  F9D7:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70548
  F9D8:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70552
  F9D9:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70556
  F9DA:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70560
  F9DB:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70564
  F9DC:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70568
  F9DD:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70572
  F9DE:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70576
  F9DF:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70580
  F9E0:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70584
  F9E1:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70588
  F9E2:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70592
  F9E3:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70596
  F9E4:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70600
  F9E5:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70604
  F9E6:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70608
  F9E7:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70612
  F9E8:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70616
  F9E9:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70620
  F9EA:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70624
  F9EB:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70628
  F9EC:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70632
  F9ED:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70636
  F9EE:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70640
  F9EF:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70644
  F9F0:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70648
  F9F1:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70652
  F9F2:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70656
  F9F3:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70660
  F9F4:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70664
  F9F5:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70668
  F9F6:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70672
  F9F7:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70676
  F9F8:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70680
  F9F9:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70684
  F9FA:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70688
  F9FB:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70692
  F9FC:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70696
  F9FD:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70700
  F9FE:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70704
  F9FF:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70708
  FA00:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70712
  FA01:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70716
  FA02:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70720
  FA03:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70724
  FA04:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70728
  FA05:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70732
  FA06:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70736
  FA07:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70740
  FA08:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70744
  FA09:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70748
  FA0A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70752
  FA0B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70756
  FA0C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70760
  FA0D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70764
  FA0E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70768
  FA0F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70772
  FA10:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70776
  FA11:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70780
  FA12:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70784
  FA13:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70788
  FA14:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70792
  FA15:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70796
  FA16:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70800
  FA17:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70804
  FA18:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70808
  FA19:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70812
  FA1A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70816
  FA1B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70820
  FA1C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70824
  FA1D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70828
  FA1E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70832
  FA1F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70836
  FA20:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70840
  FA21:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70844
  FA22:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70848
  FA23:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70852
  FA24:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70856
  FA25:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70860
  FA26:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70864
  FA27:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70868
  FA28:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70872
  FA29:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70876
  FA2A:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70880
  FA2B:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70884
  FA2C:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70888
  FA2D:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70892
  FA2E:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70896
  FA2F:00        NOP             SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70900
  FA30:56        LD D,(HL)       SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70904
  FA31:89        ADC A,C         SP:dfed A:ed B:00 C:e7 D:00 E:ff F:50 H:d3 L:30  Cy:70912
  FA32:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70916
  FA33:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70920
  FA34:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70924
  FA35:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70928
  FA36:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70932
  FA37:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70936
  FA38:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70940
  FA39:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70944
  FA3A:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70948
  FA3B:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70952
  FA3C:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70956
  FA3D:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70960
  FA3E:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70964
  FA3F:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70968
  FA40:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70972
  FA41:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70976
  FA42:00        NOP             SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70980
  FA43:1A        LD A,(DE)       SP:dfed A:d5 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70984
  FA44:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70992
  FA45:06 00     LD B,#00h       SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:70996
  FA47:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71004
  FA48:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71008
  FA49:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71012
  FA4A:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71016
  FA4B:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71020
  FA4C:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71024
  FA4D:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71028
  FA4E:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71032
  FA4F:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71036
  FA50:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71040
  FA51:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71044
  FA52:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71048
  FA53:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71052
  FA54:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71056
  FA55:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71060
  FA56:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71064
  FA57:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71068
  FA58:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71072
  FA59:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71076
  FA5A:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71080
  FA5B:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71084
  FA5C:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71088
  FA5D:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71092
  FA5E:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71096
  FA5F:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71100
  FA60:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71104
  FA61:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71108
  FA62:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71112
  FA63:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71116
  FA64:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71120
  FA65:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71124
  FA66:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71128
  FA67:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71132
  FA68:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71136
  FA69:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71140
  FA6A:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71144
  FA6B:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71148
  FA6C:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71152
  FA6D:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71156
  FA6E:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71160
  FA6F:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71164
  FA70:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71168
  FA71:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71172
  FA72:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71176
  FA73:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71180
  FA74:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71184
  FA75:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71188
  FA76:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71192
  FA77:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71196
  FA78:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71200
  FA79:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71204
  FA7A:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71208
  FA7B:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71212
  FA7C:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71216
  FA7D:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71220
  FA7E:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71224
  FA7F:00        NOP             SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71228
  FA80:01 B2 FF  LD BC,#FFB2h    SP:dfed A:00 B:00 C:e7 D:00 E:ff F:10 H:d3 L:30  Cy:71232
  FA83:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71244
  FA84:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71248
  FA85:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71252
  FA86:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71256
  FA87:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71260
  FA88:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71264
  FA89:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71268
  FA8A:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71272
  FA8B:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71276
  FA8C:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71280
  FA8D:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71284
  FA8E:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71288
  FA8F:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71292
  FA90:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71296
  FA91:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71300
  FA92:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71304
  FA93:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71308
  FA94:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71312
  FA95:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71316
  FA96:B2        OR D            SP:dfed A:00 B:ff C:b2 D:00 E:ff F:10 H:d3 L:30  Cy:71320
  FA97:00        NOP             SP:dfed A:00 B:ff C:b2 D:00 E:ff F:80 H:d3 L:30  Cy:71324
  FA98:3A        LD A,(HL-)      SP:dfed A:00 B:ff C:b2 D:00 E:ff F:80 H:d3 L:30  Cy:71328
  FA99:14        INC D           SP:dfed A:00 B:ff C:b2 D:00 E:ff F:80 H:d3 L:2f  Cy:71336
  FA9A:00        NOP             SP:dfed A:00 B:ff C:b2 D:01 E:ff F:00 H:d3 L:2f  Cy:71340
  FA9B:14        INC D           SP:dfed A:00 B:ff C:b2 D:01 E:ff F:00 H:d3 L:2f  Cy:71344
  FA9C:14        INC D           SP:dfed A:00 B:ff C:b2 D:02 E:ff F:00 H:d3 L:2f  Cy:71348
  FA9D:2D        DEC L           SP:dfed A:00 B:ff C:b2 D:03 E:ff F:00 H:d3 L:2f  Cy:71352
  FA9E:34        INC (HL)        SP:dfed A:00 B:ff C:b2 D:03 E:ff F:40 H:d3 L:2e  Cy:71356
  FA9F:2D        DEC L           SP:dfed A:00 B:ff C:b2 D:03 E:ff F:00 H:d3 L:2e  Cy:71368
  FAA0:0A        LD A,(BC)       SP:dfed A:00 B:ff C:b2 D:03 E:ff F:40 H:d3 L:2d  Cy:71372
  FAA1:05        DEC B           SP:dfed A:00 B:ff C:b2 D:03 E:ff F:40 H:d3 L:2d  Cy:71380
  FAA2:2E 5E     LD L,#5Eh       SP:dfed A:00 B:fe C:b2 D:03 E:ff F:40 H:d3 L:2d  Cy:71384
  FAA4:00        NOP             SP:dfed A:00 B:fe C:b2 D:03 E:ff F:40 H:d3 L:5e  Cy:71392
  FAA5:15        DEC D           SP:dfed A:00 B:fe C:b2 D:03 E:ff F:40 H:d3 L:5e  Cy:71396
  FAA6:BB        CP E            SP:dfed A:00 B:fe C:b2 D:02 E:ff F:40 H:d3 L:5e  Cy:71400
  FAA7:05        DEC B           SP:dfed A:00 B:fe C:b2 D:02 E:ff F:50 H:d3 L:5e  Cy:71404
  FAA8:20 05     JR NZ,FAAFh     SP:dfed A:00 B:fd C:b2 D:02 E:ff F:50 H:d3 L:5e  Cy:71408
  FAAF:04        INC B           SP:dfed A:00 B:fd C:b2 D:02 E:ff F:50 H:d3 L:5e  Cy:71420
  FAB0:36 76     LD (HL),#76h    SP:dfed A:00 B:fe C:b2 D:02 E:ff F:10 H:d3 L:5e  Cy:71424
  FAB2:C9        RET             SP:dfed A:00 B:fe C:b2 D:02 E:ff F:10 H:d3 L:5e  Cy:71436


The route

Intro

The Trainer ID is manipulated to be 0x2E5E, a requirement for the Transform glitch setup. It needed 31 total frames of delay to achieve, which is the shortest delay possible for this ID. The player is named "BD♀(pk)RT", which is also part of the setup. This will cost some seconds over the course of the run, as each displayed letter delays the game by one frame, making shorter names faster. The rival's name is set to default, renaming it would take longer than the time saved by a shorter name.

Pallet Town

I pick Charmander and manipulate its DVs to be exactly 7 Attack, 6 Defense, 12 Speed and 9 Special; another part of the setup. As a result, Charmander's stats are not as high as they could be, and the trainer fights will therefore take longer compared to the published run. Also, when giving Oak the parcel, it is acutally faster to stand to the left of him instead of the front when talking to him. While this results in 3 additional steps, it makes Gary's walking animation 2 steps shorter, and since NPCs move only half as fast as you, it saves 15 frames. Even the developers hadn't thought of this it seems, as all the NPC rotations in that cutscene assume that you are standing in front of Oak.

Pewter City

I buy 1 escape rope and 2 Pokéballs at the mart. The Pokéballs will be used to catch Abra and Mew. Also, Brock skip glitch is performed.

Mt. Moon

I visit the Pokécenter to set the teleport location and use the escape rope to initiate Trainer-Fly and skip all the trainers in the third floor. A hidden Ether is picked up that will be used at the end of the run.

Cerulean City

I visit the Pokécenter again to set the teleport location and proceed by clearing the Nugget Bridge.

Route 24

I catch Abra and immediately trigger the second and last Trainer-Fly.

Route 25

The Hiker is fought to set up for the arbitrary encounter glitch. Now, a whole lot of encounters are used to finish the setup of the Transform glitch: A Lvl 12 Bellsprout is manipulated to have a Special DV of 0 and therefore a Special stat of 21, the number required to encounter Mew. It is killed to increase the Special EV of Charmeleon by 70 (This value is the reason Oddish doesn't work, as it has 75 base special). Mew is manipulated to have an Attack DV of 15 to make the upcoming fights faster, and is caught using the last Pokéball. Mew is switched to the front of the team, and is used to kill the Lvl 14 Bellsprout encounter. Next up is a Lvl 9 Metapod, which is killed using all three Pokémons to split up its EVs and give Charmeleon exactly 8 Special EV, which brings its lower byte to 0x36, the exact value needed as part of the setup. The last encounter is a Lvl 12 Bellsprout, which is manipulated to have bad defensive stats and is killed by Mew to reach level 10 where it learns Transform. Having finished the setup, Abra is used to teleport back to Cerulean City.

Note that the so-called "3 Step Rule" is used in this game and requires you to walk at least 3 steps between two consecutive encounters.

Cerulean City

Charmeleon is stored in the box as the last setup step, and then we are heading out to route 4.

Route 4

A wild Rattata is used to perform the Transform glitch. In order to make the glitch move usable, the Ether from Mt. Moon is used on it to restore its PP. After successfully using the glitch move in another encounter, I end the battle by fleeing and due to the successful setup, the ending cutscene starts. I need to wait 3 seconds before actually using the move to progress the in-game timer enough in order to successfully execute the code.


turska: Judging.
turska: Movie file replaced with an improvement by the author. The new movie is 902 frames faster.
turska: A massive improvement to a run that was already insane. Accepting for publication as an improvement to the published movie.

Spikestuff: (jumps out of bed) Mine.... Sorry for the delay I had to struggle with school... focusing on the final dumps now.


Similar submissions (by title and categories where applicable):