MC6809 CPU emulator written in Python
MC6809 is a Open source (GPL v3 or later) emulator for the legendary 6809 CPU, used old homecomputer Dragon 32/64 and Tandy TRS-80 Color Computer (CoCo) built in the 1980s...
Tested with Python 3.8, 3.9, 3.10 and PyPy3
A example usage can be find in: MC6809/example6809.py
Getting started:
~$ git clone https://github.com/6809/MC6809.git
~$ cd MC6809
~/MC6809 $ ./cli.py --help
The output of ./cli.py --help
looks like:
Usage: ./cli.py [OPTIONS] COMMAND [ARGS]...
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────╮
│ benchmark Run a MC6809 emulation benchmark │
│ example Just run the MC6809/example6809.py example (CRC32 calculation) │
│ profile Profile the MC6809 emulation benchmark │
│ update-readme-history Update project history base on git commits/tags in README.md │
│ version Print version and exit │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
There is a simple benchmark. Run e.g.:
~/MC6809$ ./cli.py benchmark --help
The output of ./cli.py benchmark --help
looks like:
Usage: ./cli.py benchmark [OPTIONS]
Run a MC6809 emulation benchmark
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ --loops INTEGER How many benchmark loops should be run? [default: 6] │
│ --multiply INTEGER est data multiplier [default: 15] │
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
profile
You can run the Python profiler against the benchmark, e.g.:
~/MC6809$ ./cli.py profile --help
The output of ./cli.py profile --help
looks like:
Usage: ./cli.py profile [OPTIONS]
Profile the MC6809 emulation benchmark
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ --loops INTEGER How many benchmark loops should be run? [default: 6] │
│ --multiply INTEGER est data multiplier [default: 15] │
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
development
For development exists dev-cli
, e.g.:
~/MC6809$ ./dev-cli.py --help
The output of ./dev-cli.py --help
looks like:
Usage: ./dev-cli.py [OPTIONS] COMMAND [ARGS]...
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────╮
│ check-code-style Check code style by calling darker + flake8 │
│ coverage Run tests and show coverage report. │
│ fix-code-style Fix code style of all cli_base source code files via darker │
│ install Run pip-sync and install 'cli_base' via pip as editable. │
│ mypy Run Mypy (configured in pyproject.toml) │
│ pip-audit Run pip-audit check against current requirements files │
│ publish Build and upload this project to PyPi │
│ test Run unittests │
│ tox Run tox │
│ update Update "requirements*.txt" dependencies files │
│ update-test-snapshot-files Update all test snapshot files (by remove and recreate all snapshot │
│ files) │
│ version Print version and exit │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
Run tests, e.g.:
~/DragonPy$ ./dev-cli.py coverage
# or just:
~/DragonPy$ ./dev-cli.py test
# or with different Python versions:
~/DragonPy$ ./dev-cli.py tox
TODO
- Update 'cpu6809_html_debug.py'
- Use bottle for http control server part
- unimplemented OPs:
- RESET
- SWI / SWI2 / SWI3
- SYNC
Make new release
We use cli-base-utilities to generate the history in this README.
To make a new release, do this:
- Increase your project version number
- Run tests to update the README
- commit the changes
- Create release
History
(Some of the points are related to DragonPy Emulator)
- v0.7.3
- 2024-09-24 - Bugfix "publish" command
- 2024-09-24 - Add "example" command to app CLI
- 2024-09-24 - + pre-commit hook
- 2024-09-24 - Split CLI by manageprojects updates
- 2024-09-24 - Update requirements
- 2023-11-29 - Update requirements + fix code style + manageprojects updates
- v0.7.2
- 2023-11-03 - Auto generate README history
- 2023-11-03 - Fix code style
- 2023-11-03 - Apply manageprojects updates + Update requirements
- 2023-11-03 - Use verbose_check_call from cli_base
- 2023-11-02 - Bump pip from 23.2.1 to 23.3
- v0.7.1
- 2023-08-05 - fix publish call
- 2023-08-05 - Split CLI by apply manageprojects update
- 2023-08-04 - Update requirements
- v0.7.0
- 2023-03-07 - Add "benchmark" and "profile" to CLI and remove dev-shell add DocTests
- 2023-03-07 - Apply managedprojects update: Add DocTests via bx_py_utils helper
- 2023-03-06 - Update README.md
- 2023-03-06 - Migrate to https://github.com/jedie/cookiecutter_templates
- 2022-09-04 - deactivate pypy3
- 2022-09-04 - fix tests under windows
- 2022-09-04 - fix code style
- 2022-09-04 - replace Makefile with "dev-shell"
- 2022-09-04 - update Makefile
- 2022-09-04 - update README
- 2022-09-04 - small code update
- 2022-09-04 - remove travis config
- 2022-09-04 - flynt updates
- 2022-09-04 - fix flynt call
- 2022-09-04 - replace Creole README with markdown
- 2022-09-04 - fix pytest config
- 2022-09-04 - update github CI
- 2022-09-04 - add "make update"
- 2022-09-04 - fix editorconfig
Expand older history entries ...
* [v0.6.0](https://github.com/6809/MC6809/compare/v0.5.0...v0.6.0)
* 2020-02-10 - update CLI Tests
* 2020-02-10 - git ignore: +/publish.log
* 2020-02-10 - update CLI and README
* 2020-02-10 - test release v0.6.0.dev0
* 2020-02-10 - swap autopep8 and isort
* 2020-02-10 - update Travis CI config
* 2020-02-10 - fix code style
* 2020-02-10 - update .join() statements
* 2020-02-10 - setup poetry-publish
* 2020-02-10 - apply pyupgrade
* 2020-02-10 - apply code formatter
* 2020-02-10 - f-strings convert
* 2020-02-10 - WIP
* [v0.5.0](https://github.com/6809/MC6809/compare/v0.4.6...v0.5.0)
* 2015-10-19 - update release info/Version
* 2015-09-10 - try to install python on osx
* 2015-09-03 - move Condition Code Register (CC) into CPU via mixin class
* 2015-09-03 - rename mixin classes
* 2015-09-03 - code cleanup
* 2015-09-03 - rename base class
* 2015-09-03 - Optimize: Don't return value. Because not needed in every case.
* 2015-09-03 - do it directly
* 2015-09-03 - remove .get() calls
* 2015-09-03 - update README and version number
* 2015-09-01 - OSX builds do not yet support Python :(
* 2015-09-01 - refactor/move self._convert_differend_width()
* 2015-09-01 - Bugfix _convert_differend_width()
* 2015-08-31 - display report
* 2015-08-31 - Append coverage data to .coverage
* 2015-08-31 - WIP
* 2015-08-31 - try to run DragonPy tests, too.
* 2015-08-31 - obsolete since nose use
* 2015-08-26 - WIP: speedlimit <-> normal
* 2015-08-25 - Update README.creole
* 2015-08-24 - WIP: Split CPU code
* [v0.4.6](https://github.com/6809/MC6809/compare/v0.4.5...v0.4.6)
* 2015-08-24 - Update README. Release as v0.4.6
* 2015-08-24 - change speed limit stuff.
* [v0.4.5](https://github.com/6809/MC6809/compare/v0.4.4...v0.4.5)
* 2015-08-21 - release v0.4.5
* 2015-08-21 - update history
* 2015-08-21 - add cli information for run via subprocess in DragonPy
* 2015-08-21 - use click CliRunner().invoke() for cli test
* 2015-08-21 - add info text to cli
* 2015-08-21 - deactivate 'cpu6809_html_debug.py' - TODO: update it!
* 2015-08-21 - cleanup
* 2015-08-21 - Update README.creole
* 2015-08-20 - define the entrypoint name
* 2015-08-10 - update PyPi/Hithub links
* [v0.4.4](https://github.com/6809/MC6809/compare/v0.4.3...v0.4.4)
* 2015-08-10 - bugfix example to run with py2 and py3
* 2015-08-10 - remove run tests from cli
* 2015-08-10 - remove obsolete code (has run unittests two times)
* 2015-08-10 - test the example, too
* [v0.4.3](https://github.com/6809/MC6809/compare/v0.4.2...v0.4.3)
* 2015-08-10 - update from:
* 2015-08-10 - just see that nose not fail: TODO update!
* 2015-08-10 - bugfix ;)
* 2015-08-10 - obsolete
* 2015-08-10 - use click
* 2015-08-10 - cleanup
* 2015-08-10 - Exclude from nose
* 2015-08-10 - start using nose
* 2015-07-02 - add flattr link
* [v0.4.2](https://github.com/6809/MC6809/compare/v0.4.1...v0.4.2)
* 2015-05-27 - relase as v0.4.2
* 2015-05-27 - Add MC6809/example6809.py
* 2015-05-27 - add CPU instance in CPU to memory
* [v0.4.1](https://github.com/6809/MC6809/compare/v0.4.0...v0.4.1)
* 2015-05-26 - Tested with Python 2.7, 3.4 and PyPy
* [v0.4.0](https://github.com/6809/MC6809/compare/80f221b...v0.4.0)
* 2015-05-26 - remove obsolete file
* 2015-05-26 - cleanup
* 2015-05-26 - +click +MC6809 cli entry point
* 2015-05-26 - Add unittest for cli and add "--multiply" to benchmark
* 2015-05-26 - fixup! add --source=MC6809
* 2015-05-26 - add --source=MC6809
* 2015-05-26 - remove dragonlib
* 2015-05-26 - update coveralls token
* 2015-05-26 - WIP: cleanup
* 2015-05-26 - unittest run code
* 2015-05-26 - add cli for benchmark
* 2015-05-26 - add TODO
* 2015-05-26 - bugfix imports
* 2015-05-26 - remove obsolete files
* 2015-05-26 - update setup.py
* 2015-05-26 - fix links
* 2015-05-26 - WIP: replace "DragonPy" -> "MC6809"
* 2015-05-26 - rename
* 2015-05-26 - cut README
* 2015-05-20 - remove PyDev configs
* 2015-05-20 - update README
* 2015-05-20 - Update README.creole
* 2015-05-20 - update travis-ci.org config
* 2015-05-20 - move/rename cli code adn remove obsolete code
* 2015-05-20 - Bugfix CLI and tests for it
* 2015-01-28 - start to reimplement the CLI with "Click"
* 2014-12-15 - use pygments syntax highlighter in BASIC editor
* 2014-12-06 - Update .travis.yml
* 2014-11-13 - 'dragonlib' as dependency
* 2014-11-13 - outsource dragonlib:
* 2014-11-13 - move LOG_LEVELS
* 2014-10-08 - Bugfix for ReSt
* 2014-10-08 - Add a setup.cfg
* 2014-09-30 - add more info
* 2014-09-30 - Bugfix
* 2014-09-30 - WIP: BASIC editor: reformat code
* 2014-09-30 - Bugfix renum tool + renum INVADER.bas
* 2014-09-30 - PY3 bugfix
* 2014-09-30 - Bugfix if line number > $ff
* 2014-09-30 - Display also datum
* 2014-09-29 - display more info on overflow error
* 2014-09-29 - move BASIC programs
* 2014-09-25 - Reimplement SBC09 ;)
* 2014-09-25 - Split Op data - Squashed commit of the following:
* 2014-09-24 - Disable some log output and update pypy win batches
* 2014-09-24 - display_queue -> display_callback
* 2014-09-22 - code cleanup and disable some log output
* 2014-09-22 - move ROM load code
* 2014-09-22 - code cleanup
* 2014-09-22 - file rename and remove obsolete files
* 2014-09-22 - move CPU utils
* 2014-09-22 - move MC6809data
* 2014-09-22 - ignore .idea/*
* 2014-09-22 - update to new API
* 2014-09-22 - Better default log formatter
* 2014-09-18 - Bugfix unittest
* 2014-09-18 - update test_run()
* 2014-09-18 - display more info if e.g. the ROM loaded into a wrong area
* 2014-09-18 - reimplement Multicomp 6809 !
* 2014-09-18 - change logging setup
* 2014-09-14 - Update README, see also:
* 2014-09-14 - Release v0.2.0
* 2014-09-14 - bugfix runtime
* 2014-09-13 - display python version info in status line
* 2014-09-13 - bugfix for Py2
* 2014-09-13 - add python major version number to pickle files
* 2014-09-13 - Update unittests in dragonlib, too.
* 2014-09-13 - reimplement: Run CPU not faster than given speedlimit
* 2014-09-13 - update unitests
* 2014-09-13 - bugfix six.moves.xrange
* 2014-09-13 - remove old multiprocessing files
* 2014-09-13 - use xrange from six.py
* 2014-09-12 - replace own lib2and3 with six
* 2014-09-12 - WIP: refactor logging usage
* 2014-09-12 - WIP: cpu run
* 2014-09-11 - doesnt needed
* 2014-09-11 - Start, refactoring memory:
* 2014-09-09 - add more comments into PIA
* 2014-09-08 - add "target CPU burst loops" to GUI config
* 2014-09-07 - WIP: Implement IRQ
* 2014-09-08 - merge code
* 2014-09-08 - implement a callback mechanism which trigger the CPU cycles
* 2014-09-11 - fix ReSt generation?
* 2014-09-11 - use array.array("B", ...) for RAM/ROM memory
* 2014-09-11 - Add callback/middleware tests to write byte, too.
* 2014-09-11 - better tracebacks by using reraise
* 2014-09-07 - A better speedlimit solution. TODO: Codecleanup
* 2014-09-07 - WIP: Better speed limit
* 2014-09-07 - add a not really good working speedlimit
* 2014-09-05 - WIP: Release as v0.1.0
* 2014-09-05 - include free v09.rom and vectrex ROM
* 2014-09-05 - include scripts
* 2014-09-05 - skip unittest if ROM files missing
* 2014-09-05 - ignore /dist/
* 2014-09-05 - include some more files
* 2014-09-05 - Use python-creole to generate ReSt README on the fly, see:
* 2014-09-05 - implemend "hard reset"
* 2014-09-05 - Just add the alternative commented
* 2014-09-05 - Simple loop optimizing
* 2014-09-05 - little more information on error
* 2014-09-04 - Work-a-round for https://bitbucket.org/pypy/pypy/issue/1858/pypy3-localeformat-d-val-1
* 2014-09-04 - remove from __future__ import unicode_literals
* 2014-09-04 - Adjust CPU burst count dynamically.
* 2014-09-04 - update unittests
* 2014-09-04 - remove threading stuff and use only tkinter after
* 2014-09-04 - change grammar version in PyDev
* 2014-09-04 - bugfix string.letters vs. string.ascii_letters
* 2014-09-03 - bugfix cli unittest
* 2014-09-03 - change print to log output
* 2014-09-03 - explizit close
* 2014-09-03 - log.warn() -> log.warning()
* 2014-09-03 - Add a simple benchmark
* 2014-09-03 - use '{:n}'.format(val) for formating cycles/sec
* 2014-09-03 - add .pyo
* 2014-09-03 - bugfix if run with -OO
* 2014-09-03 - print all catched Ops vial decorator
* 2014-09-03 - bugfix running CoCo from CLI
* 2014-09-03 - use: python -m unittest discover
* 2014-09-03 - updates: supported Python versions
* 2014-09-03 - chnages to support python 2 and 3 with the same code
* 2014-09-03 - changes to run with python2 and __future__ imports
* 2014-09-03 - just run 2to3 script
* 2014-08-31 - WIP: Just add dummy code for Vectrex
* 2014-08-28 - Highlight line numbers and more the just one
* 2014-08-28 - First, simple code highlighting
* 2014-08-28 - Don't consume spaces between line number and code
* 2014-08-28 - made BASIC Editor runable via CLI
* 2014-08-27 - reimplement the CLI, today only for Dragon32/64 and CoCo
* 2014-08-27 - WIP: move startup code
* 2014-08-27 - move machine.py
* 2014-08-27 - typo in README
* 2014-08-27 - add history to README
* 2014-08-27 - Bugfix: CoCo used the same default start address
* 2014-08-26 - split ROM cfg, so that it can be loaded more than one ROM file:
* 2014-08-26 - only code formatting
* 2014-08-26 - raise error if perifery return None
* 2014-08-20 - bugfix example prompt
* 2014-08-20 - add CoCo info to README
* 2014-08-20 - CoCo used a other default program start address than dragon
* 2014-08-20 - WIP: Support CoCo in editor
* 2014-08-20 - do the ' <-> :' and ELSE <-> :ELSE replacement internaly
* 2014-08-20 - Use the new BASIC parser - TODO: Code cleanup!
* 2014-08-20 - convert line number to int
* 2014-08-20 - rename format functions
* 2014-08-20 - add a BASIC parser with unittests
* 2014-08-20 - code formating
* 2014-08-18 - Add TODO unittests
* 2014-08-18 - Better debug output
* 2014-08-18 - better log output while load/inject BASIC program
* 2014-08-18 - catch exception in unitest while running CPU
* 2014-08-18 - Bugfix: support ON...GOTO and ON...GOSUB in renumbering
* 2014-08-17 - add another renum unittest +code cleanup
* 2014-08-17 - add "renumber listing" tool in editor
* 2014-08-17 - TODO: Don't replace reversed words into tokens in comments and strings.
* 2014-08-17 - bugfix: 'Cfg' object has no attribute 'memory_word_middlewares'
* 2014-08-16 - Bugfix in inject BASIC program:
* 2014-08-16 - WIP: move dump/load stuff into editor
* 2014-08-15 - WIP: start splitting project: add "dragonlib"
* 2014-08-14 - disable logging for run all unittests
* 2014-08-14 - Add extract BASIC program unittest
* 2014-08-14 - bugfix unittest init
* 2014-08-14 - Bugfix: skip unittests if d32.rom not exists
* 2014-08-14 - Start unittests with Dragon 32 ROM ;)
* 2014-08-13 - transfert BASIC listing from editor into RAM worked!!!
* 2014-08-13 - create a base test case only with some assertments
* 2014-08-13 - move signed routines and...
* 2014-08-12 - WIP: convert BASIC code to tokens
* 2014-08-12 - bugfix display BASIC code:
* 2014-08-11 - WIP: BASIC editor...
* 2014-08-10 - WIP: GUI communication with CPU
* 2014-08-08 - disable PUSH log in CPU
* 2014-08-08 - add %(processName)s %(threadName)s to default log formatter
* 2014-08-07 - calculate cycles/sec in GUI
* 2014-08-07 - WIP: change queue stuff to work also with PyPy
* 2014-08-07 - move some currently not useable files
* 2014-08-07 - Bugfix: accessing cpu.cycles in CPUStatusThread
* 2014-08-07 - add DragonPy schematic in README
* 2014-08-07 - better Queue communication:
* 2014-08-07 - cleanup machine start stuff
* 2014-08-07 - move CPU into seperate thread
* 2014-08-06 - Support CoCo keyboard input!
* 2014-08-06 - bugfix in memory middleware
* 2014-08-06 - read first the high-byte
* 2014-08-06 - Update code around "reset vector":
* 2014-08-06 - use memory.add_write_byte_middleware() and not a "own display RAM"
* 2014-08-06 - move periphery memory hocks directly into memory
* 2014-08-06 - rename memory callbacks to middlewares and now they can manipulate the byte
* 2014-08-05 - WIP: Add CoCo
* 2014-08-05 - Add info about broken CLI
* 2014-08-04 - ./Dragon64_test.py worked!
* 2014-08-04 - ignore *.rom files
* 2014-08-03 - move display_cycle_interval() into CPU
* 2014-08-03 - WIP: Split byte/word in periphery
* 2014-08-02 - add info to Dragon Keyboard
* 2014-08-01 - WIP: Keyboard input seems to work basicly!!!
* 2014-07-31 - add /InputOutput/keyboard.bas
* 2014-07-30 - WIP: Keyboard input to PIA
* 2014-07-29 - use bit utils in CPU, too.
* 2014-07-29 - add utilities around bit manipulations
* 2014-07-28 - use central logger
* 2014-07-27 - Quick work-a-round for travis
* 2014-07-27 - WIP: Dragon Text mode with D64
* 2014-07-25 - Add a Dragon32_test.py
* 2014-07-24 - multiprocessing.JoinableQueue() -> multiprocessing.Queue()
* 2014-07-24 - update console test
* 2014-07-24 - reimplement "--display-cycle"
* 2014-07-24 - work-a-round for double log output
* 2014-07-24 - Change queue.get() stuff
* 2014-07-24 - remove concept files
* 2014-07-23 - remove obsolete text
* 2014-07-23 - use global log
* 2014-07-23 - use multiprocessing.JoinableQueue
* 2014-07-23 - add names
* 2014-07-23 - call cpu.quit()
* 2014-07-23 - WIP: Merge Bus read & write Threads. Use thread.interrupt_main()
* 2014-07-22 - WIP: KeyboardInterrupt
* 2014-07-20 - WIP: sbc09 console
* 2014-07-20 - Bugfix exit all threads/processes
* 2014-07-20 - don't add more then one log handler
* 2014-07-18 - unify "running" stuff
* 2014-07-18 - rename multiprocess files
* 2014-07-18 - code cleanup, use Simple6809Cfg as default, add '--dont_open_webbrowser'
* 2014-07-18 - WIP: Simple6809 is running
* 2014-07-17 - move CPU into components
* 2014-07-17 - WIP: split concept code
* 2014-07-17 - WIP: multiprocessing concept 2
* 2014-07-17 - WIP: new multiprocessing concept
* 2014-07-17 - just rename
* 2014-07-17 - use multiprocessing under linux and subprocess unter windows
* 2014-07-17 - WIP: Use multiprocessing to start CPU
* 2014-07-17 - move CPU http server into a seperate thread.
* 2014-07-17 - Bugfix CPU status
* 2014-07-16 - remove loop stuff and use more threading
* 2014-07-16 - Recalculate the op call burst_count
* 2014-07-16 - That's fixed with pager ;)
* 2014-07-16 - Use pager to get the user input.
* 2014-07-16 - remove unused code
* 2014-07-15 - add a console version of Simple6809 ROM without bus communication
* 2014-07-15 - remove unused code & update README
* 2014-07-15 - add complete DAA unittest
* 2014-07-15 - display output is a good idea ;)
* 2014-07-15 - Add unittest for DAA
* 2014-07-15 - refactor DAA
* 2014-07-15 - Bugfix DAA - TODO: Add unittests for it!
* 2014-07-15 - moved
* 2014-07-14 - Bugfix sbc09 unittest and add more sbc09 tests
* 2014-07-14 - WIP: unittests with sbc09
* 2014-07-14 - WIP: New call instruction implementation
* 2014-07-14 - Bugfix: is needes, e.g.: in sbc09
* 2014-07-14 - remove some test assert statements
* 2014-07-14 - rename some pointer
* 2014-07-14 - travis should only test master and stable
* 2014-07-13 - remove speedup Simple6809 RAM test
* 2014-07-13 - disable many logging lines
* 2014-07-13 - set cc flags more than Xroar on startup
* 2014-07-13 - merge some code in humanize.py
* 2014-07-13 - move trace code:
* 2014-07-13 - remove unused stuff
* 2014-07-13 - remove "--compare_trace" adn update README
* 2014-07-13 - Fix Travis
* 2014-07-13 - boring in unittests ;)
* 2014-07-13 - remo area debug and code cleanup
* 2014-07-13 - test with pypy, too and diable coveralls
* 2014-07-13 - Add some Dragon32 mem info
* 2014-07-13 - Bugfix ASR/LSR: Bit seven is held constant. Catched with BASIC INT()
* 2014-07-13 - Update unittest for TFR/EXG
* 2014-07-13 - Bugfix: TFR and EXG
* 2014-07-13 - add sixxie and tormod
* 2014-07-13 - Bugfix INC
* 2014-07-12 - add log to file
* 2014-07-12 - add comments +typo
* 2014-07-12 - better info on out of range writes
* 2014-07-12 - add doctest
* 2014-07-12 - Bugfix ADC... the last Bug???
* 2014-07-11 - Add a working test for "FPA0_to_D"
* 2014-07-11 - better debugging, add addr info after debug line
* 2014-07-11 - Add some thanks...
* 2014-07-11 - Just for devloper to play a little bit with the BASIC Interpreter.
* 2014-07-11 - cleanup BASIC09 tests
* 2014-07-09 - Add CLI to xroar filter script and add README
* 2014-07-08 - update dev. tool
* 2014-07-08 - merged "Programm Flow Instructions"
* 2014-07-08 - add call number and datetime in HTML debug
* 2014-07-07 - WIP: Test around BASIC floating point routines
* 2014-07-07 - remove debug stuff and add a "debug.html" tracing generator
* 2014-07-07 - update html opcode genrator script and add html file.
* 2014-07-06 - WIP: 6809 data to html export
* 2014-07-06 - disable open webbrower
* 2014-07-06 - Add a memory callback functionality
* 2014-07-04 - update division code
* 2014-07-04 - add test for ROL,ROR in memory
* 2014-07-04 - Bugfix CLI
* 2014-07-03 - Bugfix ASR and add unittests for it.
* 2014-07-03 - just move to group
* 2014-07-03 - .gitignore
* 2014-07-03 - add missing unittests after coverage run
* 2014-07-03 - Test BASIC Interpreter works!
* 2014-07-03 - WIP: Run tests with a alive BASIC Interpreter
* 2014-07-03 - update cfg files
* 2014-07-03 - add "create coverage report" in README
* 2014-07-03 - remove syntax error in obsolete file
* 2014-07-03 - bugfix coverage packagename
* 2014-07-03 - change all package path, after file move
* 2014-07-03 - moved all files into dragonpy package dir
* 2014-07-03 - add packagename
* 2014-07-03 - add coveralls in travis cfg.
* 2014-07-03 - change TODO info in unittets
* 2014-07-03 - add coveralls.io status image in README
* 2014-07-03 - add coveralls cfg
* 2014-07-03 - add unittest info in README
* 2014-07-03 - add setup.py and travis cfg.
* 2014-07-03 - better "first tim called" debug info.
* 2014-07-03 - add unittest for SUBA indexed
* 2014-07-03 - Update division test code
* 2014-07-02 - WIP: ea indexed address modes
* 2014-07-02 - Display CWAI not implemented error
* 2014-07-02 - better error message
* 2014-07-02 - refactor TFR, EXG stuff and add unittests
* 2014-07-02 - add more Indexed tests
* 2014-07-02 - typo
* 2014-07-02 - add second division test code
* 2014-07-02 - add seperate test for address modes
* 2014-07-02 - group ST/LD and add unittests
* 2014-07-02 - remove comment: it's correct
* 2014-07-02 - move all not implemented ops
* 2014-07-01 - bugfix EOR - TODO: Add a test for it.
* 2014-07-01 - test with more interesting areas
* 2014-07-01 - add test for ABX
* 2014-07-01 - refactor ANDCC and ORCC
* 2014-07-01 - add test for ORCC and ANDCC
* 2014-07-01 - update example output
* 2014-07-01 - reorder crc32 tests
* 2014-07-01 - Bugfix for failed test.
* 2014-07-01 - Update crc32 test. Works now!
* 2014-07-01 - disable prints
* 2014-07-01 - moved/grouped some ops
* 2014-07-01 - Bugfix ROR and add unittest for it.
* 2014-07-01 - WIP: add crc32 code
* 2014-06-30 - Add division code test
* 2014-06-30 - WIP: 6809 32/16 divison test
* 2014-06-30 - nicer debug output
* 2014-06-30 - add unittests for PSHU and PULU
* 2014-06-30 - Start to add 6809 unittests with small assembler programs: crc16
* 2014-06-30 - bugfix Push/Pull unittests
* 2014-06-30 - add unittest for BLT and LBLT
* 2014-06-30 - add unittest for SBCA
* 2014-06-30 - move DEC test
* 2014-06-29 - split/merge arithmetic shift tests
* 2014-06-29 - unify: r & 0xff
* 2014-06-29 - split arithmetic op tests
* 2014-06-29 - comment debug output
* 2014-06-29 - add unittest for ADDD and DECA
* 2014-06-28 - Add test for ROL
* 2014-06-28 - cleanup ADD and add unittest
* 2014-06-28 - disallow out of range write into memory
* 2014-06-28 - implement BRN, BVC and BVS
* 2014-06-28 - Bugfix INC and add unittests
* 2014-06-28 - add LSLA unittest
* 2014-06-28 - split branch unittests
* 2014-06-28 - code cleanup and add unittests for CMP
* 2014-06-27 - Use only 1KB RAM for Simple6809, too.
* 2014-06-27 - add hacked script for copy&paste .lst content from e.g.: http://www.asm80.com/
* 2014-06-27 - WIP CPU control server
* 2014-06-27 - add unittest for NEG memory
* 2014-06-27 - Update NEG memory, TODO: add tests for it, too.
* 2014-06-27 - Add complete range unittests for update_HNZVC_8
* 2014-06-27 - bugfix unittest file
* 2014-06-27 - Bugfix NEGA and NEGB and update unitests for them
* 2014-06-27 - update unittest code
* 2014-06-27 - update accu unittests
* 2014-06-26 - add unittest for ORA and ORCC
* 2014-06-26 - Add unittests for BPL and LBPL
* 2014-06-26 - bugfix for /debug/
* 2014-06-26 - Add unittests for LEAU and LDU
* 2014-06-26 - Bugfix TST extended
* 2014-06-26 - Bugfix in TST and add unittest for it
* 2014-06-26 - Bugfix BGE
* 2014-06-25 - add another simple test code
* 2014-06-25 - add come cary flag tests
* 2014-06-25 - Add Zero-Flag tests
* 2014-06-25 - add a test code, use test config
* 2014-06-24 - WIP: turn on DEBUG via POST request
* 2014-06-24 - move tests TODO: Update all
* 2014-06-24 - Better "called the first time:" info line.
* 2014-06-24 - add info about ROMs
* 2014-06-24 - README Update
* 2014-06-23 - change reset debug output
* 2013-10-31 - somthing wrong in dragon cycle/update calls ?!?
* 2013-10-31 - commit current state:
* 2013-10-31 - insert TODOs update README
* 2013-10-31 - refactor:
* 2013-10-30 - merge periphery code
* 2013-10-30 - exit if Pygame is not installed
* 2013-10-30 - implement MUL
* 2013-10-30 - truncate long lines in traceback
* 2013-10-29 - add a simple console, so it's runable without TKinter
* 2013-10-29 - add cfg.BURST_COUNT
* 2013-10-29 - display error info on exit
* 2013-10-29 - update with removed logging output
* 2013-10-29 - disable many logging output
* 2013-10-28 - add a note about current performace
* 2013-10-28 - pygame, numpy is not needed in every config
* 2013-10-27 - convert chars to display, why?
* 2013-10-27 - deactivate "sys exit" on trace difference
* 2013-10-27 - implement SEX
* 2013-10-27 - add update_HNZVC_16()
* 2013-10-27 - update half-carry, though H is normaly "undefined"
* 2013-10-27 - add hacked scb09 trace compare
* 2013-10-27 - Bugfix CMP: update half-carry flag, too.
* 2013-10-27 - add Lennart Benschop 6809 stuff (released under the GPL)
* 2013-10-26 - Implement DAA, EXG and bugfix LSR
* 2013-10-26 - bugfix activate logging later
* 2013-10-26 - Bugfix in data: EXG need postbyte
* 2013-10-26 - add current example
* 2013-10-26 - display key events
* 2013-10-25 - less debug output
* 2013-10-25 - add LSL unittest
* 2013-10-25 - add ANDA unittest
* 2013-10-25 - add a unittest with a routine from origin ROM
* 2013-10-24 - Update some CC handling.
* 2013-10-24 - add CC unittest with DEC and update other tests
* 2013-10-24 - Add CC unittest with INC
* 2013-10-24 - Bugfix SUB and add a working unittest for SUB and CC flags
* 2013-10-24 - first real working CC test with ADDA
* 2013-10-23 - display first call
* 2013-10-23 - Bugfix: set CC flags only if not set before
* 2013-10-23 - don't raise if error was before and better debug messages
* 2013-10-22 - nicer TK window
* 2013-10-22 - some updates in unittest
* 2013-10-22 - better trace compare
* 2013-10-22 - use XRoar CC code
* 2013-10-22 - Update exported 6809 data:
* 2013-10-22 - nicer output + add screenshot
* 2013-10-21 - wrap around value
* 2013-10-21 - add CC tests.
* 2013-10-21 - change debug output
* 2013-10-21 - update unittest
* 2013-10-21 - add --area_debug_cycles
* 2013-10-21 - merge SUB8 and SUB16
* 2013-10-21 - Implement BGE and BLT
* 2013-10-21 - bugfix address modes
* 2013-10-21 - use delimiter=';'
* 2013-10-21 - use csv modul for export
* 2013-10-21 - update state in README
* 2013-10-21 - implement ANDCC
* 2013-10-21 - bugfix get ea+m DIRECT
* 2013-10-21 - TST need mem
* 2013-10-21 - add new csv
* 2013-10-21 - Add undocumented RESET opcode 0x3e
* 2013-10-21 - data updates:
* 2013-10-21 - remove stuff for stack pointer checks
* 2013-10-21 - more debug info from get_ea_indexed()
* 2013-10-21 - remove internal push/pull check:
* 2013-10-21 - updates for new 6809 data
* 2013-10-21 - bugfix TFR, JSR data
* 2013-10-21 - ea is needed if write to memory
* 2013-10-21 - * "needs_ea" is not the same for all ops
* 2013-10-21 - needs_ea for all branch instructions
* 2013-10-21 - add "needs_ea"
* 2013-10-21 - rename "operand" to "register"
* 2013-10-21 - remove "addr mode" register and stack
* 2013-10-21 - manual changes for "reads from memory" info
* 2013-10-21 - move HNZVC info from instruction to op code
* 2013-10-21 - add a note about read_from_memory
* 2013-10-20 - start to use the new data. Not ready, yet.
* 2013-10-20 - change "-" to None
* 2013-10-20 - generate a new op code info file
* 2013-10-20 - merge with existing information
* 2013-10-19 - pretty print the result, too.
* 2013-10-19 - try to collect all data in a new way.
* 2013-10-19 - add missing instructions
* 2013-10-18 - add op info
* 2013-10-17 - TODO: change 6809 data py
* 2013-10-17 - long branches allways MEM_ACCESS_WORD
* 2013-10-17 - more info on push/pull
* 2013-10-17 - implement BGT
* 2013-10-17 - stop on endless loops and merge code
* 2013-10-17 - bugfix in get_indexed_ea()
* 2013-10-17 - bugfix in stack count check
* 2013-10-17 - info if mem info is not active
* 2013-10-17 - * implement ABX, ASR, BLE, EOR, LSR, NOP, ROR, SBC, SUB16
* 2013-10-16 - add not working CC half carry test
* 2013-10-16 - display char in memory write
* 2013-10-16 - bugfix missing attribute
* 2013-10-16 - add check
* 2013-10-16 - bugfix ORCC and ROL
* 2013-10-16 - implement OR
* 2013-10-16 - bugfix for EOF if XRoar log file
* 2013-10-16 - implement ADDD
* 2013-10-16 - add a internal stack push/pull counter with check
* 2013-10-16 - update CC
* 2013-10-16 - bugfix TST
* 2013-10-16 - Merge code for BSR and JSR
* 2013-10-16 - rename half carry method
* 2013-10-16 - less debug if value out of range
* 2013-10-16 - remove raise in ORCC
* 2013-10-16 - bugfix push/pull
* 2013-10-16 - bugfix test_TFR03()
* 2013-10-16 - stop on wrong NEG (e.g.: jump to empty RAM area)
* 2013-10-16 - better traceback
* 2013-10-16 - clear hacked exception
* 2013-10-16 - for eclipse :(
* 2013-10-15 - Update/bugfixes because of mem_read information
* 2013-10-15 - display cycles/sec
* 2013-10-15 - better error info
* 2013-10-15 - more debug info in memory access
* 2013-10-15 - add "mem_read" and "mem_write" into MC6809 data
* 2013-10-15 - send op address over bus, too.
* 2013-10-14 - bugfix BLO / BHS
* 2013-10-14 - implement AND
* 2013-10-14 - add content in "read byte" debug info
* 2013-10-14 - implement INC memory
* 2013-10-14 - Bugfix: wrong mem access PSH, PUL
* 2013-10-13 - conmpare first the registers than CC
* 2013-10-13 - debug output for CPU cycles
* 2013-10-13 - Display CC debug like '.F.IN..C' and compare it seperate
* 2013-10-13 - bugfix get_direct_byte()
* 2013-10-13 - implement PULS
* 2013-10-13 - nicer debugger output
* 2013-10-13 - Bugfix BSR
* 2013-10-13 - implement ORCC
* 2013-10-12 - bugfix in IllegalInstruction
* 2013-10-12 - add a simple debugger
* 2013-10-12 - implement BHI
* 2013-10-12 - reimplement illegal ops
* 2013-10-12 - bugfix: Hacked bugtracking only with Dragon 32
* 2013-10-12 - add addr in error message
* 2013-10-12 - log mem access as info
* 2013-10-12 - hacked speedup Simple6809 RAM test
* 2013-10-12 - Hacked bugtracking only with Dragon 32
* 2013-10-12 - insert CC in XRoar trace line, too
* 2013-10-12 - use sam attr than XRoar in PAGE1/2 ops
* 2013-10-12 - use debug.error for TODOs in PIA/SAM
* 2013-10-12 - special RAM init for Dragon.
* 2013-10-12 - Bugfix pull_word() (e.g. RTS)
* 2013-10-12 - Bugfix BLS
* 2013-10-12 - bugfix LEA
* 2013-10-11 - add two more CC test files
* 2013-10-11 - better opcode .csc export output
* 2013-10-11 - fix unittest
* 2013-10-11 - add screenshots
* 2013-10-11 - Add BASIC programm: Test CC Registers
* 2013-10-10 - add a hacked bug tracking: xroar trace compare
* 2013-10-10 - bugfix BEQ
* 2013-10-10 - bugfix in indexed addressing mode
* 2013-10-10 - bugfix init value in PIA
* 2013-10-10 - add reset call to debug output
* 2013-10-10 - merge read pc byte/word methods
* 2013-10-10 - Bugfix in log output: Display PC and not ea ;)
* 2013-10-10 - Bugfix STA/STB and CC update
* 2013-10-10 - debug also CC registers
* 2013-10-10 - tweak --verbosity=20 output simmilar to XRoar -trace
* 2013-10-10 - implement "--max" cli argument
* 2013-10-09 - add "--area_debug_active" in CLI
* 2013-10-09 - implement ADC and BSR
* 2013-10-09 - return 0x0, while read/write outside memory
* 2013-10-09 - split mem info:
* 2013-10-09 - Add unittest
* 2013-10-09 - commit idea for CC
* 2013-10-09 - update CPU for new MC6809_data_raw:
* 2013-10-09 - nicer output
* 2013-10-09 - update 6809 data:
* 2013-10-09 - CC register updates
* 2013-10-08 - add tests für CC.H and CC.C, but's seems to be wrong?!?
* 2013-10-08 - Update unittest, so they are runable
* 2013-10-07 - Bugfix COM
* 2013-10-07 - add CLI examples into README
* 2013-10-07 - bugfix: it's the right position
* 2013-10-07 - commit current state: * bus I/O: split byte/word calls * bus I/O: use struct for Sending responses from periphery back to memory * split memory from cpu module * start with Simple6809Periphery
* 2013-10-07 - * Add support for more than Dragon setups. * Start adding Simple6809 support
* 2013-10-06 - use bus for the rest
* 2013-10-06 - use reset() to ser CC F&I and init PC
* 2013-10-06 - implement support for PAGE1/2 opcodes
* 2013-10-06 - remove old code
* 2013-10-06 - implement CMP8 and CMP16
* 2013-10-06 - set inital PC to RESET_VECTOR == 0xb3b4
* 2013-10-06 - implement LEAS,LEAU and LEAX, LEAY
* 2013-10-06 - Set start stack pointer to 0xffff
* 2013-10-06 - *wrap around 8/16-bit register values
* 2013-10-06 - revert S to object: So it's the same API than other register objects
* 2013-10-06 - add everywhere "m" argument
* 2013-10-06 - * Implement LSL / ROL
* 2013-10-06 - implement BMI, BPL
* 2013-10-06 - update unittests (work in progress)
* 2013-10-06 - * Implement JSR
* 2013-10-06 - implement BLO/BCS/LBLO/LBCS and BHS/BCC/LBHS/LBCC branch
* 2013-10-06 - bugfix direct byte - TODO: direct word
* 2013-10-06 - Implement ST16 + Bugfix ST8
* 2013-10-06 - reformat DocString
* 2013-10-05 - implement BRA/LBRA
* 2013-10-04 - stop before loop
* 2013-10-04 - bugfix BNE and JMP
* 2013-10-04 - start a simple memory hex viewer
* 2013-10-03 - Add unittest for LDA, LDB, STA, STB and LDD in one test
* 2013-10-03 - Bugfix m <-> ea missmatch in address methods
* 2013-10-03 - * Implement ADD8
* 2013-10-03 - add a low-level-register test
* 2013-10-03 - remove some init debug messages
* 2013-10-02 - start implementing SUB8
* 2013-10-02 - * bugfix: differ between ea and memory content * Implement NEG memory
* 2013-10-01 - starts implementing NEG, but seems to be buggy :(
* 2013-10-01 - remove many startup debug output
* 2013-10-01 - add name to ConditionCodeRegister for uniform API
* 2013-10-01 - bugfix missing API update
* 2013-10-01 - reimplement TFR
* 2013-10-01 - implement TST
* 2013-10-01 - * Implement BEQ * use same debug output in BNE
* 2013-10-01 - Implement BIT
* 2013-10-01 - implement BNE
* 2013-10-01 - implement "relative" addressing mode
* 2013-09-30 - add a test
* 2013-09-30 - check mem values and make 'end' optional
* 2013-09-30 - implement INC
* 2013-09-30 - don't set overflow flag back to 0
* 2013-09-24 - reimplement LD8
* 2013-09-24 - implement DEC
* 2013-09-24 - use new skeleton
* 2013-09-24 - * don't split instrutions
* 2013-09-24 - * split COM * implement COM
* 2013-09-24 - * merge accu/CC code * all registers are objects with get()/set() method * leave unimplemented methods in skeleton class * reimplement JMP, LD16, ST8
* 2013-09-24 - mark 8bit CC update methods
* 2013-09-24 - rename CC calls
* 2013-09-23 - start LD16: TODO: operand should be a object with get/set methods!
* 2013-09-23 - implement JMP
* 2013-09-23 - insert genereted code
* 2013-09-23 - bigfix ;)
* 2013-09-23 - change CSV data
* 2013-09-23 - Use variables in "addr_mode"
* 2013-09-23 - rename dir
* 2013-09-23 - * insert 'cc update' calls for the most cases * better DocString * change function signature if nessesary *
* 2013-09-23 - * split LEA * move cc bits info to INSTRUCTION_INFO
* 2013-09-23 - add a simple CSV export
* 2013-09-23 - Use also first and last part to link
* 2013-09-23 - reimplement skeleton maker script
* 2013-09-23 - * change cycles/bytes to integers * Merge PAGE and SWI
* 2013-09-20 - merge informations, current result is MC6809_data_raw.py
* 2013-09-20 - add hacked 6809 data scraping scripts.
* 2013-09-19 - don't use property witch access methods...
* 2013-09-19 - * Bugfix NEG * stop in soft witch
* 2013-09-19 - * support JMP, NEG in all addressing modes * inc cycles in Memory class
* 2013-09-19 - * change memory access methods to properties, so it's unify with register access * merge COM ops
* 2013-09-19 - COM
* 2013-09-19 - add to TODO ;)
* 2013-09-19 - uniform debug output
* 2013-09-18 - * move accumulator to seperate object
* 2013-09-18 - remove register from 6309 and add some more links.
* 2013-09-17 - * Add LD 8-bit load register from memory * move the CC frags into seperate module
* 2013-09-17 - add "LD 16-bit load register from memory" and merge code with ST16
* 2013-09-17 - check if ops only defined one time
* 2013-09-17 - accumulator D, W and Q as property
* 2013-09-17 - add ST 16-bit store register into memory
* 2013-09-17 - add some 8-bit arithmetic operations
* 2013-09-17 - debug write to text screen addresses
* 2013-09-17 - add LSR
* 2013-09-17 - add ORA
* 2013-09-17 - bugfix indexed addressing modes
* 2013-09-16 - add BNE
* 2013-09-16 - make current opcode class wide. Handle list of opcodes
* 2013-09-16 - FIXME: word and signed8 ???
* 2013-09-16 - add copyright notes
* 2013-09-16 - form if...elif to a dict access
* 2013-09-16 - add LEAX indexed
* 2013-09-16 - add Indexed addressing modes, but needs tests
* 2013-09-16 - short debug output
* 2013-09-16 - stop on illegal ops
* 2013-09-15 - little-endian or big-endian ?!?!
* 2013-09-12 - better unittest output in verbosity mode
* 2013-09-11 - Display more mem info
* 2013-09-11 - add ADDA extended, CMPX extended and JSR extended
* 2013-09-11 - bugfix ROM/RAM size
* 2013-09-11 - Change sizes, but: http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4363
* 2013-09-11 - Add print_debug_info() to config class
* 2013-09-11 - add op 0x00 NEG direct
* 2013-09-11 - set cycles in ops
* 2013-09-11 - add JMP
* 2013-09-11 - rename CC flags
* 2013-09-11 - setup logging
* 2013-09-11 - move STACK_PAGE and RESET_VECTOR into cfg
* 2013-09-11 - remove read_word_bug()
* 2013-09-10 - cleanup and start to implement the 6809 CPU
* 2013-08-29 - Update configs.py
* 2013-08-27 - add some links
* 2013-08-27 - fork and rename some files, change some settings... But will every be a Dragon 32 emulator?
* 2013-08-20 - move files
* 2013-08-20 - Initial commit
* 2013-08-19 - Use MAX_HZ_VARIATION to seperate bit 1 or bit 0 display some statistics of bit detection
* 2013-08-18 - add status while reading WAV file.
* 2013-08-15 - add a script to convert dragon 32 Cassetts WAV files into plain text.
* 2013-03-08 - added note about exact pip and brew commands I used
* 2013-03-08 - improved hires colour, fixed non-ASCII key crash, fixed to work with later pygame/numpy
* 2012-07-23 - added explicit mention of License in README
* 2012-07-23 - added mention of numpy requirement
* 2012-07-23 - added MIT license
* 2012-07-23 - treat README as Markdown
* 2012-04-18 - made applepy.py executable
* 2011-10-01 - add --pc switch for starting run at specific program counter
* 2011-10-01 - initialise display state variables in constructor
* 2011-08-21 - add console control utility
* 2011-08-21 - implement post to /memory in control requests
* 2011-08-20 - control channel is now HTTP/REST/JSON
* 2011-08-20 - add fileno() method to ControlHandler for better compatiblity with select()
* 2011-08-20 - disassemble show instruction bytes
* 2011-08-20 - reincarnate disassembler on control channel
* 2011-08-20 - add dump memory command
* 2011-08-20 - refactor control command processing
* 2011-08-19 - start of cpu core control channel
* 2011-08-19 - graceful shutdown if cpu core exits
* 2011-08-19 - abandon startup if cpu module does not start
* 2011-08-19 - rename --ui switch to --bus
* 2011-08-18 - open memory files in binary mode
* 2011-08-18 - update curses UI for socket comms
* 2011-08-18 - use sockets for comms instead of stdio
* 2011-08-19 - Edited README via GitHub
* 2011-08-19 - Mention the minimal applepy_curses.py in README
* 2011-08-16 - attempt to skip to data part of tape
* 2011-08-16 - finish cassette support
* 2011-08-16 - initial cassette input
* 2011-08-14 - Separate CPU core and UI processes
* 2011-08-15 - removed unused import
* 2011-08-15 - adjusted speaker sample length to allow for leading edge
* 2011-08-15 - made options...um...optional param to Memory so tests pass
* 2011-08-15 - command line options: --rom, --ram, --quiet
* 2011-08-15 - map left/right arrow keys to ^H/^U
* 2011-08-15 - add flash attribute to text mode
* 2011-08-15 - moved speaker buffer playing into the Speaker class
* 2011-08-15 - implemented speaker; not a bad hack :-)
* 2011-08-15 - pass in None for cycles so tests run
* 2011-08-15 - refactored memory access so cycle can be passed in
* 2011-08-14 - implemented cycle calculation (except for page boundary crossing)
* 2011-08-14 - added notes on implementation that seems to give the right result
* 2011-08-14 - more groking of why memory-based ASL, DEC, INC, LSR, ROL and ROR take what they take
* 2011-08-14 - worked out why STA seemed an exception
* 2011-08-14 - updated notes, fixing what seems to a mistake on the webpage I referenced
* 2011-08-14 - typo and formatting fixes in cycle notes
* 2011-08-14 - notes on cycle times
* 2011-08-14 - added test_run to run CPU over a fragment of memory with no UI event handling (for automated testings)
* 2011-08-14 - improved coloured for better whites
* 2011-08-13 - fixed missing self
* 2011-08-13 - refactored memory so RAM just subclasses ROM, adding write_byte
* 2011-08-13 - whitespace nits
* 2011-08-13 - added load_file to RAM
* 2011-08-13 - updated README credits and status
* 2011-08-13 - implemented HIRES colour
* 2011-08-13 - use pregenerated character bitmaps for text mode
* 2011-08-13 - added HIRES graphics support based on code from ghewgill: https://github.com/ghewgill/applepy/commit/5aa8ca2caa82cacdae08d0ffdbab2083b0f4c7a1
* 2011-08-13 - always draw the spaces between scanlines
* 2011-08-13 - in mixed mode, assume monitor is colour
* 2011-08-13 - refactored update_text and update_lores into a single method
* 2011-08-13 - display full width of characters
* 2011-08-13 - character heights are really 8 not 9
* 2011-08-13 - implemented LORES graphics
* 2011-08-13 - make display optional (for testing)
* 2011-08-13 - got tests working again after memory refactor
* 2011-08-13 - ported to pygame and added bit-accurate characters
* 2011-08-07 - if writing to text screen row group 3 just skip instead of throwing exception
* 2011-08-07 - updated README to reflect status and give credit
* 2011-08-07 - don't treat indices as signed in indexed addressing modes (ht: ghewgill)
* 2011-08-07 - consistent whitespace
* 2011-08-07 - split memory handling into separate classes for RAM, ROM and Soft Switches
* 2011-08-07 - add disassembler, enable for dump mode
* 2011-08-07 - don't allow writes to ROM area (this caused the ][+ ROM to hang on boot)
* 2011-08-07 - fix typos for zero_page_y_mode in instruction dispatch table
* 2011-08-07 - fix dump() function so it works (when uncommented)
* 2011-08-07 - fix typo in instruction table
* 2011-08-07 - simplify calculating signed values in adc and sbc
* 2011-08-07 - only need to allocate 64k of memory
* 2011-08-07 - if curses can't write a character to the screen, just skip it; fixes #1
* 2011-08-07 - improved implementation of indirect bug across page boundaries including indexed indirects as well
* 2011-08-07 - added unit tests
* 2011-08-07 - fixed error in BVS
* 2011-08-07 - whitespace nit
* 2011-08-07 - properly use 0 and 1 not False and True for flags
* 2011-08-07 - implemented non-accumulator version of ROR
* 2011-08-06 - fixed inverse use of carry in SBC
* 2011-08-06 - turns out PLA DOES affect NZ after all
* 2011-08-06 - renamed load to load_file, added a load to load memory from byte list and refactored loading code
* 2011-08-06 - emulate indirect mode bug in 6502
* 2011-08-06 - reimplemented CMP, CPX and CPY based on 2006/2007 code
* 2011-08-06 - reimplemented ADC and SBC based on 2006/2007 code
* 2011-08-06 - apparently PLA does not affect NZ flags
* 2011-08-06 - little BIT of simplication
* 2011-08-06 - cleaned up ASL implementation
* 2011-08-06 - TSX updated NZ flags
* 2011-08-06 - fixed stray comment
* 2011-08-06 - factored out stack pull/push
* 2011-08-06 - refactored flags to status byte and back
* 2011-08-06 - slight refactor of update_nz and update_nzc
* 2011-08-06 - implemented BRK and RTI
* 2011-08-06 - make further use of addressing mode refactor
* 2011-08-06 - added zero_page_y_mode
* 2011-08-06 - added wrap-around for zero_page_x_mode
* 2011-08-06 - refactored addressing mode code
* 2011-08-06 - added if __name__ == "__main__" test for mainline
* 2011-08-06 - simplified screen address to col/row translation based on code from 2006
* 2011-08-06 - initial update from 2001 code
donation