ClusterM / fdskey

Famicom Disk System drive emulator
GNU General Public License v3.0
196 stars 16 forks source link
famicom famicom-disk-system fds stm32 stm32cubeide

FDSKey

An open-source, low-cost, and easy-to-build Famicom Disk System drive emulator featuring a sleek OLED display.

image

image

How you can use it:

Requirements:

How to build it

You'll need a few low-cost components.

Circuit diagram

Сircuit diagram

Bill of materials

Сircuit diagram

Components

  1. PCB

image

The PCB is designed in the DipTrace software.

You can have it produced at any PCB factory (e.g. jlcpcb.com or PCBWay) using gerber files. PCB properties:

  1. STM32G0B0CET (or any STM32G0B0CETxxx) microcontroller

STM32G0B0CET

You can easily find it on mouser.com or taobao.com.

  1. OLED display module

OLED display

OLED display

It's a very popular OLED display, search for SSD1306 0.91-inch OLED 128x32 4-pin on aliexpress.com, ebay.com, amazon.com or taobao.com. These displays are available in different colors: blue, white and yellow, you can select the one you prefer.

Solder it like this:

image

It's recommended to put something soft under the display on the right side.

WARNING: some unscrupulous sellers may sell you used, burned-in displays.

  1. microSD card socket (push-push, 8-pin + card detect pin = 9-pin)

microSD card socket

microSD card socket

It's a very popular push-push socket, they can be found on aliexpress.com. Also, you can search for 112J-TDAR-R01 model but there are many compatible models with other names. You can always modify the PCB to accommodate a different socket model.

  1. LD1117S33 stabilizer

LD1117S33

You can buy it in any electronic components store.

  1. Four SMD buttons

SMD button

Search for 3X4X2.5H SMD buttons, they can be found on aliexpress.com, ebay.com, amazon.com or taobao.com. You can also search for 434133025816 model on mouser.com.

  1. Resistors and capacitors

Capacitor

You will need only a few of them:

You can buy them in any electronic components store.

  1. Plastic case

Case

You can print plastic case with a 3D printer. You can find .stl files in the case_3d_models directory. There are two types of models:

image

What does it look like when everything is assembled: image

Flashing the firmware

There are five TH pads (actually 6 but 1 is unused) on the PCB to connect a ST-Link (or clone) programmer: GND, VCC, SWD, SWCLK, and NRST. Use STM32CubeProg software (Win/Linux/Mac) to write the bootloader and the firmware. Old STM32 ST-LINK Utility will not work, it's deprecated.

First, you need to write the bootloader - bootloader.bin file. Use a programmer and write it to the 0x08000000 address (start of the flash memory, default address).

Then you can put the main firmware file - FdsKey.bin on your SD card (FAT/FAT32/exFAT formatted) and hold all four buttons on power-on, e.g. connect FDSKey to RAM adaptor, hold buttons and turn a Famicom on. You can use the same method to update the main firmware in the future without additional hardware. You can also use a programmer and write it to the 0x08020000 address.

You can write the bootloader and the firmware at once using the STM32CubeProg CLI tool:

STM32_Programmer_CLI.exe -c port=SWD --erase all --download bootloader.bin 0x08000000 --download fdskey.bin 0x08020000

After the first boot, press and hold the left button on the main menu screen for 3 seconds to access the service menu. There, you can select the OLED display controller type (change it if the display shows a corrupted image in "lefty mode") and check some system information.

Device usage

Format a microSD card to FAT/FAT32/exFAT and put some .fds files on it. Insert a microSD card into a FDSKey, insert a FDSKey into a RAM Adaptor's cable instead of a physical disk drive and turn on a Famicom. You can hot plug a FDSKey when Famicom is already on too, it's ok.

Now you can navigate through the FDSKey interface using the buttons. Left button usually means back, right button usually means OK and up/down are used to select something (file, disk side, etc.) Also, you can long press the left button in the file browser to directly return to the main menu from a subfolder, and long press the right button to open the file properties menu.

FDSKey - interface flowchart

Oops, too complicated :( Let's try again...

GUI

Much better.

WARNING: when a game writes some data to a virtual disk (i.e., saves game progress) don't turn off your Famicom power until the updated ROM has been saved to the SD card. Wait a second for it or eject a virtual disk (left button). A saving message will be displayed, do not turn off power while this message is visible.

Settings menu

Use up/down buttons to select a setting and left/right to change it. Setting descriptions:

Service menu

You can access the service menu by holding the left button on the main menu screen for 3 seconds. This menu is mainly meant for developers or advanced users. There is a lot of system information and several options/functions:

Reading and writing disks

How to dump a physical disk to a file

You can use DupliFDS to copy a physical disk to a virtual one, simply create an empty ROM. There is Create blank disk item in the main menu for it.

  1. Put the DupliFDS ROM on the SD card.
  2. Select and load the DupliFDS ROM on your SD card just like you would do with any other ROM.
  3. Return to the main menu and select Create blank disk.
  4. Enter filename for the new ROM, trailing spaces will be trimmed.
  5. When DupliFDS requests a source disk, disconnect FDSKey from a RAM adaptor and connect a physical FDS drive with a game disk.
  6. When DupliFDS requests a target disk, disconnect a physical drive, connect a FDSKey and select the ROM created in steps 3-4.
  7. Repeat steps 5-6 until the copy operation is completed.

How to write to a physical disk from a file

This is a reverse operation of dumping: you can use DupliFDS to copy a virtual disk to a physical one. Please note that you need to remove the copy protection from your physical drive if it has any. In most cases, it's not such a difficult process.

  1. Put the DupliFDS ROM on the SD card.
  2. Select and load the DupliFDS ROM on your SD card just like you would do with any other ROM.
  3. When DupliFDS requests a source disk, select the source ROM/side.
  4. When DupliFDS requests a target disk, disconnect FDSKey from a RAM adaptor and connect a physical FDS drive with a blank disk.
  5. Disconnect a physical FDS drive and connect the FDSKey.
  6. Repeat steps 3, 4, and 5 until the copy operation is completed.

Firmware updates

You can always download the latest version at https://github.com/ClusterM/fdskey/releases.

Also, you can download automatic interim builds at http://clusterm.github.io/fdskey/.

Remember, you can update the firmware by putting FdsKey.bin on your SD card and holding all four buttons on power-on.

Twin Famicom compatibility

You can use FDSKey with Twin Famicom too. But you need a special cable. It's easy to make one.

image

It has a simple 12x1 dupont connector on the one side, you need to connect it to Twin Famicom's Port C on the back-bottom side (instead of the original cable).

Unfortunately, there is a non-standard connector on the other side of the cable. But you can use a SFC/SNES/N64/NGC AV connector:

image

You can find it on aliexpress.com. But you need to cut a "key" - piece of plastic on this connector, or just use the FDSKey without a case.

Connection diagram:

           Twin Famicom Port C                   Connector for FDSKey
       (looking at rear of console)          (looking from FDSKey's side)
█████████████████████████████████████████  ████████████████████████████████
█████████████████████████████████████████  ████████████████████████████████
██                                     ██  ███  1   3   5   7   9   11  ███
██ 8  6  2  4  1  3  5  7  9  11 12 10 ██  ███  2   4   6   8   10  12  ███
█████████████████████████████████████████  \██████████████████████████████/
█████████████████████████████████████████   \████████████████████████████/

Pin meanings
+----+---+-----------------------+
| 1  | O | /write                |
| 2  | O | VCC (+5VDC)           |
| 3  | O | /scan media           |
| 4  | O | VEE (ground)          |
| 5  | O | Write data            |
| 6  | I | Motor on/battery good |
| 7  | I | /writable media       |
| 8  | - | ---                   |
| 9  | I | Read data             |
| 10 | I | /media set            |
| 11 | I | /ready                |
| 12 | O | /stop motor           |
+----+---------------------------+

You must pull-up write data line to VCC via resistor (5K-20K) if you want to save game progress, because Twin Famicom has no pull-up resistors inside it.

image

Also, it's recommended to pull-up /media set pin to VCC too if you want to hot plug the FDSKey. And don't forget to upgrade the FDSKey firmware to at least v1.3.

Donate