Dave Brude has unearthed a long-rumored Tecmo Super Bowl secret: the false start.
Twenty years ago, Dave “Bruddog” Brude dominated friends in Tecmo Super Bowl, keeping detailed game notes. Today, Dave is a SoCal electrical engineer. He still stomps the TSB competition, and he still keeps copious Tecmo notes. Except now his notes don’t tally Joe Montana’s Passing Yards or QB Eagles’ scrambles, but the clockwork which makes TSB tick.
Brude confirmed that Tecmo programmed an unused “false start” animation into TSB. In discussing TSB’s hidden “False Start” screen, we suggested the referee’s awkward pose in signaling “no good” hinted that his graphical assets were meant to be recycled elsewhere. Dave Brude has proved the theory true.
Dave’s discovery started with a simple wish: to change TSB’s play formations. As kids, Dave and his friends didn’t even realize they could swap plays. So when the internet age began, Dave found himself searching Tecmo. He stumbled on a message board run by fellow TSB fanatic Matt Knobbe. The board would eventually become Tecmobowl.org. Matt and Dave, along with fellow TSB hackers such as jstout and cxrom have built the site into a Biblioteca Alexandrina of Tecmo Bowl knowledge.
To understand how Dave found a hidden false start animations in TSB, we need to understand how NES games work. NES cartridges store data in hexadecimal bytes. If you load Tecmo Super Bowl on the FCEUX NES emulator and look at the ROM file, you’ll see something like this:
Although useful for cramming information into small files, hex data is very difficult to read. For that reason, most games are programmed using boolean “assembly languages.” These languages use familiar words such as “if,” “then,” “load,” and “goto.” To fit assembly code onto an NES cart, the data compressed–or assembled–into hexadecimal. Therefore, to read the hexadecimal of an NES ROM such as Tecmo Super Bowl, we reverse-engineer and “disassemble,” the data back into its easier-to-read assembly language:
In the above example, the first command “LDA #01” loads the value 01 into memory register A. Knowing the architecture of the NES’ memory and its various commands paints an exact picture of how Tecmo Super Bowl runs, from the moment you press power to the closing credits.
Dave aptly describes ROM hacking as solving a jigsaw puzzle. The pieces all in a jumble, you start with edges and corners: easily-deciphered bytes like the game clock or score. With the edges assembled, a ROM hacker slowly builds, piece by piece, filling in the gaps.
Many of Tecmo’s corner and edge pieces (and a good portion of the interior as well) had already been pieced together by other hackers. Jstout, who helped debug cx_rom’s hack which expanded TSB to 32 teams, had already published the disassembly files to TecmoBowl.org.
Armed with TSB’s disassembly, FCEUX’s hacking tools and his own programming knowledge, Dave set about assembling Tecmo’s puzzle, byte by byte. His first eureka moment came when he found the byte governing play formation. By changing the value of that byte, Dave could make his favorite 49ers line up in any different number of play formations.
Dave continued filling the gaps in Tecmo Super Bowl’s program. He gained a clear enough picture of TSB’s guts to insert a chunk of code which allowed 2-point conversions. He also implemented an ingenious hack to make players push and pull while grappling their opponents, so stronger offensive linemen can push back a weaker defensive front.
In digging further, Dave noticed a few interesting variables on the code which draws the title screen. One byte chooses the background and a nearby one draws the foreground. Curious, Dave substituted values to see what he could make the game draw. It’s like seeing a jigsaw shape and trying different pieces until you find what fits.
BYTE $C8 ; SET IRQ0 SPLIT, XSCROLL,SOFT Y SCROLL LOC = 0
BYTE $F1 ; SET GAME STATUS AND PPUR MIRRORING TO HORIZONTAL
BYTE $F7, $25 ; DRAW TECMO PRESENTS
BYTE $F9, $01, $C2 ; DRAW BUNNY SPRITE
BYTE $FB, $1E ; WAIT 30 FRAMES = 0.5 sec
BYTE $E5, $1A, $4A ; SET BG AND SPR PAL AND AND FADE IN (BG, SPR)
BYTE $FB, $B4 ; WAIT 180 FRAMES = 3 sec
What fit was a discovery 25-plus years in the making. Changing byte x00C106 of the Tecmo Super Bowl ROM from C2 to AF replaces the Tecmo Rabbit with a ref signaling “false start.”
Try it yourself. Plug your TSB cart into a Game Genie and enter the codes YLXEPAAE & NXVLTAKU. Instead of the referee signaling for a first down, he gives the familiar false start sign.
Nothing in TSB’s code suggests how Tecmo intended false starts to work. Most likely would have been a random number generator, the computing equivalent of rolling dice. TSB uses similar “dice rolls” to determine fumbles and injuries. Brude says implementing false starts via a random number generator would be relatively simple. Similar to fumbles and injuries, player condition and statistics would influence how often the random number generator hits them for a “false start.”
Given the unused screens for both false start and offside, Dave searched for a similar “offside” animation. Brude checked all 256 possible bytes in the animation drawing code, without luck. There is no unused “offside” animation in TSB. Tecmo programmers, it would seem, were far enough into the game’s development to draw an animation for false start, but scrapped the implementation of penalties before animating offside. Perhaps the false start animation was more a proof of concept than anything else.
It’s amazing that, 25 years on, we’re still discovering Tecmo Super Bowl’s secrets. Dave Brude has added an important piece to the Tecmo puzzle: the false start. A simple hidden animation tells us so much, not only in how the game works, but how Tecmo intended the game to be.
Below, a simulation of the scene being used in-game. Text and music were modified.
Update: an earlier version of this article incorrectly attributed the TSB 32-team hack solely to jstout.
 The NES used 6502 Assembly, a programming language used by similar systems in the 70’s and 80’s such as the Apple II, Commodore 64 and the Atari 800.