Microsoft MACRO-80 compatible assembler toolchain for Linux
Project description
um80 - Microsoft MACRO-80 Compatible Toolchain for Linux
A complete Unix/Linux implementation of Microsoft's classic CP/M development tools from the 1980s:
- um80 - MACRO-80 compatible assembler for 8080/Z80
- ul80 - LINK-80 compatible linker
- ulib80 - LIB-80 compatible library manager
- ucref80 - Cross-reference utility
- ud80 - 8080/Z80 disassembler for CP/M .COM files
These tools can assemble, link, and manage 8080/Z80 assembly code to produce CP/M-compatible .COM executables on modern Linux systems.
Installation
From PyPI (recommended)
pip install um80
From source
git clone https://github.com/um80/um80_and_friends.git
cd um80_and_friends
pip install -e .
Quick Start
Assemble a source file
um80 program.mac # Creates program.rel
um80 -o output.rel program.mac # Specify output name
um80 -l listing.prn program.mac # Generate listing file
Link object files
ul80 program.rel # Creates program.com
ul80 -o output.com a.rel b.rel # Link multiple files
ul80 -s program.rel # Generate symbol file
Disassemble a COM file
ud80 program.com # Creates program.mac
ud80 -z program.com # Z80 mode
ud80 -e 0200 program.com # Add entry point at 0200h
ud80 -d 0500-05FF program.com # Mark range as data
Create/manage libraries
ulib80 -c mylib.lib a.rel b.rel # Create library
ulib80 -l mylib.lib # List contents
ulib80 -p mylib.lib # Show public symbols
ulib80 -x mylib.lib module # Extract module
ulib80 -a mylib.lib new.rel # Add module
ulib80 -d mylib.lib module # Delete module
Generate cross-reference
ucref80 program.mac # Print to stdout
ucref80 -o xref.txt *.mac # Output to file
Tools Reference
um80 - Assembler
Microsoft MACRO-80 compatible assembler supporting:
- 8080 and Z80 instruction sets
- Macros with parameters (MACRO/ENDM)
- Repeat blocks (REPT, IRP, IRPC)
- Conditional assembly (IF/ELSE/ENDIF, IFDEF, etc.)
- Segments (CSEG, DSEG, ASEG, COMMON)
- PUBLIC/EXTRN for module linking
- Include files
- All standard directives (ORG, EQU, SET, DB, DW, DS, etc.)
See man um80 for full documentation, or refer to the original Microsoft M80 Manual.
ul80 - Linker
LINK-80 compatible linker that:
- Links multiple .REL relocatable object files
- Resolves external references
- Produces CP/M .COM executables
- Supports COMMON blocks
- Can output Intel HEX format
See man ul80 for full documentation, or refer to the original Microsoft L80 Manual.
ulib80 - Library Manager
LIB-80 compatible library manager for:
- Creating .LIB library archives
- Listing library contents and public symbols
- Adding/removing/extracting modules
See man ulib80 for full documentation, or refer to the original Microsoft CREF/LIB Manual.
ucref80 - Cross-Reference
Generates cross-reference listings showing:
- Symbol definitions
- Symbol references by file and line
- PUBLIC and EXTRN declarations
See man ucref80 for full documentation.
ud80 - Disassembler
8080/Z80 disassembler that:
- Disassembles CP/M .COM files to .MAC source
- Produces output compatible with um80
- Supports both 8080 and Z80 instruction sets
- Allows marking data ranges and entry points
- Generates re-assemblable source code
See man ud80 for full documentation (no Microsoft equivalent exists).
File Formats
| Extension | Description |
|---|---|
| .MAC | Assembly source (MACRO-80 format) |
| .REL | Relocatable object file |
| .COM | CP/M executable |
| .LIB | Library archive |
| .PRN | Assembly listing |
| .SYM | Symbol file |
Compatibility Notes
These tools aim for compatibility with the original Microsoft tools while running on modern Unix/Linux systems:
- Source files use Unix line endings (LF), but CR/LF is also accepted
- File names are case-insensitive for symbols (converted to uppercase)
- Default origin is 0100h (standard CP/M load address)
- Output files are binary-compatible with original CP/M tools
Documentation
- Man pages:
man um80,man ul80,man ulib80,man ucref80,man ud80 - Original Microsoft manuals in
docs/external/:m80.pdf- MACRO-80 assemblerl80.pdf- LINK-80 linkercref_lib.pdf- CREF and LIB-808080asm.pdf- 8080 assembly reference
Example Workflow
# Assemble source files
um80 -o main.rel main.mac
um80 -o util.rel util.mac
# Create a library
ulib80 -c mylib.lib helper.rel support.rel
# Link everything together
ul80 -o program.com main.rel util.rel mylib.lib
# Run in CP/M emulator
cpm program.com
Installing Man Pages
After pip installation, install the man pages manually:
# Find where the package is installed
PKGDIR=$(python3 -c "import um80; print(um80.__path__[0])")
# Copy man pages to system location (requires sudo)
sudo cp "$PKGDIR/../docs/man/"*.1 /usr/local/share/man/man1/
sudo mandb
Or view them directly:
man docs/man/um80.1
License
GNU General Public License v3.0 or later (GPLv3+). See LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit issues and pull requests.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file um80-0.2.2.tar.gz.
File metadata
- Download URL: um80-0.2.2.tar.gz
- Upload date:
- Size: 26.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c115b470d490a42f5d3375d86fc3830a40b01e8d5f28db898405f478a267650
|
|
| MD5 |
d5c62acac1bb6a01075ed969063cd750
|
|
| BLAKE2b-256 |
2052f9167cff79ffc342ee5483f10e0d84eeeb85e27a17b4422c57e460c78552
|
File details
Details for the file um80-0.2.2-py3-none-any.whl.
File metadata
- Download URL: um80-0.2.2-py3-none-any.whl
- Upload date:
- Size: 69.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
951479e51d8b86511d0017618473751db02fd11241cebb2a2649cc44a30c9ced
|
|
| MD5 |
ec9ce7e2650ccdd51acbf819d92dbebb
|
|
| BLAKE2b-256 |
864bd9460163819acdc4bfda8fb51918e72cab1d128c54c9c503f7f8df999bbe
|