{"id":24791474,"url":"https://github.com/jetsetilly/gopher2600","last_synced_at":"2025-04-04T01:09:09.595Z","repository":{"id":40632915,"uuid":"231980684","full_name":"JetSetIlly/Gopher2600","owner":"JetSetIlly","description":"Gopher2600 is an emulator for the Atari 2600 games console","archived":false,"fork":false,"pushed_at":"2024-10-29T10:11:10.000Z","size":40355,"stargazers_count":241,"open_issues_count":3,"forks_count":20,"subscribers_count":11,"default_branch":"master","last_synced_at":"2024-10-29T10:58:53.525Z","etag":null,"topics":["atari2600","emulator","emulator-development","emulator-programming","go","golang-application"],"latest_commit_sha":null,"homepage":"","language":"Go","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/JetSetIlly.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","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}},"created_at":"2020-01-05T21:50:17.000Z","updated_at":"2024-10-29T09:09:38.000Z","dependencies_parsed_at":"2023-11-27T10:25:48.188Z","dependency_job_id":"fd7ba08b-a3c5-435c-92b0-5f09edef86c0","html_url":"https://github.com/JetSetIlly/Gopher2600","commit_stats":null,"previous_names":[],"tags_count":67,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetSetIlly%2FGopher2600","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetSetIlly%2FGopher2600/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetSetIlly%2FGopher2600/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetSetIlly%2FGopher2600/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JetSetIlly","download_url":"https://codeload.github.com/JetSetIlly/Gopher2600/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247103307,"owners_count":20884023,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["atari2600","emulator","emulator-development","emulator-programming","go","golang-application"],"created_at":"2025-01-29T19:17:08.585Z","updated_at":"2025-04-04T01:09:09.581Z","avatar_url":"https://github.com/JetSetIlly.png","language":"Go","readme":"# Gopher2600\n\n\u003cimg align=\"right\" src=\"https://github.com/JetSetIlly/Gopher2600-Dev-Docs/blob/master/gopher2600_logo/logo4.png\" width=\"250\" alt=\"gopher2600 logo\"/\u003e\n\nGopher2600 is an emulator for the Atari 2600 written in Go.\n\nSee here for [Current Status](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/Current-Status)\n\nAccuracy is very high and and there are no known problems with the emulation of the 6507, TIA or RIOT chips.\n\nThe key features of the emulator:\n\n* [Support for many of the known cartridge formats](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/Supported-Cartridge-Mappers)\n    * emulation of the [Supercharger](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/Supercharger) - supports loading from WAV files\n* Emulation of the [ARM7TDMI](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/ATM7TDMI-Emulation) as found in the `Harmony` cartridge\n\t* Preliminary support for the ARMv7-M as used in the `UnoCart` and `PlusCart` is also included\n* Network access through [PlusROM](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/PlusROM) emulation\n* [AtariVox and SaveKey](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/AtariVox-and-SaveKey) support\n    * Speech support via `Festival`\n* CRT TV Effects\n* Flexible [screenshot](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/Creating-Screenshots) features\n* Accurate audio reproduction (and optional stereo output)\n* Support for common [TIA revisions](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/TIA-Revisions)\n* Implementation of [Movie Cart](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/Movie-Cart)\n* [Gameplay rewinding](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/Rewinding)\n* Tracker/Piano Keys visualisation\n* [Gameplay recording and playback](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/Recording-Gamplay)\n* Support for (and auto-detection of) the stick, paddle, keypad and also Sega Genesis style [controllers](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/Hand-Controllers-and-Front-Panel)\n* ROM selector with live emulation preview and optional support for\n  [boxart and the standard stella.pro file](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/Box-Art-and-stella.pro-file)\n\nThe graphical [debugger](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/Debugger):\n\n* CPU and Color Clock level interaction\n* Breakpoints, traps, watches on various CPU, TIA and RIOT targets\n* Terminal interface (headless operation optional)\n* Advanced ARM monitoring\n\t* Performance profiling\n\t* Source code inspection and breakpoints\n\t* DWARF support (global \u0026 local variable inspection)\n\nLogo is based on [Gopherize.me](https://github.com/matryer/gopherize.me) which itself is based on the work of [Ashley McNamara](https://github.com/ashleymcnamara/gophers) and is [licensed under the Creative Commons](https://github.com/ashleymcnamara/gophers/blob/master/LICENSE).\n\n## Documentation\n\nUser documentation for the emulator can be found in the [Gopher2600-Docs repository](https://github.com/JetSetIlly/Gopher2600-Docs/) and in particular the [live wiki](https://github.com/JetSetIlly/Gopher2600-Docs/wiki).\n\nDevelopment \u0026 Maintenance documentation can be found in the [Gopher2600-Dev-Docs repository](https://github.com/JetSetIlly/Gopher2600-Dev-Docs/). Also, source level documentation (for the most recent release) can be found on [go.dev](https://pkg.go.dev/github.com/jetsetilly/gopher2600).\n\n## Example Screenshots\n\nThe following [screenshots](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/Creating-Screenshots) were taken in `playmode` with CRT effects enabled.\n\n\u003ctable align=\"center\"\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd align=\"center\"\u003e\n\t\t\t\u003cimg src=\"https://github.com/JetSetIlly/Gopher2600-Docs/blob/master/screenshots/pitfall.jpg\" height=\"150\" alt=\"pitfall\"/\u003e\n\t\t\u003c/td\u003e\n\t\t\u003ctd align=\"center\"\u003e\n\t\t\t\u003cimg src=\"https://github.com/JetSetIlly/Gopher2600-Docs/blob/master/screenshots/chiphead.jpg\" height=\"150\" alt=\"chiphead\"/\u003e\n\t\t\u003c/td\u003e\n\t\t\u003ctd align=\"center\"\u003e\n\t\t\t\u003cimg src=\"https://github.com/JetSetIlly/Gopher2600-Docs/blob/master/screenshots/thrust.jpg\" height=\"150\" alt=\"thrust\"/\u003e\n\t\t\u003c/td\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd align=\"center\"\u003e\n\t\t\t\u003cimg src=\"https://github.com/JetSetIlly/Gopher2600-Docs/blob/master/screenshots/mangoesdown.jpg\" height=\"150\" alt=\"man goes down\"/\u003e\n\t\t\u003c/td\u003e\n\t\t\u003ctd align=\"center\"\u003e\n\t\t\t\u003cimg src=\"https://github.com/JetSetIlly/Gopher2600-Docs/blob/master/screenshots/beast.jpg\" height=\"150\" alt=\"soul of the beast\"/\u003e\n\t\t\u003c/td\u003e\n\t\t\u003ctd align=\"center\"\u003e\n\t\t\t\u003cimg src=\"https://github.com/JetSetIlly/Gopher2600-Docs/blob/master/screenshots/genesis.jpg\" height=\"150\" alt=\"egypt genesis\"/\u003e\n\t\t\u003c/td\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\u003ctd align=\"center\"\u003e\n\t\t\t\u003cimg src=\"https://github.com/JetSetIlly/Gopher2600-Docs/blob/master/screenshots/draconian.jpg\" height=\"150\" alt=\"draconian\"/\u003e\n\t\t\u003c/td\u003e\n\t\t\u003ctd align=\"center\"\u003e\n\t\t\t\u003cimg src=\"https://github.com/JetSetIlly/Gopher2600-Docs/blob/master/screenshots/zookeeper.jpg\" height=\"150\" alt=\"zookeeper\"/\u003e\n\t\t\u003c/td\u003e\n\t\u003c/tr\u003e\n\u003c/table\u003e\n\nROMs shown: Pitfall; [Chiphead](https://www.pouet.net/prod.php?which=68505); Thrust; Man Goes Down; [Soul of the Beast](https://aeriform.itch.io/beast); [Egypt 2600BC](https://www.pouet.net/prod.php?which=72716) ; Draconian; [Zookeeper](https://champ.games/downloads)\n\n## Resources used\n\nThe Stella project (https://stella-emu.github.io/) was used as a visual\nreference for video output. In the absence of VCS hardware (which I didn't have\nduring initial TIA development) Stella was a good alternative for checking\nthe accuracy of video output.\n\nIn addition, Stella was used as reference in the following areas:\n\n* During the development of the CDF cartridge formats. These recent formats don't\nseem to be documented anywhere accept in the Stella source.\n\n* Cartridge fingerprints for ParkerBros, Wickstead Design, SCABS, UA and JANE.\n\n* As a reference for the audio implementation (the 6502.ts project was also\n  referenced for this reason).\n\n* Fingerprint patterns for automated controller/peripheral selection.\n\nIn all these instances, primary sources of information could not be found.\n\n(Earlier revision of Gopher2600 used Stella a reference for the EF cartridge\nformat. However, the implementation has been vastly simplified by declaring EF\nto be a nothing more than a 64k Atari ROM. The discussion that led to this\nrevelation can be found in the link below.)\n\nhttps://forums.atariage.com/topic/346341-64ksc-multi-sprite-roms-error-out-in-stella-for-me/page/2/#comment-5188396\n\nMany notes and clues from the AtariAge message boards. Most significantly the\nfollowing threads proved very useful indeed:\n\n* \"Cosmic Ark Star Field Revisited\"\n* \"Properly model NUSIZ during player decode and draw\"\n* \"Requesting help in improving TIA emulation in Stella\" \n* \"3F Bankswitching\"\n* \"TIA Sounding Off in the Digital Domain\"\n\nAnd from and old mailing list:\n\n* \"Games that do bad things to HMOVE...\" https://www.biglist.com/lists/stella/archives/199804/msg00198.html\n\nThese mailing lists and forums have supplied me with many useful test ROMs. I\naim to package these up and distribute them sometime in the future (assuming I\ncan get the required permissions).\n\nExtensive references have been made to Andrew Towers' \"Atari 2600 TIA Hardware\nNotes v1.0\"\n\nCartridge format information was found in Kevin Horton's \"Cart Information\nv6.0\" file (sometimes named bankswitch_sizes.txt)\n\nThe WF8 format discussed here on AtariAge\n\nhttps://forums.atariage.com/topic/367157-smurf-rescue-alternative-rom-with-wf8-bankswitch-format/\n\nThe \"Stella Programmer's Guide\" by Steve Wright is of course a key document,\nused frequently throughout development.\n\nColour values for NTSC and PAL television signals taken from https://www.qotile.net/minidig/docs/tia_color.html\n\nThe TIA Audio implementation is based almost entirely on the work of Chris Brenner.\n\nhttps://atariage.com/forums/topic/249865-tia-sounding-off-in-the-digital-domain/\n\nAdditional work on volume sampling a result of this thread:\n\nhttps://forums.atariage.com/topic/370460-8-bit-digital-audio-from-2600/\n\nMusical information as seen in the tracker window taken from Random Terrain.\n\nhttps://www.randomterrain.com/atari-2600-memories-music-and-sound.html\n\nThe 6507 information was taken from Leventhal's \"6502 Assembly Language\nProgramming\" and the text file \"64doc.txt\" v1.0, by John West and Marko Makela.\n\nUndocumented 650x instructions and implementation details in \"6502/6510/8500/8502 Opcode matrix\" \n\nhttp://www.oxyron.de/html/opcodes02.html\n\n6502 functional tests from https://github.com/Klaus2m5/6502_65C02_functional_tests\n\nUS Patent Number 4,644,495 was referenced for the implementation of the DPC cartridge format\n(the format used in Pitfall 2) https://patents.google.com/patent/US4644495/en\n\nUS patent 4,485,457A was used to help implement the CBS cartridge format\nhttps://patents.google.com/patent/US4485457A/en\n\nEuropean patent 84300730.3 was used to help implement the SCABS cartridge format\nhttps://worldwide.espacenet.com/patent/search/family/023848640/publication/EP0116455A2?q=84300730.3\n\nDPC+ format implemented according to notes provided by Spiceware https://atariage.com/forums/topic/163495-harmony-dpc-programming and https://atariage.com/forums/blogs/entry/11811-dpcarm-part-6-dpc-cartridge-layout/\n\nDPC+ARM information on Spiceware's blog https://atariage.com/forums/blogs/entry/11712-dpc-arm-development/?tab=comments#comment-27116\n\nThe \"Mostly Inclusive Atari 2600 Mapper / Selected Hardware Document\" (dated 03/04/12) by Kevin Horton\n\nSupercharger information from the Kevin Horton document above and also the `sctech.txt` document\n\nReference for the ARM7TDMI-S, as used in the Harmony cartridge formats:\n\nhttps://developer.arm.com/documentation/ddi0234/b\n\nFor detail about the Thumb instruction set the following document was\npreferred. Mnemonics used in the ARM disassembly are from this document:\n\nhttp://bear.ces.cwru.edu/eecs_382/ARM7-TDMI-manual-pt1.pdf\n\nFurther information from the ARM Architecture Reference Manual:\n\nhttp://www.ecs.csun.edu/~smirzaei/docs/ece425/arm7tdmi_instruction_set_reference.pdf\n\nhttps://www.cs.miami.edu/home/burt/learning/Csc521.141/Documents/arm_arm.pdf\n\nSpecific information about UXP ARM7TDMI-S \n\nhttps://www.nxp.com/docs/en/user-guide/UM10161.pdf\n\nThumb-2 information in the ARM Architecture Reference Manual Thumb-2 Supplement\n\nhttps://documentation-service.arm.com/static/5f1066ca0daa596235e7e90a\n\nand the \"ARMv7-M Architecture Reference Manual\" can be found at:\n\nhttps://documentation-service.arm.com/static/606dc36485368c4c2b1bf62f\n\nSpecific information about the STM32F407 used in the UnoCart and PlusCart can\nbe found at:\n\nhttps://www.st.com/resource/en/reference_manual/dm00031020-stm32f405-415-stm32f407-417-stm32f427-437-and-stm32f429-439-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf\n\nIn relation to ARM development, information about the DWARF format is being\ntaken from the DWARF2 and DWARF4 standards:\n\nhttps://dwarfstd.org/doc/dwarf-2.0.0.pdf\n\nhttps://dwarfstd.org/doc/DWARF4.pdf\n\nARM specific DWARF information taken from:\n\nhttps://github.com/ARM-software/abi-aa/releases/download/2023Q1/aadwarf32.pdf\n\n## Other Software / Libraries\n\nThe following projects are used in the `Gopher2600` project:\n\n* https://github.com/ocornut/imgui\n* https://github.com/inkyblackness/imgui-go\n* https://github.com/veandco/go-sdl2\n* https://github.com/go-gl/gl\n* https://github.com/hajimehoshi/go-mp3\n* https://github.com/pkg/term\n* https://github.com/go-audio/wav\n* https://github.com/sahilm/fuzzy\n\n* FontAwesome\n\t* https://fontawesome.com/\n\t* licensed under the Font Awesome Free License\n* Hack-Regular \n\t* https://github.com/source-foundry/Hack\n\t* licensed under the MIT License\n* JetBrainsMono\n\t* https://github.com/JetBrains/JetBrainsMono\n\t* licensed under the OFL-1.1 License\n\nBoth 6502.ts and Stella were used as reference for the Audio implementation.\n\nSome ideas for the fragment shaders taken from:\n\n* https://github.com/libretro/glsl-shaders/blob/master/crt/shaders/crt-pi.glsl\n* https://www.shadertoy.com/view/ltB3zD\n* https://github.com/mattiasgustavsson/crtview\n* https://gist.github.com/Beefster09/7264303ee4b4b2086f372f1e70e8eddd\n\nThe Festival Speech Synthesis System is an optional program that can be run\nalongside the emulator for [AtariVox](https://github.com/JetSetIlly/Gopher2600-Docs/wiki/AtariVox-and-SaveKey) support\n\nhttp://www.festvox.org/docs/manual-2.4.0/festival_toc.html\n\n## Personal Thanks and Acknowledgements\n\nAt various times during the development of this project, the following people\nhave provided advice and encouragement: Andrew Rice, David Kelly. And those\nfrom AtariAge who have provided testing, advice and most importantly,\nencouragement (alphabetically): alex_79; Al Nafuur; Andrew Davie; Batari;\nDirtyHairy; John Champeau; MarcoJ; MrSQL; Rob Bairos; Spiceware; Thomas\nJenztsch; Zachary Scolaro; ZeroPageHomebrew\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjetsetilly%2Fgopher2600","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjetsetilly%2Fgopher2600","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjetsetilly%2Fgopher2600/lists"}