The VIC20Nano is a port of some MiST and
MiSTer components of the
VIC20 FPGA core for the :
Tang Nano 20k (Gowin GW2AR).
Tang Primer 25K (Gowin GW5A-25) (no Dualshock 2, no Paddles and no Retro DB9 Joystick support).
Tang Primer 20K with Dock ext Board (Gowin GW2A).
Tang Nano 9k (Gowin GW1NR) (no C1541, no Tape, no memory expansion, micro SD card HW modification needed).
Original VIC-20 core by MikeJ (Mike Johnson) and WoS (Wolfgang Scherr)
All HID, SDcard and BL616 MCU µC firmware by Till Harbaum
c1541 by darfpga
Features:
- PAL 832x576p@50Hz or NTSC 800x480p@60Hz HDMI Video and Audio Output
- USB Keyboard via Sipeed M0S Dock BL616 µC
- USB Joystick via µC
- legacy D9 Joystick (Atari / Commodore digital type) MiSTeryNano shield
- Joystick emulation on Keyboard Numpad
- Dualshock 2 Controller Gamepad Keys & Stick as Joystick
- Dualshock 2 Controller Gamepad Sticks as Paddle Emulation (analog mode)
- emulated 1541 Diskdrive on FAT/extFAT microSD card
- C1541 DOS ROM selection
- Cartridge ROM (*.PRG) loader
- Direct BASIC program file (*.PRG) injection loader
- Tape (*.TAP) image loader C1530 Datasette
- Loadable 8K Kernal ROM (*.BIN)
- On Screen Display (OSD) for configuration and D64 image selection
- 3K, 8K, 16K, 24K, 32K RAM Expansion
- 8K RAM at $A000 as loadable Cartridge Slot
HID interfaces aligned in pinmap and control to match MiSTeryNano project's misterynano_fw respectively FPGA-Companion.
Basically a µC M0S/BL616 / Raspberry Pi Pico RP2040 / ESP32-S2/S3 acts as USB host for USB devices and as an OSD controller using a SPI communication protocol.
The installation of VIC20 Nano on the Tang Nano 20k board can be done using a Linux PC or a Windows PC
Instruction.
See Tang Primer 25K
See Tang Primer 20K
The DDR3 memory controller is a slight modified copy of nestang. It had been tested on a board eqipped with a SKHynix DDR3 memory and is used as a buffer for the TAP Tape loading.
See Tang Primer 9K
Emulated 1541 on a regular FAT/exFAT formatted microSD card.
Copy a D64 Disk image to your sdcard and rename it to disk8.d64 as default boot image.
Add further D64 images as you like and insert card in TN/TP slot. LED 0 acts as Drive activity indicator.
Tip
Disk directory listing: [or F1 keypress in JiffyDOS]
command:
LOAD"$",8
LIST
Load first program from Disk: (or just LOAD if Dolphin Kernal active)
LOAD"*",8
RUN
JiffyDOS can be used as well known Speedloader. Change in OSD the c1541 DOS to Jiffy too.
Size and Region can be activated in several steps. A change takes effect immediately.
Take care to activate the correct size of needed expansion before you load *.PRG and *.TAP !
Expansion | $0400 3k | $2000 8k | $4000 8k | $6000 8k |
---|---|---|---|---|
Block | 0 | 1 | 2 | 3 |
3k | x | - | - | - |
8k | - | x | - | - |
16k | - | x | x | - |
24k | - | x | x | x |
32k | x | x | x | x |
Cartrige ROM can be loaded via OSD file selection.
Be aware that the core doesn't support the VICE EMU file format.
Typical VIC20 Cartridge ROMS with ending .PRG have a two byte header indicating the loading location.
8k Cartridges to be loadeded directly as such. 16k or larger Cartridges have to be loaded in several steps and the file with ending xyz-a000.prg have to be loaded last. First load xyz-2000.prg, xyz-4000.prg or xyz-6000.prg and then xyz-a000.prg at last. The Cartridge will start after that last step automatically.
Copy a 8K xyz-a000.prg ROM to your sdcard and rename it to vic20crt.crt as default boot cartridge.
Tip
Detach Cartridge by OSD CRT selection No Disk and System Cold Boot.
A BASIC Program *.PRG file can be loaded via OSD file selection.
Copy a *.PRG to your sdcard and rename it to vic20prg.prg as default boot basic program.
Prevent PRG load by OSD PRG selection No Disk , Save settings and Reset.
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 VIC20 CBM Kernal (mandatory as JiffyDOS doesn't support Tape). Best to save Kernal OSD selection via Save settings.
Important
command: LOAD
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.
After some seconds the filename of the to be loaded file will be shown and it will take time...
Copy a *.TAP to your sdcard and rename it to vic20tap.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 CBM factory PAL type is the power-up default Kernal.
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!
Kernal ROM files *.BIN can be loaded via OSD selection (e.g. JiffyDOS VIC20).
Copy a 8K VIC20 Kernal ROM *.BIN to your sdcard and rename it to vic20kernal.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.
Some Cartridge based games can be be simply loaded from a VIC20 D64 Disk Image.
Example: 16 k Cartridge Game
Enable RAM Expansion at $2000 (or $6000) and Cartridge region $A000
Leave OSD setting CRT writeable setting as enabled as first approach.
Save setting and do a Cold Boot Reset.
LOAD "xyz.200",8,1
(Block 1)
or LOAD "xyz.600",8,1
(Block 3)
LOAD "xyz.A00",8,1
(Block 5)
Start Game by command: SYS40960 (general start Address for Cartridge Slot)
or better perform a Reset via OSD.
There are also some cartridge games on D64 Image with a loader that themselves further reload the needed RAM regions and autostart (you have to activate RAM regions beforhand).
A loaded Cartridge can be exited by disabling memory region $A000 + Cold Reset via OSD. In order to trial another game just activate again (after reset !) the $A000 memory and load another game.
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.
-
(TN20k/ TP25k): S2 keep pressed during power-up to prevent FPGA bitstream load from FLASH. Needed for FLASH programming.
-
(TP20k): There is by default unfortunately no Button/Switch to prevent FPGA bitstream load from FLASH (see rework how to add).
-
S1 reserved
invoke by F12 keypress
- Reset
- Cold Reset
- Audio Volume + / -
- Scanlines effect %
- Widescreen activation
- Screen centering
- PAL / NTSC Video mode
- HID device selection for Joystick Port
- RAM Expansion $A000(8k), $6000(8k), $4000(8k), $2000(8k), $0400(3k)
- Cartridge Write protection
- c1541 Drive disk image selection
- c1541 Disk write protetcion
- c1541 Reset
- c1541 DOS ROM selection
- Loader (CRT/PRG/BIN) file selection
legacy single D9 Digital Joystick. OSD: Retro D9
or
USB Joystick(s). OSD: USB #1 or USB #2
or
Gamepad. OSD: DualShock
stick digital for Move and Left L1 or Right R1 shoulder Button for Trigger or following Pad controls:
Buttons | - | - |
---|---|---|
Left L1/R1 Trigger |
triangle button Up |
. |
square button Left |
- | circle button Right |
- | cross button Down |
- |
or Keyboard Numpad. OSD: Numpad
0 Trigger |
8 Up |
- |
4 Left |
- | 6 Right |
- | 2 Down |
- |
or Mouse. OSD: Mouse
USB Mouse as c1351 Mouse emulation.
or Paddle. OSD: Paddle
Dualshock 2 Sticks in analog mode as VC-1312 Paddle emulation.
Left L1 / L2 and Right R1 / R2 shoulder Button as Trigger
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: DualShock
LED | function | TN20K | TP20K | TP25K | TM138K | TN9k |
---|---|---|---|---|---|---|
0 | c1541 activity | x | x | x | x | N/A |
1 | D64 selected | x | x | - | x | x |
2 | CRT seleced | x | x | - | x | x |
3 | PRG selected | x | x | - | x | x |
4 | Kernal selected | x | x | - | x | x |
5 | TAP selected | x | x | - | x | N/A |
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
- white -
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 build_tn20k.tcl, build_tp20k.tcl or build_tp25k.tcl
see pin configuration in .cst configuration file
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 |
6 | 0 | J5 8 | 27 | TRIGGER |
7 | - | n.c | n.c | 5V |
8 | - | J5 20 | - | GND |
9 | - | - | - | POT X |
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
and PMOD SDRAM
and M0S PMOD adapter
or ad hoc wiring + soldering.
or Tang Primer 20K with Dock ext Board
and M0S PMOD adapter.
and PMOD DS2x2
microSD or microSDHC card FAT/exFAT formatted
TFT Monitor with HDMI Input and Speaker
HID and Gamecontrol Hardware option | needs | alternative option | Primer 25K | Mega 138K | Primer 20K |
---|---|---|---|---|---|
USB Keyboard | USB-C to USB-A adapter | 4 port mini USB hub | x | x | x |
USB Joystick(s) | 4 port mini USB hub | - | x | x | x |
USB Mouse | 4 port mini USB hub | - | x | x | x |
Commodore/Atari compatible retro D9 Joystick | MiSTeryNano shield | D-SUB 9 M connector, breadboard to wire everything up, some jumper wires | - | - | - |
Dualshock 2 Controller Gamepad | Gamepad Adapter Board (Sipeed Joystick to DIP) | breadboard to wire everything up and some jumper wires | - | x | x |