Skip to main content

MicroPython port for FreeDOS / i386 — built end-to-end through the uc386 C23 compiler

Project description

freedos_micro_python

MicroPython port for FreeDOS / i386, built end-to-end through the uc386 C23 compiler. Produces a runnable flat-binary or PMODE/W .exe with a fully-functional Python REPL — arithmetic, control flow, classes, list comprehensions, exception handling, and ~25 named builtins all work.

MicroPython uc386-triage on 2026-05-01; uc386-dos with i386
Type "help()" for more information.
>>> def fib(n):
...     if n < 2: return n
...     return fib(n-1) + fib(n-2)
...
>>> print([fib(i) for i in range(10)])
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

Status

  • ~444 KB binary at the EXTRA_FEATURES + axtls TLS configuration
  • ~70 smoke tests pin REPL banner, builtins, comprehensions, exceptions, module imports (os, time, re, json, hashlib, ssl, ...), and the long-int / float code paths
  • See NOTES.md for the full per-slice development log

Install

pip install freedos_micro_python

This pulls in uc386 (the compiler) automatically. You also need:

  • a Unix-y shell to drive the build_port.sh script (macOS / Linux)
  • git (for fetching the upstream MicroPython sources)
  • make is not required

Quick start

mkdir mp-build && cd mp-build
freedos-micropython fetch        # clones upstream MicroPython into ./upstream
freedos-micropython build        # per-TU triage build (generates qstrdefs)
freedos-micropython port         # multi-TU build → ./build/micropython.bin

Wall-clock for the port step is ~14 minutes on a recent Mac. The output is ./build/micropython.bin, a flat i386 DOS binary runnable under uc386's emulator:

from uc386.dos_emu import run
res = run("build/micropython.bin", timeout_seconds=10.0,
          instruction_limit=2_000_000_000)
print(res.stdout)   # → "MicroPython uc386-triage on ...\n..."

To produce a real DOS .exe (PMODE/W bound, ~12 KB stub overhead): use uc386's addons/harness/exe.py.

Testing

After a successful port build:

pytest --pyargs freedos_micro_python    # parametric: tests live in tests/
# or, against a checkout:
pytest tests/

The smoke tests skip cleanly if build/micropython.bin doesn't exist.

Layout

  • src/freedos_micro_python/scripts/ — the three shell scripts (fetch.sh, build.sh, build_port.sh); invoked via the CLI wrapper, which sets UC386_LIB_INCLUDE from the installed uc386
  • src/freedos_micro_python/port/ — the FreeDOS port files (mpconfigport.h, *_uc386dos.c, lwIP + axtls glue)
  • src/freedos_micro_python/gen_qstrdefs.py — qstr table generator (mirrors upstream's tools/makeqstrdata.py)
  • src/freedos_micro_python/cli.py — the freedos-micropython CLI
  • tests/ — pytest smoke tests + qstr unit tests
  • rigs/dosbox-x-rig/ — DOSBox-X regression rig (network packet driver)
  • rigs/tls-rig/ — axtls TLS regression rig

License

MIT, matching upstream MicroPython. The integration glue (scripts, port files, CLI, tests) is what's covered here; the upstream MicroPython sources fetched by build_port.sh retain their own MIT license.

Related projects

  • uc386 — the C23 compiler that builds this port. Hosts the dos_emu test harness.
  • uc_core — shared C23 frontend used by uc386 (and the Z80 sibling, uc80).
  • MicroPython — upstream.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

freedos_micro_python-0.1.0.tar.gz (106.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

freedos_micro_python-0.1.0-py3-none-any.whl (88.1 kB view details)

Uploaded Python 3

File details

Details for the file freedos_micro_python-0.1.0.tar.gz.

File metadata

  • Download URL: freedos_micro_python-0.1.0.tar.gz
  • Upload date:
  • Size: 106.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for freedos_micro_python-0.1.0.tar.gz
Algorithm Hash digest
SHA256 25985fcdf9fc77f2312a289e1f701a82878804d4c88a8f40af801e3e59ed7742
MD5 5d6e3811bd6268d3cd03055aa57710c6
BLAKE2b-256 e9cb6afb53c8e30901e2b8c1a2f513346a4b8a42bc166bd55bc2b487e3e58d8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for freedos_micro_python-0.1.0.tar.gz:

Publisher: publish.yml on avwohl/freedos_micro_python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file freedos_micro_python-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for freedos_micro_python-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9dc5bc685410f8c8390b1e0a17583f7fb5b1eb8429aad5345b54ab2d2c98424b
MD5 ce1438d3072a7e46ef7a80bd51ac358f
BLAKE2b-256 bf8cce97ebd16f2d2229a431c0f846375cfc355cffc812fd3aa1abb0ff367d24

See more details on using hashes here.

Provenance

The following attestation bundles were made for freedos_micro_python-0.1.0-py3-none-any.whl:

Publisher: publish.yml on avwohl/freedos_micro_python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page