{"id":40431606,"url":"https://github.com/mistle-dev/a2600nano","last_synced_at":"2026-04-03T16:01:46.677Z","repository":{"id":257984437,"uuid":"873235760","full_name":"MiSTle-Dev/A2600Nano","owner":"MiSTle-Dev","description":"Atari 2600 VCS core for the Tang Nano 9k Nano 20K Primer 20k Primer 25K Mega 60k Mega 138K Pro Console60k/138k FPGA","archived":false,"fork":false,"pushed_at":"2026-03-17T21:48:04.000Z","size":56749,"stargazers_count":35,"open_issues_count":5,"forks_count":5,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-03-18T11:35:13.228Z","etag":null,"topics":["atari-2600","atari2600","fpga","gowin","mist","sipeed","sipeed-tang-nano-20k","sipeed-tang-nano-9k","tang-nano","tang-nano-20k","tang-nano-9k","tang-primer-25k"],"latest_commit_sha":null,"homepage":"","language":"VHDL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MiSTle-Dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-10-15T20:31:15.000Z","updated_at":"2026-03-14T16:50:35.000Z","dependencies_parsed_at":"2025-01-12T00:19:12.846Z","dependency_job_id":"026a31c1-04ae-4abb-a698-c2a996224d19","html_url":"https://github.com/MiSTle-Dev/A2600Nano","commit_stats":null,"previous_names":["vossstef/a2600nano","mistle-dev/a2600nano"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/MiSTle-Dev/A2600Nano","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MiSTle-Dev%2FA2600Nano","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MiSTle-Dev%2FA2600Nano/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MiSTle-Dev%2FA2600Nano/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MiSTle-Dev%2FA2600Nano/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MiSTle-Dev","download_url":"https://codeload.github.com/MiSTle-Dev/A2600Nano/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MiSTle-Dev%2FA2600Nano/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31362682,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T15:19:21.178Z","status":"ssl_error","status_checked_at":"2026-04-03T15:19:20.670Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atari-2600","atari2600","fpga","gowin","mist","sipeed","sipeed-tang-nano-20k","sipeed-tang-nano-9k","tang-nano","tang-nano-20k","tang-nano-9k","tang-primer-25k"],"created_at":"2026-01-20T16:06:49.584Z","updated_at":"2026-04-03T16:01:46.669Z","avatar_url":"https://github.com/MiSTle-Dev.png","language":"VHDL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# A2600Nano\n\nThe A2600Nano is a port of the [MiSTer](https://github.com/MiSTer-devel/Atari2600_MiSTer) FPGA core components of the [Atari 2600 VCS](https://en.wikipedia.org/wiki/Atari_2600) with enhancements from the A7800 core such as cartridge type autodetect and the video stabilizer for the:\u003cbr\u003e\n\n| Board      | FPGA       | support |Note|\n| ---        |        -   | -     |-|\n| [Tang Nano 9k](https://wiki.sipeed.com/hardware/en/tang/Tang-Nano-9K/Nano-9K.html)       | [GW1NR](https://www.gowinsemi.com/en/product/detail/38/)  |HDMI / LCD|micro SD card [HW modification](TANG_NANO_9K.md#hw-modification) needed|\n| [Tang Nano 20k](https://wiki.sipeed.com/nano20k)     | [GW2AR](https://www.gowinsemi.com/en/product/detail/38/)  |HDMI / LCD  |twin Dualshock\u003cbr\u003e MiSTeryShield20k spare header + Joy to DIP |\n| [Tang Primer 20K Dock ext Board](https://wiki.sipeed.com/hardware/en/tang/tang-primer-20k/primer-20k.html)| [GW2A](https://www.gowinsemi.com/en/product/detail/46/)| HDMI / LCD|twin Dualshock |\n| [Tang Primer 25K](https://wiki.sipeed.com/hardware/en/tang/tang-primer-25k/primer-25k.html) | [GW5A-25](https://www.gowinsemi.com/en/product/detail/60/)  | HDMI |no Dualshock, no retro D9 Joystick |\n| [Tang Mega 60k NEO](https://wiki.sipeed.com/hardware/en/tang/tang-mega-60k/mega-60k.html)|[GW5AT-60](https://www.gowinsemi.com/en/product/detail/60/)| HDMI / LCD|twin Dualshock |\n| [Tang Mega 138k Pro](https://wiki.sipeed.com/hardware/en/tang/tang-mega-138k/mega-138k-pro.html)|[GW5AST-138](https://www.gowinsemi.com/en/product/detail/60/) | HDMI / LCD |twin Dualshock |\n| [Tang Console 60K NEO](https://wiki.sipeed.com/hardware/en/tang/tang-console/mega-console.html)|[GW5AT-60](https://www.gowinsemi.com/en/product/detail/60/) | HDMI / LCD |twin Dualshock, no Retro D9 Joystick|\n| [Tang Console 138K NEO](https://wiki.sipeed.com/hardware/en/tang/tang-console/mega-console.html)|[GW5AST-138](https://www.gowinsemi.com/en/product/detail/60/)|HDMI / LCD |twin Dualshock, no Retro D9 Joystick|\n\nThis project relies on a µC being connected to the FPGA. --\u003e [MiSTle-Dev wiki](https://github.com/MiSTle-Dev/.github/wiki) \u003c--  \n\n[A2600 specific 3D Case for the MiSTeryShield20k](https://github.com/MiSTle-Dev/A2600Nano/tree/main/housing3D)\n\nOriginal A2600 core by [Retromaster](https://retromaster.wordpress.com/a2601/)  \nAll HID, SDcard and µC firmware by [Till Harbaum](http://www.harbaum.org/till/mist)\u003cbr\u003e\n\nFeatures:\n\n* NTSC 720x480p HDMI Video and Audio Output\n* TFT-LCD module 800x600 [SH500Q01Z](https://dl.sipeed.com/Accessories/LCD/500Q01Z-00%20spec.pdf) + Speaker support\n* Scanline length auto adjust\n* Cartridge type autodetect\n* NTSC / PAL region autodetct\n* Superchip autodetct\n* [USB Keyboard](https://en.wikipedia.org/wiki/Computer_keyboard) USB Keyboard\n* [USB Joystick](https://en.wikipedia.org/wiki/Joystick)\n* [USB Gamepad](https://en.wikipedia.org/wiki/Gamepad) Stick as paddle emulation\n* [USB XBOX 360 Controller](https://en.wikipedia.org/wiki/Xbox_360_controller) as Joystick or Paddle\n* [USB Mouse](https://en.wikipedia.org/wiki/Computer_mouse) as paddle emulation\n* supports 2nd Trigger Button for modified Games\n* [legacy D9 Joystick](https://en.wikipedia.org/wiki/Atari_CX40_joystick) (Atari / Commodore digital type)\n* Joystick emulation on Keyboard [Numpad](https://en.wikipedia.org/wiki/Numeric_keypad)\n* [Dualshock 2 Controller Gamepad](https://en.wikipedia.org/wiki/DualShock) for MiSTeryShield20k via spare pinheader\n* [Dualshock 2 Controller Gamepad](https://en.wikipedia.org/wiki/DualShock) Keys \u0026 Stick as Joystick\n* [Dualshock 2 Controller Gamepad](https://en.wikipedia.org/wiki/DualShock) Sticks as paddle emulation (analog mode)\n* Cartridge ROM loader. [Boot default is homebrew 'Hunchy' Chris Walton](https://videogamehomebrew.fandom.com/wiki/Chris_Walton)  \n\n\u003cimg src=\"./.assets/a2600nano.png\" alt=\"image\" width=\"80%\" height=\"auto\"\u003e\n\n## A2600Nano on Tang Nano 9K\n\nSee [Tang Nano 9K](TANG_NANO_9K.md)\n\n## A2600Nano on Tang Primer 20K (Dock ext board)\n\nSee [Tang Primer 20K](TANG_PRIMER_20K.md)\n\n## A2600Nano on Tang Primer 25K\n\nSee [Tang Primer 25K](TANG_PRIMER_25K.md)\n\n## A2600Nano on Tang Mega 60k NEO\n\nSee [Tang Mega 60K NEO](TANG_MEGA_60K.md)\n\n## A2600Nano on Tang Mega 138k Pro\n\nSee [Tang Mega 138K Pro](TANG_MEGA_138Kpro.md)\n\n## A2600Nano on Tang Console 60k / 138K NEO\n\nSee [Tang Console 60K / 138K NEO](TANG_CONSOLE_60K.md)\n\n## A2600Nano with LCD and Speaker\n\nSee [Tang Nano LCD](TANG_LCD.md)\n\n## Installation\n\nThe installation of A2600Nano on the Tang Nano 20k board can be done using a Linux PC or a Windows PC\n[Instruction](INSTALLATION_WINDOWS.md).  \n\n## Cartridge ROM Loader\n\nROM can be loaded via OSD file selection.  \n\n### Supported mappers\n\n* Auto detected  (F8 F6 FE E0 3F F4 P2 FA CV 2K UA E7 F0 32)  \n  \nLED 1 to 5 are activated as hint in case an unsupported game (mapper) detected  \n\n### single / dual Button Joystick\n\n* Button ```Trigger```\n* 2nd Button ```Trigger 2```\n\n### Gamepad\n\n* Gamepad Button ```Trigger A (DS2 circle)``` 1st Trigger Button\n\n* Gamepad Button ```Trigger B (DS2 cross)``` 2nd Trigger Button\n\n* Gamepad Button ```Trigger X (DS2 triangle)``` 1st Paddle Trigger and enable\n\n* Gamepad Button ```Trigger Y (DS2 square)``` 2nd Paddle Trigger and enable\n\n* Gamepad Button ```START``` as core function **START**\n\n* Gamepad Button ```SELECT``` as core function **SELECT**\n\n\u003e [!NOTE]\n\u003e Gamepad button keymap optimized for legacy USB Logitech RumblePad 2 or Dual Action. Keymap might differ for other Gamepads.\n\n### Paddle\n\n* DualShock 2 (left Stick), USB Gamepad or USB Mouse.  \n\n1st Paddle 1st Gamepad use ```Trigger X (DS2 #1 triangle)``` or ```left Mouse Button```\n\n2nd Paddle 1st Gamepad use ```Trigger Y (DS2 #1 square)``` or ```right Mouse Button```\n\n3rd Paddle 2nd Gamepad use ```Trigger X (DS2 #2 triangle)```\n\n4th Paddle 2nd Gamepad use ```Trigger Y (DS2 #2 square)```\n\n### Keyboard\n\n* Key **F1** toggle ```SELECT```\n* Key **F2** toggle ```START / RESET```\n* Key **F3** toggle ```B/W```\n* Key **F4** toggle ```Difficulty Left```\n* Key **F5** toggle ```Difficulty Right```\n* Key **F6** toggle ```PAUSE``` (Note: Video is blank or disturbed)\n* Key **F12** OSD\n\n| Numpad     |         |Numpad|\n| -          |-        |-         |\n|0  Trigger|8  Up  |.  Trigger 2|\n|4  Left   |-        |6  Right|\n|-           |2  Down|-         |\n\n## Push Button utilization\n\n* S1 reserved\n* S2 open OSD\n\n## OSD\n\ninvoke by F12 keypress\n\n* Reset\n* Cold Reset\n* Audio Volume + / -\n* Scanlines effect %\n* Region switch Auto/NTSC/PAL\n* HID device selection for Joystick Port\n* Loader file selection\n* Difficulty A, B Core switch\n* Black \u0026 White Core video switch\n* Joystick port swap\n* Invert Paddle\n* De-comb\n* SuperChip Auto/off/on\n\n## Gamecontrol support\n\nA 2nd Trigger Button (B) is supported for modified Games.\n\n![controller](\\.assets/controller-layout.png)  \n\nlegacy single D9 Digital Joystick. OSD: **Retro D9**  \nor  \nUSB Joystick(s) or Gamepad(s). OSD: **USB #1 Joy** or **USB #2 Joy**  \nAlso [RII Mini Keyboard i8](http://www.riitek.com/product/220.html) left Multimedia Keys are active if **USB #1 Joy** selected.  \n```Button A and B``` Buttons as Trigger:  \n\nor  \nDualshock 2 Gamepad Stick or Dpad as Joystick. OSD: **DS #1 Joy** or **DS #2 Joy**\u003cbr\u003e\nAt the moment Dpad only for original Pad. Some clone devices support at the same time Dpad and left stick simultaniously.\n\u003cbr\u003e```circle and cross``` Buttons as Trigger:\u003cbr\u003e\n\n\u003e [!IMPORTANT]\n\u003e In a ``MiSTeryShield20k`` configuration Dualshock is supported via the internal ``spare J8`` pinheader. \u003cbr\u003e\n\u003e See ``MiSTeryShield20k DS2 Adapter / Cable`` for further information. Thx [venice1200](https://github.com/venice1200) !\u003cbr\u003e\n\n\u003e [!NOTE]\n\u003e TN20k: You have to select OSD \"DS2 **#2** Joy\" for a ``MiSTeryShield20k`` configuration.\u003cbr\u003e\n\u003e TN20k: You have to select OSD \"DS2 **#1** Joy\" if you use the ``Sipeed Joy to DIP`` adapter.\u003cbr\u003e\nBoth 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).  \n\nor  \nKeyboard Numpad. OSD: **Numpad**  \n\nor  \nMouse. OSD: **Mouse**  \n```left Mouse Button``` and ```right Mouse Button``` as Trigger for Paddle 1 or 2.  \n\nor  \nUSB Gamepad as Paddle. OSD: **USB #1 Padd** or **USB #2 Padd**  \n ```Trigger X``` and ```Trigger Y``` \n\nor  \nDualshock2 Gamepad left stick as Paddle. OSD: **DS #1 Paddle** or **DS #2 Paddle**  \n\n ```Trigger triangle``` and ```Trigger square```\n\n## LED UI\n\n| LED | function         |TN9K|TN20K|TP20K   |TP25K  |TM60K   |TM138k|Console60k|\n| --- |        -         |-   |-     |-      | -     | -      | -   |-|\n| 0   |Cartridge selected|x   |x     |x      | x     | x      | x   |-|\n| 1   | Game unsupported |x   |x     |x      | x     | x      | x   |x|\n| 2   | Game unsupported |x   |x     |x      |  -    | -      | x   |-|\n| 3   | Game unsupported |x   |x     |x      |  -    | -      | x   |-|\n| 4   | Game unsupported |x   |x     |x      |  -    | -      | x   |-|\n| 5   | Game unsupported |x   |x     |x      |  -    | -      | x   |-|\n\nLED 1..5 are activated as hint in case an unsupported game (mapper) detected\u003cbr\u003e\n\n**Multicolor RGB LED**\n\n* **\u003cfont color=\"green\"\u003egreen\u003c/font\u003e**\u0026ensp;\u0026thinsp;\u0026ensp;\u0026thinsp;\u0026ensp;\u0026thinsp;all fine and ready to go\u003cbr\u003e\n* **\u003cfont color=\"red\"\u003ered\u003c/font\u003e**\u0026ensp;\u0026thinsp;\u0026ensp;\u0026thinsp;\u0026ensp;\u0026thinsp;\u0026ensp;\u0026thinsp;\u0026ensp;\u0026thinsp;something wrong with SDcard / default boot image\u003cbr\u003e\n* **\u003cfont color=\"blue\"\u003eblue\u003c/font\u003e**\u0026ensp;\u0026thinsp;\u0026ensp;\u0026thinsp;\u0026ensp;\u0026thinsp;\u0026ensp;\u0026thinsp;µC firmware detected valid FPGA core\u003cbr\u003e\n* **\u003cfont color=\"yellow\"\u003eyellow\u003c/font\u003e**\u0026ensp;\u0026thinsp;\u0026ensp;\u0026thinsp;\u0026ensp;\u0026thinsp;FPGA core can't detect valid firmware\u003cbr\u003e\n* **white**\u0026ensp;\u0026thinsp;\u0026ensp;\u0026thinsp;\u0026ensp;\u0026thinsp;-\u003cbr\u003e\n\n## Powering\n\nPrototype circuit with Keyboard can be powered by Tang USB-C connector from PC or a Power Supply Adapter.\n\n## Synthesis\n\nSource code can be synthesized, fitted and programmed with GOWIN IDE Windows or Linux.  \nAlternatively use the command line build script **gw_sh.exe** build_tn20k.tcl  \n\n## HW circuit considerations\n\n**Pinmap TN20k Interfaces**  \n\n Sipeed M0S Dock, digital Joystick D9 and DualShock Gamepad connection.  \n![wiring](\\.assets/wiring_spi.png)\n\n**Pinmap D-SUB 9 Joystick Interface**  \n\nJoystick interface is 3.3V tolerant. Joystick 5V supply pin has to be left floating !  \n![pinmap](\\.assets/vic20-Joystick.png)\n\n| Joystick pin|IO    | Tang Nano pin | FPGA pin | Joystick Function |\n| ----------- |----- | ---           | -------- | -----             |\n| 1           |     2| J6 10         | 25       | UP        |\n| 2 |1| J6 9  | 28   | DOWN             |\n| 3 |4| J6 12 | 29   | LEFT |\n| 4 |3| J5 11 | 26   | RIGHT |\n| 5 |-| -     | -    | POT Y |\n| 6 |0| J5 8  | 27   | TRIGGER|\n| 7 |-| n.c   | n.c  | 5V |\n| 8 |-| J5 20 | -    | GND |\n| 9 |-| - | - | POT X|\n\n**Pinmap Dualshock 2 Controller Interface**  \n\n\u003cimg src=\"./.assets/controller-pinout.jpg\" alt=\"image\" width=\"30%\" height=\"auto\"\u003e\n\n| DS pin | Tang Nano pin | FPGA pin | DS Function |\n| ----------- | ---   | --------  | ----- |\n| 1 | J5 18 | 71 MISO | JOYDAT  |\n| 2 | J5 19 | 53 MOSI  | JOYCMD |\n| 3 | n.c. | - | 7V5 |\n| 4 | J5 15 | - | GND |\n| 5 | J5 16| - | 3V3 |\n| 6 | J5 17 | 72 CS | JOYATN|\n| 7 | J5 20 | 52 MCLK | JOYCLK |\n| 8 | n.c. | - | JOYIRQ |\n| 9 | n.c. | - | JOYACK |\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmistle-dev%2Fa2600nano","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmistle-dev%2Fa2600nano","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmistle-dev%2Fa2600nano/lists"}