
Whew. Long one. Let me tell you the ways.
Quick wins since Update #2:
- The freeze bug is understood, patched, and the patch is permanent.
- 18-week standings and bracket confirmed correct through a full test run.
- The C1 stats bug has been found and isolated.
- Base is at build 21.
The Ghost
For 35 years the game has had a random crash. No warning. No pattern anyone could nail down. Just the emulator dying mid-game on some unlucky roll.
We know what it is now.
The NES runs a little traffic cop that hands tasks to the CPU sixty times a second. Every time the game needs something done, it writes the task’s address into a table, then marks it ready. Two writes. Back to back. No protection in between.
The problem: the screen interrupt fires sixty times a second too. It can land anywhere. If it lands between those two writes, the traffic cop finds a task with an address but no ready flag. It jumps to garbage. The game dies.
That window is about twelve millionths of a second wide. The game creates thousands of tasks in a normal game. The odds are long — but they exist. And over 35 years of play, they land.
The Fix
bruddog’s disassembly of the fixed bank is what made this possible. The scheduler lives in fixed bank ROM — the last 16KB, always mapped. We found 29 bytes of unused space and wrote the guard there: a check that runs before the dispatcher, catches a task in the bad state, and skips it.
Ten race outcomes tested on the community base before the patch. Zero after.
Why It Stays
After the 32-team expansion, file offsets shift. But the fixed bank doesn’t move in CPU space. The guard is still at the same address. The patch doesn’t need to be redone for expansion. It’s done.
This is what COA Elway was asking about. jstout relayed the question after Update #2 went up. Yes — this is the OG random crash bug. The one people have been playing around since 1991.
The Harness Result
After Update #2, the test rig ran 795 complete games on the unguarded community base. Zero hangs.
That sounds like proof. It isn’t, and I want to be straight about that.
bruddog flagged the gap: the crash only happens in busy frames, when the CPU hasn’t finished its work before the interrupt fires. COM-vs-COM games may never push the CPU that hard. 795 clean games may be measuring a regime where the race barely applies.
His suggestion: hook NMI entry in the emulator and log where the CPU was interrupted. Count the near-misses directly — how often does the interrupt land inside those four instructions during real heavy frames. That experiment hasn’t run yet.
So here is where we are honestly: the mechanism is fully characterised. The fix is in. The fix is permanent. What we don’t have is a live caught freeze to replay on a guarded ROM — the specific test Update #2 named. The bug is rare enough that 795 games didn’t produce one. bruddog’s point explains why, and it improves the analysis. Crediting him by name because it does.
The Edits
This week was heavy on the NFL and NCAA community ROMs — the ones people are actually playing right now. Both builds run on the same engine with the same bank layout, but they are not the same ROM. Every hack that touches code has to be verified on both, and the differences are real.
The touchback hack is the same structure on both sides — same windows, same formula, same approach. But the yard-line constants are different (25 for NCAA, 35 for NFL), and the bank displacement shifts every JSR and JMP target. You can’t copy one over the other. The schedule table format is different too — reading the NFL’s offset against the NCAA ROM returned garbage. Had to be decoded from scratch.
The NFC West uniform lookup was the sharpest example. The NFL line had already fixed it. The NCAA still carried the original broken expansion code. Miami against TCU: both teams in white on the field, Miami in orange in the cutscenes. Same bug the NFL fixed months ago, sitting untouched on the NCAA side because nobody had checked whether the code fix came across with the data. It hadn’t.
DGreen28 cleaned up the Home/Away jersey hack for the NFL ROM this week after the NCAA version’s hex values were being used on the NFL side and breaking things. He bundled the correct NFL-specific values so nobody has to sort that out again.
All of it feeds the base. Every difference found is a difference TSB 2027 BASE [STANDARD] has to handle correctly when it rolls these features up. The parallel editing isn’t a side project — it’s the reconnaissance.
The Patch
Download: TSB2027_raceguard.ips
The raceguard is already baked into TSB 2027 BASE [STANDARD]. If you’re building on that, you don’t need to do anything — it’s in there.
The raceguard IPS is attached for anyone building on the T-Borg 20XX base or the original 28-team ROM. Apply it to:
T-Borg 20XX Base ROM.nes
https://tecmobowl.org/files/file/547-tecmobowlorg-base-rom-32-team-original-tsb-gameplay/
or the original file:
Tecmo Super Bowl (U).nes
https://tecmobowl.org/files/file/1-tecmo-super-bowl/
29 bytes. One thing, cleanly. Apply it before any other fixed-bank patches.
If you’re on the 18-week + 2pt community ROM, the raceguard can’t be dropped in directly. Both it and the 2-point conversion patch need the same 29 bytes of free space in the fixed bank (CPU $FFCE). They conflict. TSB 2027 BASE [STANDARD] resolves this by relocating the 2pt code to expanded ROM space — that’s part of why the expansion matters.
Base Progress
Main build is at base 21. Short list of what’s in: 18-week regular season, full playoff bracket, all 34 teams, correct 2026 rosters, NFC West uniform lookups fixed, linear target-share passing. Standings and bracket confirmed correct through a full 18-week run this week.
The C1 stats bug — a quirk where Super Bowl scores were overwriting a QB’s completion count in the stat screen — has been found and isolated. Fix in progress.
2-point conversion patch (Suede Wade’s work) is slated post-expansion.
What’s Next
The expansion. That’s the gate for the 2pt re-plumb and the final layout.
Not a bad stretch.
Credits
cx_rom — community 32-team base that TSB 2027 BASE [STANDARD] builds on.
bruddog — fixed-bank disassembly and the reachability challenge that sharpened the race analysis.
COA Elway — OG crash bug researcher. Confirmed this is the one.
jstout — relayed the confirmation.
Suede Wade — 2-point conversion patch.
Community editing work on the NFL and NCAA ROMs — credits when the base is done.
