Gopher2600 is an emulator for the Atari 2600 games console
Find a file
JetSetIlly fc431415f1 cross_windows make target deletes icon resource file on completion
cross_windows make target specifies "windowsgui" - changed for testing
purposes and now changed back
2022-04-06 22:30:08 +01:00
.resources repointed logo image to Gopher2600-Dev-Docs repository 2022-04-04 22:50:08 +01:00
bots spacejockey bot. basic for now but it works 2021-12-17 22:05:22 +00:00
cartridgeloader take absolute filepath to ROM being loaded 2022-02-16 14:29:54 +00:00
comparison preferences are shared between emulation instances 2022-01-20 11:15:30 +00:00
coprocessor improved comment highlighting. added string literal highlighting 2022-04-02 11:42:37 +01:00
curated added more linters to golangci-lint config 2020-10-16 16:31:07 +01:00
database added regression CLEANUP mode 2021-10-03 13:32:08 +01:00
debugger reloading a cartridge no longer reset breakpoints etc. 2022-04-03 17:19:06 +01:00
digest removed InstructionBoundary() interface and television.ReqState() 2021-10-23 10:50:19 +01:00
disassembly implemented all remaining 6507 instructions 2022-03-30 08:30:51 +01:00
emulation atarivox and savekey are disabled during rewinding 2022-03-27 10:13:14 +01:00
gui tweaked default position/sizing for coprocessor developer windows 2022-04-06 15:11:00 +01:00
hardware updated PlusROM network header 2022-04-06 14:55:02 +01:00
logger simplified logger package. added BorrowLog() function 2022-01-19 18:18:55 +00:00
modalflag clarified some concepts in modalflag package 2021-06-13 16:37:46 +01:00
patch renamed paths package to resources package 2021-10-03 13:32:08 +01:00
performance preferences are shared between emulation instances 2022-01-20 11:15:30 +00:00
prefs updated PlusROM network header 2022-04-06 14:55:02 +01:00
random random package can produce numbers faster for the running emulation 2022-01-19 22:31:50 +00:00
recorder input system and ports system separated 2021-12-11 08:19:46 +00:00
reflection reflector clears pixels correctly on NewFrame() 2022-03-23 16:54:20 +00:00
regression preferences are shared between emulation instances 2022-01-20 11:15:30 +00:00
resources fixed JoinPath() in resources packages so that it is safe to call repeatdely 2021-12-23 10:22:41 +00:00
rewind fixed race condition in instance caused by timeline 2022-04-04 21:27:56 +01:00
setup input system and ports system separated 2021-12-11 08:19:46 +00:00
statsview added Abort on Illegal Memory Access option for ARM emulation (default: off) 2021-07-15 10:38:37 +01:00
test added Abort on Illegal Memory Access option for ARM emulation (default: off) 2021-07-15 10:38:37 +01:00
thumbnailer fixed race condition in instance caused by timeline 2022-04-04 21:27:56 +01:00
tracker made audio tracker available in playmode (F10) 2021-11-19 22:15:00 +00:00
userinput second stick button works with keyboard. right-player also added 2022-01-23 10:08:51 +00:00
wavwriter readded patch, multiload and wav options to the commandline 2021-12-11 09:56:39 +00:00
.gitignore ARM processor improvements for PlusROM and debugging 2021-12-11 21:09:39 +00:00
.golangci.yml lint fixes 2021-06-16 14:29:35 +01:00
COPYING o initial commit 2020-01-05 18:58:12 +00:00
go.mod updated golang.org/x/sys version 2022-04-06 13:41:38 +01:00
go.sum updated golang.org/x/sys version 2022-04-06 13:41:38 +01:00
gopher2600.go removed HISCORE from list of submodes 2022-03-03 09:06:56 +00:00
LICENCE o initial commit 2020-01-05 18:58:12 +00:00
Makefile cross_windows make target deletes icon resource file on completion 2022-04-06 22:30:08 +01:00
README.md updated README 2022-04-06 15:20:41 +01:00

gopher2600 logo

Gopher2600

Gopher2600 is an emulator for the Atari 2600 written in the Go language.

The accuracy of the emulation is very high and there are no known outstanding problems with the 6507, TIA and RIOT chip emulation.

It is an ongoing project and bug reports are welcome.

The key features of the emulator:

The graphical debugger:

  • Optional Color Clock level interaction
  • Breakpoints, traps, watches on various CPU, TIA and RIOT targets
  • Specialist windows for specific cartridge types (eg. supercharger tape)
  • Terminal interface (headless operation optional)
  • Script recording and playback

Logo is based on Gopherize.me which itself is based on the work of Ashley McNamara and is licensed under the Creative Commons.

Documentation

User documentation for the emulator can be found in the Gopher2600-Docs repository.

Development & Maintenance documentation can be found in the Gopher2600-Dev-Docs repository. Also, source level documentation (for the most recent release) can be found on go.dev.

Example Screenshots

The following screenshots were taken in playmode with CRT effects enabled.

pitfall chiphead
thrust man goes down
soul of the beast egypt genesis
draconian zookeeper

ROMs shown: Pitfall; Chiphead; Thrust; Man Goes Down; Soul of the Beast; Egypt 2600BC ; Draconian; Zookeeper

Resources used

The Stella project (https://stella-emu.github.io/) was used as a reference for video output. In the absence of VCS hardware (which I don't have) Stella was the only option I had for checking video accuracy.

In addition, Stella was used as reference

  • During the development of the CDF cartridge formats. These recent formats don't seem to be documented anywhere accept in the Stella source.

  • ParkerBros fingerprint taken from Stella. I can't remember why I did this but a comment in the fingerprint.go file says I did.

  • As a reference for the audio implementation (the 6502.ts project was also referenced for this reason).

  • The EF cartridge format.

  • Fingerprint patterns for automated controller/peripheral selection.

Many notes and clues from the AtariAge message boards. Most significantly the following threads proved very useful indeed:

  • "Cosmic Ark Star Field Revisited"
  • "Properly model NUSIZ during player decode and draw"
  • "Requesting help in improving TIA emulation in Stella"
  • "3F Bankswitching"
  • "TIA Sounding Off in the Digital Domain"

And from and old mailing list:

These mailing lists and forums have supplied me with many useful test ROMs. I will package these up and distribute them sometime in the future (assuming I can get the required permissions).

Extensive references have been made to Andrew Towers' "Atari 2600 TIA Hardware Notes v1.0"

Cartridge format information was found in Kevin Horton's "Cart Information v6.0" file (sometimes named bankswitch_sizes.txt)

The "Stella Programmer's Guide" by Steve Wright is of course a key document, used frequently throughout development.

The TIA Audio implementation is based almost entirely on the work of Chris Brenner.

https://atariage.com/forums/topic/249865-tia-sounding-off-in-the-digital-domain/

Musical information as seen in the tracker window taken from Random Terrain.

https://www.randomterrain.com/atari-2600-memories-music-and-sound.html

The 6507 information was taken from Leventhal's "6502 Assembly Language Programming" and the text file "64doc.txt" v1.0, by John West and Marko Makela.

Undocumented 650x instructions and implementation details in "6502/6510/8500/8502 Opcode matrix"

http://www.oxyron.de/html/opcodes02.html

US Patent Number 4,644,495 was referenced for the implementation of the DPC cartridge format (the format used in Pitfall 2)

DPC+ 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/

DPC+ARM information on Spiceware's blog

https://atariage.com/forums/blogs/entry/11712-dpc-arm-development/?tab=comments#comment-27116

The "Mostly Inclusive Atari 2600 Mapper / Selected Hardware Document" (dated 03/04/12) by Kevin Horton

Supercharger information from the Kevin Horton document above and also the sctech.txt document

Reference for the ARM7TDMI-S, as used in the Harmony cartridge formats:

https://developer.arm.com/documentation/ddi0234/b

For detail about the Thumb instruction set the following document was preferred. Mnemonics used in the ARM disassembly are from this document:

http://bear.ces.cwru.edu/eecs_382/ARM7-TDMI-manual-pt1.pdf

Further information from the ARM Architecture Reference Manual:

http://www.ecs.csun.edu/~smirzaei/docs/ece425/arm7tdmi_instruction_set_reference.pdf

https://www.cs.miami.edu/home/burt/learning/Csc521.141/Documents/arm_arm.pdf

Specific information about UXP ARM7TDMI-S

https://www.nxp.com/docs/en/user-guide/UM10161.pdf

Other Software / Libraries

The following projects are used in the Gopher2600 project:

Bother 6502.ts and Stella were used as reference for the Audio implementation.

Statsview provided by:

For testing instrumentation:

Some ideas for the fragment shader taken from:

The Festival Speech Synthsis System is an optional program that can be run alongside the emulator for AtariVox support

http://www.festvox.org/docs/manual-2.4.0/festival_toc.html

Personal Thanks and Acknowledgements

At various times during the development of this project, the following people have provided advice and encouragement: Andrew Rice, David Kelly. And those from AtariAge who have provided testing, advice and most importantly, encouragement: Al Nafuur; Andrew Davie; Rob Bairos; MrSQL; Thomas Jenztsch; DirtyHairy; Spiceware; ZeroPageHomebrew; Karl G; alex_79. Thank-you.