mirror of
https://github.com/sethm/symon.git
synced 2024-11-06 06:06:24 +00:00
da8250778e
The simulator now passes Klaus Dormann's 6502 Functional Test suite for the first time. Bug Fixes: - PHP was not correctly setting the Break bit on the stack copy of the processor status, so subsequent PLA's would not set the Break status flag. - The CPU had swapped NMI and IRQ reset vectors, so RTI was failing. - BRK was pushing PC + 2 onto the stack, instead of PC + 1 - (Zero Page,X) addressing mode did not correctly wrap on zero page boundaries. - The instruction table used for disassembly had addressing modes of LDA $B9 and $BD reversed. This did not affect behavior, only disassembly of these instructions. Other: - Updated copyright date for 2013. - Started migrating old JUnit 3 style tests to JUnit 4 annotations.
184 lines
5.6 KiB
Markdown
184 lines
5.6 KiB
Markdown
SYMON - A 6502 System Simulator
|
|
===============================
|
|
|
|
**NOTE: THIS IS BETA QUALITY SOFTWARE UNDER ACTIVE DEVELOPMENT. Feedback is
|
|
welcome!**
|
|
|
|
**Version:** 0.8.2
|
|
|
|
**Last Updated:** 01 January, 2013
|
|
|
|
Copyright (c) 2008-2013 Seth J. Morabito <web@loomcom.com>
|
|
|
|
See the file COPYING for license.
|
|
|
|
|
|
![Symon Simulator in Action] (https://github.com/sethm/symon/raw/master/screenshots/full.jpg)
|
|
|
|
## 1.0 About
|
|
|
|
Symon is a general purpose simulator for systems based on the MOS
|
|
Technologies 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.
|
|
|
|
Symon simulates a complete system with a 1 MHz NMOS 6502, 32KB of RAM,
|
|
16KB of ROM, a 6551 ACIA, and a 6522 VIA.
|
|
|
|
Symon has extensive unit tests to verify correctness, and fully passes
|
|
Klaus Dormann's 6502 Functional Test Suite as of version 0.8.2
|
|
(See [this thread on the 6502.org Forums] (http://forum.6502.org/viewtopic.php?f=2&t=2241)
|
|
for more information about this functional test suite).
|
|
|
|
## 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 Features
|
|
|
|
### 3.1 Memory Map
|
|
|
|
- `$0000`--`$7FFF`: 32KB RAM
|
|
- `$8000`--`$800F`: 6522 VIA
|
|
- `$8800`--`$8803`: 6551 ACIA (Serial Console)
|
|
- `$C000`--`$FFFF`: 16KB ROM
|
|
|
|
### 3.2 Serial Console and CPU Status
|
|
|
|
![Serial Console] (https://github.com/sethm/symon/raw/master/screenshots/console.png)
|
|
|
|
The main window of the simulator acts as the primary Input/Output
|
|
system through a virtual serial terminal. The terminal is attached to
|
|
a simulated MOS 6551 ACIA, including a programmable baud rate
|
|
generator that tries to approximate the correct "feel" of the
|
|
programmed baud rate. (The sample Enhanced BASIC ROM image is
|
|
programmed for 9600 baud)
|
|
|
|
It also provides CPU status. Contents of the accumulator, index
|
|
registers, processor status flags, disassembly of the instruction
|
|
register, and stack pointer are all displayed.
|
|
|
|
![Font Selection] (https://github.com/sethm/symon/raw/master/screenshots/font_selection.png)
|
|
|
|
The console supports font sizes from 10 to 20 points.
|
|
|
|
### 3.3 16 KB ROM Loading
|
|
|
|
![ROM Loading] (https://github.com/sethm/symon/raw/master/screenshots/load_rom.png)
|
|
|
|
Symon can load any 16 KB (16384 bytes) ROM image from the "File"
|
|
menu. The selected ROM will be placed in memory from locations `$C000`
|
|
to `$FFFF`
|
|
|
|
### 3.4 Memory Window
|
|
|
|
![Memory Window] (https://github.com/sethm/symon/raw/master/screenshots/memory_window.png)
|
|
|
|
Memory contents can be viewed (and edited) one page at a time through the Memory Window.
|
|
|
|
### 3.5 Trace Log
|
|
|
|
![Trace Log] (https://github.com/sethm/symon/raw/master/screenshots/trace_log.png)
|
|
|
|
The last 20,000 execution steps are disassembled and logged to the Trace Log Window.
|
|
|
|
## 4.0 Usage
|
|
|
|
### 4.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.8.1.jar
|
|
|
|
When Symon is running, you should be presented with a simple graphical
|
|
interface.
|
|
|
|
### 4.2 ROM images
|
|
|
|
The simulator requires a 16KB ROM image loaded at address `$C000` to `$FFFF` to
|
|
work properly. Without a ROM in memory, the simulator will not be able to
|
|
reset, since the reset vector for the 6502 is located in this address space.
|
|
|
|
By default, any 16KB file named `rom.bin` that exists in the same directory
|
|
where Symon is launched will be loaded as a ROM image. ROM images can also
|
|
be swapped out at run-time with the "Load ROM Image..." in the File menu.
|
|
|
|
The "samples" directory contains a ROM image named 'ehbasic.rom', containing
|
|
Lee Davison's Enhanced 6502 BASIC. This serves as a good starting point for
|
|
exploration.
|
|
|
|
### 4.3 Loading A Program
|
|
|
|
In addition to ROM images, programs in the form of raw binary object files can
|
|
be loaded directly into memory from "Load Program..." in the File menu.
|
|
|
|
Programs are loaded starting at addres $0300. After loading the program, 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.
|
|
|
|
### 4.4 Running
|
|
|
|
After loading a program or ROM image, clicking "Run" will start the simulator
|
|
running.
|
|
|
|
## 5.0 Revision History
|
|
|
|
- **0.8.2:** 01 January, 2013 - Fully passes Klaus Dormann's 6502 Functional Test suite!
|
|
- **0.8.1:** 30 December, 2012
|
|
- **0.8.0:** 29 December, 2012
|
|
- **0.7.0:** 9 December, 2012
|
|
- **0.6:** 5 November, 2012
|
|
- **0.5:** 21 October, 2012 - Able to run Enhanced BASIC for the first time.
|
|
- **0.3:** 14 October, 2012
|
|
- **0.2:** 22 April, 2012
|
|
- **0.1:** 20 January, 2010
|
|
|
|
## 6.0 To Do
|
|
|
|
- Feedback (in the form of dialogs, status bar, etc).
|
|
|
|
- Better debugging tools from the UI, including breakpoints
|
|
and disassebly.
|
|
|
|
- More accurate timing.
|
|
|
|
- Smarter 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 displaying ACIA status and dumping ACIA buffers, for
|
|
debugging.
|
|
|
|
|
|
## 7.0 Licensing
|
|
|
|
Symon is free software. It is distributed under the MIT License.
|
|
Please see the file 'COPYING' for full details of the license.
|