Java Apple Computer Emulator
o _ __ ___ ____ o
| | / /\ / / ` | |_
\_|_| /_/--\ \_\_, |_|__
o o
Jace is a logical** reproduction of an enhanced Apple //e computer, written in Java 17 and tested on various platforms (Linux, Windows, MacOS X).
<<< Click on GETTING STARTED for tips on how use this emulator
JACE will always be free to download and open source under the LGPL. But if you really like it and want to encourage continued development please consider donating. I would like to personally thank all who have donated. Your contributions have invigorated my creative drive to make Jace as good as it can be!
Features include:
128kb RAM, 80 columns
Supports all video modes, including B&W and "Mixed" RGB modes
Fullscreen and windowed modes supported (press F9 to toggle)
Disk ][ controller fully emulated (DSK, DO, PO, NIB images supported)
Apple Super Serial Card fully emulated and accessible via TCP/IP
Mass storage "SmartPort" controller support (HDV and 2MG images supported)
Joystick (uses mouse movement or keyboard, selectable)
Resizable main window, also can rescale to best-fit aspect ratio on demand (press F8)
Speaker sound fully emulated as well as Passport MIDI and Mockingboard. AE Phasor is partially working.
AE RamWorks support for up to 8 megabytes of ram.
AE RamFactor support for up to 16 megabytes of ram.
Tweaked, tuned, and optimized to be as efficient as possible without sacrificing full speed
Configuration interface allows putting any type of supported card into any slot
NTSC color approximation -- see screenshots below
Alternate debugger rom (][DB) also selectable
Sourceforge home/download location: https://github.com/badvision/jace
**- Logical reproduction means that I recreated the computer using schematics of the physical machine to determine the best way to structure the object-oriented bits of the emulator; it mimics certain aspects of how the underlying machine worked rather than a simulation that "acts" like the machine using clever (and in some cases more efficient) coding shortcuts. The key difference in this approach is that it is far more configurable and tweakable than a standard emulation, and you could (for example) change the timing aspects and insert new hardware in the form of "cards" like you would in a real Apple //e.
Updates:
(2024-07-01) Modernized to Java 17/22, now GraalVM Native Images are possible thanks to Gluon!
(2013-03-05) No release yet, but I wanted to let you guys know I'm still actively working on some exciting new features and have some major plans for the future direction of this emulator.
CONFIRMED: The way that disks (both 140kb and 800kb+ images) are handled has changed significantly. A new media manager feature will be used to organize disks and insert disks into the various drives. As always, Jace doesn't care what slot configuration you use, and likewise the media manager will support any configuration of drives you can throw at it. Support for popular websites/ftp locations will also be provided to facilitate automatic downloads. Yes, you really just read that.
CONFIRMED: A secret mystery feature that only one other person on this planet knows about, and he's not going to tell you either. :-D It was a major driver for the media manager feature, and that's all I'm going to say about it.
PLANNED: This will not make it in the next release, but there is a significant amount of work done for state management. When this is finished and working, you will be able to save/load emulator states and also rewind the emulator while it's still running. Realistically, most of the code is written but there are a couple of gremlins in it that cause everything to fall apart when it's turned on. I hope to have this done some time in the late spring but in the meantime the code will remain inactive until I get the bugs out.
PLANNED: Plug-in support will allow modular add-ons to be installed, and if possible without restarting Jace. This will usher a new set of optional add-on features such as real joystick support (via jinput) and real RS232 serial support (via RXTX). This should be done in summer 2013.
PLANNED: The death and rebirth of Apple Game Server. The combination of Apple Game Server's UI code and Jace will constitute a very unique and new user interface which has yet to be determined. This will rely heavily on other features such as state management and plug-ins. With any luck you will hear about this again in the summer/fall.
(2012-12-09) More features!
Fixed nasty bug that caused crashes when joystick buttons (alt-keys) were pressed. Airheart is 100% playable again!
RamWorks support is now available for up to 8 megabytes of memory. Original memory implementation is now relegated to an Extended 80 Column Card for the classic 128k experience. Ramworks passes the AE Diagnostic checks. It is possible to use a RamWorks and RamFactor at the same time, not that I'd know what you would want to do with 24mb of ram in an Apple //e. :-D
You can load every slot (Well, except 3) with RamFactor cards and switch memory to use RamWorks -- This would yield 104mb. It would also be very pointless. :-)
CPU can now log warnings if 65c02 extended opcodes are used. This is to help developers determine software compatibility and/or detect usage of older "illegal" 6502 opcodes.
Cleaned up a few improperly implemented softswitches. None of which seemed to cause bugs, but the implementation is now 100% correct.
(2012-10-31) Trick or treat?
65c02 CPU emulation is now 100%, tested and verified thanks to Klaus Dormann's test suite: https://github.com/redline6561/cl-6502/blob/b0087903428ec2a3794ba4219494005174d1b09f/tests/6502_functional_test.a65
Overall CPU usage is way down thanks to recent changes:
Video generation rolled into main thread and this made things a lot more efficient
Switched to older timer model, newer lock-based timers were considerably slower
Memory listener model streamlined to be more efficient
Skyfox now detects mockingboard in slot 4
Pitfall II detects mockingboard and plays perfectly!
Disk II speedup hack now provided as a configuration option
Hayes smartmodem now has UI activity indicators
(2012-08-28) This is the first major release, bringing this emulator within a hair of my original vision for what I wanted it to be: it is a complete recreation of the computer I had growing up. (yaaaaaay!)
Several timing and deadlock fixes, this not only spells more stable but also a lot more efficient in some cases.
AE RamFactor card implemented and working. You will need to install the AE Ram Expander for Appleworks to see the extra storage.
You must specify the size of the card in kilobytes. You can go as high as 16384, which will give you a 16 megabyte expansion.
There is an additional option to max out the speed of the emulator when the ramfactor is in use. This means that any applications using Ram for cache or extra storage will speed up dramatically.
Mockingboard works perfectly with Ultima 5.
AE Phasor support has been implemented, but it isn't working right just yet. For now, just use Mockingboard mode.
Note: Only use ONE mockingboard. Using more than one will cause the timing issues and sound horrible.
You can use a mockingboard at the same time as a Passport MIDI card. It has a strange syncopated sound to it. it does reveal, however, that the mockingboard playback is pitch-perfect. :-)
Visual UI completely overhauled: Now fullscreen is possible (press F9)
Pressing F8 while in fullscreen will toggle aspect-constrained or stretched displays.
Indicator icons now appear for:
Disk II activity
Mass storage activity
Mouse activation
SSC activity
RamFactor activity
(2012-08-02) This is a HUGE feature release and also fixes a few old bugs. All in all, this is a very stable and heavily-tested release.
Re-architected underlying memory event handler model to include CPU opcode/operand memory accesses. This makes it much easier for anyone to extend the emulation by registering events to be triggered by CPU executes to specific addresses.
New memory heatmap view added to MetaCheat (press END to activate). This lets you visually inspect ram as it is changing.
Fixed graphics glitches in hires mode. This caused annoying artifacts on the boundary between alternating hi/lo bit bytes in hires modes.
Improved RGB Mode 7 support to auto-detect RGB mode. This implements the spec as laid out in the Video 7 patent as well as the Apple RGB manual, with the exception that 160-column mode is not implemented and will be treated as a regular 140-column mode. Reset also causes the RGB mode to flip back to plain 140-column mode again.
Fixed Disk ][ bug that caused hangups in programs like Apple Desktop ][.
Ancient debugger panel (F10) now fixed so that breakpoints happen as the instruction is executed, not afterwards.
(2012-07-26) After getting burned by Ultima I way too much, it is time to expand on game cheats:
New MetaCheat module has been added. This lets you search for cheats and watch memory. See "Using MetaCheat" for more details.
2MG disk support now supports volume numbers and proper dos/prodos ordering detection
(2012-06-25) Way too much time has gone by without another official build, so today is build day. No mockingboard support yet, but I can't let this hold up builds anymore:
Prince of Persia cheat module is included, but not active by default. Enable from configuration menu (F4) Here's a demonstration of the cheat feature: http://www.youtube.com/watch?v=nrzwMlaYqM8
Obligatory cheats such as infinite health, start with sword
Crazy insane cheats using mouse such as "click to teleport" or "click to open gates" or "click to kill enemies" also work.
Should work with any version of PoP because I used Mechner's code to write it. (THANKS JORDAN!!!!)
Joystick support for keyboard arrow keys added, also with optional "hog" mode which means the arrow keys are hogged by the joystick and not passed to the emulator as keystrokes. This makes games like Prince of Persia play extremely well!
Fixed bug causing lo-res graphics mode to show on boot instead of text mode.
Prodos-ordered (.po) disks now work for Disk ][ Controller (actually, they also work for mass-storage as well for some reason) Thanks to the KEGS team!
Extensive command line options now added. See "Config" section for details. This enables joystick "0", puts a disk controller in slot 6 and inserts a disk: -joy0.enabled -computer.s6card disk -s6.d1 /some/disk.dsk
20% more efficient and less glitchy audio.
Only partial support for Mockingboard, not complete yet unfortunately (but hopefully one day...)
Passes all ram, rom and hardware diagnostics as if it were a real machine.
(2012-04-29) Prince of Persia cheats now include Mouse cheats, allowing you to teleport with a right-click, kill enemies or open gates (with left-click). I found out that my timing logic was trying too hard to run at the exactly correct speed; When I gave the timer sync code some more slack, JACE uses 20% less CPU and there are less glitches in the audio. (yay!) The Mockingboard code is not working yet, but it is now detected by Ultima V and I can see the music data being pumped into the card -- hopefully not too long before we can hear some funky square waves.
(2012-04-19) Added internals to remap keys more easily. Now joystick emulation can optionally support keyboard (arrow keys). It is also possible to choose if the arrow keys are only for joystick or if the emulated computer will still see arrow keys. Similar keyboard mappings will be rolled out for other features. Prince of Persia cheats now include the ability to start with a sword and stop time. In other news, I ran various diagnostics against JACE and it seems to be passing all the important stuff quite nicely! Diagnostic disks can be found here: ftp://ftp.apple.asimov.net/pub/apple_II/images/disk_utils/diagnostics/
(2012-04-17) Happy 35th Birthday Apple ][! I am still working on mockingboard emulation, but it will happen soon. Also, thanks to Jordan Mechner for releasing the source to Prince of Persia; I have followed up with adding CHEAT SUPPORT. Each game will have its own cheat module once I work out how to scale that part out easily. I'll probably look to how cheats are managed in Nintendo DS homebrew circles for some ideas. But for now, I can make the prince fall like a feather and stop enemies from attacking him, Cheats in some form will be available once I get mockingboard working.
(2012-02-15) No new features (yet) but posted a demo video to youtube showcasing the MIDI support in Ultima V. Check it out!
(2012-02-14) Happy Valentines Day!
Passport MIDI Adapter support added, sound is generated using Java's internal synth engine.
Fixed OpenJDK hangs on start
(2012-02-12) Patched some classpath scanning logic so it behaves better on Mac OSX, this fixes the java.lang.ExceptionInInitializerError on start -- Thanks Mr. Finnigan for the courteous bug report. I also tweaked the HBL scanner logic to better emulate what is supposed to be on the floating bus according to Sather's book.
(2012-02-08) Putting up another build because some annoying crash-related bugs have been squished, with brutal vengeance.
Clicking on Apply or Save in the configuration panel will no longer crash the emulator. You can even swap out the rom with the ][DB rom or change out cards while the emulator is still running.
Floating bus and video timing have been greatly improved! Some fancier video timing tricks are starting to work properly, or at least can be made to work by tweaking the video timing configuration options added in this build.
Le Chat Mauve rendering mode was renamed to Mode 7 RGB as this is the more common name for it.
(2012-02-05) Still testing and fixing bugs, but there are some new features still worth checking out:
Interrupts correctly supported and now DazzleDraw works. GEOS kind of works but is still a little quirky because it wasn't coded "by the book" so to speak.
Mouse is almost 100% now as polling and interrupt-driven approaches both work. The only thing left is relative mouse movement -- that one is kinda tricky because the virtual and physical mice cannot be synchronized like they are when the programs use clamping.
JACE startup screen "helpful messages" option no longer breaks Airheart
it is now possible to configure a virtual prodos volume as a physical folder for READ-ONLY operations. Still a work in progress though.
65C02 bitwise opcodes implemented: BBR, BSR, RMB, SMB
140kb 2MG images are now supported by the Disk ][ Controller. (800kb 2MG images were already supported by the mass storage interface)
Booting with the mass storage device enabled but no drives selected will no longer crashes to the monitor on startup
New sound mixer configuration -- you can pick which sound output device to use
(2012-01-19) I put a new build up on Sourceforge. It has a number of small tweaks and some new features:
Experimental raw sound output (activate/deactivate with F7)
Correct colors in all graphics modes
Fixes to prevent crashes on start (race condition in video initalization)
Tweaks to sound timing and better sound output (Moon Patrol works now!)
Help text on start screen now reports correct key shortcuts
Removed some configuration options that were causing unnecessary grief (Program counter shouldn't be a config variable)
Added better component detection logic, cards can now be swapped in the LIVE emulated machine
Le Chat Mauve support added to video (check configuration for the video device to enable/disable this feature -- see below for example)
Floating bus support (Money Munchers ALMOST looks ok. Way Out's title screen looks interesting..) See rainbow color example below. It's close to the real thing, but some more review and research will be necessary to get it 100% correct.
Lots of other tweaks to fix bugs, timing issues and bizzare crashes
"Le Chat Mauve" example Apple II Desktop with Mouse
Configuration of Ultima 5 Passport MIDI Pacman with debugger visible