{"id":50938486,"url":"https://github.com/johnwbyrd/zbc","last_synced_at":"2026-06-17T11:32:29.071Z","repository":{"id":326213196,"uuid":"1095543102","full_name":"johnwbyrd/zbc","owner":"johnwbyrd","description":"Zero Board Computer semihosting device reference implementation","archived":false,"fork":false,"pushed_at":"2026-06-10T20:45:16.000Z","size":700,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-10T21:09:16.730Z","etag":null,"topics":["board","computer","mame","picolibc","qemu","reference","semihost","semihosting","zbc","zero"],"latest_commit_sha":null,"homepage":"https://johnwbyrd.github.io/zbc/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/johnwbyrd.png","metadata":{"files":{"readme":"README.rst","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-11-13T07:33:33.000Z","updated_at":"2026-06-10T20:46:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/johnwbyrd/zbc","commit_stats":null,"previous_names":["johnwbyrd/semihost","johnwbyrd/zbc"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/johnwbyrd/zbc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnwbyrd%2Fzbc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnwbyrd%2Fzbc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnwbyrd%2Fzbc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnwbyrd%2Fzbc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/johnwbyrd","download_url":"https://codeload.github.com/johnwbyrd/zbc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnwbyrd%2Fzbc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34447264,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-17T02:00:05.408Z","response_time":127,"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":["board","computer","mame","picolibc","qemu","reference","semihost","semihosting","zbc","zero"],"created_at":"2026-06-17T11:32:28.027Z","updated_at":"2026-06-17T11:32:29.066Z","avatar_url":"https://github.com/johnwbyrd.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"Zero Board Computer\n===================\n\n**Working printf, fopen, and a real filesystem on any CPU -- real,\nemulated, or yet to be designed. On day one, before any hardware\nexists.**\n\nEmbedded bring-up has a chicken-and-egg problem. You can't debug\nyour firmware until the serial port works. You can't test your\nfilesystem until the flash driver works. The first six weeks of\nevery new-hardware project go to fighting your way to a working\nprintf.\n\nZero Board Computer (ZBC) eliminates the chicken-and-egg by giving\nany CPU file input/output, console, and clock services through a\n32-byte memory-mapped device. The same firmware runs against your\nsimulator, against a field-programmable gate array (FPGA)\nprototype, against the manufactured chip, and against a QEMU or a\nMAME virtual machine, because the contract is the same everywhere:\nread and write memory.\n\n**Why this matters, who it's for, and how it works:**\nhttps://johnwbyrd.github.io/zbc/introduction.html\n\n**Five-minute slide intro:** https://johnwbyrd.github.io/zbc/presentation-intro/\n\n**Full documentation and reference:** https://johnwbyrd.github.io/zbc/\n\n**Wiki and community:** https://www.zeroboardcomputer.com/\n\nWhat's In This Repo\n-------------------\n\nSources are organized by language so new implementations can slot in as\nsiblings without disturbing existing ones.  The protocol primitives\nevery implementation needs (RIFF codec, opcode table, header) live in\n``shared/``; each language tier owns its own client, host, and tests on\ntop of that base.\n\n- `include/shared/ \u003cinclude/shared\u003e`_ + `src/shared/ \u003csrc/shared\u003e`_ --\n  protocol primitives (``zbc_protocol.h``, RIFF codec, opcode table);\n  compiled into every host and client so the wire format can't drift.\n- `include/c/ \u003cinclude/c\u003e`_ + `src/c/ \u003csrc/c\u003e`_ -- C90 reference client\n  and host libraries plus the ANSI/stdio backend and platform sandbox\n  code.\n- `include/cpp/zbc/ \u003cinclude/cpp/zbc\u003e`_ + `src/cpp/ \u003csrc/cpp\u003e`_ -- C++17\n  host library (``zbc::Device`` / ``zbc::Backend`` / ``zbc::Policy``)\n  intended for embedding in emulators.\n- `test/ \u003ctest\u003e`_ -- ``c/`` and ``cpp/`` host tests, ``conformance/`` for\n  C-vs-C++ wire-protocol equivalence, ``target/`` for cross-compiled\n  on-emulator runs (i386 under QEMU, 6502 under MAME), ``common/`` for\n  the shared test harness.\n- `docs/ \u003cdocs\u003e`_ -- Sphinx site;\n  ``docs/source/specification.rst`` is the canonical protocol spec, and\n  `docs/source/documentation-sources.rst\n  \u003cdocs/source/documentation-sources.rst\u003e`_ records the governance\n  boundary between this repo and the wiki at www.zeroboardcomputer.com.\n- `fuzz/ \u003cfuzz\u003e`_ -- libFuzzer target and corpora for the RIFF parser.\n- `web/ \u003cweb\u003e`_ -- MediaWiki content for www.zeroboardcomputer.com.\n\nQuick Start\n-----------\n\n.. code-block:: bash\n\n    # Basic build + host tests\n    cmake -B build \u0026\u0026 cmake --build build \u0026\u0026 ctest --test-dir build\n\n    # With on-target tests (requires MAME + cross-compilers)\n    cmake -B build -DZBC_TARGET_TESTS=ON\n\n    # With seccomp sandbox (Linux)\n    cmake -B build -DZBC_USE_SECCOMP=ON\n\n    # With fuzzing (requires Clang)\n    cmake -B build-fuzz -DENABLE_FUZZING=ON\n\nStatus\n------\n\n- CI matrix: Ubuntu, macOS, and Windows; gcc, clang, and MSVC.\n- ASan + UBSan and seccomp-sandbox jobs gate every push.\n- Continuous RIFF parser fuzzing via libFuzzer + ClusterFuzzLite.\n- Zero heap allocation in the libraries, statically verified in\n  `test/CMakeLists.txt \u003ctest/CMakeLists.txt\u003e`_.\n\nLicense\n-------\n\n`MIT \u003cLICENSE\u003e`_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnwbyrd%2Fzbc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjohnwbyrd%2Fzbc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnwbyrd%2Fzbc/lists"}