{"id":35205215,"url":"https://github.com/avwohl/romwbw_emu","last_synced_at":"2026-03-17T18:38:14.710Z","repository":{"id":328679317,"uuid":"1115546991","full_name":"avwohl/romwbw_emu","owner":"avwohl","description":"Hardware-level Z80 emulator for RomWBW with 512KB ROM + 512KB RAM banking and HBIOS support","archived":false,"fork":false,"pushed_at":"2026-03-09T16:01:26.000Z","size":13104,"stargazers_count":5,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-09T20:55:07.947Z","etag":null,"topics":["cpm","emulator","hbios","retro-computing","romwbw","webassembly","z80"],"latest_commit_sha":null,"homepage":"https://github.com/avwohl/romwbw_emu","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/avwohl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-13T04:15:39.000Z","updated_at":"2026-03-09T16:01:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/avwohl/romwbw_emu","commit_stats":null,"previous_names":["avwohl/romwbw_emu"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/avwohl/romwbw_emu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avwohl%2Fromwbw_emu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avwohl%2Fromwbw_emu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avwohl%2Fromwbw_emu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avwohl%2Fromwbw_emu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/avwohl","download_url":"https://codeload.github.com/avwohl/romwbw_emu/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avwohl%2Fromwbw_emu/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30628441,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-17T17:32:55.572Z","status":"ssl_error","status_checked_at":"2026-03-17T17:32:38.732Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpm","emulator","hbios","retro-computing","romwbw","webassembly","z80"],"created_at":"2025-12-29T13:38:57.491Z","updated_at":"2026-03-17T18:38:14.704Z","avatar_url":"https://github.com/avwohl.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RomWBW Emulator\r\n\r\n[![GitHub Release](https://img.shields.io/github/v/release/avwohl/romwbw_emu)](https://github.com/avwohl/romwbw_emu/releases/latest)\r\n[![Build Status](https://img.shields.io/github/actions/workflow/status/avwohl/romwbw_emu/release.yml)](https://github.com/avwohl/romwbw_emu/actions/workflows/release.yml)\r\n\r\nA hardware-level Z80 emulator for running RomWBW and CP/M from ROM and disk images. Features full Z80 CPU emulation with 512KB ROM + 512KB RAM bank switching and HBIOS hardware abstraction.\r\n\r\n## Quick Start\r\n\r\n```bash\r\n# Build the emulator\r\ncd src \u0026\u0026 make\r\n\r\n# Run RomWBW (boots to ROM disk)\r\n./romwbw_emu --romwbw=../roms/emu_avw.rom\r\n\r\n# Run with a hard disk image\r\n./romwbw_emu --romwbw=../roms/emu_avw.rom --disk0=../disks/hd1k_combo.img\r\n```\r\n\r\nAt the RomWBW boot menu, press `2` to boot from disk, or `C` for CP/M from ROM.\r\n\r\n## Installation\r\n\r\n### Debian/Ubuntu\r\n\r\n```bash\r\n# Download and install the latest .deb package\r\ncurl -LO https://github.com/avwohl/romwbw_emu/releases/latest/download/romwbw-emu_amd64.deb\r\nsudo dpkg -i romwbw-emu_amd64.deb\r\n\r\n# Run with included ROM\r\nromwbw_emu --romwbw=/usr/share/romwbw_emu/roms/emu_avw.rom\r\n```\r\n\r\nFor ARM64 systems, use `romwbw-emu_arm64.deb` instead.\r\n\r\n### Fedora/RHEL\r\n\r\n```bash\r\n# Download and install the latest .rpm package\r\ncurl -LO https://github.com/avwohl/romwbw_emu/releases/latest/download/romwbw-emu.x86_64.rpm\r\nsudo rpm -i romwbw-emu.x86_64.rpm\r\n\r\n# Run with included ROM\r\nromwbw_emu --romwbw=/usr/share/romwbw_emu/roms/emu_avw.rom\r\n```\r\n\r\nFor ARM64 systems, use `romwbw-emu.aarch64.rpm` instead.\r\n\r\n### From Source\r\n\r\nSee [Building](#building) below.\r\n\r\n## Disk Images\r\n\r\nThe emulator supports RomWBW hard disk images in both **hd1k** (modern) and **hd512** (classic) formats. Format is auto-detected from the MBR partition table.\r\n\r\n### Recommended Disk Images\r\n\r\n| Image | Size | Description |\r\n|-------|------|-------------|\r\n| `hd1k_combo.img` | 49MB | Multi-slice combo disk with CP/M 2.2 and utilities |\r\n| `hd1k_games.img` | 8MB | Classic games: Colossal Cave, Castle, Dungeon |\r\n| `hd1k_infocom.img` | 8MB | Infocom text adventures: Zork 1-3, Hitchhiker's Guide |\r\n| `hd1k_cpm22.img` | 8MB | CP/M 2.2 system disk |\r\n| `hd1k_zsdos.img` | 8MB | ZSDOS system disk |\r\n\r\nDownload disk images from [RomWBW releases](https://github.com/wwarthen/RomWBW/releases) (in the Package.zip).\r\n\r\n### Disk Format Detection\r\n\r\n- **hd1k format**: Detected by partition type 0x2E in MBR, or 8MB file size\r\n  - 1MB prefix, 8MB slices, 16KB system area, 1024 directory entries\r\n- **hd512 format**: Default for other disk images\r\n  - No prefix, 8.3MB slices, 128KB system area, 512 directory entries\r\n\r\n### SIMH Compatibility\r\n\r\nSIMH AltairZ80 hard disk images (`.dsk` files) are compatible:\r\n\r\n| File Size | Format | Works? |\r\n|-----------|--------|--------|\r\n| 8,388,608 bytes (8 MB) | SIMH HDSK / hd1k | Yes |\r\n| 8,519,680 bytes (8.32 MB) | SIMH HDCPM / hd512 | Yes |\r\n| 51,380,224 bytes (49 MB) | RomWBW combo (native) | Yes |\r\n\r\nSee `docs/DISK_FORMATS.md` for details.\r\n\r\n### Drive Letters\r\n\r\n- `A:` - RAM disk (MD0)\r\n- `B:` - ROM disk (MD1)\r\n- `C:` - First hard disk (--disk0)\r\n- `D:` - Second hard disk (--disk1)\r\n\r\n## WebAssembly Version\r\n\r\nTry RomWBW in your browser - no installation required:\r\n\r\n```bash\r\ncd web \u0026\u0026 make\r\n# Open romwbw.html in a browser, or:\r\nmake serve   # Start local server at http://localhost:8000\r\n```\r\n\r\nLoad your own ROM and disk images through the web interface.\r\n\r\n## Building\r\n\r\n```bash\r\ncd src/\r\nmake           # Build romwbw_emu\r\n```\r\n\r\n**Requirements:** C++11 compiler (gcc/clang), POSIX system (Linux/macOS)\r\n\r\nFor WebAssembly:\r\n```bash\r\ncd web/\r\nmake           # Requires emscripten\r\n```\r\n\r\n## Features\r\n\r\n- **Memory:** 512KB ROM + 512KB RAM with 32KB bank switching\r\n- **HBIOS:** Hardware abstraction layer implemented in C++\r\n- **Disks:** ROM disk, RAM disk, and file-backed hard disk images\r\n- **Disk Formats:** Auto-detects hd1k and hd512 RomWBW formats\r\n- **Console:** Full terminal emulation with escape sequences\r\n- **WebAssembly:** Run RomWBW in any modern browser\r\n\r\n## Boot Configuration\r\n\r\nThe emulator supports automatic boot configuration via NVRAM. Settings persist across sessions in `~/.config/romwbw_emu/nvram.json`.\r\n\r\n### Quick Boot Examples\r\n\r\n```bash\r\n# Auto-boot to CP/M (ROM app 'C')\r\n./romwbw_emu --romwbw=roms/emu_avw.rom --boot=C\r\n\r\n# Auto-boot from disk 0, slice 0\r\n./romwbw_emu --romwbw=roms/emu_avw.rom --disk0=disk.img --boot=0\r\n\r\n# Auto-boot from disk 2, slice 3\r\n./romwbw_emu --romwbw=roms/emu_avw.rom --disk0=d0.img --disk1=d1.img --disk2=d2.img --boot=2.3\r\n\r\n# Show boot menu (default)\r\n./romwbw_emu --romwbw=roms/emu_avw.rom --boot=H\r\n```\r\n\r\n### Using SYSCONF (Interactive Configuration)\r\n\r\nPress `W` at the boot menu to access the RomWBW SYSCONF utility:\r\n\r\n```\r\nBoot [H=Help]: W\r\n\r\nRomWBW System Config Utility, Version 1.0\r\n\r\nCommands:\r\n  P           - Print current settings\r\n  S BO D,u,s  - Set boot to Disk unit u, slice s\r\n  S BO R,app  - Set boot to ROM app (C=CP/M, Z=ZSDOS, etc.)\r\n  S AB E,t    - Enable autoboot with t second timeout (0=immediate)\r\n  S AB D      - Disable autoboot\r\n  R           - Reset NVRAM to defaults\r\n  Q           - Quit\r\n\r\nExamples:\r\n  S BO D,2,3  - Boot from disk 2, slice 3\r\n  S BO R,C    - Boot CP/M from ROM\r\n  S AB E,5    - Enable autoboot with 5 second countdown\r\n  S AB E,0    - Enable autoboot immediately (no countdown)\r\n```\r\n\r\nSettings configured via SYSCONF are saved automatically when the emulator exits.\r\n\r\n### Boot Format Reference\r\n\r\n| Format | Description |\r\n|--------|-------------|\r\n| `--boot=C` | Boot ROM app C (CP/M 2.2) |\r\n| `--boot=Z` | Boot ROM app Z (ZSDOS) |\r\n| `--boot=0` | Boot disk 0, slice 0 |\r\n| `--boot=2.3` | Boot disk 2, slice 3 |\r\n| `--boot=H` | Show boot menu |\r\n\r\n## Command Line Options\r\n\r\n```\r\n./romwbw_emu --romwbw=\u003crom.rom\u003e [options]\r\n\r\nOptions:\r\n  --romwbw=FILE     Enable RomWBW mode with ROM file\r\n  --boot=CMD        Auto-boot command (C, Z, 0, 2.3, H, etc.)\r\n  --debug           Enable debug output\r\n  --strict-io       Halt on unexpected I/O ports\r\n\r\nDisk options:\r\n  --disk0=FILE      Attach disk image to slot 0 (drives C:-F:)\r\n  --disk1=FILE      Attach disk image to slot 1 (drives G:-J:)\r\n\r\nOther options:\r\n  --escape=CHAR     Console escape char (default ^E)\r\n  --trace=FILE      Write execution trace\r\n  --symbols=FILE    Load symbol table (.sym)\r\n\r\nNVRAM persistence:\r\n  Boot settings are saved to ~/.config/romwbw_emu/nvram.json\r\n  Use SYSCONF (W at boot menu) to configure interactively.\r\n```\r\n\r\n## Examples\r\n\r\n```bash\r\n# Boot from ROM disk (default)\r\n./romwbw_emu --romwbw=roms/emu_avw.rom\r\n\r\n# Boot with hard disk attached\r\n./romwbw_emu --romwbw=roms/emu_avw.rom --disk0=disks/hd1k_combo.img\r\n\r\n# Boot with tools disk\r\n./romwbw_emu --romwbw=roms/emu_avw.rom --disk0=disks/z80cpm_tools.img\r\n```\r\n\r\n## Project Structure\r\n\r\n```\r\nromwbw_emu/\r\n├── src/\r\n│   ├── romwbw_emu.cc   # Main emulator with HBIOS and disk support\r\n│   ├── romwbw_mem.h    # Bank-switched memory (512KB ROM + 512KB RAM)\r\n│   ├── hbios_dispatch.*# HBIOS service handlers\r\n│   └── emu_io*         # I/O abstraction layer (CLI/WASM)\r\n├── web/\r\n│   ├── romwbw.html     # RomWBW web interface\r\n│   └── romwbw_web.cc   # WebAssembly emulator\r\n├── roms/               # ROM images and build scripts\r\n├── disks/              # Disk images\r\n└── docs/               # Technical documentation\r\n```\r\n\r\n## Documentation\r\n\r\n- `docs/BOOT_CONFIGURATION.md` - Boot options, SYSCONF utility, NVRAM persistence\r\n- `docs/DISK_FORMATS.md` - Disk formats, SIMH compatibility, and cpmtools usage\r\n- `docs/ROMWBW_INTEGRATION.md` - RomWBW architecture and HBIOS details\r\n- `docs/HBIOS_Implementation_Guide.md` - How HBIOS is implemented\r\n- `docs/HBIOS_DATA_EXPORTS.md` - HBIOS data structures\r\n\r\n## License\r\n\r\nGNU General Public License v3.0 - see [LICENSE](LICENSE).\r\n\r\n## Related Projects\r\n\r\n- [80un](https://github.com/avwohl/80un) - Unpacker for CP/M compression and archive formats (LBR, ARC, squeeze, crunch, CrLZH)\r\n- [cpmdroid](https://github.com/avwohl/cpmdroid) - Z80/CP/M emulator for Android with RomWBW HBIOS compatibility and VT100 terminal\r\n- [cpmemu](https://github.com/avwohl/cpmemu) - CP/M 2.2 emulator with Z80/8080 CPU emulation and BDOS/BIOS translation to Unix filesystem\r\n- [ioscpm](https://github.com/avwohl/ioscpm) - Z80/CP/M emulator for iOS and macOS with RomWBW HBIOS compatibility\r\n- [learn-ada-z80](https://github.com/avwohl/learn-ada-z80) - Ada programming examples for the uada80 compiler targeting Z80/CP/M\r\n- [mbasic](https://github.com/avwohl/mbasic) - Modern MBASIC 5.21 Interpreter \u0026 Compilers\r\n- [mbasic2025](https://github.com/avwohl/mbasic2025) - MBASIC 5.21 source code reconstruction - byte-for-byte match with original binary\r\n- [mbasicc](https://github.com/avwohl/mbasicc) - C++ implementation of MBASIC 5.21\r\n- [mbasicc_web](https://github.com/avwohl/mbasicc_web) - WebAssembly MBASIC 5.21\r\n- [mpm2](https://github.com/avwohl/mpm2) - MP/M II multi-user CP/M emulator with SSH terminal access and SFTP file transfer\r\n- [scelbal](https://github.com/avwohl/scelbal) - SCELBAL BASIC interpreter - 8008 to 8080 translation\r\n- [uada80](https://github.com/avwohl/uada80) - Ada compiler targeting Z80 processor and CP/M 2.2 operating system\r\n- [uc80](https://github.com/avwohl/uc80) - ANSI C compiler targeting Z80 processor and CP/M 2.2 operating system\r\n- [ucow](https://github.com/avwohl/ucow) - Unix/Linux Cowgol to Z80 compiler\r\n- [um80_and_friends](https://github.com/avwohl/um80_and_friends) - Microsoft MACRO-80 compatible toolchain for Linux: assembler, linker, librarian, disassembler\r\n- [upeepz80](https://github.com/avwohl/upeepz80) - Universal peephole optimizer for Z80 compilers\r\n- [uplm80](https://github.com/avwohl/uplm80) - PL/M-80 compiler targeting Intel 8080 and Zilog Z80 assembly language\r\n- [z80cpmw](https://github.com/avwohl/z80cpmw) - Z80 CP/M emulator for Windows (RomWBW)\r\n\r\n## See Also\r\n\r\n- [RomWBW](https://github.com/wwarthen/RomWBW) - The original RomWBW project by Wayne Warthen\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favwohl%2Fromwbw_emu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Favwohl%2Fromwbw_emu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favwohl%2Fromwbw_emu/lists"}