Overview¶
Implementation libraries provide rendering, input handling, and audio for specific UI technologies, so a system (e.g. C64) can render to screen, handle input, and produce sound on a host platform.
Two kinds of implementation library¶
Each host technology is split in two:
Impl.<Tech>— host-technology glue that is system-agnostic: render targets, audio targets, and input context types that work for any system (e.g.Impl.Avalonia,Impl.NAudio,Impl.SilkNet). Host apps reference these directly.Impl.<Tech>.<System>— per-system engine-plugin libraries (e.g.Impl.Avalonia.Commodore64,Impl.SilkNet.Generic,Impl.Headless.Commodore64). Each ships anISystemEnginePluginthat registers that system for that host, plus any system-specific render code. Host apps do not reference these — they are discovered at runtime viaHighbyte.DotNet6502.Systems.Plugins.
The per-system breakdown of which Impl.<Tech>.<System> libraries exist, and where their
render/input/audio code lives, is documented under
Systems / C64 / Libraries,
Systems / VIC-20 / Libraries,
Systems / Oric / Libraries, and the corresponding system pages.
Terminology
Earlier docs spoke of "InputHandlers" and "AudioHandlers". The render, input, and audio
subsystems now share one shape: the system declares a provider, the host registers a
target, a coordinator matches them. Input uses IInputConsumer + HostKey; audio uses
IAudioProvider + IAudioCommandTarget. See Highbyte.DotNet6502.Systems.
Render/Audio/Input technologies used¶
The table below lists the system-agnostic Impl.<Tech> library each app uses per concern.
| App | Techniques | Implementation libraries | C64 | VIC-20 | Apple II | Oric | Generic |
|---|---|---|---|---|---|---|---|
Highbyte.DotNet6502.App.WASM |
Render: SkiaSharp.Blazor.View, OpenGL |
Render: Highbyte.DotNet6502.Impl.Skia |
x | x | |||
Input: Blazor, ASP.NET, JS interop |
Input: Highbyte.DotNet6502.Impl.AspNet |
x | x | ||||
Audio: WebAudio API, JS interop |
Audio: Highbyte.DotNet6502.Impl.AspNet |
x | |||||
Highbyte.DotNet6502.App.Avalonia.Desktop |
Render: Avalonia |
Render: Highbyte.DotNet6502.Impl.Avalonia |
x | x | x | x | x |
Input: Avalonia, SDL |
Input: Highbyte.DotNet6502.Impl.Avalonia, Highbyte.DotNet6502.Impl.SilkNet.SDL |
x | x | x | x | x | |
Audio: NAudio, OpenAL |
Audio: Highbyte.DotNet6502.Impl.NAudio |
x | x | x | |||
Highbyte.DotNet6502.App.Avalonia.Browser |
Render: Avalonia |
Render: Highbyte.DotNet6502.Impl.Avalonia |
x | x | x | x | x |
Input: Avalonia, JS interop |
Input: Highbyte.DotNet6502.Impl.Avalonia, Highbyte.DotNet6502.Impl.Browser |
x | x | x | x | x | |
Audio: NAudio, JS interop |
Audio: Highbyte.DotNet6502.Impl.NAudio |
x | x | x | |||
Highbyte.DotNet6502.App.SilkNetNative |
Render: Silk.NET, OpenGL, SkiaSharp |
Render: Highbyte.DotNet6502.Impl.Skia |
x | x | |||
Render (OpenGL/shaders): Highbyte.DotNet6502.Impl.SilkNet |
x | ||||||
Input: Silk.NET |
Input: Highbyte.DotNet6502.Impl.SilkNet |
x | x | ||||
Audio: NAudio, OpenAL |
Audio: Highbyte.DotNet6502.Impl.NAudio |
x | |||||
Highbyte.DotNet6502.App.SadConsole |
Render: SadConsole |
Render: Highbyte.DotNet6502.Impl.SadConsole |
x | x | |||
Input: SadConsole |
Input: Highbyte.DotNet6502.Impl.SadConsole |
x | x | ||||
Audio: NAudio, OpenAL |
Audio: Highbyte.DotNet6502.Impl.NAudio |
x | |||||
Highbyte.DotNet6502.App.Terminal |
Render: Terminal.Gui (text cells) |
Render: Highbyte.DotNet6502.Impl.Terminal |
x | x | x | x | |
Input: Terminal.Gui |
Input: Highbyte.DotNet6502.Impl.Terminal |
x | x | x | x | ||
| Audio: none | Audio: none (terminals have no audio output) |
The Headless app has C64, Generic, and Oric engine plugins, but deliberately registers no render, audio, or user-input target, so it is not represented in this I/O technology matrix.