Skip to content

Libraries used by the VIC-20 system

Core library

The VIC-20 system logic — VIC-I display, VIA chips, keyboard matrix — lives in:

This library has no UI, rendering, or I/O dependencies. It exposes abstractions that the implementation libraries below plug into.

Implementation libraries

VIC-20-specific host code lives in its own engine-plugin libraries, one per host technology, named Highbyte.DotNet6502.Impl.<Tech>.Vic20. Each carries the VIC-20 host config and an ISystemEnginePlugin that registers the VIC-20 with the host app's DI container. Host apps discover these plugins at runtime — see Highbyte.DotNet6502.Systems.Plugins — and hold no direct project reference to them.

Engine-plugin library Host technology Used by app
Highbyte.DotNet6502.Impl.Avalonia.Vic20 Avalonia Avalonia Desktop, Avalonia Browser
Highbyte.DotNet6502.Impl.Terminal.Vic20 Terminal.Gui (text cells) Terminal (TUI)

The VIC-20 has Avalonia and Terminal (TUI) engine plugins. No SilkNet, SadConsole, Blazor WASM, or Headless plugins exist yet.

Render

The VIC-20 now exposes two host-agnostic render paths:

Avalonia can consume both through the generic render targets in Highbyte.DotNet6502.Impl.Avalonia:

  • AvaloniaBitmapTwoLayerRenderTarget for the rasterizer path.
  • AvaloniaCommandTarget for the command-stream path.

The Terminal (TUI) app consumes the command-stream (glyph-based) path via the generic terminal render target in Highbyte.DotNet6502.Impl.Terminal, rendering the VIC-20 in character mode as text cells.

Input

VIC-20 keyboard handling follows the same pattern as the C64. A host-agnostic Vic20InputHandler (with Vic20HostKeyboard / Vic20InputConfig) lives in the VIC-20 system core under Input/; each host only supplies a small native-key → HostKey translation table inside its own input context. The decoder lives in the engine-plugin library Highbyte.DotNet6502.Impl.Avalonia.Vic20.

Audio

The VIC-20 system does not currently produce audio. No audio provider or target code exists.

For the cross-system view (which app uses which library), see the Implementation libraries overview.