(Link to video)
For a while now I've had the theory that many of the more exotic crashes we can get in A Link to the Past were not just a crash, but something we could take full control of. Previously, the only known and confirmed way to gain total control of the game was a method that took a lot longer to perform than the non-ACE method. This new route uses a completely different technique to utterly quash ACE's previous inferiority. Best of all, it must be mentioned that we completely skip over the ending text that normally precedes the credits. That text would be about 45% of the run were it included, taking around 3000 frames to sit through.
Categories:
  • Major skip glitch
  • Executes arbitrary code
  • Heavy glitch abuse
  • Fastest completion
  • Genre: Action
  • Genre: Adventure
Uses lsnes rr2-β23 (bsnes v085 compatibility core). Rerecord count is inaccurate. It's actually probably like 2000, but most of it was lost in the conversion. Not something we really care about though.

Route

Beginning

The beginning is boring. The same nonsense you see at the start of every run. "Link, save me!" Blah blah blah. Uncle walks out and tells us to stay put, but we ignore him.

Outside

Outside we use a teleport to reach the cliff and then jump off of it to almost wrap the screen, allowing us to walk eastwards to the other cliff. A teleport directly to the other cliff would have been faster, but the guards make it impossible to reach the corner. As there is no way to clip into other parts of a ◢ slope without boots, this was the only option.
We need to move up 4 pixels before transitioning south, or else we will get a funny auto-walk thing. A few frames are saved on the third overworld screen by transitioning to land inside of the cliff, where a couple snaps are used by moving down 2 pixels then moving up to get booted down 6. We then hop down the cliff back in bounds and enter the fortune teller's house.

ACE

Inside the fortune teller, we do 1 pixelport south followed by v, <^v> 7 times to move us down 7 pixels such that we'll be stuck a little into the wall. At that height, we move as far right as possible then down to trigger a south supertile transition.
That's where things break badly. The fortune teller is a single entrance building, meaning it appears on the secondary underworld map. This map is smaller and will get confused when we go south, which, in this case, attempts to load room 0132. As this room doesn't exist, it ends up reading outside the table for room data and proceeds to load random garbage values into the memory locations where room data is stored. One of the corrupted values read is $FF into memory location $AD (Hold the value for special room "effects). This value is later used by the game to determine if there are any special effects, but since this value is way out of bounds it causes the CPU to jump to "open bus" and eventually end up executing a "BRK" instruction. This instruction in turn jumps to $00FFFF in ROM where there's the value for a "branch long" instruction that executes a jump. The location from this jump will be read from $000000-$000002 because of a wraparound from $00FFFF. As luck would have it, those addresses contains the controller inputs left there by the controller reading routine that executed just before this crash happened. From there on it's business as usual when it comes to ACE on the SNES. A jump to controller registers is done and execution is kept there in a loop by executing code entered by 4 controllers, waiting for the next frame and then looping back. This code ends up storing $1A to $10 and $00 to $11 to set the game mode to credits and then jumping back into the main game loop and letting the game resume from there.

Do doo ♫ do doo ♫ do do doo do doo

Do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫ do doo ♫ do doo ♫ do do doo do doo ♫

Credits

Unfortunately, we lose. Ganon's music begins playing during credits, signifying the bad ending that no one knew existed.

That's it

Thanks to

Yuzuhara for working on this movie and optimizing the route ~10% by moving the game crash from the dam to the fortune teller.
total for even looking at this and getting the ACE working and converting to lsnes. Was not expecting him to chime in.
Pinkus for discussing a lot of things I honestly don't understand that well with total.
Acmlm for his previous ACE shenanigans and looking at this method initially when pinged.
Myramong gave 1 suggestion. Hello Myramong.
Tompa for being Tompa.

Stuff

Suggested screenshots:
  • 3238
  • 7649

feos: As explained in this post, everything this movie claims to be doing it is indeed doing the way it is described.
The value that arbitrary code ends up setting is a condition that defines the credits routine; that address contains the same value in other ALttP movies right before they roll.
After the ending I can reset the game and use the save that is created, and its contents are fundamentally the same as in other ALttP movies, aside from the Pyramid top not being broken, which isn't a requirement, just a leftover when final boss is reached normally.
So everything happens and functions as it should, and this movie is legitimate.
Great job guys!
And thanks to Masterjun for helping to understand the code.
Spikestuff: The Legend of Doors: A Glitch in the Link.
Publishing.

TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 14852
Location: 127.0.0.1
Challenger
He/Him
Skilled player (1637)
Joined: 2/23/2016
Posts: 1035
I remember that previous ACE control used on Acmlm's submission (back from 2016), and now, it's another game defeated. And even more broken than before. Yes vote.
My homepage --Currently not much motived for TASing as before...-- But I'm still working.
MESHUGGAH
Other
Skilled player (1888)
Joined: 11/14/2009
Posts: 1349
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
GG, voted yes.
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
Player (57)
Joined: 7/7/2008
Posts: 872
Location: Utah
How are you able to skip the title screen? I remember that you couldn't do it when you first turn on the game. How did you do it?
Tompa
Any
Editor, Expert player (2141)
Joined: 8/15/2005
Posts: 1934
Location: Mullsjö, Sweden
It can only be done on the JP version.
EZGames69
He/They
Publisher, Reviewer, Expert player (3964)
Joined: 5/29/2017
Posts: 2706
Location: Michigan
Remember when you said you had no idea how to improve the game end glitch? Well congrats on finding an idea on how to improve the game end glitch. Yes vote.
[14:15] <feos> WinDOES what DOSn't 12:33:44 PM <Mothrayas> "I got an oof with my game!" Mothrayas Today at 12:22: <Colin> thank you for supporting noble causes such as my feet MemoryTAS Today at 11:55 AM: you wouldn't know beauty if it slapped you in the face with a giant fish [Today at 4:51 PM] Mothrayas: although if you like your own tweets that's the online equivalent of sniffing your own farts and probably tells a lot about you as a person MemoryTAS Today at 7:01 PM: But I exert big staff energy honestly lol Samsara Today at 1:20 PM: wouldn't ACE in a real life TAS just stand for Actually Cease Existing
Editor, Skilled player (1403)
Joined: 3/31/2010
Posts: 2086
Good run voted doo doo do do doo do do doo do/10
Patashu
He/Him
Joined: 10/2/2005
Posts: 4014
Such an entertaining remix of the ending credits :D Yes vote!
My Chiptune music, made in Famitracker: http://soundcloud.com/patashu My twitch. I stream mostly shmups & rhythm games http://twitch.tv/patashu My youtube, again shmups and rhythm games and misc stuff: http://youtube.com/user/patashu
Dwedit
He/Him
Joined: 3/24/2006
Posts: 692
Location: Chicago
Any way to get a non-glitched ending?
fmp
He/Him
Active player (273)
Joined: 9/1/2018
Posts: 82
Dwedit wrote:
Any way to get a non-glitched ending?
Well, it’s ACE, so yes, but I don’t see the point.
MESHUGGAH
Other
Skilled player (1888)
Joined: 11/14/2009
Posts: 1349
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
fmp wrote:
Dwedit wrote:
Any way to get a non-glitched ending?
Well, it’s ACE, so yes, but I don’t see the point.
For example alternative encodes for glitched and non-glitched ending like [2406] NES Kirby's Adventure "game end glitch" by MESHUGGAH, CoolKirby, Masterjun, MUGG, TASeditor & illayaya in 00:35.91: This movie has two YouTube encodes. The primary version has deliberately glitched ending graphics, whereas the second one displays proper graphics. Both versions have identical input except for the last frame.
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
Site Admin, Skilled player (1235)
Joined: 4/17/2010
Posts: 11264
Location: RU
I've read the trace log. tl;dr:
00:03:40 <Masterjun> lol nice bug
Actual explanation:
The fortune teller is a single entrance building, meaning it appears on the secondary underworld map. This map is smaller and will get confused when we go south, which, in this case, attempts to load room 0132.
Language: asm

02b6db lda $a0 [0000a0] A:2710 X:0000 Y:0000 S:01f6 D:0000 DB:02 nvMXdizc V: 28 H: 894 02b6dd sta $a2 [0000a2] A:2722 X:0000 Y:0000 S:01f6 D:0000 DB:02 nvMXdizc V: 28 H: 918 02b6df lda $0114 [020114] A:2722 X:0000 Y:0000 S:01f6 D:0000 DB:02 nvMXdizc V: 28 H: 942 02b6e2 cmp #$8e A:2701 X:0000 Y:0000 S:01f6 D:0000 DB:02 nvMXdizc V: 28 H: 974 02b6e4 bne $b700 [02b700] A:2701 X:0000 Y:0000 S:01f6 D:0000 DB:02 nvMXdizc V: 28 H: 990 02b700 lda $048e [02048e] A:2701 X:0000 Y:0000 S:01f6 D:0000 DB:02 nvMXdizc V: 28 H:1012 02b703 cmp $a0 [0000a0] A:2722 X:0000 Y:0000 S:01f6 D:0000 DB:02 nvMXdizc V: 28 H:1044 02b705 beq $b70c [02b70c] A:2722 X:0000 Y:0000 S:01f6 D:0000 DB:02 nvMXdiZC V: 28 H:1068 02b70c lda $a0 [0000a0] A:2722 X:0000 Y:0000 S:01f6 D:0000 DB:02 nvMXdiZC V: 28 H:1090 02b70e clc A:2722 X:0000 Y:0000 S:01f6 D:0000 DB:02 nvMXdizC V: 28 H:1114 -- HDMA7 001b38 -> 26 indirect incrment mode1 -- 02b70f adc #$10 A:2722 X:0000 Y:0000 S:01f6 D:0000 DB:02 nvMXdizc V: 28 H:1168 02b711 sta $a0 [0000a0] A:2732 X:0000 Y:0000 S:01f6 D:0000 DB:02 nvMXdizc V: 28 H:1184
$a0 was #$0122, then was blindly incremented by #$10, which means we're in room #$0132.
As this room doesn't exist, it ends up reading outside the table for room data and proceeds to load random garbage values into the memory locations where room data is stored. One of the corrupted values read is $FF into memory location $AD (Hold the value for special room "effects).
Language: asm

01b5d8 lda $a0 [0000a0] A:2600 X:0000 Y:0002 S:01f5 D:0000 DB:00 nvmxdizc V: 41 H: 818 01b5da asl a A:0132 X:0000 Y:0002 S:01f5 D:0000 DB:00 nvmxdizc V: 41 H: 850 01b5db tax A:0264 X:0000 Y:0002 S:01f5 D:0000 DB:00 nvmxdizc V: 41 H: 864 01b5dc lda $04f1e2,x [04f446] A:0264 X:0264 Y:0002 S:01f5 D:0000 DB:00 nvmxdizc V: 41 H: 878 01b5e0 sta $0d [00000d] A:fccf X:0264 Y:0002 S:01f5 D:0000 DB:00 Nvmxdizc V: 41 H: 926 ... 01b651 lda [$0d],y [04fcd3] A:033f X:03fc Y:0004 S:01f5 D:0000 DB:00 nvMxdizC V: 42 H:1014 01b653 sta $ad [0000ad] A:03ff X:03fc Y:0004 S:01f5 D:0000 DB:00 NvMxdizC V: 42 H:1062
Room value #$0132 is used to calculate an offset to read the room data pointer from $04f1e2. It is then stored to $0d. Some values are being loaded as offset (y register) is increasing, and finally we get to $04fcd3. It wasn't supposed to be read and stores #$ff, which goes to $ad.
This value is later used by the game to determine if there are any special effects, but since this value is way out of bounds it causes the CPU to jump to "open bus" and eventually end up executing a "BRK" instruction.
Language: asm

0afe80 lda $ad [0000ad] A:b702 X:00e0 Y:0007 S:01f9 D:0000 DB:00 nvMXdizc V:256 H: 286 0afe82 asl a A:b7ff X:00e0 Y:0007 S:01f9 D:0000 DB:00 NvMXdizc V:256 H: 310 0afe83 tax A:b7fe X:00e0 Y:0007 S:01f9 D:0000 DB:00 NvMXdizC V:256 H: 324 0afe84 jmp ($fe70,x) [0aff6e] A:b7fe X:00fe Y:0007 S:01f9 D:0000 DB:00 NvMXdizC V:256 H: 338 0a20e0 brk #$00 A:b7fe X:00fe Y:0007 S:01f9 D:0000 DB:00 NvMXdizC V:256 H: 384 0a2020 brk #$00 A:b7fe X:00fe Y:0007 S:01f7 D:0000 DB:00 NvMXdizC V:256 H: 424 0a2022 brk #$00 A:b7fe X:00fe Y:0007 S:01f7 D:0000 DB:00 NVMXdiZC V:256 H: 442
Load #$ff from $ad, shift left, move to x register. Take address $fe70, offset by x register, load the contents and jump to that address. End up in $0a20e0 where nothing is mapped. Since nothing is mapped there, we enter open bus, which means the CPU will execute whatever is left on the data bus. bsnes core shows just 00 for any unmapped area, pretending 00 is being executed, while in fact it isn't. The log is lying.
<Masterjun> it executes 20 due to the high byte of the address it just jumped to (since it's a 16 bit jump, it didn't even look at the bank, thus it wasn't 0A)
<Masterjun> then open bus changes because the JSR just wrote a 20 then 21 (or something) to stack
<Masterjun> and then it just runs through until it hits hardware registers (starting 2100), which isn't open bus anymore
<Masterjun> https://floating.muncher.se/bot/regs.txt
<Masterjun> well, not all of it at least
<Masterjun> then the critical part is 0a2134, execting something which changes open bus to 00, which then results in a real BRK at 0a2137
This instruction in turn jumps to $00FFFF in ROM where there's the value for a "branch long" instruction that executes a jump. The location from this jump will be read from $000000-$000002 because of a wraparound from $00FFFF.
Language: asm

0a2132 brk #$00 A:b7fe X:00fe Y:0007 S:01f7 D:0000 DB:00 NVMXdizC V:258 H: 392 0a2134 brk #$00 A:b7fe X:00fe Y:0007 S:01f7 D:0000 DB:00 NVMXdizC V:258 H: 404 0a2137 brk #$00 A:b7fe X:00fe Y:0007 S:01f7 D:0000 DB:00 NvMXdizC V:258 H: 436 00ffff brl $421a [00421a] A:b7fe X:00fe Y:0007 S:01f3 D:0000 DB:00 NvMXdIzC V:258 H: 496
Machine code 00 (Break) means we're jumping to $00:FFFF using the BRK vector.
<Masterjun> ROM is segmented into blocks of 0x8000 bytes into the $8000-FFFF part of each bank
<Masterjun> in other words, $00:FFFF is actually 0x7FFF bytes into the ROM
"0x7FFF bytes into the ROM" we see #$82 so we fetch this as a machine code, which means BRL (Branch Long). When an opcode is being fetched along with its arguments, the bank isn't accounted for, so all that's being incremented is the 16-bit address. So when we're at $00:FFFF and we have fetched the first byte of a multi-byte opcode, the rest is being fetched from $00:0000 and onward.
As luck would have it, those addresses contains the controller inputs left there by the controller reading routine that executed just before this crash happened.
Language: asm

00ffff brl $421a [00421a] A:b7fe X:00fe Y:0007 S:01f3 D:0000 DB:00 NvMXdIzC V:258 H: 496
By the time we get to $00ffff, address $000000 is #$4218. Since BRL is relative, we end up at PC $000002 and #$4218 is added, so we arrive at address $00421a. Finally our PC is at controlled registers, so we can execute anything that we input.
From there on it's business as usual when it comes to ACE on the SNES. A jump to controller registers is done and execution is kept there in a loop by executing code entered by 4 controllers, waiting for the next frame and then looping back. This code ends up storing $1A to $10 and $00 to $11 to set the game mode to credits and then jumping back into the main game loop and letting the game resume from there.
Language: asm

00ffff brl $421a [00421a] A:b7fe X:00fe Y:0007 S:01f3 D:0000 DB:00 NvMXdIzC V:258 H: 496 00421a nop A:b7fe X:00fe Y:0007 S:01f3 D:0000 DB:00 NvMXdIzC V:258 H: 526 00421b stz $12 [000012] A:b7fe X:00fe Y:0007 S:01f3 D:0000 DB:00 NvMXdIzC V:258 H: 578 00421d wai A:b7fe X:00fe Y:0007 S:01f3 D:0000 DB:00 NvMXdIzC V:258 H: 598 .... 00421e bra $4218 [004218] A:b7fe X:00fe Y:0007 S:01f3 D:0000 DB:00 NvMXdIzC V:248 H:1138 004218 lda #$1a A:b7fe X:00fe Y:0007 S:01f3 D:0000 DB:00 NvMXdIzC V:248 H:1156 00421a nop A:b71a X:00fe Y:0007 S:01f3 D:0000 DB:00 nvMXdIzC V:248 H:1168 00421b stz $12 [000012] A:b71a X:00fe Y:0007 S:01f3 D:0000 DB:00 nvMXdIzC V:248 H:1180 00421d wai A:b71a X:00fe Y:0007 S:01f3 D:0000 DB:00 nvMXdIzC V:248 H:1200
Load value #$1a to accumulator and let the game do some stuff.
Language: asm

00421e bra $4218 [004218] A:b71a X:00fe Y:0007 S:01f3 D:0000 DB:00 nvMXdIzC V:248 H:1140 004218 sta $10 [000010] A:b71a X:00fe Y:0007 S:01f3 D:0000 DB:00 nvMXdIzC V:248 H:1158 00421a nop A:b71a X:00fe Y:0007 S:01f3 D:0000 DB:00 nvMXdIzC V:248 H:1178 00421b stz $12 [000012] A:b71a X:00fe Y:0007 S:01f3 D:0000 DB:00 nvMXdIzC V:248 H:1190 00421d wai A:b71a X:00fe Y:0007 S:01f3 D:0000 DB:00 nvMXdIzC V:248 H:1210
Write #$1a from accumulator to $10 and let the game do some stuff.
Language: asm

00421e bra $4218 [004218] A:b71a X:00fe Y:0007 S:01f3 D:0000 DB:00 nvMXdIzC V:248 H:1140 004218 stz $11 [000011] A:b71a X:00fe Y:0007 S:01f3 D:0000 DB:00 nvMXdIzC V:248 H:1158 00421a jmp $8034 [008034] A:b71a X:00fe Y:0007 S:01f3 D:0000 DB:00 nvMXdIzC V:248 H:1178
Write zero to $11 and let go.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
MESHUGGAH
Other
Skilled player (1888)
Joined: 11/14/2009
Posts: 1349
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
It's always nice to see trace logs with explanations :)
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
Personman
Other
Joined: 4/20/2008
Posts: 465
delicious! do doo ♫ do doo ♫ do do doo do doo ♫...
A warb degombs the brangy. Your gitch zanks and leils the warb.
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 14852
Location: 127.0.0.1
This movie has been published. The posts before this message apply to the submission, and posts after this message apply to the published movie. ---- [3898] SNES The Legend of Zelda: A Link to the Past "game end glitch" by fmp, total & Yuzuhara_3 in 00:54.53