the cutting room mirror

Family Computer Disk System

This article has a talk page!
view on tcrf.net

RAM Check#

OK! ERROR!

Hold Start + Select during the boot screen and press Reset. If no problems are detected, the screen will display "PRAM CRAM OK"; if an error occurs, the address of the first memory cell where the error was detected will be displayed.

Programmer Credit#

01

01A/02

Use the RAM Check code above, but before the text appears on-screen release Start + Select then hold Right + A to see the programmer credit of Takao Sawano. This works on both the standalone unit and the Twin Famicom, the latter of which otherwise makes no reference to Nintendo.

The 01 revision only includes the programmer credit. The 01A revision onwards features some space-saving code optimizations (including the removal of the code responsible for adding a drop shadow to the font, seen below) that allowed Sawano to add both the name of the ASIC and the team responsible for FDS development, Nintendo R&D2.

Revisional Differences#

Yes, there are more official hacks after-market versions of the BIOS than commercial-era revisions.

01, 01A, and 02#

01

01A

02

The 01 and 01A revisions display the Nintendo logo, whereas the 02 revision uses the "FAMICOM" logo present on the Twin Famicom.

The 01A revision removed the heavy shading on the bottom edges of the Nintendo logo and the drop shadow behind the alphanumeric character set.

(Source: Original TCRF Research)

Animal Crossing, Wii & Wii U Virtual Console#

The 01A revision BIOS was modified for use by emulators in Animal Crossing6, Wii Virtual Console7, and Wii U Virtual Console. The table below lists the modifications:

BIOS Offset

CPU Address

Original Data (01A)

Modified Data

Modified Instruction

$0239

$E239

$85

$42

STP/KIL

$0406

$E406

$85

$42

STP/KIL

$073E~$0740

$E73E~$E740

$A2 $B2 $CA

$4C $43 $E7

JMP $E743

$07A4

$E7A4

$4C

$42

STP/KIL

$0EF4

$EEF4

$A5

$42

STP/KIL

The unofficial STP/KIL instruction (opcode $42) normally causes the CPU to crash/halt execution until the system is reset. It was used by the emulators to hook into disk access routines and provide high-level replacements (i.e. to bypass disk loading/saving)8. The JMP instruction simply skips over a section of timed code originally meant to wait for the CRC checksum to be written to disk.

Famicom Mini#

A different set of modifications were made to the 01A revision BIOS for the Famicom Mini (Game Boy Advance) series, which included FDS titles. Much of the modifications consist of large sections of NOP instructions (and similar useless instructions) patched over disk access routines, the RAM check, and the hidden programmer credits. Additional patches to the disk access routines (using the same STP/KIL opcode from above) appear to serve the purpose of high-level disk drive emulation.

Additionally, the graphics data was modified to account for the smaller vertical resolution of the GBA screen.

(Source: TakuikaNinja)

3DS Virtual Console#

The 01A revision BIOS was modified in a different manner for use with the 3DS Virtual Console. The table below lists the modifications:

BIOS Offset

CPU Address

Original Data (01A)

Modified Data

Modified Instruction

$0153

$E153

$A6

$60

RTS

$01F8

$E1F8

$A9

$E7

ISC zp

$0239

$E239

$85

$F7

ISC zp,x

$040A

$E40A

$E0

$E3

ISC (d,x)

$0F04~$0F06

$EF04~$EF06

$20 $6B $E1

$EA $EA $EA

NOP NOP NOP

$0F65~$0F67

$EF65~$EF67

$F0 $48 $20

$4C $CD $EF

JMP $EFCD

$1F86

$FF86

$9F

$10

LDX #imm operand

$1F96

$FF96

$20

$00

LDA #imm operand

The RTS instruction causes any calls to a millisecond delay routine to return immediately (often used during disk I/O). The unofficial ISC instructions were chosen by the emulator to hook into disk access routines and provide high-level replacements. Unfortunately, the implementation of these particular instructions can cause the 3DS to crash when executed outside of the intended FDS BIOS area9. The NOPs mask a subroutine call to enable PPU rendering. The JMP instruction simply skips the license screen verification and the subsequent sequence to scroll it on-screen. Lastly, the two operand replacements change values used to initialise the APU's pulse and triangle channels respectively.

The Mysterious Murasame Castle#

Curiously, additional modifications were made specifically for the 3DS VC release of The Mysterious Murasame Castle. The modified code hijacks a subroutine originally meant for reading the Family BASIC keyboard (which itself went unused in commercial FDS games). See the notes page for a disassembly of the modified code.

(Source: TakuikaNinja)

Nintendo Classic Mini: Family Computer#

To do:
These are just the visible differences. Figure out the exact technical changes, which may be done at the emulator level.

Unlike every previously mentioned emulated version, the FDS emulator on the Nintendo Classic Mini: Family Computer console (not the NES Classic Edition, which does not include any FDS games) does not skip the BIOS; selecting an FDS game will boot into the "PLEASE SET DISK CARD" sequence until the player presses a button, at which point the "disk" will be "inserted" and the game will start proper. It appears to use an unmodified 01 revision as opposed to a modified 01A revision, though the flashing that occurs during several parts of the BIOS' animations has been slowed down as part of Nintendo's consistent efforts to eliminate potentially eye-straining effects from their re-releases.

The same BIOS would later be used in the Animal Crossing: New Horizons 3.0 update when playing Ice Hockey, though the "PLEASE SET DISK CARD" sequence is inaccessible as the emulator immediately "inserts the disk" upon bootup.

Game & Watch: Super Mario Bros.#

An entirely different set of modifications were made to the 01A revision BIOS for the Game & Watch: Super Mario Bros. unit containing The Lost Levels. Much of the modifications consist of large sections of NOP instructions (and similar useless instructions) patched over disk access routines, the RAM check, and the hidden programmer credits. Additional patches to the disk access routines appear to serve the purpose of simplifying the disk drive emulation.

(Source: TakuikaNinja)

References#


  1. Programmer Credit↩︎
  2. ファミリーコンピュータ ディスクシステムとは? | ファミリーコンピュータ | 任天堂↩︎
  3. ツインファミコンが発売35周年。シャープから発売されたファミコンとディスクシステムが一体化したゲームキッズ羨望の豪華マシン【今日は何の日?】 | ゲーム・エンタメ最新情報のファミ通.com↩︎
  4. 電玩始祖,紅白之路(中)↩︎
  5. Family Computer Hong Kong Version - FamiWiki↩︎
  6. https://np.reddit.com/r/emulation/comments/377gug/how_to_obtain_a_famicom_disk_system_fds_bios/↩︎
  7. https://www.reddit.com/r/emulation/comments/4u9lq0/another_legal_way_to_obtain_fds_bios_using_super/↩︎
  8. Animal Crossing Decompilation Project↩︎
  9. YouTube Video: "How Inaccurate are Nintendo's Official Emulators?" by 100th_Coin (15 minutes)↩︎