The C64Nano is a port of some MiST and MiSTer core components of the C64 for the :
Board | FPGA | support | Note |
---|---|---|---|
Tang Nano 20k | GW2AR | X | - |
Tang Primer 25K | GW5A-25 | X | no Dualshock 2, no Retro D9 Joystick |
Tang Mega 60k NEO | GW5AT-60 | X | dual Dualshock |
Tang Mega 138k Pro | GW5AST-138 | X | dual Dualshock |
Be aware that the VIC20 had been ported too in similar manner (VIC20Nano).
Also the Atari 2600 VCS had been ported (A2600Nano).
This project relies on a M0S Dock µC being connected to the Tang Nano 20K.
Alternately you can use a Raspberry Pi Pico or esp32-s2/s3 and use the FPGA companion firmware.
Original C64 core by Peter Wendrich
All HID components and µC firmware by Till Harbaum
c1541 by https://github.com/darfpga
Features:
- PAL 800x576p@50Hz or NTSC 800x480p@60Hz HDMI Video and Audio Output
- USB Keyboard via µC (Sipeed M0S Dock BL616 / Raspberry Pi Pico RP2040 / ESP32 S2/S3)
- USB Joystick via µC
- USB Mouse via µC as c1351 Mouse emulation
- USB Gamepad Stick via µC as Paddle Emulation
- legacy D9 Joystick (Atari / Commodore digital type) MiSTeryNano shield
- Joystick emulation on Keyboard Numpad
- Dualshock 2 Gamepad Keys & Stick as Joystick
- Dualshock 2 Gamepad Sticks as Paddle Emulation (analog mode)
- Emulation of C64GS Cheetah Annihilator joystick 2nd Trigger Button (Pot X/Y)
- emulated 1541 Diskdrive on FAT/extFAT microSD card with parallel bus Speedloader Dolphin DOS 2. GER manual
- c1541 DOS ROM selection
- Cartridge ROM (*.CRT) loader
- Direct BASIC program (*.PRG) injection loader
- Tape (*.TAP) image loader as C1530 Datasette
- Loadable 8K Kernal ROM (*.BIN)
- VIC-II revision and 6526 / 8521 selection
- SID revision 6581 or 8580 selectable
- 2nd dual SID Option and loadable Filter curves
- emulated RAM Expansion Unit (REU) or GeoRAM
- On Screen Display (OSD) for configuration and loadable image selection (D64/G64/CRT/PRG/BIN/TAP/FLT)
- Physical MIDI-IN and OUT MiSTeryNano shield
- RS232 Serial Interface VIC-1011 or UP9600 mode to Tang onboard USB-C serial port or external hw pin.
- Freezer support (e.g. Action Replay)
HID interfaces aligned in pinmap and control to match MiSTeryNano project's bl616 misterynano_fw
respectively FPGA-Companion
Basically a µC acts as USB host for USB devices and as an OSD controller using a SPI communication protocol.
Note PROJECT IS STILL WORK IN PROGRESS
The installation of C64 Nano on the Tang Nano 20k board can be done using a Linux PC or a Windows PC
(Instruction).
See Tang Primer 25K. PMOD TF-CARD V2 is required !
Emulated 1541 on a regular FAT/exFAT formatted microSD card including parallel bus Speedloader Dolphin DOS 2.0.
Copy a D64 Disk image to your sdcard and rename it to disk8.d64 as default boot image.
Add further D64 or G64 images as you like and insert card in TN slot. LED 0 acts as Drive activity indicator.
Tip
Disk directory listing: (or F7 keypress)
command:
LOAD"$",8
LIST
Load first program from Disk: (or just LOAD if Dolphin Kernal active)
LOAD"*",8
RUN
c1541 DOS ROM can be selected from OSD (default Dolphin DOS 2.0, CBM DOS, SpeedDos Plus or JiffyDOS)
In case a program don't load correctly select via OSD the factory default CBM DOS an give it a try.
Cartridge ROM can be loaded via OSD file selection.
Copy a *.CRT to your sdcard and rename it to c64crt.crt as default boot cartridge ROM.
Prevent the cartridge load at boot by OSD CRT selection No Disk , Save settings and System Cold Boot.
Tip
Detach Cartridge by OSD :
temporary
Cartridge unload & Reset
permanent
No Disk, Save settings and System Cold Boot.
Important
Be aware that some Freezer Card CRT might require to use the standard C64 Kernal and the standard C1541 CBM DOS.
A BASIC Program *.PRG file can be loaded via OSD file selection.
Copy a *.PRG to your sdcard and rename it to c64prg.prg as default boot basic program. Prevent the PRG load at boot by OSD PRG selection No Disk , Save settings and Reset or System Cold Boot.
Tip
Check loaded file by command: LIST
Important
command: RUN
A Tape *.TAP file can be loaded via OSD file selection
In order to start a tape download choose C64 CBM Kernal (mandatory as Dolphin DOS doesn't support Tape). Best to save Kernal OSD selection via Save settings.
Important
command: LOAD
___ Only if you have Exbasic Level II .CRT Basic loaded then use command: LOAD*
Screen will blank!
The file is loaded automatically as soon as TAP file selected via OSD (no need to press PLAY TAPE button) in case no TAP had been previously selected.
As mentioned screen will blank for several seconds and then display briefly the filename of the to be loaded file. It will blank shortly afterwards again till load completed and take a lot of time...
Copy a *.TAP to your sdcard and rename it to c64tap.tap as default tape mountpoint.
For Tape unload use OSD TAP selection No Disk and Reset or System Cold Boot.
Warning
After board power-up or coldboot a TAP file will not autoloaded even if TAP file selection had been saved or c64tap.tap mountpoint available !
Unblock loader by OSD TAP selection No Disk or simply select again the desired TAP file to be loaded after you typed LOAD
Tip
Check loaded file by command: LIST
Important
command: RUN
Note
The available (muffled) Tape Sound audio can be disabled from OSD.
The build-in Dolphin Kernal is the power-up default C64 Kernal with an excellent C1541 speedloader.
Tip
If you are fine with that then there is no need to load another Kernal via OSD and just select OSD Kernal BIN selection No Disk and Save settings!
In general Kernal ROM files *.BIN can be loaded via OSD selection.
Copy a 8K C64 Kernal ROM *.BIN to your sdcard and rename it to c64kernal.bin as default boot Kernal.
Prevent Kernal load by OSD Kernal BIN selection No Disk and Save settings and do a power-cyle of the board. In this case the build-in Dolphin Kernal will by default be used after next power cycle.
Custom Filters curves can optionally be loaded via OSD.
Tip
This is in most cases not needed and build-in filters curves are already an optimum.
Note
Remember to select the 6581 chip, not the 8580.
Select 'Custom 1' as the filter to activate it.
When a custom filter is loaded, there's no difference between custom options Custom 1, 2, and 3. Selecting 'Default' switches back to the built-in filter curve.
Prevent Filter curve load by OSD Kernal FLT selection No Disk and Save settings and power-cyle of the board.
The core will after power cycle/ cold-boot start downloading the images on the sdcard in the following order:
Note
(1) BIN Kernal, (2) CRT ROM, (3) PRG Basic and finally (4) FLT.
For those programs the require a RAM Expansion Unit (REU) it can be activated by OSD on demand.
Playing Sonic the Hedgehog V1.2
Enable REU, and load the PRG.
Playing around with GEOS
Enable REU, select c1541 CBM DOS ROM and load the PRG.
- Nano 20k S2 keep pressed during power-up for FLASH programming of FPGA bitstream
- Mega 60k NEO
SW1 ON
SW6 ON
+ Press & HoldRECONFIG
+ Power the Board + connect USB programmer cable + releaseRECONFIG
and perform programming.
Caution
A FLASH programm attempt without keeping the board in reset may lead to corruption of the C1541 DOS images stored in FLASH requiring re-programming.
- S1 swap the Joystick Ports if OSD Swap Joys is set to Off mode.
invoke by F12 keypress
- Reset
- Cold Reset + memory scrubbing
- Audio Volume + / -
- Scanlines effect %
- Widescreen activation
- HID device selection for Joystick Port 1 and Port 2
- REU activation
- c1541 Drive disk image selection
- c1541 Disk write protetcion
- c1541 Reset
- c1541 DOS ROM selection
- MIDI configuration
- PAL / NTSC Video mode
- VIC-II revision, 6526 / 8521 and SID 6561/8580 selection
- SID Filter selection
- geoRAM activation
- Loader (CRT/PRG/BIN/TAP/FLT) file selection
- Joystick Port Swap
- Cartridge unload
legacy single D9 Digital Joystick.
OSD: Retro D9
Atari ST type of Joystick 2nd button supported using a MiSTeryNano shield.
Don't configure e.g. ArcadeR for C64 mode rather than
normal digital 2nd button mode (2nd trigger button connect signal to ground)
or
USB Joystick(s).
OSD: USB #1 Joy or USB #2 Joy
Also RII Mini Keyboard i8 left Multimedia Keys are active if USB #1 Joy selected.
or
Gamepad Stick as Joystick.
OSD: DS #1 Joy or DS #2 Joy
left stick digital for Move and square , cross and circle Button for 3 Trigger buttons
or following Pad controls:
Buttons | - | - |
---|---|---|
square Trigger |
Up | cross Trigger 2 |
Left | - | Right |
- | Down | circle Trigger 3 |
or Keyboard Numpad.
OSD: Numpad
0 Trigger |
8 Up |
. Trigger 2 |
4 Left |
- | 6 Right |
- | 2 Down |
- |
or Mouse.
OSD: Mouse
USB Mouse as c1351 Mouse emulation.
or Dualshock2 Gamepad as Paddle.
OSD: DS #1 Paddle or DS #2 Paddle
Dualshock 2 Sticks in analog mode as VC-1312 Paddle emulation.
square , cross, circle and triangle used as 4 Trigger buttons
You have first to set the DS2 Sticks into analog mode by pressing the DS2 ANALOG button. Mode indicated by red light indicator.
Configure DIGITAL mode (press ANALOG button again) when using the Joystick mode again and set OSD: DS #1 Joy
or USB Paddle.
OSD: USB #1 Padd or USB #2 Padd
Left Stick in X / Y analog mode as VC-1312 Paddle emulation.
Button cross / square as Trigger
PAGE UP (Tape Play) Key or the Tang S1 Button swap the Joystick Ports if OSD Swap Joys is set to Off mode.
F11 (RESTORE) Key as FREEZE
. Typically used by Freezer Cards like Action Replay, Snappy Rom etc.
LED | function | TN20K | TP25K | TM60K | TM138K Pro |
---|---|---|---|---|---|
0 | c1541 activity | x | x | x done | x |
1 | D64 selected | x | - | x ready | x |
2 | CRT seleced | x | - | - | x |
3 | PRG selected | x | - | - | x |
4 | Kernal selected | x | - | - | x |
5 | TAP selected | x | - | - | x |
Solid red of the c1541 led after power-up indicates a missing DOS in Flash
Multicolor RGB LED
- green all fine and ready to go
- red something wrong with SDcard / default boot image
- blue µC firmware detected valid FPGA core
- yellow FPGA core can't detect valid firmware
- white -
Type of MIDI interface can be selected from OSD.
There is support for Sequential Inc., Passport/Sentech, DATEL/SIEL/JMS/C-LAB and Namesoft
You can use a MiSTeryNano MIDI shield to interface to a Keyboard.
The Tang onboard USB-C serial port can be used for communication with the C64 Userport Serial port in VIC-1011 or UP9600 mode.
Terminal programs need the Kernal serial routines therefore select via OSD the CBM Kernal rather than default DolphinDOS.
For a first start use UP9600 mode and a Terminal program like ccgms and on the PC side Putty with 2400 Baud.
OSD selection allows to change in between TANG USB-C port or external HW pin interface.
Board | RX (I) FPGA | TX (O) FPGA | Note |
---|---|---|---|
TN20k | 31 | 77 | pinmap, misterynano io(6) / io(7) |
TP25k | K5 | L5 | J4-6 J4-5, share M0S Dock PMOD |
TM60k NEO | AB20 | AA19 | J24-6 J24-5, share M0S Dock PMOD |
TM138k Pro | H15 | H14 | J24-6 J24-5, share M0S Dock PMOD |
Remember that in + out to be crossed to connect to external device. Level are 3V3 tolerant.
Prototype circuit with Keyboard can be powered by Tang USB-C connector from PC or a Power Supply Adapter.
Source code can be synthesized, fitted and programmed with GOWIN IDE Windows or Linux.
Alternatively use the command line build script gw_sh.exe / gw_sh.sh build_tn20k.tcl , build_tp25k.tcl or build_tm138k.tcl
Pinmap TN20k Interfaces
Sipeed M0S Dock, digital Joystick D9 and DualShock Gamepad connection.
Pinmap D-SUB 9 Joystick Interface
Joystick pin | IO | Tang Nano pin | FPGA pin | Joystick Function |
---|---|---|---|---|
1 | 2 | J6 10 | 25 | UP |
2 | 1 | J6 9 | 28 | DOWN |
3 | 4 | J6 12 | 29 | LEFT |
4 | 3 | J5 11 | 26 | RIGHT |
5 | - | - | - | POT Y/ TRIGGER 3 |
6 | 0 | J5 8 | 27 | TRIGGER |
7 | - | n.c | n.c | 5V |
8 | - | J5 20 | - | GND |
9 | - | - | 30 | TRIGGER 2 |
Pinmap Dualshock 2 Controller Interface
DS pin | Tang Nano pin | FPGA pin | DS Function |
---|---|---|---|
1 | J5 18 | 71 MISO | JOYDAT |
2 | J5 19 | 53 MOSI | JOYCMD |
3 | n.c. | - | 7V5 |
4 | J5 15 | - | GND |
5 | J5 16 | - | 3V3 |
6 | J5 17 | 72 CS | JOYATN |
7 | J5 20 | 52 MCLK | JOYCLK |
8 | n.c. | - | JOYIRQ |
9 | n.c. | - | JOYACK |
In order to use this Design the following things are needed:
Sipeed M0S Dock or Raspberry Pi Pico RP2040 or ESP32-S2/S3
Sipeed Tang Nano 20k
or Sipeed Tang Primer 25k
and PMOD DVI
and PMOD TF-CARD V2
and PMOD SDRAM
and M0S PMOD adapter
or ad hoc wiring + soldering.
or Sipeed Tang Mega 138k Pro
and PMOD SDRAM
and PMOD DS2x2
and M0S PMOD adapter
or Tang Mega 60K NEO
and PMOD SDRAM
and PMOD DS2x2
and M0S PMOD adapter
microSD or microSDHC card FAT32 formatted
TFT Monitor with HDMI Input and Speaker
HID and Gamecontrol Hardware option | TN20k needs | alternative option | Primer 25K | Mega 60K | Mega 138K |
---|---|---|---|---|---|
USB Keyboard | USB-C to USB-A adapter | 4 port mini USB hub HS8836A | x | x | x |
USB Joystick(s) | 4 port mini USB hub HS8836A | - | x | x | x |
USB Mouse | 4 port mini USB hub HS8836A | - | x | x | x |
USB Gamepad | 4 port mini USB hub HS8836A | - | x | x | x |
Commodore/Atari compatible retro D9 Joystick | MiSTeryNano shield | D-SUB 9 M connector, breadboard to wire everything up, some jumper wires | - | adhoc SDRAM1 Joy D9 | adhoc PMOD Joy D9 |
Dualshock 2 Controller Gamepad | Gamepad Adapter Board (Sipeed Joystick to DIP) respectively PMOD DS2x2 |
breadboard to wire everything up and some jumper wires | - | PMOD DS2x2 | PMOD DS2x2 |