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.2.tar.gz (106.4 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.2-py3-none-any.whl (88.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: freedos_micro_python-0.1.2.tar.gz
  • Upload date:
  • Size: 106.4 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.2.tar.gz
Algorithm Hash digest
SHA256 7c575a0c29acba84d08f461fa772e85c72ceddb26822716e9cf87098b41c90b7
MD5 fc09fa018e65cebec924d0a2fe2f5575
BLAKE2b-256 3ff716959e51e0003d9b0c5fdde3474e4821be58e0f77222a65ddc816c125510

See more details on using hashes here.

Provenance

The following attestation bundles were made for freedos_micro_python-0.1.2.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.2-py3-none-any.whl.

File metadata

File hashes

Hashes for freedos_micro_python-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a45a7546cc9ecd03bdb6875fd5b18c00e03f397fbb2090d3895fe72954f4e4ff
MD5 24542237dc82fc160824266ede8c7315
BLAKE2b-256 fb3ec74cb47348dc4817317cc9f40a88e893ae55c45a01b20cb6f7558b960530

See more details on using hashes here.

Provenance

The following attestation bundles were made for freedos_micro_python-0.1.2-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