Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions docs/host-apps/avalonia/automation.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,12 @@ A non-exhaustive list of the most useful AutomationIds, grouped by view. All of

- **System selection**: `SystemSelectionComboBox`, `SystemVariantSelectionComboBox`
- **Emulator control**: `StartButton`, `PauseButton`, `ResetButton`, `StopButton`, `MonitorButton`, `StatsButton`
- **Display/audio**: `ScaleSlider`, `AudioCheckBox`, `AudioVolumeSlider`, `OptionsButton`
- **Snapshot section (collapsible, common)**: header `SnapshotSectionHeader`, content `SnapshotSectionContent`; buttons `SaveSnapshotButton`, `LoadSnapshotButton`, folder link `SnapshotFolderLink` (visible only when the section is expanded — collapsed by default; toggle it with the `Emulator` menu / `⌘⌥⇧S` shortcut)
- **Display/audio/settings**: `ScaleSlider`, `AudioCheckBox`, `AudioVolumeSlider`, settings button `OptionsButton`
- **Snapshot section (collapsible, common)**: header `SnapshotSectionHeader`, content `SnapshotSectionContent`; buttons `SaveSnapshotButton`, `LoadSnapshotButton`, directory link `SnapshotFolderLink` (visible only when the section is expanded — collapsed by default; toggle it with the `Emulator` menu / `⌘⌥⇧S` shortcut)
- **Status**: `EmulatorStateText`
- **Bottom tab control**: `InformationTabControl` with tabs `InformationTab`, `ConfigStatusTab`, `LogTab`, `ScriptsTab`, `GeneralInfoTab`, `DebugAndRemotingTab`
- **Log tab**: `ClearLogButton`
- **Scripts tab**: `ScriptsBannerRefreshButton`, `ScriptFolderLink`, `AddScriptButton`, `LoadExamplesButton`, `ScriptsRefreshButton`; sort headers `SortByFileNameButton`, `SortByStatusButton`, `SortByYieldButton`, `SortByHooksButton`
- **Scripts tab**: `ScriptsBannerRefreshButton`, script directory link `ScriptFolderLink`, `AddScriptButton`, `LoadExamplesButton`, `ScriptsRefreshButton`; sort headers `SortByFileNameButton`, `SortByStatusButton`, `SortByYieldButton`, `SortByHooksButton`
- **Script rows (dynamic)**: `ScriptRow.ToggleEnabled.<FileName>`, `ScriptRow.Reload.<FileName>`, `ScriptRow.Edit.<FileName>`, `ScriptRow.Delete.<FileName>`
- **Debug tab**: `ExternalDebugToggleButton`, `ExternalDebugPortInput`, `DebugSoundButton`, `DebugGamepadButton`

Expand All @@ -85,7 +85,7 @@ A non-exhaustive list of the most useful AutomationIds, grouped by view. All of
- **AI assistant**: `AiHelpButton`, `AiBackendComboBox`, `OpenAiApiKeyTextBox`, `OllamaEndpointTextBox`, `OllamaModelNameTextBox`, `OllamaApiKeyTextBox`, `CustomEndpointApiKeyTextBox`, `TestAiBackendButton`
- **Footer**: `CancelButton`, `OkButton`

### EmulatorConfigUserControl (general options)
### EmulatorConfigUserControl (general settings)

`DefaultEmulatorComboBox`, `DefaultScaleSlider`, `ShowErrorDialogCheckBox`, `ShowDebugToolsCheckBox`, `AudioProfileComboBox`, `StopOnBrkCheckBox`, `StopOnUnknownInstructionCheckBox`, `SnapshotDirectoryTextBox`, `LuaScriptDirectoryTextBox`, `LuaStorePrefixTextBox`, `CancelButton`, `OkButton`.

Expand Down
6 changes: 3 additions & 3 deletions docs/host-apps/headless/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,18 +157,18 @@ Example console output:

## Configuration

The shipped `appsettings.json` contains packaged defaults. User overrides are read from the Headless host's `appsettings.user.json` under the OS local application data folder:
The shipped `appsettings.json` contains packaged defaults. User overrides are read from the Headless host's `appsettings.user.json` under the OS local application data directory:

- macOS/Linux: `~/.local/share/Highbyte/DotNet6502/Headless/appsettings.user.json`
- Windows: `%LOCALAPPDATA%\Highbyte\DotNet6502\Headless\appsettings.user.json`

When the ROM and script directory settings are empty, Headless uses the shared user content folders under `~/Documents/Highbyte/DotNet6502` (or the Windows Documents equivalent):
When the ROM and script directory settings are empty, Headless uses the shared user content directories under `~/Documents/Highbyte/DotNet6502` (or the Windows Documents equivalent):

- ROMs: `roms/[SYSTEM]`
- Lua scripts: `scripts`
- Snapshots: `snapshots`

Headless does not currently have a `SnapshotDirectory` setting. Startup `--load-snapshot` and TCP remote-control `emu.savesnapshot` / `emu.loadsnapshot` use absolute paths as-is and resolve relative paths from the shared snapshots folder above.
Headless does not currently have a `SnapshotDirectory` setting. Startup `--load-snapshot` and TCP remote-control `emu.savesnapshot` / `emu.loadsnapshot` use absolute paths as-is and resolve relative paths from the shared snapshots directory above.

Run `dotnet-6502-headless --show-storage-paths` to print the effective user content, scripts, snapshots, settings, cache, and per-system ROM directories without starting the emulator.

Expand Down
8 changes: 4 additions & 4 deletions docs/host-apps/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ scoop bucket add dotnet-6502 https://github.com/highbyte/scoop-dotnet-6502
|-------------|-------------|-------|
| **Avalonia** | `dotnet-6502` | On macOS also launchable from Launchpad / Spotlight / Finder (installed to `/Applications`); on Windows from the **DotNet 6502 Emulator** Start Menu shortcut. |
| **Terminal (TUI)** | `dotnet-6502-terminal` | Needs a terminal with **Unicode** + **24-bit true color** (on Windows use Windows Terminal, not legacy `conhost`). C64 / VIC-20 ROMs required — auto-downloadable from the in-app Config dialog. See [Terminal requirements](terminal/overview.md#terminal-requirements). |
| **Headless** | `dotnet-6502-headless --system C64 --start --script scripts/example_c64_basic_readwrite.lua` | CLI / Lua automation. C64 ROMs must be available in the default user ROM folder or a configured override. |
| **Headless** | `dotnet-6502-headless --system C64 --start --script scripts/example_c64_basic_readwrite.lua` | CLI / Lua automation. C64 ROMs must be available in the default user ROM directory or a configured override. |
| **Remote client** | `dotnet-6502-remote emu.state` | Drives a *separate* running Avalonia Desktop / Headless emulator over TCP — start that emulator with remote control enabled first. See [Remote control](../tools/remote-control/overview.md); run `dotnet-6502-remote --help` for all commands. |

ROM details: [Systems / C64 / ROMs](../systems/c64/roms.md), [Systems / VIC-20 / ROMs](../systems/vic20/roms.md).
Expand Down Expand Up @@ -123,7 +123,7 @@ On Windows, append `.exe` to the run command (e.g. `Highbyte.DotNet6502.App.Aval

#### Windows

1. Extract the `.zip` file to a folder.
1. Extract the `.zip` file to a directory.
2. Double-click the `.exe` file to run.

##### SmartScreen warning
Expand Down Expand Up @@ -163,10 +163,10 @@ No security warnings are typically shown on Linux.

1. Extract the `.zip` file.

2. Open Terminal and navigate to the extracted folder:
2. Open Terminal and navigate to the extracted directory:

```sh
cd /path/to/extracted/folder
cd /path/to/extracted/directory
```

3. Remove the quarantine attribute:
Expand Down
2 changes: 1 addition & 1 deletion docs/host-apps/sadconsole/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Manual download, see section in [installation.md](../installation.md)

### System: C64

- A directory containing the C64 ROM files (Kernal, Basic, Chargen) is supplied by the user. When no directory override is set, the default is the shared user content folder `~/Documents/Highbyte/DotNet6502/roms/C64` (or the Windows Documents equivalent). The directory can be changed in the UI; user changes are saved to this host's `appsettings.user.json` under the OS local application data folder. An auto-download option also exists (license required).
- A directory containing the C64 ROM files (Kernal, Basic, Chargen) is supplied by the user. When no directory override is set, the default is the shared user content directory `~/Documents/Highbyte/DotNet6502/roms/C64` (or the Windows Documents equivalent). The directory can be changed in the UI; user changes are saved to this host's `appsettings.user.json` under the OS local application data directory. An auto-download option also exists (license required).

- Renderer provider `Video commands` -> target `Skia commands`
- Character mode (normal).
Expand Down
2 changes: 1 addition & 1 deletion docs/host-apps/silknet-native/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Manual download, see section in [installation.md](../installation.md)

### System: C64

- A directory containing the C64 ROM files (Kernal, Basic, Chargen) is supplied by the user. When no directory override is set, the default is the shared user content folder `~/Documents/Highbyte/DotNet6502/roms/C64` (or the Windows Documents equivalent). The directory can be changed in the UI; user changes are saved to this host's `appsettings.user.json` under the OS local application data folder.
- A directory containing the C64 ROM files (Kernal, Basic, Chargen) is supplied by the user. When no directory override is set, the default is the shared user content directory `~/Documents/Highbyte/DotNet6502/roms/C64` (or the Windows Documents equivalent). The directory can be changed in the UI; user changes are saved to this host's `appsettings.user.json` under the OS local application data directory.

- Renderer provider `Rasterizer` -> target `Skia 2-layer canvas`
- Character mode (normal and multi-color).
Expand Down
2 changes: 1 addition & 1 deletion docs/host-apps/terminal/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ emulator is stopped, with live validation:
See [Systems / C64 / ROMs](../../systems/c64/roms.md), [Systems / VIC-20 / ROMs](../../systems/vic20/roms.md),
and [Systems / C64 / SwiftLink](../../systems/c64/swiftlink.md).

The shipped `appsettings.json` contains packaged defaults. User changes are saved to the Terminal host's `appsettings.user.json` under the OS local application data folder, not beside the shipped executable. Empty ROM directory settings use the shared user content folders under `~/Documents/Highbyte/DotNet6502/roms` (or the Windows Documents equivalent).
The shipped `appsettings.json` contains packaged defaults. User changes are saved to the Terminal host's `appsettings.user.json` under the OS local application data directory, not beside the shipped executable. Empty ROM directory settings use the shared user content directories under `~/Documents/Highbyte/DotNet6502/roms` (or the Windows Documents equivalent).

## Monitor

Expand Down
4 changes: 2 additions & 2 deletions docs/systems/c64/roms.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ The Avalonia Browser, Avalonia Desktop, and SadConsole apps also offer an in-app

## Where to put them

By default, desktop hosts look for C64 ROMs in the shared user content folder:
By default, desktop hosts look for C64 ROMs in the shared user content directory:

- macOS/Linux: `~/Documents/Highbyte/DotNet6502/roms/C64`
- Windows: `%USERPROFILE%\Documents\Highbyte\DotNet6502\roms\C64`

The directory and filenames can be changed in app settings. User changes saved by the apps are written to the host-specific `appsettings.user.json` overlay under the OS local application data folder, not beside the shipped executable. A shipped `appsettings.json` can still provide packaged defaults:
The directory and filenames can be changed in app settings. User changes saved by the apps are written to the host-specific `appsettings.user.json` overlay under the OS local application data directory, not beside the shipped executable. A shipped `appsettings.json` can still provide packaged defaults:

```json
"Highbyte.DotNet6502.C64.Headless": {
Expand Down
2 changes: 1 addition & 1 deletion docs/systems/c64/useful-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Extract .prg from D64 image

If the download is a `.zip` (or other compression) file, start by unzipping it to a folder.
If the download is a `.zip` (or other compression) file, start by unzipping it to a directory.

If the unzipped contents is a `.prg` file, then it can be loaded directly into the emulator. No more extra steps needed.

Expand Down
4 changes: 2 additions & 2 deletions docs/systems/vic20/roms.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ The Avalonia Browser and Avalonia Desktop apps also offer an in-app auto-downloa

## Where to put them

By default, desktop hosts look for VIC-20 ROMs in the shared user content folder:
By default, desktop hosts look for VIC-20 ROMs in the shared user content directory:

- macOS/Linux: `~/Documents/Highbyte/DotNet6502/roms/VIC20`
- Windows: `%USERPROFILE%\Documents\Highbyte\DotNet6502\roms\VIC20`

The directory and filenames can be changed in app settings. User changes saved by the apps are written to the host-specific `appsettings.user.json` overlay under the OS local application data folder, not beside the shipped executable. A shipped `appsettings.json` can still provide packaged defaults:
The directory and filenames can be changed in app settings. User changes saved by the apps are written to the host-specific `appsettings.user.json` overlay under the OS local application data directory, not beside the shipped executable. A shipped `appsettings.json` can still provide packaged defaults:

```json
"Highbyte.DotNet6502.VIC20.Headless": {
Expand Down
2 changes: 1 addition & 1 deletion docs/tools/remote-control/remote-client.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ dotnet-6502-remote keyboard.release --key return
# Paste text into the C64 keyboard buffer (C64 only; use lowercase — see c64.type section in TCP protocol)
dotnet-6502-remote c64.type --text "load\"*\",8,1"

# Save / restore a full emulator-state snapshot (relative paths use the emulator host's snapshot folder)
# Save / restore a full emulator-state snapshot (relative paths use the emulator host's snapshot directory)
dotnet-6502-remote emu.savesnapshot --path state.d6502snap
dotnet-6502-remote emu.loadsnapshot --path state.d6502snap

Expand Down
2 changes: 1 addition & 1 deletion docs/tools/scripting/configuration.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Configuration

On desktop targets, scripting is configured under the `"Highbyte.DotNet6502.Scripting"` section. The shipped `appsettings.json` contains packaged defaults; user changes are stored in the host-specific `appsettings.user.json` overlay under the OS local application data folder, not beside the shipped executable. On the Avalonia Browser app, the same section is persisted in browser `localStorage` by the settings UI.
On desktop targets, scripting is configured under the `"Highbyte.DotNet6502.Scripting"` section. The shipped `appsettings.json` contains packaged defaults; user changes are stored in the host-specific `appsettings.user.json` overlay under the OS local application data directory, not beside the shipped executable. On the Avalonia Browser app, the same section is persisted in browser `localStorage` by the settings UI.

When `ScriptDirectory` is empty, desktop hosts use the shared user script directory:

Expand Down
4 changes: 2 additions & 2 deletions includes/startup-params/browser-c64.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ Desktop equivalents: `--loadD64` (local file) / `--loadD64Url` (URL), `--d64Prog
| Query parameter | Description | Depends on | Example |
|---|---|---|---|
| `loadD64Url` | Fetch a C64 `.d64` disk image over HTTP. ZIP archives are also accepted; by default the first `.d64` entry is used. | Requires `system=C64`, `start`, `waitForSystemReady`, and exactly one of `d64Program` / `diskMount`. Exclusive with `loadPrgUrl` / `loadCrtUrl` / `basicText` / `basicUrl`. | `loadD64Url=d64/game.d64` |
| `loadD64ZipEntry` | Select an exact `.d64` entry inside a ZIP archive. Use forward slashes for folders. | Requires `loadD64Url` and the source must be a ZIP archive. | `loadD64ZipEntry=side-b/game.d64` |
| `loadD64ZipEntry` | Select an exact `.d64` entry inside a ZIP archive. Use forward slashes for directories. | Requires `loadD64Url` and the source must be a ZIP archive. | `loadD64ZipEntry=side-b/game.d64` |
| `d64Program` | Direct-load a PRG from the image into memory (no disk mount). `*` selects the first directory entry; URL-encode names with spaces. | Requires `loadD64Url`. Exclusive with `diskMount`. | `d64Program=*` |
| `diskMount` | Mount the image in drive 8 and prepare `LOAD"*",8,1` + `RUN`. | Requires `loadD64Url`. Exclusive with `d64Program`. | `diskMount=1` |

Expand All @@ -50,7 +50,7 @@ entry, or a ZIP archive with an explicit `loadCrtZipEntry`.
| Query parameter | Description | Depends on | Example |
|---|---|---|---|
| `loadCrtUrl` | Fetch and attach a C64 `.crt` cartridge image over HTTP. ZIP archives containing exactly one `.crt` are also accepted. | Requires `system=C64`, `start`. `waitForSystemReady` is not required. Exclusive with `loadPrgUrl`, `loadD64Url`, `basicText`, and `basicUrl`. | `loadCrtUrl=crt/fc3.crt` |
| `loadCrtZipEntry` | Select an exact `.crt` entry inside a ZIP archive. Use forward slashes for folders. | Requires `loadCrtUrl` and the source must be a ZIP archive. Allows archives with multiple `.crt` files when the entry is explicit. | `loadCrtZipEntry=carts/fc3.crt` |
| `loadCrtZipEntry` | Select an exact `.crt` entry inside a ZIP archive. Use forward slashes for directories. | Requires `loadCrtUrl` and the source must be a ZIP archive. Allows archives with multiple `.crt` files when the entry is explicit. | `loadCrtZipEntry=carts/fc3.crt` |

The `runLoadedProgram` parameter does not apply to `.crt` images.

Expand Down
4 changes: 2 additions & 2 deletions includes/startup-params/cli-c64.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ on the general `--system C64`, `--start`, and `--waitForSystemReady` flags.
|---|---|---|---|
| `--loadD64 <path>` | Load a local C64 `.d64` disk image. ZIP archives are also accepted; by default the first `.d64` entry is used. | Requires `--system C64`, `--start`, `--waitForSystemReady`, and exactly one of `--d64Program` / `--diskMount`. Exclusive with `--loadPrg` / `--loadPrgUrl` / `--loadD64Url` / `--loadCrt` / `--loadCrtUrl`. | `--loadD64 game.d64` |
| `--loadD64Url <url>` | *(Avalonia Desktop only.)* Fetch a `.d64` over HTTP(S). ZIP archives are also accepted; by default the first `.d64` entry is used. | Same as `--loadD64`. Exclusive with `--loadD64`, the PRG loads, and the CRT loads. | `--loadD64Url https://example.com/game.d64` |
| `--loadD64ZipEntry <entry>` | Select an exact `.d64` entry inside a ZIP archive. Use forward slashes for folders. | Requires `--loadD64` / `--loadD64Url` and the source must be a ZIP archive. | `--loadD64ZipEntry side-b/game.d64` |
| `--loadD64ZipEntry <entry>` | Select an exact `.d64` entry inside a ZIP archive. Use forward slashes for directories. | Requires `--loadD64` / `--loadD64Url` and the source must be a ZIP archive. | `--loadD64ZipEntry side-b/game.d64` |
| `--d64Program <name\|*>` | Direct-load a PRG from the disk image into memory (no disk mount). `*` selects the first directory entry. | Requires `--loadD64` / `--loadD64Url`. Exclusive with `--diskMount`. | `--d64Program "*"` |
| `--diskMount` | Mount the image in drive 8 and prepare `LOAD"*",8,1` + `RUN` via the keyboard buffer. | Requires `--loadD64` / `--loadD64Url`. Exclusive with `--d64Program`. | `--diskMount` |

Expand All @@ -48,7 +48,7 @@ commands are pasted after the load / mount: `LOAD"*",8,1` + `RUN` for `--diskMou
|---|---|---|---|
| `--loadCrt <path>` | Attach a local C64 `.crt` cartridge image at startup. ZIP archives containing exactly one `.crt` are also accepted. | Requires `--system C64`, `--start`. `--waitForSystemReady` is not required. Exclusive with PRG, BASIC, and `.d64` startup loads. | `--loadCrt fc3.crt` |
| `--loadCrtUrl <url>` | *(Avalonia Desktop only.)* Fetch and attach a `.crt` over HTTP(S). ZIP archives containing exactly one `.crt` are also accepted. | Same as `--loadCrt`. Exclusive with `--loadCrt`. | `--loadCrtUrl https://example.com/fc3.crt` |
| `--loadCrtZipEntry <entry>` | Select an exact `.crt` entry inside a ZIP archive. Use forward slashes for folders. | Requires `--loadCrt` / `--loadCrtUrl` and the source must be a ZIP archive. Allows archives with multiple `.crt` files when the entry is explicit. | `--loadCrtZipEntry carts/fc3.crt` |
| `--loadCrtZipEntry <entry>` | Select an exact `.crt` entry inside a ZIP archive. Use forward slashes for directories. | Requires `--loadCrt` / `--loadCrtUrl` and the source must be a ZIP archive. Allows archives with multiple `.crt` files when the entry is explicit. | `--loadCrtZipEntry carts/fc3.crt` |

Cartridge startup attaches the image after the C64 instance has been started, and the cartridge
attach operation resets / boots the machine into the cartridge. The general `--runLoadedProgram`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ internal sealed partial class Program
/// <term><c>loadD64ZipEntry</c></term>
/// <description>
/// Exact <c>.d64</c> entry to select when <c>loadD64Url</c> points at a ZIP archive. Use
/// forward slashes for folders.
/// forward slashes for directories.
/// </description>
/// </item>
/// <item>
Expand All @@ -161,7 +161,7 @@ internal sealed partial class Program
/// <term><c>loadCrtZipEntry</c></term>
/// <description>
/// Exact <c>.crt</c> entry to select when <c>loadCrtUrl</c> points at a ZIP archive. Use
/// forward slashes for folders; this is required for ZIP archives with multiple
/// forward slashes for directories; this is required for ZIP archives with multiple
/// <c>.crt</c> files.
/// </description>
/// </item>
Expand Down
Loading
Loading