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.
Files changed (49) hide show
  1. package/README.md +158 -164
  2. package/data/vice/vice-binary-monitor-spec.md +21 -4
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/c64Client.js +76 -2
  5. package/dist/device.js +43 -3
  6. package/dist/rag/indexer.js +18 -8
  7. package/dist/sidwaveCompiler.js +1 -1
  8. package/dist/{assemblyConverter.js → tools/assember.js} +10 -1
  9. package/dist/{basicConverter.js → tools/basicTokenizer.js} +1 -1
  10. package/dist/tools/debug.js +158 -5
  11. package/dist/tools/disassembler.js +478 -0
  12. package/dist/tools/input.js +338 -0
  13. package/dist/tools/memory.js +317 -1
  14. package/dist/tools/programRunners.js +45 -6
  15. package/dist/tools/registry/batch.js +167 -0
  16. package/dist/tools/registry/graphics.js +101 -1
  17. package/dist/tools/registry/index.js +4 -0
  18. package/dist/tools/registry/input.js +2 -0
  19. package/dist/tools/registry/memory.js +61 -1
  20. package/dist/tools/schema.js +4 -5
  21. package/dist/tools/symbolRegistry.js +49 -0
  22. package/dist/tools/types.js +19 -4
  23. package/dist/vice/process.js +43 -2
  24. package/dist/vice/viceClient.js +5 -1
  25. package/mcp/schemas/c64_batch.schema.json +53 -0
  26. package/mcp/schemas/c64_config.schema.json +461 -2
  27. package/mcp/schemas/c64_debug.schema.json +641 -3
  28. package/mcp/schemas/c64_disk.schema.json +340 -2
  29. package/mcp/schemas/c64_drive.schema.json +157 -2
  30. package/mcp/schemas/c64_extract.schema.json +359 -2
  31. package/mcp/schemas/c64_graphics.schema.json +415 -3
  32. package/mcp/schemas/c64_input.schema.json +136 -0
  33. package/mcp/schemas/c64_memory.schema.json +562 -3
  34. package/mcp/schemas/c64_printer.schema.json +253 -2
  35. package/mcp/schemas/c64_program.schema.json +499 -2
  36. package/mcp/schemas/c64_rag.schema.json +82 -2
  37. package/mcp/schemas/c64_select_backend.schema.json +35 -2
  38. package/mcp/schemas/c64_sound.schema.json +793 -2
  39. package/mcp/schemas/c64_stream.schema.json +73 -2
  40. package/mcp/schemas/c64_system.schema.json +301 -2
  41. package/mcp/schemas/c64_vice.schema.json +71 -2
  42. package/mcp/server.json +1 -1
  43. package/mcp/tools.json +6718 -1257
  44. package/mcp.json +1 -1
  45. package/package.json +1 -1
  46. package/scripts/run-coverage.mjs +7 -0
  47. package/scripts/run-tests.ts +2 -0
  48. package/scripts/update-readme.ts +79 -2
  49. package/server.json +2 -2
package/README.md CHANGED
@@ -14,7 +14,6 @@ Your AI Command Bridge for the Commodore 64.
14
14
  [![Install in VS Code Insiders](https://img.shields.io/badge/Install_in-VS_Code_Insiders-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](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
  [![Install in Visual Studio](https://img.shields.io/badge/Install_in-Visual_Studio-C16FDE?style=flat-square&logo=visualstudio&logoColor=white)](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
  [![Install in Cursor](https://img.shields.io/badge/Install_in-Cursor-000000?style=flat-square&logoColor=white)](https://cursor.com/en/install-mcp?name=io.github.chrisgleissner%2Fc64bridge&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImM2NGJyaWRnZSJdLCJlbnYiOnsiQzY0X01PREUiOiJjNjR1IiwiQzY0VV9IT1NUIjoiYzY0dSIsIlZJQ0VfQklOQVJZIjoiL3Vzci9sb2NhbC9iaW4veDY0c2MiLCJWSUNFX0RJUkVDVE9SWSI6Ii91c3IvbG9jYWwvc2hhcmUvdmljZSIsIlZJQ0VfVklTSUJMRSI6InRydWUiLCJWSUNFX1dBUlAiOiJmYWxzZSJ9fQ==)
17
- [![Use with Claude Code](https://img.shields.io/badge/Use_with-Claude_Code-D97757?style=flat-square&logo=anthropic&logoColor=white)](#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
- C64 Bridge ships a single canonical `stdio` entry point that every MCP client uses:
194
+ If you use VS Code, follow the [VS Code MCP Setup](#vs-code-mcp-setup) section below.
197
195
 
198
- - **VS Code (GitHub Copilot)** — see [VS Code MCP Setup](#vs-code-mcp-setup).
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, or when the configured path is invalid, C64 Bridge auto-detects a VICE resource directory by looking for the standard C64 ROM set near the selected emulator binary and in common system locations.
255
- - `VICE_BINARY`, `VICE_DIRECTORY`, `VICE_HOST`, `VICE_PORT`, `VICE_VISIBLE`, `VICE_WARP`, and `VICE_ARGS` override managed VICE startup without editing config files. Valid explicit `VICE_BINARY` and `VICE_DIRECTORY` values are used as-is; automatic search only fills in missing or invalid values.
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 **15 tools**, **26 resources**, and **10 prompts** for controlling your Commodore 64.
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
- | `create_checkpoint` | Create a new checkpoint (breakpoint) in VICE. | — | — | | ✅ |
632
- | `delete_checkpoint` | Remove a checkpoint by id. | — | — | | ✅ |
633
- | `get_checkpoint` | Fetch a single checkpoint by id. | — | — | | ✅ |
634
- | `get_registers` | Read register values, optionally filtered by name or id. | — | — | | ✅ |
635
- | `list_checkpoints` | List all active VICE checkpoints (breakpoints). | — | — | | ✅ |
636
- | `list_registers` | List available registers (metadata). | — | — | | ✅ |
637
- | `set_condition` | Attach a conditional expression to a checkpoint. | — | — | | ✅ |
638
- | `set_registers` | Write register values. | — | — | | ✅ |
639
- | `step` | Single-step CPU execution. | — | — | | ✅ |
640
- | `step_return` | Continue execution until the current routine returns. | — | — | | ✅ |
641
- | `toggle_checkpoint` | Enable or disable a checkpoint by id. | — | — | | ✅ |
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. | — | supports verify | ✅ | |
650
- | `file_info` | Inspect metadata for a file on the Ultimate filesystem. | — | supports verify | ✅ | |
651
- | `find_and_run` | Search for a PRG/CRT by name substring and run the first match. | — | supports verify | ✅ | |
652
- | `list_drives` | List Ultimate drive slots and their mounted images. | — | supports verify | ✅ | ✅ |
653
- | `mount` | Mount a disk image with optional verification and retries. | — | supports verify | ✅ | ✅ |
654
- | `unmount` | Remove the mounted image from an Ultimate drive slot. | — | supports verify | ✅ | ✅ |
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
- | `render_bitmap` | Import an image file, convert it to VIC-II bitmap memory, write it into RAM, and display it. | — | — | ✅ | ✅ |
688
- | `render_petscii_art` | Create PETSCII art from prompts, text, or explicit bitmap data, and optionally display it on the C64. | — | — | ✅ | ✅ |
689
- | `render_petscii_text` | Display PETSCII text with optional border and background colours. | — | — | ✅ | ✅ |
690
- | `render_sprite` | Display supplied 63-byte sprite data at the requested position and colour by writing memory and patching VIC-II registers directly. | — | — | ✅ | ✅ |
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
- | `read` | Read a range of bytes and return a hex dump with address metadata. | — | supports verify | ✅ | ✅ |
699
- | `read_screen` | Return the current 40x25 text screen converted to ASCII. | — | supports verify | ✅ | ✅ |
700
- | `wait_for_text` | Poll the screen until a substring or regex appears, or timeout elapses. | — | supports verify | ✅ | ✅ |
701
- | `write` | Write a hexadecimal byte sequence into RAM. | — | supports verify | ✅ | ✅ |
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. | — | supports verify | ✅ | ✅ |
720
- | `bundle_run` | Capture screen, memory, and debug registers into an artifact bundle. | — | supports verify | ✅ | |
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. | — | supports verify | ✅ | |
723
- | `run_crt` | Mount and run a CRT cartridge image. | — | supports verify | ✅ | |
724
- | `run_prg` | Load and execute a PRG from Ultimate-visible storage on c64u or a host-local path on VICE. | — | supports verify | ✅ | ✅ |
725
- | `upload_run_asm` | Assemble 6502/6510 source, upload the PRG, and execute it. | — | supports verify | ✅ | ✅ |
726
- | `upload_run_basic` | Upload Commodore BASIC v2 source and execute it immediately. | — | supports verify | ✅ | ✅ |
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. | — | supports verify | ✅ | |
752
- | `capture_samples` | Capture raw stereo PCM samples from the C64 Ultimate audio UDP stream. | — | supports verify | ✅ | |
753
- | `compile_play` | Compile SIDWAVE or CPG source and optionally play it immediately. | — | supports verify | ✅ | ✅ |
754
- | `generate` | Generate a lightweight SID arpeggio playback sequence. | — | supports verify | ✅ | ✅ |
755
- | `note_off` | Release a SID voice by clearing its gate bit. | — | supports verify | ✅ | ✅ |
756
- | `note_on` | Trigger a SID voice with configurable waveform, ADSR, and pitch. | — | supports verify | ✅ | ✅ |
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. | — | supports verify | ✅ | |
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. | — | supports verify | ✅ | |
761
- | `record_analyze` | Record audio for a fixed duration and return SID analysis metrics. | — | supports verify | ✅ | |
762
- | `reset` | Soft or hard reset of SID registers to clear glitches. | — | supports verify | ✅ | ✅ |
763
- | `set_volume` | Set the SID master volume register at $D418 (0-15). | — | supports verify | ✅ | ✅ |
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
- No primary public C64 Bridge MCP mapping is listed in the README API reference.
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
- No primary public C64 Bridge MCP mapping is listed in the README API reference.
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` | internal or unmapped |
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` | internal or unmapped |
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` |