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

Uploaded Python 3

File details

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

File metadata

  • Download URL: freedos_micro_python-0.1.4.tar.gz
  • Upload date:
  • Size: 106.5 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.4.tar.gz
Algorithm Hash digest
SHA256 9d4d1d1434805c60014a0de67ef4dc2cedbb38747f5730d837d99942c6563d16
MD5 b5310141520d8c75a0b549b87ff13f25
BLAKE2b-256 b65f19d983d545393b3c0fc6caf5e6a1c5268f9e9e8c4bbf9bac63abe96ccae4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for freedos_micro_python-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 01ab86b6b4b77a0dda727d2eb1f040567775647523ced4d5864a2040617d790e
MD5 f5a9b078072b8859a48e3c91efb800cf
BLAKE2b-256 4acf492af3a2bb7709113d925463dd818d050a37fee8c99ee20e4168548d2593

See more details on using hashes here.

Provenance

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