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

Uploaded Python 3

File details

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

File metadata

  • Download URL: freedos_micro_python-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 650e8160a3529029d3a0c0495f22bcc21132c3e248ee41e5f56614ef08af93cf
MD5 5fccb373dc00a51323c40440263884ba
BLAKE2b-256 03b93a75e7197cc5c597c103b902bb9a9f398ecc81dad2cbe33825871556ec9b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for freedos_micro_python-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0e4d17a4aa04d8a38a5c4680beeb213cdbdb0f1ada68d47b9a70a59d6241cd7d
MD5 87965d3604e9497c528f3e43b4b15acf
BLAKE2b-256 3ff5d2849f5d5464d8f9990f8f87cca84206250b31d96f4799c9d67007c7dd23

See more details on using hashes here.

Provenance

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