{"id":30143872,"url":"https://github.com/zeal8bit/zeal-nativeemulator","last_synced_at":"2026-05-25T03:10:23.427Z","repository":{"id":308380144,"uuid":"909608427","full_name":"Zeal8bit/Zeal-NativeEmulator","owner":"Zeal8bit","description":"A high performance Zeal 8-bit Computer emulator, written in C!","archived":false,"fork":false,"pushed_at":"2025-08-05T15:23:08.000Z","size":3048,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-08-05T17:25:25.757Z","etag":null,"topics":["emulator","retrocomputing","z80","zeal8bitcomputer"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Zeal8bit.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}},"created_at":"2024-12-29T08:31:40.000Z","updated_at":"2025-08-05T15:23:12.000Z","dependencies_parsed_at":"2025-08-05T17:38:32.310Z","dependency_job_id":null,"html_url":"https://github.com/Zeal8bit/Zeal-NativeEmulator","commit_stats":null,"previous_names":["zeal8bit/zeal-nativeemulator"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Zeal8bit/Zeal-NativeEmulator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zeal8bit%2FZeal-NativeEmulator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zeal8bit%2FZeal-NativeEmulator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zeal8bit%2FZeal-NativeEmulator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zeal8bit%2FZeal-NativeEmulator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Zeal8bit","download_url":"https://codeload.github.com/Zeal8bit/Zeal-NativeEmulator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zeal8bit%2FZeal-NativeEmulator/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269844505,"owners_count":24484195,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-11T02:00:10.019Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["emulator","retrocomputing","z80","zeal8bitcomputer"],"created_at":"2025-08-11T07:21:36.754Z","updated_at":"2026-05-25T03:10:23.421Z","avatar_url":"https://github.com/Zeal8bit.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ccenter\u003e\n    \u003cimg src=\"img/title.png\" alt=\"Zeal Native Emulator\" /\u003e\n\u003c/center\u003e\n\n\u003ccenter\u003e\n    \u003cimg src=\"img/screenshot.png\" alt=\"Screenshot\" /\u003e\n\u003c/center\u003e\n\nThis project is a software emulator for Zeal 8-bit Computer: a homebrew 8-bit computer based on a Z80 CPU.\n\nThe emulator is written in C, and runs natively on desktop platforms. It features hardware-accelerated rendering for efficient graphics and is designed to precisely replicate the behavior of the original hardware.\n\nWhether you're developing software for Zeal 8-bit Computer or just using it to execute existing software, this emulator provides a fast and flexible environment for running and testing your code.\n\n## Why this project?\n\nAn emulator for the Zeal 8-bit Computer already exists: it's called [Zeal-WebEmulator](https://github.com/Zeal8bit/Zeal-WebEmulator). That emulator is also public and open-source. To make it easily accessible without requiring any installation, it was developed in JavaScript and runs entirely in the web browser. However, due to this implementation choice, it struggles to maintain full speed and deliver a native-like experience when running Z80 CPU-intensive programs.\n\nThat's where the **Zeal Native Emulator** comes in!\nThis project is written entirely in C, using Raylib for 2D rendering and Nuklear for UI. It takes advantage of hardware acceleration through OpenGL and GLSL shaders, delivering a fast and smooth experience that works just like the real hardware. Even if the emulated programs are very demanding or CPU-intensive, the emulator always runs at full speed!\n\nThanks to its native implementation, this emulator is also much more portable, it can be adapted to other platforms including (but not limited to) WASM and Android. See the [Ports](#ports) section for more details.\n\nAdditionally, because the emulator runs directly on the host system, it's much easier to work with local files, for example, using files to emulate EEPROMs, microSD/TF cards, CF cards, and more. The emulator supports several command-line options, making it ideal for automation.\n\n## Build\n\n### Requirements\n\nTo compile the emulator, you will need the following software:\n\n* **Meson** build system\n* **GCC** or **Clang** compiler\n* Raylib **5.5** or newer (already included in the repository for the WebAssembly version).\n\n### Hardware Requirements\n\n* For the native (desktop) version, your system must support OpenGL 3.3 Core since the emulator uses modern GLSL shaders.\n* For the WebAssembly (WASM) version, the browser must support WebGL2, which corresponds to OpenGL ES 3.0.\n\n### Native compilation\n\nTo compile the emulator natively to your operating system, use the following commands:\n\n```sh\nmeson setup build\ncd build\nmeson compile\n```\n\nYou will then have a `zeal.elf` binary that you can run. You can check all the parameters via `./zeal.elf --help`.\n\n### WebAssembly compilation\n\nTo compile to WASM, use the following commands:\n\n```sh\nmeson setup build-wasm --cross-file wasm-cross.build\ncd build-wasm\nmeson compile\n```\n\n\u003e [!NOTE]\n\u003e You can optionally pass `-Denable_debugger=false` to disable the debugger\n\u003e You can also pass `-Dwasm_template=minimal` to compile with a minimal set of HTML/CSS\n\nKeep in mind that this build will use the Raylib 5.5 release that is present at the root of the project, in `raylib/wasm`. If you wish to override this library and use your own version\n\n### Compilation options\n\nAll the compilation options are listed in the `meson_options.txt` file. Check it to see all the available options.\n\nFor example, if Raylib is not installed in the system's default path, you can pass its location to the Meson command line by adding `-Draylib_path=/path/to/your/raylib`. For native compilation, the command would be:\n\n```sh\nmeson setup build -Draylib_path=/path/to/your/raylib\n```\n\n### Clean\n\nTo clean the build, you can either use:\n\n```sh\nmeson compile --clean\n```\n\nOr simply delete the build directory.\n\n### Running\n\nYou can add `zeal.elf` to your `$PATH` and run it from anywhere.  It will create a zeal.ini in the directory you run it from.\n\nFor first time users, you will need to provide a `roms/default.img` or use the `-r path/to/os_with_romdisk.img`.\nYou can copy the `build/os_with_romdisk.img` from your local build of [Zeal 8-bit OS](https://github.com/zeal8bit/Zeal-8-bit-OS) or\ndownload the latest build from the [Zeal 8-bit OS Releases](https://github.com/Zeal8bit/Zeal-8-bit-OS/releases) page.\n\n```sh\n$ zeal.elf -h\nUsage: build/zeal.elf [OPTIONS]\n\nOptions:\n  -c, --config \u003cfile\u003e           Zeal Config\n  -s, --save \u003cfile\u003e             Save * arguments to Zeal Config\n  -r, --rom \u003cfile\u003e              * Load ROM file\n  -u, --uprog \u003cfile\u003e[,\u003caddr\u003e]   Load user program in romdisk at hex address\n  -e, --eeprom \u003cfile\u003e           Load EEPROM file\n  -t, --tf \u003cfile\u003e               Load TF/SDcard file\n  -H, --hostfs \u003cpath\u003e           Set host filesystem path\n  -m, --map \u003cfile\u003e              Load memory map file (for debugging)\n  -g, --debug                   * Enable debug mode\n  -v, --verbose                 Verbose console output; repeat for more detail (-vvv)\n  -h, --help                    Show this help message\n\nExample:\n  build/zeal.elf --rom game.bin --map mem.map --debug\n```\n\n## Supported Features\n\nCurrently, the following features from Zeal 8-bit Computer are emulated:\n\n* Z80 CPU (from [Superzazu](https://github.com/superzazu/z80), modified by @Zeal8bit)\n* Z80 PIO: all modes supported, both port A and B. Implementation is independent of connected devices.\n* 22-bit MMU\n* 256KB NOR flash (R/W following the SST39 NOR flash specification)\n* 512KB RAM\n* Zeal 8-bit Video Card, **firmware v1.0.0** :\n  * All text, graphics, bitmap modes, including sprites, palette, layers, etc...\n  * Text controller\n  * DMA controller\n  * Audio controller (all voices, including the sample table)\n  * CRC controller\n  * SPI controller\n* PS/2 Keyboard, with interrupts\n* UART TX: prints to stdout\n* I2C: bus emulated, supporting write/read/write-read operations\n  * DS1307 RTC\n  * 24C512 (64KB) EEPROM is emulated\n* microSD/TF card support\n* HostFS support to access a directory of the desktop computer in the emulator directly\n\nThe emulator also implements a debugger, with the following features:\n\n* Breakpoints\n* Step/stop/restart/continue\n* Disassembler: when the emulator reaches a breakpoint, the code at program counter is disassembled. Clicking on one of the instructions will toggle a breakpoint.\n* Load a map file generated from `z88dk-z88dk` to view symbols in the assembly view when doing step-by-step debugging\n* Set breakpoints with either a hexadecimal PC address or a symbol (from the map file)\n* View RAM memory content at any virtual address, updated in real-time\n* View VRAM memory content, including the current palette, tileset, tilemaps and font\n\n## Ports\n\nRaylib supports a wide range of platforms, which makes the Zeal Native Emulator easy to port to other targets.\n\n### WebAssembly\n\n\u003e [!NOTE]\n\u003e This port is still in progress.\n\nTo compile the emulator to WebAssembly, follow the steps described above in [WebAssembly compilation](#webassembly-compilation).\n\nAfter compilation, the `build-wasm` directory will contain an `index.html`, `index.css`, and all other necessary files.\n\n**Note:** You cannot simply open the `index.html` file directly in your browser to run the emulator. You need to start a local web server to serve the files properly. This can be as simple as serving the current directory. For example, the easiest way is:\n\n```sh\ncd build-wasm\npython3 -m http.server\n```\n\nThen, open http://0.0.0.0:8000/ in any modern web browser (Chrome-based browsers are recommended).\n\n### Android (WIP)\n\n\u003e [!NOTE]\n\u003e This port is still in progress.\n\nIt requires the Android NDK in order to compile the C code for the Android execution environment.\n\n## Contributing\n\nAnyone can contribute to this project, contributions are welcome!\n\nFeel free to fix any bug that you may see or encounter, implement any feature that is present in the TODO list or a new one that you find useful or important.\n\nTo contribute:\n\n* Fork the Project\n* Create your feature Branch (optional)\n* Commit your changes. Please make a clear and concise commit message (*)\n* Push to the branch\n* Open a Pull Request\n\n(*) A good commit message is as follows:\n\n```text\nModule: add/fix/remove a from b\n\nExplanation on what/how/why\n```\n\nFor example:\n\n```text\nhw/zvb: implement 320x240 text-mode\n\nIt is now possible to switch to 320x240 text-mode and display text.\n```\n\n## License\n\n* Z80 CPU C implementation from [Superzazu](https://github.com/superzazu/z80) is distributed under the [MIT licence](https://github.com/superzazu/z80/blob/master/LICENSE).\n* [Raylib](https://github.com/raysan5/raylib) is distributed under this [LICENSE](raylib/LICENSE.txt)\n* [raylib-nuklear](https://github.com/RobLoach/raylib-nuklear) is distributed under an [unmodified zlib/libpng license](include/ui//raylib-nuklear.h)\n* [nuklear](https://github.com/Immediate-Mode-UI/Nuklear/) is distributed under [various licenses](include/ui/nuklear.h)\n* ProggyClean font is distributed under this [LICENSE](https://github.com/chrissimpkins/codeface/blob/master/fonts/proggy-clean/license.txt)\n\nAll other files are distributed under the Apache 2.0 License, unless noted otherwise. See LICENSE file for more information.\n\nYou are free to use it for personal and commercial use, the boilerplate present in each file must not be removed.\n\n## Contact\n\nFor any suggestion or request, you can contact me at `contact [at] zeal8bit [dot] com`\n\nFor feature requests, you can also open an issue or a pull request.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeal8bit%2Fzeal-nativeemulator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzeal8bit%2Fzeal-nativeemulator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeal8bit%2Fzeal-nativeemulator/lists"}