MCPcopy Index your code
hub / github.com/badvision/jace

github.com/badvision/jace @3.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 3.0 ↗ · + Follow
2,449 symbols 7,256 edges 191 files 206 documented · 8%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Java Apple Computer Emulator

Jace is a mature cycle-accurate emulation of an Apple //e computer. The full library of software for that series is 100% compatible with this emulator, as well as many popular hardware add-ons such as:

  • Joysticks (emulated by mouse or using real gamepads)
  • Mouse
  • Extended 80 Column card or Ramworks (Apple memory expansion compatible)
  • Ramfactor
  • Floppy drives (up to 14 supported)
  • Hard drives (up to 12 supported) and 800kb disk images
  • Mockingboard/Applied engineering Phasor (up to 6 supported)
  • Passport MIDI Interface
  • Super Serial Card (over TCP/IP emulation)
  • Transwarp / Zip Chip
  • Thunderclock / NoSlot Clock
  • Apple RGB graphics modes

Other features of Jace include:

  • Small IDE for programming Applesoft basic and Assembly (via built-in ACME cross assembler)
  • Cheat features for some popular games like Prince of Persia, Montezuma's Revenge, Wolfenstein and more
  • Metacheat feature allows searching memory for discovering new game cheats/mods

Download:

To Run:

  • The easiest way to run Jace is by downloading a native build from gitub (see releases link above)

Running the standard java version of Jace requires you have installed Java 17 or later. * If you are building from source you can use any of the following: - mvn javafx:run - mvn gluonfx:run (Note: gluonfx plugin currently only supports up to Maven 3.8.8)

To Build natively:

In order to build Jace as a native application you need to install the following: - Gluon's fork of GraalVM: https://github.com/gluonhq/graal/releases - Compiler (XCode for Mac, GCC for Linux, Visual Studio for Windows) - Maven 3.8.8 (not a newer version, unfortunately)

The Gluon instructions have more details about where to find and download these components. Once you have them installed you can test the Java version via mvn gluonfx:run and if that is working correctly, then you can use mvn gluonfx:build to create a native binary in the target/gluonfx folder for your local platform. Gluon is only able to build for the OS you are running it on, so building for multiple platforms requires separate windows, mac and linux machines.

The Gluon documentation provides a compatibility matrix for each OS platform and the prerequisites needed to create native applications on each. See here for more details: https://docs.gluonhq.com/#_platforms

All other native dependencies are automatically downloaded as needed by Maven for the various LWJGL libraries.

First time build note:

Because Jace provides an annotation processor for compilation, there is a chicken-and-egg problem when building the first time. Currently, this means the first time you compile, run mvn install twice. You don't have to do this step again as long as Maven is able to find a previously build version of Jace to provide this annotation processor. I tried to set up the profiles in the pom.xml so that it disables the annotation processor the first time you compile to avoid any issues. If running in a CICD environment, keep in mind you will likely always need to run the "mvn install" step twice, but only if your goal is to build the entire application including the annotations (should not be needed for just running unit tests.)

Support JACE:

JACE will always be free, but it does take considerable time to refine and add new features. If you would like to show your support and encourage the author to keep maintaining this emulator, why not throw him some change to buy him a drink? (The emulator was named for the Jack and Cokes consumed during its inception.)

Donate here to support Jace developement:

More information here: https://sites.google.com/site/brendanrobert/projects/java-apple-computer-emulator

Extension points exported contracts — how you extend this code

Reconfigurable (Interface)
@author Brendan Robert (BLuRry) brendan.robert@gmail.com [15 implementers]
src/main/java/jace/config/Reconfigurable.java
MediaConsumer (Interface)
@author brobert [4 implementers]
src/main/java/jace/library/MediaConsumer.java
MediaConsumerParent (Interface)
@author brobert [4 implementers]
src/main/java/jace/library/MediaConsumerParent.java
CommandProcessor (Interface)
(no doc) [8 implementers]
src/main/java/jace/apple2e/MOS65C02.java
IDisk (Interface)
Generic representation of a mass storage disk, either an image or a virtual volume. @author Brendan Robert (BLuRry) bren [4 …
src/main/java/jace/hardware/massStorage/IDisk.java

Core symbols most depended-on inside this repo

push
called by 176
src/main/java/jace/apple2e/MOS65C02.java
getMemory
called by 172
src/main/java/jace/core/Device.java
test
called by 167
src/main/java/jace/ide/Program.java
get
called by 158
src/main/java/jace/core/PagedMemory.java
getName
called by 158
src/main/java/jace/config/DeviceEnum.java
add
called by 126
src/main/java/jace/library/MediaCache.java
log
called by 100
src/main/java/jace/core/CPU.java
get
called by 85
src/main/java/jace/hardware/mockingboard/PSG.java

Shape

Method 1,595
Function 689
Class 120
Enum 34
Interface 11

Languages

Java72%
TypeScript28%

Modules by API surface

src/main/resources/codemirror/lib/codemirror.js374 symbols
src/main/java/jace/apple2e/MOS65C02.java68 symbols
src/main/resources/codemirror/addon/merge/merge.js46 symbols
src/main/java/jace/cheat/MetaCheat.java39 symbols
src/main/resources/codemirror/addon/tern/tern.js36 symbols
src/main/java/jace/hardware/massStorage/DiskNode.java36 symbols
src/main/java/jace/core/RAM.java36 symbols
src/main/java/jace/apple2e/VideoDHGR.java34 symbols
src/main/java/jace/config/Configuration.java33 symbols
src/main/java/jace/apple2e/RAM128k.java31 symbols
src/main/java/jace/JaceUIController.java30 symbols
src/main/java/jace/EmulatorUILogic.java30 symbols

For agents

$ claude mcp add jace \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact