Skip to content

Atari 2600 VCS core for the Tang Nano 9k Nano 20K Primer 20k Primer 25K, Mega 60k and Mega 138K Pro FPGA

License

Notifications You must be signed in to change notification settings

vossstef/A2600Nano

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A2600Nano

The A2600Nano is a port of the MiSTer FPGA core components of the Atari 2600 VCS with enhancements from the A7800 core such as cartridge type autodetect and the video stabilizer for the:

Board FPGA support Note
Tang Nano 9k GW1NR X micro SD card HW modification needed
Tang Nano 20k GW2AR X -
Tang Primer 20K Dock ext Board GW2A X twin Dualshock
Tang Primer 25K GW5A-25 X no Dualshock, no retro D9 Joystick
Tang Mega 60k NEO GW5AT-60 X twin Dualshock
Tang Mega 138k Pro GW5AST-138 X twin Dualshock

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.

There is a nice case available mounting the MiSTeryShield20k (TN20k + M0S).

Original A2600 core by Retromaster
All HID, SDcard and µC firmware by Till Harbaum

Features:


image


HID interfaces aligned in pinmap and control to match 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.

A2600Nano on Tang Nano 9K

See Tang Nano 9K

A2600Nano on Tang Primer 20K (Dock ext board)

See Tang Primer 20K

A2600Nano on Tang Primer 25K

See Tang Primer 25K

A2600Nano on Tang Mega 60k NEO

See Tang Mega 60K NEO

A2600Nano on Tang Mega 138k Pro

See Tang Mega 138K Pro

Installation

The installation of A2600Nano on the Tang Nano 20k board can be done using a Linux PC or a Windows PC Instruction.

Cartridge ROM Loader

ROM can be loaded via OSD file selection.

Supported mappers

  • Auto detected (F8 F6 FE E0 3F F4 P2 FA CV 2K UA E7 F0 32)

LED 1 to 5 are activated as hint in case an unsupported game (mapper) detected

single Button Joystick

  • Button Trigger

four Button Joystick or Gamepad

  • Gamepad Button Trigger A (DS2 circle) Trigger

  • Gamepad Button Trigger B (DS2 cross) Paddle Trigger and enable

  • Gamepad Button Trigger X (DS2 triangle) Paddle 2nd Trigger and enable

  • Gamepad Button Trigger Y (DS2 square) revert Paddle mode to Joystick mode

  • Gamepad Button START as core function START

  • Gamepad Button SELECT as core function SELECT

Paddle

  • DualShock 2, USB Gamepad or USB Mouse.

Core switches to paddle mode if paddle Trigger B or Trigger X is pressed respectively left Mouse Button or right Mouse Button.
Can be reverted by pressing Gamepad Button Trigger Y.

Keyboard

  • Key F11 as core function START
  • Key PAGE UP as core function SELECT

Push Button utilization

  • S2 keep pressed during power-up to prevent FPGA bitstream load from FLASH.

  • S1 reserved

OSD

invoke by F12 keypress

  • Reset
  • Cold Reset
  • Audio Volume + / -
  • Scanlines effect %
  • Region switch Auto/NTSC/PAL
  • HID device selection for Joystick Port
  • Loader file selection
  • Difficulty A, B Core switch
  • Black & White Core video switch
  • Joystick port swap
  • Invert Paddle
  • De-comb
  • SuperChip Auto/off/on

Gamecontrol support

controller

legacy single D9 Digital Joystick. OSD: Retro D9
or
USB Joystick(s) or Gamepad(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
Dualshock2 Gamepad Stick as Joystick. OSD: DS #1 Joy or DS #2 Joy

Important

In a MiSTeryShield20k configuration Dualshock is supported via the internal spare J8 pinheader.
See MiSTeryShield20k DS Adapter Cable for further information.

Note

TN20k: You have to select OSD "DS2 #2 Joy" for a MiSTeryShield20k configuration.
TN20k: You have to select OSD "DS2 #1 Joy" if you use the Sipeed Joy to DIP adapter.
Both DS interface ports can be active at the same time meaning twin Dualshock support if the MiSTeryShield20k MIDI interface is not populated (Resistor R9 and IC U3 removed).


left stick or D-Pad for Move and square triangle cross circle Buttons for Trigger:

Buttons - -
square
Trigger 1
Up cross
Trigger 2
Left - Right
triangle
Trigger 4
Down circle
Trigger 3

or
Keyboard Numpad. OSD: Numpad

-
0
Trigger
8
Up
4
Left
- 6
Right
- 2
Down
-

or
Mouse. OSD: Mouse
left Mouse Button and right Mouse Button as Trigger for Paddle 1 or 2.

or
Dualshock2 Gamepad left stick as Paddle. OSD: DS #1 Joy or DS #2 Joy
cross / triangle 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.

LED UI

LED function TN9K TN20K TP20K TP25K TM60K TM138k
0 Cartridge selected x x x x x x
1 Game unsupported x x x x x x
2 Game unsupported x x x - - x
3 Game unsupported x x x - - x
4 Game unsupported x x x - - x
5 Game unsupported x x x - - x

LED 1..5 are activated as hint in case an unsupported game (mapper) detected

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      -

Powering

Prototype circuit with Keyboard can be powered by Tang USB-C connector from PC or a Power Supply Adapter.

Synthesis

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

HW circuit considerations

Pinmap TN20k Interfaces
Sipeed M0S Dock, digital Joystick D9 and DualShock Gamepad connection.
wiring

Pinmap D-SUB 9 Joystick Interface

  • Joystick interface is 3.3V tolerant. Joystick 5V supply pin has to be left floating !
    pinmap
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
image

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

Getting started

In order to use this Design the following things are needed:

Sipeed M0S Dock or Raspberry Pi Pico RP2040 or ESP32-S2/S3
Tang Nano 20k
or Tang Primer 20K with Dock ext Board
and M0S PMOD adapter.
and PMOD DS2x2
or Tang Nano 9k
or Tang Primer 25k
and PMOD DVI
and PMOD TF-CARD V2
and PMOD SDRAM
and M0S PMOD adapter or ad hoc wiring + soldering.
or Tang Mega 60K NEO
and PMOD DS2x2
and M0S PMOD adapter
or Tang Mega 138k Pro
and PMOD DS2x2
and M0S PMOD adapter
microSD or microSDHC card FAT/exFAT formatted
TFT Monitor with HDMI Input and Speaker

HID and Gamecontrol Hardware option TN20k needs alternative option Primer 25K Mega 60K Mega 138K Pro
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