## Dragon/CoCO emulator written in Python
DragonPy is a Open source (GPL v3 or later) emulator for the old (1981) homecomputer `Dragon 32` and `Tandy TRS-80 Color Computer` (CoCo)...
The [MC6809](https://github.com/6809/MC6809) project is used to emulate the 6809 CPU.
[![tests](https://github.com/jedie/DragonPy/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/jedie/DragonPy/actions/workflows/tests.yml)
[![codecov](https://codecov.io/github/jedie/dragonpy/branch/main/graph/badge.svg)](https://app.codecov.io/github/jedie/dragonpy)
[![dragonpy @ PyPi](https://img.shields.io/pypi/v/DragonPyEmulator?label=dragonpy%20%40%20PyPi)](https://pypi.org/project/DragonPyEmulator/)
[![Python Versions](https://img.shields.io/pypi/pyversions/DragonPyEmulator)](https://github.com/jedie/DragonPy/blob/main/pyproject.toml)
[![License GPL-3.0-or-later](https://img.shields.io/pypi/l/DragonPyEmulator)](https://github.com/jedie/DragonPy/blob/main/LICENSE)
Dragon 32 with CPython 3 under Linux:
![screenshot Dragon 32](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20150820_DragonPy_Dragon32_CPython3_Linux_01.png "screenshot Dragon 32")
Tandy TRS-80 Color Computer 2b with CPython 2 under Windows:
![screenshot CoCo under Windows](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20150820_DragonPy_CoCo2b_CPython2_Win_01.png "screenshot CoCo under Windows")
(Note: Python 2 support was removed)
DragonPy is written in Python.
It's platform independent and runs with Python and PyPy under Linux/Windows/OSX/...
It's tested with Python 3.x, PyPy
DragonPy will not be a second XRoar written in Python.
This project is primarily to lean and understand.
Future goals are:
* Implement a integrated development environment for BASIC programs
A full featured Dragon / CoCo emulator is [XRoar](http://www.6809.org.uk/dragon/xroar.shtml).
### Current state
The Dragon 32 / 64 and CoCo ROMs works in Text mode.
Also the "single board computer" ROMs sbc09, Simple6809 and Multicomp6809 works well.
There is a rudimentary BASIC editor with save/load BASIC programm listings direct into RAM.
Looks like this:
![old screenshot BASIC Editor](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140820_DragonPy_BASIC_Editor_01.png "old screenshot BASIC Editor")
(older version of the editor)
#### Vectrex
The [Vectrex (Wikipedia)](https://en.wikipedia.org/wiki/Vectrex) is a vector display-based video game console.
The Hardware are _only_ the 6809 CPU, a 6522 Versatile Interface Adapter and the AY-3-8912 sound chip.
Current state is completely not usable. The 6522 is only a dummy implementation.
It makes only sense to display some trace lines, e.g.:
```
.../DragonPy$ poetry run DragonPy --verbosity 0 --machine=Vectrex run --trace --max_ops=1
```
### BASIC Editor
Use "BASIC editor / open" in the main menu to open the editor.
You can load/save ASCII .bas files from you local drive or just type a BASIC listing ;)
With "inject into DragonPy" you send the current listing from the Editor to the Emulator and with "load from DragonPy" back from emulator to editor.
Note: The is currently no "warning" that un-saved content will be "overwritten" and there is no "auto-backup" ;)
The "renumbering" tool can be found in the editor window under "tools"
You can also run the BASIC Editor without the Emulator:
```
.../DragonPy$ make editor
# or:
.../DragonPy$ poetry run DragonPy editor
```
A rudimentary BASIC source code highlighting is available and looks like this:
![screenshot BASIC Editor](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140826_DragonPy_BASIC_Editor_01.png "screenshot BASIC Editor")
Special feature: The Line number that are used in GOTO, SOGUB etc. are extra marked on the left side.
## installation
IMPORTANT: The **PyPi package** name is **DragonPyEmulator** and [not only "DragonPy"](https://github.com/jpanganiban/dragonpy/issues/3)!!!
```
pip install DragonPyEmulator
```
### from source
```bash
~$ git clone https://github.com/jedie/DragonPy.git
~$ cd DragonPy/
~/DragonPy$ ./cli.py --help
```
The output of `./cli.py --help` looks like:
[comment]: <> (✂✂✂ auto generated main help start ✂✂✂)
```
Usage: ./cli.py [OPTIONS] COMMAND [ARGS]...
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────╮
│ download-roms Download/Test only ROM files │
│ editor Run only the BASIC editor │
│ gui <<< **start this** - Start the DragonPy tkinter starter GUI │
│ log-list List all exiting loggers and exit. │
│ run Run a machine emulation │
│ update-readme-history Update project history base on git commits/tags in README.md │
│ version Print version and exit │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
```
[comment]: <> (✂✂✂ auto generated main help end ✂✂✂)
The output of `./cli.py run --help` looks like:
[comment]: <> (✂✂✂ auto generated run help start ✂✂✂)
```
Usage: ./cli.py run [OPTIONS]
Run a machine emulation
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ --verbosity INTEGER RANGE [0<=x<=3] Verbosity level; Accepts integer │
│ value e.g.: "--verbose 2" or can be │
│ count e.g.: "-vv" │
│ [default: 0; 0<=x<=3] │
│ --trace/--no-trace Create trace lines │
│ [default: no-trace] │
│ --max-ops INTEGER If given: Stop CPU after given cycles │
│ else: run forever │
│ --machine [CoCo2b|Dragon32|Dragon64|Multicomp Used machine configuration │
│ 6809|Simple6809|Vectrex|sbc09] [default: Dragon32] │
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
```
[comment]: <> (✂✂✂ auto generated run help end ✂✂✂)
Usage e.g.:
```bash
~/DragonPy$ ./cli.py run
~/DragonPy$ ./cli.py editor
```
## ROMs
All needed ROM files, will be **downloaded automatically**.
The files will be downloaded from:
| Machine | download url |
|----------------|--------------|
| Dragon 32 + 64 | [http://archive.worldofdragon.org/archive/index.php?dir=Software/Dragon/Dragon%20Data%20Ltd/Dragon%20Firmware/](http://archive.worldofdragon.org/archive/index.php?dir=Software/Dragon/Dragon%20Data%20Ltd/Dragon%20Firmware/) |
| CoCo 2b | [http://www.roust-it.dk/coco/roms/](http://www.roust-it.dk/coco/roms/) |
| Multicomp | [http://searle.x10host.com/Multicomp/index.html](http://searle.x10host.com/Multicomp/index.html) |
| Simple6809 | [http://searle.x10host.com/6809/Simple6809.html](http://searle.x10host.com/6809/Simple6809.html) |
`sbc09` and `Vectrex` ROMs are included.
All ROM files and download will be checked by `SHA1` value, before use.
## development
Please use `dev-cli.py` for development.
The output of `./dev-cli.py --help` looks like:
[comment]: <> (✂✂✂ auto generated dev help start ✂✂✂)
```
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-readme-history Update project history base on git commits/tags in README.md │
│ update-test-snapshot-files Update all test snapshot files (by remove and recreate all snapshot │
│ files) │
│ version Print version and exit │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
```
[comment]: <> (✂✂✂ auto generated dev help end ✂✂✂)
Run tests, e.g.:
```bash
~/DragonPy$ ./dev-cli.py coverage
# or just:
~/DragonPy$ ./dev-cli.py test
# or with different Python versions:
~/DragonPy$ ./dev-cli.py tox
```
## more screenshots
"sbc09" ROM in Tkinter window:
![screenshot sbc09](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/DragonPy_sbc09_01.png "screenshot sbc09")
"Simple6809" ROM in Tkinter window:
![screenshot simple6809](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/Simple6809_TK_04.PNG "screenshot simple6809")
### Dragon Keyboard
The keyboard mapping is stored into [dragonpy/Dragon32/keyboard_map.py](https://github.com/jedie/DragonPy/blob/main/dragonpy/Dragon32/keyboard_map.py).
Some notes:
* "CLEAR" is mapped to "Home" / "Pos 1" key
* "BREAK" is mapped to "Escape" button
* "LEFT" is mapped to left cursor key and to normal backspace, too.
A "auto shift" mode is implemented. So normal lowercase letters would be automaticly converted to uppercase letters.
#### paste clipboard
It is possible to paste the content of the clipboard as user input in the machine.
Just copy (Ctrl-C) the follow content:
```
10 CLS
20 FOR I = 0 TO 255:
30 POKE 1024+(I*2),I
40 NEXT I
50 I$ = INKEY$:IF I$="" THEN 50
```
Focus the DragonPy window and use Ctrl-V to paste the content.
Looks like:
![raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140805_DragonPy_Dragon32_Listing.png](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140805_DragonPy_Dragon32_Listing.png "https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140805_DragonPy_Dragon32_Listing.png")
Then just **RUN** and then it looks like this:
![raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140805_DragonPy_Dragon32_CharMap.png](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140805_DragonPy_Dragon32_CharMap.png "https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140805_DragonPy_Dragon32_CharMap.png")
### DragonPy schematic
```
Main Thread Sub Thread
(Tkinter GUI)
+------------------+ +---------------------+
| | | |
| +-------------+ | CPU cycles/sec queue | |
| | <------------------------------------+6809 CPU |
| | | | | + ^ |
| | GUI | | | | | |
| | | | Display RAM write queue | +--v-----+--+ |
| | .--------------------------------------------+ Memory | |
| | | | | | +--+-----^--+ |
| | | | | | | | |
| | | | | | +-----v-----+-----+ |
| | | | | | | Periphery | |
| | | | | Keyboard queue | | MC6883 SAM | |
| | | +--------------------------------->MC6821 PIA | |
| | | | | | | | |
| +--+-----^----+ | | | | |
| | | | | +-----------------+ |
| | | | | |
| +--v-----+----+ | | |
| | | | | |
| | Display | | | |
| | | | | |
| +-------------+ | | |
+------------------+ +---------------------+
```
### performance
The current implementation is not really optimized.
With CPython there is round about 490.000 CPU cycles/sec. in console version.
This is half as fast as the real Hardware.
With PyPy round about 6.900.000 - 8.000.000 CPU cycles/sec.
In other words with PyPy it's 8 times faster as the real Hardware.
e.g. The Dragon 32 6809 machine with a 14.31818 MHz crystal runs with:
0,895MHz (14,31818Mhz/16=0,895MHz) in other words: 895.000 CPU-cycles/sec.
## TODO:
* implement more Dragon 32 periphery
* missing 6809 unittests after coverage run:
* `MUL`
* `BVS`
## PyDragon32
Some `Python`/`BASIC tools`/`scripts` around `Dragon32/64` / `CoCo` homecomputer.
All script are copyleft 2013-2020 by Jens Diemer and license unter GNU GPL v3 or above, see LICENSE for more details.
### Python scripts:
* PyDC - Convert dragon 32 Cassetts WAV files into plain text:
* [github.com/jedie/DragonPy/tree/master/PyDC](https://github.com/jedie/DragonPy/tree/master/PyDC)
* Filter Xroar traces:
* [github.com/jedie/DragonPy/tree/master/misc](https://github.com/jedie/DragonPy/tree/master/misc)
### BASIC programms:
* Simple memory HEX viewer:
* [github.com/jedie/DragonPy/tree/master/BASIC/HexViewer](https://github.com/jedie/DragonPy/tree/master/BASIC/HexViewer)
* Test CC Registers:
* [github.com/jedie/DragonPy/tree/master/BASIC/TestCC_Registers](https://github.com/jedie/DragonPy/tree/master/BASIC/TestCC_Registers)
#### Input/Output Tests
[/BASIC/InputOutput/keyboard.bas](https://github.com/jedie/DragonPy/tree/master/BASIC/InputOutput/keyboard.bas)
Display memory Locations $0152 - $0159 (Keyboard matrix state table)
Example screenshow with the "Y" key is pressed down. You see that this is saved in $0153:
![KeyBoard Screenshot 01](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/keyboard01.png "KeyBoard Screenshot 01")
Example with "U" is hold down:
![KeyBoard Screenshot 02](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/keyboard02.png "KeyBoard Screenshot 02")
## Links
* Grant Searle's Multicomp FPGA project:
* Homepage: [http://searle.x10host.com/Multicomp/](http://searle.x10host.com/Multicomp/)
* own [dragonpy/Multicomp6809/README](https://github.com/jedie/DragonPy/tree/master/dragonpy/Multicomp6809#readme)
* Lennart Benschop 6809 Single Board Computer:
* Homepage: [http://lennartb.home.xs4all.nl/m6809.html](http://lennartb.home.xs4all.nl/m6809.html)
* own [dragonpy/sbc09/README](https://github.com/jedie/DragonPy/tree/master/dragonpy/sbc09#readme)
* Grant Searle's Simple 6809 design:
* Homepage: [http://searle.x10host.com/6809/Simple6809.html](http://searle.x10host.com/6809/Simple6809.html)
* own [dragonpy/Simple6809/README](https://github.com/jedie/DragonPy/tree/master/dragonpy/Simple6809#readme)
Some links:
* [http://www.burgins.com/m6809.html](http://www.burgins.com/m6809.html)
* [http://www.maddes.net/m6809pm/](http://www.maddes.net/m6809pm/) - Programming Manual for the 6809 microprocessor from Motorola Inc. (now Freescale)
* [http://www.6809.org.uk/dragon/hardware.shtml](http://www.6809.org.uk/dragon/hardware.shtml)
* [http://dragondata.worldofdragon.org/Publications/inside-dragon.htm](http://dragondata.worldofdragon.org/Publications/inside-dragon.htm)
* [http://koti.mbnet.fi/~atjs/mc6809/](http://koti.mbnet.fi/~atjs/mc6809/) - 6809 Emulation Page
Source codes:
* [github.com/naughton/mc6809/blob/master/mc6809.ts](https://github.com/naughton/mc6809/blob/master/mc6809.ts)
* [github.com/maly/6809js/blob/master/6809.js](https://github.com/maly/6809js/blob/master/6809.js)
* [http://mamedev.org/source/src/mess/drivers/dragon.c.html](http://mamedev.org/source/src/mess/drivers/dragon.c.html)
* [http://mamedev.org/source/src/mess/machine/dragon.c.html](http://mamedev.org/source/src/mess/machine/dragon.c.html)
* [http://mamedev.org/source/src/emu/cpu/m6809/m6809.c.html](http://mamedev.org/source/src/emu/cpu/m6809/m6809.c.html)
* [github.com/kjetilhoem/hatchling-32/blob/master/hatchling-32/src/no/k/m6809/InstructionSet.scala](https://github.com/kjetilhoem/hatchling-32/blob/master/hatchling-32/src/no/k/m6809/InstructionSet.scala)
Dragon 32 resources:
* Forum: [http://archive.worldofdragon.org/phpBB3/index.php](http://archive.worldofdragon.org/phpBB3/index.php)
* Wiki: [http://archive.worldofdragon.org/index.php?title=Main_Page](http://archive.worldofdragon.org/index.php?title=Main_Page)
## Credits
Some code based on:
### ApplePy
An `Apple ][` emulator in Python
* Author: James Tauber
* [github.com/jtauber/applepy](https://github.com/jtauber/applepy)
* License: MIT
### XRoar
A really cool Dragon / CoCo emulator
* Author: Ciaran Anscomb
* [http://www.6809.org.uk/xroar/](http://www.6809.org.uk/xroar/)
* License: GNU GPL v2
### included Python modules:
#### python-pager
Page output and find dimensions of console.
* Author: Anatoly Techtonik
* License: Public Domain
* Homepage: [bitbucket.org/techtonik/python-pager/](https://bitbucket.org/techtonik/python-pager/)
* Stored here: [/dragonpy/utils/pager.py](https://github.com/jedie/DragonPy/blob/main/dragonpy/utils/pager.py)
#### srecutils.py
Motorola S-Record utilities
* Author: Gabriel Tremblay
* License: GNU GPL v2
* Homepage: [github.com/gabtremblay/pysrec](https://github.com/gabtremblay/pysrec)
* Stored here: [/dragonpy/utils/srecord_utils.py](https://github.com/jedie/DragonPy/blob/main/dragonpy/utils/srecord_utils.py)
### requirements
#### dragonlib
Dragon/CoCO Python Library
* Author: Jens Diemer
* [pypi.org/project/DragonLib/](https://pypi.org/project/DragonLib/)
* [github.com/6809/dragonlib](https://github.com/6809/dragonlib)
* License: GNU GPL v3
#### MC6809
Implementation of the MC6809 CPU in Python
* Author: Jens Diemer
* [pypi.org/project/MC6809](https://pypi.org/project/MC6809)
* [github.com/6809/MC6809](https://github.com/6809/MC6809)
* License: GNU GPL v3
#### pygments
generic syntax highlighter
* Author: Georg Brandl
* [pypi.org/project/Pygments](https://pypi.org/project/Pygments)
* [http://pygments.org/](http://pygments.org/)
* License: BSD License
## Make new release
We use [cli-base-utilities](https://github.com/jedie/cli-base-utilities#generate-project-history-base-on-git-commitstags) 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
[comment]: <> (✂✂✂ auto generated history start ✂✂✂)
* [v0.9.3](https://github.com/jedie/DragonPy/compare/v0.9.2...v0.9.3)
* 2024-09-24 - Remove manageprojects from normal dependencies, it's not needed ;)
* 2024-09-24 - Update CoCo2b ROM url info
* 2024-09-24 - Update project setup + Use humanize from MC6809
* 2024-09-24 - Update requirements
* [v0.9.2](https://github.com/jedie/DragonPy/compare/v0.9.1...v0.9.2)
* 2024-04-16 - Bugfix packaging
* 2024-04-16 - Update requirements and apply manageproject updates
* 2024-02-09 - Update requirements
* 2024-01-16 - Update requirements + fix code style
* 2023-12-17 - Fix code style and typos
* 2023-12-17 - Don't slow down tests because of mass DEBUG log output
* 2023-12-17 - Apply manageprojects updates
* [v0.9.1](https://github.com/jedie/DragonPy/compare/v0.9.0...v0.9.1)
* 2023-11-03 - Fix CI
* 2023-11-03 - Apply manageprojects updates
* 2023-11-03 - fix test_tokens_in_string()
* 2023-11-03 - Auto generate README history
* 2023-11-03 - Use https://github.com/jedie/cli-base-utilities
* 2023-11-02 - Bump pip from 23.2.1 to 23.3
* [v0.9.0](https://github.com/jedie/DragonPy/compare/v0.8.0...v0.9.0)
* 2023-08-05 - fix publish
* 2023-08-05 - Split CLI and dev-CLI + remove Python 3.9 support
* 2023-03-07 - update requirements
* 2023-03-07 - Update README
<details><summary>Expand older history entries ...</summary>
* [v0.8.0](https://github.com/jedie/DragonPy/compare/v0.7.0...v0.8.0)
* 2023-03-07 - Update README.md
* 2023-03-06 - Migrate to pip-tools via https://github.com/jedie/manageprojects
* 2022-10-19 - update requirements
* 2022-09-11 - Add mandelbrot2.bas
* 2022-09-11 - Add mandelbrot1.bas listing
* 2022-08-22 - README.creole -> README.md + update requirements + add some tests
* 2022-08-22 - cache ~/.cache/
* 2022-08-22 - don't delete ROM files in tests
* 2022-08-22 - small code style updates
* 2022-08-22 - project updates
* 2022-02-01 - Move click cli commands to devshell
* 2022-01-31 - +'pip cache information'
* 2022-01-31 - fix code style
* 2022-01-31 - Temporary speedup github actions by make the matix smaller ;)
* 2022-01-31 - Remove linting action -> Obsolete because linting is done via pytest plugin
* 2022-01-31 - Download ROMs before starting tests (should be cached)
* 2022-01-31 - Deny any requests in tests via autouse pytest fixtures
* 2022-01-31 - Display output on error
* 2022-01-31 - Bugfix: Exist on CLI usage
* 2022-01-30 - remove a PytestCollectionWarning
* 2022-01-30 - Fix code styles
* 2022-01-30 - update utils.py
* 2022-01-30 - fix format
* 2022-01-30 - fix meta config stuff
* 2022-01-30 - Refacotor "download_roms" from old CLI into a dev-shell command
* 2022-01-30 - remove nose test from CLI
* 2022-01-30 - Use dev-shell
* 2022-01-30 - Cache pip+roms
* [v0.7.0](https://github.com/jedie/DragonPy/compare/v0.6.0...v0.7.0)
* 2020-10-01 - update README
* 2020-10-01 - Update windows tk work-a-round: https://github.com/pypa/virtualenv/issues/93
* 2020-10-01 - update vectrex
* 2020-10-01 - Bugfix "--max_ops" cli options
* 2020-10-01 - Update ROM download URLs for CoCo2b, Multicomp6809 and Simple6809
* 2020-10-01 - Update Dragon 32/64 ROM download urls
* 2020-10-01 - Bugfix rom download error handling
* 2020-10-01 - Handle ROM download errors
* 2020-10-01 - add more "make" targets
* 2020-10-01 - WIP: fix github actions
* 2020-10-01 - add "make run" to start the GUI
* 2020-10-01 - Remove Python 2 code + Fix code style and most of the flake8 errors
* 2020-10-01 - update requirements
* 2020-10-01 - add "make update"
* 2020-02-10 - Update pythonapp.yml
* 2020-02-10 - apply pyupgrate + code style
* 2020-02-10 - apply code style
* 2020-02-10 - fixup! remove bootstrap files
* 2020-02-10 - run 2to3 and make minimal updates to get the tests running and pass
* 2020-02-10 - remove bootstrap files
* 2020-02-10 - WIP: modernize project setup
* [v0.6.0](https://github.com/jedie/DragonPy/compare/v0.5.3...v0.6.0)
* 2018-06-19 - Fix "No module named 'nose'" on normal PyPi installation
* 2018-06-19 - +build.log
* 2018-06-19 - https://pypi.python.org/pypi/ -> https://pypi.org/project/
* 2018-06-19 - +python-creole
* 2018-06-19 - +twine
* 2018-06-19 - update setup.py publish code
* 2018-06-19 - Update README.creole
* 2016-08-22 - fix screenshot links
* 2016-08-22 - update boot file
* 2016-08-22 - bugfix in git url
* 2015-10-20 - update readme/version number
* 2015-10-19 - update mc6809 req.
* 2015-10-19 - update Simple6809 unittests
* 2015-10-19 - * changed name of machine in comments
* 2015-10-19 - * some more bugfixes
* 2015-10-18 - * corrected error when trying to write to ROM * small fixes to be able to run Simple6809
* 2015-09-03 - changes for new mc6809 register API
* 2015-09-03 - changed in MC6809
* 2015-08-31 - add 'nosetest' to cli (used by MC6809)
* [v0.5.3](https://github.com/jedie/DragonPy/compare/v0.5.2...v0.5.3)
* 2015-08-24 - Update README, release as v0.5.3
* 2015-08-24 - last versions are needed
* 2015-08-24 - Update "speed limit" stuff. TODO: refactor this completely!
* 2015-08-24 - Update .travis.yml
* 2015-08-21 - fix unittest in py2
* [v0.5.2](https://github.com/jedie/DragonPy/compare/v0.5.1...v0.5.2)
* 2015-08-21 - update README and release as v0.5.2
* 2015-08-21 - Better starter solution, squashed commit of the following:
* 2015-08-20 - remove obsolete scripts
* 2015-08-20 - Add run 'MC6809 benchmark' button
* 2015-08-19 - update README
* [v0.5.1](https://github.com/jedie/DragonPy/compare/v0.5.0...v0.5.1)
* 2015-08-19 - bugfix e.g.: keyboard input in "sbc09" emulation
* 2015-08-19 - add a note for "png font parser code" remove, see:
* 2015-08-19 - remove font generator code
* 2015-08-19 - fix doctest
* 2015-08-19 - remove own copy of png.py
* 2015-08-19 - updates/cleanup/remove obsolete code
* 2015-08-19 - run tests also with PyPy3
* 2015-08-19 - use nose to run unittests
* 2015-08-19 - move "create statusbar"
* 2015-08-19 - Add a button to "run only BASIC editor" and display python version info
* 2015-08-19 - +=== requirement
* 2015-08-19 - remove test_run()
* 2015-08-19 - add a "starter GUI" + work-a-round for tkinter usage with virtualenv under windows
* 2015-08-18 - PyPi package name is: "DragonPyEmulator" !
* 2015-08-18 - cleanup list
* [v0.5.0](https://github.com/jedie/DragonPy/compare/v0.4.0...v0.5.0)
* 2015-08-18 - WIP: add compare links
* 2015-08-18 - update setup "publish" from:
* 2015-08-18 - use branches blacklist
* 2015-08-18 - refactory ROM downloads:
* 2015-08-17 - update to new bootstrap_env API
* 2015-08-17 - Update README.creole
* 2015-06-09 - update bootstrap
* [v0.4.0](https://github.com/jedie/DragonPy/compare/v0.3.2...v0.4.0)
* 2015-05-26 - -travis-pro
* 2015-05-26 - Bugfix components imports
* 2015-05-26 - recover old files from 2ec642f412caf8e30da1489617b9e8448a899c63
* 2015-05-26 - download ROMs so every tests can be run
* 2015-05-26 - used recovered rom.py
* 2015-05-26 - recover old rom.py file from:
* 2015-05-26 - nicer test call
* 2015-05-26 - update travis config
* 2015-05-26 - use setup.py entry_points for dragonpy.core.cli
* 2015-05-26 - +wheel & update bootstrap file
* 2015-05-26 - relase as 0.4.0
* 2015-05-26 - add publish
* 2015-05-26 - MC6809
* 2015-05-26 - remove 6809 stuff and use https://github.com/6809/MC6809
* 2015-05-20 - Add help text
* 2015-05-20 - remove PyDev configs
* 2015-05-20 - update shell startup scripts
* 2015-05-20 - update README
* 2015-05-20 - Add better error messages
* 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-05-20 - update bootstrap
* 2015-05-20 - reanem Click -> click
* 2015-01-28 - start to reimplement the CLI with "Click"
* 2015-01-28 - Add bootstrap files - TODO: Update README ;)
* [v0.3.2](https://github.com/jedie/DragonPy/compare/v0.3.1...v0.3.2)
* 2014-12-15 - use pygments syntax highlighter in BASIC editor
* 2014-12-06 - Update .travis.yml
* 2014-12-06 - Update README.creole
* 2014-11-13 - 'dragonlib' as dependency
* 2014-11-13 - outsource dragonlib:
* 2014-11-13 - move LOG_LEVELS
* [v0.3.1](https://github.com/jedie/DragonPy/compare/v0.3.0...v0.3.1)
* 2014-10-08 - Bugfix for ReSt
* 2014-10-08 - update README
* 2014-10-08 - Add a setup.cfg
* 2014-09-30 - Bugfix copy&paste: e.g.: double paste
* 2014-09-30 - WIP: BASIC editor: reformat code
* 2014-09-30 - add more info
* 2014-09-30 - Bugfix
* 2014-09-30 - add some alive "loading..." info
* 2014-09-30 - use tkinter event.keysym for special keys
* 2014-09-30 - WIP: TextHighlight
* 2014-09-30 - add copy&paste in BASIC editor
* 2014-09-30 - Bugfix renum tool + renum INVADER.bas
* 2014-09-30 - PY3 bugfix
* 2014-09-30 - activate undo in BASIC editor
* 2014-09-30 - More enhanced "display tokens" in editor
* 2014-09-30 - Bugfix if line number > $ff
* 2014-09-30 - Add a more informative "display tokens" window
* 2014-09-30 - Display also datum
* 2014-09-29 - Add vertical scrollbar to basic editor and disable wrap
* 2014-09-29 - add origin INVADER.bas from Jim Gerrie:
* 2014-09-29 - don't open settings dialog
* 2014-09-29 - moved BASIC files
* 2014-09-29 - display more info on overflow error
* 2014-09-29 - move BASIC programs
* 2014-09-14 - ignore lines without address
* 2014-09-14 - Bugfix: Handle lines without CC e.g.: [RESET], [IRQ]
* 2014-07-31 - Update README.creole
* 2014-07-31 - add /InputOutput/keyboard.bas
* 2014-07-26 - WIP: xroar GDB
* 2014-07-12 - add "--add_cc"
* 2014-07-10 - WIP
* 2014-07-10 - new filter: "filter_xroar_trace.py --start-stop=8c37-91c1"
* 2014-07-10 - add "filter_xroar_trace.py --unique" function
* 2014-07-10 - Display status on live filtering
* 2014-07-10 - Use a simple cache for big speedup.
* 2014-07-09 - add "add_info_in_trace.py"
* 2014-07-09 - add live filter
* 2014-07-09 - Add CLI to xroar filter script and add README
* 2014-07-09 - WIP: xroar trace filter script.
* 2014-07-08 - WIP: FPA0 test
* 2014-06-27 - update TST
* 2014-06-27 - Add NEGA test
* 2013-10-25 - add CC test with LSL
* 2013-10-24 - Add CC test with TST
* 2013-10-24 - update CC test with INC
* 2013-10-24 - Add CC test with DEC
* 2013-10-24 - update CC test with SUBA
* 2013-10-24 - Update CC test with ADDA
* 2013-10-22 - add gaps to ASCII files
* 2013-10-22 - nicer output + add screenshot
* 2013-10-21 - clear CC before INC
* 2013-10-21 - add a CC test with INC
* 2013-10-16 - Skip empty lines (e.g. XRoar need a empty line at the end)
* 2013-10-11 - add two more CC test files
* 2013-10-11 - "overwrite" prints are faster and nicer ;)
* 2013-10-11 - add screenshots
* 2013-10-11 - Add BASIC programm: Test CC Registers
* 2013-10-04 - start a simple memory hex viewer
* 2013-09-09 - split output in blocks with a max size of 255Bytes
* 2013-09-09 - add '--case_convert' cli parameter. See README
* 2013-09-09 - remove official example
* 2013-09-09 - * Use one convert() method for all ways. * Move some convert code into Cassette() class * code cleanup * update README
* 2013-09-09 - remove BASIC code end terminator, seems it's not needed.
* 2013-09-09 - Bugfixes: * Use GAP-Flag for ASCII BASIC * Don't yield magic byte at block end * Don't yield machine code starting/loading address in BASIC files
* 2013-09-07 - handle wav/cas with code in more than one block
* 2013-09-07 - set "machine code start/load address" from filename See: http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=8&t=4341&p=9094#p9094
* 2013-09-06 - display more info, if block type unknown.
* 2013-09-06 - bugfix: .cas file must not have leadin bytes between blocks.
* 2013-09-06 - log.info: gap flag / machine code starting/loading address
* 2013-09-06 - Binary machine code file is 0x02 and not 0xff, isn't it?
* 2013-09-06 - bugfix if only bit 1 or bit 0 found.
* 2013-09-06 - Add Frequency of bit 1 / 0 in cli
* 2013-09-02 - use defaults in CLI from config
* 2013-09-06 - bas2wav works better, but some bugs not fixed, yet...
* 2013-09-06 - add a "step-by-step" bas2cas unittest
* 2013-09-06 - add unittests for bas2cas -> cas2bas
* 2013-09-06 - cleanup imports
* 2013-09-06 - catch BASIC code end
* 2013-09-06 - debug block content
* 2013-09-06 - Bugfix for wrong checksum
* 2013-09-05 - update cas2bas
* 2013-09-05 - start cas2bas
* 2013-09-04 - add bas2cas
* 2013-09-04 - bugfix in bas2wav, but still don't work, yet :(
* 2013-09-04 - use duration instead of Hz to trigger bits
* 2013-09-04 - move min/max Hz to method
* 2013-09-04 - yield only duration in trigger
* 2013-08-31 - Display process info while analyze, too.
* 2013-08-31 - merge --analyze function
* 2013-08-30 - bugfix: catch IndexError, too.
* 2013-08-30 - Bugfix: use of logfilename
* 2013-09-03 - display start/end
* 2013-08-30 - display absolute wave position
* 2013-08-30 - implement bas2wave ;) But seems the stream is not valid, yet :(
* 2013-08-30 - code cleanup
* 2013-09-03 - better test output
* 2013-08-30 - consume magic byte in bitstream, too.
* 2013-09-02 - add working state top master
* 2013-08-28 - code cleanup: * move some settings into config files * create a wav2bad() function and use it in CLI
* 2013-08-28 - Display and check the block checksum
* 2013-08-28 - bigger Sync-Byte search sizes, e.g. for: "Dragon Data Ltd - Examples from the Manual - 39~58 [run].wav"
* 2013-08-27 - Add a command line interface
* 2013-08-27 - add a 'average sample' function, but turn it off is the best idea ;)
* 2013-08-27 - Implement a new trigger that works! See: http://www.python-forum.de/viewtopic.php?p=244702#p244702 (de)
* 2013-08-27 - bit-sync on every block start
* 2013-08-26 - Many bugfixes. Start implementing code for BAS2WAV, but now only for debugging.
* 2013-08-26 - Works as stream processing, but only with "HelloWorld1 xroar.wav", yet.
* 2013-08-26 - commit broken state
* 2013-08-25 - commit current broken state
* 2013-08-25 - bugfix if wave is in 8-bit
* 2013-08-23 - current state with "auto sync"
* 2013-08-23 - Use a 'text level meter' for better debugging
* 2013-08-22 - current broken state
* 2013-08-22 - sync works, but useless?
* 2013-08-22 - add a new implementation of wave2bitstream like a schmitt trigger
* 2013-08-21 - check block_length in BASIC code parsing
* 2013-08-21 - ASCII BASIC parser works now.
* 2013-08-20 - start to support ASCII BASIC files, but not done, yet.
* 2013-08-20 - bytes2codeline(): even easier
* 2013-08-20 - move files
* 2013-08-20 - Initial commit
* 2013-08-20 - Handle pointer and line numbers in the right way.
* 2013-08-20 - use array instead of struct.unpack for getting wave values
* 2013-08-19 - Use MAX_HZ_VARIATION to seperate bit 1 or bit 0 display some statistics of bit detection
* 2013-08-18 - refactor reading
* 2013-08-18 - support 32Bit wave files, too. Why? Don't know... ;)
* 2013-08-18 - bugfix in unpack wav frames
* 2013-08-18 - Speedup by reading WAVE in blocks
* 2013-08-18 - handle 'function tokens'
* 2013-08-18 - add status while reading WAV file.
* 2013-08-17 - parse the file content. Put data into objects.
* 2013-08-17 - add a filename block class
* 2013-08-17 - remove unused code
* 2013-08-16 - Use sync byte to get the real start of a block. Get and use block type/size, too.
* 2013-08-16 - Add BASIC_TOKENS dict and use it. Add TEST_STR and try to find it.
* 2013-08-16 - I see a HELLO WORLD! ;)
* 2013-08-15 - cut out the relevant data
* 2013-08-15 - add a script to convert dragon 32 Cassetts WAV files into plain text.
* [v0.3.0](https://github.com/jedie/DragonPy/compare/v0.2.0...v0.3.0)
* 2014-09-25 - Bugfix sbc09 unittest
* 2014-09-25 - Update README
* 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 - log only missing ROM files.
* 2014-09-22 - file rename and remove obsolete files
* 2014-09-22 - move CPU utils
* 2014-09-22 - use COUNT variable
* 2014-09-22 - add some windows startup batches
* 2014-09-22 - update direct test
* 2014-09-22 - Don't raise error, if dump doesn't include address...
* 2014-09-22 - update unittest
* 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-22 - less logging output
* 2014-09-18 - Bugfix unittest
* 2014-09-18 - Update CLI unittest
* 2014-09-18 - Quick work-a-round for unittests
* 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 - abort if ROM file missing
* 2014-09-18 - change logging setup
* 2014-09-14 - nicer log output
* 2014-09-14 - updat etimer test script
* 2014-09-14 - Bugfix for IRQ:
* 2014-09-14 - Update README, see also:
* [v0.2.0](https://github.com/jedie/DragonPy/compare/v0.1.0...v0.2.0)
* 2014-09-14 - Release v0.2.0
* 2014-09-14 - set default directory in editor + display filename in title
* 2014-09-14 - bugfix runtime
* 2014-09-13 - display python version info in status line
* 2014-09-13 - code cleanup
* 2014-09-13 - bugfix for Py2
* 2014-09-13 - add python major version number to pickle files
* 2014-09-13 - update linux dev scripts
* 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-13 - --version for python 2 and 3
* 2014-09-12 - replace own lib2and3 with six
* 2014-09-12 - WIP: refactor logging usage
* 2014-09-12 - WIP: cpu run
* 2014-09-11 - WIP: A new, KISS solution?
* 2014-09-11 - doesnt needed
* 2014-09-11 - Start, refactoring memory:
* 2014-09-09 - add more comments into PIA
* 2014-09-08 - merge code
* 2014-09-08 - add "target CPU burst loops" to GUI config
* 2014-09-08 - implement a callback mechanism which trigger the CPU cycles
* 2014-09-07 - WIP: Implement IRQ
* 2014-09-08 - log TIMER read/write
* 2014-09-08 - update CoCo2b to newer API
* 2014-09-08 - align text to the left
* 2014-09-08 - see that's running
* 2014-09-08 - put "max_run_time" also in the config GUI
* 2014-09-11 - fix ReSt generation?
* 2014-09-11 - remove obsolete files
* 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-11 - Bugfix in unittest...
* 2014-09-10 - Bugfix: reopen config dialog
* 2014-09-10 - use --verbosity 99 in coco .sh, too
* 2014-09-09 - add --verbosity 99 to CLI
* 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 - update setup.py
* [v0.1.0](https://github.com/jedie/DragonPy/compare/80f221b...v0.1.0)
* 2014-09-05 - WIP: Release as v0.1.0
* 2014-09-05 - include free v09.rom and vectrex ROM
* 2014-09-05 - move sbc09 rom
* 2014-09-05 - update sbc09 stuff:
* 2014-09-05 - Remove Multicomp-/Simple 6809 ROMs and update download script.
* 2014-09-05 - split download ROMs scripts
* 2014-09-05 - include scripts
* 2014-09-05 - skip unittest if ROM files missing
* 2014-09-05 - ignore /dist/
* 2014-09-05 - remove obsolete files
* 2014-09-05 - include some more files
* 2014-09-05 - Use python-creole to generate ReSt README on the fly, see:
* 2014-09-05 - bugfix renum
* 2014-09-05 - move DragonPy commands
* 2014-09-05 - Faster paste input processing
* 2014-09-05 - open editor only one time
* 2014-09-05 - nicer initial position
* 2014-09-05 - better initial position of the editor window
* 2014-09-05 - make "BASIC editor" menu entry to a clickable command
* 2014-09-05 - importand here for Python 2
* 2014-09-05 - implemend "hard reset"
* 2014-09-05 - implement CPU soft reset
* 2014-09-05 - Add CPU pause/resume
* 2014-09-05 - display "startup XXX..." in status line on start
* 2014-09-05 - doesn't happen
* 2014-09-05 - set --loops 10
* 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 - Update README.creole
* 2014-09-04 - update dev .cmd files
* 2014-09-04 - Work-a-round for https://bitbucket.org/pypy/pypy/issue/1858/pypy3-localeformat-d-val-1
* 2014-09-04 - "revered" https://github.com/jedie/DragonPy/commit/803f901a03f55d96d621e3bc266ff0d67d8a6225
* 2014-09-04 - remove from __future__ import unicode_literals
* 2014-09-04 - Adjust CPU burst count dynamically.
* 2014-09-04 - work-a-round for Py2: className can't be unicode
* 2014-09-04 - unify dev start scripts
* 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 - rename basic examples
* 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 - Update README
* 2014-09-03 - add a simple CLI test
* 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 - code cleanup
* 2014-09-03 - bugfix if run with -OO
* 2014-09-03 - format cyltes/sec number (thousands seperator)
* 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 - predefine files types in open/save dialog
* 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-09-01 - WIP: port parts from JSVecX by Chris Smith alias raz0red
* 2014-08-31 - WIP: Just add dummy code for Vectrex
* 2014-08-28 - nicer colors
* 2014-08-28 - merge/move BASIC examples files
* 2014-08-28 - save/restore cursor and scroll position while renumbering
* 2014-08-28 - split code parts
* 2014-08-28 - better resize editor
* 2014-08-28 - comment test code
* 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 - highligth the current line in editor
* 2014-08-28 - Add MultiStatusBar and display current column/line
* 2014-08-28 - Better "invert shift" solution
* 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 "inject + RUN" and output messages via user_input_queue
* 2014-08-27 - Activate "invert Shift" in BASCI Editor
* 2014-08-27 - add history to README
* 2014-08-27 - debug output the addresses in CoCo, too
* 2014-08-27 - Bugfix: CoCo used the same default start address
* 2014-08-27 - update CoCo tokens with Extended Color BASIC 1.1
* 2014-08-27 - Update ROM download stuff:
* 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 - Bugfix for machione crash if None would be handled as a byte value
* 2014-08-26 - Display full traceback if CPU raised a error
* 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 - enhanced the hex viewer program
* 2014-08-20 - renumber hex_view01.bas
* 2014-08-20 - add original Hex Viewer script from:
* 2014-08-20 - add ListVariables.bas by sorchard
* 2014-08-20 - CoCo used a other default program start address than dragon
* 2014-08-20 - "typo"
* 2014-08-20 - + 0xff80: "SGN"
* 2014-08-20 - WIP: Support CoCo in editor
* 2014-08-20 - Add BASIC example programs
* 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 - handle KeyboardInterrupt in GUI
* 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 - Set cursor at start after insert
* 2014-08-16 - remove edit window border
* 2014-08-16 - use ScrolledText and implement load/save
* 2014-08-16 - WIP: move dump/load stuff into editor
* 2014-08-15 - WIP: split project: BASIC 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 - better use X instead of @
* 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-11 - no highlight border around canvas
* 2014-08-10 - WIP: GUI communication with CPU
* 2014-08-10 - add missed rom info
* 2014-08-08 - rename MC6847_TextModeCanvas
* 2014-08-08 - add some comments and code cleanup
* 2014-08-08 - use canvas.itemconfigure() to replace char-images
* 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 - chnage queue.put_nowait() to queue.put()
* 2014-08-07 - update root on change and add more log outputs
* 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 - reformat code with E124,E128,E301,E309,E501
* 2014-08-07 - WIP: seperate GUI and machine in different threads
* 2014-08-07 - move CPU into seperate thread
* 2014-08-06 - Support CoCo keyboard input!
* 2014-08-06 - Work-a-round for CoCo input
* 2014-08-06 - add more coco rom variants
* 2014-08-06 - Add CoCo ROM into download script
* 2014-08-06 - add RND() seed debug output also to CoCo config
* 2014-08-06 - add RND() seed debug output
* 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 - disable keyboard debug middleware in Dragon 32 config
* 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-05 - display CPU cycle output in Dragon32
* 2014-08-05 - Bugfix in sbc09
* 2014-08-05 - Update Dragon32_test.py + Add machine name in title
* 2014-08-05 - nicer debug output while paste
* 2014-08-05 - split cpu loop and status update
* 2014-08-04 - Add the missing block chars. Add padding direct to the char dict
* 2014-08-04 - ./Dragon64_test.py worked!
* 2014-08-04 - ignore *.rom files
* 2014-08-04 - WIP: save not working state
* 2014-08-03 - use img.zoom() instead of "own scale"
* 2014-08-03 - Faster without self.root.update()
* 2014-08-03 - WIP: Use Tkinter instead of pygame?
* 2014-08-03 - generate a dict with font info
* 2014-08-03 - move display_cycle_interval() into CPU
* 2014-08-03 - update to new API
* 2014-08-03 - WIP: Split byte/word in periphery
* 2014-08-03 - add TODO: Use PyGame event.scancode / Tkinter event.keycode constants
* 2014-08-03 - use auto_shift parameter in test, too.
* 2014-08-02 - typo in comment
* 2014-08-02 - add info to Dragon Keyboard
* 2014-08-02 - bigger font + bugfix in init Display RAM
* 2014-08-02 - use XRoar colors
* 2014-08-02 - limit the input queue
* 2014-08-02 - Force send 'no key pressed' only after a key was pressed.
* 2014-08-02 - bugfix: Don't sys.exit() so CPU thread tread down
* 2014-08-02 - add info about Useable RAM sizes
* 2014-08-02 - bugfix some key mappings
* 2014-08-02 - Dragon is alive!
* 2014-08-02 - start with a complete fresh pygame display class
* 2014-08-02 - WIP: char input
* 2014-08-01 - toggle key press, so no key will be missed ;)
* 2014-08-01 - WIP: Keyboard input seems to work basicly!!!
* 2014-08-01 - WIP: Keyboard input
* 2014-07-31 - Display "keyboard matrix state" via memory_callbacks
* 2014-07-30 - just add some more info
* 2014-07-30 - WIP: Keyboard input to PIA
* 2014-07-30 - add some information about PIA
* 2014-07-29 - WIP: PIA PDR
* 2014-07-29 - WIP: PIA
* 2014-07-29 - use bit utils in CPU, too.
* 2014-07-29 - add utilities around bit manipulations
* 2014-07-28 - WIP: Dragon input
* 2014-07-28 - use central logger
* 2014-07-28 - WIP: user input
* 2014-07-28 - reformat code
* 2014-07-28 - nicer output ;)
* 2014-07-28 - bugfix quit pygame
* 2014-07-28 - add ROM download script and ROM hashes.
* 2014-07-27 - Quick work-a-round for travis
* 2014-07-27 - convert dragon charmap
* 2014-07-27 - WIP: Dragon Text mode with D64
* 2014-07-25 - WIP: Dragon 32 PIA / SAM
* 2014-07-25 - Cut PIA mem info
* 2014-07-25 - Add a Dragon32_test.py
* 2014-07-24 - update Dragon 32 stuff to new API
* 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 - bugfix unittest
* 2014-07-23 - bugfix Multicomp6809 and abc09 in tk version
* 2014-07-23 - Use Queue.Queue() in Tk as output buffer
* 2014-07-23 - Crash because of: yscrollcommand=scollbar.set
* 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 - less debug log
* 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
* 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 - Finished S-Records unittest
* 2014-07-15 - Add more test with HEX calculator
* 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 - reoder register lines
* 2014-07-15 - moved
* 2014-07-15 - Create v09 trace simmilar to XRoar one.
* 2014-07-14 - Bugfix sbc09 unittest and add more sbc09 tests
* 2014-07-14 - WIP: unittests with sbc09
* 2014-07-14 - sbc09: create memory info with hacked script
* 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 - disable output in unittests
* 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 - Bugfix, use other address if only 1K RAM
* 2014-07-13 - Add more tests with BASIC
* 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 - add some working tests
* 2014-07-13 - remove initial state tests
* 2014-07-13 - Update unittest for TFR/EXG
* 2014-07-13 - Add BASIC float tests.
* 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 - better mem info
* 2014-07-12 - add comments +typo
* 2014-07-12 - better info on out of range writes
* 2014-07-12 - add doctest
* 2014-07-12 - update test startup
* 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 - "activate" test_ACCD_to_FPA0()
* 2014-07-11 - Bugfix if value > $7fff
* 2014-07-11 - Just for devloper to play a little bit with the BASIC Interpreter.
* 2014-07-11 - add some dev. helper windows batch files
* 2014-07-11 - cleanup BASIC09 tests
* 2014-07-11 - WIP: Add test case for JSR $e778 "D to FPA0"
* 2014-07-11 - add special handling if value == 0
* 2014-07-11 - Bugfix in BASIC09 Float implementation, only 0 failed, yet.
* 2014-07-08 - Bugfix dev. startup
* 2014-07-08 - WIP: Test with BASIC floating point routines
* 2014-07-08 - disable by default
* 2014-07-08 - update dev. tool
* 2014-07-08 - Add a working BASIC floting point number test
* 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 - split the FLOATING POINT ACCUMULATOR addresses
* 2014-07-07 - use pickle to save CPU state
* 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 - add RESET_VECTOR_VALUE to cfg
* 2014-07-04 - update division code
* 2014-07-04 - add test for ROL,ROR in memory
* 2014-07-04 - Bugfix CLI
* 2014-07-04 - enhanced script.
* 2014-07-03 - add two new working BASIC Tests...
* 2014-07-03 - add some not working unitests (commented)
* 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 - bash scripts to run test and create coverage report
* 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 - 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 - add some BASIC test code
* 2014-06-29 - split/merge arithmetic shift tests
* 2014-06-29 - unify: r & 0xff
* 2014-06-29 - WIP dragon32
* 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 - Setup only 1KB RAM for Multicomp6809 for faster startup.
* 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-26 - add debug output for PRINT "HELLO" in README
* 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 - create absolute path to the ROM file.
* 2014-06-24 - add info about ROMs
* 2014-06-24 - some cleanup
* 2014-06-24 - README Update
* 2014-06-23 - change reset debug output
* 2014-06-23 - Quick hack to add Grant's Multicomp 6809 ROM.
* 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 - rename basic.doc -> basic.txt
* 2013-10-30 - bugfix: flush doesn't exist
* 2013-10-30 - truncate long lines in traceback
* 2013-10-29 - "redirect" use input into nirvana
* 2013-10-29 - add a simple console, so it's runable without TKinter
* 2013-10-29 - ignore if TKinter is not available
* 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 - disable automatic test commands
* 2013-10-28 - not raise traceback on exit
* 2013-10-28 - pygame, numpy is not needed in every config
* 2013-10-28 - add link into README
* 2013-10-28 - hand made changes in generate creole file
* 2013-10-28 - add abc09.creole generatet by script
* 2013-10-28 - add "clean" in Makefile and remove all builded files
* 2013-10-28 - just apply auto format
* 2013-10-27 - add more test code
* 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 - changes for equality with trace
* 2013-10-27 - update half-carry, though H is normaly "undefined"
* 2013-10-27 - add a hacked script to create a short trace with sbc09
* 2013-10-27 - add hacked scb09 trace compare
* 2013-10-27 - use dict for all calls
* 2013-10-27 - Bugfix CMP: update half-carry flag, too.
* 2013-10-27 - print trace info
* 2013-10-27 - rename README.doc -> README.txt
* 2013-10-27 - just apply auto formating
* 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-26 - add some info
* 2013-10-26 - add "Copy to clipboard" function
* 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 - exclude imports (serial doesn't work, yet)
* 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-24 - add scrollbar and auto scroll to end
* 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-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 - Automatic send a BASIC line back, for test
* 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 - add vector info
* 2013-10-17 - info if mem info is not active
* 2013-10-17 - support Backspace
* 2013-10-17 - better solution to make textbox "read-only"
* 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 - better Tk stuff: send char by char back
* 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 - Split Simple6809Periphery and a a simple Tk GUI
* 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 - play with serial, without success.
* 2013-10-15 - send op address over bus, too.
* 2013-10-14 - add from https://gist.github.com/jedie/6975555
* 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 - more info on RS232 access
* 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-13 - add fake write_rs232_interface()
* 2013-10-13 - better error message if periphery func. returns nonsense ;)
* 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 dummy RS232 method
* 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 - better opcode .csc export output
* 2013-10-11 - fix unittest
* 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 - resuse existing cmd arguments
* 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 - 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 - rename ;)
* 2013-10-07 - Bugfix: Strip checksum ;)
* 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 - starting implementation of SAM
* 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 - start to implement PIA0 and PIA1
* 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 - add some PIA / SAM dummy response
* 2013-10-04 - bugfix BNE and JMP
* 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-02 - better error message if soft switch doesn't exists
* 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 - add more links
* 2013-09-12 - merge code
* 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 - more info
* 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 - activate pygame display
* 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-11 - obsolete
* 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-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
</details>
[comment]: <> (✂✂✂ auto generated history end ✂✂✂)
## Links:
| Forum | [http://forum.pylucid.org/](http://forum.pylucid.org/) |
| IRC | [#pylucid on freenode.net](http://www.pylucid.org/permalink/304/irc-channel) |
| Jabber | pylucid@conference.jabber.org |
| PyPi | [pypi.org/project/DragonPyEmulator/](https://pypi.org/project/DragonPyEmulator/) |
| Github | [github.com/jedie/DragonPy](https://github.com/jedie/DragonPy) |
## donation
* Send [Bitcoins](http://www.bitcoin.org/) to [1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F](https://blockexplorer.com/address/1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F)
Raw data
{
"_id": null,
"home_page": null,
"name": "DragonPyEmulator",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "Emulator, 6809, Dragon, CoCo, Vectrex, tkinter, pypy",
"author": null,
"author_email": "Jens Diemer <git@jensdiemer.de>",
"download_url": "https://files.pythonhosted.org/packages/11/47/fa924c372e661b14fcdcd6739170f0ad133dac8579aaa505c4512d8e267e/dragonpyemulator-0.9.3.tar.gz",
"platform": null,
"description": "## Dragon/CoCO emulator written in Python\n\nDragonPy is a Open source (GPL v3 or later) emulator for the old (1981) homecomputer `Dragon 32` and `Tandy TRS-80 Color Computer` (CoCo)...\n\nThe [MC6809](https://github.com/6809/MC6809) project is used to emulate the 6809 CPU.\n\n[![tests](https://github.com/jedie/DragonPy/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/jedie/DragonPy/actions/workflows/tests.yml)\n[![codecov](https://codecov.io/github/jedie/dragonpy/branch/main/graph/badge.svg)](https://app.codecov.io/github/jedie/dragonpy)\n[![dragonpy @ PyPi](https://img.shields.io/pypi/v/DragonPyEmulator?label=dragonpy%20%40%20PyPi)](https://pypi.org/project/DragonPyEmulator/)\n[![Python Versions](https://img.shields.io/pypi/pyversions/DragonPyEmulator)](https://github.com/jedie/DragonPy/blob/main/pyproject.toml)\n[![License GPL-3.0-or-later](https://img.shields.io/pypi/l/DragonPyEmulator)](https://github.com/jedie/DragonPy/blob/main/LICENSE)\n\n\nDragon 32 with CPython 3 under Linux:\n\n![screenshot Dragon 32](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20150820_DragonPy_Dragon32_CPython3_Linux_01.png \"screenshot Dragon 32\")\n\nTandy TRS-80 Color Computer 2b with CPython 2 under Windows:\n\n![screenshot CoCo under Windows](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20150820_DragonPy_CoCo2b_CPython2_Win_01.png \"screenshot CoCo under Windows\")\n\n(Note: Python 2 support was removed)\n\nDragonPy is written in Python.\nIt's platform independent and runs with Python and PyPy under Linux/Windows/OSX/...\nIt's tested with Python 3.x, PyPy\n\nDragonPy will not be a second XRoar written in Python.\nThis project is primarily to lean and understand.\n\nFuture goals are:\n\n\n* Implement a integrated development environment for BASIC programs\n\nA full featured Dragon / CoCo emulator is [XRoar](http://www.6809.org.uk/dragon/xroar.shtml).\n\n### Current state\n\nThe Dragon 32 / 64 and CoCo ROMs works in Text mode.\nAlso the \"single board computer\" ROMs sbc09, Simple6809 and Multicomp6809 works well.\n\nThere is a rudimentary BASIC editor with save/load BASIC programm listings direct into RAM.\n\nLooks like this:\n\n![old screenshot BASIC Editor](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140820_DragonPy_BASIC_Editor_01.png \"old screenshot BASIC Editor\")\n(older version of the editor)\n\n#### Vectrex\n\nThe [Vectrex (Wikipedia)](https://en.wikipedia.org/wiki/Vectrex) is a vector display-based video game console.\nThe Hardware are _only_ the 6809 CPU, a 6522 Versatile Interface Adapter and the AY-3-8912 sound chip.\n\nCurrent state is completely not usable. The 6522 is only a dummy implementation.\nIt makes only sense to display some trace lines, e.g.:\n```\n.../DragonPy$ poetry run DragonPy --verbosity 0 --machine=Vectrex run --trace --max_ops=1\n```\n\n### BASIC Editor\n\nUse \"BASIC editor / open\" in the main menu to open the editor.\n\nYou can load/save ASCII .bas files from you local drive or just type a BASIC listing ;)\nWith \"inject into DragonPy\" you send the current listing from the Editor to the Emulator and with \"load from DragonPy\" back from emulator to editor.\nNote: The is currently no \"warning\" that un-saved content will be \"overwritten\" and there is no \"auto-backup\" ;)\n\nThe \"renumbering\" tool can be found in the editor window under \"tools\"\n\nYou can also run the BASIC Editor without the Emulator:\n```\n.../DragonPy$ make editor\n# or:\n.../DragonPy$ poetry run DragonPy editor\n```\n\nA rudimentary BASIC source code highlighting is available and looks like this:\n\n![screenshot BASIC Editor](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140826_DragonPy_BASIC_Editor_01.png \"screenshot BASIC Editor\")\n\nSpecial feature: The Line number that are used in GOTO, SOGUB etc. are extra marked on the left side.\n\n## installation\n\nIMPORTANT: The **PyPi package** name is **DragonPyEmulator** and [not only \"DragonPy\"](https://github.com/jpanganiban/dragonpy/issues/3)!!!\n```\npip install DragonPyEmulator\n```\n\n### from source\n\n```bash\n~$ git clone https://github.com/jedie/DragonPy.git\n~$ cd DragonPy/\n~/DragonPy$ ./cli.py --help\n```\n\nThe output of `./cli.py --help` looks like:\n\n[comment]: <> (\u2702\u2702\u2702 auto generated main help start \u2702\u2702\u2702)\n```\nUsage: ./cli.py [OPTIONS] COMMAND [ARGS]...\n\n\u256d\u2500 Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 --help Show this message and exit. \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u256d\u2500 Commands \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 download-roms Download/Test only ROM files \u2502\n\u2502 editor Run only the BASIC editor \u2502\n\u2502 gui <<< **start this** - Start the DragonPy tkinter starter GUI \u2502\n\u2502 log-list List all exiting loggers and exit. \u2502\n\u2502 run Run a machine emulation \u2502\n\u2502 update-readme-history Update project history base on git commits/tags in README.md \u2502\n\u2502 version Print version and exit \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n```\n[comment]: <> (\u2702\u2702\u2702 auto generated main help end \u2702\u2702\u2702)\n\n\nThe output of `./cli.py run --help` looks like:\n\n[comment]: <> (\u2702\u2702\u2702 auto generated run help start \u2702\u2702\u2702)\n```\nUsage: ./cli.py run [OPTIONS]\n\n Run a machine emulation\n\n\u256d\u2500 Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 --verbosity INTEGER RANGE [0<=x<=3] Verbosity level; Accepts integer \u2502\n\u2502 value e.g.: \"--verbose 2\" or can be \u2502\n\u2502 count e.g.: \"-vv\" \u2502\n\u2502 [default: 0; 0<=x<=3] \u2502\n\u2502 --trace/--no-trace Create trace lines \u2502\n\u2502 [default: no-trace] \u2502\n\u2502 --max-ops INTEGER If given: Stop CPU after given cycles \u2502\n\u2502 else: run forever \u2502\n\u2502 --machine [CoCo2b|Dragon32|Dragon64|Multicomp Used machine configuration \u2502\n\u2502 6809|Simple6809|Vectrex|sbc09] [default: Dragon32] \u2502\n\u2502 --help Show this message and exit. \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n```\n[comment]: <> (\u2702\u2702\u2702 auto generated run help end \u2702\u2702\u2702)\n\nUsage e.g.:\n```bash\n~/DragonPy$ ./cli.py run\n~/DragonPy$ ./cli.py editor\n```\n\n## ROMs\n\nAll needed ROM files, will be **downloaded automatically**.\n\nThe files will be downloaded from:\n\n| Machine | download url |\n|----------------|--------------|\n| Dragon 32 + 64 | [http://archive.worldofdragon.org/archive/index.php?dir=Software/Dragon/Dragon%20Data%20Ltd/Dragon%20Firmware/](http://archive.worldofdragon.org/archive/index.php?dir=Software/Dragon/Dragon%20Data%20Ltd/Dragon%20Firmware/) |\n| CoCo 2b | [http://www.roust-it.dk/coco/roms/](http://www.roust-it.dk/coco/roms/) |\n| Multicomp | [http://searle.x10host.com/Multicomp/index.html](http://searle.x10host.com/Multicomp/index.html) |\n| Simple6809 | [http://searle.x10host.com/6809/Simple6809.html](http://searle.x10host.com/6809/Simple6809.html) |\n\n`sbc09` and `Vectrex` ROMs are included.\n\nAll ROM files and download will be checked by `SHA1` value, before use.\n\n\n## development\n\nPlease use `dev-cli.py` for development.\n\nThe output of `./dev-cli.py --help` looks like:\n\n[comment]: <> (\u2702\u2702\u2702 auto generated dev help start \u2702\u2702\u2702)\n```\nUsage: ./dev-cli.py [OPTIONS] COMMAND [ARGS]...\n\n\u256d\u2500 Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 --help Show this message and exit. \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u256d\u2500 Commands \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 check-code-style Check code style by calling darker + flake8 \u2502\n\u2502 coverage Run tests and show coverage report. \u2502\n\u2502 fix-code-style Fix code style of all cli_base source code files via darker \u2502\n\u2502 install Run pip-sync and install 'cli_base' via pip as editable. \u2502\n\u2502 mypy Run Mypy (configured in pyproject.toml) \u2502\n\u2502 pip-audit Run pip-audit check against current requirements files \u2502\n\u2502 publish Build and upload this project to PyPi \u2502\n\u2502 test Run unittests \u2502\n\u2502 tox Run tox \u2502\n\u2502 update Update \"requirements*.txt\" dependencies files \u2502\n\u2502 update-readme-history Update project history base on git commits/tags in README.md \u2502\n\u2502 update-test-snapshot-files Update all test snapshot files (by remove and recreate all snapshot \u2502\n\u2502 files) \u2502\n\u2502 version Print version and exit \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n```\n[comment]: <> (\u2702\u2702\u2702 auto generated dev help end \u2702\u2702\u2702)\n\nRun tests, e.g.:\n\n```bash\n~/DragonPy$ ./dev-cli.py coverage\n# or just:\n~/DragonPy$ ./dev-cli.py test\n# or with different Python versions:\n~/DragonPy$ ./dev-cli.py tox\n```\n\n## more screenshots\n\n\"sbc09\" ROM in Tkinter window:\n\n![screenshot sbc09](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/DragonPy_sbc09_01.png \"screenshot sbc09\")\n\n\"Simple6809\" ROM in Tkinter window:\n\n![screenshot simple6809](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/Simple6809_TK_04.PNG \"screenshot simple6809\")\n\n### Dragon Keyboard\n\nThe keyboard mapping is stored into [dragonpy/Dragon32/keyboard_map.py](https://github.com/jedie/DragonPy/blob/main/dragonpy/Dragon32/keyboard_map.py).\n\nSome notes:\n\n* \"CLEAR\" is mapped to \"Home\" / \"Pos 1\" key\n* \"BREAK\" is mapped to \"Escape\" button\n* \"LEFT\" is mapped to left cursor key and to normal backspace, too.\n\nA \"auto shift\" mode is implemented. So normal lowercase letters would be automaticly converted to uppercase letters.\n\n#### paste clipboard\n\nIt is possible to paste the content of the clipboard as user input in the machine.\nJust copy (Ctrl-C) the follow content:\n```\n10 CLS\n20 FOR I = 0 TO 255:\n30 POKE 1024+(I*2),I\n40 NEXT I\n50 I$ = INKEY$:IF I$=\"\" THEN 50\n```\n\nFocus the DragonPy window and use Ctrl-V to paste the content.\n\nLooks like:\n\n![raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140805_DragonPy_Dragon32_Listing.png](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140805_DragonPy_Dragon32_Listing.png \"https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140805_DragonPy_Dragon32_Listing.png\")\n\nThen just **RUN** and then it looks like this:\n\n![raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140805_DragonPy_Dragon32_CharMap.png](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140805_DragonPy_Dragon32_CharMap.png \"https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/20140805_DragonPy_Dragon32_CharMap.png\")\n\n### DragonPy schematic\n```\n Main Thread Sub Thread\n (Tkinter GUI)\n +------------------+ +---------------------+\n | | | |\n | +-------------+ | CPU cycles/sec queue | |\n | | <------------------------------------+6809 CPU |\n | | | | | + ^ |\n | | GUI | | | | | |\n | | | | Display RAM write queue | +--v-----+--+ |\n | | .--------------------------------------------+ Memory | |\n | | | | | | +--+-----^--+ |\n | | | | | | | | |\n | | | | | | +-----v-----+-----+ |\n | | | | | | | Periphery | |\n | | | | | Keyboard queue | | MC6883 SAM | |\n | | | +--------------------------------->MC6821 PIA | |\n | | | | | | | | |\n | +--+-----^----+ | | | | |\n | | | | | +-----------------+ |\n | | | | | |\n | +--v-----+----+ | | |\n | | | | | |\n | | Display | | | |\n | | | | | |\n | +-------------+ | | |\n +------------------+ +---------------------+\n\n```\n\n### performance\n\nThe current implementation is not really optimized.\n\nWith CPython there is round about 490.000 CPU cycles/sec. in console version.\nThis is half as fast as the real Hardware.\n\nWith PyPy round about 6.900.000 - 8.000.000 CPU cycles/sec.\nIn other words with PyPy it's 8 times faster as the real Hardware.\n\ne.g. The Dragon 32 6809 machine with a 14.31818 MHz crystal runs with:\n0,895MHz (14,31818Mhz/16=0,895MHz) in other words: 895.000 CPU-cycles/sec.\n\n## TODO:\n\n\n* implement more Dragon 32 periphery\n* missing 6809 unittests after coverage run:\n * `MUL`\n * `BVS`\n\n## PyDragon32\n\nSome `Python`/`BASIC tools`/`scripts` around `Dragon32/64` / `CoCo` homecomputer.\n\nAll script are copyleft 2013-2020 by Jens Diemer and license unter GNU GPL v3 or above, see LICENSE for more details.\n\n### Python scripts:\n\n\n* PyDC - Convert dragon 32 Cassetts WAV files into plain text:\n * [github.com/jedie/DragonPy/tree/master/PyDC](https://github.com/jedie/DragonPy/tree/master/PyDC)\n* Filter Xroar traces:\n * [github.com/jedie/DragonPy/tree/master/misc](https://github.com/jedie/DragonPy/tree/master/misc)\n\n### BASIC programms:\n\n\n* Simple memory HEX viewer:\n * [github.com/jedie/DragonPy/tree/master/BASIC/HexViewer](https://github.com/jedie/DragonPy/tree/master/BASIC/HexViewer)\n\n\n* Test CC Registers:\n * [github.com/jedie/DragonPy/tree/master/BASIC/TestCC_Registers](https://github.com/jedie/DragonPy/tree/master/BASIC/TestCC_Registers)\n\n#### Input/Output Tests\n\n[/BASIC/InputOutput/keyboard.bas](https://github.com/jedie/DragonPy/tree/master/BASIC/InputOutput/keyboard.bas)\nDisplay memory Locations $0152 - $0159 (Keyboard matrix state table)\n\nExample screenshow with the \"Y\" key is pressed down. You see that this is saved in $0153:\n\n![KeyBoard Screenshot 01](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/keyboard01.png \"KeyBoard Screenshot 01\")\n\nExample with \"U\" is hold down:\n\n![KeyBoard Screenshot 02](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/DragonPy/keyboard02.png \"KeyBoard Screenshot 02\")\n\n## Links\n\n\n* Grant Searle's Multicomp FPGA project:\n * Homepage: [http://searle.x10host.com/Multicomp/](http://searle.x10host.com/Multicomp/)\n * own [dragonpy/Multicomp6809/README](https://github.com/jedie/DragonPy/tree/master/dragonpy/Multicomp6809#readme)\n* Lennart Benschop 6809 Single Board Computer:\n * Homepage: [http://lennartb.home.xs4all.nl/m6809.html](http://lennartb.home.xs4all.nl/m6809.html)\n * own [dragonpy/sbc09/README](https://github.com/jedie/DragonPy/tree/master/dragonpy/sbc09#readme)\n* Grant Searle's Simple 6809 design:\n * Homepage: [http://searle.x10host.com/6809/Simple6809.html](http://searle.x10host.com/6809/Simple6809.html)\n * own [dragonpy/Simple6809/README](https://github.com/jedie/DragonPy/tree/master/dragonpy/Simple6809#readme)\n\nSome links:\n\n\n* [http://www.burgins.com/m6809.html](http://www.burgins.com/m6809.html)\n* [http://www.maddes.net/m6809pm/](http://www.maddes.net/m6809pm/) - Programming Manual for the 6809 microprocessor from Motorola Inc. (now Freescale)\n* [http://www.6809.org.uk/dragon/hardware.shtml](http://www.6809.org.uk/dragon/hardware.shtml)\n* [http://dragondata.worldofdragon.org/Publications/inside-dragon.htm](http://dragondata.worldofdragon.org/Publications/inside-dragon.htm)\n* [http://koti.mbnet.fi/~atjs/mc6809/](http://koti.mbnet.fi/~atjs/mc6809/) - 6809 Emulation Page\n\nSource codes:\n\n\n* [github.com/naughton/mc6809/blob/master/mc6809.ts](https://github.com/naughton/mc6809/blob/master/mc6809.ts)\n* [github.com/maly/6809js/blob/master/6809.js](https://github.com/maly/6809js/blob/master/6809.js)\n* [http://mamedev.org/source/src/mess/drivers/dragon.c.html](http://mamedev.org/source/src/mess/drivers/dragon.c.html)\n* [http://mamedev.org/source/src/mess/machine/dragon.c.html](http://mamedev.org/source/src/mess/machine/dragon.c.html)\n* [http://mamedev.org/source/src/emu/cpu/m6809/m6809.c.html](http://mamedev.org/source/src/emu/cpu/m6809/m6809.c.html)\n* [github.com/kjetilhoem/hatchling-32/blob/master/hatchling-32/src/no/k/m6809/InstructionSet.scala](https://github.com/kjetilhoem/hatchling-32/blob/master/hatchling-32/src/no/k/m6809/InstructionSet.scala)\n\nDragon 32 resources:\n\n\n* Forum: [http://archive.worldofdragon.org/phpBB3/index.php](http://archive.worldofdragon.org/phpBB3/index.php)\n* Wiki: [http://archive.worldofdragon.org/index.php?title=Main_Page](http://archive.worldofdragon.org/index.php?title=Main_Page)\n\n## Credits\n\nSome code based on:\n\n### ApplePy\n\nAn `Apple ][` emulator in Python\n\n* Author: James Tauber\n* [github.com/jtauber/applepy](https://github.com/jtauber/applepy)\n* License: MIT\n\n### XRoar\n\nA really cool Dragon / CoCo emulator\n\n* Author: Ciaran Anscomb\n* [http://www.6809.org.uk/xroar/](http://www.6809.org.uk/xroar/)\n* License: GNU GPL v2\n\n### included Python modules:\n\n#### python-pager\n\nPage output and find dimensions of console.\n\n* Author: Anatoly Techtonik\n* License: Public Domain\n* Homepage: [bitbucket.org/techtonik/python-pager/](https://bitbucket.org/techtonik/python-pager/)\n* Stored here: [/dragonpy/utils/pager.py](https://github.com/jedie/DragonPy/blob/main/dragonpy/utils/pager.py)\n\n#### srecutils.py\n\nMotorola S-Record utilities\n\n* Author: Gabriel Tremblay\n* License: GNU GPL v2\n* Homepage: [github.com/gabtremblay/pysrec](https://github.com/gabtremblay/pysrec)\n* Stored here: [/dragonpy/utils/srecord_utils.py](https://github.com/jedie/DragonPy/blob/main/dragonpy/utils/srecord_utils.py)\n\n### requirements\n\n#### dragonlib\n\nDragon/CoCO Python Library\n\n* Author: Jens Diemer\n* [pypi.org/project/DragonLib/](https://pypi.org/project/DragonLib/)\n* [github.com/6809/dragonlib](https://github.com/6809/dragonlib)\n* License: GNU GPL v3\n\n#### MC6809\n\nImplementation of the MC6809 CPU in Python\n\n* Author: Jens Diemer\n* [pypi.org/project/MC6809](https://pypi.org/project/MC6809)\n* [github.com/6809/MC6809](https://github.com/6809/MC6809)\n* License: GNU GPL v3\n\n#### pygments\n\ngeneric syntax highlighter\n\n* Author: Georg Brandl\n* [pypi.org/project/Pygments](https://pypi.org/project/Pygments)\n* [http://pygments.org/](http://pygments.org/)\n* License: BSD License\n\n\n## Make new release\n\nWe use [cli-base-utilities](https://github.com/jedie/cli-base-utilities#generate-project-history-base-on-git-commitstags) to generate the history in this README.\n\n\nTo make a new release, do this:\n\n* Increase your project version number\n* Run tests to update the README\n* commit the changes\n* Create release\n\n\n## History\n\n[comment]: <> (\u2702\u2702\u2702 auto generated history start \u2702\u2702\u2702)\n\n* [v0.9.3](https://github.com/jedie/DragonPy/compare/v0.9.2...v0.9.3)\n * 2024-09-24 - Remove manageprojects from normal dependencies, it's not needed ;)\n * 2024-09-24 - Update CoCo2b ROM url info\n * 2024-09-24 - Update project setup + Use humanize from MC6809\n * 2024-09-24 - Update requirements\n* [v0.9.2](https://github.com/jedie/DragonPy/compare/v0.9.1...v0.9.2)\n * 2024-04-16 - Bugfix packaging\n * 2024-04-16 - Update requirements and apply manageproject updates\n * 2024-02-09 - Update requirements\n * 2024-01-16 - Update requirements + fix code style\n * 2023-12-17 - Fix code style and typos\n * 2023-12-17 - Don't slow down tests because of mass DEBUG log output\n * 2023-12-17 - Apply manageprojects updates\n* [v0.9.1](https://github.com/jedie/DragonPy/compare/v0.9.0...v0.9.1)\n * 2023-11-03 - Fix CI\n * 2023-11-03 - Apply manageprojects updates\n * 2023-11-03 - fix test_tokens_in_string()\n * 2023-11-03 - Auto generate README history\n * 2023-11-03 - Use https://github.com/jedie/cli-base-utilities\n * 2023-11-02 - Bump pip from 23.2.1 to 23.3\n* [v0.9.0](https://github.com/jedie/DragonPy/compare/v0.8.0...v0.9.0)\n * 2023-08-05 - fix publish\n * 2023-08-05 - Split CLI and dev-CLI + remove Python 3.9 support\n * 2023-03-07 - update requirements\n * 2023-03-07 - Update README\n\n<details><summary>Expand older history entries ...</summary>\n\n* [v0.8.0](https://github.com/jedie/DragonPy/compare/v0.7.0...v0.8.0)\n * 2023-03-07 - Update README.md\n * 2023-03-06 - Migrate to pip-tools via https://github.com/jedie/manageprojects\n * 2022-10-19 - update requirements\n * 2022-09-11 - Add mandelbrot2.bas\n * 2022-09-11 - Add mandelbrot1.bas listing\n * 2022-08-22 - README.creole -> README.md + update requirements + add some tests\n * 2022-08-22 - cache ~/.cache/\n * 2022-08-22 - don't delete ROM files in tests\n * 2022-08-22 - small code style updates\n * 2022-08-22 - project updates\n * 2022-02-01 - Move click cli commands to devshell\n * 2022-01-31 - +'pip cache information'\n * 2022-01-31 - fix code style\n * 2022-01-31 - Temporary speedup github actions by make the matix smaller ;)\n * 2022-01-31 - Remove linting action -> Obsolete because linting is done via pytest plugin\n * 2022-01-31 - Download ROMs before starting tests (should be cached)\n * 2022-01-31 - Deny any requests in tests via autouse pytest fixtures\n * 2022-01-31 - Display output on error\n * 2022-01-31 - Bugfix: Exist on CLI usage\n * 2022-01-30 - remove a PytestCollectionWarning\n * 2022-01-30 - Fix code styles\n * 2022-01-30 - update utils.py\n * 2022-01-30 - fix format\n * 2022-01-30 - fix meta config stuff\n * 2022-01-30 - Refacotor \"download_roms\" from old CLI into a dev-shell command\n * 2022-01-30 - remove nose test from CLI\n * 2022-01-30 - Use dev-shell\n * 2022-01-30 - Cache pip+roms\n* [v0.7.0](https://github.com/jedie/DragonPy/compare/v0.6.0...v0.7.0)\n * 2020-10-01 - update README\n * 2020-10-01 - Update windows tk work-a-round: https://github.com/pypa/virtualenv/issues/93\n * 2020-10-01 - update vectrex\n * 2020-10-01 - Bugfix \"--max_ops\" cli options\n * 2020-10-01 - Update ROM download URLs for CoCo2b, Multicomp6809 and Simple6809\n * 2020-10-01 - Update Dragon 32/64 ROM download urls\n * 2020-10-01 - Bugfix rom download error handling\n * 2020-10-01 - Handle ROM download errors\n * 2020-10-01 - add more \"make\" targets\n * 2020-10-01 - WIP: fix github actions\n * 2020-10-01 - add \"make run\" to start the GUI\n * 2020-10-01 - Remove Python 2 code + Fix code style and most of the flake8 errors\n * 2020-10-01 - update requirements\n * 2020-10-01 - add \"make update\"\n * 2020-02-10 - Update pythonapp.yml\n * 2020-02-10 - apply pyupgrate + code style\n * 2020-02-10 - apply code style\n * 2020-02-10 - fixup! remove bootstrap files\n * 2020-02-10 - run 2to3 and make minimal updates to get the tests running and pass\n * 2020-02-10 - remove bootstrap files\n * 2020-02-10 - WIP: modernize project setup\n* [v0.6.0](https://github.com/jedie/DragonPy/compare/v0.5.3...v0.6.0)\n * 2018-06-19 - Fix \"No module named 'nose'\" on normal PyPi installation\n * 2018-06-19 - +build.log\n * 2018-06-19 - https://pypi.python.org/pypi/ -> https://pypi.org/project/\n * 2018-06-19 - +python-creole\n * 2018-06-19 - +twine\n * 2018-06-19 - update setup.py publish code\n * 2018-06-19 - Update README.creole\n * 2016-08-22 - fix screenshot links\n * 2016-08-22 - update boot file\n * 2016-08-22 - bugfix in git url\n * 2015-10-20 - update readme/version number\n * 2015-10-19 - update mc6809 req.\n * 2015-10-19 - update Simple6809 unittests\n * 2015-10-19 - * changed name of machine in comments\n * 2015-10-19 - * some more bugfixes\n * 2015-10-18 - * corrected error when trying to write to ROM * small fixes to be able to run Simple6809\n * 2015-09-03 - changes for new mc6809 register API\n * 2015-09-03 - changed in MC6809\n * 2015-08-31 - add 'nosetest' to cli (used by MC6809)\n* [v0.5.3](https://github.com/jedie/DragonPy/compare/v0.5.2...v0.5.3)\n * 2015-08-24 - Update README, release as v0.5.3\n * 2015-08-24 - last versions are needed\n * 2015-08-24 - Update \"speed limit\" stuff. TODO: refactor this completely!\n * 2015-08-24 - Update .travis.yml\n * 2015-08-21 - fix unittest in py2\n* [v0.5.2](https://github.com/jedie/DragonPy/compare/v0.5.1...v0.5.2)\n * 2015-08-21 - update README and release as v0.5.2\n * 2015-08-21 - Better starter solution, squashed commit of the following:\n * 2015-08-20 - remove obsolete scripts\n * 2015-08-20 - Add run 'MC6809 benchmark' button\n * 2015-08-19 - update README\n* [v0.5.1](https://github.com/jedie/DragonPy/compare/v0.5.0...v0.5.1)\n * 2015-08-19 - bugfix e.g.: keyboard input in \"sbc09\" emulation\n * 2015-08-19 - add a note for \"png font parser code\" remove, see:\n * 2015-08-19 - remove font generator code\n * 2015-08-19 - fix doctest\n * 2015-08-19 - remove own copy of png.py\n * 2015-08-19 - updates/cleanup/remove obsolete code\n * 2015-08-19 - run tests also with PyPy3\n * 2015-08-19 - use nose to run unittests\n * 2015-08-19 - move \"create statusbar\"\n * 2015-08-19 - Add a button to \"run only BASIC editor\" and display python version info\n * 2015-08-19 - +=== requirement\n * 2015-08-19 - remove test_run()\n * 2015-08-19 - add a \"starter GUI\" + work-a-round for tkinter usage with virtualenv under windows\n * 2015-08-18 - PyPi package name is: \"DragonPyEmulator\" !\n * 2015-08-18 - cleanup list\n* [v0.5.0](https://github.com/jedie/DragonPy/compare/v0.4.0...v0.5.0)\n * 2015-08-18 - WIP: add compare links\n * 2015-08-18 - update setup \"publish\" from:\n * 2015-08-18 - use branches blacklist\n * 2015-08-18 - refactory ROM downloads:\n * 2015-08-17 - update to new bootstrap_env API\n * 2015-08-17 - Update README.creole\n * 2015-06-09 - update bootstrap\n* [v0.4.0](https://github.com/jedie/DragonPy/compare/v0.3.2...v0.4.0)\n * 2015-05-26 - -travis-pro\n * 2015-05-26 - Bugfix components imports\n * 2015-05-26 - recover old files from 2ec642f412caf8e30da1489617b9e8448a899c63\n * 2015-05-26 - download ROMs so every tests can be run\n * 2015-05-26 - used recovered rom.py\n * 2015-05-26 - recover old rom.py file from:\n * 2015-05-26 - nicer test call\n * 2015-05-26 - update travis config\n * 2015-05-26 - use setup.py entry_points for dragonpy.core.cli\n * 2015-05-26 - +wheel & update bootstrap file\n * 2015-05-26 - relase as 0.4.0\n * 2015-05-26 - add publish\n * 2015-05-26 - MC6809\n * 2015-05-26 - remove 6809 stuff and use https://github.com/6809/MC6809\n * 2015-05-20 - Add help text\n * 2015-05-20 - remove PyDev configs\n * 2015-05-20 - update shell startup scripts\n * 2015-05-20 - update README\n * 2015-05-20 - Add better error messages\n * 2015-05-20 - Update README.creole\n * 2015-05-20 - update travis-ci.org config\n * 2015-05-20 - move/rename cli code adn remove obsolete code\n * 2015-05-20 - Bugfix CLI and tests for it\n * 2015-05-20 - update bootstrap\n * 2015-05-20 - reanem Click -> click\n * 2015-01-28 - start to reimplement the CLI with \"Click\"\n * 2015-01-28 - Add bootstrap files - TODO: Update README ;)\n* [v0.3.2](https://github.com/jedie/DragonPy/compare/v0.3.1...v0.3.2)\n * 2014-12-15 - use pygments syntax highlighter in BASIC editor\n * 2014-12-06 - Update .travis.yml\n * 2014-12-06 - Update README.creole\n * 2014-11-13 - 'dragonlib' as dependency\n * 2014-11-13 - outsource dragonlib:\n * 2014-11-13 - move LOG_LEVELS\n* [v0.3.1](https://github.com/jedie/DragonPy/compare/v0.3.0...v0.3.1)\n * 2014-10-08 - Bugfix for ReSt\n * 2014-10-08 - update README\n * 2014-10-08 - Add a setup.cfg\n * 2014-09-30 - Bugfix copy&paste: e.g.: double paste\n * 2014-09-30 - WIP: BASIC editor: reformat code\n * 2014-09-30 - add more info\n * 2014-09-30 - Bugfix\n * 2014-09-30 - add some alive \"loading...\" info\n * 2014-09-30 - use tkinter event.keysym for special keys\n * 2014-09-30 - WIP: TextHighlight\n * 2014-09-30 - add copy&paste in BASIC editor\n * 2014-09-30 - Bugfix renum tool + renum INVADER.bas\n * 2014-09-30 - PY3 bugfix\n * 2014-09-30 - activate undo in BASIC editor\n * 2014-09-30 - More enhanced \"display tokens\" in editor\n * 2014-09-30 - Bugfix if line number > $ff\n * 2014-09-30 - Add a more informative \"display tokens\" window\n * 2014-09-30 - Display also datum\n * 2014-09-29 - Add vertical scrollbar to basic editor and disable wrap\n * 2014-09-29 - add origin INVADER.bas from Jim Gerrie:\n * 2014-09-29 - don't open settings dialog\n * 2014-09-29 - moved BASIC files\n * 2014-09-29 - display more info on overflow error\n * 2014-09-29 - move BASIC programs\n * 2014-09-14 - ignore lines without address\n * 2014-09-14 - Bugfix: Handle lines without CC e.g.: [RESET], [IRQ]\n * 2014-07-31 - Update README.creole\n * 2014-07-31 - add /InputOutput/keyboard.bas\n * 2014-07-26 - WIP: xroar GDB\n * 2014-07-12 - add \"--add_cc\"\n * 2014-07-10 - WIP\n * 2014-07-10 - new filter: \"filter_xroar_trace.py --start-stop=8c37-91c1\"\n * 2014-07-10 - add \"filter_xroar_trace.py --unique\" function\n * 2014-07-10 - Display status on live filtering\n * 2014-07-10 - Use a simple cache for big speedup.\n * 2014-07-09 - add \"add_info_in_trace.py\"\n * 2014-07-09 - add live filter\n * 2014-07-09 - Add CLI to xroar filter script and add README\n * 2014-07-09 - WIP: xroar trace filter script.\n * 2014-07-08 - WIP: FPA0 test\n * 2014-06-27 - update TST\n * 2014-06-27 - Add NEGA test\n * 2013-10-25 - add CC test with LSL\n * 2013-10-24 - Add CC test with TST\n * 2013-10-24 - update CC test with INC\n * 2013-10-24 - Add CC test with DEC\n * 2013-10-24 - update CC test with SUBA\n * 2013-10-24 - Update CC test with ADDA\n * 2013-10-22 - add gaps to ASCII files\n * 2013-10-22 - nicer output + add screenshot\n * 2013-10-21 - clear CC before INC\n * 2013-10-21 - add a CC test with INC\n * 2013-10-16 - Skip empty lines (e.g. XRoar need a empty line at the end)\n * 2013-10-11 - add two more CC test files\n * 2013-10-11 - \"overwrite\" prints are faster and nicer ;)\n * 2013-10-11 - add screenshots\n * 2013-10-11 - Add BASIC programm: Test CC Registers\n * 2013-10-04 - start a simple memory hex viewer\n * 2013-09-09 - split output in blocks with a max size of 255Bytes\n * 2013-09-09 - add '--case_convert' cli parameter. See README\n * 2013-09-09 - remove official example\n * 2013-09-09 - * Use one convert() method for all ways. * Move some convert code into Cassette() class * code cleanup * update README\n * 2013-09-09 - remove BASIC code end terminator, seems it's not needed.\n * 2013-09-09 - Bugfixes: * Use GAP-Flag for ASCII BASIC * Don't yield magic byte at block end * Don't yield machine code starting/loading address in BASIC files\n * 2013-09-07 - handle wav/cas with code in more than one block\n * 2013-09-07 - set \"machine code start/load address\" from filename See: http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=8&t=4341&p=9094#p9094\n * 2013-09-06 - display more info, if block type unknown.\n * 2013-09-06 - bugfix: .cas file must not have leadin bytes between blocks.\n * 2013-09-06 - log.info: gap flag / machine code starting/loading address\n * 2013-09-06 - Binary machine code file is 0x02 and not 0xff, isn't it?\n * 2013-09-06 - bugfix if only bit 1 or bit 0 found.\n * 2013-09-06 - Add Frequency of bit 1 / 0 in cli\n * 2013-09-02 - use defaults in CLI from config\n * 2013-09-06 - bas2wav works better, but some bugs not fixed, yet...\n * 2013-09-06 - add a \"step-by-step\" bas2cas unittest\n * 2013-09-06 - add unittests for bas2cas -> cas2bas\n * 2013-09-06 - cleanup imports\n * 2013-09-06 - catch BASIC code end\n * 2013-09-06 - debug block content\n * 2013-09-06 - Bugfix for wrong checksum\n * 2013-09-05 - update cas2bas\n * 2013-09-05 - start cas2bas\n * 2013-09-04 - add bas2cas\n * 2013-09-04 - bugfix in bas2wav, but still don't work, yet :(\n * 2013-09-04 - use duration instead of Hz to trigger bits\n * 2013-09-04 - move min/max Hz to method\n * 2013-09-04 - yield only duration in trigger\n * 2013-08-31 - Display process info while analyze, too.\n * 2013-08-31 - merge --analyze function\n * 2013-08-30 - bugfix: catch IndexError, too.\n * 2013-08-30 - Bugfix: use of logfilename\n * 2013-09-03 - display start/end\n * 2013-08-30 - display absolute wave position\n * 2013-08-30 - implement bas2wave ;) But seems the stream is not valid, yet :(\n * 2013-08-30 - code cleanup\n * 2013-09-03 - better test output\n * 2013-08-30 - consume magic byte in bitstream, too.\n * 2013-09-02 - add working state top master\n * 2013-08-28 - code cleanup: * move some settings into config files * create a wav2bad() function and use it in CLI\n * 2013-08-28 - Display and check the block checksum\n * 2013-08-28 - bigger Sync-Byte search sizes, e.g. for: \"Dragon Data Ltd - Examples from the Manual - 39~58 [run].wav\"\n * 2013-08-27 - Add a command line interface\n * 2013-08-27 - add a 'average sample' function, but turn it off is the best idea ;)\n * 2013-08-27 - Implement a new trigger that works! See: http://www.python-forum.de/viewtopic.php?p=244702#p244702 (de)\n * 2013-08-27 - bit-sync on every block start\n * 2013-08-26 - Many bugfixes. Start implementing code for BAS2WAV, but now only for debugging.\n * 2013-08-26 - Works as stream processing, but only with \"HelloWorld1 xroar.wav\", yet.\n * 2013-08-26 - commit broken state\n * 2013-08-25 - commit current broken state\n * 2013-08-25 - bugfix if wave is in 8-bit\n * 2013-08-23 - current state with \"auto sync\"\n * 2013-08-23 - Use a 'text level meter' for better debugging\n * 2013-08-22 - current broken state\n * 2013-08-22 - sync works, but useless?\n * 2013-08-22 - add a new implementation of wave2bitstream like a schmitt trigger\n * 2013-08-21 - check block_length in BASIC code parsing\n * 2013-08-21 - ASCII BASIC parser works now.\n * 2013-08-20 - start to support ASCII BASIC files, but not done, yet.\n * 2013-08-20 - bytes2codeline(): even easier\n * 2013-08-20 - move files\n * 2013-08-20 - Initial commit\n * 2013-08-20 - Handle pointer and line numbers in the right way.\n * 2013-08-20 - use array instead of struct.unpack for getting wave values\n * 2013-08-19 - Use MAX_HZ_VARIATION to seperate bit 1 or bit 0 display some statistics of bit detection\n * 2013-08-18 - refactor reading\n * 2013-08-18 - support 32Bit wave files, too. Why? Don't know... ;)\n * 2013-08-18 - bugfix in unpack wav frames\n * 2013-08-18 - Speedup by reading WAVE in blocks\n * 2013-08-18 - handle 'function tokens'\n * 2013-08-18 - add status while reading WAV file.\n * 2013-08-17 - parse the file content. Put data into objects.\n * 2013-08-17 - add a filename block class\n * 2013-08-17 - remove unused code\n * 2013-08-16 - Use sync byte to get the real start of a block. Get and use block type/size, too.\n * 2013-08-16 - Add BASIC_TOKENS dict and use it. Add TEST_STR and try to find it.\n * 2013-08-16 - I see a HELLO WORLD! ;)\n * 2013-08-15 - cut out the relevant data\n * 2013-08-15 - add a script to convert dragon 32 Cassetts WAV files into plain text.\n* [v0.3.0](https://github.com/jedie/DragonPy/compare/v0.2.0...v0.3.0)\n * 2014-09-25 - Bugfix sbc09 unittest\n * 2014-09-25 - Update README\n * 2014-09-25 - Reimplement SBC09 ;)\n * 2014-09-25 - Split Op data - Squashed commit of the following:\n * 2014-09-24 - Disable some log output and update pypy win batches\n * 2014-09-24 - display_queue -> display_callback\n * 2014-09-22 - code cleanup and disable some log output\n * 2014-09-22 - move ROM load code\n * 2014-09-22 - code cleanup\n * 2014-09-22 - log only missing ROM files.\n * 2014-09-22 - file rename and remove obsolete files\n * 2014-09-22 - move CPU utils\n * 2014-09-22 - use COUNT variable\n * 2014-09-22 - add some windows startup batches\n * 2014-09-22 - update direct test\n * 2014-09-22 - Don't raise error, if dump doesn't include address...\n * 2014-09-22 - update unittest\n * 2014-09-22 - move MC6809data\n * 2014-09-22 - ignore .idea/*\n * 2014-09-22 - update to new API\n * 2014-09-22 - Better default log formatter\n * 2014-09-22 - less logging output\n * 2014-09-18 - Bugfix unittest\n * 2014-09-18 - Update CLI unittest\n * 2014-09-18 - Quick work-a-round for unittests\n * 2014-09-18 - update test_run()\n * 2014-09-18 - display more info if e.g. the ROM loaded into a wrong area\n * 2014-09-18 - reimplement Multicomp 6809 !\n * 2014-09-18 - abort if ROM file missing\n * 2014-09-18 - change logging setup\n * 2014-09-14 - nicer log output\n * 2014-09-14 - updat etimer test script\n * 2014-09-14 - Bugfix for IRQ:\n * 2014-09-14 - Update README, see also:\n* [v0.2.0](https://github.com/jedie/DragonPy/compare/v0.1.0...v0.2.0)\n * 2014-09-14 - Release v0.2.0\n * 2014-09-14 - set default directory in editor + display filename in title\n * 2014-09-14 - bugfix runtime\n * 2014-09-13 - display python version info in status line\n * 2014-09-13 - code cleanup\n * 2014-09-13 - bugfix for Py2\n * 2014-09-13 - add python major version number to pickle files\n * 2014-09-13 - update linux dev scripts\n * 2014-09-13 - Update unittests in dragonlib, too.\n * 2014-09-13 - reimplement: Run CPU not faster than given speedlimit\n * 2014-09-13 - update unitests\n * 2014-09-13 - bugfix six.moves.xrange\n * 2014-09-13 - remove old multiprocessing files\n * 2014-09-13 - use xrange from six.py\n * 2014-09-13 - --version for python 2 and 3\n * 2014-09-12 - replace own lib2and3 with six\n * 2014-09-12 - WIP: refactor logging usage\n * 2014-09-12 - WIP: cpu run\n * 2014-09-11 - WIP: A new, KISS solution?\n * 2014-09-11 - doesnt needed\n * 2014-09-11 - Start, refactoring memory:\n * 2014-09-09 - add more comments into PIA\n * 2014-09-08 - merge code\n * 2014-09-08 - add \"target CPU burst loops\" to GUI config\n * 2014-09-08 - implement a callback mechanism which trigger the CPU cycles\n * 2014-09-07 - WIP: Implement IRQ\n * 2014-09-08 - log TIMER read/write\n * 2014-09-08 - update CoCo2b to newer API\n * 2014-09-08 - align text to the left\n * 2014-09-08 - see that's running\n * 2014-09-08 - put \"max_run_time\" also in the config GUI\n * 2014-09-11 - fix ReSt generation?\n * 2014-09-11 - remove obsolete files\n * 2014-09-11 - use array.array(\"B\", ...) for RAM/ROM memory\n * 2014-09-11 - Add callback/middleware tests to write byte, too.\n * 2014-09-11 - better tracebacks by using reraise\n * 2014-09-11 - Bugfix in unittest...\n * 2014-09-10 - Bugfix: reopen config dialog\n * 2014-09-10 - use --verbosity 99 in coco .sh, too\n * 2014-09-09 - add --verbosity 99 to CLI\n * 2014-09-07 - A better speedlimit solution. TODO: Codecleanup\n * 2014-09-07 - WIP: Better speed limit\n * 2014-09-07 - add a not really good working speedlimit\n * 2014-09-05 - update setup.py\n* [v0.1.0](https://github.com/jedie/DragonPy/compare/80f221b...v0.1.0)\n * 2014-09-05 - WIP: Release as v0.1.0\n * 2014-09-05 - include free v09.rom and vectrex ROM\n * 2014-09-05 - move sbc09 rom\n * 2014-09-05 - update sbc09 stuff:\n * 2014-09-05 - Remove Multicomp-/Simple 6809 ROMs and update download script.\n * 2014-09-05 - split download ROMs scripts\n * 2014-09-05 - include scripts\n * 2014-09-05 - skip unittest if ROM files missing\n * 2014-09-05 - ignore /dist/\n * 2014-09-05 - remove obsolete files\n * 2014-09-05 - include some more files\n * 2014-09-05 - Use python-creole to generate ReSt README on the fly, see:\n * 2014-09-05 - bugfix renum\n * 2014-09-05 - move DragonPy commands\n * 2014-09-05 - Faster paste input processing\n * 2014-09-05 - open editor only one time\n * 2014-09-05 - nicer initial position\n * 2014-09-05 - better initial position of the editor window\n * 2014-09-05 - make \"BASIC editor\" menu entry to a clickable command\n * 2014-09-05 - importand here for Python 2\n * 2014-09-05 - implemend \"hard reset\"\n * 2014-09-05 - implement CPU soft reset\n * 2014-09-05 - Add CPU pause/resume\n * 2014-09-05 - display \"startup XXX...\" in status line on start\n * 2014-09-05 - doesn't happen\n * 2014-09-05 - set --loops 10\n * 2014-09-05 - Just add the alternative commented\n * 2014-09-05 - Simple loop optimizing\n * 2014-09-05 - little more information on error\n * 2014-09-04 - Update README.creole\n * 2014-09-04 - update dev .cmd files\n * 2014-09-04 - Work-a-round for https://bitbucket.org/pypy/pypy/issue/1858/pypy3-localeformat-d-val-1\n * 2014-09-04 - \"revered\" https://github.com/jedie/DragonPy/commit/803f901a03f55d96d621e3bc266ff0d67d8a6225\n * 2014-09-04 - remove from __future__ import unicode_literals\n * 2014-09-04 - Adjust CPU burst count dynamically.\n * 2014-09-04 - work-a-round for Py2: className can't be unicode\n * 2014-09-04 - unify dev start scripts\n * 2014-09-04 - update unittests\n * 2014-09-04 - remove threading stuff and use only tkinter after\n * 2014-09-04 - change grammar version in PyDev\n * 2014-09-04 - rename basic examples\n * 2014-09-04 - bugfix string.letters vs. string.ascii_letters\n * 2014-09-03 - bugfix cli unittest\n * 2014-09-03 - change print to log output\n * 2014-09-03 - explizit close\n * 2014-09-03 - log.warn() -> log.warning()\n * 2014-09-03 - Update README\n * 2014-09-03 - add a simple CLI test\n * 2014-09-03 - Add a simple benchmark\n * 2014-09-03 - use '{:n}'.format(val) for formating cycles/sec\n * 2014-09-03 - add .pyo\n * 2014-09-03 - code cleanup\n * 2014-09-03 - bugfix if run with -OO\n * 2014-09-03 - format cyltes/sec number (thousands seperator)\n * 2014-09-03 - print all catched Ops vial decorator\n * 2014-09-03 - bugfix running CoCo from CLI\n * 2014-09-03 - use: python -m unittest discover\n * 2014-09-03 - updates: supported Python versions\n * 2014-09-03 - predefine files types in open/save dialog\n * 2014-09-03 - chnages to support python 2 and 3 with the same code\n * 2014-09-03 - changes to run with python2 and __future__ imports\n * 2014-09-03 - just run 2to3 script\n * 2014-09-01 - WIP: port parts from JSVecX by Chris Smith alias raz0red\n * 2014-08-31 - WIP: Just add dummy code for Vectrex\n * 2014-08-28 - nicer colors\n * 2014-08-28 - merge/move BASIC examples files\n * 2014-08-28 - save/restore cursor and scroll position while renumbering\n * 2014-08-28 - split code parts\n * 2014-08-28 - better resize editor\n * 2014-08-28 - comment test code\n * 2014-08-28 - Highlight line numbers and more the just one\n * 2014-08-28 - First, simple code highlighting\n * 2014-08-28 - Don't consume spaces between line number and code\n * 2014-08-28 - highligth the current line in editor\n * 2014-08-28 - Add MultiStatusBar and display current column/line\n * 2014-08-28 - Better \"invert shift\" solution\n * 2014-08-28 - made BASIC Editor runable via CLI\n * 2014-08-27 - reimplement the CLI, today only for Dragon32/64 and CoCo\n * 2014-08-27 - WIP: move startup code\n * 2014-08-27 - move machine.py\n * 2014-08-27 - typo in README\n * 2014-08-27 - Add \"inject + RUN\" and output messages via user_input_queue\n * 2014-08-27 - Activate \"invert Shift\" in BASCI Editor\n * 2014-08-27 - add history to README\n * 2014-08-27 - debug output the addresses in CoCo, too\n * 2014-08-27 - Bugfix: CoCo used the same default start address\n * 2014-08-27 - update CoCo tokens with Extended Color BASIC 1.1\n * 2014-08-27 - Update ROM download stuff:\n * 2014-08-26 - split ROM cfg, so that it can be loaded more than one ROM file:\n * 2014-08-26 - only code formatting\n * 2014-08-26 - Bugfix for machione crash if None would be handled as a byte value\n * 2014-08-26 - Display full traceback if CPU raised a error\n * 2014-08-26 - raise error if perifery return None\n * 2014-08-20 - bugfix example prompt\n * 2014-08-20 - add CoCo info to README\n * 2014-08-20 - enhanced the hex viewer program\n * 2014-08-20 - renumber hex_view01.bas\n * 2014-08-20 - add original Hex Viewer script from:\n * 2014-08-20 - add ListVariables.bas by sorchard\n * 2014-08-20 - CoCo used a other default program start address than dragon\n * 2014-08-20 - \"typo\"\n * 2014-08-20 - + 0xff80: \"SGN\"\n * 2014-08-20 - WIP: Support CoCo in editor\n * 2014-08-20 - Add BASIC example programs\n * 2014-08-20 - do the ' <-> :' and ELSE <-> :ELSE replacement internaly\n * 2014-08-20 - Use the new BASIC parser - TODO: Code cleanup!\n * 2014-08-20 - convert line number to int\n * 2014-08-20 - rename format functions\n * 2014-08-20 - add a BASIC parser with unittests\n * 2014-08-20 - code formating\n * 2014-08-18 - Add TODO unittests\n * 2014-08-18 - Better debug output\n * 2014-08-18 - better log output while load/inject BASIC program\n * 2014-08-18 - catch exception in unitest while running CPU\n * 2014-08-18 - handle KeyboardInterrupt in GUI\n * 2014-08-18 - Bugfix: support ON...GOTO and ON...GOSUB in renumbering\n * 2014-08-17 - add another renum unittest +code cleanup\n * 2014-08-17 - add \"renumber listing\" tool in editor\n * 2014-08-17 - TODO: Don't replace reversed words into tokens in comments and strings.\n * 2014-08-17 - bugfix: 'Cfg' object has no attribute 'memory_word_middlewares'\n * 2014-08-16 - Bugfix in inject BASIC program:\n * 2014-08-16 - Set cursor at start after insert\n * 2014-08-16 - remove edit window border\n * 2014-08-16 - use ScrolledText and implement load/save\n * 2014-08-16 - WIP: move dump/load stuff into editor\n * 2014-08-15 - WIP: split project: BASIC editor\n * 2014-08-15 - WIP: start splitting project: add \"dragonlib\"\n * 2014-08-14 - disable logging for run all unittests\n * 2014-08-14 - Add extract BASIC program unittest\n * 2014-08-14 - better use X instead of @\n * 2014-08-14 - bugfix unittest init\n * 2014-08-14 - Bugfix: skip unittests if d32.rom not exists\n * 2014-08-14 - Start unittests with Dragon 32 ROM ;)\n * 2014-08-13 - transfert BASIC listing from editor into RAM worked!!!\n * 2014-08-13 - create a base test case only with some assertments\n * 2014-08-13 - move signed routines and...\n * 2014-08-12 - WIP: convert BASIC code to tokens\n * 2014-08-12 - bugfix display BASIC code:\n * 2014-08-11 - WIP: BASIC editor...\n * 2014-08-11 - no highlight border around canvas\n * 2014-08-10 - WIP: GUI communication with CPU\n * 2014-08-10 - add missed rom info\n * 2014-08-08 - rename MC6847_TextModeCanvas\n * 2014-08-08 - add some comments and code cleanup\n * 2014-08-08 - use canvas.itemconfigure() to replace char-images\n * 2014-08-08 - disable PUSH log in CPU\n * 2014-08-08 - add %(processName)s %(threadName)s to default log formatter\n * 2014-08-07 - calculate cycles/sec in GUI\n * 2014-08-07 - WIP: change queue stuff to work also with PyPy\n * 2014-08-07 - move some currently not useable files\n * 2014-08-07 - chnage queue.put_nowait() to queue.put()\n * 2014-08-07 - update root on change and add more log outputs\n * 2014-08-07 - Bugfix: accessing cpu.cycles in CPUStatusThread\n * 2014-08-07 - add DragonPy schematic in README\n * 2014-08-07 - better Queue communication:\n * 2014-08-07 - cleanup machine start stuff\n * 2014-08-07 - reformat code with E124,E128,E301,E309,E501\n * 2014-08-07 - WIP: seperate GUI and machine in different threads\n * 2014-08-07 - move CPU into seperate thread\n * 2014-08-06 - Support CoCo keyboard input!\n * 2014-08-06 - Work-a-round for CoCo input\n * 2014-08-06 - add more coco rom variants\n * 2014-08-06 - Add CoCo ROM into download script\n * 2014-08-06 - add RND() seed debug output also to CoCo config\n * 2014-08-06 - add RND() seed debug output\n * 2014-08-06 - bugfix in memory middleware\n * 2014-08-06 - read first the high-byte\n * 2014-08-06 - Update code around \"reset vector\":\n * 2014-08-06 - use memory.add_write_byte_middleware() and not a \"own display RAM\"\n * 2014-08-06 - move periphery memory hocks directly into memory\n * 2014-08-06 - disable keyboard debug middleware in Dragon 32 config\n * 2014-08-06 - rename memory callbacks to middlewares and now they can manipulate the byte\n * 2014-08-05 - WIP: Add CoCo\n * 2014-08-05 - Add info about broken CLI\n * 2014-08-05 - display CPU cycle output in Dragon32\n * 2014-08-05 - Bugfix in sbc09\n * 2014-08-05 - Update Dragon32_test.py + Add machine name in title\n * 2014-08-05 - nicer debug output while paste\n * 2014-08-05 - split cpu loop and status update\n * 2014-08-04 - Add the missing block chars. Add padding direct to the char dict\n * 2014-08-04 - ./Dragon64_test.py worked!\n * 2014-08-04 - ignore *.rom files\n * 2014-08-04 - WIP: save not working state\n * 2014-08-03 - use img.zoom() instead of \"own scale\"\n * 2014-08-03 - Faster without self.root.update()\n * 2014-08-03 - WIP: Use Tkinter instead of pygame?\n * 2014-08-03 - generate a dict with font info\n * 2014-08-03 - move display_cycle_interval() into CPU\n * 2014-08-03 - update to new API\n * 2014-08-03 - WIP: Split byte/word in periphery\n * 2014-08-03 - add TODO: Use PyGame event.scancode / Tkinter event.keycode constants\n * 2014-08-03 - use auto_shift parameter in test, too.\n * 2014-08-02 - typo in comment\n * 2014-08-02 - add info to Dragon Keyboard\n * 2014-08-02 - bigger font + bugfix in init Display RAM\n * 2014-08-02 - use XRoar colors\n * 2014-08-02 - limit the input queue\n * 2014-08-02 - Force send 'no key pressed' only after a key was pressed.\n * 2014-08-02 - bugfix: Don't sys.exit() so CPU thread tread down\n * 2014-08-02 - add info about Useable RAM sizes\n * 2014-08-02 - bugfix some key mappings\n * 2014-08-02 - Dragon is alive!\n * 2014-08-02 - start with a complete fresh pygame display class\n * 2014-08-02 - WIP: char input\n * 2014-08-01 - toggle key press, so no key will be missed ;)\n * 2014-08-01 - WIP: Keyboard input seems to work basicly!!!\n * 2014-08-01 - WIP: Keyboard input\n * 2014-07-31 - Display \"keyboard matrix state\" via memory_callbacks\n * 2014-07-30 - just add some more info\n * 2014-07-30 - WIP: Keyboard input to PIA\n * 2014-07-30 - add some information about PIA\n * 2014-07-29 - WIP: PIA PDR\n * 2014-07-29 - WIP: PIA\n * 2014-07-29 - use bit utils in CPU, too.\n * 2014-07-29 - add utilities around bit manipulations\n * 2014-07-28 - WIP: Dragon input\n * 2014-07-28 - use central logger\n * 2014-07-28 - WIP: user input\n * 2014-07-28 - reformat code\n * 2014-07-28 - nicer output ;)\n * 2014-07-28 - bugfix quit pygame\n * 2014-07-28 - add ROM download script and ROM hashes.\n * 2014-07-27 - Quick work-a-round for travis\n * 2014-07-27 - convert dragon charmap\n * 2014-07-27 - WIP: Dragon Text mode with D64\n * 2014-07-25 - WIP: Dragon 32 PIA / SAM\n * 2014-07-25 - Cut PIA mem info\n * 2014-07-25 - Add a Dragon32_test.py\n * 2014-07-24 - update Dragon 32 stuff to new API\n * 2014-07-24 - multiprocessing.JoinableQueue() -> multiprocessing.Queue()\n * 2014-07-24 - update console test\n * 2014-07-24 - reimplement \"--display-cycle\"\n * 2014-07-24 - work-a-round for double log output\n * 2014-07-24 - Change queue.get() stuff\n * 2014-07-24 - remove concept files\n * 2014-07-23 - remove obsolete text\n * 2014-07-23 - use global log\n * 2014-07-23 - bugfix unittest\n * 2014-07-23 - bugfix Multicomp6809 and abc09 in tk version\n * 2014-07-23 - Use Queue.Queue() in Tk as output buffer\n * 2014-07-23 - Crash because of: yscrollcommand=scollbar.set\n * 2014-07-23 - use multiprocessing.JoinableQueue\n * 2014-07-23 - add names\n * 2014-07-23 - call cpu.quit()\n * 2014-07-23 - WIP: Merge Bus read & write Threads. Use thread.interrupt_main()\n * 2014-07-22 - WIP: KeyboardInterrupt\n * 2014-07-20 - WIP: sbc09 console\n * 2014-07-20 - Bugfix exit all threads/processes\n * 2014-07-20 - don't add more then one log handler\n * 2014-07-18 - unify \"running\" stuff\n * 2014-07-18 - rename multiprocess files\n * 2014-07-18 - less debug log\n * 2014-07-18 - code cleanup, use Simple6809Cfg as default, add '--dont_open_webbrowser'\n * 2014-07-18 - WIP: Simple6809 is running\n * 2014-07-17 - move CPU into components\n * 2014-07-17 - WIP: split concept code\n * 2014-07-17 - WIP: multiprocessing concept 2\n * 2014-07-17 - WIP: new multiprocessing concept\n * 2014-07-17 - just rename\n * 2014-07-17 - use multiprocessing under linux and subprocess unter windows\n * 2014-07-17 - WIP: Use multiprocessing to start CPU\n * 2014-07-17 - move CPU http server into a seperate thread.\n * 2014-07-17 - bugfix\n * 2014-07-17 - Bugfix CPU status\n * 2014-07-16 - remove loop stuff and use more threading\n * 2014-07-16 - Recalculate the op call burst_count\n * 2014-07-16 - That's fixed with pager ;)\n * 2014-07-16 - Use pager to get the user input.\n * 2014-07-16 - remove unused code\n * 2014-07-15 - add a console version of Simple6809 ROM without bus communication\n * 2014-07-15 - remove unused code & update README\n * 2014-07-15 - add complete DAA unittest\n * 2014-07-15 - Finished S-Records unittest\n * 2014-07-15 - Add more test with HEX calculator\n * 2014-07-15 - display output is a good idea ;)\n * 2014-07-15 - Add unittest for DAA\n * 2014-07-15 - refactor DAA\n * 2014-07-15 - Bugfix DAA - TODO: Add unittests for it!\n * 2014-07-15 - reoder register lines\n * 2014-07-15 - moved\n * 2014-07-15 - Create v09 trace simmilar to XRoar one.\n * 2014-07-14 - Bugfix sbc09 unittest and add more sbc09 tests\n * 2014-07-14 - WIP: unittests with sbc09\n * 2014-07-14 - sbc09: create memory info with hacked script\n * 2014-07-14 - WIP: New call instruction implementation\n * 2014-07-14 - Bugfix: is needes, e.g.: in sbc09\n * 2014-07-14 - remove some test assert statements\n * 2014-07-14 - disable output in unittests\n * 2014-07-14 - rename some pointer\n * 2014-07-14 - travis should only test master and stable\n * 2014-07-13 - remove speedup Simple6809 RAM test\n * 2014-07-13 - disable many logging lines\n * 2014-07-13 - set cc flags more than Xroar on startup\n * 2014-07-13 - merge some code in humanize.py\n * 2014-07-13 - move trace code:\n * 2014-07-13 - remove unused stuff\n * 2014-07-13 - remove \"--compare_trace\" adn update README\n * 2014-07-13 - Fix Travis\n * 2014-07-13 - boring in unittests ;)\n * 2014-07-13 - remo area debug and code cleanup\n * 2014-07-13 - test with pypy, too and diable coveralls\n * 2014-07-13 - Bugfix, use other address if only 1K RAM\n * 2014-07-13 - Add more tests with BASIC\n * 2014-07-13 - Add some Dragon32 mem info\n * 2014-07-13 - Bugfix ASR/LSR: Bit seven is held constant. Catched with BASIC INT()\n * 2014-07-13 - add some working tests\n * 2014-07-13 - remove initial state tests\n * 2014-07-13 - Update unittest for TFR/EXG\n * 2014-07-13 - Add BASIC float tests.\n * 2014-07-13 - Bugfix: TFR and EXG\n * 2014-07-13 - add sixxie and tormod\n * 2014-07-13 - Bugfix INC\n * 2014-07-12 - add log to file\n * 2014-07-12 - better mem info\n * 2014-07-12 - add comments +typo\n * 2014-07-12 - better info on out of range writes\n * 2014-07-12 - add doctest\n * 2014-07-12 - update test startup\n * 2014-07-12 - Bugfix ADC... the last Bug???\n * 2014-07-11 - Add a working test for \"FPA0_to_D\"\n * 2014-07-11 - better debugging, add addr info after debug line\n * 2014-07-11 - Add some thanks...\n * 2014-07-11 - \"activate\" test_ACCD_to_FPA0()\n * 2014-07-11 - Bugfix if value > $7fff\n * 2014-07-11 - Just for devloper to play a little bit with the BASIC Interpreter.\n * 2014-07-11 - add some dev. helper windows batch files\n * 2014-07-11 - cleanup BASIC09 tests\n * 2014-07-11 - WIP: Add test case for JSR $e778 \"D to FPA0\"\n * 2014-07-11 - add special handling if value == 0\n * 2014-07-11 - Bugfix in BASIC09 Float implementation, only 0 failed, yet.\n * 2014-07-08 - Bugfix dev. startup\n * 2014-07-08 - WIP: Test with BASIC floating point routines\n * 2014-07-08 - disable by default\n * 2014-07-08 - update dev. tool\n * 2014-07-08 - Add a working BASIC floting point number test\n * 2014-07-08 - merged \"Programm Flow Instructions\"\n * 2014-07-08 - add call number and datetime in HTML debug\n * 2014-07-07 - WIP: Test around BASIC floating point routines\n * 2014-07-07 - remove debug stuff and add a \"debug.html\" tracing generator\n * 2014-07-07 - split the FLOATING POINT ACCUMULATOR addresses\n * 2014-07-07 - use pickle to save CPU state\n * 2014-07-07 - update html opcode genrator script and add html file.\n * 2014-07-06 - WIP: 6809 data to html export\n * 2014-07-06 - disable open webbrower\n * 2014-07-06 - Add a memory callback functionality\n * 2014-07-04 - add RESET_VECTOR_VALUE to cfg\n * 2014-07-04 - update division code\n * 2014-07-04 - add test for ROL,ROR in memory\n * 2014-07-04 - Bugfix CLI\n * 2014-07-04 - enhanced script.\n * 2014-07-03 - add two new working BASIC Tests...\n * 2014-07-03 - add some not working unitests (commented)\n * 2014-07-03 - Bugfix ASR and add unittests for it.\n * 2014-07-03 - just move to group\n * 2014-07-03 - .gitignore\n * 2014-07-03 - add missing unittests after coverage run\n * 2014-07-03 - bash scripts to run test and create coverage report\n * 2014-07-03 - Test BASIC Interpreter works!\n * 2014-07-03 - WIP: Run tests with a alive BASIC Interpreter\n * 2014-07-03 - update cfg files\n * 2014-07-03 - add \"create coverage report\" in README\n * 2014-07-03 - remove syntax error in obsolete file\n * 2014-07-03 - bugfix coverage packagename\n * 2014-07-03 - change all package path, after file move\n * 2014-07-03 - moved all files into dragonpy package dir\n * 2014-07-03 - add packagename\n * 2014-07-03 - add coveralls in travis cfg.\n * 2014-07-03 - change TODO info in unittets\n * 2014-07-03 - add coveralls.io status image in README\n * 2014-07-03 - add coveralls cfg\n * 2014-07-03 - add unittest info in README\n * 2014-07-03 - add setup.py and travis cfg.\n * 2014-07-03 - better \"first tim called\" debug info.\n * 2014-07-03 - add unittest for SUBA indexed\n * 2014-07-03 - Update division test code\n * 2014-07-02 - WIP: ea indexed address modes\n * 2014-07-02 - Display CWAI not implemented error\n * 2014-07-02 - better error message\n * 2014-07-02 - refactor TFR, EXG stuff and add unittests\n * 2014-07-02 - add more Indexed tests\n * 2014-07-02 - add second division test code\n * 2014-07-02 - add seperate test for address modes\n * 2014-07-02 - group ST/LD and add unittests\n * 2014-07-02 - remove comment: it's correct\n * 2014-07-02 - move all not implemented ops\n * 2014-07-01 - bugfix EOR - TODO: Add a test for it.\n * 2014-07-01 - test with more interesting areas\n * 2014-07-01 - add test for ABX\n * 2014-07-01 - refactor ANDCC and ORCC\n * 2014-07-01 - add test for ORCC and ANDCC\n * 2014-07-01 - update example output\n * 2014-07-01 - reorder crc32 tests\n * 2014-07-01 - Bugfix for failed test.\n * 2014-07-01 - Update crc32 test. Works now!\n * 2014-07-01 - disable prints\n * 2014-07-01 - moved/grouped some ops\n * 2014-07-01 - Bugfix ROR and add unittest for it.\n * 2014-07-01 - WIP: add crc32 code\n * 2014-06-30 - Add division code test\n * 2014-06-30 - WIP: 6809 32/16 divison test\n * 2014-06-30 - nicer debug output\n * 2014-06-30 - add unittests for PSHU and PULU\n * 2014-06-30 - Start to add 6809 unittests with small assembler programs: crc16\n * 2014-06-30 - bugfix Push/Pull unittests\n * 2014-06-30 - add unittest for BLT and LBLT\n * 2014-06-30 - add unittest for SBCA\n * 2014-06-30 - move DEC test\n * 2014-06-29 - add some BASIC test code\n * 2014-06-29 - split/merge arithmetic shift tests\n * 2014-06-29 - unify: r & 0xff\n * 2014-06-29 - WIP dragon32\n * 2014-06-29 - split arithmetic op tests\n * 2014-06-29 - comment debug output\n * 2014-06-29 - add unittest for ADDD and DECA\n * 2014-06-28 - Add test for ROL\n * 2014-06-28 - cleanup ADD and add unittest\n * 2014-06-28 - disallow out of range write into memory\n * 2014-06-28 - implement BRN, BVC and BVS\n * 2014-06-28 - Bugfix INC and add unittests\n * 2014-06-28 - add LSLA unittest\n * 2014-06-28 - split branch unittests\n * 2014-06-28 - code cleanup and add unittests for CMP\n * 2014-06-27 - Use only 1KB RAM for Simple6809, too.\n * 2014-06-27 - add hacked script for copy&paste .lst content from e.g.: http://www.asm80.com/\n * 2014-06-27 - WIP CPU control server\n * 2014-06-27 - Setup only 1KB RAM for Multicomp6809 for faster startup.\n * 2014-06-27 - add unittest for NEG memory\n * 2014-06-27 - Update NEG memory, TODO: add tests for it, too.\n * 2014-06-27 - Add complete range unittests for update_HNZVC_8\n * 2014-06-27 - bugfix unittest file\n * 2014-06-27 - Bugfix NEGA and NEGB and update unitests for them\n * 2014-06-27 - update unittest code\n * 2014-06-27 - update accu unittests\n * 2014-06-26 - add unittest for ORA and ORCC\n * 2014-06-26 - Add unittests for BPL and LBPL\n * 2014-06-26 - bugfix for /debug/\n * 2014-06-26 - Add unittests for LEAU and LDU\n * 2014-06-26 - Bugfix TST extended\n * 2014-06-26 - Bugfix in TST and add unittest for it\n * 2014-06-26 - Bugfix BGE\n * 2014-06-26 - add debug output for PRINT \"HELLO\" in README\n * 2014-06-25 - add another simple test code\n * 2014-06-25 - add come cary flag tests\n * 2014-06-25 - Add Zero-Flag tests\n * 2014-06-25 - add a test code, use test config\n * 2014-06-24 - WIP: turn on DEBUG via POST request\n * 2014-06-24 - move tests TODO: Update all\n * 2014-06-24 - Better \"called the first time:\" info line.\n * 2014-06-24 - create absolute path to the ROM file.\n * 2014-06-24 - add info about ROMs\n * 2014-06-24 - some cleanup\n * 2014-06-24 - README Update\n * 2014-06-23 - change reset debug output\n * 2014-06-23 - Quick hack to add Grant's Multicomp 6809 ROM.\n * 2013-10-31 - somthing wrong in dragon cycle/update calls ?!?\n * 2013-10-31 - commit current state:\n * 2013-10-31 - insert TODOs update README\n * 2013-10-31 - refactor:\n * 2013-10-30 - merge periphery code\n * 2013-10-30 - exit if Pygame is not installed\n * 2013-10-30 - implement MUL\n * 2013-10-30 - rename basic.doc -> basic.txt\n * 2013-10-30 - bugfix: flush doesn't exist\n * 2013-10-30 - truncate long lines in traceback\n * 2013-10-29 - \"redirect\" use input into nirvana\n * 2013-10-29 - add a simple console, so it's runable without TKinter\n * 2013-10-29 - ignore if TKinter is not available\n * 2013-10-29 - add cfg.BURST_COUNT\n * 2013-10-29 - display error info on exit\n * 2013-10-29 - update with removed logging output\n * 2013-10-29 - disable many logging output\n * 2013-10-28 - add a note about current performace\n * 2013-10-28 - disable automatic test commands\n * 2013-10-28 - not raise traceback on exit\n * 2013-10-28 - pygame, numpy is not needed in every config\n * 2013-10-28 - add link into README\n * 2013-10-28 - hand made changes in generate creole file\n * 2013-10-28 - add abc09.creole generatet by script\n * 2013-10-28 - add \"clean\" in Makefile and remove all builded files\n * 2013-10-28 - just apply auto format\n * 2013-10-27 - add more test code\n * 2013-10-27 - convert chars to display, why?\n * 2013-10-27 - deactivate \"sys exit\" on trace difference\n * 2013-10-27 - implement SEX\n * 2013-10-27 - add update_HNZVC_16()\n * 2013-10-27 - changes for equality with trace\n * 2013-10-27 - update half-carry, though H is normaly \"undefined\"\n * 2013-10-27 - add a hacked script to create a short trace with sbc09\n * 2013-10-27 - add hacked scb09 trace compare\n * 2013-10-27 - use dict for all calls\n * 2013-10-27 - Bugfix CMP: update half-carry flag, too.\n * 2013-10-27 - print trace info\n * 2013-10-27 - rename README.doc -> README.txt\n * 2013-10-27 - just apply auto formating\n * 2013-10-27 - add Lennart Benschop 6809 stuff (released under the GPL)\n * 2013-10-26 - Implement DAA, EXG and bugfix LSR\n * 2013-10-26 - bugfix activate logging later\n * 2013-10-26 - Bugfix in data: EXG need postbyte\n * 2013-10-26 - add current example\n * 2013-10-26 - display key events\n * 2013-10-26 - add some info\n * 2013-10-26 - add \"Copy to clipboard\" function\n * 2013-10-25 - less debug output\n * 2013-10-25 - add LSL unittest\n * 2013-10-25 - add ANDA unittest\n * 2013-10-25 - add a unittest with a routine from origin ROM\n * 2013-10-24 - exclude imports (serial doesn't work, yet)\n * 2013-10-24 - Update some CC handling.\n * 2013-10-24 - add CC unittest with DEC and update other tests\n * 2013-10-24 - Add CC unittest with INC\n * 2013-10-24 - Bugfix SUB and add a working unittest for SUB and CC flags\n * 2013-10-24 - first real working CC test with ADDA\n * 2013-10-24 - add scrollbar and auto scroll to end\n * 2013-10-23 - display first call\n * 2013-10-23 - Bugfix: set CC flags only if not set before\n * 2013-10-23 - don't raise if error was before and better debug messages\n * 2013-10-22 - nicer TK window\n * 2013-10-22 - some updates in unittest\n * 2013-10-22 - better trace compare\n * 2013-10-22 - use XRoar CC code\n * 2013-10-22 - Update exported 6809 data:\n * 2013-10-21 - wrap around value\n * 2013-10-21 - add CC tests.\n * 2013-10-21 - change debug output\n * 2013-10-21 - update unittest\n * 2013-10-21 - add --area_debug_cycles\n * 2013-10-21 - merge SUB8 and SUB16\n * 2013-10-21 - Implement BGE and BLT\n * 2013-10-21 - bugfix address modes\n * 2013-10-21 - Automatic send a BASIC line back, for test\n * 2013-10-21 - use delimiter=';'\n * 2013-10-21 - use csv modul for export\n * 2013-10-21 - update state in README\n * 2013-10-21 - implement ANDCC\n * 2013-10-21 - bugfix get ea+m DIRECT\n * 2013-10-21 - TST need mem\n * 2013-10-21 - add new csv\n * 2013-10-21 - Add undocumented RESET opcode 0x3e\n * 2013-10-21 - data updates:\n * 2013-10-21 - remove stuff for stack pointer checks\n * 2013-10-21 - more debug info from get_ea_indexed()\n * 2013-10-21 - remove internal push/pull check:\n * 2013-10-21 - updates for new 6809 data\n * 2013-10-21 - bugfix TFR, JSR data\n * 2013-10-21 - ea is needed if write to memory\n * 2013-10-21 - * \"needs_ea\" is not the same for all ops\n * 2013-10-21 - needs_ea for all branch instructions\n * 2013-10-21 - add \"needs_ea\"\n * 2013-10-21 - rename \"operand\" to \"register\"\n * 2013-10-21 - remove \"addr mode\" register and stack\n * 2013-10-21 - manual changes for \"reads from memory\" info\n * 2013-10-21 - move HNZVC info from instruction to op code\n * 2013-10-21 - add a note about read_from_memory\n * 2013-10-20 - start to use the new data. Not ready, yet.\n * 2013-10-20 - change \"-\" to None\n * 2013-10-20 - generate a new op code info file\n * 2013-10-20 - merge with existing information\n * 2013-10-19 - pretty print the result, too.\n * 2013-10-19 - try to collect all data in a new way.\n * 2013-10-19 - add missing instructions\n * 2013-10-18 - add op info\n * 2013-10-17 - TODO: change 6809 data py\n * 2013-10-17 - long branches allways MEM_ACCESS_WORD\n * 2013-10-17 - more info on push/pull\n * 2013-10-17 - implement BGT\n * 2013-10-17 - stop on endless loops and merge code\n * 2013-10-17 - bugfix in get_indexed_ea()\n * 2013-10-17 - bugfix in stack count check\n * 2013-10-17 - add vector info\n * 2013-10-17 - info if mem info is not active\n * 2013-10-17 - support Backspace\n * 2013-10-17 - better solution to make textbox \"read-only\"\n * 2013-10-17 - * implement ABX, ASR, BLE, EOR, LSR, NOP, ROR, SBC, SUB16\n * 2013-10-16 - add not working CC half carry test\n * 2013-10-16 - display char in memory write\n * 2013-10-16 - bugfix missing attribute\n * 2013-10-16 - add check\n * 2013-10-16 - bugfix ORCC and ROL\n * 2013-10-16 - implement OR\n * 2013-10-16 - bugfix for EOF if XRoar log file\n * 2013-10-16 - implement ADDD\n * 2013-10-16 - add a internal stack push/pull counter with check\n * 2013-10-16 - better Tk stuff: send char by char back\n * 2013-10-16 - update CC\n * 2013-10-16 - bugfix TST\n * 2013-10-16 - Merge code for BSR and JSR\n * 2013-10-16 - rename half carry method\n * 2013-10-16 - less debug if value out of range\n * 2013-10-16 - Split Simple6809Periphery and a a simple Tk GUI\n * 2013-10-16 - remove raise in ORCC\n * 2013-10-16 - bugfix push/pull\n * 2013-10-16 - bugfix test_TFR03()\n * 2013-10-16 - stop on wrong NEG (e.g.: jump to empty RAM area)\n * 2013-10-16 - better traceback\n * 2013-10-16 - clear hacked exception\n * 2013-10-16 - for eclipse :(\n * 2013-10-15 - Update/bugfixes because of mem_read information\n * 2013-10-15 - display cycles/sec\n * 2013-10-15 - better error info\n * 2013-10-15 - more debug info in memory access\n * 2013-10-15 - add \"mem_read\" and \"mem_write\" into MC6809 data\n * 2013-10-15 - play with serial, without success.\n * 2013-10-15 - send op address over bus, too.\n * 2013-10-14 - add from https://gist.github.com/jedie/6975555\n * 2013-10-14 - bugfix BLO / BHS\n * 2013-10-14 - implement AND\n * 2013-10-14 - add content in \"read byte\" debug info\n * 2013-10-14 - implement INC memory\n * 2013-10-14 - Bugfix: wrong mem access PSH, PUL\n * 2013-10-13 - conmpare first the registers than CC\n * 2013-10-13 - more info on RS232 access\n * 2013-10-13 - debug output for CPU cycles\n * 2013-10-13 - Display CC debug like '.F.IN..C' and compare it seperate\n * 2013-10-13 - bugfix get_direct_byte()\n * 2013-10-13 - implement PULS\n * 2013-10-13 - nicer debugger output\n * 2013-10-13 - Bugfix BSR\n * 2013-10-13 - implement ORCC\n * 2013-10-13 - add fake write_rs232_interface()\n * 2013-10-13 - better error message if periphery func. returns nonsense ;)\n * 2013-10-12 - bugfix in IllegalInstruction\n * 2013-10-12 - add a simple debugger\n * 2013-10-12 - implement BHI\n * 2013-10-12 - reimplement illegal ops\n * 2013-10-12 - bugfix: Hacked bugtracking only with Dragon 32\n * 2013-10-12 - add dummy RS232 method\n * 2013-10-12 - add addr in error message\n * 2013-10-12 - log mem access as info\n * 2013-10-12 - hacked speedup Simple6809 RAM test\n * 2013-10-12 - Hacked bugtracking only with Dragon 32\n * 2013-10-12 - insert CC in XRoar trace line, too\n * 2013-10-12 - use sam attr than XRoar in PAGE1/2 ops\n * 2013-10-12 - use debug.error for TODOs in PIA/SAM\n * 2013-10-12 - special RAM init for Dragon.\n * 2013-10-12 - Bugfix pull_word() (e.g. RTS)\n * 2013-10-12 - Bugfix BLS\n * 2013-10-12 - bugfix LEA\n * 2013-10-11 - better opcode .csc export output\n * 2013-10-11 - fix unittest\n * 2013-10-10 - add a hacked bug tracking: xroar trace compare\n * 2013-10-10 - bugfix BEQ\n * 2013-10-10 - bugfix in indexed addressing mode\n * 2013-10-10 - bugfix init value in PIA\n * 2013-10-10 - add reset call to debug output\n * 2013-10-10 - merge read pc byte/word methods\n * 2013-10-10 - Bugfix in log output: Display PC and not ea ;)\n * 2013-10-10 - Bugfix STA/STB and CC update\n * 2013-10-10 - debug also CC registers\n * 2013-10-10 - tweak --verbosity=20 output simmilar to XRoar -trace\n * 2013-10-10 - implement \"--max\" cli argument\n * 2013-10-09 - add \"--area_debug_active\" in CLI\n * 2013-10-09 - resuse existing cmd arguments\n * 2013-10-09 - implement ADC and BSR\n * 2013-10-09 - return 0x0, while read/write outside memory\n * 2013-10-09 - split mem info:\n * 2013-10-09 - Add unittest\n * 2013-10-09 - commit idea for CC\n * 2013-10-09 - update CPU for new MC6809_data_raw:\n * 2013-10-09 - update 6809 data:\n * 2013-10-09 - CC register updates\n * 2013-10-08 - add tests f\u00fcr CC.H and CC.C, but's seems to be wrong?!?\n * 2013-10-08 - Update unittest, so they are runable\n * 2013-10-07 - Bugfix COM\n * 2013-10-07 - add CLI examples into README\n * 2013-10-07 - bugfix: it's the right position\n * 2013-10-07 - rename ;)\n * 2013-10-07 - Bugfix: Strip checksum ;)\n * 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\n * 2013-10-07 - * Add support for more than Dragon setups. * Start adding Simple6809 support\n * 2013-10-06 - use bus for the rest\n * 2013-10-06 - use reset() to ser CC F&I and init PC\n * 2013-10-06 - starting implementation of SAM\n * 2013-10-06 - implement support for PAGE1/2 opcodes\n * 2013-10-06 - remove old code\n * 2013-10-06 - implement CMP8 and CMP16\n * 2013-10-06 - start to implement PIA0 and PIA1\n * 2013-10-06 - set inital PC to RESET_VECTOR == 0xb3b4\n * 2013-10-06 - implement LEAS,LEAU and LEAX, LEAY\n * 2013-10-06 - Set start stack pointer to 0xffff\n * 2013-10-06 - *wrap around 8/16-bit register values\n * 2013-10-06 - revert S to object: So it's the same API than other register objects\n * 2013-10-06 - add everywhere \"m\" argument\n * 2013-10-06 - * Implement LSL / ROL\n * 2013-10-06 - implement BMI, BPL\n * 2013-10-06 - update unittests (work in progress)\n * 2013-10-06 - * Implement JSR\n * 2013-10-06 - implement BLO/BCS/LBLO/LBCS and BHS/BCC/LBHS/LBCC branch\n * 2013-10-06 - bugfix direct byte - TODO: direct word\n * 2013-10-06 - Implement ST16 + Bugfix ST8\n * 2013-10-06 - reformat DocString\n * 2013-10-05 - implement BRA/LBRA\n * 2013-10-04 - stop before loop\n * 2013-10-04 - add some PIA / SAM dummy response\n * 2013-10-04 - bugfix BNE and JMP\n * 2013-10-03 - Add unittest for LDA, LDB, STA, STB and LDD in one test\n * 2013-10-03 - Bugfix m <-> ea missmatch in address methods\n * 2013-10-03 - * Implement ADD8\n * 2013-10-03 - add a low-level-register test\n * 2013-10-03 - remove some init debug messages\n * 2013-10-02 - start implementing SUB8\n * 2013-10-02 - * bugfix: differ between ea and memory content * Implement NEG memory\n * 2013-10-02 - better error message if soft switch doesn't exists\n * 2013-10-01 - starts implementing NEG, but seems to be buggy :(\n * 2013-10-01 - remove many startup debug output\n * 2013-10-01 - add name to ConditionCodeRegister for uniform API\n * 2013-10-01 - bugfix missing API update\n * 2013-10-01 - reimplement TFR\n * 2013-10-01 - implement TST\n * 2013-10-01 - * Implement BEQ * use same debug output in BNE\n * 2013-10-01 - Implement BIT\n * 2013-10-01 - implement BNE\n * 2013-10-01 - implement \"relative\" addressing mode\n * 2013-09-30 - add a test\n * 2013-09-30 - check mem values and make 'end' optional\n * 2013-09-30 - implement INC\n * 2013-09-30 - don't set overflow flag back to 0\n * 2013-09-24 - reimplement LD8\n * 2013-09-24 - implement DEC\n * 2013-09-24 - use new skeleton\n * 2013-09-24 - * don't split instrutions\n * 2013-09-24 - * split COM * implement COM\n * 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\n * 2013-09-24 - mark 8bit CC update methods\n * 2013-09-24 - rename CC calls\n * 2013-09-23 - start LD16: TODO: operand should be a object with get/set methods!\n * 2013-09-23 - implement JMP\n * 2013-09-23 - insert genereted code\n * 2013-09-23 - bigfix ;)\n * 2013-09-23 - change CSV data\n * 2013-09-23 - Use variables in \"addr_mode\"\n * 2013-09-23 - rename dir\n * 2013-09-23 - * insert 'cc update' calls for the most cases * better DocString * change function signature if nessesary *\n * 2013-09-23 - * split LEA * move cc bits info to INSTRUCTION_INFO\n * 2013-09-23 - add a simple CSV export\n * 2013-09-23 - Use also first and last part to link\n * 2013-09-23 - reimplement skeleton maker script\n * 2013-09-23 - * change cycles/bytes to integers * Merge PAGE and SWI\n * 2013-09-20 - merge informations, current result is MC6809_data_raw.py\n * 2013-09-20 - add hacked 6809 data scraping scripts.\n * 2013-09-19 - don't use property witch access methods...\n * 2013-09-19 - * Bugfix NEG * stop in soft witch\n * 2013-09-19 - * support JMP, NEG in all addressing modes * inc cycles in Memory class\n * 2013-09-19 - * change memory access methods to properties, so it's unify with register access * merge COM ops\n * 2013-09-19 - COM\n * 2013-09-19 - add to TODO ;)\n * 2013-09-19 - uniform debug output\n * 2013-09-18 - * move accumulator to seperate object\n * 2013-09-18 - remove register from 6309 and add some more links.\n * 2013-09-17 - * Add LD 8-bit load register from memory * move the CC frags into seperate module\n * 2013-09-17 - add \"LD 16-bit load register from memory\" and merge code with ST16\n * 2013-09-17 - check if ops only defined one time\n * 2013-09-17 - accumulator D, W and Q as property\n * 2013-09-17 - add ST 16-bit store register into memory\n * 2013-09-17 - add some 8-bit arithmetic operations\n * 2013-09-17 - debug write to text screen addresses\n * 2013-09-17 - add LSR\n * 2013-09-17 - add ORA\n * 2013-09-17 - bugfix indexed addressing modes\n * 2013-09-16 - add BNE\n * 2013-09-16 - make current opcode class wide. Handle list of opcodes\n * 2013-09-16 - FIXME: word and signed8 ???\n * 2013-09-16 - add copyright notes\n * 2013-09-16 - form if...elif to a dict access\n * 2013-09-16 - add LEAX indexed\n * 2013-09-16 - add Indexed addressing modes, but needs tests\n * 2013-09-16 - short debug output\n * 2013-09-16 - stop on illegal ops\n * 2013-09-15 - little-endian or big-endian ?!?!\n * 2013-09-12 - add more links\n * 2013-09-12 - merge code\n * 2013-09-12 - better unittest output in verbosity mode\n * 2013-09-11 - Display more mem info\n * 2013-09-11 - add ADDA extended, CMPX extended and JSR extended\n * 2013-09-11 - bugfix ROM/RAM size\n * 2013-09-11 - Change sizes, but: http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4363\n * 2013-09-11 - Add print_debug_info() to config class\n * 2013-09-11 - more info\n * 2013-09-11 - add op 0x00 NEG direct\n * 2013-09-11 - set cycles in ops\n * 2013-09-11 - add JMP\n * 2013-09-11 - rename CC flags\n * 2013-09-11 - activate pygame display\n * 2013-09-11 - setup logging\n * 2013-09-11 - move STACK_PAGE and RESET_VECTOR into cfg\n * 2013-09-11 - remove read_word_bug()\n * 2013-09-11 - obsolete\n * 2013-09-10 - cleanup and start to implement the 6809 CPU\n * 2013-08-29 - Update configs.py\n * 2013-08-27 - add some links\n * 2013-08-27 - fork and rename some files, change some settings... But will every be a Dragon 32 emulator?\n * 2013-03-08 - added note about exact pip and brew commands I used\n * 2013-03-08 - improved hires colour, fixed non-ASCII key crash, fixed to work with later pygame/numpy\n * 2012-07-23 - added explicit mention of License in README\n * 2012-07-23 - added mention of numpy requirement\n * 2012-07-23 - added MIT license\n * 2012-07-23 - treat README as Markdown\n * 2012-04-18 - made applepy.py executable\n * 2011-10-01 - add --pc switch for starting run at specific program counter\n * 2011-10-01 - initialise display state variables in constructor\n * 2011-08-21 - add console control utility\n * 2011-08-21 - implement post to /memory in control requests\n * 2011-08-20 - control channel is now HTTP/REST/JSON\n * 2011-08-20 - add fileno() method to ControlHandler for better compatiblity with select()\n * 2011-08-20 - disassemble show instruction bytes\n * 2011-08-20 - reincarnate disassembler on control channel\n * 2011-08-20 - add dump memory command\n * 2011-08-20 - refactor control command processing\n * 2011-08-19 - start of cpu core control channel\n * 2011-08-19 - graceful shutdown if cpu core exits\n * 2011-08-19 - abandon startup if cpu module does not start\n * 2011-08-19 - rename --ui switch to --bus\n * 2011-08-18 - open memory files in binary mode\n * 2011-08-18 - update curses UI for socket comms\n * 2011-08-18 - use sockets for comms instead of stdio\n * 2011-08-19 - Edited README via GitHub\n * 2011-08-19 - Mention the minimal applepy_curses.py in README\n * 2011-08-16 - attempt to skip to data part of tape\n * 2011-08-16 - finish cassette support\n * 2011-08-16 - initial cassette input\n * 2011-08-14 - Separate CPU core and UI processes\n * 2011-08-15 - removed unused import\n * 2011-08-15 - adjusted speaker sample length to allow for leading edge\n * 2011-08-15 - made options...um...optional param to Memory so tests pass\n * 2011-08-15 - command line options: --rom, --ram, --quiet\n * 2011-08-15 - map left/right arrow keys to ^H/^U\n * 2011-08-15 - add flash attribute to text mode\n * 2011-08-15 - moved speaker buffer playing into the Speaker class\n * 2011-08-15 - implemented speaker; not a bad hack :-)\n * 2011-08-15 - pass in None for cycles so tests run\n * 2011-08-15 - refactored memory access so cycle can be passed in\n * 2011-08-14 - implemented cycle calculation (except for page boundary crossing)\n * 2011-08-14 - added notes on implementation that seems to give the right result\n * 2011-08-14 - more groking of why memory-based ASL, DEC, INC, LSR, ROL and ROR take what they take\n * 2011-08-14 - worked out why STA seemed an exception\n * 2011-08-14 - updated notes, fixing what seems to a mistake on the webpage I referenced\n * 2011-08-14 - typo and formatting fixes in cycle notes\n * 2011-08-14 - notes on cycle times\n * 2011-08-14 - added test_run to run CPU over a fragment of memory with no UI event handling (for automated testings)\n * 2011-08-14 - improved coloured for better whites\n * 2011-08-13 - fixed missing self\n * 2011-08-13 - refactored memory so RAM just subclasses ROM, adding write_byte\n * 2011-08-13 - whitespace nits\n * 2011-08-13 - added load_file to RAM\n * 2011-08-13 - updated README credits and status\n * 2011-08-13 - implemented HIRES colour\n * 2011-08-13 - use pregenerated character bitmaps for text mode\n * 2011-08-13 - added HIRES graphics support based on code from ghewgill: https://github.com/ghewgill/applepy/commit/5aa8ca2caa82cacdae08d0ffdbab2083b0f4c7a1\n * 2011-08-13 - always draw the spaces between scanlines\n * 2011-08-13 - in mixed mode, assume monitor is colour\n * 2011-08-13 - refactored update_text and update_lores into a single method\n * 2011-08-13 - display full width of characters\n * 2011-08-13 - character heights are really 8 not 9\n * 2011-08-13 - implemented LORES graphics\n * 2011-08-13 - make display optional (for testing)\n * 2011-08-13 - got tests working again after memory refactor\n * 2011-08-13 - ported to pygame and added bit-accurate characters\n * 2011-08-07 - if writing to text screen row group 3 just skip instead of throwing exception\n * 2011-08-07 - updated README to reflect status and give credit\n * 2011-08-07 - don't treat indices as signed in indexed addressing modes (ht: ghewgill)\n * 2011-08-07 - consistent whitespace\n * 2011-08-07 - split memory handling into separate classes for RAM, ROM and Soft Switches\n * 2011-08-07 - add disassembler, enable for dump mode\n * 2011-08-07 - don't allow writes to ROM area (this caused the ][+ ROM to hang on boot)\n * 2011-08-07 - fix typos for zero_page_y_mode in instruction dispatch table\n * 2011-08-07 - fix dump() function so it works (when uncommented)\n * 2011-08-07 - fix typo in instruction table\n * 2011-08-07 - simplify calculating signed values in adc and sbc\n * 2011-08-07 - only need to allocate 64k of memory\n * 2011-08-07 - if curses can't write a character to the screen, just skip it; fixes #1\n * 2011-08-07 - improved implementation of indirect bug across page boundaries including indexed indirects as well\n * 2011-08-07 - added unit tests\n * 2011-08-07 - fixed error in BVS\n * 2011-08-07 - whitespace nit\n * 2011-08-07 - properly use 0 and 1 not False and True for flags\n * 2011-08-07 - implemented non-accumulator version of ROR\n * 2011-08-06 - fixed inverse use of carry in SBC\n * 2011-08-06 - turns out PLA DOES affect NZ after all\n * 2011-08-06 - renamed load to load_file, added a load to load memory from byte list and refactored loading code\n * 2011-08-06 - emulate indirect mode bug in 6502\n * 2011-08-06 - reimplemented CMP, CPX and CPY based on 2006/2007 code\n * 2011-08-06 - reimplemented ADC and SBC based on 2006/2007 code\n * 2011-08-06 - apparently PLA does not affect NZ flags\n * 2011-08-06 - little BIT of simplication\n * 2011-08-06 - cleaned up ASL implementation\n * 2011-08-06 - TSX updated NZ flags\n * 2011-08-06 - fixed stray comment\n * 2011-08-06 - factored out stack pull/push\n * 2011-08-06 - refactored flags to status byte and back\n * 2011-08-06 - slight refactor of update_nz and update_nzc\n * 2011-08-06 - implemented BRK and RTI\n * 2011-08-06 - make further use of addressing mode refactor\n * 2011-08-06 - added zero_page_y_mode\n * 2011-08-06 - added wrap-around for zero_page_x_mode\n * 2011-08-06 - refactored addressing mode code\n * 2011-08-06 - added if __name__ == \"__main__\" test for mainline\n * 2011-08-06 - simplified screen address to col/row translation based on code from 2006\n * 2011-08-06 - initial update from 2001 code\n\n</details>\n\n\n[comment]: <> (\u2702\u2702\u2702 auto generated history end \u2702\u2702\u2702)\n\n\n## Links:\n\n| Forum | [http://forum.pylucid.org/](http://forum.pylucid.org/) |\n| IRC | [#pylucid on freenode.net](http://www.pylucid.org/permalink/304/irc-channel) |\n| Jabber | pylucid@conference.jabber.org |\n| PyPi | [pypi.org/project/DragonPyEmulator/](https://pypi.org/project/DragonPyEmulator/) |\n| Github | [github.com/jedie/DragonPy](https://github.com/jedie/DragonPy) |\n\n## donation\n\n\n* Send [Bitcoins](http://www.bitcoin.org/) to [1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F](https://blockexplorer.com/address/1823RZ5Md1Q2X5aSXRC5LRPcYdveCiVX6F)\n",
"bugtrack_url": null,
"license": "GPL-3.0-or-later",
"summary": "Emulator for 6809 CPU based system like Dragon 32 / CoCo written in Python...",
"version": "0.9.3",
"project_urls": {
"Documentation": "https://github.com/jedie/DragonPy",
"Source": "https://github.com/jedie/DragonPy"
},
"split_keywords": [
"emulator",
" 6809",
" dragon",
" coco",
" vectrex",
" tkinter",
" pypy"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "60852a6b45bb57e20767eb0eaa14abaccde1530e36b5d2d688bce92e428b12a9",
"md5": "b94d222b59d78e1bade0f811d80e69b6",
"sha256": "50833c9c519c29c26a20e55c7981fa85b4d575f1e61b44220a9c7fd1002fe5f6"
},
"downloads": -1,
"filename": "DragonPyEmulator-0.9.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b94d222b59d78e1bade0f811d80e69b6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 1312945,
"upload_time": "2024-09-24T21:13:06",
"upload_time_iso_8601": "2024-09-24T21:13:06.023797Z",
"url": "https://files.pythonhosted.org/packages/60/85/2a6b45bb57e20767eb0eaa14abaccde1530e36b5d2d688bce92e428b12a9/DragonPyEmulator-0.9.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1147fa924c372e661b14fcdcd6739170f0ad133dac8579aaa505c4512d8e267e",
"md5": "e587adcbd8a8d49beab8556a6db16a74",
"sha256": "8e47679b66b1f6bca864b2a1bcf4fdd503c14eded6323d8efb44e1328eb48358"
},
"downloads": -1,
"filename": "dragonpyemulator-0.9.3.tar.gz",
"has_sig": false,
"md5_digest": "e587adcbd8a8d49beab8556a6db16a74",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 1376946,
"upload_time": "2024-09-24T21:13:09",
"upload_time_iso_8601": "2024-09-24T21:13:09.544442Z",
"url": "https://files.pythonhosted.org/packages/11/47/fa924c372e661b14fcdcd6739170f0ad133dac8579aaa505c4512d8e267e/dragonpyemulator-0.9.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-24 21:13:09",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "jedie",
"github_project": "DragonPy",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "dragonpyemulator"
}