Commit Graph
33 Commits
Author SHA1 Message Date
Seth Morabito 795ccfde5d CPU bug fixes and Simulator enhancements.
Bug Fixes:

- Fixed several bugs in the CPU that caused processor status flags to
  be set incorrectly.  Instructions affected were: STA, STX, STY, CMP,
  CPX, CPY, BIT.

- Made some internal-use-only methods on the CPU class private.

- Fixed incorrect disassembly of (Indirect,X) and (Indirect),Y
  instructions. Although this didn't affect behavior, it certainly
  caused me some confusion in debugging.

- Added missing "BCS" instruction to instruction table.

Enhancements:

- Now includes a full version of Lee Davison's Enhanced 6502 BASIC
  bundled as source code and a ROM image. Get that REAL COMPUTER
  EXPERIENCE!(tm)

- If a file named "rom.bin" exists in the same directory where the
  simulator is executed, it will be loaded at addresses $d000-$ffff.

- Gave the CPU an idle loop to make simulated timing a little more
  realistic (but this is still an area needing major improvement)

- Changed the CPU's toString() method to give better debugging output.

- Added a small typeahead buffer to the Console.

- Better exception messaging.

Misc:

- Bumped version to 0.5, updated README.
2012-10-21 20:05:05 -07:00
Seth Morabito c1caf8c6b4 Timing and UI enhancements.
This change introduces simulated baud rates in the ACIA. Baud rate is controlled just as in the real 6551, by writing to the ACIA's control register. Baud rates between 50 and 19,200 baud are selectable. A baud rate of 0 has special meaning, and turns off all simulated baud rate delays (on a real 6551, this means to use an external clock instead of the internal baud rate generator)

A busy-wait loop between steps in the simulator control program has also been added. This uses the high-resolution 'System.nanoTime()' call to wait a specific number of nanoseconds before continuing. Symon now waits at least 1uS between clock cycles, trying to approach a real 1MHz 6502 in performance. It is far from perfect, but it's better than it was.

 Also refactored the status panel to use a BoxLayout, and DRY-up some of the code.
2012-10-14 17:56:19 -07:00
Seth Morabito c214cc9b43 Fixes and enhancements.
- Added ability to change inner border width of console window.
- Fixed a nasty bug that prevented key press handling.
- Reset now clears the accumulator and index registers.
2012-10-14 00:25:03 -07:00
Seth Morabito e012d97bb3 Added clarifying curly braces. 2012-10-12 14:34:18 -07:00
Seth Morabito ed36690e9e Checkpoint of my Swing UI refactoring. Usable for output-only programs, but only barely. 2012-05-28 22:18:35 -07:00
Seth Morabito a1d07bf223 First work toward moving to a Swing UI for the simulator. 2012-04-22 20:49:18 -07:00
Seth J. Morabito 00ab8cd9ff Simulator is just about ready for real-world testing now. Added a simulated
MOS6551 ACIA at address $C000 which does buffered input and output via the
console. Updated the README with a bit more documentation, and bumped the
version number to 0.1 because I'm impatient.
2010-01-20 18:19:39 -08:00
Seth Morabito e157f4a972 More cleanup of the monitor. Added binary file load command. 2010-01-16 21:17:37 -08:00
Seth Morabito 5c7a98df86 Playing around with the command parser and the Simulator class. Safe to ignore. 2010-01-16 08:56:34 +00:00
Seth Morabito f174f0312f * Correct implementation of Indirect Indexed and Indexed Indirect addressing modes.
* Unit tests for Indirect Indexed and Indexed Indirect.
* Updated copyright dates.
* Started moving to JUnit 4.
2010-01-15 08:20:03 +00:00
Seth Morabito d858a50f1b - Updated Cobertura Maven plugin to version 2.3 (threadsafe)
- Finished refactor of instruction argument address decoding.
  Much DRYer now (but could still be DRYer yet).
2010-01-10 02:28:55 -08:00
Seth J. Morabito ac88786df7 - Continued refactoring of address decoding.
- Device read and write may now throw MemoryAccessException, and appropriate
  throws clauses have been added throughout the code.
2010-01-09 16:53:04 -08:00
Seth Morabito a01090a16e Part-way through the Great Refactoring of Instruction Decoding(tm) 2010-01-09 19:51:56 +00:00
Seth Morabito ed943687bf Implemented Relative mode (branch) instructions and unit tests. Fixed
a bug in the instruction size table.
2009-01-07 18:26:11 -08:00
Seth Morabito f21a0d76e9 Implemented Absolute,Y addressing mode and unit tests. 2009-01-07 16:50:36 -08:00
Seth Morabito dccf73a6b7 Implemented instructions using the Absolute,X addressing mode. There's
light at the end of the tunnel now!
2008-12-29 21:47:19 -08:00
Seth Morabito 107aca7777 Implemented Zero Page,X, Zero Page,Y, and Indirect addressing mode instructions, along with unit tests. 2008-12-29 20:46:48 -08:00
Seth Morabito 4b28ab4808 Implemented Absolute addressing mode instructions. All unit tests pass. 2008-12-28 23:11:16 -08:00
Seth J. Morabito 24458da79e Implemented Accumulator mode instructions. Grouped all unimplemented (65C02 and 65816 only) instructions together in a single fall-through area of the instruction decoding switch statement. Added an unimpelmented instruction trap member variable. 2008-12-28 17:55:02 -08:00
Seth J. Morabito 8bcd8a4a75 Whitespace and indentation canonicalization. That's what I get for using two editors. 2008-12-27 21:09:47 -08:00
Seth J. Morabito d54ad18b17 All zero page instructions implemented. Tests passing. 2008-12-27 20:59:10 -08:00
Seth J. Morabito ecde55c6b8 Started on Zero Page opcodes and tests. 2008-12-27 13:01:07 -08:00
Seth J. Morabito 7766e76362 BCD is finally working. I thought that would never happen.
All Immediate Mode and Implied Mode opcodes have been implemented.  Next up, zero page!
2008-12-27 01:43:07 -08:00
Seth J. Morabito 06ed74e89c Fixed the BRK instruction. Added SBC and ADC in Binary Coded Decimal
mode.  More unit tests.
2008-12-26 02:13:11 -08:00
Seth J. Morabito b46c4e1bec Finished implementing all implied mode instructions, with tests. 2008-12-23 16:36:09 -08:00
Seth J. Morabito f012ba7775 More implied mode instructions implemented, with tests. 2008-12-23 16:06:09 -08:00
Seth J. Morabito 473b47e832 At long last, implemented BRK. Lots more unit tests for stack processing, as well. 2008-12-23 02:21:27 -08:00
Seth J. Morabito 46a5943736 Implemented set/clear flag instructions. More tests, but SBC is still BROKEN. 2008-12-20 02:00:45 -08:00
Seth J. Morabito 088b0823e1 More unit tests. SBC partially working, but I need to figure out what's going wrong. 2008-12-15 02:26:13 -08:00
Seth J. Morabito 1bd59b048b Some API changes, lots of test changes. 2008-12-14 23:43:04 -08:00
Seth J. Morabito 6443cacdb9 Implemented ADC 2008-12-14 01:54:53 -08:00
sethm 1c6c5fdaeb Implemented boolean immediate mode instructions. 2008-12-14 01:09:23 -08:00
Seth Morabito 3f74489757 Renamed project to "Symon". 2008-12-13 14:59:22 -08:00