c64bridge 0.9.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +24 -3
- package/README.md +271 -161
- package/data/basic/rom-routines.md +269 -0
- package/data/context/bootstrap.md +1 -1
- package/data/io/cia-spec.md +2 -2
- package/data/{memory/kernal-memory-map.md → kernal/rom-routines.md} +3 -2
- package/data/memory/low-memory-map.md +1 -0
- package/data/memory/memory-map.md +13 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/c64Client.js +127 -12
- package/dist/config.js +34 -8
- package/dist/device.js +75 -45
- package/dist/mcp-server.js +28 -8
- package/dist/platform.js +13 -2
- package/dist/rag/knowledgeIndex.js +54 -9
- package/dist/rag/resourceUris.js +2 -0
- package/dist/tools/audio.js +1 -1
- package/dist/tools/developer.js +6 -6
- package/dist/tools/graphics.js +4 -4
- package/dist/tools/input.js +129 -12
- package/dist/tools/machineControl.js +85 -6
- package/dist/tools/memory.js +1 -1
- package/dist/tools/meta/index.js +1 -1
- package/dist/tools/programRunners.js +5 -5
- package/dist/tools/rag.js +1 -1
- package/dist/tools/registry/batch.js +1 -1
- package/dist/tools/registry/config.js +5 -5
- package/dist/tools/registry/disk.js +2 -2
- package/dist/tools/registry/drive.js +2 -2
- package/dist/tools/registry/graphics.js +2 -2
- package/dist/tools/registry/memory.js +2 -2
- package/dist/tools/registry/platform.js +7 -5
- package/dist/tools/registry/program.js +5 -5
- package/dist/tools/registry/rag.js +1 -1
- package/dist/tools/registry/sound.js +4 -4
- package/dist/tools/registry/system.js +13 -3
- package/dist/tools/storage.js +1 -1
- package/doc/c64u/c64-openapi.yaml +1130 -774
- package/doc/developer.md +3 -2
- package/doc/u2/u2-openapi.yaml +1192 -0
- package/generated/c64/index.js +142 -9
- package/generated/openapi/c64u/index.js +1117 -0
- package/generated/openapi/u2/index.js +929 -0
- package/mcp/resources.json +60 -7
- package/mcp/schemas/c64_graphics.schema.json +3 -3
- package/mcp/schemas/c64_input.schema.json +247 -6
- package/mcp/schemas/c64_memory.schema.json +3 -3
- package/mcp/schemas/c64_program.schema.json +3 -3
- package/mcp/schemas/c64_select_backend.schema.json +2 -0
- package/mcp/schemas/c64_system.schema.json +41 -1
- package/mcp/server.json +1 -1
- package/mcp/tools.json +382 -41
- package/mcp.json +21 -5
- package/package.json +14 -8
- package/scripts/mockC64Server.mjs +40 -0
- package/scripts/prepare-release.mjs +13 -2
- package/scripts/update-readme.ts +19 -30
- package/server.json +2 -2
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ Your AI Command Bridge for the Commodore 64.
|
|
|
18
18
|
|
|
19
19
|
C64 Bridge is an MCP server for controlling and working with a Commodore 64 from an AI client.
|
|
20
20
|
|
|
21
|
-
It lets you run programs, read and write memory, render graphics, and play sound on a
|
|
21
|
+
It lets you run programs, read and write memory, render graphics, and play sound on a [C64 Ultimate](https://www.commodore.net/), [Ultimate 64](https://ultimate64.com/), or U2-family cartridge. You can also switch to a [VICE](https://vice-emu.sourceforge.io/) emulator session, so one MCP conversation can span hardware and emulation.
|
|
22
22
|
|
|
23
23
|
It is built on the official TypeScript `@modelcontextprotocol/sdk` and supports both `stdio` for local AI integration and an optional HTTP bridge for manual inspection.
|
|
24
24
|
|
|
@@ -39,7 +39,10 @@ C64 Bridge is listed in the [Official MCP Registry](https://registry.modelcontex
|
|
|
39
39
|
- [Configuration File Order](#configuration-file-order)
|
|
40
40
|
- [Configuration Merge Rules](#configuration-merge-rules)
|
|
41
41
|
- [Backend Configuration: C64 Ultimate](#backend-configuration-c64-ultimate)
|
|
42
|
+
- [Backend Configuration: U2-family](#backend-configuration-u2-family)
|
|
42
43
|
- [Backend Configuration: VICE](#backend-configuration-vice)
|
|
44
|
+
- [VICE Window Modes](#vice-window-modes)
|
|
45
|
+
- [Recommended VICE Configurations](#recommended-vice-configurations)
|
|
43
46
|
- [Runtime Backend Switching](#runtime-backend-switching)
|
|
44
47
|
- [VS Code MCP Setup](#vs-code-mcp-setup)
|
|
45
48
|
- [Enable the C64 Agent](#enable-the-c64-agent)
|
|
@@ -88,7 +91,7 @@ C64 Bridge gives an AI agent one place to drive program execution, memory access
|
|
|
88
91
|
The core workflow is simple:
|
|
89
92
|
|
|
90
93
|
1. Start the MCP server.
|
|
91
|
-
2. Point it at
|
|
94
|
+
2. Point it at C64U/U64 hardware, a U2-family cartridge, VICE, or any configured combination.
|
|
92
95
|
3. Let the client call grouped MCP tools such as `c64_program`, `c64_memory`, `c64_graphics`, and `c64_sound`.
|
|
93
96
|
4. Switch backends at runtime with `c64_select_backend` when both are configured.
|
|
94
97
|
|
|
@@ -99,7 +102,7 @@ The core workflow is simple:
|
|
|
99
102
|
- System integration for drives, files, printers, and task orchestration
|
|
100
103
|
- SID music tools for playback, composition, generation, and verification
|
|
101
104
|
- Built-in knowledge resources and prompts for safer LLM workflows
|
|
102
|
-
- Mixed runtime support for
|
|
105
|
+
- Mixed runtime support for `c64u` (C64U/U64), `u2` (U2/U2+/U2+L), and `vice`
|
|
103
106
|
|
|
104
107
|
## Quick Start
|
|
105
108
|
|
|
@@ -107,7 +110,7 @@ If you want the shortest path, do these four things:
|
|
|
107
110
|
|
|
108
111
|
1. Install Node.js 24+ and npm.
|
|
109
112
|
2. Start the server.
|
|
110
|
-
3. Add backend configuration for
|
|
113
|
+
3. Add backend configuration for C64U/U64, U2-family, VICE, or any combination.
|
|
111
114
|
4. Connect from VS Code or another MCP client.
|
|
112
115
|
|
|
113
116
|
### 1. Install Node.js 24+ and npm
|
|
@@ -185,11 +188,11 @@ On startup, the server probes the selected target, performs connectivity checks,
|
|
|
185
188
|
|
|
186
189
|
### 3. Add Backend Configuration
|
|
187
190
|
|
|
188
|
-
The server can run against:
|
|
191
|
+
The server can run against one or more of:
|
|
189
192
|
|
|
190
|
-
-
|
|
191
|
-
-
|
|
192
|
-
-
|
|
193
|
+
- C64U/U64 hardware (`c64u`)
|
|
194
|
+
- U2, U2+, or U2+L (`u2`)
|
|
195
|
+
- VICE (`vice`)
|
|
193
196
|
|
|
194
197
|
The detailed lookup order, merge rules, backend examples, and override model are in the [Configuration](#configuration) section below.
|
|
195
198
|
|
|
@@ -202,7 +205,7 @@ C64 Bridge ships a single canonical `stdio` entry point that every MCP client us
|
|
|
202
205
|
- **Cursor, Visual Studio, VS Code Insiders** — use the install badges at the top of this README.
|
|
203
206
|
- **Any other MCP client** — point it at the same `stdio` server, with the environment variables documented in [Runtime Environment Variable Reference](#runtime-environment-variable-reference) and the registry manifest in [mcp.json](./mcp.json).
|
|
204
207
|
|
|
205
|
-
The startup command is the same across clients: `npx -y c64bridge@latest` for the published package, or `node scripts/start.mjs` from a local checkout.
|
|
208
|
+
The startup command is the same across clients: `npx -y c64bridge@latest` for the published package, or `node scripts/start.mjs` from a local checkout. Select `c64u`, `u2`, or `vice` in the shared [Configuration](#configuration); clients only need the command.
|
|
206
209
|
|
|
207
210
|
## Configuration
|
|
208
211
|
|
|
@@ -218,9 +221,8 @@ The server reads configuration in this order:
|
|
|
218
221
|
|
|
219
222
|
Configuration is merged per backend section while scanning those files in order.
|
|
220
223
|
|
|
221
|
-
- The first file that contains
|
|
222
|
-
-
|
|
223
|
-
- This allows a project-local `.c64bridge.json` to define `c64u` while `~/.c64bridge.json` defines `vice`, with both backends available at runtime.
|
|
224
|
+
- The first file that contains each backend section (`c64u`, `u2`, or `vice`) supplies that backend's configuration.
|
|
225
|
+
- This allows a project-local `.c64bridge.json` to define `c64u` while `~/.c64bridge.json` defines `u2` or `vice`.
|
|
224
226
|
|
|
225
227
|
### Backend Configuration: C64 Ultimate
|
|
226
228
|
|
|
@@ -240,9 +242,35 @@ Use this for a C64 Ultimate or Ultimate 64:
|
|
|
240
242
|
- `networkPassword` is only needed when you enabled a password in the C64 Ultimate network settings.
|
|
241
243
|
- `C64U_HOST`, `C64U_PORT`, and `C64U_PASSWORD` override the configured host, port, and network password.
|
|
242
244
|
|
|
245
|
+
### Firmware Requirements for Native Input and Menu Screens
|
|
246
|
+
|
|
247
|
+
The following operations require recently added Ultimate REST endpoints. C64 Bridge detects or explains unavailable endpoints without exposing a raw firmware error.
|
|
248
|
+
|
|
249
|
+
Before choosing an endpoint-dependent operation, read `c64://platform/status`. It probes `machine:input` safely and reports whether it is available. When native input is unavailable, use `key` or `write_text` for ordinary C64 input instead of physical matrix events. `machine:menu_screen` can only be confirmed after an Ultimate menu is visible; its tool returns fallback guidance rather than a transport error when no matrix can be read.
|
|
250
|
+
|
|
251
|
+
- `c64_input` `keyboard`, `release_all`, and `state`, plus hardware `joystick`, use `machine:input`. They require a C64U firmware version that provides this endpoint, or U64 firmware 3.15 or later. `machine:input` is not available on U2-family cartridges.
|
|
252
|
+
- `c64_system` `read_menu_screen` uses `machine:menu_screen`; it requires a C64U firmware version that provides this endpoint, or U64/U2 firmware 3.15 or later.
|
|
253
|
+
- On C64U/U64, `c64_system` `power_cycle` verifies Tool Menu navigation with `machine:menu_screen`, so it has the same firmware requirement. U2-family `power_cycle` uses REST reboot instead.
|
|
254
|
+
|
|
255
|
+
### Backend Configuration: U2-family
|
|
256
|
+
|
|
257
|
+
Use this profile for U2, U2+, and U2+L cartridges:
|
|
258
|
+
|
|
259
|
+
```json
|
|
260
|
+
{
|
|
261
|
+
"u2": {
|
|
262
|
+
"host": "u2",
|
|
263
|
+
"port": 80,
|
|
264
|
+
"networkPassword": "secret"
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Set `C64_MODE=u2` to make this the initial backend. `U2_HOST`, `U2_PORT`, and `U2_PASSWORD` override this profile. U2-family firmware exposes the shared REST subset; it does not provide machine input, debug-register access, power-off, or streaming. `read_menu_screen` requires U2 firmware 3.15 or later.
|
|
270
|
+
|
|
243
271
|
### Backend Configuration: VICE
|
|
244
272
|
|
|
245
|
-
|
|
273
|
+
C64 Bridge can either connect to an already running VICE Binary Monitor or manage a local VICE process for you. The usual managed setup only needs the emulator binary and, when auto-detection cannot find it, the VICE resource directory:
|
|
246
274
|
|
|
247
275
|
```json
|
|
248
276
|
{
|
|
@@ -253,22 +281,84 @@ Use this for managed VICE launches:
|
|
|
253
281
|
}
|
|
254
282
|
```
|
|
255
283
|
|
|
284
|
+
- `exe` is optional when `x64sc` or `x64` is on `PATH`. If no explicit binary is configured, the runtime prefers `/usr/local/bin/x64sc` when present, then falls back to `x64sc` or `x64` on `PATH`.
|
|
256
285
|
- `directory` is optional. When omitted, C64 Bridge auto-detects a VICE resource directory by looking for the standard C64 ROM set near the emulator binary and in common system locations.
|
|
257
|
-
- `
|
|
258
|
-
-
|
|
286
|
+
- `host` and `port` are optional and default to `127.0.0.1:6502`, the Binary Monitor endpoint C64 Bridge starts for managed local sessions. On local endpoints, C64 Bridge first tries to reuse an already running monitor before starting its own process.
|
|
287
|
+
- `visible`, `warp`, and `args` are optional runtime controls. They can live in JSON config, but most users set their environment-variable equivalents from the MCP client because they are per-session preferences.
|
|
288
|
+
- By default, VICE is started lazily on first access. When setting the environment variable `VICE_PREWARM=1`, C64 Bridge starts or connects VICE in the background during MCP startup.
|
|
289
|
+
- `VICE_BINARY`, `VICE_DIRECTORY`, `VICE_HOST`, `VICE_PORT`, `VICE_VISIBLE`, `VICE_WARP`, `VICE_ARGS`, and `VICE_PREWARM` override the JSON values without editing config files.
|
|
290
|
+
|
|
291
|
+
#### VICE Window Modes
|
|
292
|
+
|
|
293
|
+
Choose the window mode based on where the MCP server runs:
|
|
294
|
+
|
|
295
|
+
| Mode | Configuration | What happens | Use when |
|
|
296
|
+
| --- | --- | --- | --- |
|
|
297
|
+
| Visible | `VICE_VISIBLE=true` | VICE opens a normal desktop window. Warp defaults to off. | You are developing locally and want to watch or interact with the emulator. |
|
|
298
|
+
| Minimized | `VICE_VISIBLE=true`, `VICE_ARGS="-minimized"` | VICE still runs as a normal desktop app, but its window starts iconified. Binary Monitor operations, screen reads, frame capture, and keyboard input continue to work. | You are using an agent locally and do not want the emulator stealing focus, but still want the option to restore the window. |
|
|
299
|
+
| Headless/Xvfb | `VICE_VISIBLE=false` | C64 Bridge launches VICE without a user-facing desktop window, using Xvfb unless disabled. Warp defaults to on. | CI, unattended tests, servers, or any session where no one needs to inspect the emulator window. |
|
|
300
|
+
|
|
301
|
+
Minimized and headless are not the same thing. Minimized is still a visible desktop session with a real VICE window; it is simply hidden by the window manager at startup. Headless/Xvfb has no user-facing window, so it is better for automation but less convenient when you need to debug by looking at the emulator.
|
|
302
|
+
|
|
303
|
+
For normal local MCP use, prefer minimized VICE. It avoids focus stealing while preserving the ability to restore the window for visual inspection. Prefer headless/Xvfb for CI and remote or display-less environments.
|
|
304
|
+
|
|
305
|
+
`FORCE_XVFB=1` forces the Xvfb path even if a graphical session is available. `DISABLE_XVFB=1` disables that fallback and uses the current display, which is mainly useful for troubleshooting display detection.
|
|
306
|
+
|
|
307
|
+
#### Recommended VICE Configurations
|
|
308
|
+
|
|
309
|
+
Local agent session, VICE starts minimized:
|
|
310
|
+
|
|
311
|
+
```json
|
|
312
|
+
{
|
|
313
|
+
"servers": {
|
|
314
|
+
"c64bridge": {
|
|
315
|
+
"command": "npx",
|
|
316
|
+
"args": ["-y", "c64bridge@latest"],
|
|
317
|
+
"env": {
|
|
318
|
+
"C64_MODE": "vice",
|
|
319
|
+
"VICE_VISIBLE": "true",
|
|
320
|
+
"VICE_ARGS": "-minimized",
|
|
321
|
+
"VICE_WARP": "false"
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Headless automation, VICE runs without a visible desktop window:
|
|
329
|
+
|
|
330
|
+
```json
|
|
331
|
+
{
|
|
332
|
+
"servers": {
|
|
333
|
+
"c64bridge": {
|
|
334
|
+
"command": "npx",
|
|
335
|
+
"args": ["-y", "c64bridge@latest"],
|
|
336
|
+
"env": {
|
|
337
|
+
"C64_MODE": "vice",
|
|
338
|
+
"VICE_VISIBLE": "false",
|
|
339
|
+
"VICE_WARP": "true"
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
If VICE is installed outside the usual search paths, add `VICE_BINARY` and, if ROM/resource auto-detection fails, `VICE_DIRECTORY` to either example.
|
|
259
347
|
|
|
260
348
|
> [!NOTE]
|
|
261
349
|
> VICE supports only the operations marked with a VICE checkmark in the [MCP API Reference](#mcp-api-reference). Unsupported operations return `unsupported_platform`.
|
|
262
350
|
|
|
263
351
|
### Runtime Backend Switching
|
|
264
352
|
|
|
265
|
-
|
|
353
|
+
Configure any combination of `c64u`, `u2`, and `vice`. C64 Bridge starts on `C64_MODE` (default `c64u`) and keeps every configured backend ready for `c64_select_backend`.
|
|
354
|
+
|
|
355
|
+
| Profile | Targets | Key limits |
|
|
356
|
+
| --- | --- | --- |
|
|
357
|
+
| `c64u` | C64 Ultimate, Ultimate 64 | Full Ultimate REST surface, including machine input and streaming. |
|
|
358
|
+
| `u2` | U2, U2+, U2+L | Shared REST subset; no machine input, debug registers, power-off, or streaming. |
|
|
359
|
+
| `vice` | VICE emulator | Binary Monitor-backed emulator controls; no Ultimate REST API. |
|
|
266
360
|
|
|
267
|
-
|
|
268
|
-
- `c64_select_backend` switches backends without restarting the MCP server
|
|
269
|
-
- `c64://platform/status` reports the active backend and the full configured backend set
|
|
270
|
-
- In prompts, say things like `use vice`, `vice: run this program`, `use c64u`, or `run this on the real machine`
|
|
271
|
-
- In VS Code, include the backend preference in the same prompt when you want to force emulator versus hardware execution
|
|
361
|
+
Use `c64://platform/status` to inspect the active backend and available tools. State the target in the same prompt, for example `u2: list drives`, `c64u: run this PRG`, or `vice: write HELLO`. On U2-family cartridges, `c64_system` `power_cycle` uses REST reboot; C64U/U64 uses verified Tool Menu navigation, and VICE starts fresh.
|
|
272
362
|
|
|
273
363
|
Prompt illustration (issued via Copilot in VS Code, using GPT 5.4 Medium):
|
|
274
364
|
|
|
@@ -280,11 +370,12 @@ c64u: write a small BASIC program that clears the screen and prints HELLO C64U
|
|
|
280
370
|
vice: write a small BASIC program that clears the screen and prints HELLO VICE
|
|
281
371
|
```
|
|
282
372
|
|
|
283
|
-
The screenshots below
|
|
373
|
+
The screenshots below are available for the two backends that provide frame capture. C64U uses streamed video frames; VICE captures and normalizes its display. U2-family cartridges do not provide firmware streaming, so they intentionally have no screenshot row.
|
|
284
374
|
|
|
285
375
|
| Backend | Screenshot |
|
|
286
376
|
| --- | --- |
|
|
287
377
|
| C64 Ultimate |  |
|
|
378
|
+
| U2-family | Frame capture unavailable (no firmware streaming). |
|
|
288
379
|
| VICE |  |
|
|
289
380
|
|
|
290
381
|
## VS Code MCP Setup
|
|
@@ -353,9 +444,11 @@ You can add `env` entries in `.vscode/mcp.json` to select a config file, overrid
|
|
|
353
444
|
|
|
354
445
|
- `C64BRIDGE_CONFIG` points to a specific config file
|
|
355
446
|
- `C64U_HOST`, `C64U_PORT`, and `C64U_PASSWORD` override the C64 Ultimate connection without editing config files
|
|
356
|
-
- `C64_MODE` forces the initial backend to `c64u` or `vice`
|
|
447
|
+
- `C64_MODE` forces the initial backend to `c64u`, `u2`, or `vice`; `U2_HOST`, `U2_PORT`, and `U2_PASSWORD` override the selected U2 profile.
|
|
357
448
|
- `LOG_LEVEL=debug` enables verbose logging
|
|
358
449
|
|
|
450
|
+
For VICE-specific overrides such as `VICE_ARGS=-minimized`, `VICE_VISIBLE=false`, or custom VICE paths, use the patterns in [Backend Configuration: VICE](#backend-configuration-vice).
|
|
451
|
+
|
|
359
452
|
### Environment Variables in MCP Client Configs
|
|
360
453
|
|
|
361
454
|
Every runtime environment variable documented in the root [mcp.json](./mcp.json) can be supplied by your MCP client configuration, including `.vscode/mcp.json` under `servers.c64bridge.env`.
|
|
@@ -373,7 +466,7 @@ When an environment variable has no JSON config equivalent, the order is:
|
|
|
373
466
|
|
|
374
467
|
That rule applies uniformly across the documented runtime environment variables below.
|
|
375
468
|
|
|
376
|
-
Example:
|
|
469
|
+
Example: start on minimized VICE with a specific ROM or resource directory, plus a hardware fallback that can still be selected instantly at runtime:
|
|
377
470
|
|
|
378
471
|
```json
|
|
379
472
|
{
|
|
@@ -389,6 +482,7 @@ Example: visible VICE with a specific ROM or resource directory, plus a hardware
|
|
|
389
482
|
"VICE_BINARY": "/usr/local/bin/x64sc",
|
|
390
483
|
"VICE_DIRECTORY": "/usr/local/share/vice",
|
|
391
484
|
"VICE_VISIBLE": "true",
|
|
485
|
+
"VICE_ARGS": "-minimized",
|
|
392
486
|
"VICE_WARP": "false"
|
|
393
487
|
}
|
|
394
488
|
}
|
|
@@ -428,7 +522,7 @@ Every runtime environment variable documented in `mcp.json` can be set in your M
|
|
|
428
522
|
|
|
429
523
|
| Variable | Default | JSON Config Key | Description |
|
|
430
524
|
| --- | --- | --- | --- |
|
|
431
|
-
| `C64_MODE` | c64u | — | Select active backend (c64u
|
|
525
|
+
| `C64_MODE` | c64u | — | Select active backend (c64u/U64 hardware, u2/U2-family cartridge, or vice emulator) |
|
|
432
526
|
| `C64_TASK_STATE_FILE` | auto | — | Override the path used to persist MCP background-task state |
|
|
433
527
|
| `C64BRIDGE_CONFIG` | ~/.c64bridge.json | config path | Path to configuration JSON |
|
|
434
528
|
| `C64BRIDGE_DIAGNOSTICS_DIR` | ~/.c64bridge/diagnostics | — | Override the directory where persistent MCP diagnostics files are written |
|
|
@@ -446,18 +540,27 @@ Every runtime environment variable documented in `mcp.json` can be set in your M
|
|
|
446
540
|
| `C64U_PASSWORD` | | c64u.networkPassword | Override the C64 Ultimate network password sent as X-Password |
|
|
447
541
|
| `C64U_PORT` | 80 | c64u.port | Override the C64 Ultimate REST port |
|
|
448
542
|
|
|
543
|
+
#### U2-family
|
|
544
|
+
|
|
545
|
+
| Variable | Default | JSON Config Key | Description |
|
|
546
|
+
| --- | --- | --- | --- |
|
|
547
|
+
| `U2_HOST` | | u2.host | Override the U2/U2+/U2+L host name or IP address when C64_MODE=u2 |
|
|
548
|
+
| `U2_PASSWORD` | | u2.networkPassword | Override the U2-family network password sent as X-Password when C64_MODE=u2 |
|
|
549
|
+
| `U2_PORT` | | u2.port | Override the U2-family REST port when C64_MODE=u2 |
|
|
550
|
+
|
|
449
551
|
#### VICE Runtime
|
|
450
552
|
|
|
451
553
|
| Variable | Default | JSON Config Key | Description |
|
|
452
554
|
| --- | --- | --- | --- |
|
|
453
555
|
| `DISABLE_XVFB` | 0 | — | Set to 1 to disable Xvfb fallback and use the current display only |
|
|
454
|
-
| `FORCE_XVFB` | 0 | — | Set to 1 to force managed VICE launches to
|
|
455
|
-
| `VICE_ARGS` | | vice.args | Extra command-line arguments forwarded to managed VICE launches |
|
|
556
|
+
| `FORCE_XVFB` | 0 | — | Set to 1 to force managed VICE launches to use Xvfb even when a graphical session is detected |
|
|
557
|
+
| `VICE_ARGS` | | vice.args | Extra command-line arguments forwarded to managed VICE launches, such as -minimized for a visible window that starts iconified |
|
|
456
558
|
| `VICE_BINARY` | x64sc | vice.exe | VICE binary to launch for managed emulator sessions and audio capture; automatic search is used only when this override is missing or invalid |
|
|
457
559
|
| `VICE_DIRECTORY` | auto-detect | vice.directory | Override the VICE resource directory used for ROM and UI asset discovery; automatic search is used only when this override is missing or invalid |
|
|
458
560
|
| `VICE_HOST` | 127.0.0.1 | vice.host | Override the VICE Binary Monitor host |
|
|
459
561
|
| `VICE_PORT` | 6502 | vice.port | Override the VICE Binary Monitor port |
|
|
460
|
-
| `
|
|
562
|
+
| `VICE_PREWARM` | 0 | vice.prewarm | Set to 1 to start/connect VICE in the background during MCP startup; disabled by default so VICE starts lazily on first use |
|
|
563
|
+
| `VICE_VISIBLE` | true | vice.visible | Launch VICE as a desktop window when true; use headless/Xvfb managed launch when false |
|
|
461
564
|
| `VICE_WARP` | false when visible, true when headless | vice.warp | Enable warp mode for managed VICE sessions |
|
|
462
565
|
| `VICE_XVFB_DISPLAY` | :99 | — | Display number to use when managed VICE launches under Xvfb |
|
|
463
566
|
|
|
@@ -507,7 +610,7 @@ Every runtime environment variable documented in `mcp.json` can be set in your M
|
|
|
507
610
|
claude mcp add c64bridge -- npx -y c64bridge@latest
|
|
508
611
|
```
|
|
509
612
|
|
|
510
|
-
Use `--scope user` to make it available across all your projects, or `--scope project` to write a `.mcp.json` next to the current repo. Backend selection (`c64u`
|
|
613
|
+
Use `--scope user` to make it available across all your projects, or `--scope project` to write a `.mcp.json` next to the current repo. Backend selection (`c64u`, `u2`, or `vice`), host, port, and password come from the same files documented in [Configuration](#configuration); per-shell overrides come from the variables in [Runtime Environment Variable Reference](#runtime-environment-variable-reference).
|
|
511
614
|
|
|
512
615
|
**Project-scoped discovery** — this repository ships a checked-in [.mcp.json](./.mcp.json) that points Claude Code at the local source via `node scripts/start.mjs`. When you open the repo with `claude` (CLI or VS Code plugin), Claude Code prompts to enable the project-scoped server on first run. Approve it once and the `c64_*` tools become discoverable in that workspace.
|
|
513
616
|
|
|
@@ -578,10 +681,11 @@ The [`./build`](./build) script at the project root wraps all development tasks
|
|
|
578
681
|
|
|
579
682
|
## Documentation
|
|
580
683
|
|
|
581
|
-
- [
|
|
582
|
-
- [
|
|
583
|
-
- [
|
|
584
|
-
- [
|
|
684
|
+
- [DeepWiki](https://deepwiki.com/chrisgleissner/c64bridge) - architecture and implementation overview
|
|
685
|
+
- [doc/developer.md](doc/developer.md) - development workflow and RAG details
|
|
686
|
+
- [data/context/bootstrap.md](data/context/bootstrap.md) - primer injected ahead of prompts
|
|
687
|
+
- [doc/c64u/c64-openapi.yaml](doc/c64u/c64-openapi.yaml) - REST surface (OpenAPI 3.1)
|
|
688
|
+
- [AGENTS.md](AGENTS.md) - LLM-facing quick setup, usage, and personas
|
|
585
689
|
|
|
586
690
|
## Static MCP Interface
|
|
587
691
|
|
|
@@ -593,7 +697,7 @@ This allows agents to inspect the available tools, resources, prompts, and schem
|
|
|
593
697
|
|
|
594
698
|
<!-- AUTO-GENERATED:MCP-DOCS-START -->
|
|
595
699
|
|
|
596
|
-
This MCP server exposes **17 tools**, **
|
|
700
|
+
This MCP server exposes **17 tools**, **27 resources**, and **10 prompts** for controlling your Commodore 64.
|
|
597
701
|
|
|
598
702
|
### Tools
|
|
599
703
|
|
|
@@ -609,221 +713,226 @@ _No operations defined._
|
|
|
609
713
|
|
|
610
714
|
Grouped entry point for configuration reads/writes, diagnostics, and snapshots.
|
|
611
715
|
|
|
612
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
716
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
613
717
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
614
|
-
| `batch_update` | Apply multiple configuration updates in a single request. | — | — |
|
|
615
|
-
| `diff` | Compare the current configuration with a snapshot. | `path` | — |
|
|
616
|
-
| `get` | Read a configuration category or specific item. | `category` | `item` |
|
|
617
|
-
| `info` | Retrieve Ultimate hardware information and status. | — | — |
|
|
618
|
-
| `list` | List configuration categories reported by the firmware. | — | — |
|
|
619
|
-
| `load_flash` | Load configuration from flash storage. | — | — |
|
|
620
|
-
| `read_debugreg` | Read the Ultimate debug register ($D7FF). | — | — |
|
|
621
|
-
| `reset_defaults` | Reset firmware configuration to factory defaults. | — | — |
|
|
622
|
-
| `restore` | Restore configuration from a snapshot file. | `path` | `applyToFlash=false` |
|
|
623
|
-
| `save_flash` | Persist the current configuration to flash storage. | — | — |
|
|
624
|
-
| `set` | Write a configuration value in the selected category. | `category`, `item`, `value` | — |
|
|
625
|
-
| `shuffle` | Discover PRG/CRT files and run each with optional screen capture. | — | `root="/"`, `extensions=["prg","crt"]`, `durationMs=5000`, `captureScreen=true`, `maxPrograms=10`, `outputPath`, `resetDelayMs=100` |
|
|
626
|
-
| `snapshot` | Snapshot configuration to disk for later restore or diff. | `path` | — |
|
|
627
|
-
| `version` | Fetch firmware version details. | — | — |
|
|
628
|
-
| `write_debugreg` | Write a hex value to the Ultimate debug register ($D7FF). | `value` | — |
|
|
718
|
+
| `batch_update` | Apply multiple configuration updates in a single request. | — | — | ✅ | ✅ | ✅ |
|
|
719
|
+
| `diff` | Compare the current configuration with a snapshot. | `path` | — | ✅ | ✅ | ✅ |
|
|
720
|
+
| `get` | Read a configuration category or specific item. | `category` | `item` | ✅ | ✅ | ✅ |
|
|
721
|
+
| `info` | Retrieve Ultimate hardware information and status. | — | — | ✅ | ✅ | ✅ |
|
|
722
|
+
| `list` | List configuration categories reported by the firmware. | — | — | ✅ | ✅ | ✅ |
|
|
723
|
+
| `load_flash` | Load configuration from flash storage. | — | — | ✅ | ✅ | |
|
|
724
|
+
| `read_debugreg` | Read the Ultimate debug register ($D7FF). | — | — | ✅ | | |
|
|
725
|
+
| `reset_defaults` | Reset firmware configuration to factory defaults. | — | — | ✅ | ✅ | |
|
|
726
|
+
| `restore` | Restore configuration from a snapshot file. | `path` | `applyToFlash=false` | ✅ | ✅ | ✅ |
|
|
727
|
+
| `save_flash` | Persist the current configuration to flash storage. | — | — | ✅ | ✅ | |
|
|
728
|
+
| `set` | Write a configuration value in the selected category. | `category`, `item`, `value` | — | ✅ | ✅ | ✅ |
|
|
729
|
+
| `shuffle` | Discover PRG/CRT files and run each with optional screen capture. | — | `root="/"`, `extensions=["prg","crt"]`, `durationMs=5000`, `captureScreen=true`, `maxPrograms=10`, `outputPath`, `resetDelayMs=100` | ✅ | ✅ | |
|
|
730
|
+
| `snapshot` | Snapshot configuration to disk for later restore or diff. | `path` | — | ✅ | ✅ | ✅ |
|
|
731
|
+
| `version` | Fetch firmware version details. | — | — | ✅ | ✅ | ✅ |
|
|
732
|
+
| `write_debugreg` | Write a hex value to the Ultimate debug register ($D7FF). | `value` | — | ✅ | | |
|
|
629
733
|
|
|
630
734
|
#### c64_debug
|
|
631
735
|
|
|
632
736
|
Grouped entry point for VICE debugger operations (breakpoints, registers, stepping).
|
|
633
737
|
|
|
634
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
738
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
635
739
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
636
|
-
| `continue_execution` | Exit the Binary Monitor and resume CPU execution (BM 0xAA Exit). | — | — |
|
|
637
|
-
| `create_checkpoint` | Create a new checkpoint (breakpoint) in VICE. | `address` | `endAddress`, `stopOnHit=true`, `enabled=true`, `temporary=false`, `label`, `operations`, `memspace` |
|
|
638
|
-
| `delete_checkpoint` | Remove a checkpoint by id. | `id` | — |
|
|
639
|
-
| `get_checkpoint` | Fetch a single checkpoint by id. | `id` | — |
|
|
640
|
-
| `get_monitor_state` | Read CPU registers and return the current monitor state. | — | `memspace` |
|
|
641
|
-
| `get_registers` | Read register values, optionally filtered by name or id. | — | `memspace`, `registers` |
|
|
642
|
-
| `list_checkpoints` | List all active VICE checkpoints (breakpoints). | — | — |
|
|
643
|
-
| `list_registers` | List available registers (metadata). | — | `memspace` |
|
|
644
|
-
| `nuclear_reset` | Kill and restart the VICE process (managed instances only). | — | — |
|
|
645
|
-
| `set_condition` | Attach a conditional expression to a checkpoint. | `id`, `expression` | — |
|
|
646
|
-
| `set_registers` | Write register values. | `writes` | `memspace` |
|
|
647
|
-
| `step` | Single-step CPU execution. | — | `count=1`, `mode` |
|
|
648
|
-
| `step_return` | Continue execution until the current routine returns. | — | — |
|
|
649
|
-
| `toggle_checkpoint` | Enable or disable a checkpoint by id. | `id`, `enabled` | — |
|
|
650
|
-
| `wait_for_state` | Poll CPU registers until PC equals expectedPC or timeout elapses. | — | `expectedPC`, `timeoutMs=5000`, `pollMs=100` |
|
|
740
|
+
| `continue_execution` | Exit the Binary Monitor and resume CPU execution (BM 0xAA Exit). | — | — | | | ✅ |
|
|
741
|
+
| `create_checkpoint` | Create a new checkpoint (breakpoint) in VICE. | `address` | `endAddress`, `stopOnHit=true`, `enabled=true`, `temporary=false`, `label`, `operations`, `memspace` | | | ✅ |
|
|
742
|
+
| `delete_checkpoint` | Remove a checkpoint by id. | `id` | — | | | ✅ |
|
|
743
|
+
| `get_checkpoint` | Fetch a single checkpoint by id. | `id` | — | | | ✅ |
|
|
744
|
+
| `get_monitor_state` | Read CPU registers and return the current monitor state. | — | `memspace` | | | ✅ |
|
|
745
|
+
| `get_registers` | Read register values, optionally filtered by name or id. | — | `memspace`, `registers` | | | ✅ |
|
|
746
|
+
| `list_checkpoints` | List all active VICE checkpoints (breakpoints). | — | — | | | ✅ |
|
|
747
|
+
| `list_registers` | List available registers (metadata). | — | `memspace` | | | ✅ |
|
|
748
|
+
| `nuclear_reset` | Kill and restart the VICE process (managed instances only). | — | — | | | ✅ |
|
|
749
|
+
| `set_condition` | Attach a conditional expression to a checkpoint. | `id`, `expression` | — | | | ✅ |
|
|
750
|
+
| `set_registers` | Write register values. | `writes` | `memspace` | | | ✅ |
|
|
751
|
+
| `step` | Single-step CPU execution. | — | `count=1`, `mode` | | | ✅ |
|
|
752
|
+
| `step_return` | Continue execution until the current routine returns. | — | — | | | ✅ |
|
|
753
|
+
| `toggle_checkpoint` | Enable or disable a checkpoint by id. | `id`, `enabled` | — | | | ✅ |
|
|
754
|
+
| `wait_for_state` | Poll CPU registers until PC equals expectedPC or timeout elapses. | — | `expectedPC`, `timeoutMs=5000`, `pollMs=100` | | | ✅ |
|
|
651
755
|
|
|
652
756
|
#### c64_disk
|
|
653
757
|
|
|
654
758
|
Grouped entry point for disk mounts, listings, image creation, and program discovery.
|
|
655
759
|
|
|
656
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
760
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
657
761
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
658
|
-
| `create_image` | Create a blank disk image of the specified format. | `format`, `path` | `diskname`, `tracks` |
|
|
659
|
-
| `file_info` | Inspect metadata for a file on the Ultimate filesystem. | `path` | — |
|
|
660
|
-
| `find_and_run` | Search for a PRG/CRT by name substring and run the first match. | `nameContains` | `root="/"`, `extensions`, `caseInsensitive=true`, `sort="discovered"`, `waitMs=0`, `captureCandidates=10` |
|
|
661
|
-
| `list_drives` | List Ultimate drive slots and their mounted images. | — | — |
|
|
662
|
-
| `mount` | Mount a disk image with optional verification and retries. | `drive`, `image` | `type`, `attachmentMode`, `driveMode`, `verify=false`, `powerOnIfNeeded=true`, `resetAfterMount=true`, `maxRetries=2`, `retryDelayMs=500` |
|
|
663
|
-
| `unmount` | Remove the mounted image from an Ultimate drive slot. | `drive` | — |
|
|
762
|
+
| `create_image` | Create a blank disk image of the specified format. | `format`, `path` | `diskname`, `tracks` | ✅ | ✅ | |
|
|
763
|
+
| `file_info` | Inspect metadata for a file on the Ultimate filesystem. | `path` | — | ✅ | ✅ | |
|
|
764
|
+
| `find_and_run` | Search for a PRG/CRT by name substring and run the first match. | `nameContains` | `root="/"`, `extensions`, `caseInsensitive=true`, `sort="discovered"`, `waitMs=0`, `captureCandidates=10` | ✅ | ✅ | |
|
|
765
|
+
| `list_drives` | List Ultimate drive slots and their mounted images. | — | — | ✅ | ✅ | ✅ |
|
|
766
|
+
| `mount` | Mount a disk image with optional verification and retries. Supports verification. | `drive`, `image` | `type`, `attachmentMode`, `driveMode`, `verify=false`, `powerOnIfNeeded=true`, `resetAfterMount=true`, `maxRetries=2`, `retryDelayMs=500` | ✅ | ✅ | ✅ |
|
|
767
|
+
| `unmount` | Remove the mounted image from an Ultimate drive slot. | `drive` | — | ✅ | ✅ | ✅ |
|
|
664
768
|
|
|
665
769
|
#### c64_drive
|
|
666
770
|
|
|
667
771
|
Grouped entry point for drive power, mode, reset, and ROM operations.
|
|
668
772
|
|
|
669
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
773
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
670
774
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
671
|
-
| `load_rom` | Temporarily load a custom ROM into an Ultimate drive slot. | `drive`, `path` | — |
|
|
672
|
-
| `power_off` | Power off a specific Ultimate drive slot. | `drive` | — |
|
|
673
|
-
| `power_on` | Power on a specific Ultimate drive slot. | `drive` | — |
|
|
674
|
-
| `reset` | Issue an IEC reset for the selected drive slot. | `drive` | — |
|
|
675
|
-
| `set_mode` | Set the emulation mode for a drive slot (1541/1571/1581). | `drive`, `mode` | — |
|
|
775
|
+
| `load_rom` | Temporarily load a custom ROM into an Ultimate drive slot. | `drive`, `path` | — | ✅ | ✅ | |
|
|
776
|
+
| `power_off` | Power off a specific Ultimate drive slot. | `drive` | — | ✅ | ✅ | ✅ |
|
|
777
|
+
| `power_on` | Power on a specific Ultimate drive slot. | `drive` | — | ✅ | ✅ | ✅ |
|
|
778
|
+
| `reset` | Issue an IEC reset for the selected drive slot. | `drive` | — | ✅ | ✅ | ✅ |
|
|
779
|
+
| `set_mode` | Set the emulation mode for a drive slot (1541/1571/1581). | `drive`, `mode` | — | ✅ | ✅ | ✅ |
|
|
676
780
|
|
|
677
781
|
#### c64_extract
|
|
678
782
|
|
|
679
783
|
Grouped entry point for sprite/charset extraction, memory dumps, filesystem stats, and firmware health checks.
|
|
680
784
|
|
|
681
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
785
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
682
786
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
683
|
-
| `charset` | Locate and extract 2KB character sets from RAM. | — | `address`, `scanRange="common"`, `outputPath`, `pauseDuringRead=true`, `minNonEmptyChars=32`, `minEntropy=0.3` |
|
|
684
|
-
| `firmware_health` | Run firmware readiness checks and report status metrics. | — | — |
|
|
685
|
-
| `fs_stats` | Walk the filesystem and aggregate counts/bytes by extension. | — | `root="/"`, `extensions`, `includeContainers=true`, `maxSamplesPerExtension=3` |
|
|
686
|
-
| `memory_dump` | Dump a RAM range to hex or binary files with manifest metadata. | `address`, `length`, `outputPath` | `format="hex"`, `chunkSize=512`, `pauseDuringRead=true`, `retries=1` |
|
|
687
|
-
| `sprites` | Scan RAM for sprites and optionally export .spr files. | `address`, `length` | `stride=64`, `maxSprites=16`, `minNonZeroRows=4`, `minSetBits=12`, `includeBase64=true`, `outputDir`, `pauseDuringRead=true` |
|
|
787
|
+
| `charset` | Locate and extract 2KB character sets from RAM. | — | `address`, `scanRange="common"`, `outputPath`, `pauseDuringRead=true`, `minNonEmptyChars=32`, `minEntropy=0.3` | ✅ | | |
|
|
788
|
+
| `firmware_health` | Run firmware readiness checks and report status metrics. | — | — | ✅ | | |
|
|
789
|
+
| `fs_stats` | Walk the filesystem and aggregate counts/bytes by extension. | — | `root="/"`, `extensions`, `includeContainers=true`, `maxSamplesPerExtension=3` | ✅ | | |
|
|
790
|
+
| `memory_dump` | Dump a RAM range to hex or binary files with manifest metadata. | `address`, `length`, `outputPath` | `format="hex"`, `chunkSize=512`, `pauseDuringRead=true`, `retries=1` | ✅ | | |
|
|
791
|
+
| `sprites` | Scan RAM for sprites and optionally export .spr files. | `address`, `length` | `stride=64`, `maxSprites=16`, `minNonZeroRows=4`, `minSetBits=12`, `includeBase64=true`, `outputDir`, `pauseDuringRead=true` | ✅ | | |
|
|
688
792
|
|
|
689
793
|
#### c64_graphics
|
|
690
794
|
|
|
691
795
|
Grouped entry point for frame capture and graphics rendering workflows.
|
|
692
796
|
|
|
693
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
797
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
694
798
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
695
|
-
| `capture_frame` | Capture one or more complete video frames from the active backend. | — | `count=1`, `includePixels=true`, `encoding="base64"` |
|
|
696
|
-
| `get_display_state` | Read VIC-II and CIA2 registers to determine the current graphics mode and memory layout.
|
|
697
|
-
| `render_bitmap` | Import an image file, convert it to VIC-II bitmap memory, write it into RAM, and display it. | `imagePath`, `format` | `bitmapAddress=8192`, `screenAddress=1024`, `borderColor=0`, `backgroundColor=0`, `preserveAspect=true` |
|
|
698
|
-
| `render_petscii_art` | Create PETSCII art from prompts, text, or explicit bitmap data, and optionally display it on the C64. | — | `prompt`, `text`, `maxWidth`, `maxHeight`, `borderColor`, `backgroundColor`, `foregroundColor`, `dryRun=false`, `bitmap` |
|
|
699
|
-
| `render_petscii_text` | Display PETSCII text with optional border and background colours. | `text` | `borderColor`, `backgroundColor` |
|
|
700
|
-
| `render_sprite` | Display supplied 63-byte sprite data at the requested position and colour by writing memory and patching VIC-II registers directly. | `sprite` | `index=0`, `x=100`, `y=100`, `color=1`, `multicolour=false` |
|
|
799
|
+
| `capture_frame` | Capture one or more complete video frames from the active backend. | — | `count=1`, `includePixels=true`, `encoding="base64"` | ✅ | ✅ | ✅ |
|
|
800
|
+
| `get_display_state` | Read VIC-II and CIA2 registers to determine the current graphics mode and memory layout. The same shared-memory path is used on C64U/U64, U2-family hardware, and VICE, so the response shape is identical. | — | — | ✅ | ✅ | ✅ |
|
|
801
|
+
| `render_bitmap` | Import an image file, convert it to VIC-II bitmap memory, write it into RAM, and display it. | `imagePath`, `format` | `bitmapAddress=8192`, `screenAddress=1024`, `borderColor=0`, `backgroundColor=0`, `preserveAspect=true` | ✅ | ✅ | ✅ |
|
|
802
|
+
| `render_petscii_art` | Create PETSCII art from prompts, text, or explicit bitmap data, and optionally display it on the C64. | — | `prompt`, `text`, `maxWidth`, `maxHeight`, `borderColor`, `backgroundColor`, `foregroundColor`, `dryRun=false`, `bitmap` | ✅ | ✅ | ✅ |
|
|
803
|
+
| `render_petscii_text` | Display PETSCII text with optional border and background colours. | `text` | `borderColor`, `backgroundColor` | ✅ | ✅ | ✅ |
|
|
804
|
+
| `render_sprite` | Display supplied 63-byte sprite data at the requested position and colour by writing memory and patching VIC-II registers directly. | `sprite` | `index=0`, `x=100`, `y=100`, `color=1`, `multicolour=false` | ✅ | ✅ | ✅ |
|
|
701
805
|
|
|
702
806
|
#### c64_input
|
|
703
807
|
|
|
704
|
-
|
|
808
|
+
Cross-platform PETSCII typing plus native Ultimate keyboard and joystick events.
|
|
705
809
|
|
|
706
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
810
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
707
811
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
708
|
-
| `joystick` | Simulate joystick input
|
|
709
|
-
| `key` | Tap a single key or hold it for a duration. | `key` | `durationMs=0`, `count=1` |
|
|
710
|
-
| `
|
|
812
|
+
| `joystick` | Simulate joystick input. On C64U/U64 this uses machine:input (a C64U firmware version that provides it, or U64 3.15+); VICE writes CIA1 registers. | `port`, `controls`, `action` | `durationMs=80` | ✅ | | ✅ |
|
|
813
|
+
| `key` | Tap a single key or hold it for a duration. | `key` | `durationMs=0`, `count=1` | ✅ | ✅ | ✅ |
|
|
814
|
+
| `keyboard` | Send physical C64 keyboard matrix events through machine:input (a C64U firmware version that provides it, or U64 3.15+). | `inputs`, `transition` | — | ✅ | | |
|
|
815
|
+
| `release_all` | Release every key and joystick control injected through machine:input (a C64U firmware version that provides it, or U64 3.15+). | — | — | ✅ | | |
|
|
816
|
+
| `state` | Read the keys and joystick controls held through machine:input (a C64U firmware version that provides it, or U64 3.15+). | — | — | ✅ | | |
|
|
817
|
+
| `write_text` | Send a text string to the keyboard buffer, with PETSCII token expansion. | `text` | `delayMs=0` | ✅ | ✅ | ✅ |
|
|
711
818
|
|
|
712
819
|
#### c64_memory
|
|
713
820
|
|
|
714
821
|
Grouped entry point for memory I/O, screen reads, and screen polling.
|
|
715
822
|
|
|
716
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
823
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
717
824
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
718
|
-
| `compare_memory` | Compare two memory regions byte-by-byte and report differences. | `address1`, `address2`, `length` | `maxDiffs=10` |
|
|
719
|
-
| `copy_memory` | Copy a RAM region to another address. | `source`, `dest`, `length` | — |
|
|
720
|
-
| `disassemble` | Disassemble a memory region into annotated 6502/6510 instructions, including undocumented opcodes with canonical names. Symbol annotations from `.vs` files are applied when available. Works on
|
|
721
|
-
| `fill_memory` | Fill a memory range with a repeating byte pattern. | `address`, `length`, `pattern` | — |
|
|
722
|
-
| `read` | Read a range of bytes and return a hex dump with address metadata. | `address` | `length=256` |
|
|
723
|
-
| `read_screen` | Return the current 40x25 text screen converted to ASCII. | — | — |
|
|
724
|
-
| `save_memory` | Dump a memory range to a local file, with an optional PRG load-address header. | `startAddress`, `endAddress`, `filePath` | `asPrg=true` |
|
|
725
|
-
| `search_memory` | Search for a byte pattern within a memory range and return matching addresses. | `startAddress`, `endAddress`, `pattern` | `maxResults=10` |
|
|
726
|
-
| `wait_for_text` | Poll the screen until a substring or regex appears, or timeout elapses. | `pattern` | `isRegex=false`, `caseInsensitive=true`, `timeoutMs=3000`, `intervalMs=100` |
|
|
727
|
-
| `write` | Write a hexadecimal byte sequence into RAM. | `address`, `bytes` | `verify=false`, `expected`, `mask`, `abortOnMismatch=true` |
|
|
825
|
+
| `compare_memory` | Compare two memory regions byte-by-byte and report differences. | `address1`, `address2`, `length` | `maxDiffs=10` | ✅ | ✅ | ✅ |
|
|
826
|
+
| `copy_memory` | Copy a RAM region to another address. | `source`, `dest`, `length` | — | ✅ | ✅ | ✅ |
|
|
827
|
+
| `disassemble` | Disassemble a memory region into annotated 6502/6510 instructions, including undocumented opcodes with canonical names. Symbol annotations from `.vs` files are applied when available. Works on C64U/U64, U2-family hardware, and VICE. | `address` | `length=64`, `instructionCount` | ✅ | ✅ | ✅ |
|
|
828
|
+
| `fill_memory` | Fill a memory range with a repeating byte pattern. | `address`, `length`, `pattern` | — | ✅ | ✅ | ✅ |
|
|
829
|
+
| `read` | Read a range of bytes and return a hex dump with address metadata. | `address` | `length=256` | ✅ | ✅ | ✅ |
|
|
830
|
+
| `read_screen` | Return the current 40x25 text screen converted to ASCII. | — | — | ✅ | ✅ | ✅ |
|
|
831
|
+
| `save_memory` | Dump a memory range to a local file, with an optional PRG load-address header. | `startAddress`, `endAddress`, `filePath` | `asPrg=true` | ✅ | ✅ | ✅ |
|
|
832
|
+
| `search_memory` | Search for a byte pattern within a memory range and return matching addresses. | `startAddress`, `endAddress`, `pattern` | `maxResults=10` | ✅ | ✅ | ✅ |
|
|
833
|
+
| `wait_for_text` | Poll the screen until a substring or regex appears, or timeout elapses. | `pattern` | `isRegex=false`, `caseInsensitive=true`, `timeoutMs=3000`, `intervalMs=100` | ✅ | ✅ | ✅ |
|
|
834
|
+
| `write` | Write a hexadecimal byte sequence into RAM. Supports verification. | `address`, `bytes` | `verify=false`, `expected`, `mask`, `abortOnMismatch=true` | ✅ | ✅ | ✅ |
|
|
728
835
|
|
|
729
836
|
#### c64_printer
|
|
730
837
|
|
|
731
838
|
Grouped entry point for Commodore and Epson printing helpers.
|
|
732
839
|
|
|
733
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
840
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
734
841
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
735
|
-
| `define_chars` | Define custom printer characters (Commodore DLL mode). | `firstChar`, `chars` | `secondaryAddress` |
|
|
736
|
-
| `print_bitmap` | Print a bitmap row via Commodore (BIM) or Epson ESC/P workflows. | `printer="commodore"`, `columns` | `repeats`, `useSubRepeat`, `secondaryAddress`, `ensureMsb=true`, `mode`, `density`, `timesPerLine` |
|
|
737
|
-
| `print_text` | Generate BASIC that prints text to device 4. | `text` | `target="commodore"`, `secondaryAddress`, `formFeed=false` |
|
|
842
|
+
| `define_chars` | Define custom printer characters (Commodore DLL mode). | `firstChar`, `chars` | `secondaryAddress` | ✅ | | |
|
|
843
|
+
| `print_bitmap` | Print a bitmap row via Commodore (BIM) or Epson ESC/P workflows. | `printer="commodore"`, `columns` | `repeats`, `useSubRepeat`, `secondaryAddress`, `ensureMsb=true`, `mode`, `density`, `timesPerLine` | ✅ | | |
|
|
844
|
+
| `print_text` | Generate BASIC that prints text to device 4. | `text` | `target="commodore"`, `secondaryAddress`, `formFeed=false` | ✅ | | |
|
|
738
845
|
|
|
739
846
|
#### c64_program
|
|
740
847
|
|
|
741
848
|
Grouped entry point for program upload, execution, and batch workflows.
|
|
742
849
|
|
|
743
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
850
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
744
851
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
745
|
-
| `batch_run` | Run multiple PRG/CRT programs with post-run assertions. | `programs` | `continueOnError=false`, `durationMs=2000`, `outputPath`, `resetDelayMs=100` |
|
|
746
|
-
| `bundle_run` | Capture screen, memory, and debug registers into an artifact bundle. | `runId`, `outputPath` | `captureScreen=true`, `memoryRanges`, `captureDebugReg=true` |
|
|
747
|
-
| `cross_platform_greeting` | Show a platform-customized greeting on one or more configured backends, capture screenshots, and verify the results. | — | `platforms=["vice","c64u"]`, `messageTemplate="HAVE A GREAT DAY, {PLATFORM}!"`, `verify=true`, `captureScreenshot=true`, `outputPath`, `restoreActiveBackend=true`, `timeoutMs=1500`, `pollIntervalMs=100` |
|
|
748
|
-
| `load_prg` | Load a PRG from Ultimate storage without executing it. | `path` | `symbolsFile` |
|
|
749
|
-
| `run_crt` | Mount and run a CRT cartridge image. | `path` | — |
|
|
750
|
-
| `run_prg` | Load and execute a PRG from Ultimate-visible storage on
|
|
751
|
-
| `upload_run_asm` | Assemble 6502/6510 source, upload the PRG, and execute it. | `program` | `verify=false` |
|
|
752
|
-
| `upload_run_basic` | Upload Commodore BASIC v2 source and execute it immediately. | `program` | `verify=false` |
|
|
852
|
+
| `batch_run` | Run multiple PRG/CRT programs with post-run assertions. | `programs` | `continueOnError=false`, `durationMs=2000`, `outputPath`, `resetDelayMs=100` | ✅ | ✅ | ✅ |
|
|
853
|
+
| `bundle_run` | Capture screen, memory, and debug registers into an artifact bundle. | `runId`, `outputPath` | `captureScreen=true`, `memoryRanges`, `captureDebugReg=true` | ✅ | ✅ | |
|
|
854
|
+
| `cross_platform_greeting` | Show a platform-customized greeting on one or more configured backends, capture screenshots, and verify the results. Supports verification. | — | `platforms=["vice","c64u"]`, `messageTemplate="HAVE A GREAT DAY, {PLATFORM}!"`, `verify=true`, `captureScreenshot=true`, `outputPath`, `restoreActiveBackend=true`, `timeoutMs=1500`, `pollIntervalMs=100` | ✅ | ✅ | ✅ |
|
|
855
|
+
| `load_prg` | Load a PRG from Ultimate storage without executing it. | `path` | `symbolsFile` | ✅ | ✅ | |
|
|
856
|
+
| `run_crt` | Mount and run a CRT cartridge image. | `path` | — | ✅ | ✅ | |
|
|
857
|
+
| `run_prg` | Load and execute a PRG from Ultimate-visible storage on C64U/U64 or U2-family hardware, or from a host-local path on VICE. | `path` | `symbolsFile` | ✅ | ✅ | ✅ |
|
|
858
|
+
| `upload_run_asm` | Assemble 6502/6510 source, upload the PRG, and execute it. Supports verification. | `program` | `verify=false` | ✅ | ✅ | ✅ |
|
|
859
|
+
| `upload_run_basic` | Upload Commodore BASIC v2 source and execute it immediately. Supports verification. | `program` | `verify=false` | ✅ | ✅ | ✅ |
|
|
753
860
|
|
|
754
861
|
#### c64_rag
|
|
755
862
|
|
|
756
863
|
Grouped entry point for BASIC and assembly RAG lookups.
|
|
757
864
|
|
|
758
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
865
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
759
866
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
760
|
-
| `asm` | Retrieve 6502/6510 assembly references from the local knowledge base. | `q` | `k=3` |
|
|
761
|
-
| `basic` | Retrieve BASIC references and snippets from the local knowledge base. | `q` | `k=3` |
|
|
867
|
+
| `asm` | Retrieve 6502/6510 assembly references from the local knowledge base. | `q` | `k=3` | ✅ | ✅ | ✅ |
|
|
868
|
+
| `basic` | Retrieve BASIC references and snippets from the local knowledge base. | `q` | `k=3` | ✅ | ✅ | ✅ |
|
|
762
869
|
|
|
763
870
|
#### c64_select_backend
|
|
764
871
|
|
|
765
|
-
Switch the active backend between C64U hardware and the VICE emulator at runtime.
|
|
872
|
+
Switch the active backend between C64U/U64 hardware, U2-family cartridges, and the VICE emulator at runtime.
|
|
766
873
|
|
|
767
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
874
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
768
875
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
769
|
-
| `select` | Switch the active runtime backend without restarting the MCP server. | `backend` | — |
|
|
876
|
+
| `select` | Switch the active runtime backend without restarting the MCP server. | `backend` | — | ✅ | ✅ | ✅ |
|
|
770
877
|
|
|
771
878
|
#### c64_sound
|
|
772
879
|
|
|
773
880
|
Grouped entry point for SID control, playback, composition, and analysis workflows.
|
|
774
881
|
|
|
775
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
882
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
776
883
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
777
|
-
| `analyze` | Automatically analyze SID playback when verification is requested. | `request` | `durationSeconds`, `expectedSidwave` |
|
|
778
|
-
| `capture_samples` | Capture raw stereo PCM samples from the C64 Ultimate audio UDP stream. | — | `count=256`, `encoding="base64"` |
|
|
779
|
-
| `compile_play` | Compile SIDWAVE or CPG source and optionally play it immediately. | — | `sidwave`, `cpg`, `format`, `output="prg"`, `dryRun=false` |
|
|
780
|
-
| `generate` | Generate a lightweight SID arpeggio playback sequence. | — | `root="C4"`, `pattern="0,4,7"`, `steps=16`, `tempoMs=120`, `waveform="tri"`, `preset="classic"` |
|
|
781
|
-
| `note_off` | Release a SID voice by clearing its gate bit. | `voice` | — |
|
|
782
|
-
| `note_on` | Trigger a SID voice with configurable waveform, ADSR, and pitch. | — | `voice=1`, `note`, `frequencyHz`, `system="PAL"`, `waveform="pulse"`, `pulseWidth=2048`, `attack=1`, `decay=1`, `sustain=15`, `release=3` |
|
|
783
|
-
| `pipeline` | Compile a SIDWAVE score, play it, and analyze the recording. | — | `sidwave`, `cpg`, `output="prg"`, `waitBeforeCaptureMs=500`, `analysisDurationSeconds=3`, `expectedSidwave`, `verifySilenceBefore=true`, `verifySilenceAfter=true`, `silenceDurationSeconds=1.5`, `silenceRmsThreshold=0.02`, `postSilenceWaitMs=200`, `silenceWaitMs=150` |
|
|
784
|
-
| `play_mod_file` | Play a MOD tracker module via the Ultimate SID player. | `path` | — |
|
|
785
|
-
| `play_preset` | Compile and play a built-in SID preset such as Für Elise by Beethoven. | — | `preset="fuer_elise"`, `platforms`, `verify=true`, `analysisDurationSeconds=4`, `waitBeforeCaptureMs=400`, `restoreActiveBackend=true` |
|
|
786
|
-
| `play_sid_file` | Play a SID file stored on the Ultimate filesystem. | `path` | `songnr` |
|
|
787
|
-
| `record_analyze` | Record audio for a fixed duration and return SID analysis metrics. | `durationSeconds` | `expectedSidwave` |
|
|
788
|
-
| `reset` | Soft or hard reset of SID registers to clear glitches. | — | `hard=false` |
|
|
789
|
-
| `set_volume` | Set the SID master volume register at $D418 (0-15). | `volume` | — |
|
|
790
|
-
| `silence_all` | Silence all SID voices with optional audio verification. | — | `verify=false` |
|
|
884
|
+
| `analyze` | Automatically analyze SID playback when verification is requested. | `request` | `durationSeconds`, `expectedSidwave` | ✅ | | |
|
|
885
|
+
| `capture_samples` | Capture raw stereo PCM samples from the C64 Ultimate audio UDP stream. | — | `count=256`, `encoding="base64"` | ✅ | | |
|
|
886
|
+
| `compile_play` | Compile SIDWAVE or CPG source and optionally play it immediately. | — | `sidwave`, `cpg`, `format`, `output="prg"`, `dryRun=false` | ✅ | ✅ | ✅ |
|
|
887
|
+
| `generate` | Generate a lightweight SID arpeggio playback sequence. | — | `root="C4"`, `pattern="0,4,7"`, `steps=16`, `tempoMs=120`, `waveform="tri"`, `preset="classic"` | ✅ | ✅ | ✅ |
|
|
888
|
+
| `note_off` | Release a SID voice by clearing its gate bit. | `voice` | — | ✅ | ✅ | ✅ |
|
|
889
|
+
| `note_on` | Trigger a SID voice with configurable waveform, ADSR, and pitch. | — | `voice=1`, `note`, `frequencyHz`, `system="PAL"`, `waveform="pulse"`, `pulseWidth=2048`, `attack=1`, `decay=1`, `sustain=15`, `release=3` | ✅ | ✅ | ✅ |
|
|
890
|
+
| `pipeline` | Compile a SIDWAVE score, play it, and analyze the recording. Supports verification. | — | `sidwave`, `cpg`, `output="prg"`, `waitBeforeCaptureMs=500`, `analysisDurationSeconds=3`, `expectedSidwave`, `verifySilenceBefore=true`, `verifySilenceAfter=true`, `silenceDurationSeconds=1.5`, `silenceRmsThreshold=0.02`, `postSilenceWaitMs=200`, `silenceWaitMs=150` | ✅ | ✅ | |
|
|
891
|
+
| `play_mod_file` | Play a MOD tracker module via the Ultimate SID player. | `path` | — | ✅ | ✅ | |
|
|
892
|
+
| `play_preset` | Compile and play a built-in SID preset such as Für Elise by Beethoven. Supports verification. | — | `preset="fuer_elise"`, `platforms`, `verify=true`, `analysisDurationSeconds=4`, `waitBeforeCaptureMs=400`, `restoreActiveBackend=true` | ✅ | ✅ | ✅ |
|
|
893
|
+
| `play_sid_file` | Play a SID file stored on the Ultimate filesystem. | `path` | `songnr` | ✅ | ✅ | |
|
|
894
|
+
| `record_analyze` | Record audio for a fixed duration and return SID analysis metrics. | `durationSeconds` | `expectedSidwave` | ✅ | | |
|
|
895
|
+
| `reset` | Soft or hard reset of SID registers to clear glitches. | — | `hard=false` | ✅ | ✅ | ✅ |
|
|
896
|
+
| `set_volume` | Set the SID master volume register at $D418 (0-15). | `volume` | — | ✅ | ✅ | ✅ |
|
|
897
|
+
| `silence_all` | Silence all SID voices with optional audio verification. Supports verification. | — | `verify=false` | ✅ | ✅ | ✅ |
|
|
791
898
|
|
|
792
899
|
#### c64_stream
|
|
793
900
|
|
|
794
901
|
Grouped entry point for starting and stopping Ultimate streaming sessions.
|
|
795
902
|
|
|
796
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
903
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
797
904
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
798
|
-
| `start` | Start an Ultimate streaming session toward a host:port target. | `stream`, `target` | — |
|
|
799
|
-
| `stop` | Stop an active Ultimate streaming session. | `stream` | — |
|
|
905
|
+
| `start` | Start an Ultimate streaming session toward a host:port target. | `stream`, `target` | — | ✅ | | |
|
|
906
|
+
| `stop` | Stop an active Ultimate streaming session. | `stream` | — | ✅ | | |
|
|
800
907
|
|
|
801
908
|
#### c64_system
|
|
802
909
|
|
|
803
910
|
Grouped entry point for power, reset, menu, and background task control.
|
|
804
911
|
|
|
805
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
912
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
806
913
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
807
|
-
| `list_tasks` | List known background tasks with status metadata. | — | — |
|
|
808
|
-
| `menu` | Toggle the Ultimate menu button for navigation. | — | — |
|
|
809
|
-
| `pause` | Pause the machine until resumed. | — | — |
|
|
810
|
-
| `performance_report` | Summarize diagnostics spans and tool latencies from the current or latest MCP session. | — | `scope="current"`, `includeTimeline=true`, `maxEntries=25` |
|
|
811
|
-
| `
|
|
812
|
-
| `
|
|
813
|
-
| `
|
|
814
|
-
| `
|
|
815
|
-
| `
|
|
816
|
-
| `
|
|
817
|
-
| `
|
|
914
|
+
| `list_tasks` | List known background tasks with status metadata. | — | — | ✅ | ✅ | ✅ |
|
|
915
|
+
| `menu` | Toggle the Ultimate menu button for navigation. | — | — | ✅ | ✅ | |
|
|
916
|
+
| `pause` | Pause the machine until resumed. | — | — | ✅ | ✅ | |
|
|
917
|
+
| `performance_report` | Summarize diagnostics spans and tool latencies from the current or latest MCP session. | — | `scope="current"`, `includeTimeline=true`, `maxEntries=25` | ✅ | ✅ | ✅ |
|
|
918
|
+
| `power_cycle` | Return the active backend to a fresh state. C64U/U64 Tool Menu verification requires machine:menu_screen (a C64U firmware version that provides it, or U64 3.15+); U2-family reboots through REST. | — | — | ✅ | ✅ | ✅ |
|
|
919
|
+
| `poweroff` | Request a controlled shutdown via the Ultimate firmware. | — | — | ✅ | ✅ | ✅ |
|
|
920
|
+
| `read_menu_screen` | Read the active Ultimate menu's raw character and colour matrix through machine:menu_screen (a C64U firmware version that provides it, or U64/U2 3.15+). | — | — | ✅ | ✅ | |
|
|
921
|
+
| `reboot` | Trigger a firmware reboot to recover from faults. | — | — | ✅ | ✅ | ✅ |
|
|
922
|
+
| `reset` | Issue a soft reset without cutting power. | — | — | ✅ | ✅ | ✅ |
|
|
923
|
+
| `resume` | Resume CPU execution after a pause. | — | — | ✅ | ✅ | |
|
|
924
|
+
| `start_task` | Start a named background task that runs on an interval. | `name`, `operation` | `arguments={}`, `intervalMs=1000`, `maxIterations` | ✅ | ✅ | ✅ |
|
|
925
|
+
| `stop_all_tasks` | Stop every running background task and persist state. | — | — | ✅ | ✅ | ✅ |
|
|
926
|
+
| `stop_task` | Stop a specific background task and clear its timer. | `name` | — | ✅ | ✅ | ✅ |
|
|
818
927
|
|
|
819
928
|
#### c64_vice
|
|
820
929
|
|
|
821
930
|
Grouped entry point for reading and updating selected VICE resources.
|
|
822
931
|
|
|
823
|
-
| Operation | Description | Required Inputs | Optional Inputs |
|
|
932
|
+
| Operation | Description | Required Inputs | Optional Inputs | C64U | U2 | VICE |
|
|
824
933
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
825
|
-
| `resource_get` | Read a VICE configuration resource (safe prefixes only). | `name` | — |
|
|
826
|
-
| `resource_set` | Write a VICE configuration resource (safe prefixes only). | `name`, `value` | — |
|
|
934
|
+
| `resource_get` | Read a VICE configuration resource (safe prefixes only). | `name` | — | | | ✅ |
|
|
935
|
+
| `resource_set` | Write a VICE configuration resource (safe prefixes only). | `name`, `value` | — | | | ✅ |
|
|
827
936
|
|
|
828
937
|
### Resources
|
|
829
938
|
|
|
@@ -846,7 +955,8 @@ Grouped entry point for reading and updating selected VICE resources.
|
|
|
846
955
|
| `c64://graphics/sprite-charset/best-practices` | Documents sprite and charset workflows, memory layout, VIC-II configuration, common pitfalls, and proven techniques for hardware-accelerated graphics. |
|
|
847
956
|
| `c64://memory/map` | Page-by-page breakdown of the 64 KB address space with hardware, ROM, and RAM regions. |
|
|
848
957
|
| `c64://memory/zero-page-and-workspace` | Documents zero-page variables, BASIC pointers, and KERNAL workspace addresses. |
|
|
849
|
-
| `c64://
|
|
958
|
+
| `c64://basic/rom-routines` | Maps BASIC ROM landmarks, reusable interpreter routines, numeric helpers, string helpers, and C64-specific BASIC continuation entries. |
|
|
959
|
+
| `c64://kernal/rom-routines` | Maps KERNAL ROM vectors, jump table entries, internal routines, serial/tape/screen services, and reset handlers. |
|
|
850
960
|
| `c64://io/spec` | Covers VIC-II, SID, CIA, and system control registers with address ranges and usage notes. |
|
|
851
961
|
| `c64://io/cia/spec` | Details CIA 1/2 registers, timers, interrupts, and keyboard matrix layout. |
|
|
852
962
|
| `c64://printer/spec` | Covers device setup, control codes, and Ultimate 64 integration for printers. |
|