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.3.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.3-py3-none-any.whl (88.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: freedos_micro_python-0.1.3.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.3.tar.gz
Algorithm Hash digest
SHA256 178ce79d1b5a6166687f2c063a62a19aa20155674ebfe6c46973b521bc10ae1c
MD5 710c038621a8b7a7a0f7bcf98a603802
BLAKE2b-256 310549b9f53df1cbc8dfe20c207c5d0a817543ce71224f723bfbdd59214ec3e7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for freedos_micro_python-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8fe63289fec118bec1cd59062c9ad71e9d893e4d2d01957e4fb05459a9bb82ec
MD5 81c33aebb208a6e56d128b88d4435e8b
BLAKE2b-256 f988575b6dd2da98dbdcceeb6393438cdfb0f5b159069a7b83f75106ed77cb91

See more details on using hashes here.

Provenance

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