MC6809 CPU emulator written in Python
Project description
MC6809 CPU emulator written in Python
MC6809 is a Open source (GPL v3 or later) emulator for the legendary 6809 CPU, used old homecomputer Dragon 32/64 and Tandy TRS-80 Color Computer (CoCo) built in the 1980s...
Tested with Python 3.8, 3.9, 3.10 and PyPy3
A example usage can be find in: MC6809/example6809.py
Getting started:
~$ git clone https://github.com/6809/MC6809.git
~$ cd MC6809
~/MC6809 $ ./cli.py --help
The output of ./cli.py --help
looks like:
Usage: ./cli.py [OPTIONS] COMMAND [ARGS]...
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────╮
│ benchmark Run a MC6809 emulation benchmark │
│ profile Profile the MC6809 emulation benchmark │
│ version Print version and exit │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
There is a simple benchmark. Run e.g.:
~/MC6809$ ./cli.py benchmark --help
The output of ./cli.py benchmark --help
looks like:
Usage: ./cli.py benchmark [OPTIONS]
Run a MC6809 emulation benchmark
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ --loops INTEGER How many benchmark loops should be run? [default: 6] │
│ --multiply INTEGER est data multiplier [default: 15] │
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
profile
You can run the Python profiler against the benchmark, e.g.:
~/MC6809$ ./cli.py profile --help
The output of ./cli.py profile --help
looks like:
Usage: ./cli.py profile [OPTIONS]
Profile the MC6809 emulation benchmark
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ --loops INTEGER How many benchmark loops should be run? [default: 6] │
│ --multiply INTEGER est data multiplier [default: 15] │
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
development
For development exists dev-cli
, e.g.:
~/MC6809$ ./dev-cli.py --help
The output of ./dev-cli.py --help
looks like:
Usage: ./dev-cli.py [OPTIONS] COMMAND [ARGS]...
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────╮
│ check-code-style Check code style by calling darker + flake8 │
│ coverage Run and show coverage. │
│ fix-code-style Fix code style of all MC6809 source code files via darker │
│ install Run pip-sync and install 'MC6809' via pip as editable. │
│ mypy Run Mypy (configured in pyproject.toml) │
│ publish Build and upload this project to PyPi │
│ safety Run safety check against current requirements files │
│ test Run unittests │
│ tox Run tox │
│ update Update "requirements*.txt" dependencies files │
│ update-test-snapshot-files Update all test snapshot files (by remove and recreate all snapshot │
│ files) │
│ version Print version and exit │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
Run tests, e.g.:
~/DragonPy$ ./dev-cli.py coverage
# or just:
~/DragonPy$ ./dev-cli.py test
# or with different Python versions:
~/DragonPy$ ./dev-cli.py tox
TODO
- Update 'cpu6809_html_debug.py'
- Use bottle for http control server part
- unimplemented OPs:
- RESET
- SWI / SWI2 / SWI3
- SYNC
History
(Some of the points are related to DragonPy Emulator)
- dev
- TBC
- 05.08.2023 - v0.7.1
- Split CLI in a app and dev version with different venvs.
- Update requirements
- 07.03.2023 - v0.7.0
- Replace the
Makefile
with a click CLI - Use pip-tools and https://github.com/jedie/manageprojects
- Rename git
master
tomain
branch - Run CI tests against Python 3.9, 3.10 and 3.11
- Replace Creole README with markdown
- Replace the
- 10.02.2020 - v0.6.0
- modernize project and sources
- skip support for Python 2
- minimal Python v3.6
- 19.10.2015 - v0.5.0
- Split CPU with mixin inheritance
- Optimizing:
- remove
.get()
function calls from registers - move Condition Code Register (CC) into CPU via mixin class
- remove
- Bugfix TFR and EXG by convert_differend_width()
- Run DragonPy unittests on travis CI, too.
- 24.08.2015 - v0.4.6
- Add a "max_delay", to fix the "freeze" after a speed limit change
- rename some of the "speed limit" variables
- 21.08.2015 - v0.4.5
- deactivate 'cpu6809_html_debug.py' - TODO: update it!
- update cli unittests
- update README and code cleanup
- 10.08.2015 - v0.4.4 - bugfix and cleanup the tests
- 10.08.2015 - v0.4.3 - run unittests with nose
- 27.05.2015 - v0.4.2 - Add MC6809/example6809.py
- 26.05.2015 - v0.4.0, 0.4.1 - Split MC6809 from DragonPy
- 22.09.2014 - Remove hacked CPU skeleton generator scripts with commit ac903a8f
- 14.09.2014 - Release v0.2.0 - Add a speedlimit, config dialog and IRQ: Forum post 11780
- 05.09.2014 - Release v0.1.0 - Implement pause/resume, hard-/soft-reset 6809 in GUI and improve a little the GUI/Editor stuff: v0.1.0 see also: Forum post 11719.
- 27.08.2014 - Run CoCo with Extended Color Basic v1.1, bugfix transfer BASIC Listing with 8fe24e5...697d39e see: Forum post 11696.
- 20.08.2014 - rudimenary BASIC IDE works with 7e0f16630...ce12148, see also: Forum post 11645.
- 05.08.2014 - Start to support CoCo, too with 0df724b, see also: Forum post 11573.
- 04.08.2014 - Use the origin Pixel-Font with Tkinter GUI, see: Forum post 4909 and Forum post 11570.
- 27.07.2014 - Copyrigth info from Dragon 64 ROM is alive with 543275b, see: Forum post 11524.
- 29.06.2014 - First "HELLO WORLD" works, see: Forum post 11283.
- 27.10.2013 - "sbc09" ROM works wuite well almist, see: Forum post 9752.
- 16.10.2013 - See copyright info from "Simple6809" ROM with 25a97b6 see also: Forum post 9654.
- 10.09.2013 - Start to implement the 6809 CPU with 591d2ed
- 28.08.2013 - Fork "Apple ][ Emulator" written in Python: https://github.com/jtauber/applepy to https://github.com/jedie/DragonPy
donation
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file MC6809-0.7.1.tar.gz
.
File metadata
- Download URL: MC6809-0.7.1.tar.gz
- Upload date:
- Size: 144.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 46b30c68dd000c82a20c57bb6e6322ac63b6414cecae7cf723fbfea29ebb2d06 |
|
MD5 | eddc3f8293eff985c75642aed7aec1f3 |
|
BLAKE2b-256 | 0f85158b6d472d7a66e67a099836de599250f3e08b7abc646ca011000d00df8c |
Provenance
File details
Details for the file MC6809-0.7.1-py3-none-any.whl
.
File metadata
- Download URL: MC6809-0.7.1-py3-none-any.whl
- Upload date:
- Size: 137.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d9d63dbba30a28e018906b0708df5101f9c643bb2b87f2825529d739eced9cc0 |
|
MD5 | 6a310026626286ff0d98541681657d55 |
|
BLAKE2b-256 | f241a18777784d36b286c371e0f0954b8832f04d3807e9cdca21a332e7b134c9 |