• towerful@programming.dev
    link
    fedilink
    arrow-up
    24
    ·
    19 hours ago

    The first play part is setting up arbitrary (in this case, player-entered) code execution.
    The 2nd part is entering the arbitrary code to be executed.
    The 3rd part is the arbitrary code being executed.

    From the description:

    This is a Tool-assisted run of Pokémon Yellow, playing around with arbitrary code execution and testing the limits of Gameboy hardware.

    Tool-assisted meaning a program entering the data into the game. A lot of times tool-assisted is in the context of a speed run, a TAS (tool-assisted speedrun).
    A TAS file can be shared and perfected by many people, and reflects the most optimised way to finish a game as fast as possible.
    Sometimes TAS runs include techniques that are “TAS only”, an extreme example being alternating between left & right every frame for 30 seconds. Sometimes these “TAS only” techniques end up being performed by actual speed runners. And some TAS runs are “Human viable” as in “no techniques used that can’t be executed by a speed runner”.

    Some TAS systems can interface with an actual console, pretending to be a controller (called “TAS Bot” I believe). Generally, they run the game in an emulator or interface with an emulator.

    So, this video is about a TAS (well, the tool-assisted part, not necessarily the speedrun part) setting up arbitrary code execution (ACE) that then executes a bunch of user-entered code, which is what happens in the rest of the video

    • lokalhorst@feddit.org
      link
      fedilink
      arrow-up
      5
      ·
      9 hours ago

      Thanks for the explanation. Sounds interesting, I’ll try to read up on the topic!

      One thing I am still confused about:

      Does that mean Super Mario and Zelda are somehow stored as legacy code in the Game Boy Game version of Pokemon Yellow, or is the code for these games injected by the TAS?

      • ChaoticNeutralCzech@feddit.org
        link
        fedilink
        English
        arrow-up
        7
        ·
        edit-2
        5 hours ago

        Everything is injected. Even most of Pokémon Gold, including the code enabling GBC features (the font is the same tho). This can’t be done on the NES because the character (graphics) is in CPU-inaccessible memory (and therefore ROM on most cartridges). There are several stages of the payload that write and execute each other:

        1. name+item manipulation
          • a few bytes in several seconds
        2. copying existing button input buffer
          • 60 bytes per second
        3. polling buttons in a loop
          • only CPU-constrained, almost as fast as copying from the cartridge to RAM, literally fast enough to stream video

        The Ocarina of Time “Triforce%” TAS speedrun activates some debug code such as the F-Zero spaceship model

        • printf("%s", name);@piefed.blahaj.zoneOP
          link
          fedilink
          English
          arrow-up
          1
          ·
          edit-2
          1 hour ago

          What have you done. I saw your comment the moment I entered my flat. I shouldn’t have pressed the link (pun intended). But I did.

          I didn’t change, shower, eat or any other of my coming home on a workday routines. I just watched. And cried at the end.

          My childhood is now complete. Thank you 🫶