c64bridge 0.9.0 → 0.9.1
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/README.md +158 -164
- package/data/vice/vice-binary-monitor-spec.md +21 -4
- package/dist/.tsbuildinfo +1 -1
- package/dist/c64Client.js +76 -2
- package/dist/device.js +43 -3
- package/dist/rag/indexer.js +18 -8
- package/dist/sidwaveCompiler.js +1 -1
- package/dist/{assemblyConverter.js → tools/assember.js} +10 -1
- package/dist/{basicConverter.js → tools/basicTokenizer.js} +1 -1
- package/dist/tools/debug.js +158 -5
- package/dist/tools/disassembler.js +478 -0
- package/dist/tools/input.js +338 -0
- package/dist/tools/memory.js +317 -1
- package/dist/tools/programRunners.js +45 -6
- package/dist/tools/registry/batch.js +167 -0
- package/dist/tools/registry/graphics.js +101 -1
- package/dist/tools/registry/index.js +4 -0
- package/dist/tools/registry/input.js +2 -0
- package/dist/tools/registry/memory.js +61 -1
- package/dist/tools/schema.js +4 -5
- package/dist/tools/symbolRegistry.js +49 -0
- package/dist/tools/types.js +19 -4
- package/dist/vice/process.js +43 -2
- package/dist/vice/viceClient.js +5 -1
- package/mcp/schemas/c64_batch.schema.json +53 -0
- package/mcp/schemas/c64_config.schema.json +461 -2
- package/mcp/schemas/c64_debug.schema.json +641 -3
- package/mcp/schemas/c64_disk.schema.json +340 -2
- package/mcp/schemas/c64_drive.schema.json +157 -2
- package/mcp/schemas/c64_extract.schema.json +359 -2
- package/mcp/schemas/c64_graphics.schema.json +415 -3
- package/mcp/schemas/c64_input.schema.json +136 -0
- package/mcp/schemas/c64_memory.schema.json +562 -3
- package/mcp/schemas/c64_printer.schema.json +253 -2
- package/mcp/schemas/c64_program.schema.json +499 -2
- package/mcp/schemas/c64_rag.schema.json +82 -2
- package/mcp/schemas/c64_select_backend.schema.json +35 -2
- package/mcp/schemas/c64_sound.schema.json +793 -2
- package/mcp/schemas/c64_stream.schema.json +73 -2
- package/mcp/schemas/c64_system.schema.json +301 -2
- package/mcp/schemas/c64_vice.schema.json +71 -2
- package/mcp/server.json +1 -1
- package/mcp/tools.json +6718 -1257
- package/mcp.json +1 -1
- package/package.json +1 -1
- package/scripts/run-coverage.mjs +7 -0
- package/scripts/run-tests.ts +2 -0
- package/scripts/update-readme.ts +79 -2
- package/server.json +2 -2
package/README.md
CHANGED
|
@@ -14,7 +14,6 @@ Your AI Command Bridge for the Commodore 64.
|
|
|
14
14
|
[](https://insiders.vscode.dev/redirect/mcp/install?name=io.github.chrisgleissner%2Fc64bridge&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22c64bridge%22%5D%2C%22env%22%3A%7B%22C64_MODE%22%3A%22c64u%22%2C%22C64U_HOST%22%3A%22c64u%22%2C%22VICE_BINARY%22%3A%22%2Fusr%2Flocal%2Fbin%2Fx64sc%22%2C%22VICE_DIRECTORY%22%3A%22%2Fusr%2Flocal%2Fshare%2Fvice%22%2C%22VICE_VISIBLE%22%3A%22true%22%2C%22VICE_WARP%22%3A%22false%22%7D%7D&quality=insiders)
|
|
15
15
|
[](https://vs-open.link/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22c64bridge%22%5D%2C%22env%22%3A%7B%22C64_MODE%22%3A%22c64u%22%2C%22C64U_HOST%22%3A%22c64u%22%2C%22VICE_BINARY%22%3A%22%2Fusr%2Flocal%2Fbin%2Fx64sc%22%2C%22VICE_DIRECTORY%22%3A%22%2Fusr%2Flocal%2Fshare%2Fvice%22%2C%22VICE_VISIBLE%22%3A%22true%22%2C%22VICE_WARP%22%3A%22false%22%7D%7D)
|
|
16
16
|
[](https://cursor.com/en/install-mcp?name=io.github.chrisgleissner%2Fc64bridge&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImM2NGJyaWRnZSJdLCJlbnYiOnsiQzY0X01PREUiOiJjNjR1IiwiQzY0VV9IT1NUIjoiYzY0dSIsIlZJQ0VfQklOQVJZIjoiL3Vzci9sb2NhbC9iaW4veDY0c2MiLCJWSUNFX0RJUkVDVE9SWSI6Ii91c3IvbG9jYWwvc2hhcmUvdmljZSIsIlZJQ0VfVklTSUJMRSI6InRydWUiLCJWSUNFX1dBUlAiOiJmYWxzZSJ9fQ==)
|
|
17
|
-
[](#claude-code)
|
|
18
17
|
|
|
19
18
|
C64 Bridge is an MCP server for controlling and working with a Commodore 64 from an AI client.
|
|
20
19
|
|
|
@@ -53,7 +52,6 @@ C64 Bridge is listed in the [Official MCP Registry](https://registry.modelcontex
|
|
|
53
52
|
- [SID Playback](#sid-playback)
|
|
54
53
|
- [RAG](#rag)
|
|
55
54
|
- [Testing](#testing)
|
|
56
|
-
- [Claude Code](#claude-code)
|
|
57
55
|
- [Example Workflow](#example-workflow)
|
|
58
56
|
- [HTTP Invocation](#http-invocation)
|
|
59
57
|
- [Build and Test](#build-and-test)
|
|
@@ -193,14 +191,9 @@ The detailed lookup order, merge rules, backend examples, and override model are
|
|
|
193
191
|
|
|
194
192
|
### 4. Connect from an MCP Client
|
|
195
193
|
|
|
196
|
-
|
|
194
|
+
If you use VS Code, follow the [VS Code MCP Setup](#vs-code-mcp-setup) section below.
|
|
197
195
|
|
|
198
|
-
|
|
199
|
-
- **Claude Code (CLI and VS Code plugin)** — see [Claude Code](#claude-code).
|
|
200
|
-
- **Cursor, Visual Studio, VS Code Insiders** — use the install badges at the top of this README.
|
|
201
|
-
- **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).
|
|
202
|
-
|
|
203
|
-
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. Backend selection (`c64u` vs `vice`) and credentials live in the shared [Configuration](#configuration) files and environment variables — clients only need to know the command.
|
|
196
|
+
If you use another MCP client, point it at the `stdio` server entry point and pass any required environment variables exactly as documented in this README and in [mcp.json](./mcp.json).
|
|
204
197
|
|
|
205
198
|
## Configuration
|
|
206
199
|
|
|
@@ -251,8 +244,8 @@ Use this for managed VICE launches:
|
|
|
251
244
|
}
|
|
252
245
|
```
|
|
253
246
|
|
|
254
|
-
- `directory` is optional. When omitted,
|
|
255
|
-
- `VICE_BINARY`, `VICE_DIRECTORY`, `VICE_HOST`, `VICE_PORT`, `VICE_VISIBLE`, `VICE_WARP`, and `VICE_ARGS` override managed VICE startup without editing config files.
|
|
247
|
+
- `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.
|
|
248
|
+
- `VICE_BINARY`, `VICE_DIRECTORY`, `VICE_HOST`, `VICE_PORT`, `VICE_VISIBLE`, `VICE_WARP`, and `VICE_ARGS` override managed VICE startup without editing config files.
|
|
256
249
|
- If no explicit binary is configured, the runtime prefers `/usr/local/bin/x64sc` when present, then falls back to `x64sc` or `x64` on `PATH` so the same setup remains portable across operating systems.
|
|
257
250
|
|
|
258
251
|
> [!NOTE]
|
|
@@ -284,8 +277,6 @@ The screenshots below were captured from actual backend bitmap responses after t
|
|
|
284
277
|
|
|
285
278
|
## VS Code MCP Setup
|
|
286
279
|
|
|
287
|
-
This section covers the GitHub Copilot integration that ships with VS Code. For the Claude Code VS Code plugin, see [Claude Code](#claude-code) — it reads `.mcp.json`, not `.vscode/mcp.json`.
|
|
288
|
-
|
|
289
280
|
If this repository is checked out locally, open the prepared [.vscode/mcp.json](./.vscode/mcp.json).
|
|
290
281
|
|
|
291
282
|
Otherwise, put the following into your own `.vscode/mcp.json`:
|
|
@@ -492,24 +483,6 @@ Every runtime environment variable documented in `mcp.json` can be set in your M
|
|
|
492
483
|
|
|
493
484
|
<!-- AUTO-GENERATED:ENV-VARS-END -->
|
|
494
485
|
|
|
495
|
-
## Claude Code
|
|
496
|
-
|
|
497
|
-
[Claude Code](https://docs.claude.com/en/docs/claude-code/mcp) is supported as a first-class MCP client. It uses the same canonical start command and the same backend [Configuration](#configuration) files and environment variables as every other client — only the discovery file differs.
|
|
498
|
-
|
|
499
|
-
**Claude Code CLI** — register the published server in one command:
|
|
500
|
-
|
|
501
|
-
```bash
|
|
502
|
-
claude mcp add c64bridge -- npx -y c64bridge@latest
|
|
503
|
-
```
|
|
504
|
-
|
|
505
|
-
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` vs `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).
|
|
506
|
-
|
|
507
|
-
**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.
|
|
508
|
-
|
|
509
|
-
**Claude Code VS Code plugin** — the plugin reads the same `.mcp.json` and the same user-scope `claude mcp add` registrations as the CLI. No extra setup is required beyond installing the plugin and approving the project server prompt. The existing [.vscode/mcp.json](./.vscode/mcp.json) is read by GitHub Copilot, not by Claude Code; the two files coexist without conflict because they target different clients with different config schemas.
|
|
510
|
-
|
|
511
|
-
**Verify it works** — after registration, run `claude mcp list` (CLI) or open the MCP panel (plugin) and look for `c64bridge`. Then ask Claude Code something like *“use vice: write a small BASIC program that clears the screen and prints HELLO CLAUDE”* — it should call `c64_select_backend` and `c64_program` directly. If tools do not appear, confirm Node 24+ is on `PATH`, that the server was approved at the requested scope, and that the backend is reachable per the [Configuration](#configuration) section.
|
|
512
|
-
|
|
513
486
|
## Example Workflow
|
|
514
487
|
|
|
515
488
|
Compose a children’s song with ChatGPT and VS Code:
|
|
@@ -561,22 +534,14 @@ The [`./build`](./build) script at the project root wraps all development tasks
|
|
|
561
534
|
./build test # integration tests (mock backend)
|
|
562
535
|
./build test --real # test against real hardware
|
|
563
536
|
./build test --platform vice --target mock # single test leg
|
|
564
|
-
./build test:vice:mock # curated VICE mock matrix (feature-matrix coverage)
|
|
565
|
-
./build test:vice:device # curated real-VICE validation (device backend + smoke, headless/Xvfb by default)
|
|
566
537
|
./build test:matrix # full matrix (c64u/mock · vice/mock · vice/device)
|
|
567
538
|
./build coverage # merged coverage report
|
|
568
539
|
./build coverage:single --platform c64u --target mock
|
|
569
|
-
npm run vice:smoke # direct VICE binary-monitor smoke test
|
|
570
|
-
npm run vice:smoke:visible # human-visible VICE boot + HELLO demo (keeps window open)
|
|
571
540
|
./build check # build + test matrix (no install)
|
|
572
541
|
./build rag:rebuild # rebuild RAG embeddings
|
|
573
542
|
./build release --version 1.2.3 # prepare a release
|
|
574
543
|
```
|
|
575
544
|
|
|
576
|
-
The visible smoke demo accepts `true`/`false`, `on`/`off`, and `1`/`0` for `VICE_VISIBLE`, `VICE_WARP`, and `VICE_KEEP_OPEN`. `npm run vice:smoke:visible` forces a visible, warp-off session, waits for a stable `READY.` screen, then injects `HELLO` and keeps the window open for inspection.
|
|
577
|
-
|
|
578
|
-
Automation note: `npm run test:vice:device` and `./build` force the real-VICE validation leg into headless/Xvfb mode so the CI-style matrix does not open a confusing local emulator window.
|
|
579
|
-
|
|
580
545
|
> **Starting the MCP server** is not managed by `./build`. Use `npm start` (from source) or `npx -y c64bridge@latest` (published package) as shown in the [Quick Start](#quick-start) section above.
|
|
581
546
|
|
|
582
547
|
## Documentation
|
|
@@ -596,208 +561,237 @@ This allows agents to inspect the available tools, resources, prompts, and schem
|
|
|
596
561
|
|
|
597
562
|
<!-- AUTO-GENERATED:MCP-DOCS-START -->
|
|
598
563
|
|
|
599
|
-
This MCP server exposes **
|
|
564
|
+
This MCP server exposes **17 tools**, **26 resources**, and **10 prompts** for controlling your Commodore 64.
|
|
600
565
|
|
|
601
566
|
### Tools
|
|
602
567
|
|
|
568
|
+
_Address range convention: `address` + `length` means start address plus byte count; `startAddress` + `endAddress` means inclusive bounds._
|
|
569
|
+
|
|
570
|
+
#### c64_batch
|
|
571
|
+
|
|
572
|
+
Execute multiple c64bridge tool calls in a single request. Reduces latency for multi-step workflows.
|
|
573
|
+
|
|
574
|
+
_No operations defined._
|
|
575
|
+
|
|
603
576
|
#### c64_config
|
|
604
577
|
|
|
605
578
|
Grouped entry point for configuration reads/writes, diagnostics, and snapshots.
|
|
606
579
|
|
|
607
|
-
| Operation | Description | Required Inputs | Notes | C64U | VICE |
|
|
608
|
-
| --- | --- | --- | --- | --- | --- |
|
|
609
|
-
| `batch_update` | Apply multiple configuration updates in a single request. | — | — | ✅ | ✅ |
|
|
610
|
-
| `diff` | Compare the current configuration with a snapshot. | — | — | ✅ | ✅ |
|
|
611
|
-
| `get` | Read a configuration category or specific item. |
|
|
612
|
-
| `info` | Retrieve Ultimate hardware information and status. | — | — | ✅ | ✅ |
|
|
613
|
-
| `list` | List configuration categories reported by the firmware. | — | — | ✅ | ✅ |
|
|
614
|
-
| `load_flash` | Load configuration from flash storage. | — | — | ✅ | |
|
|
615
|
-
| `read_debugreg` | Read the Ultimate debug register ($D7FF). | — | — | ✅ | |
|
|
616
|
-
| `reset_defaults` | Reset firmware configuration to factory defaults. | — | — | ✅ | |
|
|
617
|
-
| `restore` | Restore configuration from a snapshot file. |
|
|
618
|
-
| `save_flash` | Persist the current configuration to flash storage. | — | — | ✅ | |
|
|
619
|
-
| `set` | Write a configuration value in the selected category. | — | — | ✅ | ✅ |
|
|
620
|
-
| `shuffle` | Discover PRG/CRT files and run each with optional screen capture. | — | — | ✅ | |
|
|
621
|
-
| `snapshot` | Snapshot configuration to disk for later restore or diff. | — | — | ✅ | ✅ |
|
|
622
|
-
| `version` | Fetch firmware version details. | — | — | ✅ | ✅ |
|
|
623
|
-
| `write_debugreg` | Write a hex value to the Ultimate debug register ($D7FF). | — | — | ✅ | |
|
|
580
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
581
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
582
|
+
| `batch_update` | Apply multiple configuration updates in a single request. | — | — | — | ✅ | ✅ |
|
|
583
|
+
| `diff` | Compare the current configuration with a snapshot. | `path` | — | — | ✅ | ✅ |
|
|
584
|
+
| `get` | Read a configuration category or specific item. | `category` | `item` | — | ✅ | ✅ |
|
|
585
|
+
| `info` | Retrieve Ultimate hardware information and status. | — | — | — | ✅ | ✅ |
|
|
586
|
+
| `list` | List configuration categories reported by the firmware. | — | — | — | ✅ | ✅ |
|
|
587
|
+
| `load_flash` | Load configuration from flash storage. | — | — | — | ✅ | |
|
|
588
|
+
| `read_debugreg` | Read the Ultimate debug register ($D7FF). | — | — | — | ✅ | |
|
|
589
|
+
| `reset_defaults` | Reset firmware configuration to factory defaults. | — | — | — | ✅ | |
|
|
590
|
+
| `restore` | Restore configuration from a snapshot file. | `path` | `applyToFlash=false` | — | ✅ | ✅ |
|
|
591
|
+
| `save_flash` | Persist the current configuration to flash storage. | — | — | — | ✅ | |
|
|
592
|
+
| `set` | Write a configuration value in the selected category. | `category`, `item`, `value` | — | — | ✅ | ✅ |
|
|
593
|
+
| `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` | — | ✅ | |
|
|
594
|
+
| `snapshot` | Snapshot configuration to disk for later restore or diff. | `path` | — | — | ✅ | ✅ |
|
|
595
|
+
| `version` | Fetch firmware version details. | — | — | — | ✅ | ✅ |
|
|
596
|
+
| `write_debugreg` | Write a hex value to the Ultimate debug register ($D7FF). | `value` | — | — | ✅ | |
|
|
624
597
|
|
|
625
598
|
#### c64_debug
|
|
626
599
|
|
|
627
600
|
Grouped entry point for VICE debugger operations (breakpoints, registers, stepping).
|
|
628
601
|
|
|
629
|
-
| Operation | Description | Required Inputs | Notes | C64U | VICE |
|
|
630
|
-
| --- | --- | --- | --- | --- | --- |
|
|
631
|
-
| `
|
|
632
|
-
| `
|
|
633
|
-
| `
|
|
634
|
-
| `
|
|
635
|
-
| `
|
|
636
|
-
| `
|
|
637
|
-
| `
|
|
638
|
-
| `
|
|
639
|
-
| `
|
|
640
|
-
| `
|
|
641
|
-
| `
|
|
602
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
603
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
604
|
+
| `continue_execution` | Exit the Binary Monitor and resume CPU execution (BM 0xAA Exit). | — | — | — | | ✅ |
|
|
605
|
+
| `create_checkpoint` | Create a new checkpoint (breakpoint) in VICE. | `address` | `endAddress`, `stopOnHit=true`, `enabled=true`, `temporary=false`, `label`, `operations`, `memspace` | — | | ✅ |
|
|
606
|
+
| `delete_checkpoint` | Remove a checkpoint by id. | `id` | — | — | | ✅ |
|
|
607
|
+
| `get_checkpoint` | Fetch a single checkpoint by id. | `id` | — | — | | ✅ |
|
|
608
|
+
| `get_monitor_state` | Read CPU registers and return the current monitor state. | — | `memspace` | — | | ✅ |
|
|
609
|
+
| `get_registers` | Read register values, optionally filtered by name or id. | — | `memspace`, `registers` | — | | ✅ |
|
|
610
|
+
| `list_checkpoints` | List all active VICE checkpoints (breakpoints). | — | — | — | | ✅ |
|
|
611
|
+
| `list_registers` | List available registers (metadata). | — | `memspace` | — | | ✅ |
|
|
612
|
+
| `nuclear_reset` | Kill and restart the VICE process (managed instances only). | — | — | — | | ✅ |
|
|
613
|
+
| `set_condition` | Attach a conditional expression to a checkpoint. | `id`, `expression` | — | — | | ✅ |
|
|
614
|
+
| `set_registers` | Write register values. | `writes` | `memspace` | — | | ✅ |
|
|
615
|
+
| `step` | Single-step CPU execution. | — | `count=1`, `mode` | — | | ✅ |
|
|
616
|
+
| `step_return` | Continue execution until the current routine returns. | — | — | — | | ✅ |
|
|
617
|
+
| `toggle_checkpoint` | Enable or disable a checkpoint by id. | `id`, `enabled` | — | — | | ✅ |
|
|
618
|
+
| `wait_for_state` | Poll CPU registers until PC equals expectedPC or timeout elapses. | — | `expectedPC`, `timeoutMs=5000`, `pollMs=100` | — | | ✅ |
|
|
642
619
|
|
|
643
620
|
#### c64_disk
|
|
644
621
|
|
|
645
622
|
Grouped entry point for disk mounts, listings, image creation, and program discovery.
|
|
646
623
|
|
|
647
|
-
| Operation | Description | Required Inputs | Notes | C64U | VICE |
|
|
648
|
-
| --- | --- | --- | --- | --- | --- |
|
|
649
|
-
| `create_image` | Create a blank disk image of the specified format. |
|
|
650
|
-
| `file_info` | Inspect metadata for a file on the Ultimate filesystem. | — |
|
|
651
|
-
| `find_and_run` | Search for a PRG/CRT by name substring and run the first match. |
|
|
652
|
-
| `list_drives` | List Ultimate drive slots and their mounted images. | — |
|
|
653
|
-
| `mount` | Mount a disk image with optional verification and retries. |
|
|
654
|
-
| `unmount` | Remove the mounted image from an Ultimate drive slot. | — |
|
|
624
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
625
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
626
|
+
| `create_image` | Create a blank disk image of the specified format. | `format`, `path` | `diskname`, `tracks` | — | ✅ | |
|
|
627
|
+
| `file_info` | Inspect metadata for a file on the Ultimate filesystem. | `path` | — | — | ✅ | |
|
|
628
|
+
| `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` | — | ✅ | |
|
|
629
|
+
| `list_drives` | List Ultimate drive slots and their mounted images. | — | — | — | ✅ | ✅ |
|
|
630
|
+
| `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` | supports verify | ✅ | ✅ |
|
|
631
|
+
| `unmount` | Remove the mounted image from an Ultimate drive slot. | `drive` | — | — | ✅ | ✅ |
|
|
655
632
|
|
|
656
633
|
#### c64_drive
|
|
657
634
|
|
|
658
635
|
Grouped entry point for drive power, mode, reset, and ROM operations.
|
|
659
636
|
|
|
660
|
-
| Operation | Description | Required Inputs | Notes | C64U | VICE |
|
|
661
|
-
| --- | --- | --- | --- | --- | --- |
|
|
662
|
-
| `load_rom` | Temporarily load a custom ROM into an Ultimate drive slot. | — | — | ✅ | |
|
|
663
|
-
| `power_off` | Power off a specific Ultimate drive slot. | — | — | ✅ | ✅ |
|
|
664
|
-
| `power_on` | Power on a specific Ultimate drive slot. | — | — | ✅ | ✅ |
|
|
665
|
-
| `reset` | Issue an IEC reset for the selected drive slot. | — | — | ✅ | ✅ |
|
|
666
|
-
| `set_mode` | Set the emulation mode for a drive slot (1541/1571/1581). | — | — | ✅ | ✅ |
|
|
637
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
638
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
639
|
+
| `load_rom` | Temporarily load a custom ROM into an Ultimate drive slot. | `drive`, `path` | — | — | ✅ | |
|
|
640
|
+
| `power_off` | Power off a specific Ultimate drive slot. | `drive` | — | — | ✅ | ✅ |
|
|
641
|
+
| `power_on` | Power on a specific Ultimate drive slot. | `drive` | — | — | ✅ | ✅ |
|
|
642
|
+
| `reset` | Issue an IEC reset for the selected drive slot. | `drive` | — | — | ✅ | ✅ |
|
|
643
|
+
| `set_mode` | Set the emulation mode for a drive slot (1541/1571/1581). | `drive`, `mode` | — | — | ✅ | ✅ |
|
|
667
644
|
|
|
668
645
|
#### c64_extract
|
|
669
646
|
|
|
670
647
|
Grouped entry point for sprite/charset extraction, memory dumps, filesystem stats, and firmware health checks.
|
|
671
648
|
|
|
672
|
-
| Operation | Description | Required Inputs | Notes | C64U | VICE |
|
|
673
|
-
| --- | --- | --- | --- | --- | --- |
|
|
674
|
-
| `charset` | Locate and extract 2KB character sets from RAM. | — | — | ✅ | |
|
|
675
|
-
| `firmware_health` | Run firmware readiness checks and report status metrics. | — | — | ✅ | |
|
|
676
|
-
| `fs_stats` | Walk the filesystem and aggregate counts/bytes by extension. | — | — | ✅ | |
|
|
677
|
-
| `memory_dump` | Dump a RAM range to hex or binary files with manifest metadata. |
|
|
678
|
-
| `sprites` | Scan RAM for sprites and optionally export .spr files. |
|
|
649
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
650
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
651
|
+
| `charset` | Locate and extract 2KB character sets from RAM. | — | `address`, `scanRange="common"`, `outputPath`, `pauseDuringRead=true`, `minNonEmptyChars=32`, `minEntropy=0.3` | — | ✅ | |
|
|
652
|
+
| `firmware_health` | Run firmware readiness checks and report status metrics. | — | — | — | ✅ | |
|
|
653
|
+
| `fs_stats` | Walk the filesystem and aggregate counts/bytes by extension. | — | `root="/"`, `extensions`, `includeContainers=true`, `maxSamplesPerExtension=3` | — | ✅ | |
|
|
654
|
+
| `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` | — | ✅ | |
|
|
655
|
+
| `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` | — | ✅ | |
|
|
679
656
|
|
|
680
657
|
#### c64_graphics
|
|
681
658
|
|
|
682
659
|
Grouped entry point for frame capture and graphics rendering workflows.
|
|
683
660
|
|
|
684
|
-
| Operation | Description | Required Inputs | Notes | C64U | VICE |
|
|
685
|
-
| --- | --- | --- | --- | --- | --- |
|
|
686
|
-
| `capture_frame` | Capture one or more complete video frames from the active backend. | — | — | ✅ | ✅ |
|
|
687
|
-
| `
|
|
688
|
-
| `
|
|
689
|
-
| `
|
|
690
|
-
| `
|
|
661
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
662
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
663
|
+
| `capture_frame` | Capture one or more complete video frames from the active backend. | — | `count=1`, `includePixels=true`, `encoding="base64"` | — | ✅ | ✅ |
|
|
664
|
+
| `get_display_state` | Read VIC-II and CIA2 registers to determine the current graphics mode and memory layout. Works on C64U and VICE; both backends are read through shared memory primitives so the response shape is identical. | — | — | — | ✅ | ✅ |
|
|
665
|
+
| `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` | — | ✅ | ✅ |
|
|
666
|
+
| `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` | — | ✅ | ✅ |
|
|
667
|
+
| `render_petscii_text` | Display PETSCII text with optional border and background colours. | `text` | `borderColor`, `backgroundColor` | — | ✅ | ✅ |
|
|
668
|
+
| `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` | — | ✅ | ✅ |
|
|
669
|
+
|
|
670
|
+
#### c64_input
|
|
671
|
+
|
|
672
|
+
Keyboard buffer injection (cross-platform) and joystick simulation (VICE only).
|
|
673
|
+
|
|
674
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
675
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
676
|
+
| `joystick` | Simulate joystick input by writing directly to CIA1 Port A/B registers. | `port`, `controls`, `action` | `durationMs=80` | — | | ✅ |
|
|
677
|
+
| `key` | Tap a single key or hold it for a duration. | `key` | `durationMs=0`, `count=1` | — | ✅ | ✅ |
|
|
678
|
+
| `write_text` | Send a text string to the keyboard buffer, with PETSCII token expansion. | `text` | `delayMs=0` | — | ✅ | ✅ |
|
|
691
679
|
|
|
692
680
|
#### c64_memory
|
|
693
681
|
|
|
694
682
|
Grouped entry point for memory I/O, screen reads, and screen polling.
|
|
695
683
|
|
|
696
|
-
| Operation | Description | Required Inputs | Notes | C64U | VICE |
|
|
697
|
-
| --- | --- | --- | --- | --- | --- |
|
|
698
|
-
| `
|
|
699
|
-
| `
|
|
700
|
-
| `
|
|
701
|
-
| `
|
|
684
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
685
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
686
|
+
| `compare_memory` | Compare two memory regions byte-by-byte and report differences. | `address1`, `address2`, `length` | `maxDiffs=10` | — | ✅ | ✅ |
|
|
687
|
+
| `copy_memory` | Copy a RAM region to another address. | `source`, `dest`, `length` | — | — | ✅ | ✅ |
|
|
688
|
+
| `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 both C64U and VICE. | `address` | `length=64`, `instructionCount` | — | ✅ | ✅ |
|
|
689
|
+
| `fill_memory` | Fill a memory range with a repeating byte pattern. | `address`, `length`, `pattern` | — | — | ✅ | ✅ |
|
|
690
|
+
| `read` | Read a range of bytes and return a hex dump with address metadata. | `address` | `length=256` | — | ✅ | ✅ |
|
|
691
|
+
| `read_screen` | Return the current 40x25 text screen converted to ASCII. | — | — | — | ✅ | ✅ |
|
|
692
|
+
| `save_memory` | Dump a memory range to a local file, with an optional PRG load-address header. | `startAddress`, `endAddress`, `filePath` | `asPrg=true` | — | ✅ | ✅ |
|
|
693
|
+
| `search_memory` | Search for a byte pattern within a memory range and return matching addresses. | `startAddress`, `endAddress`, `pattern` | `maxResults=10` | — | ✅ | ✅ |
|
|
694
|
+
| `wait_for_text` | Poll the screen until a substring or regex appears, or timeout elapses. | `pattern` | `isRegex=false`, `caseInsensitive=true`, `timeoutMs=3000`, `intervalMs=100` | — | ✅ | ✅ |
|
|
695
|
+
| `write` | Write a hexadecimal byte sequence into RAM. | `address`, `bytes` | `verify=false`, `expected`, `mask`, `abortOnMismatch=true` | supports verify | ✅ | ✅ |
|
|
702
696
|
|
|
703
697
|
#### c64_printer
|
|
704
698
|
|
|
705
699
|
Grouped entry point for Commodore and Epson printing helpers.
|
|
706
700
|
|
|
707
|
-
| Operation | Description | Required Inputs | Notes | C64U | VICE |
|
|
708
|
-
| --- | --- | --- | --- | --- | --- |
|
|
709
|
-
| `define_chars` | Define custom printer characters (Commodore DLL mode). |
|
|
710
|
-
| `print_bitmap` | Print a bitmap row via Commodore (BIM) or Epson ESC/P workflows. |
|
|
711
|
-
| `print_text` | Generate BASIC that prints text to device 4. |
|
|
701
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
702
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
703
|
+
| `define_chars` | Define custom printer characters (Commodore DLL mode). | `firstChar`, `chars` | `secondaryAddress` | — | ✅ | |
|
|
704
|
+
| `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` | — | ✅ | |
|
|
705
|
+
| `print_text` | Generate BASIC that prints text to device 4. | `text` | `target="commodore"`, `secondaryAddress`, `formFeed=false` | — | ✅ | |
|
|
712
706
|
|
|
713
707
|
#### c64_program
|
|
714
708
|
|
|
715
709
|
Grouped entry point for program upload, execution, and batch workflows.
|
|
716
710
|
|
|
717
|
-
| Operation | Description | Required Inputs | Notes | C64U | VICE |
|
|
718
|
-
| --- | --- | --- | --- | --- | --- |
|
|
719
|
-
| `batch_run` | Run multiple PRG/CRT programs with post-run assertions. |
|
|
720
|
-
| `bundle_run` | Capture screen, memory, and debug registers into an artifact bundle. |
|
|
721
|
-
| `cross_platform_greeting` | Show a platform-customized greeting on one or more configured backends, capture screenshots, and verify the results. | — | supports verify | ✅ | ✅ |
|
|
722
|
-
| `load_prg` | Load a PRG from Ultimate storage without executing it. |
|
|
723
|
-
| `run_crt` | Mount and run a CRT cartridge image. | — |
|
|
724
|
-
| `run_prg` | Load and execute a PRG from Ultimate-visible storage on c64u or a host-local path on VICE. |
|
|
725
|
-
| `upload_run_asm` | Assemble 6502/6510 source, upload the PRG, and execute it. |
|
|
726
|
-
| `upload_run_basic` | Upload Commodore BASIC v2 source and execute it immediately. |
|
|
711
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
712
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
713
|
+
| `batch_run` | Run multiple PRG/CRT programs with post-run assertions. | `programs` | `continueOnError=false`, `durationMs=2000`, `outputPath`, `resetDelayMs=100` | — | ✅ | ✅ |
|
|
714
|
+
| `bundle_run` | Capture screen, memory, and debug registers into an artifact bundle. | `runId`, `outputPath` | `captureScreen=true`, `memoryRanges`, `captureDebugReg=true` | — | ✅ | |
|
|
715
|
+
| `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` | supports verify | ✅ | ✅ |
|
|
716
|
+
| `load_prg` | Load a PRG from Ultimate storage without executing it. | `path` | `symbolsFile` | — | ✅ | |
|
|
717
|
+
| `run_crt` | Mount and run a CRT cartridge image. | `path` | — | — | ✅ | |
|
|
718
|
+
| `run_prg` | Load and execute a PRG from Ultimate-visible storage on c64u or a host-local path on VICE. | `path` | `symbolsFile` | — | ✅ | ✅ |
|
|
719
|
+
| `upload_run_asm` | Assemble 6502/6510 source, upload the PRG, and execute it. | `program` | `verify=false` | supports verify | ✅ | ✅ |
|
|
720
|
+
| `upload_run_basic` | Upload Commodore BASIC v2 source and execute it immediately. | `program` | `verify=false` | supports verify | ✅ | ✅ |
|
|
727
721
|
|
|
728
722
|
#### c64_rag
|
|
729
723
|
|
|
730
724
|
Grouped entry point for BASIC and assembly RAG lookups.
|
|
731
725
|
|
|
732
|
-
| Operation | Description | Required Inputs | Notes | C64U | VICE |
|
|
733
|
-
| --- | --- | --- | --- | --- | --- |
|
|
734
|
-
| `asm` | Retrieve 6502/6510 assembly references from the local knowledge base. |
|
|
735
|
-
| `basic` | Retrieve BASIC references and snippets from the local knowledge base. |
|
|
726
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
727
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
728
|
+
| `asm` | Retrieve 6502/6510 assembly references from the local knowledge base. | `q` | `k=3` | — | ✅ | ✅ |
|
|
729
|
+
| `basic` | Retrieve BASIC references and snippets from the local knowledge base. | `q` | `k=3` | — | ✅ | ✅ |
|
|
736
730
|
|
|
737
731
|
#### c64_select_backend
|
|
738
732
|
|
|
739
733
|
Switch the active backend between C64U hardware and the VICE emulator at runtime.
|
|
740
734
|
|
|
741
|
-
| Operation | Description | Required Inputs | Notes | C64U | VICE |
|
|
742
|
-
| --- | --- | --- | --- | --- | --- |
|
|
743
|
-
| `select` | Switch the active runtime backend without restarting the MCP server. | — | — | ✅ | ✅ |
|
|
735
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
736
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
737
|
+
| `select` | Switch the active runtime backend without restarting the MCP server. | `backend` | — | — | ✅ | ✅ |
|
|
744
738
|
|
|
745
739
|
#### c64_sound
|
|
746
740
|
|
|
747
741
|
Grouped entry point for SID control, playback, composition, and analysis workflows.
|
|
748
742
|
|
|
749
|
-
| Operation | Description | Required Inputs | Notes | C64U | VICE |
|
|
750
|
-
| --- | --- | --- | --- | --- | --- |
|
|
751
|
-
| `analyze` | Automatically analyze SID playback when verification is requested. |
|
|
752
|
-
| `capture_samples` | Capture raw stereo PCM samples from the C64 Ultimate audio UDP stream. | — |
|
|
753
|
-
| `compile_play` | Compile SIDWAVE or CPG source and optionally play it immediately. | — |
|
|
754
|
-
| `generate` | Generate a lightweight SID arpeggio playback sequence. | — |
|
|
755
|
-
| `note_off` | Release a SID voice by clearing its gate bit. | — |
|
|
756
|
-
| `note_on` | Trigger a SID voice with configurable waveform, ADSR, and pitch. | — |
|
|
757
|
-
| `pipeline` | Compile a SIDWAVE score, play it, and analyze the recording. | — | supports verify | ✅ | |
|
|
758
|
-
| `play_mod_file` | Play a MOD tracker module via the Ultimate SID player. | — |
|
|
759
|
-
| `play_preset` | Compile and play a built-in SID preset such as Für Elise by Beethoven. | — | supports verify | ✅ | ✅ |
|
|
760
|
-
| `play_sid_file` | Play a SID file stored on the Ultimate filesystem. |
|
|
761
|
-
| `record_analyze` | Record audio for a fixed duration and return SID analysis metrics. |
|
|
762
|
-
| `reset` | Soft or hard reset of SID registers to clear glitches. | — |
|
|
763
|
-
| `set_volume` | Set the SID master volume register at $D418 (0-15). | — |
|
|
764
|
-
| `silence_all` | Silence all SID voices with optional audio verification. | — | supports verify | ✅ | ✅ |
|
|
743
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
744
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
745
|
+
| `analyze` | Automatically analyze SID playback when verification is requested. | `request` | `durationSeconds`, `expectedSidwave` | — | ✅ | |
|
|
746
|
+
| `capture_samples` | Capture raw stereo PCM samples from the C64 Ultimate audio UDP stream. | — | `count=256`, `encoding="base64"` | — | ✅ | |
|
|
747
|
+
| `compile_play` | Compile SIDWAVE or CPG source and optionally play it immediately. | — | `sidwave`, `cpg`, `format`, `output="prg"`, `dryRun=false` | — | ✅ | ✅ |
|
|
748
|
+
| `generate` | Generate a lightweight SID arpeggio playback sequence. | — | `root="C4"`, `pattern="0,4,7"`, `steps=16`, `tempoMs=120`, `waveform="tri"`, `preset="classic"` | — | ✅ | ✅ |
|
|
749
|
+
| `note_off` | Release a SID voice by clearing its gate bit. | `voice` | — | — | ✅ | ✅ |
|
|
750
|
+
| `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` | — | ✅ | ✅ |
|
|
751
|
+
| `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` | supports verify | ✅ | |
|
|
752
|
+
| `play_mod_file` | Play a MOD tracker module via the Ultimate SID player. | `path` | — | — | ✅ | |
|
|
753
|
+
| `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` | supports verify | ✅ | ✅ |
|
|
754
|
+
| `play_sid_file` | Play a SID file stored on the Ultimate filesystem. | `path` | `songnr` | — | ✅ | |
|
|
755
|
+
| `record_analyze` | Record audio for a fixed duration and return SID analysis metrics. | `durationSeconds` | `expectedSidwave` | — | ✅ | |
|
|
756
|
+
| `reset` | Soft or hard reset of SID registers to clear glitches. | — | `hard=false` | — | ✅ | ✅ |
|
|
757
|
+
| `set_volume` | Set the SID master volume register at $D418 (0-15). | `volume` | — | — | ✅ | ✅ |
|
|
758
|
+
| `silence_all` | Silence all SID voices with optional audio verification. | — | `verify=false` | supports verify | ✅ | ✅ |
|
|
765
759
|
|
|
766
760
|
#### c64_stream
|
|
767
761
|
|
|
768
762
|
Grouped entry point for starting and stopping Ultimate streaming sessions.
|
|
769
763
|
|
|
770
|
-
| Operation | Description | Required Inputs | Notes | C64U | VICE |
|
|
771
|
-
| --- | --- | --- | --- | --- | --- |
|
|
772
|
-
| `start` | Start an Ultimate streaming session toward a host:port target. | — | — | ✅ | |
|
|
773
|
-
| `stop` | Stop an active Ultimate streaming session. | — | — | ✅ | |
|
|
764
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
765
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
766
|
+
| `start` | Start an Ultimate streaming session toward a host:port target. | `stream`, `target` | — | — | ✅ | |
|
|
767
|
+
| `stop` | Stop an active Ultimate streaming session. | `stream` | — | — | ✅ | |
|
|
774
768
|
|
|
775
769
|
#### c64_system
|
|
776
770
|
|
|
777
771
|
Grouped entry point for power, reset, menu, and background task control.
|
|
778
772
|
|
|
779
|
-
| Operation | Description | Required Inputs | Notes | C64U | VICE |
|
|
780
|
-
| --- | --- | --- | --- | --- | --- |
|
|
781
|
-
| `list_tasks` | List known background tasks with status metadata. | — | — | ✅ | ✅ |
|
|
782
|
-
| `menu` | Toggle the Ultimate menu button for navigation. | — | — | ✅ | |
|
|
783
|
-
| `pause` | Pause the machine until resumed. | — | — | ✅ | |
|
|
784
|
-
| `performance_report` | Summarize diagnostics spans and tool latencies from the current or latest MCP session. | — | — | ✅ | ✅ |
|
|
785
|
-
| `poweroff` | Request a controlled shutdown via the Ultimate firmware. | — | — | ✅ | ✅ |
|
|
786
|
-
| `reboot` | Trigger a firmware reboot to recover from faults. | — | — | ✅ | ✅ |
|
|
787
|
-
| `reset` | Issue a soft reset without cutting power. | — | — | ✅ | ✅ |
|
|
788
|
-
| `resume` | Resume CPU execution after a pause. | — | — | ✅ | |
|
|
789
|
-
| `start_task` | Start a named background task that runs on an interval. |
|
|
790
|
-
| `stop_all_tasks` | Stop every running background task and persist state. | — | — | ✅ | ✅ |
|
|
791
|
-
| `stop_task` | Stop a specific background task and clear its timer. | — | — | ✅ | ✅ |
|
|
773
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
774
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
775
|
+
| `list_tasks` | List known background tasks with status metadata. | — | — | — | ✅ | ✅ |
|
|
776
|
+
| `menu` | Toggle the Ultimate menu button for navigation. | — | — | — | ✅ | |
|
|
777
|
+
| `pause` | Pause the machine until resumed. | — | — | — | ✅ | |
|
|
778
|
+
| `performance_report` | Summarize diagnostics spans and tool latencies from the current or latest MCP session. | — | `scope="current"`, `includeTimeline=true`, `maxEntries=25` | — | ✅ | ✅ |
|
|
779
|
+
| `poweroff` | Request a controlled shutdown via the Ultimate firmware. | — | — | — | ✅ | ✅ |
|
|
780
|
+
| `reboot` | Trigger a firmware reboot to recover from faults. | — | — | — | ✅ | ✅ |
|
|
781
|
+
| `reset` | Issue a soft reset without cutting power. | — | — | — | ✅ | ✅ |
|
|
782
|
+
| `resume` | Resume CPU execution after a pause. | — | — | — | ✅ | |
|
|
783
|
+
| `start_task` | Start a named background task that runs on an interval. | `name`, `operation` | `arguments={}`, `intervalMs=1000`, `maxIterations` | — | ✅ | ✅ |
|
|
784
|
+
| `stop_all_tasks` | Stop every running background task and persist state. | — | — | — | ✅ | ✅ |
|
|
785
|
+
| `stop_task` | Stop a specific background task and clear its timer. | `name` | — | — | ✅ | ✅ |
|
|
792
786
|
|
|
793
787
|
#### c64_vice
|
|
794
788
|
|
|
795
789
|
Grouped entry point for reading and updating selected VICE resources.
|
|
796
790
|
|
|
797
|
-
| Operation | Description | Required Inputs | Notes | C64U | VICE |
|
|
798
|
-
| --- | --- | --- | --- | --- | --- |
|
|
799
|
-
| `resource_get` | Read a VICE configuration resource (safe prefixes only). | — | — | | ✅ |
|
|
800
|
-
| `resource_set` | Write a VICE configuration resource (safe prefixes only). | — | — | | ✅ |
|
|
791
|
+
| Operation | Description | Required Inputs | Optional Inputs | Notes | C64U | VICE |
|
|
792
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
793
|
+
| `resource_get` | Read a VICE configuration resource (safe prefixes only). | `name` | — | — | | ✅ |
|
|
794
|
+
| `resource_set` | Write a VICE configuration resource (safe prefixes only). | `name`, `value` | — | — | | ✅ |
|
|
801
795
|
|
|
802
796
|
### Resources
|
|
803
797
|
|
|
@@ -13,6 +13,7 @@ Recommended C64 Bridge entry points:
|
|
|
13
13
|
| Select the VICE backend | `c64_select_backend` | `select` |
|
|
14
14
|
| Read or write memory | `c64_memory` | `read`, `write`, `read_screen`, `wait_for_text` |
|
|
15
15
|
| Debug registers and checkpoints | `c64_debug` | `get_registers`, `set_registers`, `create_checkpoint`, `list_checkpoints`, `step`, `step_return` |
|
|
16
|
+
| Send keyboard or joystick input | `c64_input` | `write_text`, `key`, `joystick` |
|
|
16
17
|
| Capture emulator display | `c64_graphics` | `capture_frame` |
|
|
17
18
|
| Reset or resume execution | `c64_system` | `reset`, `resume` |
|
|
18
19
|
| Read or write VICE resources | `c64_vice` | `resource_get`, `resource_set` |
|
|
@@ -429,7 +430,14 @@ cmd: TL:u8 | TC:bytes[TL]
|
|
|
429
430
|
rsp: 0x72 | empty
|
|
430
431
|
```
|
|
431
432
|
|
|
432
|
-
|
|
433
|
+
C64 Bridge mapping:
|
|
434
|
+
|
|
435
|
+
| MCP tool | Operation |
|
|
436
|
+
| ----------- | ------------ |
|
|
437
|
+
| `c64_input` | `write_text` |
|
|
438
|
+
| `c64_input` | `key` |
|
|
439
|
+
|
|
440
|
+
Public input tools inject PETSCII through the shared KERNAL keyboard queue for cross-platform parity. The VICE backend still exposes BM `0x72` internally via `ViceClient.keyboardFeed()` when a direct monitor call is needed.
|
|
433
441
|
|
|
434
442
|
---
|
|
435
443
|
|
|
@@ -589,7 +597,13 @@ cmd: PN:u16 | PV:u16
|
|
|
589
597
|
rsp: 0xa2 | empty
|
|
590
598
|
```
|
|
591
599
|
|
|
592
|
-
|
|
600
|
+
C64 Bridge mapping:
|
|
601
|
+
|
|
602
|
+
| MCP tool | Operation |
|
|
603
|
+
| ----------- | ---------- |
|
|
604
|
+
| `c64_input` | `joystick` |
|
|
605
|
+
|
|
606
|
+
The public joystick tool simulates the same port state by writing CIA1 joyport registers directly, rather than issuing BM `0xa2`.
|
|
593
607
|
|
|
594
608
|
---
|
|
595
609
|
|
|
@@ -772,7 +786,7 @@ Usually emitted with `request_id = 0xffffffff`.
|
|
|
772
786
|
| Resource Get | `0x51` | `0x51` | `c64_vice.resource_get` |
|
|
773
787
|
| Resource Set | `0x52` | `0x52` | `c64_vice.resource_set` |
|
|
774
788
|
| Advance Instructions | `0x71` | `0x71` | `c64_debug.step` |
|
|
775
|
-
| Keyboard Feed | `0x72` | `0x72` |
|
|
789
|
+
| Keyboard Feed | `0x72` | `0x72` | `c64_input.write_text`, `c64_input.key` |
|
|
776
790
|
| Execute Until Return | `0x73` | `0x73` | `c64_debug.step_return` |
|
|
777
791
|
| Ping | `0x81` | `0x81` | internal |
|
|
778
792
|
| Banks Available | `0x82` | `0x82` | internal |
|
|
@@ -781,7 +795,7 @@ Usually emitted with `request_id = 0xffffffff`.
|
|
|
781
795
|
| VICE Info | `0x85` | `0x85` | internal diagnostics |
|
|
782
796
|
| CPU History | `0x86` | `0x86` | internal or unmapped |
|
|
783
797
|
| Palette Get | `0x91` | `0x91` | internal display support |
|
|
784
|
-
| Joyport Set | `0xa2` | `0xa2` |
|
|
798
|
+
| Joyport Set | `0xa2` | `0xa2` | `c64_input.joystick` |
|
|
785
799
|
| Userport Set | `0xb2` | `0xb2` | internal or unmapped |
|
|
786
800
|
| Exit | `0xaa` | `0xaa` | `c64_system.resume` |
|
|
787
801
|
| Quit | `0xbb` | `0xbb` | managed VICE lifecycle |
|
|
@@ -803,6 +817,9 @@ Examples:
|
|
|
803
817
|
| Read memory at `$0801` | `c64_memory` with `op = read` |
|
|
804
818
|
| Write bytes to RAM | `c64_memory` with `op = write` |
|
|
805
819
|
| Show the current text screen | `c64_memory` with `op = read_screen` |
|
|
820
|
+
| Type `LOAD"*",8,1` then Return | `c64_input` with `op = write_text` |
|
|
821
|
+
| Tap a function key or Return | `c64_input` with `op = key` |
|
|
822
|
+
| Simulate joystick fire or left | `c64_input` with `op = joystick` |
|
|
806
823
|
| Capture the current video frame | `c64_graphics` with `op = capture_frame` |
|
|
807
824
|
| Set a breakpoint | `c64_debug` with `op = create_checkpoint` |
|
|
808
825
|
| List breakpoints | `c64_debug` with `op = list_checkpoints` |
|