-
Notifications
You must be signed in to change notification settings - Fork 0
Project Structure
This page documents the structure of the project and the responsibilities of each package. The layout is designed to separate emulation logic, reusable host code, and application entry points.
The project follows a Guest / Host / App model:
- Guest: The system being recreated
- Host: The actual system that runs the emulator program
- App: Thin composition layer that binds guest and host together
Implements the pure CHIP-8 VM, encapsulating all core components: CPU, memory, timers, display, sound, and input state.
- Instruction decoding and execution
- Memory and registers
- Timers (delay and sound)
- Display representation
- Sound output generation
- Input state
Does not depend on:
- OS APIs
- Rendering, audio, or filesystem
- CLI or configuration parsing
Contains reusable, platform-facing code shared across host applications. This package may depend on pkg/chip8 and pkg/db.
- VM configuration and execution
- Video and display utilities
- ROM loading and filesystem helpers
This package allows to avoid duplication across cmd/* by centralizing common host-side functionality.
Stores metadata about ROMs and platforms used to configure execution and to present information to the user. This package contains no emulator or application logic and is limited to data definition and querying.
- Stores ROM descriptions and metadata
- Stores platform descriptions and its quirks
- Stores default configuration per ROM and platform
- Querying and filtering metadata
Each subdirectory under cmd/ produces a standalone executable or build target. These packages act as application frontends, wiring together the emulation core, host infrastructure, and metadata database.
- CLI flag parsing and argument handling
- Loading ROM and platform metadata
- Sound output, video presentation, and input handling
- Orchestrating execution flow
- CLI: Headless or terminal-based execution
- SDL2: Desktop application with native windowing and input
- Ebiten: Portable Go-based graphical frontend
- WASM: Web-based build target (browser / PWA)
Each application reuses shared functionality from pkg/host, pkg/chip8, and pkg/db.