1
0
mirror of https://github.com/sethm/symon.git synced 2024-07-07 08:28:58 +00:00
A 6502 System Simulator
Go to file
Seth Morabito 2ebdd254b3 Work In Progress: CPU behavior, UI changes
This is something of a "Work in Progress" checkpoint of several features
that are all half baked:

1. Allow loading of 16KB ROM files at address $C000 at run-time, not
   just at startup. See the "Load ROM..." File menu item.

2. Introduces the notion of "CPU Behaviors", so the core 6502 CPU
   implementation can match the behavior of either an early NMOS 6502, late
   NMOS 6502, or CMOS 65C02. Very little of this is actually implemented so
   far.

3. Adds a completely bogus implementation of the 6522 VIA (it
   does absolutely nothing right now).

4. Changes the address of the ACIA in the simulated system to match a
   real hardware implementation I put together.
2012-11-25 22:49:21 -08:00
samples Work In Progress: CPU behavior, UI changes 2012-11-25 22:49:21 -08:00
src Work In Progress: CPU behavior, UI changes 2012-11-25 22:49:21 -08:00
.gitignore First work toward moving to a Swing UI for the simulator. 2012-04-22 20:49:18 -07:00
COPYING CPU bug fixes and Simulator enhancements. 2012-10-21 20:05:05 -07:00
pom.xml Work In Progress: CPU behavior, UI changes 2012-11-25 22:49:21 -08:00
README.md Work In Progress: CPU behavior, UI changes 2012-11-25 22:49:21 -08:00

SYMON - A 6502 System Simulator

NOTE: THIS IS BETA QUALITY SOFTWARE UNDER ACTIVE DEVELOPMENT. Feedback is welcome!

Version: 0.6 Last Updated: 5 November, 2012

Copyright (c) 2008-2012 Seth J. Morabito <web@loomcom.com>

See the file COPYING for license.

1.0 About

Symon is a general purpose simulator for systems based on the NMOS Mostek 6502 microprocessor and compatibles. Symon is implemented in Java. Its core goals are accuracy, ease of development, clear documentation, and extensive test suites for validating correctness.

The initial goal is to simulate a system with an NMOS 6502 or CMOS 65C02 central processor; one or more 6522 VIAs; and one or more 6551 ACIAs. More functionality may be considered as time goes on.

2.0 Requirements

  • Java 1.5 or higher
  • Maven 2.0.x or higher (for building from source)
  • JUnit 4 or higher (for testing)

3.0 Usage

3.1 Building

To build Symon with Apache Maven, just type:

$ mvn package

Maven will build Symon, run unit tests, and produce a jar file in the 'target' directory containing the compiled simulator.

Symon is meant to be invoked directly from the jar file. To run with Java 1.5 or greater, just type:

$ java -jar symon-0.6-jar-with-dependencies.jar

When Symon is running, you should be presented with a simple graphical interface.

3.2 Loading A Program

Programs in the form of raw binary object files can be loaded directly into memory with the "Load" button.

Right now, all programs are loaded starting at addres $0300. After loading, the simulated CPU's reset vector is loaded with the values $00, $03, and the CPU is reset.

There are two very simple sample program in the "samples" directory, for testing.

  • 'echo.prg' will echo back anything typed at the console.

  • 'hello.prg' will continuously print "Hello, 6502 World!" to the console.

The sample directory also contains a ROM image of Lee Davison's Ehanced 6502 BASIC. For instructions on loading the rom, please see the README file in that directory.

3.3 ROM files

Any 12KB file named 'rom.bin' that exists in the same directory where Symon is launched will be loaded at address $d000. If the file is larger than 12KB, loading will fail. This functionality will be improved in a future release!

3.4 Running

After loading a program or ROM image, clicking "Run" will start the simulator running at address $0300.

4.0 To Do

  • Better debugging tools from the UI, including memory inspection, disassembly, breakpoints, and execution tracing.

  • Better ROM loading (and re-loading)

  • More accurate timing.

  • Interrupt handling!

  • UI needs a ton more polish.

  • More extensive testing.

  • Clean up JavaDoc.

  • Busses are defined by start address and length. Devices are defined by start address and end address. They should both use start/end address.

  • Implement CMOS 65C02 instructions and NMOS / CMOS mode flag.

  • Allow a flag to disable breaking to monitor on BRK.

  • Allow displaying ACIA status and dumping ACIA buffers, for debugging.

5.0 Licensing

Symon is free software. It is distributed under the MIT License. Please see the file 'COPYING' for full details of the license.