back

Lecture 2 (01.23.21) - Character Encodings

Recorded Lecture

Finish These Before You Leave

  • Edit the SMB1 text where you see fit!
  • Create a IPS Patch with LIPS.
  • Send your patch in the Discord with a short description of what you changed.

Required Software

Please download these if you haven’t already.

Refer to the previous lecture notes for more info.

Character Encodings

Character encoding is the method of representing a collection of characters with a digital medium. For example, Morse code and Braille.

In computer science, the digital medium is binary. But which numbers should go to which letters?

16-Segment
16-Segment Pins

We could have each letter be represented by the code needed to light up a sixteen-segment display.

Display Encodings

As of 1963 a standard was introduced: the American Standard Code for Information Interchange (ASCII). ASCII was the first successful attempt at ensuring that all text used the same mapping from binary to characters.

ASCII

Since 1963, there have been several more character encodings released such as ISO 8859-1 and UTF-8, but nearly all character encodings are based off ASCII.

NES Character Encodings

Considering that the NES was released in 1983, you would expect that NES games would use a variation on ASCII for their text encoding. For games like Wrath of the Black Manta, you would be correct: WotBM_ASCII However, not all game developers chose to make life easier for hackers by using the standard character encoding. Actually, most games developed by Nintendo use a custom character encoding. Fortunately, hackers have reverse engineered many text encodings from their favorite games:

Exercise

  • Edit the SMB1 text with Gold Finger.
  • Create a IPS Patch with LIPS.

Using GF

Gold Finger is an easy-to-use, bare bones hex editor, that allows custom character encodings. Simply load the Super Mario Bros. ROM file and encoding table file, search for "MARIO" "16 0A 1B 12 18", and edit away.

Gold Finger

Using LIPS

International Patching System (IPS) is a method for sharing ROM hacks legally. IPS files only store CHANGES to a ROM file, not the entire ROM file. IPS files are the standard for sharing hack of ROMs less than 16MiB in size. You should get into the habit of archiving your work as IPS files, not as ROMs. LIPS

Apply IPS Patch

  1. Takes an IPS file (newtext.ips)
  2. Takes a ROM file (SMB1_vanilla.nes)
  3. Saves your patched ROM file (SMB1_newtext.nes)

Create IPS Patch

  1. Takes a base ROM file (SMB1_vanilla.nes)
  2. Takes an edited ROM file (SMB1_newtext.nes)
  3. Saves your patched ROM file (newtext.ips)