# tasemulators/bizhawk architecture

> Architecture diagram of the GitHub repository tasemulators/bizhawk, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/tasemulators/bizhawk
- Repository: https://github.com/tasemulators/bizhawk

## Overview

BizHawk is a multi-system emulator frontend aimed at both casual play and tool-assisted speedrunning. The main workflow is to load a game image, run it in an emulation core, then interact through controls and inspect the rendered output; users can also record, debug, and automate sessions. The README documents broader features than the sampled implementation files expose. Accordingly, the graph includes those capabilities but limits implementation-level connections to relationships supported by the excerpts or README; several frontend and feature paths are represented only by existing enclosing directories.

Main entry points: [`src/BizHawk.Client.EmuHawk`](https://github.com/tasemulators/bizhawk/tree/master/src/BizHawk.Client.EmuHawk) (EmuHawk frontend), [`src/BizHawk.Client.Common/DisplayManager/DisplayManagerBase.cs`](https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Client.Common/DisplayManager/DisplayManagerBase.cs) (Display manager), [`src/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.cs`](https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Emulation.Cores/Consoles/PC%20Engine/PCEngine.cs) (PC Engine core), [`src/BizHawk.Bizware.Graphics/PipelineCompileArgs.cs`](https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Bizware.Graphics/PipelineCompileArgs.cs) (Pipeline arguments)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Frontend and input"]
  node_frontend["EmuHawk frontend"]
  node_input["Input mapping"]
end

subgraph group_emulation["Emulation runtime"]
  node_core["Emulation core"]
  node_pce["PC Engine core<br/>[PCEngine.cs]"]
  node_cd["Turbo CD devices"]
  node_memory["Memory domains<br/>[PCEngine.cs]"]
end

subgraph group_tools["Session tools"]
  node_ramsearch["RAM search<br/>[RamSearchEngine.cs]"]
  node_savestates["Save states"]
  node_movies["Input recording"]
  node_debug["Debug tools"]
  node_scripting["Lua / C&#35; control"]
end

subgraph group_graphics["Graphics and output"]
  node_display["Display manager"]
  node_pipelineargs["Pipeline arguments"]
  node_d3d["D3D11 pipeline<br/>[D3D11Pipeline.cs]"]
  node_opengl["OpenGL pipeline<br/>[OpenGLPipeline.cs]"]
  node_capture["Media capture"]
end

node_user(("Player / TASer"))
node_game["Game image"]

node_user -->|"operates"| node_frontend
node_game -->|"loads"| node_frontend
node_frontend -->|"runs core"| node_core
node_input -->|"provides controls"| node_frontend
node_pce -->|"implements CD"| node_cd
node_pce -->|"exposes memory"| node_memory
node_memory -->|"searches"| node_ramsearch
node_frontend -->|"manages states"| node_savestates
node_frontend -->|"records input"| node_movies
node_frontend -->|"offers debugging"| node_debug
node_frontend -->|"exposes control"| node_scripting
node_frontend -->|"presents video"| node_display
node_pipelineargs -->|"configures"| node_d3d
node_pipelineargs -->|"configures"| node_opengl
node_display -->|"supports capture"| node_capture
node_display -->|"renders output"| node_user

click node_frontend "https://github.com/tasemulators/bizhawk/tree/master/src/BizHawk.Client.EmuHawk"
click node_input "https://github.com/tasemulators/bizhawk/tree/master/src/BizHawk.Client.Common"
click node_core "https://github.com/tasemulators/bizhawk/tree/master/src/BizHawk.Emulation.Cores"
click node_pce "https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Emulation.Cores/Consoles/PC%20Engine/PCEngine.cs"
click node_cd "https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Emulation.Cores/Consoles/PC%20Engine/PCEngine.TurboCD.cs"
click node_memory "https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Emulation.Cores/Consoles/PC%20Engine/PCEngine.cs"
click node_ramsearch "https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Client.Common/tools/RamSearchEngine/RamSearchEngine.cs"
click node_savestates "https://github.com/tasemulators/bizhawk/tree/master/src/BizHawk.Client.Common"
click node_movies "https://github.com/tasemulators/bizhawk/tree/master/src/BizHawk.Client.Common"
click node_debug "https://github.com/tasemulators/bizhawk/tree/master/src/BizHawk.Client.Common"
click node_scripting "https://github.com/tasemulators/bizhawk/tree/master/src/BizHawk.Client.Common"
click node_display "https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Client.Common/DisplayManager/DisplayManagerBase.cs"
click node_pipelineargs "https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Bizware.Graphics/PipelineCompileArgs.cs"
click node_d3d "https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Bizware.Graphics/D3D11/D3D11Pipeline.cs"
click node_opengl "https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Bizware.Graphics/OpenGL/OpenGLPipeline.cs"
click node_capture "https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Client.Common/DisplayManager/DisplayManagerBase.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_frontend,node_input toneBlue
class node_core,node_pce,node_cd,node_memory toneAmber
class node_ramsearch,node_savestates,node_movies,node_debug,node_scripting toneMint
class node_display,node_pipelineargs,node_d3d,node_opengl,node_capture toneRose
class node_user,node_game toneIndigo
```

## Components

### Frontend and input

- [EmuHawk frontend](https://github.com/tasemulators/bizhawk/tree/master/src/BizHawk.Client.EmuHawk): `src/BizHawk.Client.EmuHawk`
- [Input mapping](https://github.com/tasemulators/bizhawk/tree/master/src/BizHawk.Client.Common): `src/BizHawk.Client.Common`

### Emulation runtime

- [Emulation core](https://github.com/tasemulators/bizhawk/tree/master/src/BizHawk.Emulation.Cores): `src/BizHawk.Emulation.Cores`
- [PC Engine core](https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Emulation.Cores/Consoles/PC%20Engine/PCEngine.cs): `src/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.cs`
- [Turbo CD devices](https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Emulation.Cores/Consoles/PC%20Engine/PCEngine.TurboCD.cs): `src/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.TurboCD.cs`
- [Memory domains](https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Emulation.Cores/Consoles/PC%20Engine/PCEngine.cs): `src/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.cs`

### Session tools

- [RAM search](https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Client.Common/tools/RamSearchEngine/RamSearchEngine.cs): `src/BizHawk.Client.Common/tools/RamSearchEngine/RamSearchEngine.cs`
- [Save states](https://github.com/tasemulators/bizhawk/tree/master/src/BizHawk.Client.Common): `src/BizHawk.Client.Common`
- [Input recording](https://github.com/tasemulators/bizhawk/tree/master/src/BizHawk.Client.Common): `src/BizHawk.Client.Common`
- [Debug tools](https://github.com/tasemulators/bizhawk/tree/master/src/BizHawk.Client.Common): `src/BizHawk.Client.Common`
- [Lua / C# control](https://github.com/tasemulators/bizhawk/tree/master/src/BizHawk.Client.Common): `src/BizHawk.Client.Common`

### Graphics and output

- [Display manager](https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Client.Common/DisplayManager/DisplayManagerBase.cs): `src/BizHawk.Client.Common/DisplayManager/DisplayManagerBase.cs`
- [Pipeline arguments](https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Bizware.Graphics/PipelineCompileArgs.cs): `src/BizHawk.Bizware.Graphics/PipelineCompileArgs.cs`
- [D3D11 pipeline](https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Bizware.Graphics/D3D11/D3D11Pipeline.cs): `src/BizHawk.Bizware.Graphics/D3D11/D3D11Pipeline.cs`
- [OpenGL pipeline](https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Bizware.Graphics/OpenGL/OpenGLPipeline.cs): `src/BizHawk.Bizware.Graphics/OpenGL/OpenGLPipeline.cs`
- [Media capture](https://github.com/tasemulators/bizhawk/blob/master/src/BizHawk.Client.Common/DisplayManager/DisplayManagerBase.cs): `src/BizHawk.Client.Common/DisplayManager/DisplayManagerBase.cs`

### Other components

- **Player / TASer**
- **Game image**

## Connections

- Player / TASer → EmuHawk frontend: operates
- Game image → EmuHawk frontend: loads
- EmuHawk frontend → Emulation core: runs core
- Input mapping → EmuHawk frontend: provides controls
- PC Engine core → Turbo CD devices: implements CD
- PC Engine core → Memory domains: exposes memory
- Memory domains → RAM search: searches
- EmuHawk frontend → Save states: manages states
- EmuHawk frontend → Input recording: records input
- EmuHawk frontend → Debug tools: offers debugging
- EmuHawk frontend → Lua / C# control: exposes control
- EmuHawk frontend → Display manager: presents video
- Pipeline arguments → D3D11 pipeline: configures
- Pipeline arguments → OpenGL pipeline: configures
- Display manager → Media capture: supports capture
- Display manager → Player / TASer: renders output
