Pixel exact emulation of the Commodore 64, VIC 20 and Atari 2600 written entirely in  Java

The emulators should run on any platform with an updated java runtime environment installed. I will update this site when I get some free time but in the mean time feel free to drop me a message via the contact page with feedback or questions.

*tip: F9 exits fullscreen mode.(ALT-ENTER for c64_beta)
*filters now work based on reSID

note: c64.jar has not been updated since February 2016 and is missing most of the new features included in C64 Beta.  USE C64_Beta  FOR LATEST FEATURES AND BUG FIXES.


z64k.docx z64k.docx
Size : 22.861 Kb
Type : docx
c64.jar c64.jar
Size : 805.097 Kb
Type : jar
VIC20.jar VIC20.jar
Size : 662.118 Kb
Type : jar
atari2600.jar atari2600.jar
Size : 589.939 Kb
Type : jar
changelog.txt changelog.txt
Size : 1.9 Kb
Type : txt
C64_Beta_2016_09_05.jar C64_Beta_2016_09_05.jar
Size : 1061.578 Kb
Type : jar

5 September - C64 Beta

  • Saving config saves last directory of disk loaded for drive 8 and the last directory of File/Open from the top menu. Save on exit will automatically save the current configuration when exiting the emulator.
  • Fixed some keys for Spanish keyboard layout. Thank you Gonzalo for testing. :)

3 September - C64 Beta

  • Updated outdated "Features" section of website. C64 Beta is stable and has most of the feature I want implemented for the first release. I still need to write a manual though which I think is going to be a work in progress. I will be releasing updated versions of the VIC 20 and Atari 2600 emulators which have most of the new features of C64 Beta at the same time as I formally release C64 Beta as stable and remove the old obsolete emulators.  
  • Disk drive icons and c64 badge resize on screen size.

2 September - C64 Beta

  • Fixed disk drive activity LED behaviour when drive is powered off.

1 September - C64 Beta

  • Improved disk LED display
  • removed redundant system timer
  • Allow saving of aspect ratio in config file
  • Floppy disk LED smoothlyfades in and out. Effect can be seen in Biba 2 and Digital World

31 August - C64 Beta

  • GCR reading of disks at bit level. Writing to disk is still at byte level.
  • Diskviewer immediately resizes when main window is resized.
  • Some Spanish keyboard support

    Spanish ==> C64 KB
    • ` = @
    • + = *
    • ç = =
    • ñ = :
    • ´ = ;
    • - = +
    • º = (backarrow)

29 August - C64 Beta

  • Diskviewer opens when selecting a d64/g64 image using the File/open menu to allow selecting of file to autorun.

28 August - C64 Beta

  • Can save default pixel size by using "Save" configuration in settings menu.
  • fixed drive sleeping code. Warp mode much faster again when drive not in use.

26 August - C64 Beta

  • Can save G64 images. Speed zones are currently ignored butincluded in saved images. Confirmed able to reload and use saved G64 images  in VICE, CCS64, and HOXS64.

25 August - C64 Beta

  • Greatly refined GCR-->byte conversion for use with d64 images and disk viewer when loading g64 image or writing to disk.

20 August - C64 Beta

  • G64 support - Read only and half tracks are ignored at this stage.  Can convert G64 to a D64 image by saving as a D64 image.
  • new command line options: -warp, -debugcart, -limitspeed #cycles

18 August - C64 Beta

  • REU - fixed c64 base addressregister values after executing swap command
  • Testbench - support for old-sid,new-sid,mountg64:
  • Command line options intended for use with testbench scripts by Groepaz. Using VICE format for consistency. I am only implementing commands used by testbench at this stage but I plan on including many more in future releases.

    java - jar C64_Beta_2016_08_18.jar options (see options below)
    • -8 filename.d64
      insert disk into drive 8 and autoload first file

    • -ciamodel n (0/1)
      0=6526 (cia old)
      1=6526a (cia new)

    • -cart cartridge.crt
      insert cartridge

    • -ntsc

    • -ntscold

    • -pal

    • -reu -reusize 512

    • -sidenginemodel model
      256 = 6581 (old sid)
      257 = 8580 (new sid)

    • filename.prg
      autoload program

16 August - C64 Beta

  • Improved and more accurate 'Game Loop' logic.

15 August - C64 Beta

  • Implemented new 'Game Loop' logic based from information on this site to limit the emulator speed. Emulator no longer freezes when system time changes. Occasional stutter when playing SIDs seems to befixed now when changing songs.

13 August - C64 Beta

  • Testbench - VICE plugin
    • To configure go to the configuration tab of Testbecnh (available under tools)and select the testbench directory with the VICE test program repository. The folder should contain the file testbench.sh. You will need to save the configuration file to enable the plugins. The VICE plugin is named "x64sc". Select the VICE executable (only tested WINVICE's x64sc.exe but should work with other platforms). Make sure to save again so you won't need to configure next time you run testbench.

6 August -  C64 Beta

  • Refined TTL code
  • Can 'play' a portion of the test programs in Testbench by right clicking a folder.

18 July - C64 Beta

  • Updated KCS Power cartridge using logic by Soci that was forwarded to me via Groepaz.
  • New command in remote monitor - execute #x : reset emulator, execute x number of cycles and enter monitor.
    eg. echo execute 500|nc localhost 6510
  • SID Player - displays alternative author if available in STIL

2 July - C64 Beta

  • PSID Player - display SID comments and track names of the current SIDusing STIL.txt from HVSC if available. I will tidy up the GUI in next release and include more information in the player from the STIL.txt file.

1 July - C64 Beta

  • ***NEW FEATURE*** Remote Monitor
    • Enabled via the setup tab under settings.
    • Send commands to the emulator via a telnet or netcat session
    • eg from command line 'telnet localhost 6510' or 'echo reset|nc localhost 6510'
    • keep alive should be selected for the first example if you want to keep the session active after entering a command.
    • keep alive should be disabled for the second example
    • only implemented as proof of concept at this stage so only commands recognised at the moment are 'reset', 'reset 0', and 'quit' which do a hard reset, soft reset or terminate the session respectively. I plan on adding a lot more useful functionality in the near future. :)

29 June - C64 Beta

  • Break points are toggled via right mouse button click in the Monitor disassembly window. Left and middle buttons are disabled and will be reserved for other functions.
  • New input method for Monitor. Input is separate to output console. Command history can be browsed by the up/down arrows.
  • New commands in Monitor:-
    • cls - clears monitor console
    • dir - views contents if current working directory
    • cd - cd.. sets working directory to parent, cd arg1 sets working directory to the subfolder 'arg1' if it exists.
    • note: dir and cd have no functional use yet, but it will when I implement load, autorun and save commands in the Monitor.
  • The C button executes a single cycle and I button executes a single instruction. They are located on top of the Monitor console window. I will replace them with icons as soon as I find some that are suitable to represent their actions. I will be including more functions so will improve the GUI then. :)

28 June - C64 Beta

  • New command in Monitor (under tools menu) to execute number of instructions. 'z num' where num is the number of instructions in hexadecimal to execute. eg. 'z 5' execute 5 complete instructions. If cpu is in halt state, no instructions will execute.
  • New set PC (j) command. Similar to g command but does not exit the Monitor. Format: 'j address'. address=new Program Counter (PC) in hexadecimal. eg. 'j fce2' sets PC to $fce2 and fetches the next opcode from that location.
  • First column of disassembler window shows the current instruction step. Single cycle stepping is done via the r command. eg. 'r 4' executes 4 clockcycles. note: actual commands to execute functions might change when Monitor development is completed. I will document all of them when I finally release the Beta version as stable. 
  • Fixed issue with emulator sometimes freezing when exiting Monitor that was triggered by a breakpoint.
  • Fixed issue where current instruction sometimes wasnot being displayed at top of disassembly window when entering Monitor. The current instruction still might not show in rare circumstances if it was disassembled as an operand of another instruction during entering of the Monitor.

27 June - C64 Beta

  • Included a disassembly window of the entire current memory bank in the Monitor tool. Breakpoints can be toggled via the disassembly window.

23 June - C64 Beta

  • Improved SID Player which nowuses IRQ's. Used some of the code from PSID Player by Dag Lem. Ubi-Sound by Jeroen Tel fixed.
  • Updated look and feel of SID Player
  • Fixed values of CIA timer for songs that use CIA timing for speed played in SID Player.

20 June - C64 Beta

  • Increased frequency of clock count update from every 1/2 a second to every 1/10th of second in SID Player. Improves timing to automatically skip to next song using song time lengths from HSCV.
  • Fixed bug where monitor was not pausing the emulator.
  • Fixed Tusker sid again. I broke it by forgetting to uncomment SEI in the SID Player code during testing.
  • Fixed double clicking of SID file after SID player has stopped restarts the timer correctly
  • Songs of SID file displayed in a table within SID Player. They can be execute by double clicking. I will add STIL support in a future release. See High Voltage SID Collection (HVSC) for more information on the HVSC collection.
  • SID Player frame resizable
  • Fixed spelling of HVSC. 
  • HVSC root directory can be set via "setup menu" under settings. Once set, the emulator will search for the file "Songlengths.txt" under subdirectory "DOCUMENTS" to setup times for sid song lengths.
  • Config can be saved via "setup menu" under settings. Only allows saving of HVSC root directory at this stage after it is set.
  • SID Player counter is functional. Player will loop current song if loop is selected. Player will skip to next song when current song is complete, loop not selected(default is selected) and HVSC is correctly set up .

19 June - C64 Beta

  • 2nd SID works correctly now. Each SID plays on separate channels when the 2nd SID is enabled to produce stereo output. If only 1 SID is enabled, theSID plays on both channels.

18 June - C64 Beta

  • Re-enabled options for 2nd SID.
  • Fixed SIDPanel output .
  • Dual SID support - Enabled and configured via "Chip set" under settings menu.
  • SID Player
    • configures SID model according to sid file flags. Support for dual SIDs.
    • blank screen during playing of sids.
  • Warped reset when auto-loading programs

17 June - C64 Beta

  • SID Player handles different speeds correctly now. Wizball.sid plays at correct speed.
  • More fixes to SID Player -  Tusker works again.

16 June - C64 Beta

  • The built in SID Player can play sids that reside under IO area. Player is dynamic so will automatically relocate when required. Detects basic tunes and executes them by the BASIC RUN command. Plays all of the tunes under VICE's VSID test repository. Opening a sid using "Open..." via the file menu or the SID player GUI plays the default tune. Flags are detected but ignored at this stage. No screen initialisation so main emulator screen sometimes has garbage in it while playing tunes but it does not effect the play quality.  

15 June - C64 Beta

  • Support for .sid files. A basic SID player can be accessed via the tools menu or when using "Open..." under the file menu when loading a sid file. The timer is not currently implemented. Stop, previous song, Play/pause, and next song buttons are functional. Play will insert a SID player to play the tunes which is initialised by an image stored on a modifiedSuper Cartridge (type 8). Stop will eject it. I plan on adding support for the HVSC library in a future release.
  • Fixed saving of binary files of Assembler when memory location $ffff is used

11 June - C64 Beta

  • Moved limit speed and pause options to settings.
  • Improved auto-loading for Testbench.
  • New "Open.." option under file menu. Allows auto-loading and runningof prg, t64, d64, sid and crt files.

* Depending on my day job commitments I'm aiming to have the first stable version of what is known as C64-Beta with a proper manual ready by 1 July. I also have working copies of the Atari 2600 and VIC 20 which uses the new features of C64 Beta. I plan on releasing them after I get some time to work on them properly.

05 June - C64 Beta

  • Fixed capturing of mouse.
  • *NEW* T64 file format supported via Datasette load menu. Loads first entry of image into memory. Will support multiple file .t64 images in a future release.

04 June - C64 Beta

  • Gamepad support - Gamepad must be connected to computer before starting emulator. Supports only one device at a time. I will add support for multiple devices in a future release. Requires installation of JInput library files to same location as the emulator. The required files are included in the emulator and can be installed via new 'Setup menu" accessed via settings.

01 June - C64 Beta

  • SID 8580 available by Chip set settings menu- Based on reSID by Dag Lem
  • Adjustments to VICE default screen size for compatibility with NTSC Testbench programs that compare results with a screenshot. note: NTSC is still only in proof of concept stage and is not cycle perfect yet.

24 May - C64 Beta

  • Some refinements to Full screen code
  • *** NEW FEATURE *** Internationalization support. This is a work in progress and I will add languages on request. I am relying on google translate at the moment but when I complete migrating all the hard coded strings within the emulator to support internationalization, I will seek assistance from native speakers of each language to fix up my translations. :)

23 May - C64 Beta

  • Fixed some keys not being recognised in full screen mode. TAB==> CTRL works in full screen mode now.
  • Full screen mode supports variable scan lines - Testbench tests that change the VIC-II type automatically resizes if executing in full screen mode.

21 May - C64 Beta

  • Full Screen mode is marked as stable now!! :)
  • Improved performance of drawing to screen in full screen mode.
  • Option to choose refresh rate and color depth for full screen mode.

20 May - C64 Beta

  • Fixed sprite enable timing bug I accidently introduced 9 January . The cat face and the effect behind it display correctly in Wonderland XII again.

19 May - C64 Beta

  • Fixed keyboard loosing focus and screen sometimes stayingblack when switching to full screen mode.
  • Improved Full screen support. Full screen mode uses double buffering and is stable now. ALT-ENTER to toggle

18 May - C64 Beta

  • Improved screenshot functionality - Can save when emulator is paused. Fixed saving of aspect ratio which was distorted in some modes
  • Tabbed settings
  • Minor tweaks to Testbench screenshot handling
  • Fixed  default value of available full screen modes to correctly show the current resolution. note: full screen mode functionality is not considered stable yet. If screen becomes corrupt, exit by pressing ALT-ENTER (this key sequence toggles full screen on/off)
  • View menu removed from top menubar. All view menu items have been moved to screen settings.

note: I have implemented but not released a new working version of the Atari 2600 using the same model as C64 Beta. Once C64 Beta is released as stable, I will update the Atari 2600 to take advantage of all the new features that C64 Beta is using. I will do the same for the VIC 20 as well.


  • Complete
    • Core functionality
      • VICII 6569
      • CIA 6526 and 6526a
      • SID 6581
      • CPU 6510
    • Diskviewer
    • Testbench
    • CPU multiplier
    • Hot switching between different types of CIA and VIC-II chips
    • C1541 - single and multiple drives.
      • VIA 6522
      • CPU 6502
    • C1530 - writing to tape not supported.
    • Snapshots
    • Screenshots
    • Cartridge support
      • Action_Replay
      • KCS_Power_Cartridge
      • Final_Cartridge_III
      • Simons_Basic
      • Ocean_Type_1
      • Expert
      • Super_Games
      • Epyx_FastLoad
      • Final_Cartridge_I
      • Game_System
      • Dinamic
      • Zaxxon
      • Magic_Desk
    • Mouse support
    • REU - 512K and 16MB
    • VPL,REU,D64,TAP,CRT and PRG file support
  • Incomplete but functional.
    • VICII-6567 and VICII-6567R56a
    • Assembler
    • Monitor
    • Sidpanel
    • Full screen mode (Completed 21 May 2016)
    • Cartridge support
      • EasyFlash
      • Freeze_Frame
      • Freeze_Machine
  • Features not implemented yet.
    • Command line options
    • HID device support (implemented 4 June 2016)
    • G64 and T64 file support (T64 implemented 5 June 2016)
    • SID 8580 (implemented 1 June 2016)
    • PC Keyboard layout
    • More Cartridge types
    • Config file

17 May - C64 Beta

  • Increased motion threshold for Motion Adaptive Blending (MAB) - better display of framesthat have a lot of movement when  in MAB deinterlace mode.
  • CRT deinterlace options
    • none (default)- each frame is drawn to the screen with no extra processing. Will cause flicker with 'interlaced' images
    • Blending - current frame is blended with the previous frame. Ghosting can occur.
    • Weaving - Consecutive frames are drawn to odd/even lines. Can cause combing with moving images
    • Motion Adaptive Blending - combination of weaving and blending. Greatly reduces ghosting and combing. This mode seems to match the closest to my video converter I use to connect my real C64C to a modern monitor. Still a work in progress.

13 May - C64 Beta

  • Smoother transitions of screen when  changing colors, VIC-II type or screen border mode.
  • Included R G B filters

12 May - C64 Beta

  • New CRT options via the machine setting menu. Scan lines and image blending available. Image blending reduces flicker with interlaced images. See some screenshots above that were taken using c64 Beta with blending enabled. Images created by the German demo group Crest . Please note screenshots that are taken with scanlines enabled will be saved at double the standard c64 dimensions.  Executing tests via Testbench will disable scanlines if they areenabled.

11 May - C64 Beta

  • New Panel colors
  • Testbench - fixed issues with restoring machine state after running a NTSC or NTSC-old test. Improved updating display of running test programs status .

10 May - C64 Beta

  • Fixed bug in NTSC mode where emulator would crash if LPX was read at a cycle 65
  • Fixed bug introduced with hotswitching of VIC-II for the detection of last cycle ID for VIC-II.  Original unmodified Krestage 3 passes embedded VIC-II test and runs correctly again.

9 May - C64 Beta

  • CPU multiplier - available via Machine settings menu. Increase cpu cycles by a factor of 2,3 or 4. Does not affect any of the other chips. It makes games like fairlight and driller run much faster without effecting events liketiming of music. It should be set back to normal for any time a program requires true drive emulation or uses advanced VIC-II tricks.
    • play, file not found andtimeout icons.
    • Fixed PAL filter
    • Uses VICE default screen dimensions and Pepto palette for compatibility with VICE's test programs that use a reference screenshot.
    • Tests that have a reference screenshot are compared with the screenshot captured by the emulator after the test. If they match the test passes, otherwise it fails.
    • Border mode and palette selections are available via the machine settings menu. These will eventually replace the items in the 'view' menu accessed via the menubar.
    • Some filter available. When 'fail report' is selected, only failed tests are displayed in the tree window.
  • Fixed behavior of pixels of a sprite during a change to the multicolor enable register. Test mc-hires-exp.prg and mc-hires.prg now pass Testbench.  Result has been confirmed to match my real C64. :)

8 May - C64 Beta

  • Mapped left arrow to PAGE DN in addition to the backquote to support other keyboard layouts.  I plan on including internationalization after C64 Beta is released as a stable version.
  • Testbench - Option to sort test programs alphanumerically. Some GUI changes. Will add refine options in next release.

5 May - C64 Beta

  • Testbench - mountd64, mountcrt, ntsc,pal, ntscold and reu512k support. Reference screenshots are loaded if available.
  • Drafted C64/PC keyboard mapping picture(see above). I will improve it once I finally release a manual after the Beta version of C64 has all the minimal features implemented.

3 May - C64 Beta

  • Can save screenshots via the file menu. I will provide a shortcut option in next release.
  • Improved testbench interface. Still a work in progress. Designed for use with VICE test programs but could be customized for a custom program library. Screenshots are captured after each test and can be viewed via the tree navigation. Top panel on right shows the captured screen. Bottom panel on right is reserved for future development including forinteractive tests requiring a reference screen. You can run a single test by double clicking the test item in the tree navigation or use play in file menu to run all tests. See https://sourceforge.net/p/vice-emu/code/HEAD/tree/testprogs/testbench/ for more information.

1 May - C64 Beta

  • Included summary of failures for testbench.
  • Added testbench support developed by Groepaz .  Click here for more information including structure of .in files. Supports exitcode, cia-old and cia-new flags. It's still a work in progress and has very basic GUI at this stage. Available under tools menu.
  • Updated cartridge logic provided by RGC for theKCS Power Cartridge.

29 April - C64 Beta

  • Delayed updating of ICR when acknowledging CIA IRQ's. Fixes VICE bug#740 for old CIA and new CIA's.

27 April - C64 Beta

  • Cartridge type 45 (Freeze Frame) and 46 (Freeze machine) recognized. Still under development
  • Cartridge type 8 (Super games) supported
  • VICE BUG #740 CIA timing issues in old and new CIA model - fixed for new CIA. Output of test program confirmed with my real C64. I will implement a fix for the old CIA in a future release.
  • Some GUI updates to machine menu.

21 April - C64 Beta

  • Fixed REU menu
  • Fixed Expert Cartridge support.
  • Sprites enabled in at sprite xpos values of 0x1f8-0x1ff in NTSC mode
  • Frames/second status reflects the number of emulated frames instead of frames drawn (warp mode)
  • MOS6567R56A (OLD NTSC) available via Machine settings. I will clean up the GUI in the next release.

20 April - C64 Beta

  • Mouse support and improved configuration for control ports - Accessed via Devices menu under settings.
    ALT-J swaps devices in control ports (replaces F11 swap) 
    ALT-G toggles capturing of mouse events. Mouse must be selected on one of the control ports via the Devices menu before the capturing of mouse events becomes effective.

18 April - C64 Beta

  • Improved disk change emulation. Drive initializes correctly after disk change

17 April - C64 Beta

  • Fixed multiple drive support when using less than 4 drives. Single drive connected functions correctly again. Note: I've temporarily removed the drive menu from thetop menu. Click on the drive image to load a disk via diskviewer .

16 April - C64 Beta

  • Multiple drive support - Can select up to 4 drives via the new device settings. note: snapshots only restore and save device 8. I will include snapshot support for the other drives in the next release.
  • Cartridges resets with a soft reset. Hard reset will clear cartridge memory as well.
  • Improved NTSC emulation. Right border closes at correct cycle but side border still not opening correctly. Will do more research and fix in a future version.

15 April - C64 Beta

  • NTSC support - hot switch between PAL and NTSC via machine settings. I have only done minimal testing of NTSC and it uses the same colors as PAL for now.  I have included it as proof of concept at this stage but it seems stable. I'm aware of the right border closing 8 pixels late and will fix by next release. Passes VICE phi1timing test. NTSC mode fixes Apollo 18 glitches. I will do more thorough testing and cleanup of code once I include all other features noted in my previous message. WARNING - attempting to load a PAL saved snapshot in NTSC mode will freeze the emulation if it was saved at a raster line greater than 263. I will add checks to prevent crashing in a future release. The safe way to load snapshots you're not sure about is to load them in PAL mode and switch to NTSC once the snapshot is running.

11 April - C64 Beta

  • Fullscreen mode - ALT-ENTER toggles. Should be more stable than currently released version.
  • New setting menu. Can configure CIAs and fullscreen settings. More to come.
  • The following points are the minimal list of things still TO DO before new C64 emulator comes out of BETA and replaces the existing released version. I already have the code complete for most of these features. I just need to implement them into the new emulator. I have a lot more new features planned for the emulator once it comes out of Beta stage.
    • Multiple drive support (completed 17 April)
    • Complete cartridge snapshot support
    • Variable cpu speeds (completed 9 May)
    • Proper Manual
    • Option for PC keyboard mapping
    • Joystick configuration in menus - (completed 20 April)
    • Mouse support - (completed 20 April)
    • Improved Monitor/Disassembler
    • UUdecoder
    • Improved full screen support - currently screen sometimes becomes corrupt. Just exit and re-enter full screen mode to fix for now.
    • Any other feature I might have missed that exists in the currently released version
    • Testing, testing and more testing. :)

10 April - C64 Beta

  • Save snapshot enabled.

09 April - C64 Beta

  • Monitor - Added a (assemble), m (memory dump) and p (poke) commands
  • Keyboard shortcuts implemented for some menu items.
    • ALT-PAUSE :toggle pausing of emulator
    • ALT-W :toggle warp mode
    • ALT-M :pause emulator and open Monitor
    • ALT-R :Soft Reset
    • ALT-CTRL-R :Hard Reset
    • ALT-8 :Toggle visibility of Diskviewer for drive 8

07 April - C64 Beta

  • Fixed graphic buffer issue in first part of Flexible demo by Offence.
  • Fixed some programs being corrupt when using disk viewer to quick load a program.

06 April - C64 Beta

  • Fixed bug with disk id on some disks introduced on 16 March of the new Beta version of theC64 emulator - Skate or Die loads correctly again

05 April - C64 Beta

  • Fixed size of disk viewer when loading new disk after resize of main screen. 
  • Load snapshot - Only loads snapshots created by the released version of c64.jar at this stage. Disk viewer will update disk content from snapshots.  I plan on supporting snapshots from other emulators and give options to customize loading and saving of snapshots.
  • Some minor bug fixes. Monitor now works without resetting the emulator. Will re-introduce most of the monitor commands in next release of Beta.

20 March - C64 Beta version

  • Fixed BASIC pointers when quick loading programs from disk via the disk viewer.
  • Clicking disk image on main panel now toggles disk viewer. Improved scrollable display.

19 March

  • Beta version of new emulator I'm working on is now available for download. Once I include all the features of the old emulators, the new version of the emulator will replace them. I still need to implement snapshots, support for multiple drives, full machine monitor, full screen support and a few other small things as the bare minimum. I should have that done within a couple of weeks.

    The new version has a much more advanced disk viewer allowing saving of d64 images which you can preview now in the beta version. The disk view for drive 8 can be viewed by clicking the disk drive image in the bottom panel at any time. Programs can be loaded into memory immediately by double clicking the filename. Please note the disk viewer under the tools menu is separate to the physical drive version but can still view disk contents and load files into memory by double clicking the filename in the viewer.

    The new version of the emulator once it comes out of beta will include a lot more tools to play with. Watch this space. :)

18 March - **NEWS**

  • I will release a beta version of the new C64 emulator this weekend. It has most of the features of the currently released version implemented already. The new emulator includes a much improved disk viewer which updates in real time and can finally save D64 images!

11 March - Final Cartridge III

  • VIC register value $d011 set to 0 when cartridge inserted.  Final Cartridge III  now defaults to desktop when inserted.

10 March - No uploaded updates

  • I'm currently rewriting all the emulators from the bottom up. I will upload a beta version within a couple of weeks. Once the new version of the emulators have all the features of the currently published emulators, I will release them with version numbers at the end of every month, with occasional ad-hoc releases when I implement major changes or fix a reported bug.

20 February

  • Assembler
    • !src "filename" - include source code from file "filename" as though it is part of the current source code. At this stage the file must exist at the current source codes location. Subfolders should work but I haven't tested it yet. Parent folders won't work at the moment but I will fix this in a future release.  The Assembler is still in development stage so I haven't drafted a manual yet. I'm focusing more on the functionality at this stage so the look and feel including text colors are likely to change.  I welcome any feedback, suggestions or requests via this sites contact page or send a message to willymanilly at csdb.dk. :)

13 February

  • Assembler
    • Assemble to binary file - Save compiled program without program start address in header
    • Assemble to file - Save compiled program with program start address in header (low/high)
    • !bin "filename" includes contents of binary file into  compiled code.  File must be same directory as source code. eg.
      !bin "data.bin" ;loads test data into memory starting from memory location $4000
    • More debug info into standard output including line numbers of errors. This will eventually be output into a debug window.

10 February

  • Assembler - Alpha characters in strings (!scr "ab") converted to screen alpha codes. eg a=1,b=2 etc
  • Assembler/Monitor - NOP now compiles to $ea instead of $1a.
  • Assembler
    • more fixes to formulas. You can mix high/low byte operations anywhere in function now. (before it could only be first operand of a function)
    • Fixed error when there was an 8 bit result within bracket of formula when final result is meant to be 16 bit. eg. lda $0400+($40*3),x compiles properly now.
    • Labels are not case sensitive. eg test, TEST and TeSt are recognized as the same label.
    • TODO before formalrelease (suggestions and requests very welcome) :)
      • compiler output console
      • multi-file support
      • conditional code
      • manual

8 February

  • Assembler - Some bug fixes and improved calculation of formulas. See below for an example of what compiles correctly. note: Labels embedded in operands will not be recognized and will be underlined until the program is assembled.  Still a lot of work I want to do to the Assembler before I formally release it but it is usable as is. :)
    ;test mixed formula with brackets
    yellow =7
    lda #green
    ldx #yellow
    sta vicbase+($10*2+(7-5)-2) ;sta $d020 //background
    stx -$1000+vicbase+($400*4)+(%101*7)-2 ;stx d021 //background

6 February

  • Assembler - More improvements to real time highlighting of errors.  Assembling the program retains the current cursor position in the text area (it was previously scrolling to the end of the text).

5 February

  • Assembler
    • fixed bug when comment followed unassigned label
    • nested calculations implemented. eg sta $0400+(1*40)
    • byte now accepts strings as arguments
    • Until I draft a proper instruction manual, example code that can be successfully compiled without modification that uses most of the assemblers features is available here. ==>http://codebase64.org/doku.php?id=base:micropong 
  • Assembler
    • Better handling of compiling to and referencing zero page locations with labels.
    • Operands can use /,*,&,|.^ in addition to +,-,< and >.
    • Improved syntax detection.  Formatting is very likely to change in future releases. I'm focusing on the functionality at this stage.
    • Compile to .prg no longer writes to c64 memory.
    • Compile to c64 updates graphics memory where appropriate.
    • errors underlined. Any errors detected during assembling of the program will not allow compiler to successfully complete and their will be no output to a file or the c64. note: new labels used as operands for opcodes will not be recognised until the program is compiled. Assembling the program updates all label references.
  • Assembler - fixed compilation error if label/program counter set in first line. Seems to have fixed the pasting issue.
  • Assembler - Improved real time syntax checking. Labels can be on same line as instructions. There is still a lot of work to do before I am happy to release formally with a manual.  An example program that can be compiled is here ==>http://codebase64.org/doku.php?id=base:opening_the_top_bottom_borders which should give you an idea what can be done with this version.  note: I sometimes experience issues pasting large amounts of text from sample programs from the internet so best to download those programs to an .asm file and them load them into the assembler. I know the problem and will fix in future release.

1 February

  • Assembler 
    • can recognise and compile low byte and high byte operations (< and >). e.g lda #<irq
    • byt and .byte allows a list of bytes to be compiled eg. byt $4c,$20,$34

31 January

  • Assembler (accessed via the top menu under Monitor) - Has very basic functionality at this stage. Allows assembling directly to c64 emulator memory or to .prg file. File will be saved using the source file name and location with a .prg extension. If no source file was selected assembled program will be saved to default.prg in the folder of c64.jar. It is still in early development stage so there is still a lot of features to be added but it is functional.  I will provide proper documentation when I have a few more basic features implemented and have finalised the look and feel. All opcodes are supported including undocumented instructions.  The 'a' command with no arguments in the Main CPU monitor (also under the Emulators Monitor menu) provides structure of all opcodes. The following is an example program demonstrates most of the implemented features. You can mix hex, binary,decimal and labels with addition and subtraction functions. 

    ;this is a comment
    ;value without $ or % treated as decimal

    *=49152 ;set program counter to 49152. *=$c000 gives exact same result
    vicbase=$d000 ;label vicbase set to 53248
    border=vicbase+32 ;label border set to 53280
    background=border+1; label background set to 53281

    jsr setbackground
    loop ;fill screen with all 255 characters
    sta $0400,x
    bne loop
    setbackground ;subroutine
    lda #%010
    sta border
    lda #$07
    sta background
    ldx #$00

30 January

  • C64 snapshot - VICII registers values properly restored.  It was broken on a recent release but is fixed now.
  • Assembler - Removed debug output. Font size set based on screen size.
  • *NEW FEATURE* - Select palette available under view menu.
  • Default palette set to the same as the default colors for VICE from default.vpl.
  • Assembler - Labels and basic addition/subtraction recognized. *note: new Assemble option in the assembler not functional at the moment. It only does 1 pass which detects labels for future processing at this stage. I'm hoping to have the Assemble option functioning in the near future. :)

25 January

  • REU - Improved BA timing. First "sprites in border" scroller flicker in real 1750 version of Treu Love fixed.  I'm still noticing sprite one pixel high sometimes displaying in right border so will investigatefurther.  I'm suspecting it is related to sprite DMA accesses starting during a badline, which is the same place that was causing the flicker in my previous version of the emulator.
  • Monitor - removed duplicate output if r (execute number of cycles) command.  This was caused by the extra cycles of the disk drive.

24 January

  • *UPDATE to REU* Included a fix to run real 1750 version of Treu Love. Set as default. Can be disabled via REU menu under Expansion menu. Still needs testing.
  • Assembler - Improved recognition of valid opcode structure.
  • REU -  Writes to VICII and some BA timing fixes. Treu Love REU demo (not the one for real 1750) displays sprites in border correctly. I'm still investigating the BA timing issues covered by VICE bug#700 - REU BA timing is wrong.
  • Monitor - Displays REU cycles where appropriate when using the r (execute number of cycles) command.

22 January

  • *NEW FEATURE* Source code editor (assembler under monitor menu). Currently only highlights (in blue)valid opcodes with correct arguments and highlights comments (any text on a line after ';' in red). Very basic functionality at this stage including displaying of line numbers, load, save, and cut/copy/paste. There is no option to assemble code directly from the emulator yet but I am busy working on that functionality.
  • The Monitor's assembler now accepts binary(%) and decimal in addition to hexadecimal($) numbers as arguments. eg
    >a c000 lda #%101
    >a c002 sta 53280
    >a c005 inc $d021
    >a c008 jmp $c005
    >a c00b

16 January - C64 REU

  • Fixed emulator sometimes freezing when REU disconnected during REU access.

13 January - C64

  • Emulated sprite fetch bugs as identified by VICE bug#217. Will make this optional via a menu when I find time to rework the GUI. note: on my real C64C the bug eventually flickers between multicolor and Hires after being powered on for some time. On power up the bug is stable in HIRES mode. (see http://sourceforge.net/p/vice-emu/code/HEAD/tree/testprogs/VICII/spritefetchbug/ )
    Effect visible on my real C64 at following X values using test program from above link. The emulator matches the real C64 at all locations.
    Sprite 1 :106,10a,10e,112,116,11a,11e,122,126,12a,12e
    Sprite 0: 136,13a,13e,142,146,14a,14e,152,156,15a,15e
  • New configure screen menu added (Incomplete).  Only option available at the moment is screen resolution to be used during full screen mode. Will hopefully find time to fully rework GUI in the near future.

7 January - C64 VICII

  • Improved handling of detecting sprite to background collisions. Improved speed during warp mode on screens with a lot of sprites
  • More research done of behavior of pixels during change from multicolor bitmap mode to 8 bit multicolor text mode. Fixed stray pixels in "a_load_of_shit" demo.

3 January - C64 VICII

  • fixed minor bug introduced in 1 January release with displaying last line of sprite from Xposition 0x160-0x164. Sprites display correctly again. Tested with spritemove testprogram from VICE.

2 January - C64 VICII

  • Minor bug fix during modechange. Removes stray dots that appeared in Flexible demo part 3.

1 January 2016 - C64 VICII

  • Faster emulation of all graphic modes.
  • More accurate emulation of pixel behavior during mode changes. The emulator matches the output of my real C64 using the test programs suite from VICE including vic_timing, videomode and split-tests.


19 December - C64

  • VICII - Refined sprite and XSCROLL code for faster execution.
  • ULTIMAX mode - fixed VICII gfx access.  I noticed the screen didn't match my real c64 when freezing the Last Ninja with my ACTION REPLAY VI.   This was caused by the VICII incorrectly getting it's data from the cartridge rom instead of the C64 ram in some memory locations.

17 December - C64

  • Improved KCS Cartridge emulation. BLOADing and cartridge freeze/resuming works for running basic programs now.
  • Fixed issue when reloading snapshot with cartridge image sometimes crashing the emulator. This was caused by the timer still running causing an overflow while the menus where being regenerated.
  • Fixed repeating RESTORE key when held down. Itneeds to be released before it is sensed again just like the real thing.

14 December - C64

  • Restoring snapshots with cartridge images will update the cartridge menu.
  • Included some additional reset code for KCS power cartridge .

13 December - C64

  • CIAs - fixed shift register timing. No more jitter in Athena when scrolling down a screen.
  • Easyflash Cartridge - resets to Ultimax mode. Futurama demo works now.

8 December -C64 CIAs

  • *update* fixed shift register IRQ timing. Athena refreshes screens properly. Passes all of VICE shift register test programs. Test programs and Athena confirmed working correctly with my real C64. Removed shift register debug messages.
  • Improved model for shift registers and TOD clock

7 December - C64

  • NEW FEATURE - CPU speed - available under file menu.
    • Increases the CPU speed by a factor of 2, 3 or 4. Factor of 1 is normal speed. Does not affect speed of SID, CIA's, VICII or devices. Most games use CIA or Raster interrupts for timing so will most likely run at same speed regardless of CPU speed selected. Will make basic programs and games like Driller and Fairlight run at a much faster speed without distorting music or clocks. CPU speed of 1(default) should be selected for demos, any disk access including loading of games, games that use VICII tricks for special effects, or anything else that requires exact timing of CPU.  Quickload available under drive menu will work with all cpu speed modes. The cpu speed can be changed anytime without resetting the emulator. I will look at automatically disabling/re-enabling CPU speed increase if the emulator detects disk access in a future release.

5 December - C64

  • Clear CIAs IMR and ICR on reset. Fixes multiple problems, including the loading of some cassette games, that can happen after a reset because IRQ flags wereincorrectly set.

4 December - Atari 2600, Commodore 64, VIC 20

  • Monitor included for Atari 2600
  • New keyboard mapping matching other emulators like VICE.  One day I will find time to actually document everything but some of the less obvious keys if you're not familiar with the key mappings from other emulators are:- (C64 key = PC key)
    • CTRL = TAB
    • Commodore key =LEFT CTRL
    • arrow up graphic = DEL
    • pound sign =INS
    • left facing arrow graphic =~
    • @ = [
    • * = ]
    • = = \
    • + = -
    • - = =
  • VIC 20 - Correctly connected RESTORE key to VIA1 CA1 instead of directly to NMI. Pressing RESTORE in Bandits no longer crashes game.
  • TO DO: VIC 20. Find correct color codes. Confirm output of VIA1.prg and VIA1-free.prg from http://sourceforge.net/p/vice-emu/code/HEAD/tree/testprogs/interrupts/irq-ackn-bug/ matches output from real VIC 20. I haven't been able to find any reference data for these programs and unfortunately I don't have a real VIC 20 to test with. Grateful to anyone if they can forward me screenshots from a real VIC 20 if anyone has one...  If I get time I will write a test program for my 1541 instead as an alternative method to test the IRQ acknowledgement timing of the 6522 chip. :)

3 December -  VIC 20

  • *Update - Raster Read Register updating end of screen implemented only for NTSC only. PAL updates Raster Read Register at end of line. Impossiblator 3 working again.
  • Raster Read register updated at end of screen instead of end of line. Bandits displays correctly now. Bandits should be started in NTSC mode. You can hot switch from PAL to NTCS while the game is loaded but it might cause some minor graphic instabilities. A simple soft reset fixes the problem.
  • VIC 20 has the same monitor as the C64 included now.

2 December - SIDpanel

  • Improved output
  • f11/f12 decrease/increase samples to panels

30 November - C64 Monitor

  • Sidpanel - A GUI I used a while back in the early days to test SID functionality. I've cleaned up the code but haven't included any new features since I first developed it. It is in early stages of redevelopment so only available via the monitor at this stage.
    • Command: sidpanel on/off
    • Displays Waveform, Envelope, or Accumulator of SID voices
    • panels 1-3 are the voices, panel 4 is the volume, panel 5 is combined waveforms
    • f5 - Select Waveform output
    • f6 - Select Envelope output
    • f7 - Select Accumulator
    • f9 - Freeze panel output. Restart by selecting f5,f6 or f7.
  • UUencoding decoder
    • Another simple GUI I created a while back for decoding .
    • Command: uu
    • On successful parsing of valid uuencode program will load program into memory and display message like "Program loaded 0801 - 2871" into monitor window
    • No error checking. The decoder will assume valid entry. If no "Program loaded xxxx-xxxx" message appears, the decoder failed.
    • Use CTRL-V to paste encoded program you want to decode into the textbox.
    • resize the window if the parsing button is not visible.
    • Example uuencoded programs here. Please include all lines from begin 644... until end. Make sure the begin and end line are included. Ensure there are no empty lines before the begin statement in the pasted coded.
    • Once again this is in early re-development so only available via monitor at this stage.

29 November


  • Directory for each file type is saved during session.
  • Updated manual to include Monitor commands.

C64 Monitor

  • Save - s bbbb eeee
    • bbbb/eeee = start/end location in hexadecimal
    • No filename argument, file is chosen using filechooser once command is entered.
    • please note filechooser does not automatically include .prg extension and will overwrite file if it already exists
  • Load into memory - l
    • Load file into memory. Starting location will be first 2 bytes in chosen file using little endian format
    • No arguments, file is chosen using filechooser once command is entered.
  • Assembler - a xxxx mnemonic arg 
  • with no arguments lists all available opodes including illegal opcodes with their addressing modes in the format the assembler understands.
  • xxxx = memory location in hexadecimal
  • note: Assembler automatically outputs header for next opcode after valid input. (>a xxxx ). Enter to exit Assembly mode.
      >a c000 ldx #$01
      >a c002 stx $d020
      >a c005 inc $d021
      >a c008 lda $d021
      >a c00b and #$0f
      >a c00d bne $c005
      >a c00f inx
      >a c010 jmp $c002
      >a c013
      >g c000

28 November - C64

    • 6-Expert Cartridge support. PRG, ON and OFF modes. Freeze using EMS menu item or RESTORE key in ON mode.
    • Cartridge menu changed to Expansion port. Menu updates itself depending on what cartridge is inserted.
    • Fixed bug introduced in last build where Final Cartridge III would crash when exiting to basic.
    • Fixed writing to hirom of Easyflash. Can save in slot 2 of Zac mckracken/Maniac mansion
    • Current bank displayed in output
    • Break points implemented in monitor. b xxxx toggles breakpoint on/off for memory location. s lists current breakpoints.
    • game true/false, exrom true/false to toggle EXROM and GAME.
    • p xxxx xx to poke location with value in current bank.
    • j xxxx jumps to location without exiting monitor.
    • I will update current and include new commands with full description when I get time. I have developed these for my own debugging purposes so the monitor is far from complete yet.

24 November - C64 Monitor

  • improved cartridge support (can now view IO1 and IO2 areas for KCS Power Cartridge )

22 November -  c64

  • Fixed  blank screen issue with KCS Power Cartridge snapshots
  • 2- KCS Power Cartridge support including BLOADing saved images
    • please note you will probably need a spare blank d64 image to save. The KCS manual recommends a disk with at least 256 blocks. You will also need to turn the disk drive off then on again if the program puts code into the drive memory.
    • Snapshots with KCS can sometimes blank the screen but runstop/restore or soft reset will reset the screen and give you access to the disk image for BLOADing etc. (update:fixed)
    • Monitor W command needs old CIA's selected from settings to function correctly. It doesn't step through to next instruction with new CIA's. Not sure if this happens on real C64C with new CIA's as I don't have access to this cartridge to test.
  • I will be working on saving d64 images and 6 - Expert Cartridge support next.

21 November - C64

  • Final Cartridge III support. Unsupported cartridges no longer crash emulator. Summary of cartridges currently supported are:-
    • 0 - Standard 4, 8 and 16K cartridges
    • 1- Action Replay
    • 3 - Final Cartridge III
    • 4 - Simons' Basic
    • 5 - Ocean Type 1
    • 10 - Epyx Fast Load
    • 13 - Final Cartridge 1
    • 15 - System 3
    • 18 - Zaxxon
    • 19 - Magic Desk
    • 32 - EasyFlash

18 November - C64

  • fixed up stray pixels during flipping of multicolor bit in some demos and games - Krestage 2.
  • zeropage RAM values simulated with drive-quickload. Filename stored correctly at top of BASIC ram. SAM reciter and Let's Scroll It works correctly when loaded with quick load .

15 November - C64 Monitor

  • fixed branch address
  • New command: c - Clear display window
  • Display updates after r command
  • includes IRQ status and timers in r command output

8 November - C64

  • Fixed freezing of emulator when attempting to savestate when cpu halted with opcode $02,$12 etc.
  • Machine code monitor (work in progress)
    • d, d $xxxx - Disassemble
    • m, m $xxxx - Memory dump
    • r $xxxx - execute and disassemble $xxxx cycles (recommend <500 cycles at a time)
    • g $xxxx - exit monitor and jump to instruction at $xxxx
    • x - exit monitor

6 November - Core 6502 (C64, VIC 20, Atari 2600)

  • Improved SHA,SHS,SHX, and SHY emulation. Supports page boundary crossing and DMA access.Passes all available VICE test programs.  Confirmed same programs pass on my real C64. The basic algorithm I use for all instructions is as follows. The normal logic of the relevant indexed addressing modes applies to all cycles of all of the SH instruction. Let me know if you want me to expand on this.

    Cycle before WRITE cycle
    1. ADH=ABH+1;// even if page boundary not crossed
    WRITE Cycle
    2. IF indexed address crosses page boundary {ABH=ADH AND REG.value};
    3. IF proceeding read cycle was not paused for DMA {write (REG.value AND ADH) ==> databus};
    4. ELSE {write (REG.value) ==> databus};

22 October -C64

  • Improved ULTIMAX support.

8 October - C64

  • SID - Fix pulse output when test bit set. Speech in Apollo 18 now works

7 October -C64, Vic 20, Atari 2600

  • Snapshots
  • Gamepad support
  • Various emulation fixes (c64) Wonderland xii diskchange now works, reu fixes
  • interactive diskviewer (VIC 20, C64)
  • Manual

17 September - VIC 20

  • Programmes can be automatically run by double clicking the filename in the disk content window. Double clicking an empty space in the disk content window will load"*",8,1
  • Fixed VIA PA latching.  PWP Liberation now works
  • Removed some debugging code that slowed emulator down after emulators system clock overflowed

16 September -VIC 20

  • Fixed writing to cartridges. Robin Hood now works
  • Hard reset implemented (clears ram)

14 September - VIC 20 Emulator

Supports all standard memory configurations. JRE7 or better required. I will compile for previous versions of Java if requested.

  • PAL (default) and NTSC(interlace not emulated)
  • Bandits compatible(NTSC)
  • Cassette and Disk drive (C1541) support
  • number keypad = joystick directions, Right-CTRL = fire button

14 June 2015 - ATARI 2600 Emulator

Supports only standard 4k, 8k, 16k and 32K roms/super roms at this stage. JRE7 or better required. I will compile for previous versions of Java if requested.
Keyboard controls

  • F1- Power (on/off)
  • F2 - TV type (color/bw)
  • F3 - Left difficulty
  • F6 - Right difficulty
  • F7 - game select
  • F8 - game rom
  • F11 toggle joystick port
  • number keypad = joystick directions, Right-CTRL = fire button


21 January - SAVE STATES - read changelog for what is supported.

Features that are available now include mouse support(F12 enables/disables, F11 swaps mouse port), joystick(number keypad, 0 is fire, 5 swaps port). Please note the current user interface is intended for testing purposes hence why it is still beta. I am still focusing on optimising the core of the emulator so it may be sometime before I tidy up the menus. Feel free to send me suggestions and I will try and incorporate them into the next release. This emulator is benchmarked against my PAL commodore 64C model PCB assembly number 250466 with VICII 6569r3, SID 6581 and CIA 6526A's. Peripherals I have to test with include a 1541-II disk drive(photo used as disk icon), Action Replay VI, SD2IEC Commodore 1541 Disk Drive Emulator and a commodore C2N Cassette. I use the test programs from the Versatile Commodore Emulator (VICE).