c64bridge 0.7.4 → 0.8.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/.github/prompts/README.md +14 -4
- package/.github/prompts/assembly-routine-session.prompt.md +9 -9
- package/.github/prompts/basic-program-session.prompt.md +11 -9
- package/.github/prompts/drive-management-session.prompt.md +9 -9
- package/.github/prompts/hello-world-session.prompt.md +17 -0
- package/.github/prompts/petscii-art-session.prompt.md +9 -9
- package/.github/prompts/play-classic-game.prompt.md +9 -9
- package/.github/prompts/pr-converge.prompt.md +13 -0
- package/.github/prompts/sid-music-session.prompt.md +9 -9
- package/AGENTS.md +59 -60
- package/README.md +550 -191
- package/data/assembly/assembly-spec.md +290 -1
- package/data/context/bootstrap.md +26 -2
- package/data/context/fast-paths.md +44 -0
- package/data/graphics/petscii-style-guide.md +6 -2
- package/data/graphics/sprite-charset-best-practices.md +5 -5
- package/dist/.tsbuildinfo +1 -1
- package/dist/c64Client.js +990 -26
- package/dist/config.js +5 -1
- package/dist/device.js +680 -57
- package/dist/diagnostics.js +371 -0
- package/dist/mcp/metadata.js +39 -0
- package/dist/mcp-server.js +170 -20
- package/dist/platform.js +10 -2
- package/dist/prompts/registry.js +166 -309
- package/dist/rag/init.js +37 -1
- package/dist/rag/knowledgeIndex.js +18 -6
- package/dist/rag/rateLimiter.js +2 -2
- package/dist/streamCapture.js +135 -0
- package/dist/tools/audio.js +3 -1
- package/dist/tools/debug.js +470 -0
- package/dist/tools/developer.js +10 -4
- package/dist/tools/graphics.js +183 -17
- package/dist/tools/machineControl.js +11 -5
- package/dist/tools/memory.js +19 -10
- package/dist/tools/meta/audio.js +240 -1
- package/dist/tools/meta/config.js +20 -28
- package/dist/tools/meta/configInventory.js +104 -0
- package/dist/tools/meta/diagnostics.js +45 -2
- package/dist/tools/meta/graphics.js +14 -6
- package/dist/tools/meta/index.js +1 -0
- package/dist/tools/meta/memory.js +20 -6
- package/dist/tools/meta/program.js +473 -0
- package/dist/tools/pollValidator.js +4 -2
- package/dist/tools/programRunners.js +8 -4
- package/dist/tools/registry/config.js +17 -0
- package/dist/tools/registry/disk.js +7 -0
- package/dist/tools/registry/drive.js +3 -0
- package/dist/tools/registry/graphics.js +111 -27
- package/dist/tools/registry/index.js +6 -0
- package/dist/tools/registry/memory.js +1 -0
- package/dist/tools/registry/platform.js +121 -0
- package/dist/tools/registry/program.js +26 -8
- package/dist/tools/registry/sound.js +96 -0
- package/dist/tools/registry/system.js +15 -2
- package/dist/tools/storage.js +1 -0
- package/dist/tools/streaming.js +1 -0
- package/dist/tools/types.js +38 -4
- package/dist/tools/vice.js +160 -0
- package/dist/vicBitmap.js +317 -0
- package/dist/vice/mockServer.js +439 -0
- package/dist/vice/process.js +310 -0
- package/dist/vice/readiness.js +18 -2
- package/dist/vice/viceClient.js +382 -22
- package/doc/developer.md +71 -25
- package/doc/img/backend-switch/hello-c64u.png +0 -0
- package/doc/img/backend-switch/hello-vice-and-c64u.png +0 -0
- package/doc/img/backend-switch/hello-vice.png +0 -0
- package/doc/img/backend-switch/metadata.json +50 -0
- package/doc/plans/vice-backend-switch/plan.md +486 -0
- package/doc/plans/vice-backend-switch-2/plan.md +48 -0
- package/doc/plans/vice-support/notes.md +1 -0
- package/doc/plans/vice-support/plan.md +5 -0
- package/doc/plans/vice-support/rollout.md +23 -17
- package/doc/reviews/vice-support-review.md +185 -0
- package/doc/troubleshooting-mcp.md +35 -6
- package/doc/vice/support-matrix.md +54 -0
- package/mcp/prompts.json +292 -0
- package/mcp/protocol-examples.json +46 -0
- package/mcp/resources.json +940 -0
- package/mcp/schemas/c64_config.schema.json +350 -0
- package/mcp/schemas/c64_debug.schema.json +380 -0
- package/mcp/schemas/c64_disk.schema.json +278 -0
- package/mcp/schemas/c64_drive.schema.json +120 -0
- package/mcp/schemas/c64_extract.schema.json +302 -0
- package/mcp/schemas/c64_graphics.schema.json +333 -0
- package/mcp/schemas/c64_memory.schema.json +155 -0
- package/mcp/schemas/c64_printer.schema.json +218 -0
- package/mcp/schemas/c64_program.schema.json +391 -0
- package/mcp/schemas/c64_rag.schema.json +67 -0
- package/mcp/schemas/c64_select_backend.schema.json +32 -0
- package/mcp/schemas/c64_sound.schema.json +644 -0
- package/mcp/schemas/c64_stream.schema.json +61 -0
- package/mcp/schemas/c64_system.schema.json +227 -0
- package/mcp/schemas/c64_vice.schema.json +63 -0
- package/mcp/server.json +15 -0
- package/mcp/tools.json +4517 -0
- package/mcp.json +90 -15
- package/package.json +11 -4
- package/scripts/capture-backend-switch-screenshots.mjs +276 -0
- package/scripts/generate-mcp-interface.ts +289 -0
- package/scripts/invoke-bun.mjs +67 -21
- package/scripts/mockC64Server.mjs +162 -6
- package/scripts/prepare-release.mjs +59 -2
- package/scripts/run-coverage.mjs +284 -0
- package/scripts/run-tests.mjs +95 -39
- package/scripts/run-tests.ts +378 -73
- package/scripts/update-readme.ts +147 -13
- package/server.json +94 -0
package/mcp/tools.json
ADDED
|
@@ -0,0 +1,4517 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tools": [
|
|
3
|
+
{
|
|
4
|
+
"name": "c64_program",
|
|
5
|
+
"title": "Runs PRG/CRT files, uploads BASIC or ASM, and coordinates batch test flows.",
|
|
6
|
+
"description": "Grouped entry point for program upload, execution, and batch workflows.",
|
|
7
|
+
"inputSchema": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"description": "Program operations available via the c64_program tool.",
|
|
10
|
+
"oneOf": [
|
|
11
|
+
{
|
|
12
|
+
"type": "object",
|
|
13
|
+
"description": "Load a PRG from Ultimate storage without executing it.",
|
|
14
|
+
"properties": {
|
|
15
|
+
"path": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "Path to the PRG image. Use an Ultimate-visible filesystem path on c64u, or a host-local filesystem path on VICE.",
|
|
18
|
+
"minLength": 1
|
|
19
|
+
},
|
|
20
|
+
"op": {
|
|
21
|
+
"const": "load_prg"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"required": [
|
|
25
|
+
"path",
|
|
26
|
+
"op"
|
|
27
|
+
],
|
|
28
|
+
"additionalProperties": false
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"type": "object",
|
|
32
|
+
"description": "Load and execute a PRG from Ultimate-visible storage on c64u or a host-local path on VICE.",
|
|
33
|
+
"properties": {
|
|
34
|
+
"path": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"description": "Path to the PRG image. Use an Ultimate-visible filesystem path on c64u, or a host-local filesystem path on VICE.",
|
|
37
|
+
"minLength": 1
|
|
38
|
+
},
|
|
39
|
+
"op": {
|
|
40
|
+
"const": "run_prg"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"required": [
|
|
44
|
+
"path",
|
|
45
|
+
"op"
|
|
46
|
+
],
|
|
47
|
+
"additionalProperties": false
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"type": "object",
|
|
51
|
+
"description": "Mount and run a CRT cartridge image.",
|
|
52
|
+
"properties": {
|
|
53
|
+
"path": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"description": "Path to the CRT image on Ultimate-visible storage. CRT mounting is only supported on c64u.",
|
|
56
|
+
"minLength": 1
|
|
57
|
+
},
|
|
58
|
+
"op": {
|
|
59
|
+
"const": "run_crt"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"required": [
|
|
63
|
+
"path",
|
|
64
|
+
"op"
|
|
65
|
+
],
|
|
66
|
+
"additionalProperties": false
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"type": "object",
|
|
70
|
+
"description": "Upload Commodore BASIC v2 source and execute it immediately.",
|
|
71
|
+
"properties": {
|
|
72
|
+
"program": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"description": "Commodore BASIC v2 program source to upload and run.",
|
|
75
|
+
"minLength": 1
|
|
76
|
+
},
|
|
77
|
+
"verify": {
|
|
78
|
+
"type": "boolean",
|
|
79
|
+
"description": "Run post-execution polling to ensure the BASIC program executed without errors.",
|
|
80
|
+
"default": false
|
|
81
|
+
},
|
|
82
|
+
"op": {
|
|
83
|
+
"const": "upload_run_basic"
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"required": [
|
|
87
|
+
"program",
|
|
88
|
+
"op"
|
|
89
|
+
],
|
|
90
|
+
"additionalProperties": false
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"type": "object",
|
|
94
|
+
"description": "Assemble 6502/6510 source, upload the PRG, and execute it.",
|
|
95
|
+
"properties": {
|
|
96
|
+
"program": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"description": "Assembly source that will be assembled to a PRG and executed.",
|
|
99
|
+
"minLength": 1
|
|
100
|
+
},
|
|
101
|
+
"verify": {
|
|
102
|
+
"type": "boolean",
|
|
103
|
+
"description": "Run post-execution polling to confirm the assembly program remained stable.",
|
|
104
|
+
"default": false
|
|
105
|
+
},
|
|
106
|
+
"op": {
|
|
107
|
+
"const": "upload_run_asm"
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"required": [
|
|
111
|
+
"program",
|
|
112
|
+
"op"
|
|
113
|
+
],
|
|
114
|
+
"additionalProperties": false
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"type": "object",
|
|
118
|
+
"description": "Run multiple PRG/CRT programs with post-run assertions.",
|
|
119
|
+
"properties": {
|
|
120
|
+
"programs": {
|
|
121
|
+
"type": "array",
|
|
122
|
+
"items": {
|
|
123
|
+
"type": "object",
|
|
124
|
+
"description": "Program to run with assertions",
|
|
125
|
+
"properties": {
|
|
126
|
+
"path": {
|
|
127
|
+
"type": "string",
|
|
128
|
+
"description": "Program path (PRG or CRT)",
|
|
129
|
+
"minLength": 1
|
|
130
|
+
},
|
|
131
|
+
"assertions": {
|
|
132
|
+
"type": [
|
|
133
|
+
"array",
|
|
134
|
+
"null"
|
|
135
|
+
],
|
|
136
|
+
"items": {
|
|
137
|
+
"type": "object",
|
|
138
|
+
"description": "Assertion to check after run",
|
|
139
|
+
"properties": {
|
|
140
|
+
"type": {
|
|
141
|
+
"type": "string",
|
|
142
|
+
"description": "Assertion type",
|
|
143
|
+
"enum": [
|
|
144
|
+
"screen_contains",
|
|
145
|
+
"memory_equals",
|
|
146
|
+
"sid_silent"
|
|
147
|
+
]
|
|
148
|
+
},
|
|
149
|
+
"pattern": {
|
|
150
|
+
"type": [
|
|
151
|
+
"string",
|
|
152
|
+
"null"
|
|
153
|
+
],
|
|
154
|
+
"description": "Pattern for screen_contains",
|
|
155
|
+
"minLength": 1
|
|
156
|
+
},
|
|
157
|
+
"address": {
|
|
158
|
+
"type": [
|
|
159
|
+
"string",
|
|
160
|
+
"null"
|
|
161
|
+
],
|
|
162
|
+
"description": "Address for memory_equals",
|
|
163
|
+
"minLength": 1
|
|
164
|
+
},
|
|
165
|
+
"expected": {
|
|
166
|
+
"type": [
|
|
167
|
+
"string",
|
|
168
|
+
"null"
|
|
169
|
+
],
|
|
170
|
+
"description": "Expected value (hex)",
|
|
171
|
+
"minLength": 1
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
"required": [
|
|
175
|
+
"type"
|
|
176
|
+
],
|
|
177
|
+
"additionalProperties": false
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
"required": [
|
|
182
|
+
"path"
|
|
183
|
+
],
|
|
184
|
+
"additionalProperties": false
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
"continueOnError": {
|
|
188
|
+
"type": [
|
|
189
|
+
"boolean",
|
|
190
|
+
"null"
|
|
191
|
+
],
|
|
192
|
+
"description": "Continue running programs after assertion failure",
|
|
193
|
+
"default": false
|
|
194
|
+
},
|
|
195
|
+
"durationMs": {
|
|
196
|
+
"type": [
|
|
197
|
+
"integer",
|
|
198
|
+
"null"
|
|
199
|
+
],
|
|
200
|
+
"description": "Duration to run each program before assertions",
|
|
201
|
+
"minimum": 1,
|
|
202
|
+
"default": 2000
|
|
203
|
+
},
|
|
204
|
+
"outputPath": {
|
|
205
|
+
"type": [
|
|
206
|
+
"string",
|
|
207
|
+
"null"
|
|
208
|
+
],
|
|
209
|
+
"description": "Output directory for test results",
|
|
210
|
+
"minLength": 1
|
|
211
|
+
},
|
|
212
|
+
"resetDelayMs": {
|
|
213
|
+
"type": [
|
|
214
|
+
"integer",
|
|
215
|
+
"null"
|
|
216
|
+
],
|
|
217
|
+
"description": "Delay after reset operations to allow the platform to settle.",
|
|
218
|
+
"minimum": 0,
|
|
219
|
+
"maximum": 1000,
|
|
220
|
+
"default": 100
|
|
221
|
+
},
|
|
222
|
+
"op": {
|
|
223
|
+
"const": "batch_run"
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
"required": [
|
|
227
|
+
"programs",
|
|
228
|
+
"op"
|
|
229
|
+
],
|
|
230
|
+
"additionalProperties": false
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"type": "object",
|
|
234
|
+
"description": "Capture screen, memory, and debug registers into an artifact bundle.",
|
|
235
|
+
"properties": {
|
|
236
|
+
"runId": {
|
|
237
|
+
"type": "string",
|
|
238
|
+
"description": "Unique identifier for this run",
|
|
239
|
+
"minLength": 1
|
|
240
|
+
},
|
|
241
|
+
"outputPath": {
|
|
242
|
+
"type": "string",
|
|
243
|
+
"description": "Output directory for artifacts bundle",
|
|
244
|
+
"minLength": 1
|
|
245
|
+
},
|
|
246
|
+
"captureScreen": {
|
|
247
|
+
"type": [
|
|
248
|
+
"boolean",
|
|
249
|
+
"null"
|
|
250
|
+
],
|
|
251
|
+
"description": "Capture screen content",
|
|
252
|
+
"default": true
|
|
253
|
+
},
|
|
254
|
+
"memoryRanges": {
|
|
255
|
+
"type": [
|
|
256
|
+
"array",
|
|
257
|
+
"null"
|
|
258
|
+
],
|
|
259
|
+
"items": {
|
|
260
|
+
"type": "object",
|
|
261
|
+
"description": "Memory range to snapshot",
|
|
262
|
+
"properties": {
|
|
263
|
+
"address": {
|
|
264
|
+
"type": "string",
|
|
265
|
+
"description": "Start address",
|
|
266
|
+
"minLength": 1
|
|
267
|
+
},
|
|
268
|
+
"length": {
|
|
269
|
+
"type": "integer",
|
|
270
|
+
"description": "Length in bytes",
|
|
271
|
+
"minimum": 1
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
"required": [
|
|
275
|
+
"address",
|
|
276
|
+
"length"
|
|
277
|
+
],
|
|
278
|
+
"additionalProperties": false
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
"captureDebugReg": {
|
|
282
|
+
"type": [
|
|
283
|
+
"boolean",
|
|
284
|
+
"null"
|
|
285
|
+
],
|
|
286
|
+
"description": "Capture debugreg state",
|
|
287
|
+
"default": true
|
|
288
|
+
},
|
|
289
|
+
"op": {
|
|
290
|
+
"const": "bundle_run"
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
"required": [
|
|
294
|
+
"runId",
|
|
295
|
+
"outputPath",
|
|
296
|
+
"op"
|
|
297
|
+
],
|
|
298
|
+
"additionalProperties": false
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"type": "object",
|
|
302
|
+
"description": "Show a platform-customized greeting on one or more configured backends, capture screenshots, and verify the results.",
|
|
303
|
+
"properties": {
|
|
304
|
+
"platforms": {
|
|
305
|
+
"type": [
|
|
306
|
+
"array",
|
|
307
|
+
"null"
|
|
308
|
+
],
|
|
309
|
+
"items": {
|
|
310
|
+
"type": "string",
|
|
311
|
+
"description": "Backends to target in sequence.",
|
|
312
|
+
"minLength": 1,
|
|
313
|
+
"enum": [
|
|
314
|
+
"vice",
|
|
315
|
+
"c64u"
|
|
316
|
+
]
|
|
317
|
+
},
|
|
318
|
+
"default": [
|
|
319
|
+
"vice",
|
|
320
|
+
"c64u"
|
|
321
|
+
]
|
|
322
|
+
},
|
|
323
|
+
"messageTemplate": {
|
|
324
|
+
"type": [
|
|
325
|
+
"string",
|
|
326
|
+
"null"
|
|
327
|
+
],
|
|
328
|
+
"description": "Greeting template. Use {PLATFORM}/{BACKEND} for uppercase or {platform}/{backend} for lowercase substitution.",
|
|
329
|
+
"minLength": 1,
|
|
330
|
+
"default": "HAVE A GREAT DAY, {PLATFORM}!"
|
|
331
|
+
},
|
|
332
|
+
"verify": {
|
|
333
|
+
"type": [
|
|
334
|
+
"boolean",
|
|
335
|
+
"null"
|
|
336
|
+
],
|
|
337
|
+
"description": "Poll the text screen and require the rendered greeting to appear.",
|
|
338
|
+
"default": true
|
|
339
|
+
},
|
|
340
|
+
"captureScreenshot": {
|
|
341
|
+
"type": [
|
|
342
|
+
"boolean",
|
|
343
|
+
"null"
|
|
344
|
+
],
|
|
345
|
+
"description": "Capture a framebuffer screenshot and save it as a PNG per backend.",
|
|
346
|
+
"default": true
|
|
347
|
+
},
|
|
348
|
+
"outputPath": {
|
|
349
|
+
"type": [
|
|
350
|
+
"string",
|
|
351
|
+
"null"
|
|
352
|
+
],
|
|
353
|
+
"description": "Directory for screenshots and the workflow summary JSON.",
|
|
354
|
+
"minLength": 1
|
|
355
|
+
},
|
|
356
|
+
"restoreActiveBackend": {
|
|
357
|
+
"type": [
|
|
358
|
+
"boolean",
|
|
359
|
+
"null"
|
|
360
|
+
],
|
|
361
|
+
"description": "Restore the backend that was active before the workflow started.",
|
|
362
|
+
"default": true
|
|
363
|
+
},
|
|
364
|
+
"timeoutMs": {
|
|
365
|
+
"type": [
|
|
366
|
+
"integer",
|
|
367
|
+
"null"
|
|
368
|
+
],
|
|
369
|
+
"description": "Maximum time to wait for each greeting to appear on screen.",
|
|
370
|
+
"minimum": 100,
|
|
371
|
+
"maximum": 5000,
|
|
372
|
+
"default": 1500
|
|
373
|
+
},
|
|
374
|
+
"pollIntervalMs": {
|
|
375
|
+
"type": [
|
|
376
|
+
"integer",
|
|
377
|
+
"null"
|
|
378
|
+
],
|
|
379
|
+
"description": "Delay between screen polls while verifying the greeting.",
|
|
380
|
+
"minimum": 50,
|
|
381
|
+
"maximum": 1000,
|
|
382
|
+
"default": 100
|
|
383
|
+
},
|
|
384
|
+
"op": {
|
|
385
|
+
"const": "cross_platform_greeting"
|
|
386
|
+
}
|
|
387
|
+
},
|
|
388
|
+
"additionalProperties": false,
|
|
389
|
+
"required": [
|
|
390
|
+
"op"
|
|
391
|
+
]
|
|
392
|
+
}
|
|
393
|
+
],
|
|
394
|
+
"discriminator": {
|
|
395
|
+
"propertyName": "op"
|
|
396
|
+
}
|
|
397
|
+
},
|
|
398
|
+
"_meta": {
|
|
399
|
+
"domain": "programs",
|
|
400
|
+
"summary": "Runs PRG/CRT files, uploads BASIC or ASM, and coordinates batch test flows.",
|
|
401
|
+
"lifecycle": "request-response",
|
|
402
|
+
"resources": [
|
|
403
|
+
"c64://context/bootstrap",
|
|
404
|
+
"c64://specs/basic",
|
|
405
|
+
"c64://specs/assembly"
|
|
406
|
+
],
|
|
407
|
+
"prompts": [
|
|
408
|
+
"basic-program",
|
|
409
|
+
"assembly-program"
|
|
410
|
+
],
|
|
411
|
+
"examples": [
|
|
412
|
+
{
|
|
413
|
+
"name": "Run PRG from storage",
|
|
414
|
+
"description": "Load and execute a PRG in one call",
|
|
415
|
+
"arguments": {
|
|
416
|
+
"op": "run_prg",
|
|
417
|
+
"path": "//USB0/demo.prg"
|
|
418
|
+
}
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
"name": "Upload BASIC source",
|
|
422
|
+
"description": "Send inline BASIC to the C64 and run it",
|
|
423
|
+
"arguments": {
|
|
424
|
+
"op": "upload_run_basic",
|
|
425
|
+
"program": "10 PRINT \"HELLO\"\n20 GOTO 10"
|
|
426
|
+
}
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"name": "Show greeting on both backends",
|
|
430
|
+
"description": "Render a platform-specific greeting on VICE and C64U with screenshot verification",
|
|
431
|
+
"arguments": {
|
|
432
|
+
"op": "cross_platform_greeting"
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
],
|
|
436
|
+
"tags": [
|
|
437
|
+
"programs",
|
|
438
|
+
"execution",
|
|
439
|
+
"grouped"
|
|
440
|
+
],
|
|
441
|
+
"workflowHints": [
|
|
442
|
+
"Choose BASIC or assembly uploaders based on the language you just generated for the user.",
|
|
443
|
+
"Prefer PRG or CRT runners when the user supplies a file path instead of source text; PRG paths are host-local on VICE and Ultimate-visible on c64u.",
|
|
444
|
+
"For a quick visible confirmation on VICE and/or C64U, prefer cross_platform_greeting instead of composing manual backend switches and BASIC upload steps."
|
|
445
|
+
],
|
|
446
|
+
"platforms": [
|
|
447
|
+
"c64u",
|
|
448
|
+
"vice"
|
|
449
|
+
],
|
|
450
|
+
"operationPlatforms": {
|
|
451
|
+
"load_prg": [
|
|
452
|
+
"c64u"
|
|
453
|
+
],
|
|
454
|
+
"run_crt": [
|
|
455
|
+
"c64u"
|
|
456
|
+
],
|
|
457
|
+
"bundle_run": [
|
|
458
|
+
"c64u"
|
|
459
|
+
]
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
"name": "c64_memory",
|
|
465
|
+
"title": "Reads or writes RAM, captures the screen, or waits for text matches in one tool.",
|
|
466
|
+
"description": "Grouped entry point for memory I/O, screen reads, and screen polling.",
|
|
467
|
+
"inputSchema": {
|
|
468
|
+
"type": "object",
|
|
469
|
+
"description": "Memory operations available via the c64_memory tool.",
|
|
470
|
+
"oneOf": [
|
|
471
|
+
{
|
|
472
|
+
"type": "object",
|
|
473
|
+
"description": "Read a range of bytes and return a hex dump with address metadata.",
|
|
474
|
+
"properties": {
|
|
475
|
+
"address": {
|
|
476
|
+
"type": "string",
|
|
477
|
+
"description": "Start address expressed as $HHHH, decimal, or a documented symbol name.",
|
|
478
|
+
"minLength": 1
|
|
479
|
+
},
|
|
480
|
+
"length": {
|
|
481
|
+
"type": "integer",
|
|
482
|
+
"description": "Number of bytes to read starting from the resolved address.",
|
|
483
|
+
"minimum": 1,
|
|
484
|
+
"maximum": 4096,
|
|
485
|
+
"default": 256
|
|
486
|
+
},
|
|
487
|
+
"op": {
|
|
488
|
+
"const": "read"
|
|
489
|
+
}
|
|
490
|
+
},
|
|
491
|
+
"required": [
|
|
492
|
+
"address",
|
|
493
|
+
"op"
|
|
494
|
+
],
|
|
495
|
+
"additionalProperties": false
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
"type": "object",
|
|
499
|
+
"description": "Write a hexadecimal byte sequence into RAM.",
|
|
500
|
+
"properties": {
|
|
501
|
+
"address": {
|
|
502
|
+
"type": "string",
|
|
503
|
+
"description": "Destination address expressed as $HHHH, decimal, or a documented symbol name.",
|
|
504
|
+
"minLength": 1
|
|
505
|
+
},
|
|
506
|
+
"bytes": {
|
|
507
|
+
"type": "string",
|
|
508
|
+
"description": "Hex byte sequence like $AABBCC or AA BB CC to write starting at the resolved address.",
|
|
509
|
+
"minLength": 2,
|
|
510
|
+
"pattern": "^[\\s_0-9A-Fa-f$]+$"
|
|
511
|
+
},
|
|
512
|
+
"verify": {
|
|
513
|
+
"type": "boolean",
|
|
514
|
+
"description": "When true, verify the write by reading before and after the change; Ultimate hardware also pauses during verification.",
|
|
515
|
+
"default": false
|
|
516
|
+
},
|
|
517
|
+
"expected": {
|
|
518
|
+
"type": [
|
|
519
|
+
"string",
|
|
520
|
+
"null"
|
|
521
|
+
],
|
|
522
|
+
"description": "Optional hex data expected before the write (verifies before writing).",
|
|
523
|
+
"minLength": 2,
|
|
524
|
+
"pattern": "^[\\s_0-9A-Fa-f$]+$"
|
|
525
|
+
},
|
|
526
|
+
"mask": {
|
|
527
|
+
"type": [
|
|
528
|
+
"string",
|
|
529
|
+
"null"
|
|
530
|
+
],
|
|
531
|
+
"description": "Optional verification mask (hex); only bits set in the mask are compared.",
|
|
532
|
+
"minLength": 2,
|
|
533
|
+
"pattern": "^[\\s_0-9A-Fa-f$]+$"
|
|
534
|
+
},
|
|
535
|
+
"abortOnMismatch": {
|
|
536
|
+
"type": "boolean",
|
|
537
|
+
"description": "Abort the write when the pre-write verification fails.",
|
|
538
|
+
"default": true
|
|
539
|
+
},
|
|
540
|
+
"op": {
|
|
541
|
+
"const": "write"
|
|
542
|
+
}
|
|
543
|
+
},
|
|
544
|
+
"required": [
|
|
545
|
+
"address",
|
|
546
|
+
"bytes",
|
|
547
|
+
"op"
|
|
548
|
+
],
|
|
549
|
+
"additionalProperties": false
|
|
550
|
+
},
|
|
551
|
+
{
|
|
552
|
+
"type": "object",
|
|
553
|
+
"description": "Return the current 40x25 text screen converted to ASCII.",
|
|
554
|
+
"properties": {
|
|
555
|
+
"op": {
|
|
556
|
+
"const": "read_screen"
|
|
557
|
+
}
|
|
558
|
+
},
|
|
559
|
+
"additionalProperties": false,
|
|
560
|
+
"required": [
|
|
561
|
+
"op"
|
|
562
|
+
]
|
|
563
|
+
},
|
|
564
|
+
{
|
|
565
|
+
"type": "object",
|
|
566
|
+
"description": "Poll the screen until a substring or regex appears, or timeout elapses.",
|
|
567
|
+
"properties": {
|
|
568
|
+
"pattern": {
|
|
569
|
+
"type": "string",
|
|
570
|
+
"description": "Substring or regex to find",
|
|
571
|
+
"minLength": 1
|
|
572
|
+
},
|
|
573
|
+
"isRegex": {
|
|
574
|
+
"type": [
|
|
575
|
+
"boolean",
|
|
576
|
+
"null"
|
|
577
|
+
],
|
|
578
|
+
"description": "Interpret pattern as regular expression",
|
|
579
|
+
"default": false
|
|
580
|
+
},
|
|
581
|
+
"caseInsensitive": {
|
|
582
|
+
"type": [
|
|
583
|
+
"boolean",
|
|
584
|
+
"null"
|
|
585
|
+
],
|
|
586
|
+
"description": "Case-insensitive search",
|
|
587
|
+
"default": true
|
|
588
|
+
},
|
|
589
|
+
"timeoutMs": {
|
|
590
|
+
"type": [
|
|
591
|
+
"integer",
|
|
592
|
+
"null"
|
|
593
|
+
],
|
|
594
|
+
"description": "Overall timeout in milliseconds",
|
|
595
|
+
"minimum": 1,
|
|
596
|
+
"default": 3000
|
|
597
|
+
},
|
|
598
|
+
"intervalMs": {
|
|
599
|
+
"type": [
|
|
600
|
+
"integer",
|
|
601
|
+
"null"
|
|
602
|
+
],
|
|
603
|
+
"description": "Poll interval in milliseconds",
|
|
604
|
+
"minimum": 1,
|
|
605
|
+
"default": 100
|
|
606
|
+
},
|
|
607
|
+
"op": {
|
|
608
|
+
"const": "wait_for_text"
|
|
609
|
+
}
|
|
610
|
+
},
|
|
611
|
+
"required": [
|
|
612
|
+
"pattern",
|
|
613
|
+
"op"
|
|
614
|
+
],
|
|
615
|
+
"additionalProperties": false
|
|
616
|
+
}
|
|
617
|
+
],
|
|
618
|
+
"discriminator": {
|
|
619
|
+
"propertyName": "op"
|
|
620
|
+
}
|
|
621
|
+
},
|
|
622
|
+
"_meta": {
|
|
623
|
+
"domain": "memory",
|
|
624
|
+
"summary": "Reads or writes RAM, captures the screen, or waits for text matches in one tool.",
|
|
625
|
+
"lifecycle": "request-response",
|
|
626
|
+
"resources": [
|
|
627
|
+
"c64://context/bootstrap",
|
|
628
|
+
"c64://specs/basic",
|
|
629
|
+
"c64://specs/assembly"
|
|
630
|
+
],
|
|
631
|
+
"prompts": [
|
|
632
|
+
"memory-debug",
|
|
633
|
+
"basic-program",
|
|
634
|
+
"assembly-program"
|
|
635
|
+
],
|
|
636
|
+
"examples": [
|
|
637
|
+
{
|
|
638
|
+
"name": "Read colour RAM",
|
|
639
|
+
"description": "Read 16 bytes starting at $D800",
|
|
640
|
+
"arguments": {
|
|
641
|
+
"op": "read",
|
|
642
|
+
"address": "$D800",
|
|
643
|
+
"length": 16
|
|
644
|
+
}
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
"name": "Wait for READY prompt",
|
|
648
|
+
"description": "Poll until the READY. prompt appears",
|
|
649
|
+
"arguments": {
|
|
650
|
+
"op": "wait_for_text",
|
|
651
|
+
"pattern": "READY."
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
],
|
|
655
|
+
"tags": [
|
|
656
|
+
"memory",
|
|
657
|
+
"debug",
|
|
658
|
+
"screen",
|
|
659
|
+
"grouped"
|
|
660
|
+
],
|
|
661
|
+
"workflowHints": [
|
|
662
|
+
"Pair memory operations with documentation snippets so addresses and symbols stay meaningful to the user.",
|
|
663
|
+
"Confirm intent before mutating RAM and explain how the change affects the running program."
|
|
664
|
+
],
|
|
665
|
+
"platforms": [
|
|
666
|
+
"c64u",
|
|
667
|
+
"vice"
|
|
668
|
+
]
|
|
669
|
+
}
|
|
670
|
+
},
|
|
671
|
+
{
|
|
672
|
+
"name": "c64_sound",
|
|
673
|
+
"title": "Adjusts SID registers, plays files, composes music, and runs verification captures.",
|
|
674
|
+
"description": "Grouped entry point for SID control, playback, composition, and analysis workflows.",
|
|
675
|
+
"inputSchema": {
|
|
676
|
+
"type": "object",
|
|
677
|
+
"description": "Sound operations available via the c64_sound tool.",
|
|
678
|
+
"oneOf": [
|
|
679
|
+
{
|
|
680
|
+
"type": "object",
|
|
681
|
+
"description": "Capture raw stereo PCM samples from the C64 Ultimate audio UDP stream.",
|
|
682
|
+
"properties": {
|
|
683
|
+
"op": {
|
|
684
|
+
"const": "capture_samples"
|
|
685
|
+
},
|
|
686
|
+
"count": {
|
|
687
|
+
"type": [
|
|
688
|
+
"integer",
|
|
689
|
+
"null"
|
|
690
|
+
],
|
|
691
|
+
"description": "Number of stereo sample pairs to capture.",
|
|
692
|
+
"minimum": 1,
|
|
693
|
+
"maximum": 65536,
|
|
694
|
+
"default": 256
|
|
695
|
+
},
|
|
696
|
+
"encoding": {
|
|
697
|
+
"type": [
|
|
698
|
+
"string",
|
|
699
|
+
"null"
|
|
700
|
+
],
|
|
701
|
+
"description": "Encoding used for the PCM sample payload.",
|
|
702
|
+
"enum": [
|
|
703
|
+
"base64",
|
|
704
|
+
"hex"
|
|
705
|
+
],
|
|
706
|
+
"default": "base64"
|
|
707
|
+
}
|
|
708
|
+
},
|
|
709
|
+
"required": [
|
|
710
|
+
"op"
|
|
711
|
+
],
|
|
712
|
+
"additionalProperties": false
|
|
713
|
+
},
|
|
714
|
+
{
|
|
715
|
+
"type": "object",
|
|
716
|
+
"description": "Set the SID master volume register at $D418 (0-15).",
|
|
717
|
+
"properties": {
|
|
718
|
+
"volume": {
|
|
719
|
+
"type": "number",
|
|
720
|
+
"description": "Desired SID master volume. Values outside 0-15 are clamped.",
|
|
721
|
+
"minimum": 0,
|
|
722
|
+
"maximum": 15
|
|
723
|
+
},
|
|
724
|
+
"op": {
|
|
725
|
+
"const": "set_volume"
|
|
726
|
+
}
|
|
727
|
+
},
|
|
728
|
+
"required": [
|
|
729
|
+
"volume",
|
|
730
|
+
"op"
|
|
731
|
+
],
|
|
732
|
+
"additionalProperties": false
|
|
733
|
+
},
|
|
734
|
+
{
|
|
735
|
+
"type": "object",
|
|
736
|
+
"description": "Soft or hard reset of SID registers to clear glitches.",
|
|
737
|
+
"properties": {
|
|
738
|
+
"hard": {
|
|
739
|
+
"type": "boolean",
|
|
740
|
+
"description": "If true, perform a hard register scrub; otherwise silence voices softly.",
|
|
741
|
+
"default": false
|
|
742
|
+
},
|
|
743
|
+
"op": {
|
|
744
|
+
"const": "reset"
|
|
745
|
+
}
|
|
746
|
+
},
|
|
747
|
+
"additionalProperties": false,
|
|
748
|
+
"required": [
|
|
749
|
+
"op"
|
|
750
|
+
]
|
|
751
|
+
},
|
|
752
|
+
{
|
|
753
|
+
"type": "object",
|
|
754
|
+
"description": "Trigger a SID voice with configurable waveform, ADSR, and pitch.",
|
|
755
|
+
"properties": {
|
|
756
|
+
"voice": {
|
|
757
|
+
"type": "integer",
|
|
758
|
+
"description": "SID voice to trigger (1-3).",
|
|
759
|
+
"minimum": 1,
|
|
760
|
+
"maximum": 3,
|
|
761
|
+
"default": 1
|
|
762
|
+
},
|
|
763
|
+
"note": {
|
|
764
|
+
"type": [
|
|
765
|
+
"string",
|
|
766
|
+
"null"
|
|
767
|
+
],
|
|
768
|
+
"description": "Musical note like A4, C#5, or Bb3. Overrides frequencyHz if provided.",
|
|
769
|
+
"pattern": "^([A-Ga-g])([#b]?)(-?\\d+)$"
|
|
770
|
+
},
|
|
771
|
+
"frequencyHz": {
|
|
772
|
+
"type": [
|
|
773
|
+
"number",
|
|
774
|
+
"null"
|
|
775
|
+
],
|
|
776
|
+
"description": "Explicit frequency in Hz. Used when note is omitted.",
|
|
777
|
+
"minimum": 1
|
|
778
|
+
},
|
|
779
|
+
"system": {
|
|
780
|
+
"type": "string",
|
|
781
|
+
"description": "Video system for frequency calculation.",
|
|
782
|
+
"enum": [
|
|
783
|
+
"PAL",
|
|
784
|
+
"NTSC"
|
|
785
|
+
],
|
|
786
|
+
"default": "PAL"
|
|
787
|
+
},
|
|
788
|
+
"waveform": {
|
|
789
|
+
"type": "string",
|
|
790
|
+
"description": "SID waveform to enable.",
|
|
791
|
+
"enum": [
|
|
792
|
+
"pulse",
|
|
793
|
+
"saw",
|
|
794
|
+
"tri",
|
|
795
|
+
"noise"
|
|
796
|
+
],
|
|
797
|
+
"default": "pulse"
|
|
798
|
+
},
|
|
799
|
+
"pulseWidth": {
|
|
800
|
+
"type": "integer",
|
|
801
|
+
"description": "Pulse width (0-4095). Used for pulse waveform.",
|
|
802
|
+
"minimum": 0,
|
|
803
|
+
"maximum": 4095,
|
|
804
|
+
"default": 2048
|
|
805
|
+
},
|
|
806
|
+
"attack": {
|
|
807
|
+
"type": "integer",
|
|
808
|
+
"description": "Attack rate nibble (0-15).",
|
|
809
|
+
"minimum": 0,
|
|
810
|
+
"maximum": 15,
|
|
811
|
+
"default": 1
|
|
812
|
+
},
|
|
813
|
+
"decay": {
|
|
814
|
+
"type": "integer",
|
|
815
|
+
"description": "Decay rate nibble (0-15).",
|
|
816
|
+
"minimum": 0,
|
|
817
|
+
"maximum": 15,
|
|
818
|
+
"default": 1
|
|
819
|
+
},
|
|
820
|
+
"sustain": {
|
|
821
|
+
"type": "integer",
|
|
822
|
+
"description": "Sustain level nibble (0-15).",
|
|
823
|
+
"minimum": 0,
|
|
824
|
+
"maximum": 15,
|
|
825
|
+
"default": 15
|
|
826
|
+
},
|
|
827
|
+
"release": {
|
|
828
|
+
"type": "integer",
|
|
829
|
+
"description": "Release rate nibble (0-15).",
|
|
830
|
+
"minimum": 0,
|
|
831
|
+
"maximum": 15,
|
|
832
|
+
"default": 3
|
|
833
|
+
},
|
|
834
|
+
"op": {
|
|
835
|
+
"const": "note_on"
|
|
836
|
+
}
|
|
837
|
+
},
|
|
838
|
+
"additionalProperties": false,
|
|
839
|
+
"required": [
|
|
840
|
+
"op"
|
|
841
|
+
]
|
|
842
|
+
},
|
|
843
|
+
{
|
|
844
|
+
"type": "object",
|
|
845
|
+
"description": "Release a SID voice by clearing its gate bit.",
|
|
846
|
+
"properties": {
|
|
847
|
+
"voice": {
|
|
848
|
+
"type": "integer",
|
|
849
|
+
"description": "SID voice to release (1-3).",
|
|
850
|
+
"minimum": 1,
|
|
851
|
+
"maximum": 3
|
|
852
|
+
},
|
|
853
|
+
"op": {
|
|
854
|
+
"const": "note_off"
|
|
855
|
+
}
|
|
856
|
+
},
|
|
857
|
+
"required": [
|
|
858
|
+
"voice",
|
|
859
|
+
"op"
|
|
860
|
+
],
|
|
861
|
+
"additionalProperties": false
|
|
862
|
+
},
|
|
863
|
+
{
|
|
864
|
+
"type": "object",
|
|
865
|
+
"description": "Silence all SID voices with optional audio verification.",
|
|
866
|
+
"properties": {
|
|
867
|
+
"verify": {
|
|
868
|
+
"type": [
|
|
869
|
+
"boolean",
|
|
870
|
+
"null"
|
|
871
|
+
],
|
|
872
|
+
"description": "When true, record audio after silencing to confirm the SID output is quiet.",
|
|
873
|
+
"default": false
|
|
874
|
+
},
|
|
875
|
+
"op": {
|
|
876
|
+
"const": "silence_all"
|
|
877
|
+
}
|
|
878
|
+
},
|
|
879
|
+
"additionalProperties": false,
|
|
880
|
+
"required": [
|
|
881
|
+
"op"
|
|
882
|
+
]
|
|
883
|
+
},
|
|
884
|
+
{
|
|
885
|
+
"type": "object",
|
|
886
|
+
"description": "Play a SID file stored on the Ultimate filesystem.",
|
|
887
|
+
"properties": {
|
|
888
|
+
"path": {
|
|
889
|
+
"type": "string",
|
|
890
|
+
"description": "Absolute or Ultimate filesystem path to the SID, PRG, or audio file.",
|
|
891
|
+
"minLength": 1
|
|
892
|
+
},
|
|
893
|
+
"songnr": {
|
|
894
|
+
"type": [
|
|
895
|
+
"integer",
|
|
896
|
+
"null"
|
|
897
|
+
],
|
|
898
|
+
"description": "Song number within the SID file (0-based index).",
|
|
899
|
+
"minimum": 0
|
|
900
|
+
},
|
|
901
|
+
"op": {
|
|
902
|
+
"const": "play_sid_file"
|
|
903
|
+
}
|
|
904
|
+
},
|
|
905
|
+
"required": [
|
|
906
|
+
"path",
|
|
907
|
+
"op"
|
|
908
|
+
],
|
|
909
|
+
"additionalProperties": false
|
|
910
|
+
},
|
|
911
|
+
{
|
|
912
|
+
"type": "object",
|
|
913
|
+
"description": "Play a MOD tracker module via the Ultimate SID player.",
|
|
914
|
+
"properties": {
|
|
915
|
+
"path": {
|
|
916
|
+
"type": "string",
|
|
917
|
+
"description": "Absolute or Ultimate filesystem path to the SID, PRG, or audio file.",
|
|
918
|
+
"minLength": 1
|
|
919
|
+
},
|
|
920
|
+
"op": {
|
|
921
|
+
"const": "play_mod_file"
|
|
922
|
+
}
|
|
923
|
+
},
|
|
924
|
+
"required": [
|
|
925
|
+
"path",
|
|
926
|
+
"op"
|
|
927
|
+
],
|
|
928
|
+
"additionalProperties": false
|
|
929
|
+
},
|
|
930
|
+
{
|
|
931
|
+
"type": "object",
|
|
932
|
+
"description": "Generate a lightweight SID arpeggio playback sequence.",
|
|
933
|
+
"properties": {
|
|
934
|
+
"root": {
|
|
935
|
+
"type": "string",
|
|
936
|
+
"description": "Root note for the arpeggio such as C4 or A#3.",
|
|
937
|
+
"pattern": "^([A-Ga-g])([#b]?)(-?\\d+)$",
|
|
938
|
+
"default": "C4"
|
|
939
|
+
},
|
|
940
|
+
"pattern": {
|
|
941
|
+
"type": "string",
|
|
942
|
+
"description": "Comma-separated semitone offsets (e.g. '0,4,7').",
|
|
943
|
+
"minLength": 1,
|
|
944
|
+
"default": "0,4,7"
|
|
945
|
+
},
|
|
946
|
+
"steps": {
|
|
947
|
+
"type": "integer",
|
|
948
|
+
"description": "Number of notes to schedule.",
|
|
949
|
+
"minimum": 1,
|
|
950
|
+
"maximum": 128,
|
|
951
|
+
"default": 16
|
|
952
|
+
},
|
|
953
|
+
"tempoMs": {
|
|
954
|
+
"type": "integer",
|
|
955
|
+
"description": "Delay in milliseconds between notes.",
|
|
956
|
+
"minimum": 20,
|
|
957
|
+
"maximum": 2000,
|
|
958
|
+
"default": 120
|
|
959
|
+
},
|
|
960
|
+
"waveform": {
|
|
961
|
+
"type": "string",
|
|
962
|
+
"description": "Waveform for playback.",
|
|
963
|
+
"enum": [
|
|
964
|
+
"pulse",
|
|
965
|
+
"saw",
|
|
966
|
+
"tri",
|
|
967
|
+
"noise"
|
|
968
|
+
],
|
|
969
|
+
"default": "tri"
|
|
970
|
+
},
|
|
971
|
+
"preset": {
|
|
972
|
+
"type": [
|
|
973
|
+
"string",
|
|
974
|
+
"null"
|
|
975
|
+
],
|
|
976
|
+
"description": "Optional musical preset to influence timing/expression.",
|
|
977
|
+
"enum": [
|
|
978
|
+
"classic",
|
|
979
|
+
"expression"
|
|
980
|
+
],
|
|
981
|
+
"default": "classic"
|
|
982
|
+
},
|
|
983
|
+
"op": {
|
|
984
|
+
"const": "generate"
|
|
985
|
+
}
|
|
986
|
+
},
|
|
987
|
+
"additionalProperties": false,
|
|
988
|
+
"required": [
|
|
989
|
+
"op"
|
|
990
|
+
]
|
|
991
|
+
},
|
|
992
|
+
{
|
|
993
|
+
"type": "object",
|
|
994
|
+
"description": "Compile SIDWAVE or CPG source and optionally play it immediately.",
|
|
995
|
+
"properties": {
|
|
996
|
+
"sidwave": {
|
|
997
|
+
"description": "SIDWAVE composition represented as YAML/JSON text or an already parsed object.",
|
|
998
|
+
"type": [
|
|
999
|
+
"string",
|
|
1000
|
+
"object",
|
|
1001
|
+
"null"
|
|
1002
|
+
]
|
|
1003
|
+
},
|
|
1004
|
+
"cpg": {
|
|
1005
|
+
"description": "SIDWAVE composition represented as YAML/JSON text or an already parsed object.",
|
|
1006
|
+
"type": [
|
|
1007
|
+
"string",
|
|
1008
|
+
"object",
|
|
1009
|
+
"null"
|
|
1010
|
+
]
|
|
1011
|
+
},
|
|
1012
|
+
"format": {
|
|
1013
|
+
"type": [
|
|
1014
|
+
"string",
|
|
1015
|
+
"null"
|
|
1016
|
+
],
|
|
1017
|
+
"description": "Source format hint when providing raw text.",
|
|
1018
|
+
"enum": [
|
|
1019
|
+
"yaml",
|
|
1020
|
+
"json"
|
|
1021
|
+
]
|
|
1022
|
+
},
|
|
1023
|
+
"output": {
|
|
1024
|
+
"type": [
|
|
1025
|
+
"string",
|
|
1026
|
+
"null"
|
|
1027
|
+
],
|
|
1028
|
+
"description": "Playback target format.",
|
|
1029
|
+
"enum": [
|
|
1030
|
+
"prg",
|
|
1031
|
+
"sid"
|
|
1032
|
+
],
|
|
1033
|
+
"default": "prg"
|
|
1034
|
+
},
|
|
1035
|
+
"dryRun": {
|
|
1036
|
+
"type": [
|
|
1037
|
+
"boolean",
|
|
1038
|
+
"null"
|
|
1039
|
+
],
|
|
1040
|
+
"description": "When true, skip playback and only return compilation metadata.",
|
|
1041
|
+
"default": false
|
|
1042
|
+
},
|
|
1043
|
+
"op": {
|
|
1044
|
+
"const": "compile_play"
|
|
1045
|
+
}
|
|
1046
|
+
},
|
|
1047
|
+
"additionalProperties": false,
|
|
1048
|
+
"required": [
|
|
1049
|
+
"op"
|
|
1050
|
+
]
|
|
1051
|
+
},
|
|
1052
|
+
{
|
|
1053
|
+
"type": "object",
|
|
1054
|
+
"description": "Compile and play a built-in SID preset such as Für Elise by Beethoven.",
|
|
1055
|
+
"properties": {
|
|
1056
|
+
"preset": {
|
|
1057
|
+
"type": [
|
|
1058
|
+
"string",
|
|
1059
|
+
"null"
|
|
1060
|
+
],
|
|
1061
|
+
"description": "Named SID preset to compile and play. Canonical public preset: fuer_elise.",
|
|
1062
|
+
"minLength": 1,
|
|
1063
|
+
"default": "fuer_elise"
|
|
1064
|
+
},
|
|
1065
|
+
"platforms": {
|
|
1066
|
+
"type": [
|
|
1067
|
+
"array",
|
|
1068
|
+
"null"
|
|
1069
|
+
],
|
|
1070
|
+
"items": {
|
|
1071
|
+
"type": "string",
|
|
1072
|
+
"description": "Backends to target in sequence.",
|
|
1073
|
+
"minLength": 1,
|
|
1074
|
+
"enum": [
|
|
1075
|
+
"vice",
|
|
1076
|
+
"c64u"
|
|
1077
|
+
]
|
|
1078
|
+
}
|
|
1079
|
+
},
|
|
1080
|
+
"verify": {
|
|
1081
|
+
"type": [
|
|
1082
|
+
"boolean",
|
|
1083
|
+
"null"
|
|
1084
|
+
],
|
|
1085
|
+
"description": "Capture and analyze audio on supported backends after playback starts.",
|
|
1086
|
+
"default": true
|
|
1087
|
+
},
|
|
1088
|
+
"analysisDurationSeconds": {
|
|
1089
|
+
"type": [
|
|
1090
|
+
"number",
|
|
1091
|
+
"null"
|
|
1092
|
+
],
|
|
1093
|
+
"description": "Length of the verification recording on analyzable backends.",
|
|
1094
|
+
"minimum": 0.5,
|
|
1095
|
+
"maximum": 20,
|
|
1096
|
+
"default": 4
|
|
1097
|
+
},
|
|
1098
|
+
"waitBeforeCaptureMs": {
|
|
1099
|
+
"type": [
|
|
1100
|
+
"number",
|
|
1101
|
+
"null"
|
|
1102
|
+
],
|
|
1103
|
+
"description": "Delay between starting playback and beginning verification capture.",
|
|
1104
|
+
"minimum": 0,
|
|
1105
|
+
"maximum": 5000,
|
|
1106
|
+
"default": 400
|
|
1107
|
+
},
|
|
1108
|
+
"restoreActiveBackend": {
|
|
1109
|
+
"type": [
|
|
1110
|
+
"boolean",
|
|
1111
|
+
"null"
|
|
1112
|
+
],
|
|
1113
|
+
"description": "Restore the backend that was active before the workflow started.",
|
|
1114
|
+
"default": true
|
|
1115
|
+
},
|
|
1116
|
+
"op": {
|
|
1117
|
+
"const": "play_preset"
|
|
1118
|
+
}
|
|
1119
|
+
},
|
|
1120
|
+
"additionalProperties": false,
|
|
1121
|
+
"required": [
|
|
1122
|
+
"op"
|
|
1123
|
+
]
|
|
1124
|
+
},
|
|
1125
|
+
{
|
|
1126
|
+
"type": "object",
|
|
1127
|
+
"description": "Compile a SIDWAVE score, play it, and analyze the recording.",
|
|
1128
|
+
"properties": {
|
|
1129
|
+
"sidwave": {
|
|
1130
|
+
"type": [
|
|
1131
|
+
"string",
|
|
1132
|
+
"null"
|
|
1133
|
+
],
|
|
1134
|
+
"description": "SIDWAVE source in YAML or JSON format.",
|
|
1135
|
+
"minLength": 1
|
|
1136
|
+
},
|
|
1137
|
+
"cpg": {
|
|
1138
|
+
"type": [
|
|
1139
|
+
"string",
|
|
1140
|
+
"null"
|
|
1141
|
+
],
|
|
1142
|
+
"description": "Legacy CPG input format.",
|
|
1143
|
+
"minLength": 1
|
|
1144
|
+
},
|
|
1145
|
+
"output": {
|
|
1146
|
+
"type": [
|
|
1147
|
+
"string",
|
|
1148
|
+
"null"
|
|
1149
|
+
],
|
|
1150
|
+
"description": "Playback artifact format.",
|
|
1151
|
+
"enum": [
|
|
1152
|
+
"prg",
|
|
1153
|
+
"sid"
|
|
1154
|
+
],
|
|
1155
|
+
"default": "prg"
|
|
1156
|
+
},
|
|
1157
|
+
"waitBeforeCaptureMs": {
|
|
1158
|
+
"type": [
|
|
1159
|
+
"number",
|
|
1160
|
+
"null"
|
|
1161
|
+
],
|
|
1162
|
+
"description": "Delay between starting playback and beginning analysis capture (milliseconds).",
|
|
1163
|
+
"minimum": 0,
|
|
1164
|
+
"maximum": 5000,
|
|
1165
|
+
"default": 500
|
|
1166
|
+
},
|
|
1167
|
+
"analysisDurationSeconds": {
|
|
1168
|
+
"type": [
|
|
1169
|
+
"number",
|
|
1170
|
+
"null"
|
|
1171
|
+
],
|
|
1172
|
+
"description": "Audio capture length in seconds.",
|
|
1173
|
+
"minimum": 0.5,
|
|
1174
|
+
"maximum": 20,
|
|
1175
|
+
"default": 3
|
|
1176
|
+
},
|
|
1177
|
+
"expectedSidwave": {
|
|
1178
|
+
"type": [
|
|
1179
|
+
"string",
|
|
1180
|
+
"null"
|
|
1181
|
+
],
|
|
1182
|
+
"description": "Optional expected SIDWAVE used to refine analysis comparisons.",
|
|
1183
|
+
"minLength": 1
|
|
1184
|
+
},
|
|
1185
|
+
"verifySilenceBefore": {
|
|
1186
|
+
"type": [
|
|
1187
|
+
"boolean",
|
|
1188
|
+
"null"
|
|
1189
|
+
],
|
|
1190
|
+
"description": "Run silence verification before playback to ensure a quiet baseline.",
|
|
1191
|
+
"default": true
|
|
1192
|
+
},
|
|
1193
|
+
"verifySilenceAfter": {
|
|
1194
|
+
"type": [
|
|
1195
|
+
"boolean",
|
|
1196
|
+
"null"
|
|
1197
|
+
],
|
|
1198
|
+
"description": "Run silence verification after playback to ensure voices are released.",
|
|
1199
|
+
"default": true
|
|
1200
|
+
},
|
|
1201
|
+
"silenceDurationSeconds": {
|
|
1202
|
+
"type": [
|
|
1203
|
+
"number",
|
|
1204
|
+
"null"
|
|
1205
|
+
],
|
|
1206
|
+
"description": "Audio capture length used for silence verification.",
|
|
1207
|
+
"minimum": 0.5,
|
|
1208
|
+
"maximum": 10,
|
|
1209
|
+
"default": 1.5
|
|
1210
|
+
},
|
|
1211
|
+
"silenceRmsThreshold": {
|
|
1212
|
+
"type": [
|
|
1213
|
+
"number",
|
|
1214
|
+
"null"
|
|
1215
|
+
],
|
|
1216
|
+
"description": "RMS threshold applied to silence verification captures.",
|
|
1217
|
+
"minimum": 0,
|
|
1218
|
+
"maximum": 1,
|
|
1219
|
+
"default": 0.02
|
|
1220
|
+
},
|
|
1221
|
+
"postSilenceWaitMs": {
|
|
1222
|
+
"type": [
|
|
1223
|
+
"number",
|
|
1224
|
+
"null"
|
|
1225
|
+
],
|
|
1226
|
+
"description": "Delay between main analysis capture and the post-playback silence check (milliseconds).",
|
|
1227
|
+
"minimum": 0,
|
|
1228
|
+
"maximum": 5000,
|
|
1229
|
+
"default": 200
|
|
1230
|
+
},
|
|
1231
|
+
"silenceWaitMs": {
|
|
1232
|
+
"type": [
|
|
1233
|
+
"number",
|
|
1234
|
+
"null"
|
|
1235
|
+
],
|
|
1236
|
+
"description": "Delay between silencing the SID and recording during pre/post checks (milliseconds).",
|
|
1237
|
+
"minimum": 0,
|
|
1238
|
+
"maximum": 5000,
|
|
1239
|
+
"default": 150
|
|
1240
|
+
},
|
|
1241
|
+
"op": {
|
|
1242
|
+
"const": "pipeline"
|
|
1243
|
+
}
|
|
1244
|
+
},
|
|
1245
|
+
"additionalProperties": false,
|
|
1246
|
+
"required": [
|
|
1247
|
+
"op"
|
|
1248
|
+
]
|
|
1249
|
+
},
|
|
1250
|
+
{
|
|
1251
|
+
"type": "object",
|
|
1252
|
+
"description": "Automatically analyze SID playback when verification is requested.",
|
|
1253
|
+
"properties": {
|
|
1254
|
+
"request": {
|
|
1255
|
+
"type": "string",
|
|
1256
|
+
"description": "Natural language user request describing the verification goal.",
|
|
1257
|
+
"minLength": 1
|
|
1258
|
+
},
|
|
1259
|
+
"durationSeconds": {
|
|
1260
|
+
"type": [
|
|
1261
|
+
"number",
|
|
1262
|
+
"null"
|
|
1263
|
+
],
|
|
1264
|
+
"description": "Override capture duration in seconds.",
|
|
1265
|
+
"minimum": 0.5,
|
|
1266
|
+
"maximum": 30
|
|
1267
|
+
},
|
|
1268
|
+
"expectedSidwave": {
|
|
1269
|
+
"description": "SIDWAVE composition represented as YAML/JSON text or an already parsed object.",
|
|
1270
|
+
"type": [
|
|
1271
|
+
"string",
|
|
1272
|
+
"object",
|
|
1273
|
+
"null"
|
|
1274
|
+
]
|
|
1275
|
+
},
|
|
1276
|
+
"op": {
|
|
1277
|
+
"const": "analyze"
|
|
1278
|
+
}
|
|
1279
|
+
},
|
|
1280
|
+
"required": [
|
|
1281
|
+
"request",
|
|
1282
|
+
"op"
|
|
1283
|
+
],
|
|
1284
|
+
"additionalProperties": false
|
|
1285
|
+
},
|
|
1286
|
+
{
|
|
1287
|
+
"type": "object",
|
|
1288
|
+
"description": "Record audio for a fixed duration and return SID analysis metrics.",
|
|
1289
|
+
"properties": {
|
|
1290
|
+
"durationSeconds": {
|
|
1291
|
+
"type": "number",
|
|
1292
|
+
"description": "Capture duration in seconds (0.5 - 30).",
|
|
1293
|
+
"minimum": 0.5,
|
|
1294
|
+
"maximum": 30
|
|
1295
|
+
},
|
|
1296
|
+
"expectedSidwave": {
|
|
1297
|
+
"description": "SIDWAVE composition represented as YAML/JSON text or an already parsed object.",
|
|
1298
|
+
"type": [
|
|
1299
|
+
"string",
|
|
1300
|
+
"object",
|
|
1301
|
+
"null"
|
|
1302
|
+
]
|
|
1303
|
+
},
|
|
1304
|
+
"op": {
|
|
1305
|
+
"const": "record_analyze"
|
|
1306
|
+
}
|
|
1307
|
+
},
|
|
1308
|
+
"required": [
|
|
1309
|
+
"durationSeconds",
|
|
1310
|
+
"op"
|
|
1311
|
+
],
|
|
1312
|
+
"additionalProperties": false
|
|
1313
|
+
}
|
|
1314
|
+
],
|
|
1315
|
+
"discriminator": {
|
|
1316
|
+
"propertyName": "op"
|
|
1317
|
+
}
|
|
1318
|
+
},
|
|
1319
|
+
"_meta": {
|
|
1320
|
+
"domain": "audio",
|
|
1321
|
+
"summary": "Adjusts SID registers, plays files, composes music, and runs verification captures.",
|
|
1322
|
+
"lifecycle": "request-response",
|
|
1323
|
+
"resources": [
|
|
1324
|
+
"c64://specs/sid",
|
|
1325
|
+
"c64://specs/sidwave",
|
|
1326
|
+
"c64://docs/sid/file-structure"
|
|
1327
|
+
],
|
|
1328
|
+
"prompts": [
|
|
1329
|
+
"sid-music"
|
|
1330
|
+
],
|
|
1331
|
+
"examples": [
|
|
1332
|
+
{
|
|
1333
|
+
"name": "Capture samples",
|
|
1334
|
+
"description": "Grab 256 stereo sample pairs from the Ultimate audio stream",
|
|
1335
|
+
"arguments": {
|
|
1336
|
+
"op": "capture_samples"
|
|
1337
|
+
}
|
|
1338
|
+
},
|
|
1339
|
+
{
|
|
1340
|
+
"name": "Trigger SID voice",
|
|
1341
|
+
"description": "Start voice 1 on C4 with a triangle waveform",
|
|
1342
|
+
"arguments": {
|
|
1343
|
+
"op": "note_on",
|
|
1344
|
+
"voice": 1,
|
|
1345
|
+
"note": "C4",
|
|
1346
|
+
"waveform": "tri"
|
|
1347
|
+
}
|
|
1348
|
+
},
|
|
1349
|
+
{
|
|
1350
|
+
"name": "Play Für Elise",
|
|
1351
|
+
"description": "Compile and play the built-in Für Elise preset on the active backend",
|
|
1352
|
+
"arguments": {
|
|
1353
|
+
"op": "play_preset",
|
|
1354
|
+
"preset": "fuer_elise"
|
|
1355
|
+
}
|
|
1356
|
+
},
|
|
1357
|
+
{
|
|
1358
|
+
"name": "Verify silence",
|
|
1359
|
+
"description": "Stop all voices and confirm the SID output is quiet",
|
|
1360
|
+
"arguments": {
|
|
1361
|
+
"op": "silence_all",
|
|
1362
|
+
"verify": true
|
|
1363
|
+
}
|
|
1364
|
+
}
|
|
1365
|
+
],
|
|
1366
|
+
"tags": [
|
|
1367
|
+
"sid",
|
|
1368
|
+
"audio",
|
|
1369
|
+
"grouped"
|
|
1370
|
+
],
|
|
1371
|
+
"workflowHints": [
|
|
1372
|
+
"Trigger note_on or generate when the user wants immediate SID playback.",
|
|
1373
|
+
"Follow up playback changes with analyze or silence verification to provide confident audio feedback."
|
|
1374
|
+
],
|
|
1375
|
+
"platforms": [
|
|
1376
|
+
"c64u",
|
|
1377
|
+
"vice"
|
|
1378
|
+
],
|
|
1379
|
+
"operationPlatforms": {
|
|
1380
|
+
"capture_samples": [
|
|
1381
|
+
"c64u"
|
|
1382
|
+
],
|
|
1383
|
+
"play_sid_file": [
|
|
1384
|
+
"c64u"
|
|
1385
|
+
],
|
|
1386
|
+
"play_mod_file": [
|
|
1387
|
+
"c64u"
|
|
1388
|
+
],
|
|
1389
|
+
"pipeline": [
|
|
1390
|
+
"c64u"
|
|
1391
|
+
],
|
|
1392
|
+
"analyze": [
|
|
1393
|
+
"c64u"
|
|
1394
|
+
],
|
|
1395
|
+
"record_analyze": [
|
|
1396
|
+
"c64u"
|
|
1397
|
+
]
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1400
|
+
},
|
|
1401
|
+
{
|
|
1402
|
+
"name": "c64_system",
|
|
1403
|
+
"title": "Manages machine state (pause, reset, power) and schedules recurring background tasks.",
|
|
1404
|
+
"description": "Grouped entry point for power, reset, menu, and background task control.",
|
|
1405
|
+
"inputSchema": {
|
|
1406
|
+
"type": "object",
|
|
1407
|
+
"description": "System operations available via the c64_system tool.",
|
|
1408
|
+
"oneOf": [
|
|
1409
|
+
{
|
|
1410
|
+
"type": "object",
|
|
1411
|
+
"description": "Pause the machine until resumed.",
|
|
1412
|
+
"properties": {
|
|
1413
|
+
"op": {
|
|
1414
|
+
"const": "pause"
|
|
1415
|
+
}
|
|
1416
|
+
},
|
|
1417
|
+
"additionalProperties": false,
|
|
1418
|
+
"required": [
|
|
1419
|
+
"op"
|
|
1420
|
+
]
|
|
1421
|
+
},
|
|
1422
|
+
{
|
|
1423
|
+
"type": "object",
|
|
1424
|
+
"description": "Resume CPU execution after a pause.",
|
|
1425
|
+
"properties": {
|
|
1426
|
+
"op": {
|
|
1427
|
+
"const": "resume"
|
|
1428
|
+
}
|
|
1429
|
+
},
|
|
1430
|
+
"additionalProperties": false,
|
|
1431
|
+
"required": [
|
|
1432
|
+
"op"
|
|
1433
|
+
]
|
|
1434
|
+
},
|
|
1435
|
+
{
|
|
1436
|
+
"type": "object",
|
|
1437
|
+
"description": "Issue a soft reset without cutting power.",
|
|
1438
|
+
"properties": {
|
|
1439
|
+
"op": {
|
|
1440
|
+
"const": "reset"
|
|
1441
|
+
}
|
|
1442
|
+
},
|
|
1443
|
+
"additionalProperties": false,
|
|
1444
|
+
"required": [
|
|
1445
|
+
"op"
|
|
1446
|
+
]
|
|
1447
|
+
},
|
|
1448
|
+
{
|
|
1449
|
+
"type": "object",
|
|
1450
|
+
"description": "Trigger a firmware reboot to recover from faults.",
|
|
1451
|
+
"properties": {
|
|
1452
|
+
"op": {
|
|
1453
|
+
"const": "reboot"
|
|
1454
|
+
}
|
|
1455
|
+
},
|
|
1456
|
+
"additionalProperties": false,
|
|
1457
|
+
"required": [
|
|
1458
|
+
"op"
|
|
1459
|
+
]
|
|
1460
|
+
},
|
|
1461
|
+
{
|
|
1462
|
+
"type": "object",
|
|
1463
|
+
"description": "Request a controlled shutdown via the Ultimate firmware.",
|
|
1464
|
+
"properties": {
|
|
1465
|
+
"op": {
|
|
1466
|
+
"const": "poweroff"
|
|
1467
|
+
}
|
|
1468
|
+
},
|
|
1469
|
+
"additionalProperties": false,
|
|
1470
|
+
"required": [
|
|
1471
|
+
"op"
|
|
1472
|
+
]
|
|
1473
|
+
},
|
|
1474
|
+
{
|
|
1475
|
+
"type": "object",
|
|
1476
|
+
"description": "Toggle the Ultimate menu button for navigation.",
|
|
1477
|
+
"properties": {
|
|
1478
|
+
"op": {
|
|
1479
|
+
"const": "menu"
|
|
1480
|
+
}
|
|
1481
|
+
},
|
|
1482
|
+
"additionalProperties": false,
|
|
1483
|
+
"required": [
|
|
1484
|
+
"op"
|
|
1485
|
+
]
|
|
1486
|
+
},
|
|
1487
|
+
{
|
|
1488
|
+
"type": "object",
|
|
1489
|
+
"description": "Start a named background task that runs on an interval.",
|
|
1490
|
+
"properties": {
|
|
1491
|
+
"name": {
|
|
1492
|
+
"type": "string",
|
|
1493
|
+
"description": "Unique task name",
|
|
1494
|
+
"minLength": 1
|
|
1495
|
+
},
|
|
1496
|
+
"operation": {
|
|
1497
|
+
"type": "string",
|
|
1498
|
+
"description": "Operation name (e.g., read, read_screen)",
|
|
1499
|
+
"minLength": 1
|
|
1500
|
+
},
|
|
1501
|
+
"arguments": {
|
|
1502
|
+
"type": [
|
|
1503
|
+
"object",
|
|
1504
|
+
"null"
|
|
1505
|
+
],
|
|
1506
|
+
"description": "Operation-specific arguments",
|
|
1507
|
+
"properties": {},
|
|
1508
|
+
"additionalProperties": true,
|
|
1509
|
+
"default": {}
|
|
1510
|
+
},
|
|
1511
|
+
"intervalMs": {
|
|
1512
|
+
"type": [
|
|
1513
|
+
"integer",
|
|
1514
|
+
"null"
|
|
1515
|
+
],
|
|
1516
|
+
"description": "Interval milliseconds",
|
|
1517
|
+
"minimum": 1,
|
|
1518
|
+
"default": 1000
|
|
1519
|
+
},
|
|
1520
|
+
"maxIterations": {
|
|
1521
|
+
"type": [
|
|
1522
|
+
"integer",
|
|
1523
|
+
"null"
|
|
1524
|
+
],
|
|
1525
|
+
"description": "Maximum number of iterations (omit for indefinite)",
|
|
1526
|
+
"minimum": 1
|
|
1527
|
+
},
|
|
1528
|
+
"op": {
|
|
1529
|
+
"const": "start_task"
|
|
1530
|
+
}
|
|
1531
|
+
},
|
|
1532
|
+
"required": [
|
|
1533
|
+
"name",
|
|
1534
|
+
"operation",
|
|
1535
|
+
"op"
|
|
1536
|
+
],
|
|
1537
|
+
"additionalProperties": false
|
|
1538
|
+
},
|
|
1539
|
+
{
|
|
1540
|
+
"type": "object",
|
|
1541
|
+
"description": "Stop a specific background task and clear its timer.",
|
|
1542
|
+
"properties": {
|
|
1543
|
+
"name": {
|
|
1544
|
+
"type": "string",
|
|
1545
|
+
"description": "Task name",
|
|
1546
|
+
"minLength": 1
|
|
1547
|
+
},
|
|
1548
|
+
"op": {
|
|
1549
|
+
"const": "stop_task"
|
|
1550
|
+
}
|
|
1551
|
+
},
|
|
1552
|
+
"required": [
|
|
1553
|
+
"name",
|
|
1554
|
+
"op"
|
|
1555
|
+
],
|
|
1556
|
+
"additionalProperties": false
|
|
1557
|
+
},
|
|
1558
|
+
{
|
|
1559
|
+
"type": "object",
|
|
1560
|
+
"description": "Stop every running background task and persist state.",
|
|
1561
|
+
"properties": {
|
|
1562
|
+
"op": {
|
|
1563
|
+
"const": "stop_all_tasks"
|
|
1564
|
+
}
|
|
1565
|
+
},
|
|
1566
|
+
"additionalProperties": false,
|
|
1567
|
+
"required": [
|
|
1568
|
+
"op"
|
|
1569
|
+
]
|
|
1570
|
+
},
|
|
1571
|
+
{
|
|
1572
|
+
"type": "object",
|
|
1573
|
+
"description": "List known background tasks with status metadata.",
|
|
1574
|
+
"properties": {
|
|
1575
|
+
"op": {
|
|
1576
|
+
"const": "list_tasks"
|
|
1577
|
+
}
|
|
1578
|
+
},
|
|
1579
|
+
"additionalProperties": false,
|
|
1580
|
+
"required": [
|
|
1581
|
+
"op"
|
|
1582
|
+
]
|
|
1583
|
+
},
|
|
1584
|
+
{
|
|
1585
|
+
"type": "object",
|
|
1586
|
+
"description": "Summarize diagnostics spans and tool latencies from the current or latest MCP session.",
|
|
1587
|
+
"properties": {
|
|
1588
|
+
"scope": {
|
|
1589
|
+
"type": [
|
|
1590
|
+
"string",
|
|
1591
|
+
"null"
|
|
1592
|
+
],
|
|
1593
|
+
"description": "Which diagnostics session to summarize.",
|
|
1594
|
+
"enum": [
|
|
1595
|
+
"current",
|
|
1596
|
+
"latest"
|
|
1597
|
+
],
|
|
1598
|
+
"default": "current"
|
|
1599
|
+
},
|
|
1600
|
+
"includeTimeline": {
|
|
1601
|
+
"type": [
|
|
1602
|
+
"boolean",
|
|
1603
|
+
"null"
|
|
1604
|
+
],
|
|
1605
|
+
"description": "Include the tail of the event timeline.",
|
|
1606
|
+
"default": true
|
|
1607
|
+
},
|
|
1608
|
+
"maxEntries": {
|
|
1609
|
+
"type": [
|
|
1610
|
+
"integer",
|
|
1611
|
+
"null"
|
|
1612
|
+
],
|
|
1613
|
+
"description": "Maximum number of span and timeline entries to return.",
|
|
1614
|
+
"minimum": 1,
|
|
1615
|
+
"maximum": 200,
|
|
1616
|
+
"default": 25
|
|
1617
|
+
},
|
|
1618
|
+
"op": {
|
|
1619
|
+
"const": "performance_report"
|
|
1620
|
+
}
|
|
1621
|
+
},
|
|
1622
|
+
"additionalProperties": false,
|
|
1623
|
+
"required": [
|
|
1624
|
+
"op"
|
|
1625
|
+
]
|
|
1626
|
+
}
|
|
1627
|
+
],
|
|
1628
|
+
"discriminator": {
|
|
1629
|
+
"propertyName": "op"
|
|
1630
|
+
}
|
|
1631
|
+
},
|
|
1632
|
+
"_meta": {
|
|
1633
|
+
"domain": "system",
|
|
1634
|
+
"summary": "Manages machine state (pause, reset, power) and schedules recurring background tasks.",
|
|
1635
|
+
"lifecycle": "request-response",
|
|
1636
|
+
"resources": [
|
|
1637
|
+
"c64://context/bootstrap"
|
|
1638
|
+
],
|
|
1639
|
+
"prompts": [
|
|
1640
|
+
"memory-debug"
|
|
1641
|
+
],
|
|
1642
|
+
"examples": [
|
|
1643
|
+
{
|
|
1644
|
+
"name": "Soft reset",
|
|
1645
|
+
"description": "Issue a soft reset without cutting power",
|
|
1646
|
+
"arguments": {
|
|
1647
|
+
"op": "reset"
|
|
1648
|
+
}
|
|
1649
|
+
},
|
|
1650
|
+
{
|
|
1651
|
+
"name": "Start background screen capture",
|
|
1652
|
+
"description": "Launch a recurring read_screen task",
|
|
1653
|
+
"arguments": {
|
|
1654
|
+
"op": "start_task",
|
|
1655
|
+
"name": "screen_poll",
|
|
1656
|
+
"operation": "read_screen",
|
|
1657
|
+
"intervalMs": 2000
|
|
1658
|
+
}
|
|
1659
|
+
},
|
|
1660
|
+
{
|
|
1661
|
+
"name": "Inspect performance trace",
|
|
1662
|
+
"description": "Summarize the current session diagnostics for profiling",
|
|
1663
|
+
"arguments": {
|
|
1664
|
+
"op": "performance_report",
|
|
1665
|
+
"scope": "current"
|
|
1666
|
+
}
|
|
1667
|
+
}
|
|
1668
|
+
],
|
|
1669
|
+
"tags": [
|
|
1670
|
+
"system",
|
|
1671
|
+
"control",
|
|
1672
|
+
"grouped"
|
|
1673
|
+
],
|
|
1674
|
+
"workflowHints": [
|
|
1675
|
+
"Use pause/resume around invasive memory changes, and explain the impact of resets or power changes.",
|
|
1676
|
+
"Combine background task operations with list_tasks to monitor long-running diagnostics."
|
|
1677
|
+
],
|
|
1678
|
+
"platforms": [
|
|
1679
|
+
"c64u",
|
|
1680
|
+
"vice"
|
|
1681
|
+
],
|
|
1682
|
+
"operationPlatforms": {
|
|
1683
|
+
"pause": [
|
|
1684
|
+
"c64u"
|
|
1685
|
+
],
|
|
1686
|
+
"resume": [
|
|
1687
|
+
"c64u"
|
|
1688
|
+
],
|
|
1689
|
+
"menu": [
|
|
1690
|
+
"c64u"
|
|
1691
|
+
]
|
|
1692
|
+
}
|
|
1693
|
+
}
|
|
1694
|
+
},
|
|
1695
|
+
{
|
|
1696
|
+
"name": "c64_select_backend",
|
|
1697
|
+
"title": "Changes the active backend without restarting the MCP server and reports resulting tool availability.",
|
|
1698
|
+
"description": "Switch the active backend between C64U hardware and the VICE emulator at runtime.",
|
|
1699
|
+
"inputSchema": {
|
|
1700
|
+
"type": "object",
|
|
1701
|
+
"description": "Runtime backend selection operations.",
|
|
1702
|
+
"oneOf": [
|
|
1703
|
+
{
|
|
1704
|
+
"type": "object",
|
|
1705
|
+
"description": "Switch the active runtime backend without restarting the MCP server.",
|
|
1706
|
+
"properties": {
|
|
1707
|
+
"op": {
|
|
1708
|
+
"const": "select",
|
|
1709
|
+
"description": "Selects the select operation."
|
|
1710
|
+
},
|
|
1711
|
+
"backend": {
|
|
1712
|
+
"type": "string",
|
|
1713
|
+
"enum": [
|
|
1714
|
+
"c64u",
|
|
1715
|
+
"vice"
|
|
1716
|
+
],
|
|
1717
|
+
"description": "Backend to activate for subsequent tool calls."
|
|
1718
|
+
}
|
|
1719
|
+
},
|
|
1720
|
+
"required": [
|
|
1721
|
+
"op",
|
|
1722
|
+
"backend"
|
|
1723
|
+
],
|
|
1724
|
+
"additionalProperties": false
|
|
1725
|
+
}
|
|
1726
|
+
],
|
|
1727
|
+
"discriminator": {
|
|
1728
|
+
"propertyName": "op"
|
|
1729
|
+
}
|
|
1730
|
+
},
|
|
1731
|
+
"_meta": {
|
|
1732
|
+
"domain": "platform",
|
|
1733
|
+
"summary": "Changes the active backend without restarting the MCP server and reports resulting tool availability.",
|
|
1734
|
+
"lifecycle": "request-response",
|
|
1735
|
+
"resources": [
|
|
1736
|
+
"c64://platform/status",
|
|
1737
|
+
"c64://context/bootstrap"
|
|
1738
|
+
],
|
|
1739
|
+
"prompts": [],
|
|
1740
|
+
"examples": [
|
|
1741
|
+
{
|
|
1742
|
+
"name": "Switch to VICE",
|
|
1743
|
+
"description": "Move subsequent tool calls to the emulator backend",
|
|
1744
|
+
"arguments": {
|
|
1745
|
+
"op": "select",
|
|
1746
|
+
"backend": "vice"
|
|
1747
|
+
}
|
|
1748
|
+
}
|
|
1749
|
+
],
|
|
1750
|
+
"tags": [
|
|
1751
|
+
"platform",
|
|
1752
|
+
"backend",
|
|
1753
|
+
"grouped",
|
|
1754
|
+
"switch"
|
|
1755
|
+
],
|
|
1756
|
+
"workflowHints": [
|
|
1757
|
+
"Switch backends before invoking backend-specific tools so platform gating stays accurate."
|
|
1758
|
+
],
|
|
1759
|
+
"platforms": [
|
|
1760
|
+
"c64u",
|
|
1761
|
+
"vice"
|
|
1762
|
+
]
|
|
1763
|
+
}
|
|
1764
|
+
},
|
|
1765
|
+
{
|
|
1766
|
+
"name": "c64_graphics",
|
|
1767
|
+
"title": "Captures frames, renders PETSCII text or art, previews sprites, and displays bitmap images from one tool.",
|
|
1768
|
+
"description": "Grouped entry point for frame capture and graphics rendering workflows.",
|
|
1769
|
+
"inputSchema": {
|
|
1770
|
+
"type": "object",
|
|
1771
|
+
"description": "Graphics operations available via the c64_graphics tool.",
|
|
1772
|
+
"oneOf": [
|
|
1773
|
+
{
|
|
1774
|
+
"type": "object",
|
|
1775
|
+
"description": "Capture one or more complete video frames from the active backend.",
|
|
1776
|
+
"properties": {
|
|
1777
|
+
"op": {
|
|
1778
|
+
"const": "capture_frame"
|
|
1779
|
+
},
|
|
1780
|
+
"count": {
|
|
1781
|
+
"type": [
|
|
1782
|
+
"integer",
|
|
1783
|
+
"null"
|
|
1784
|
+
],
|
|
1785
|
+
"description": "Number of frames to capture.",
|
|
1786
|
+
"minimum": 1,
|
|
1787
|
+
"maximum": 32,
|
|
1788
|
+
"default": 1
|
|
1789
|
+
},
|
|
1790
|
+
"includePixels": {
|
|
1791
|
+
"type": [
|
|
1792
|
+
"boolean",
|
|
1793
|
+
"null"
|
|
1794
|
+
],
|
|
1795
|
+
"description": "Include pixel payload bytes in the response.",
|
|
1796
|
+
"default": true
|
|
1797
|
+
},
|
|
1798
|
+
"encoding": {
|
|
1799
|
+
"type": [
|
|
1800
|
+
"string",
|
|
1801
|
+
"null"
|
|
1802
|
+
],
|
|
1803
|
+
"description": "Encoding used for the pixel payload when included.",
|
|
1804
|
+
"enum": [
|
|
1805
|
+
"base64",
|
|
1806
|
+
"hex"
|
|
1807
|
+
],
|
|
1808
|
+
"default": "base64"
|
|
1809
|
+
}
|
|
1810
|
+
},
|
|
1811
|
+
"required": [
|
|
1812
|
+
"op"
|
|
1813
|
+
],
|
|
1814
|
+
"additionalProperties": false
|
|
1815
|
+
},
|
|
1816
|
+
{
|
|
1817
|
+
"type": "object",
|
|
1818
|
+
"description": "Create PETSCII art from prompts, text, or explicit bitmap data, and optionally display it on the C64.",
|
|
1819
|
+
"properties": {
|
|
1820
|
+
"prompt": {
|
|
1821
|
+
"type": [
|
|
1822
|
+
"string",
|
|
1823
|
+
"null"
|
|
1824
|
+
],
|
|
1825
|
+
"description": "Natural language prompt describing the desired PETSCII art.",
|
|
1826
|
+
"minLength": 1
|
|
1827
|
+
},
|
|
1828
|
+
"text": {
|
|
1829
|
+
"type": [
|
|
1830
|
+
"string",
|
|
1831
|
+
"null"
|
|
1832
|
+
],
|
|
1833
|
+
"description": "Exact text to render in PETSCII (overrides prompt derivation).",
|
|
1834
|
+
"minLength": 1
|
|
1835
|
+
},
|
|
1836
|
+
"maxWidth": {
|
|
1837
|
+
"type": [
|
|
1838
|
+
"integer",
|
|
1839
|
+
"null"
|
|
1840
|
+
],
|
|
1841
|
+
"description": "Maximum bitmap width in pixels (1-320).",
|
|
1842
|
+
"minimum": 1,
|
|
1843
|
+
"maximum": 320
|
|
1844
|
+
},
|
|
1845
|
+
"maxHeight": {
|
|
1846
|
+
"type": [
|
|
1847
|
+
"integer",
|
|
1848
|
+
"null"
|
|
1849
|
+
],
|
|
1850
|
+
"description": "Maximum bitmap height in pixels (1-200).",
|
|
1851
|
+
"minimum": 1,
|
|
1852
|
+
"maximum": 200
|
|
1853
|
+
},
|
|
1854
|
+
"borderColor": {
|
|
1855
|
+
"type": [
|
|
1856
|
+
"integer",
|
|
1857
|
+
"null"
|
|
1858
|
+
],
|
|
1859
|
+
"description": "Border colour index (0-15).",
|
|
1860
|
+
"minimum": 0,
|
|
1861
|
+
"maximum": 15
|
|
1862
|
+
},
|
|
1863
|
+
"backgroundColor": {
|
|
1864
|
+
"type": [
|
|
1865
|
+
"integer",
|
|
1866
|
+
"null"
|
|
1867
|
+
],
|
|
1868
|
+
"description": "Background colour index (0-15).",
|
|
1869
|
+
"minimum": 0,
|
|
1870
|
+
"maximum": 15
|
|
1871
|
+
},
|
|
1872
|
+
"foregroundColor": {
|
|
1873
|
+
"type": [
|
|
1874
|
+
"integer",
|
|
1875
|
+
"null"
|
|
1876
|
+
],
|
|
1877
|
+
"description": "Foreground colour index (0-15).",
|
|
1878
|
+
"minimum": 0,
|
|
1879
|
+
"maximum": 15
|
|
1880
|
+
},
|
|
1881
|
+
"dryRun": {
|
|
1882
|
+
"type": "boolean",
|
|
1883
|
+
"description": "When true, skip uploading the generated BASIC program to the C64.",
|
|
1884
|
+
"default": false
|
|
1885
|
+
},
|
|
1886
|
+
"bitmap": {
|
|
1887
|
+
"description": "Explicit bitmap definition for PETSCII rendering.",
|
|
1888
|
+
"type": [
|
|
1889
|
+
"object",
|
|
1890
|
+
"null"
|
|
1891
|
+
],
|
|
1892
|
+
"properties": {
|
|
1893
|
+
"width": {
|
|
1894
|
+
"type": "integer",
|
|
1895
|
+
"minimum": 1,
|
|
1896
|
+
"maximum": 320
|
|
1897
|
+
},
|
|
1898
|
+
"height": {
|
|
1899
|
+
"type": "integer",
|
|
1900
|
+
"minimum": 1,
|
|
1901
|
+
"maximum": 200
|
|
1902
|
+
},
|
|
1903
|
+
"pixels": {
|
|
1904
|
+
"type": "array",
|
|
1905
|
+
"items": {
|
|
1906
|
+
"type": "integer",
|
|
1907
|
+
"minimum": 0,
|
|
1908
|
+
"maximum": 1
|
|
1909
|
+
}
|
|
1910
|
+
}
|
|
1911
|
+
},
|
|
1912
|
+
"required": [
|
|
1913
|
+
"width",
|
|
1914
|
+
"height",
|
|
1915
|
+
"pixels"
|
|
1916
|
+
],
|
|
1917
|
+
"additionalProperties": false
|
|
1918
|
+
},
|
|
1919
|
+
"op": {
|
|
1920
|
+
"const": "render_petscii_art"
|
|
1921
|
+
}
|
|
1922
|
+
},
|
|
1923
|
+
"additionalProperties": false,
|
|
1924
|
+
"required": [
|
|
1925
|
+
"op"
|
|
1926
|
+
]
|
|
1927
|
+
},
|
|
1928
|
+
{
|
|
1929
|
+
"type": "object",
|
|
1930
|
+
"description": "Display PETSCII text with optional border and background colours.",
|
|
1931
|
+
"properties": {
|
|
1932
|
+
"text": {
|
|
1933
|
+
"type": "string",
|
|
1934
|
+
"description": "The PETSCII text to print after clearing the screen.",
|
|
1935
|
+
"minLength": 1
|
|
1936
|
+
},
|
|
1937
|
+
"borderColor": {
|
|
1938
|
+
"type": [
|
|
1939
|
+
"integer",
|
|
1940
|
+
"null"
|
|
1941
|
+
],
|
|
1942
|
+
"description": "Border colour index (0-15).",
|
|
1943
|
+
"minimum": 0,
|
|
1944
|
+
"maximum": 15
|
|
1945
|
+
},
|
|
1946
|
+
"backgroundColor": {
|
|
1947
|
+
"type": [
|
|
1948
|
+
"integer",
|
|
1949
|
+
"null"
|
|
1950
|
+
],
|
|
1951
|
+
"description": "Background colour index (0-15).",
|
|
1952
|
+
"minimum": 0,
|
|
1953
|
+
"maximum": 15
|
|
1954
|
+
},
|
|
1955
|
+
"op": {
|
|
1956
|
+
"const": "render_petscii_text"
|
|
1957
|
+
}
|
|
1958
|
+
},
|
|
1959
|
+
"required": [
|
|
1960
|
+
"text",
|
|
1961
|
+
"op"
|
|
1962
|
+
],
|
|
1963
|
+
"additionalProperties": false
|
|
1964
|
+
},
|
|
1965
|
+
{
|
|
1966
|
+
"type": "object",
|
|
1967
|
+
"description": "Display supplied 63-byte sprite data at the requested position and colour by writing memory and patching VIC-II registers directly.",
|
|
1968
|
+
"properties": {
|
|
1969
|
+
"sprite": {
|
|
1970
|
+
"description": "63-byte sprite definition provided as base64/hex string or array of bytes.",
|
|
1971
|
+
"type": [
|
|
1972
|
+
"string",
|
|
1973
|
+
"array"
|
|
1974
|
+
],
|
|
1975
|
+
"items": {
|
|
1976
|
+
"type": "integer",
|
|
1977
|
+
"minimum": 0,
|
|
1978
|
+
"maximum": 255
|
|
1979
|
+
},
|
|
1980
|
+
"minItems": 63,
|
|
1981
|
+
"maxItems": 63
|
|
1982
|
+
},
|
|
1983
|
+
"index": {
|
|
1984
|
+
"type": "integer",
|
|
1985
|
+
"description": "Sprite index (0-7) to configure in screen memory.",
|
|
1986
|
+
"minimum": 0,
|
|
1987
|
+
"maximum": 7,
|
|
1988
|
+
"default": 0
|
|
1989
|
+
},
|
|
1990
|
+
"x": {
|
|
1991
|
+
"type": "integer",
|
|
1992
|
+
"description": "Sprite X position (0-511).",
|
|
1993
|
+
"minimum": 0,
|
|
1994
|
+
"maximum": 511,
|
|
1995
|
+
"default": 100
|
|
1996
|
+
},
|
|
1997
|
+
"y": {
|
|
1998
|
+
"type": "integer",
|
|
1999
|
+
"description": "Sprite Y position (0-255).",
|
|
2000
|
+
"minimum": 0,
|
|
2001
|
+
"maximum": 255,
|
|
2002
|
+
"default": 100
|
|
2003
|
+
},
|
|
2004
|
+
"color": {
|
|
2005
|
+
"type": "integer",
|
|
2006
|
+
"description": "Sprite colour index (0-15).",
|
|
2007
|
+
"minimum": 0,
|
|
2008
|
+
"maximum": 15,
|
|
2009
|
+
"default": 1
|
|
2010
|
+
},
|
|
2011
|
+
"multicolour": {
|
|
2012
|
+
"type": "boolean",
|
|
2013
|
+
"description": "Enable multicolour mode for the sprite.",
|
|
2014
|
+
"default": false
|
|
2015
|
+
},
|
|
2016
|
+
"op": {
|
|
2017
|
+
"const": "render_sprite"
|
|
2018
|
+
}
|
|
2019
|
+
},
|
|
2020
|
+
"required": [
|
|
2021
|
+
"sprite",
|
|
2022
|
+
"op"
|
|
2023
|
+
],
|
|
2024
|
+
"additionalProperties": false
|
|
2025
|
+
},
|
|
2026
|
+
{
|
|
2027
|
+
"type": "object",
|
|
2028
|
+
"description": "Import an image file, convert it to VIC-II bitmap memory, write it into RAM, and display it.",
|
|
2029
|
+
"properties": {
|
|
2030
|
+
"imagePath": {
|
|
2031
|
+
"type": "string",
|
|
2032
|
+
"description": "Filesystem path of the source image (PNG, JPEG, BMP, GIF, TIFF, and other Jimp-supported formats).",
|
|
2033
|
+
"minLength": 1
|
|
2034
|
+
},
|
|
2035
|
+
"format": {
|
|
2036
|
+
"description": "Bitmap encoding mode to generate for the VIC-II display.",
|
|
2037
|
+
"type": "string",
|
|
2038
|
+
"enum": [
|
|
2039
|
+
"hires",
|
|
2040
|
+
"multicolor"
|
|
2041
|
+
]
|
|
2042
|
+
},
|
|
2043
|
+
"bitmapAddress": {
|
|
2044
|
+
"description": "Absolute C64 memory address, provided as an integer or hex string such as $2000.",
|
|
2045
|
+
"type": [
|
|
2046
|
+
"integer",
|
|
2047
|
+
"string",
|
|
2048
|
+
"null"
|
|
2049
|
+
],
|
|
2050
|
+
"default": 8192
|
|
2051
|
+
},
|
|
2052
|
+
"screenAddress": {
|
|
2053
|
+
"description": "Absolute C64 memory address, provided as an integer or hex string such as $2000.",
|
|
2054
|
+
"type": [
|
|
2055
|
+
"integer",
|
|
2056
|
+
"string",
|
|
2057
|
+
"null"
|
|
2058
|
+
],
|
|
2059
|
+
"default": 1024
|
|
2060
|
+
},
|
|
2061
|
+
"borderColor": {
|
|
2062
|
+
"type": [
|
|
2063
|
+
"integer",
|
|
2064
|
+
"null"
|
|
2065
|
+
],
|
|
2066
|
+
"description": "Border colour index (0-15).",
|
|
2067
|
+
"minimum": 0,
|
|
2068
|
+
"maximum": 15,
|
|
2069
|
+
"default": 0
|
|
2070
|
+
},
|
|
2071
|
+
"backgroundColor": {
|
|
2072
|
+
"type": [
|
|
2073
|
+
"integer",
|
|
2074
|
+
"null"
|
|
2075
|
+
],
|
|
2076
|
+
"description": "Background colour index (0-15). Used for multicolor mode and aspect-ratio padding.",
|
|
2077
|
+
"minimum": 0,
|
|
2078
|
+
"maximum": 15,
|
|
2079
|
+
"default": 0
|
|
2080
|
+
},
|
|
2081
|
+
"preserveAspect": {
|
|
2082
|
+
"type": "boolean",
|
|
2083
|
+
"description": "Preserve the source image aspect ratio and pad with the background colour.",
|
|
2084
|
+
"default": true
|
|
2085
|
+
},
|
|
2086
|
+
"op": {
|
|
2087
|
+
"const": "render_bitmap"
|
|
2088
|
+
}
|
|
2089
|
+
},
|
|
2090
|
+
"required": [
|
|
2091
|
+
"imagePath",
|
|
2092
|
+
"format",
|
|
2093
|
+
"op"
|
|
2094
|
+
],
|
|
2095
|
+
"additionalProperties": false
|
|
2096
|
+
}
|
|
2097
|
+
],
|
|
2098
|
+
"discriminator": {
|
|
2099
|
+
"propertyName": "op"
|
|
2100
|
+
}
|
|
2101
|
+
},
|
|
2102
|
+
"_meta": {
|
|
2103
|
+
"domain": "graphics",
|
|
2104
|
+
"summary": "Captures frames, renders PETSCII text or art, previews sprites, and displays bitmap images from one tool.",
|
|
2105
|
+
"lifecycle": "request-response",
|
|
2106
|
+
"resources": [
|
|
2107
|
+
"c64://specs/vic",
|
|
2108
|
+
"c64://specs/basic",
|
|
2109
|
+
"c64://specs/assembly"
|
|
2110
|
+
],
|
|
2111
|
+
"prompts": [
|
|
2112
|
+
"graphics-demo",
|
|
2113
|
+
"basic-program",
|
|
2114
|
+
"assembly-program"
|
|
2115
|
+
],
|
|
2116
|
+
"examples": [
|
|
2117
|
+
{
|
|
2118
|
+
"name": "Capture one frame",
|
|
2119
|
+
"description": "Grab the current framebuffer from the active backend",
|
|
2120
|
+
"arguments": {
|
|
2121
|
+
"op": "capture_frame"
|
|
2122
|
+
}
|
|
2123
|
+
},
|
|
2124
|
+
{
|
|
2125
|
+
"name": "Create PETSCII art (dry run)",
|
|
2126
|
+
"description": "Synthesize art without uploading to the C64",
|
|
2127
|
+
"arguments": {
|
|
2128
|
+
"op": "render_petscii_art",
|
|
2129
|
+
"prompt": "duck on a pond",
|
|
2130
|
+
"dryRun": true
|
|
2131
|
+
}
|
|
2132
|
+
},
|
|
2133
|
+
{
|
|
2134
|
+
"name": "Render PETSCII text",
|
|
2135
|
+
"description": "Print HELLO with blue border",
|
|
2136
|
+
"arguments": {
|
|
2137
|
+
"op": "render_petscii_text",
|
|
2138
|
+
"text": "HELLO",
|
|
2139
|
+
"borderColor": 6
|
|
2140
|
+
}
|
|
2141
|
+
},
|
|
2142
|
+
{
|
|
2143
|
+
"name": "Display sprite",
|
|
2144
|
+
"description": "Show sprite data at coordinates",
|
|
2145
|
+
"arguments": {
|
|
2146
|
+
"op": "render_sprite",
|
|
2147
|
+
"sprite": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
|
|
2148
|
+
}
|
|
2149
|
+
},
|
|
2150
|
+
{
|
|
2151
|
+
"name": "Import bitmap image",
|
|
2152
|
+
"description": "Convert a PNG into VIC bitmap memory and display it",
|
|
2153
|
+
"arguments": {
|
|
2154
|
+
"op": "render_bitmap",
|
|
2155
|
+
"imagePath": "./artifacts/sample.png",
|
|
2156
|
+
"format": "hires"
|
|
2157
|
+
}
|
|
2158
|
+
}
|
|
2159
|
+
],
|
|
2160
|
+
"tags": [
|
|
2161
|
+
"graphics",
|
|
2162
|
+
"vic",
|
|
2163
|
+
"grouped"
|
|
2164
|
+
],
|
|
2165
|
+
"workflowHints": [
|
|
2166
|
+
"Use render helpers for PETSCII text, PETSCII art, sprites, and bitmaps; clarify whether PETSCII art executed or stayed a dry run.",
|
|
2167
|
+
"Mention sprite positions/colours so follow-up memory inspection stays grounded."
|
|
2168
|
+
],
|
|
2169
|
+
"platforms": [
|
|
2170
|
+
"c64u",
|
|
2171
|
+
"vice"
|
|
2172
|
+
]
|
|
2173
|
+
}
|
|
2174
|
+
},
|
|
2175
|
+
{
|
|
2176
|
+
"name": "c64_rag",
|
|
2177
|
+
"title": "Returns curated knowledge references for BASIC or 6502/6510 assembly queries.",
|
|
2178
|
+
"description": "Grouped entry point for BASIC and assembly RAG lookups.",
|
|
2179
|
+
"inputSchema": {
|
|
2180
|
+
"type": "object",
|
|
2181
|
+
"description": "RAG operations available via the c64_rag tool.",
|
|
2182
|
+
"oneOf": [
|
|
2183
|
+
{
|
|
2184
|
+
"type": "object",
|
|
2185
|
+
"description": "Retrieve BASIC references and snippets from the local knowledge base.",
|
|
2186
|
+
"properties": {
|
|
2187
|
+
"q": {
|
|
2188
|
+
"type": "string",
|
|
2189
|
+
"description": "Natural-language query describing the desired BASIC or assembly guidance.",
|
|
2190
|
+
"minLength": 3
|
|
2191
|
+
},
|
|
2192
|
+
"k": {
|
|
2193
|
+
"type": [
|
|
2194
|
+
"integer",
|
|
2195
|
+
"null"
|
|
2196
|
+
],
|
|
2197
|
+
"description": "Maximum number of references to return (1-12).",
|
|
2198
|
+
"minimum": 1,
|
|
2199
|
+
"maximum": 12,
|
|
2200
|
+
"default": 3
|
|
2201
|
+
},
|
|
2202
|
+
"op": {
|
|
2203
|
+
"const": "basic"
|
|
2204
|
+
}
|
|
2205
|
+
},
|
|
2206
|
+
"required": [
|
|
2207
|
+
"q",
|
|
2208
|
+
"op"
|
|
2209
|
+
],
|
|
2210
|
+
"additionalProperties": false
|
|
2211
|
+
},
|
|
2212
|
+
{
|
|
2213
|
+
"type": "object",
|
|
2214
|
+
"description": "Retrieve 6502/6510 assembly references from the local knowledge base.",
|
|
2215
|
+
"properties": {
|
|
2216
|
+
"q": {
|
|
2217
|
+
"type": "string",
|
|
2218
|
+
"description": "Natural-language query describing the desired BASIC or assembly guidance.",
|
|
2219
|
+
"minLength": 3
|
|
2220
|
+
},
|
|
2221
|
+
"k": {
|
|
2222
|
+
"type": [
|
|
2223
|
+
"integer",
|
|
2224
|
+
"null"
|
|
2225
|
+
],
|
|
2226
|
+
"description": "Maximum number of references to return (1-12).",
|
|
2227
|
+
"minimum": 1,
|
|
2228
|
+
"maximum": 12,
|
|
2229
|
+
"default": 3
|
|
2230
|
+
},
|
|
2231
|
+
"op": {
|
|
2232
|
+
"const": "asm"
|
|
2233
|
+
}
|
|
2234
|
+
},
|
|
2235
|
+
"required": [
|
|
2236
|
+
"q",
|
|
2237
|
+
"op"
|
|
2238
|
+
],
|
|
2239
|
+
"additionalProperties": false
|
|
2240
|
+
}
|
|
2241
|
+
],
|
|
2242
|
+
"discriminator": {
|
|
2243
|
+
"propertyName": "op"
|
|
2244
|
+
}
|
|
2245
|
+
},
|
|
2246
|
+
"_meta": {
|
|
2247
|
+
"domain": "rag",
|
|
2248
|
+
"summary": "Returns curated knowledge references for BASIC or 6502/6510 assembly queries.",
|
|
2249
|
+
"lifecycle": "request-response",
|
|
2250
|
+
"resources": [
|
|
2251
|
+
"c64://specs/basic",
|
|
2252
|
+
"c64://specs/assembly",
|
|
2253
|
+
"c64://context/bootstrap"
|
|
2254
|
+
],
|
|
2255
|
+
"prompts": [
|
|
2256
|
+
"basic-program",
|
|
2257
|
+
"assembly-program"
|
|
2258
|
+
],
|
|
2259
|
+
"examples": [
|
|
2260
|
+
{
|
|
2261
|
+
"name": "Retrieve BASIC snippet",
|
|
2262
|
+
"description": "Search for device 4 printing guidance",
|
|
2263
|
+
"arguments": {
|
|
2264
|
+
"op": "basic",
|
|
2265
|
+
"q": "basic print device 4"
|
|
2266
|
+
}
|
|
2267
|
+
},
|
|
2268
|
+
{
|
|
2269
|
+
"name": "Retrieve assembly snippet",
|
|
2270
|
+
"description": "Search for raster IRQ examples",
|
|
2271
|
+
"arguments": {
|
|
2272
|
+
"op": "asm",
|
|
2273
|
+
"q": "stable raster irq"
|
|
2274
|
+
}
|
|
2275
|
+
}
|
|
2276
|
+
],
|
|
2277
|
+
"tags": [
|
|
2278
|
+
"rag",
|
|
2279
|
+
"search",
|
|
2280
|
+
"reference",
|
|
2281
|
+
"grouped"
|
|
2282
|
+
],
|
|
2283
|
+
"workflowHints": [
|
|
2284
|
+
"Use BASIC retrieval before synthesising new BASIC code and mention primary resources in responses.",
|
|
2285
|
+
"For assembly, note registers or addresses surfaced so the user can inspect them further."
|
|
2286
|
+
],
|
|
2287
|
+
"platforms": [
|
|
2288
|
+
"c64u",
|
|
2289
|
+
"vice"
|
|
2290
|
+
]
|
|
2291
|
+
}
|
|
2292
|
+
},
|
|
2293
|
+
{
|
|
2294
|
+
"name": "c64_disk",
|
|
2295
|
+
"title": "Mount or unmount images, create new disks, list drives, and find programs from one tool.",
|
|
2296
|
+
"description": "Grouped entry point for disk mounts, listings, image creation, and program discovery.",
|
|
2297
|
+
"inputSchema": {
|
|
2298
|
+
"type": "object",
|
|
2299
|
+
"description": "Disk operations available via the c64_disk tool.",
|
|
2300
|
+
"oneOf": [
|
|
2301
|
+
{
|
|
2302
|
+
"type": "object",
|
|
2303
|
+
"description": "List Ultimate drive slots and their mounted images.",
|
|
2304
|
+
"properties": {
|
|
2305
|
+
"op": {
|
|
2306
|
+
"const": "list_drives"
|
|
2307
|
+
}
|
|
2308
|
+
},
|
|
2309
|
+
"additionalProperties": false,
|
|
2310
|
+
"required": [
|
|
2311
|
+
"op"
|
|
2312
|
+
]
|
|
2313
|
+
},
|
|
2314
|
+
{
|
|
2315
|
+
"type": "object",
|
|
2316
|
+
"description": "Mount a disk image with optional verification and retries.",
|
|
2317
|
+
"properties": {
|
|
2318
|
+
"drive": {
|
|
2319
|
+
"type": "string",
|
|
2320
|
+
"description": "Drive identifier (for example drive8).",
|
|
2321
|
+
"minLength": 1
|
|
2322
|
+
},
|
|
2323
|
+
"image": {
|
|
2324
|
+
"type": "string",
|
|
2325
|
+
"description": "Absolute or Ultimate filesystem path to the disk image.",
|
|
2326
|
+
"minLength": 1
|
|
2327
|
+
},
|
|
2328
|
+
"type": {
|
|
2329
|
+
"type": [
|
|
2330
|
+
"string",
|
|
2331
|
+
"null"
|
|
2332
|
+
],
|
|
2333
|
+
"description": "Override detected image type when firmware guesses incorrectly.",
|
|
2334
|
+
"enum": [
|
|
2335
|
+
"d64",
|
|
2336
|
+
"g64",
|
|
2337
|
+
"d71",
|
|
2338
|
+
"g71",
|
|
2339
|
+
"d81"
|
|
2340
|
+
]
|
|
2341
|
+
},
|
|
2342
|
+
"attachmentMode": {
|
|
2343
|
+
"type": [
|
|
2344
|
+
"string",
|
|
2345
|
+
"null"
|
|
2346
|
+
],
|
|
2347
|
+
"description": "Attachment mode controlling how the firmware treats the mounted image.",
|
|
2348
|
+
"enum": [
|
|
2349
|
+
"readwrite",
|
|
2350
|
+
"readonly",
|
|
2351
|
+
"unlinked"
|
|
2352
|
+
]
|
|
2353
|
+
},
|
|
2354
|
+
"driveMode": {
|
|
2355
|
+
"type": [
|
|
2356
|
+
"string",
|
|
2357
|
+
"null"
|
|
2358
|
+
],
|
|
2359
|
+
"description": "Drive emulation mode to switch to during verification.",
|
|
2360
|
+
"enum": [
|
|
2361
|
+
"1541",
|
|
2362
|
+
"1571",
|
|
2363
|
+
"1581"
|
|
2364
|
+
]
|
|
2365
|
+
},
|
|
2366
|
+
"verify": {
|
|
2367
|
+
"type": "boolean",
|
|
2368
|
+
"description": "When true, power on/reset/verify using the reliability workflow.",
|
|
2369
|
+
"default": false
|
|
2370
|
+
},
|
|
2371
|
+
"powerOnIfNeeded": {
|
|
2372
|
+
"type": "boolean",
|
|
2373
|
+
"description": "Power on the drive automatically before mounting when verify=true.",
|
|
2374
|
+
"default": true
|
|
2375
|
+
},
|
|
2376
|
+
"resetAfterMount": {
|
|
2377
|
+
"type": "boolean",
|
|
2378
|
+
"description": "Issue a drive reset after mounting when verify=true.",
|
|
2379
|
+
"default": true
|
|
2380
|
+
},
|
|
2381
|
+
"maxRetries": {
|
|
2382
|
+
"type": "integer",
|
|
2383
|
+
"description": "Maximum number of mount retries when verify=true.",
|
|
2384
|
+
"minimum": 0,
|
|
2385
|
+
"maximum": 5,
|
|
2386
|
+
"default": 2
|
|
2387
|
+
},
|
|
2388
|
+
"retryDelayMs": {
|
|
2389
|
+
"type": "integer",
|
|
2390
|
+
"description": "Delay between mount retry attempts when verify=true.",
|
|
2391
|
+
"minimum": 0,
|
|
2392
|
+
"maximum": 5000,
|
|
2393
|
+
"default": 500
|
|
2394
|
+
},
|
|
2395
|
+
"op": {
|
|
2396
|
+
"const": "mount"
|
|
2397
|
+
}
|
|
2398
|
+
},
|
|
2399
|
+
"required": [
|
|
2400
|
+
"drive",
|
|
2401
|
+
"image",
|
|
2402
|
+
"op"
|
|
2403
|
+
],
|
|
2404
|
+
"additionalProperties": false
|
|
2405
|
+
},
|
|
2406
|
+
{
|
|
2407
|
+
"type": "object",
|
|
2408
|
+
"description": "Remove the mounted image from an Ultimate drive slot.",
|
|
2409
|
+
"properties": {
|
|
2410
|
+
"drive": {
|
|
2411
|
+
"type": "string",
|
|
2412
|
+
"description": "Drive identifier such as drive8, drive9, or unit name defined in the Ultimate UI.",
|
|
2413
|
+
"minLength": 1
|
|
2414
|
+
},
|
|
2415
|
+
"op": {
|
|
2416
|
+
"const": "unmount"
|
|
2417
|
+
}
|
|
2418
|
+
},
|
|
2419
|
+
"required": [
|
|
2420
|
+
"drive",
|
|
2421
|
+
"op"
|
|
2422
|
+
],
|
|
2423
|
+
"additionalProperties": false
|
|
2424
|
+
},
|
|
2425
|
+
{
|
|
2426
|
+
"type": "object",
|
|
2427
|
+
"description": "Inspect metadata for a file on the Ultimate filesystem.",
|
|
2428
|
+
"properties": {
|
|
2429
|
+
"path": {
|
|
2430
|
+
"type": "string",
|
|
2431
|
+
"description": "Absolute or Ultimate filesystem path to the disk image to mount or manage.",
|
|
2432
|
+
"minLength": 1
|
|
2433
|
+
},
|
|
2434
|
+
"op": {
|
|
2435
|
+
"const": "file_info"
|
|
2436
|
+
}
|
|
2437
|
+
},
|
|
2438
|
+
"required": [
|
|
2439
|
+
"path",
|
|
2440
|
+
"op"
|
|
2441
|
+
],
|
|
2442
|
+
"additionalProperties": false
|
|
2443
|
+
},
|
|
2444
|
+
{
|
|
2445
|
+
"type": "object",
|
|
2446
|
+
"description": "Create a blank disk image of the specified format.",
|
|
2447
|
+
"properties": {
|
|
2448
|
+
"format": {
|
|
2449
|
+
"type": "string",
|
|
2450
|
+
"description": "Disk image format to create.",
|
|
2451
|
+
"enum": [
|
|
2452
|
+
"d64",
|
|
2453
|
+
"d71",
|
|
2454
|
+
"d81",
|
|
2455
|
+
"dnp"
|
|
2456
|
+
]
|
|
2457
|
+
},
|
|
2458
|
+
"path": {
|
|
2459
|
+
"type": "string",
|
|
2460
|
+
"description": "Destination path on the Ultimate filesystem.",
|
|
2461
|
+
"minLength": 1
|
|
2462
|
+
},
|
|
2463
|
+
"diskname": {
|
|
2464
|
+
"type": [
|
|
2465
|
+
"string",
|
|
2466
|
+
"null"
|
|
2467
|
+
],
|
|
2468
|
+
"description": "Optional disk label (1-16 characters, converted to PETSCII).",
|
|
2469
|
+
"minLength": 1,
|
|
2470
|
+
"maxLength": 16
|
|
2471
|
+
},
|
|
2472
|
+
"tracks": {
|
|
2473
|
+
"type": [
|
|
2474
|
+
"integer",
|
|
2475
|
+
"null"
|
|
2476
|
+
],
|
|
2477
|
+
"description": "Track count (D64 supports 35 or 40; DNP requires explicit tracks).",
|
|
2478
|
+
"minimum": 1,
|
|
2479
|
+
"maximum": 255
|
|
2480
|
+
},
|
|
2481
|
+
"op": {
|
|
2482
|
+
"const": "create_image"
|
|
2483
|
+
}
|
|
2484
|
+
},
|
|
2485
|
+
"required": [
|
|
2486
|
+
"format",
|
|
2487
|
+
"path",
|
|
2488
|
+
"op"
|
|
2489
|
+
],
|
|
2490
|
+
"additionalProperties": false
|
|
2491
|
+
},
|
|
2492
|
+
{
|
|
2493
|
+
"type": "object",
|
|
2494
|
+
"description": "Search for a PRG/CRT by name substring and run the first match.",
|
|
2495
|
+
"properties": {
|
|
2496
|
+
"root": {
|
|
2497
|
+
"type": [
|
|
2498
|
+
"string",
|
|
2499
|
+
"null"
|
|
2500
|
+
],
|
|
2501
|
+
"description": "Root path to search",
|
|
2502
|
+
"minLength": 1,
|
|
2503
|
+
"default": "/"
|
|
2504
|
+
},
|
|
2505
|
+
"nameContains": {
|
|
2506
|
+
"type": "string",
|
|
2507
|
+
"description": "Substring to match",
|
|
2508
|
+
"minLength": 1
|
|
2509
|
+
},
|
|
2510
|
+
"extensions": {
|
|
2511
|
+
"type": [
|
|
2512
|
+
"array",
|
|
2513
|
+
"null"
|
|
2514
|
+
],
|
|
2515
|
+
"items": {
|
|
2516
|
+
"type": "string",
|
|
2517
|
+
"description": "File extensions to include (without dot)",
|
|
2518
|
+
"minLength": 1
|
|
2519
|
+
}
|
|
2520
|
+
},
|
|
2521
|
+
"caseInsensitive": {
|
|
2522
|
+
"type": [
|
|
2523
|
+
"boolean",
|
|
2524
|
+
"null"
|
|
2525
|
+
],
|
|
2526
|
+
"description": "Case-insensitive name match",
|
|
2527
|
+
"default": true
|
|
2528
|
+
},
|
|
2529
|
+
"sort": {
|
|
2530
|
+
"type": [
|
|
2531
|
+
"string",
|
|
2532
|
+
"null"
|
|
2533
|
+
],
|
|
2534
|
+
"description": "Sort order for matches",
|
|
2535
|
+
"enum": [
|
|
2536
|
+
"discovered",
|
|
2537
|
+
"alphabetical"
|
|
2538
|
+
],
|
|
2539
|
+
"default": "discovered"
|
|
2540
|
+
},
|
|
2541
|
+
"waitMs": {
|
|
2542
|
+
"type": [
|
|
2543
|
+
"integer",
|
|
2544
|
+
"null"
|
|
2545
|
+
],
|
|
2546
|
+
"description": "Delay after firmware run before returning",
|
|
2547
|
+
"minimum": 0,
|
|
2548
|
+
"default": 0
|
|
2549
|
+
},
|
|
2550
|
+
"captureCandidates": {
|
|
2551
|
+
"type": [
|
|
2552
|
+
"integer",
|
|
2553
|
+
"null"
|
|
2554
|
+
],
|
|
2555
|
+
"description": "Include up to this many candidates in result",
|
|
2556
|
+
"minimum": 1,
|
|
2557
|
+
"maximum": 100,
|
|
2558
|
+
"default": 10
|
|
2559
|
+
},
|
|
2560
|
+
"op": {
|
|
2561
|
+
"const": "find_and_run"
|
|
2562
|
+
}
|
|
2563
|
+
},
|
|
2564
|
+
"required": [
|
|
2565
|
+
"nameContains",
|
|
2566
|
+
"op"
|
|
2567
|
+
],
|
|
2568
|
+
"additionalProperties": false
|
|
2569
|
+
}
|
|
2570
|
+
],
|
|
2571
|
+
"discriminator": {
|
|
2572
|
+
"propertyName": "op"
|
|
2573
|
+
}
|
|
2574
|
+
},
|
|
2575
|
+
"_meta": {
|
|
2576
|
+
"domain": "storage",
|
|
2577
|
+
"summary": "Mount or unmount images, create new disks, list drives, and find programs from one tool.",
|
|
2578
|
+
"lifecycle": "request-response",
|
|
2579
|
+
"resources": [
|
|
2580
|
+
"c64://context/bootstrap"
|
|
2581
|
+
],
|
|
2582
|
+
"prompts": [
|
|
2583
|
+
"drive-management"
|
|
2584
|
+
],
|
|
2585
|
+
"examples": [
|
|
2586
|
+
{
|
|
2587
|
+
"name": "Mount image with verification",
|
|
2588
|
+
"description": "Power on drive8, mount image, and verify",
|
|
2589
|
+
"arguments": {
|
|
2590
|
+
"op": "mount",
|
|
2591
|
+
"drive": "drive8",
|
|
2592
|
+
"image": "/tmp/demo.d64",
|
|
2593
|
+
"verify": true
|
|
2594
|
+
}
|
|
2595
|
+
},
|
|
2596
|
+
{
|
|
2597
|
+
"name": "Create D81",
|
|
2598
|
+
"description": "Create blank D81 image",
|
|
2599
|
+
"arguments": {
|
|
2600
|
+
"op": "create_image",
|
|
2601
|
+
"format": "d81",
|
|
2602
|
+
"path": "/tmp/new.d81"
|
|
2603
|
+
}
|
|
2604
|
+
},
|
|
2605
|
+
{
|
|
2606
|
+
"name": "List drives",
|
|
2607
|
+
"description": "Fetch drive status",
|
|
2608
|
+
"arguments": {
|
|
2609
|
+
"op": "list_drives"
|
|
2610
|
+
}
|
|
2611
|
+
}
|
|
2612
|
+
],
|
|
2613
|
+
"tags": [
|
|
2614
|
+
"storage",
|
|
2615
|
+
"drive",
|
|
2616
|
+
"grouped"
|
|
2617
|
+
],
|
|
2618
|
+
"workflowHints": [
|
|
2619
|
+
"Summarise drive state before and after mounts so the user can confirm hardware changes.",
|
|
2620
|
+
"Call out when verification retries succeed or fail so follow-up actions are clear."
|
|
2621
|
+
],
|
|
2622
|
+
"platforms": [
|
|
2623
|
+
"c64u",
|
|
2624
|
+
"vice"
|
|
2625
|
+
],
|
|
2626
|
+
"operationPlatforms": {
|
|
2627
|
+
"file_info": [
|
|
2628
|
+
"c64u"
|
|
2629
|
+
],
|
|
2630
|
+
"create_image": [
|
|
2631
|
+
"c64u"
|
|
2632
|
+
],
|
|
2633
|
+
"find_and_run": [
|
|
2634
|
+
"c64u"
|
|
2635
|
+
]
|
|
2636
|
+
}
|
|
2637
|
+
}
|
|
2638
|
+
},
|
|
2639
|
+
{
|
|
2640
|
+
"name": "c64_drive",
|
|
2641
|
+
"title": "Power cycle drive slots, reset IEC state, switch emulation modes, or load custom ROMs.",
|
|
2642
|
+
"description": "Grouped entry point for drive power, mode, reset, and ROM operations.",
|
|
2643
|
+
"inputSchema": {
|
|
2644
|
+
"type": "object",
|
|
2645
|
+
"description": "Drive operations available via the c64_drive tool.",
|
|
2646
|
+
"oneOf": [
|
|
2647
|
+
{
|
|
2648
|
+
"type": "object",
|
|
2649
|
+
"description": "Issue an IEC reset for the selected drive slot.",
|
|
2650
|
+
"properties": {
|
|
2651
|
+
"drive": {
|
|
2652
|
+
"type": "string",
|
|
2653
|
+
"description": "Drive identifier such as drive8, drive9, or unit name defined in the Ultimate UI.",
|
|
2654
|
+
"minLength": 1
|
|
2655
|
+
},
|
|
2656
|
+
"op": {
|
|
2657
|
+
"const": "reset"
|
|
2658
|
+
}
|
|
2659
|
+
},
|
|
2660
|
+
"required": [
|
|
2661
|
+
"drive",
|
|
2662
|
+
"op"
|
|
2663
|
+
],
|
|
2664
|
+
"additionalProperties": false
|
|
2665
|
+
},
|
|
2666
|
+
{
|
|
2667
|
+
"type": "object",
|
|
2668
|
+
"description": "Power on a specific Ultimate drive slot.",
|
|
2669
|
+
"properties": {
|
|
2670
|
+
"drive": {
|
|
2671
|
+
"type": "string",
|
|
2672
|
+
"description": "Drive identifier such as drive8, drive9, or unit name defined in the Ultimate UI.",
|
|
2673
|
+
"minLength": 1
|
|
2674
|
+
},
|
|
2675
|
+
"op": {
|
|
2676
|
+
"const": "power_on"
|
|
2677
|
+
}
|
|
2678
|
+
},
|
|
2679
|
+
"required": [
|
|
2680
|
+
"drive",
|
|
2681
|
+
"op"
|
|
2682
|
+
],
|
|
2683
|
+
"additionalProperties": false
|
|
2684
|
+
},
|
|
2685
|
+
{
|
|
2686
|
+
"type": "object",
|
|
2687
|
+
"description": "Power off a specific Ultimate drive slot.",
|
|
2688
|
+
"properties": {
|
|
2689
|
+
"drive": {
|
|
2690
|
+
"type": "string",
|
|
2691
|
+
"description": "Drive identifier such as drive8, drive9, or unit name defined in the Ultimate UI.",
|
|
2692
|
+
"minLength": 1
|
|
2693
|
+
},
|
|
2694
|
+
"op": {
|
|
2695
|
+
"const": "power_off"
|
|
2696
|
+
}
|
|
2697
|
+
},
|
|
2698
|
+
"required": [
|
|
2699
|
+
"drive",
|
|
2700
|
+
"op"
|
|
2701
|
+
],
|
|
2702
|
+
"additionalProperties": false
|
|
2703
|
+
},
|
|
2704
|
+
{
|
|
2705
|
+
"type": "object",
|
|
2706
|
+
"description": "Temporarily load a custom ROM into an Ultimate drive slot.",
|
|
2707
|
+
"properties": {
|
|
2708
|
+
"drive": {
|
|
2709
|
+
"type": "string",
|
|
2710
|
+
"description": "Drive identifier such as drive8, drive9, or unit name defined in the Ultimate UI.",
|
|
2711
|
+
"minLength": 1
|
|
2712
|
+
},
|
|
2713
|
+
"path": {
|
|
2714
|
+
"type": "string",
|
|
2715
|
+
"description": "Absolute or Ultimate filesystem path to the disk image to mount or manage.",
|
|
2716
|
+
"minLength": 1
|
|
2717
|
+
},
|
|
2718
|
+
"op": {
|
|
2719
|
+
"const": "load_rom"
|
|
2720
|
+
}
|
|
2721
|
+
},
|
|
2722
|
+
"required": [
|
|
2723
|
+
"drive",
|
|
2724
|
+
"path",
|
|
2725
|
+
"op"
|
|
2726
|
+
],
|
|
2727
|
+
"additionalProperties": false
|
|
2728
|
+
},
|
|
2729
|
+
{
|
|
2730
|
+
"type": "object",
|
|
2731
|
+
"description": "Set the emulation mode for a drive slot (1541/1571/1581).",
|
|
2732
|
+
"properties": {
|
|
2733
|
+
"drive": {
|
|
2734
|
+
"type": "string",
|
|
2735
|
+
"description": "Drive identifier such as drive8, drive9, or unit name defined in the Ultimate UI.",
|
|
2736
|
+
"minLength": 1
|
|
2737
|
+
},
|
|
2738
|
+
"mode": {
|
|
2739
|
+
"type": "string",
|
|
2740
|
+
"description": "Drive hardware profile to emulate.",
|
|
2741
|
+
"enum": [
|
|
2742
|
+
"1541",
|
|
2743
|
+
"1571",
|
|
2744
|
+
"1581"
|
|
2745
|
+
]
|
|
2746
|
+
},
|
|
2747
|
+
"op": {
|
|
2748
|
+
"const": "set_mode"
|
|
2749
|
+
}
|
|
2750
|
+
},
|
|
2751
|
+
"required": [
|
|
2752
|
+
"drive",
|
|
2753
|
+
"mode",
|
|
2754
|
+
"op"
|
|
2755
|
+
],
|
|
2756
|
+
"additionalProperties": false
|
|
2757
|
+
}
|
|
2758
|
+
],
|
|
2759
|
+
"discriminator": {
|
|
2760
|
+
"propertyName": "op"
|
|
2761
|
+
}
|
|
2762
|
+
},
|
|
2763
|
+
"_meta": {
|
|
2764
|
+
"domain": "drive",
|
|
2765
|
+
"summary": "Power cycle drive slots, reset IEC state, switch emulation modes, or load custom ROMs.",
|
|
2766
|
+
"lifecycle": "request-response",
|
|
2767
|
+
"resources": [
|
|
2768
|
+
"c64://context/bootstrap"
|
|
2769
|
+
],
|
|
2770
|
+
"prompts": [],
|
|
2771
|
+
"examples": [
|
|
2772
|
+
{
|
|
2773
|
+
"name": "Power on drive",
|
|
2774
|
+
"description": "Enable drive8",
|
|
2775
|
+
"arguments": {
|
|
2776
|
+
"op": "power_on",
|
|
2777
|
+
"drive": "drive8"
|
|
2778
|
+
}
|
|
2779
|
+
},
|
|
2780
|
+
{
|
|
2781
|
+
"name": "Set 1581 mode",
|
|
2782
|
+
"description": "Switch emulation mode",
|
|
2783
|
+
"arguments": {
|
|
2784
|
+
"op": "set_mode",
|
|
2785
|
+
"drive": "drive8",
|
|
2786
|
+
"mode": "1581"
|
|
2787
|
+
}
|
|
2788
|
+
}
|
|
2789
|
+
],
|
|
2790
|
+
"tags": [
|
|
2791
|
+
"drive",
|
|
2792
|
+
"hardware",
|
|
2793
|
+
"grouped"
|
|
2794
|
+
],
|
|
2795
|
+
"workflowHints": [
|
|
2796
|
+
"State the resulting power/mode/ROM so the user can reconcile IEC behaviour.",
|
|
2797
|
+
"Suggest running c64_disk (op list_drives) to confirm status when appropriate."
|
|
2798
|
+
],
|
|
2799
|
+
"platforms": [
|
|
2800
|
+
"c64u",
|
|
2801
|
+
"vice"
|
|
2802
|
+
],
|
|
2803
|
+
"operationPlatforms": {
|
|
2804
|
+
"load_rom": [
|
|
2805
|
+
"c64u"
|
|
2806
|
+
]
|
|
2807
|
+
}
|
|
2808
|
+
}
|
|
2809
|
+
},
|
|
2810
|
+
{
|
|
2811
|
+
"name": "c64_printer",
|
|
2812
|
+
"title": "Print text or bitmaps and define custom characters for Commodore or Epson printers.",
|
|
2813
|
+
"description": "Grouped entry point for Commodore and Epson printing helpers.",
|
|
2814
|
+
"inputSchema": {
|
|
2815
|
+
"type": "object",
|
|
2816
|
+
"description": "Printer operations available via the c64_printer tool.",
|
|
2817
|
+
"oneOf": [
|
|
2818
|
+
{
|
|
2819
|
+
"type": "object",
|
|
2820
|
+
"description": "Generate BASIC that prints text to device 4.",
|
|
2821
|
+
"properties": {
|
|
2822
|
+
"text": {
|
|
2823
|
+
"type": "string",
|
|
2824
|
+
"description": "Text to print on the connected printer.",
|
|
2825
|
+
"minLength": 1
|
|
2826
|
+
},
|
|
2827
|
+
"target": {
|
|
2828
|
+
"description": "Printer target: Commodore MPS (PETSCII) or Epson FX (ESC/P).",
|
|
2829
|
+
"type": "string",
|
|
2830
|
+
"enum": [
|
|
2831
|
+
"commodore",
|
|
2832
|
+
"epson"
|
|
2833
|
+
],
|
|
2834
|
+
"default": "commodore"
|
|
2835
|
+
},
|
|
2836
|
+
"secondaryAddress": {
|
|
2837
|
+
"description": "Secondary address for device 4 (0 = upper/graphics, 7 = lowercase).",
|
|
2838
|
+
"type": [
|
|
2839
|
+
"integer",
|
|
2840
|
+
"null"
|
|
2841
|
+
],
|
|
2842
|
+
"enum": [
|
|
2843
|
+
0,
|
|
2844
|
+
7
|
|
2845
|
+
]
|
|
2846
|
+
},
|
|
2847
|
+
"formFeed": {
|
|
2848
|
+
"type": "boolean",
|
|
2849
|
+
"description": "Emit a form-feed (CHR$(12)) at the end of the job.",
|
|
2850
|
+
"default": false
|
|
2851
|
+
},
|
|
2852
|
+
"op": {
|
|
2853
|
+
"const": "print_text"
|
|
2854
|
+
}
|
|
2855
|
+
},
|
|
2856
|
+
"required": [
|
|
2857
|
+
"text",
|
|
2858
|
+
"op"
|
|
2859
|
+
],
|
|
2860
|
+
"additionalProperties": false
|
|
2861
|
+
},
|
|
2862
|
+
{
|
|
2863
|
+
"type": "object",
|
|
2864
|
+
"description": "Print a bitmap row via Commodore (BIM) or Epson ESC/P workflows.",
|
|
2865
|
+
"properties": {
|
|
2866
|
+
"printer": {
|
|
2867
|
+
"type": "string",
|
|
2868
|
+
"description": "Target printer family.",
|
|
2869
|
+
"enum": [
|
|
2870
|
+
"commodore",
|
|
2871
|
+
"epson"
|
|
2872
|
+
],
|
|
2873
|
+
"default": "commodore"
|
|
2874
|
+
},
|
|
2875
|
+
"columns": {
|
|
2876
|
+
"type": "array",
|
|
2877
|
+
"description": "Sequence of bitmap columns.",
|
|
2878
|
+
"items": {
|
|
2879
|
+
"type": "integer",
|
|
2880
|
+
"description": "Bitmap column byte (0-255).",
|
|
2881
|
+
"minimum": 0,
|
|
2882
|
+
"maximum": 255
|
|
2883
|
+
},
|
|
2884
|
+
"minItems": 1
|
|
2885
|
+
},
|
|
2886
|
+
"repeats": {
|
|
2887
|
+
"type": [
|
|
2888
|
+
"integer",
|
|
2889
|
+
"null"
|
|
2890
|
+
],
|
|
2891
|
+
"description": "Number of times to repeat the row (1-255).",
|
|
2892
|
+
"minimum": 1,
|
|
2893
|
+
"maximum": 255
|
|
2894
|
+
},
|
|
2895
|
+
"useSubRepeat": {
|
|
2896
|
+
"type": [
|
|
2897
|
+
"integer",
|
|
2898
|
+
"null"
|
|
2899
|
+
],
|
|
2900
|
+
"description": "Repeat the next byte this many times (Commodore BIM SUB).",
|
|
2901
|
+
"minimum": 1,
|
|
2902
|
+
"maximum": 255
|
|
2903
|
+
},
|
|
2904
|
+
"secondaryAddress": {
|
|
2905
|
+
"type": [
|
|
2906
|
+
"integer",
|
|
2907
|
+
"null"
|
|
2908
|
+
],
|
|
2909
|
+
"description": "Secondary address for device 4 (0 or 7).",
|
|
2910
|
+
"minimum": 0,
|
|
2911
|
+
"maximum": 7
|
|
2912
|
+
},
|
|
2913
|
+
"ensureMsb": {
|
|
2914
|
+
"type": "boolean",
|
|
2915
|
+
"description": "Ensure MSB set for Commodore printers.",
|
|
2916
|
+
"default": true
|
|
2917
|
+
},
|
|
2918
|
+
"mode": {
|
|
2919
|
+
"type": [
|
|
2920
|
+
"string",
|
|
2921
|
+
"null"
|
|
2922
|
+
],
|
|
2923
|
+
"description": "Epson ESC/P graphics mode (K/L/Y/Z/*).",
|
|
2924
|
+
"minLength": 1,
|
|
2925
|
+
"maxLength": 1
|
|
2926
|
+
},
|
|
2927
|
+
"density": {
|
|
2928
|
+
"type": [
|
|
2929
|
+
"integer",
|
|
2930
|
+
"null"
|
|
2931
|
+
],
|
|
2932
|
+
"description": "Density parameter when using Epson mode '*'.",
|
|
2933
|
+
"minimum": 0,
|
|
2934
|
+
"maximum": 3
|
|
2935
|
+
},
|
|
2936
|
+
"timesPerLine": {
|
|
2937
|
+
"type": [
|
|
2938
|
+
"integer",
|
|
2939
|
+
"null"
|
|
2940
|
+
],
|
|
2941
|
+
"description": "Number of times to print the row per line (1-10).",
|
|
2942
|
+
"minimum": 1,
|
|
2943
|
+
"maximum": 10
|
|
2944
|
+
},
|
|
2945
|
+
"op": {
|
|
2946
|
+
"const": "print_bitmap"
|
|
2947
|
+
}
|
|
2948
|
+
},
|
|
2949
|
+
"required": [
|
|
2950
|
+
"printer",
|
|
2951
|
+
"columns",
|
|
2952
|
+
"op"
|
|
2953
|
+
],
|
|
2954
|
+
"additionalProperties": false
|
|
2955
|
+
},
|
|
2956
|
+
{
|
|
2957
|
+
"type": "object",
|
|
2958
|
+
"description": "Define custom printer characters (Commodore DLL mode).",
|
|
2959
|
+
"properties": {
|
|
2960
|
+
"firstChar": {
|
|
2961
|
+
"type": "integer",
|
|
2962
|
+
"description": "PETSCII code of first character to redefine (33-126).",
|
|
2963
|
+
"minimum": 33,
|
|
2964
|
+
"maximum": 126
|
|
2965
|
+
},
|
|
2966
|
+
"chars": {
|
|
2967
|
+
"type": "array",
|
|
2968
|
+
"description": "Character definitions to upload (1-32).",
|
|
2969
|
+
"items": {
|
|
2970
|
+
"type": "object",
|
|
2971
|
+
"description": "Commodore MPS DLL character definition (11 columns).",
|
|
2972
|
+
"properties": {
|
|
2973
|
+
"a": {
|
|
2974
|
+
"description": "Attribute flag (0=normal, 1=graphics).",
|
|
2975
|
+
"type": [
|
|
2976
|
+
"integer",
|
|
2977
|
+
"null"
|
|
2978
|
+
],
|
|
2979
|
+
"enum": [
|
|
2980
|
+
0,
|
|
2981
|
+
1
|
|
2982
|
+
]
|
|
2983
|
+
},
|
|
2984
|
+
"columns": {
|
|
2985
|
+
"type": "array",
|
|
2986
|
+
"description": "11 column bytes describing the character.",
|
|
2987
|
+
"items": {
|
|
2988
|
+
"type": "integer",
|
|
2989
|
+
"description": "Column byte (0-255).",
|
|
2990
|
+
"minimum": 0,
|
|
2991
|
+
"maximum": 255
|
|
2992
|
+
},
|
|
2993
|
+
"minItems": 11,
|
|
2994
|
+
"maxItems": 11
|
|
2995
|
+
}
|
|
2996
|
+
},
|
|
2997
|
+
"required": [
|
|
2998
|
+
"columns"
|
|
2999
|
+
],
|
|
3000
|
+
"additionalProperties": false
|
|
3001
|
+
},
|
|
3002
|
+
"minItems": 1,
|
|
3003
|
+
"maxItems": 32
|
|
3004
|
+
},
|
|
3005
|
+
"secondaryAddress": {
|
|
3006
|
+
"description": "Secondary address for device 4 (0 = upper/graphics, 7 = lowercase).",
|
|
3007
|
+
"type": [
|
|
3008
|
+
"integer",
|
|
3009
|
+
"null"
|
|
3010
|
+
],
|
|
3011
|
+
"enum": [
|
|
3012
|
+
0,
|
|
3013
|
+
7
|
|
3014
|
+
]
|
|
3015
|
+
},
|
|
3016
|
+
"op": {
|
|
3017
|
+
"const": "define_chars"
|
|
3018
|
+
}
|
|
3019
|
+
},
|
|
3020
|
+
"required": [
|
|
3021
|
+
"firstChar",
|
|
3022
|
+
"chars",
|
|
3023
|
+
"op"
|
|
3024
|
+
],
|
|
3025
|
+
"additionalProperties": false
|
|
3026
|
+
}
|
|
3027
|
+
],
|
|
3028
|
+
"discriminator": {
|
|
3029
|
+
"propertyName": "op"
|
|
3030
|
+
}
|
|
3031
|
+
},
|
|
3032
|
+
"_meta": {
|
|
3033
|
+
"domain": "printer",
|
|
3034
|
+
"summary": "Print text or bitmaps and define custom characters for Commodore or Epson printers.",
|
|
3035
|
+
"lifecycle": "request-response",
|
|
3036
|
+
"resources": [
|
|
3037
|
+
"c64://context/bootstrap"
|
|
3038
|
+
],
|
|
3039
|
+
"prompts": [],
|
|
3040
|
+
"examples": [
|
|
3041
|
+
{
|
|
3042
|
+
"name": "Print text",
|
|
3043
|
+
"description": "Generate BASIC for device 4",
|
|
3044
|
+
"arguments": {
|
|
3045
|
+
"op": "print_text",
|
|
3046
|
+
"text": "HELLO",
|
|
3047
|
+
"ensureReturn": true
|
|
3048
|
+
}
|
|
3049
|
+
},
|
|
3050
|
+
{
|
|
3051
|
+
"name": "Print bitmap",
|
|
3052
|
+
"description": "Send Epson graphics row",
|
|
3053
|
+
"arguments": {
|
|
3054
|
+
"op": "print_bitmap",
|
|
3055
|
+
"printer": "epson",
|
|
3056
|
+
"columns": [
|
|
3057
|
+
0,
|
|
3058
|
+
255,
|
|
3059
|
+
0
|
|
3060
|
+
],
|
|
3061
|
+
"mode": "*",
|
|
3062
|
+
"density": 3
|
|
3063
|
+
}
|
|
3064
|
+
}
|
|
3065
|
+
],
|
|
3066
|
+
"tags": [
|
|
3067
|
+
"printer",
|
|
3068
|
+
"device",
|
|
3069
|
+
"grouped"
|
|
3070
|
+
],
|
|
3071
|
+
"workflowHints": [
|
|
3072
|
+
"Mention device/secondary addresses so the user knows which printer workflow ran.",
|
|
3073
|
+
"When defining characters, remind the user to send the BASIC program returned in the payload."
|
|
3074
|
+
],
|
|
3075
|
+
"platforms": [
|
|
3076
|
+
"c64u"
|
|
3077
|
+
]
|
|
3078
|
+
}
|
|
3079
|
+
},
|
|
3080
|
+
{
|
|
3081
|
+
"name": "c64_config",
|
|
3082
|
+
"title": "List or update settings, access firmware info, take snapshots, and run program shuffle workflows.",
|
|
3083
|
+
"description": "Grouped entry point for configuration reads/writes, diagnostics, and snapshots.",
|
|
3084
|
+
"inputSchema": {
|
|
3085
|
+
"type": "object",
|
|
3086
|
+
"description": "Configuration operations available via the c64_config tool.",
|
|
3087
|
+
"oneOf": [
|
|
3088
|
+
{
|
|
3089
|
+
"type": "object",
|
|
3090
|
+
"description": "List configuration categories reported by the firmware.",
|
|
3091
|
+
"properties": {
|
|
3092
|
+
"op": {
|
|
3093
|
+
"const": "list"
|
|
3094
|
+
}
|
|
3095
|
+
},
|
|
3096
|
+
"additionalProperties": false,
|
|
3097
|
+
"required": [
|
|
3098
|
+
"op"
|
|
3099
|
+
]
|
|
3100
|
+
},
|
|
3101
|
+
{
|
|
3102
|
+
"type": "object",
|
|
3103
|
+
"description": "Read a configuration category or specific item.",
|
|
3104
|
+
"properties": {
|
|
3105
|
+
"category": {
|
|
3106
|
+
"type": "string",
|
|
3107
|
+
"description": "Configuration category reported by the Ultimate firmware (e.g. 'Audio').",
|
|
3108
|
+
"minLength": 1
|
|
3109
|
+
},
|
|
3110
|
+
"item": {
|
|
3111
|
+
"type": [
|
|
3112
|
+
"string",
|
|
3113
|
+
"null"
|
|
3114
|
+
],
|
|
3115
|
+
"description": "Specific configuration item inside the selected category (e.g. 'Volume').",
|
|
3116
|
+
"minLength": 1
|
|
3117
|
+
},
|
|
3118
|
+
"op": {
|
|
3119
|
+
"const": "get"
|
|
3120
|
+
}
|
|
3121
|
+
},
|
|
3122
|
+
"required": [
|
|
3123
|
+
"category",
|
|
3124
|
+
"op"
|
|
3125
|
+
],
|
|
3126
|
+
"additionalProperties": false
|
|
3127
|
+
},
|
|
3128
|
+
{
|
|
3129
|
+
"type": "object",
|
|
3130
|
+
"description": "Write a configuration value in the selected category.",
|
|
3131
|
+
"properties": {
|
|
3132
|
+
"category": {
|
|
3133
|
+
"type": "string",
|
|
3134
|
+
"description": "Configuration category reported by the Ultimate firmware (e.g. 'Audio').",
|
|
3135
|
+
"minLength": 1
|
|
3136
|
+
},
|
|
3137
|
+
"item": {
|
|
3138
|
+
"type": "string",
|
|
3139
|
+
"description": "Configuration item name inside the category.",
|
|
3140
|
+
"minLength": 1
|
|
3141
|
+
},
|
|
3142
|
+
"value": {
|
|
3143
|
+
"description": "Primitive configuration value (string, number, or boolean).",
|
|
3144
|
+
"type": [
|
|
3145
|
+
"string",
|
|
3146
|
+
"number",
|
|
3147
|
+
"boolean"
|
|
3148
|
+
]
|
|
3149
|
+
},
|
|
3150
|
+
"op": {
|
|
3151
|
+
"const": "set"
|
|
3152
|
+
}
|
|
3153
|
+
},
|
|
3154
|
+
"required": [
|
|
3155
|
+
"category",
|
|
3156
|
+
"item",
|
|
3157
|
+
"value",
|
|
3158
|
+
"op"
|
|
3159
|
+
],
|
|
3160
|
+
"additionalProperties": false
|
|
3161
|
+
},
|
|
3162
|
+
{
|
|
3163
|
+
"description": "Apply multiple configuration updates in a single request.",
|
|
3164
|
+
"type": "object",
|
|
3165
|
+
"additionalProperties": {
|
|
3166
|
+
"type": "object",
|
|
3167
|
+
"additionalProperties": {
|
|
3168
|
+
"type": [
|
|
3169
|
+
"string",
|
|
3170
|
+
"number",
|
|
3171
|
+
"boolean"
|
|
3172
|
+
]
|
|
3173
|
+
}
|
|
3174
|
+
},
|
|
3175
|
+
"properties": {
|
|
3176
|
+
"op": {
|
|
3177
|
+
"const": "batch_update"
|
|
3178
|
+
}
|
|
3179
|
+
},
|
|
3180
|
+
"required": [
|
|
3181
|
+
"op"
|
|
3182
|
+
]
|
|
3183
|
+
},
|
|
3184
|
+
{
|
|
3185
|
+
"type": "object",
|
|
3186
|
+
"description": "Load configuration from flash storage.",
|
|
3187
|
+
"properties": {
|
|
3188
|
+
"op": {
|
|
3189
|
+
"const": "load_flash"
|
|
3190
|
+
}
|
|
3191
|
+
},
|
|
3192
|
+
"additionalProperties": false,
|
|
3193
|
+
"required": [
|
|
3194
|
+
"op"
|
|
3195
|
+
]
|
|
3196
|
+
},
|
|
3197
|
+
{
|
|
3198
|
+
"type": "object",
|
|
3199
|
+
"description": "Persist the current configuration to flash storage.",
|
|
3200
|
+
"properties": {
|
|
3201
|
+
"op": {
|
|
3202
|
+
"const": "save_flash"
|
|
3203
|
+
}
|
|
3204
|
+
},
|
|
3205
|
+
"additionalProperties": false,
|
|
3206
|
+
"required": [
|
|
3207
|
+
"op"
|
|
3208
|
+
]
|
|
3209
|
+
},
|
|
3210
|
+
{
|
|
3211
|
+
"type": "object",
|
|
3212
|
+
"description": "Reset firmware configuration to factory defaults.",
|
|
3213
|
+
"properties": {
|
|
3214
|
+
"op": {
|
|
3215
|
+
"const": "reset_defaults"
|
|
3216
|
+
}
|
|
3217
|
+
},
|
|
3218
|
+
"additionalProperties": false,
|
|
3219
|
+
"required": [
|
|
3220
|
+
"op"
|
|
3221
|
+
]
|
|
3222
|
+
},
|
|
3223
|
+
{
|
|
3224
|
+
"type": "object",
|
|
3225
|
+
"description": "Read the Ultimate debug register ($D7FF).",
|
|
3226
|
+
"properties": {
|
|
3227
|
+
"op": {
|
|
3228
|
+
"const": "read_debugreg"
|
|
3229
|
+
}
|
|
3230
|
+
},
|
|
3231
|
+
"additionalProperties": false,
|
|
3232
|
+
"required": [
|
|
3233
|
+
"op"
|
|
3234
|
+
]
|
|
3235
|
+
},
|
|
3236
|
+
{
|
|
3237
|
+
"type": "object",
|
|
3238
|
+
"description": "Write a hex value to the Ultimate debug register ($D7FF).",
|
|
3239
|
+
"properties": {
|
|
3240
|
+
"value": {
|
|
3241
|
+
"type": "string",
|
|
3242
|
+
"description": "Hex value (00-FF) to write to the debug register.",
|
|
3243
|
+
"minLength": 1,
|
|
3244
|
+
"maxLength": 2,
|
|
3245
|
+
"pattern": "^[0-9A-Fa-f]{1,2}$"
|
|
3246
|
+
},
|
|
3247
|
+
"op": {
|
|
3248
|
+
"const": "write_debugreg"
|
|
3249
|
+
}
|
|
3250
|
+
},
|
|
3251
|
+
"required": [
|
|
3252
|
+
"value",
|
|
3253
|
+
"op"
|
|
3254
|
+
],
|
|
3255
|
+
"additionalProperties": false
|
|
3256
|
+
},
|
|
3257
|
+
{
|
|
3258
|
+
"type": "object",
|
|
3259
|
+
"description": "Retrieve Ultimate hardware information and status.",
|
|
3260
|
+
"properties": {
|
|
3261
|
+
"op": {
|
|
3262
|
+
"const": "info"
|
|
3263
|
+
}
|
|
3264
|
+
},
|
|
3265
|
+
"additionalProperties": false,
|
|
3266
|
+
"required": [
|
|
3267
|
+
"op"
|
|
3268
|
+
]
|
|
3269
|
+
},
|
|
3270
|
+
{
|
|
3271
|
+
"type": "object",
|
|
3272
|
+
"description": "Fetch firmware version details.",
|
|
3273
|
+
"properties": {
|
|
3274
|
+
"op": {
|
|
3275
|
+
"const": "version"
|
|
3276
|
+
}
|
|
3277
|
+
},
|
|
3278
|
+
"additionalProperties": false,
|
|
3279
|
+
"required": [
|
|
3280
|
+
"op"
|
|
3281
|
+
]
|
|
3282
|
+
},
|
|
3283
|
+
{
|
|
3284
|
+
"type": "object",
|
|
3285
|
+
"description": "Snapshot configuration to disk for later restore or diff.",
|
|
3286
|
+
"properties": {
|
|
3287
|
+
"path": {
|
|
3288
|
+
"type": "string",
|
|
3289
|
+
"description": "Absolute or workspace-relative path where the snapshot file will be written.",
|
|
3290
|
+
"minLength": 1
|
|
3291
|
+
},
|
|
3292
|
+
"op": {
|
|
3293
|
+
"const": "snapshot"
|
|
3294
|
+
}
|
|
3295
|
+
},
|
|
3296
|
+
"required": [
|
|
3297
|
+
"path",
|
|
3298
|
+
"op"
|
|
3299
|
+
],
|
|
3300
|
+
"additionalProperties": false
|
|
3301
|
+
},
|
|
3302
|
+
{
|
|
3303
|
+
"type": "object",
|
|
3304
|
+
"description": "Restore configuration from a snapshot file.",
|
|
3305
|
+
"properties": {
|
|
3306
|
+
"path": {
|
|
3307
|
+
"type": "string",
|
|
3308
|
+
"description": "Snapshot file to read (must contain categories payload).",
|
|
3309
|
+
"minLength": 1
|
|
3310
|
+
},
|
|
3311
|
+
"applyToFlash": {
|
|
3312
|
+
"type": [
|
|
3313
|
+
"boolean",
|
|
3314
|
+
"null"
|
|
3315
|
+
],
|
|
3316
|
+
"description": "When true, save the restored configuration to flash immediately.",
|
|
3317
|
+
"default": false
|
|
3318
|
+
},
|
|
3319
|
+
"op": {
|
|
3320
|
+
"const": "restore"
|
|
3321
|
+
}
|
|
3322
|
+
},
|
|
3323
|
+
"required": [
|
|
3324
|
+
"path",
|
|
3325
|
+
"op"
|
|
3326
|
+
],
|
|
3327
|
+
"additionalProperties": false
|
|
3328
|
+
},
|
|
3329
|
+
{
|
|
3330
|
+
"type": "object",
|
|
3331
|
+
"description": "Compare the current configuration with a snapshot.",
|
|
3332
|
+
"properties": {
|
|
3333
|
+
"path": {
|
|
3334
|
+
"type": "string",
|
|
3335
|
+
"description": "Snapshot file to compare with.",
|
|
3336
|
+
"minLength": 1
|
|
3337
|
+
},
|
|
3338
|
+
"op": {
|
|
3339
|
+
"const": "diff"
|
|
3340
|
+
}
|
|
3341
|
+
},
|
|
3342
|
+
"required": [
|
|
3343
|
+
"path",
|
|
3344
|
+
"op"
|
|
3345
|
+
],
|
|
3346
|
+
"additionalProperties": false
|
|
3347
|
+
},
|
|
3348
|
+
{
|
|
3349
|
+
"type": "object",
|
|
3350
|
+
"description": "Discover PRG/CRT files and run each with optional screen capture.",
|
|
3351
|
+
"properties": {
|
|
3352
|
+
"root": {
|
|
3353
|
+
"type": [
|
|
3354
|
+
"string",
|
|
3355
|
+
"null"
|
|
3356
|
+
],
|
|
3357
|
+
"description": "Root path to search for programs",
|
|
3358
|
+
"minLength": 1,
|
|
3359
|
+
"default": "/"
|
|
3360
|
+
},
|
|
3361
|
+
"extensions": {
|
|
3362
|
+
"type": [
|
|
3363
|
+
"array",
|
|
3364
|
+
"null"
|
|
3365
|
+
],
|
|
3366
|
+
"items": {
|
|
3367
|
+
"type": "string",
|
|
3368
|
+
"description": "File extensions to include (without dot)",
|
|
3369
|
+
"minLength": 1
|
|
3370
|
+
},
|
|
3371
|
+
"default": [
|
|
3372
|
+
"prg",
|
|
3373
|
+
"crt"
|
|
3374
|
+
]
|
|
3375
|
+
},
|
|
3376
|
+
"durationMs": {
|
|
3377
|
+
"type": [
|
|
3378
|
+
"integer",
|
|
3379
|
+
"null"
|
|
3380
|
+
],
|
|
3381
|
+
"description": "Duration to run each program in milliseconds",
|
|
3382
|
+
"minimum": 1,
|
|
3383
|
+
"default": 5000
|
|
3384
|
+
},
|
|
3385
|
+
"captureScreen": {
|
|
3386
|
+
"type": [
|
|
3387
|
+
"boolean",
|
|
3388
|
+
"null"
|
|
3389
|
+
],
|
|
3390
|
+
"description": "Capture screen after each run",
|
|
3391
|
+
"default": true
|
|
3392
|
+
},
|
|
3393
|
+
"maxPrograms": {
|
|
3394
|
+
"type": [
|
|
3395
|
+
"integer",
|
|
3396
|
+
"null"
|
|
3397
|
+
],
|
|
3398
|
+
"description": "Maximum number of programs to run",
|
|
3399
|
+
"minimum": 1,
|
|
3400
|
+
"default": 10
|
|
3401
|
+
},
|
|
3402
|
+
"outputPath": {
|
|
3403
|
+
"type": [
|
|
3404
|
+
"string",
|
|
3405
|
+
"null"
|
|
3406
|
+
],
|
|
3407
|
+
"description": "Output directory for run logs and captures",
|
|
3408
|
+
"minLength": 1
|
|
3409
|
+
},
|
|
3410
|
+
"resetDelayMs": {
|
|
3411
|
+
"type": [
|
|
3412
|
+
"integer",
|
|
3413
|
+
"null"
|
|
3414
|
+
],
|
|
3415
|
+
"description": "Delay after reset operations to allow the platform to settle.",
|
|
3416
|
+
"minimum": 0,
|
|
3417
|
+
"maximum": 1000,
|
|
3418
|
+
"default": 100
|
|
3419
|
+
},
|
|
3420
|
+
"op": {
|
|
3421
|
+
"const": "shuffle"
|
|
3422
|
+
}
|
|
3423
|
+
},
|
|
3424
|
+
"additionalProperties": false,
|
|
3425
|
+
"required": [
|
|
3426
|
+
"op"
|
|
3427
|
+
]
|
|
3428
|
+
}
|
|
3429
|
+
],
|
|
3430
|
+
"discriminator": {
|
|
3431
|
+
"propertyName": "op"
|
|
3432
|
+
}
|
|
3433
|
+
},
|
|
3434
|
+
"_meta": {
|
|
3435
|
+
"domain": "config",
|
|
3436
|
+
"summary": "List or update settings, access firmware info, take snapshots, and run program shuffle workflows.",
|
|
3437
|
+
"lifecycle": "request-response",
|
|
3438
|
+
"resources": [
|
|
3439
|
+
"c64://context/bootstrap",
|
|
3440
|
+
"c64://docs/index"
|
|
3441
|
+
],
|
|
3442
|
+
"prompts": [
|
|
3443
|
+
"memory-debug"
|
|
3444
|
+
],
|
|
3445
|
+
"examples": [
|
|
3446
|
+
{
|
|
3447
|
+
"name": "List categories",
|
|
3448
|
+
"description": "Enumerate configuration categories",
|
|
3449
|
+
"arguments": {
|
|
3450
|
+
"op": "list"
|
|
3451
|
+
}
|
|
3452
|
+
},
|
|
3453
|
+
{
|
|
3454
|
+
"name": "Set volume",
|
|
3455
|
+
"description": "Adjust audio volume to 70",
|
|
3456
|
+
"arguments": {
|
|
3457
|
+
"op": "set",
|
|
3458
|
+
"category": "Audio",
|
|
3459
|
+
"item": "Volume",
|
|
3460
|
+
"value": 70
|
|
3461
|
+
}
|
|
3462
|
+
},
|
|
3463
|
+
{
|
|
3464
|
+
"name": "Snapshot config",
|
|
3465
|
+
"description": "Write configuration snapshot to disk",
|
|
3466
|
+
"arguments": {
|
|
3467
|
+
"op": "snapshot",
|
|
3468
|
+
"path": "./snapshots/c64_json"
|
|
3469
|
+
}
|
|
3470
|
+
}
|
|
3471
|
+
],
|
|
3472
|
+
"tags": [
|
|
3473
|
+
"config",
|
|
3474
|
+
"diagnostics",
|
|
3475
|
+
"grouped"
|
|
3476
|
+
],
|
|
3477
|
+
"workflowHints": [
|
|
3478
|
+
"List categories before changing values so users can confirm firmware-provided names.",
|
|
3479
|
+
"Mention when operations persist to flash or modify debug registers to highlight impacts.",
|
|
3480
|
+
"Call out snapshot file paths so users can version-control or reuse them later."
|
|
3481
|
+
],
|
|
3482
|
+
"platforms": [
|
|
3483
|
+
"c64u",
|
|
3484
|
+
"vice"
|
|
3485
|
+
],
|
|
3486
|
+
"operationPlatforms": {
|
|
3487
|
+
"load_flash": [
|
|
3488
|
+
"c64u"
|
|
3489
|
+
],
|
|
3490
|
+
"save_flash": [
|
|
3491
|
+
"c64u"
|
|
3492
|
+
],
|
|
3493
|
+
"reset_defaults": [
|
|
3494
|
+
"c64u"
|
|
3495
|
+
],
|
|
3496
|
+
"read_debugreg": [
|
|
3497
|
+
"c64u"
|
|
3498
|
+
],
|
|
3499
|
+
"write_debugreg": [
|
|
3500
|
+
"c64u"
|
|
3501
|
+
],
|
|
3502
|
+
"shuffle": [
|
|
3503
|
+
"c64u"
|
|
3504
|
+
]
|
|
3505
|
+
}
|
|
3506
|
+
}
|
|
3507
|
+
},
|
|
3508
|
+
{
|
|
3509
|
+
"name": "c64_extract",
|
|
3510
|
+
"title": "Export sprites or charsets, dump RAM, compute filesystem stats, or run firmware health checks.",
|
|
3511
|
+
"description": "Grouped entry point for sprite/charset extraction, memory dumps, filesystem stats, and firmware health checks.",
|
|
3512
|
+
"inputSchema": {
|
|
3513
|
+
"type": "object",
|
|
3514
|
+
"description": "Extraction operations available via the c64_extract tool.",
|
|
3515
|
+
"oneOf": [
|
|
3516
|
+
{
|
|
3517
|
+
"type": "object",
|
|
3518
|
+
"description": "Scan RAM for sprites and optionally export .spr files.",
|
|
3519
|
+
"properties": {
|
|
3520
|
+
"address": {
|
|
3521
|
+
"type": "string",
|
|
3522
|
+
"description": "Start address ($HHHH or decimal)",
|
|
3523
|
+
"minLength": 1
|
|
3524
|
+
},
|
|
3525
|
+
"length": {
|
|
3526
|
+
"type": "integer",
|
|
3527
|
+
"description": "Number of bytes to scan",
|
|
3528
|
+
"minimum": 63,
|
|
3529
|
+
"maximum": 65536
|
|
3530
|
+
},
|
|
3531
|
+
"stride": {
|
|
3532
|
+
"type": [
|
|
3533
|
+
"integer",
|
|
3534
|
+
"null"
|
|
3535
|
+
],
|
|
3536
|
+
"description": "Stride between sprite candidates in bytes",
|
|
3537
|
+
"minimum": 1,
|
|
3538
|
+
"default": 64
|
|
3539
|
+
},
|
|
3540
|
+
"maxSprites": {
|
|
3541
|
+
"type": [
|
|
3542
|
+
"integer",
|
|
3543
|
+
"null"
|
|
3544
|
+
],
|
|
3545
|
+
"description": "Maximum sprites to return",
|
|
3546
|
+
"minimum": 1,
|
|
3547
|
+
"maximum": 256,
|
|
3548
|
+
"default": 16
|
|
3549
|
+
},
|
|
3550
|
+
"minNonZeroRows": {
|
|
3551
|
+
"type": [
|
|
3552
|
+
"integer",
|
|
3553
|
+
"null"
|
|
3554
|
+
],
|
|
3555
|
+
"description": "Minimum non-empty rows required",
|
|
3556
|
+
"minimum": 1,
|
|
3557
|
+
"maximum": 21,
|
|
3558
|
+
"default": 4
|
|
3559
|
+
},
|
|
3560
|
+
"minSetBits": {
|
|
3561
|
+
"type": [
|
|
3562
|
+
"integer",
|
|
3563
|
+
"null"
|
|
3564
|
+
],
|
|
3565
|
+
"description": "Minimum number of set bits required",
|
|
3566
|
+
"minimum": 1,
|
|
3567
|
+
"maximum": 504,
|
|
3568
|
+
"default": 12
|
|
3569
|
+
},
|
|
3570
|
+
"includeBase64": {
|
|
3571
|
+
"type": [
|
|
3572
|
+
"boolean",
|
|
3573
|
+
"null"
|
|
3574
|
+
],
|
|
3575
|
+
"description": "Include base64 data in response",
|
|
3576
|
+
"default": true
|
|
3577
|
+
},
|
|
3578
|
+
"outputDir": {
|
|
3579
|
+
"type": [
|
|
3580
|
+
"string",
|
|
3581
|
+
"null"
|
|
3582
|
+
],
|
|
3583
|
+
"description": "Directory to write .spr files",
|
|
3584
|
+
"minLength": 1
|
|
3585
|
+
},
|
|
3586
|
+
"pauseDuringRead": {
|
|
3587
|
+
"type": [
|
|
3588
|
+
"boolean",
|
|
3589
|
+
"null"
|
|
3590
|
+
],
|
|
3591
|
+
"description": "Pause the machine during memory read",
|
|
3592
|
+
"default": true
|
|
3593
|
+
},
|
|
3594
|
+
"op": {
|
|
3595
|
+
"const": "sprites"
|
|
3596
|
+
}
|
|
3597
|
+
},
|
|
3598
|
+
"required": [
|
|
3599
|
+
"address",
|
|
3600
|
+
"length",
|
|
3601
|
+
"op"
|
|
3602
|
+
],
|
|
3603
|
+
"additionalProperties": false
|
|
3604
|
+
},
|
|
3605
|
+
{
|
|
3606
|
+
"type": "object",
|
|
3607
|
+
"description": "Locate and extract 2KB character sets from RAM.",
|
|
3608
|
+
"properties": {
|
|
3609
|
+
"address": {
|
|
3610
|
+
"type": [
|
|
3611
|
+
"string",
|
|
3612
|
+
"null"
|
|
3613
|
+
],
|
|
3614
|
+
"description": "Start address to scan ($HHHH or decimal). If not provided, scans common locations.",
|
|
3615
|
+
"minLength": 1
|
|
3616
|
+
},
|
|
3617
|
+
"scanRange": {
|
|
3618
|
+
"type": [
|
|
3619
|
+
"string",
|
|
3620
|
+
"null"
|
|
3621
|
+
],
|
|
3622
|
+
"description": "Range to scan if address not provided: 'common' or 'full'",
|
|
3623
|
+
"enum": [
|
|
3624
|
+
"common",
|
|
3625
|
+
"full"
|
|
3626
|
+
],
|
|
3627
|
+
"default": "common"
|
|
3628
|
+
},
|
|
3629
|
+
"outputPath": {
|
|
3630
|
+
"type": [
|
|
3631
|
+
"string",
|
|
3632
|
+
"null"
|
|
3633
|
+
],
|
|
3634
|
+
"description": "File path to write charset binary",
|
|
3635
|
+
"minLength": 1
|
|
3636
|
+
},
|
|
3637
|
+
"pauseDuringRead": {
|
|
3638
|
+
"type": [
|
|
3639
|
+
"boolean",
|
|
3640
|
+
"null"
|
|
3641
|
+
],
|
|
3642
|
+
"description": "Pause the machine during memory read",
|
|
3643
|
+
"default": true
|
|
3644
|
+
},
|
|
3645
|
+
"minNonEmptyChars": {
|
|
3646
|
+
"type": [
|
|
3647
|
+
"integer",
|
|
3648
|
+
"null"
|
|
3649
|
+
],
|
|
3650
|
+
"description": "Minimum non-empty characters required",
|
|
3651
|
+
"minimum": 1,
|
|
3652
|
+
"maximum": 256,
|
|
3653
|
+
"default": 32
|
|
3654
|
+
},
|
|
3655
|
+
"minEntropy": {
|
|
3656
|
+
"type": [
|
|
3657
|
+
"number",
|
|
3658
|
+
"null"
|
|
3659
|
+
],
|
|
3660
|
+
"description": "Minimum average entropy threshold",
|
|
3661
|
+
"minimum": 0,
|
|
3662
|
+
"maximum": 1,
|
|
3663
|
+
"default": 0.3
|
|
3664
|
+
},
|
|
3665
|
+
"op": {
|
|
3666
|
+
"const": "charset"
|
|
3667
|
+
}
|
|
3668
|
+
},
|
|
3669
|
+
"additionalProperties": false,
|
|
3670
|
+
"required": [
|
|
3671
|
+
"op"
|
|
3672
|
+
]
|
|
3673
|
+
},
|
|
3674
|
+
{
|
|
3675
|
+
"type": "object",
|
|
3676
|
+
"description": "Dump a RAM range to hex or binary files with manifest metadata.",
|
|
3677
|
+
"properties": {
|
|
3678
|
+
"address": {
|
|
3679
|
+
"type": "string",
|
|
3680
|
+
"description": "Start address ($HHHH or decimal)",
|
|
3681
|
+
"minLength": 1
|
|
3682
|
+
},
|
|
3683
|
+
"length": {
|
|
3684
|
+
"type": "integer",
|
|
3685
|
+
"description": "Number of bytes to dump",
|
|
3686
|
+
"minimum": 1,
|
|
3687
|
+
"maximum": 65536
|
|
3688
|
+
},
|
|
3689
|
+
"outputPath": {
|
|
3690
|
+
"type": "string",
|
|
3691
|
+
"description": "Destination file path",
|
|
3692
|
+
"minLength": 1
|
|
3693
|
+
},
|
|
3694
|
+
"format": {
|
|
3695
|
+
"type": [
|
|
3696
|
+
"string",
|
|
3697
|
+
"null"
|
|
3698
|
+
],
|
|
3699
|
+
"description": "Output format: hex|binary",
|
|
3700
|
+
"enum": [
|
|
3701
|
+
"hex",
|
|
3702
|
+
"binary"
|
|
3703
|
+
],
|
|
3704
|
+
"default": "hex"
|
|
3705
|
+
},
|
|
3706
|
+
"chunkSize": {
|
|
3707
|
+
"type": [
|
|
3708
|
+
"integer",
|
|
3709
|
+
"null"
|
|
3710
|
+
],
|
|
3711
|
+
"description": "Chunk size for reads",
|
|
3712
|
+
"minimum": 1,
|
|
3713
|
+
"maximum": 4096,
|
|
3714
|
+
"default": 512
|
|
3715
|
+
},
|
|
3716
|
+
"pauseDuringRead": {
|
|
3717
|
+
"type": [
|
|
3718
|
+
"boolean",
|
|
3719
|
+
"null"
|
|
3720
|
+
],
|
|
3721
|
+
"description": "Pause/resume around dump",
|
|
3722
|
+
"default": true
|
|
3723
|
+
},
|
|
3724
|
+
"retries": {
|
|
3725
|
+
"type": [
|
|
3726
|
+
"integer",
|
|
3727
|
+
"null"
|
|
3728
|
+
],
|
|
3729
|
+
"description": "Retries per chunk on failure",
|
|
3730
|
+
"minimum": 0,
|
|
3731
|
+
"default": 1
|
|
3732
|
+
},
|
|
3733
|
+
"op": {
|
|
3734
|
+
"const": "memory_dump"
|
|
3735
|
+
}
|
|
3736
|
+
},
|
|
3737
|
+
"required": [
|
|
3738
|
+
"address",
|
|
3739
|
+
"length",
|
|
3740
|
+
"outputPath",
|
|
3741
|
+
"op"
|
|
3742
|
+
],
|
|
3743
|
+
"additionalProperties": false
|
|
3744
|
+
},
|
|
3745
|
+
{
|
|
3746
|
+
"type": "object",
|
|
3747
|
+
"description": "Walk the filesystem and aggregate counts/bytes by extension.",
|
|
3748
|
+
"properties": {
|
|
3749
|
+
"root": {
|
|
3750
|
+
"type": [
|
|
3751
|
+
"string",
|
|
3752
|
+
"null"
|
|
3753
|
+
],
|
|
3754
|
+
"description": "Root path to scan",
|
|
3755
|
+
"minLength": 1,
|
|
3756
|
+
"default": "/"
|
|
3757
|
+
},
|
|
3758
|
+
"extensions": {
|
|
3759
|
+
"type": [
|
|
3760
|
+
"array",
|
|
3761
|
+
"null"
|
|
3762
|
+
],
|
|
3763
|
+
"items": {
|
|
3764
|
+
"type": "string",
|
|
3765
|
+
"description": "Limit to these extensions (without dot)",
|
|
3766
|
+
"minLength": 1
|
|
3767
|
+
}
|
|
3768
|
+
},
|
|
3769
|
+
"includeContainers": {
|
|
3770
|
+
"type": [
|
|
3771
|
+
"boolean",
|
|
3772
|
+
"null"
|
|
3773
|
+
],
|
|
3774
|
+
"description": "Include container images (d64/d81/etc.) in extension stats",
|
|
3775
|
+
"default": true
|
|
3776
|
+
},
|
|
3777
|
+
"maxSamplesPerExtension": {
|
|
3778
|
+
"type": [
|
|
3779
|
+
"integer",
|
|
3780
|
+
"null"
|
|
3781
|
+
],
|
|
3782
|
+
"description": "Number of sample paths to keep per extension",
|
|
3783
|
+
"minimum": 1,
|
|
3784
|
+
"maximum": 10,
|
|
3785
|
+
"default": 3
|
|
3786
|
+
},
|
|
3787
|
+
"op": {
|
|
3788
|
+
"const": "fs_stats"
|
|
3789
|
+
}
|
|
3790
|
+
},
|
|
3791
|
+
"additionalProperties": false,
|
|
3792
|
+
"required": [
|
|
3793
|
+
"op"
|
|
3794
|
+
]
|
|
3795
|
+
},
|
|
3796
|
+
{
|
|
3797
|
+
"type": "object",
|
|
3798
|
+
"description": "Run firmware readiness checks and report status metrics.",
|
|
3799
|
+
"properties": {
|
|
3800
|
+
"op": {
|
|
3801
|
+
"const": "firmware_health"
|
|
3802
|
+
}
|
|
3803
|
+
},
|
|
3804
|
+
"additionalProperties": false,
|
|
3805
|
+
"required": [
|
|
3806
|
+
"op"
|
|
3807
|
+
]
|
|
3808
|
+
}
|
|
3809
|
+
],
|
|
3810
|
+
"discriminator": {
|
|
3811
|
+
"propertyName": "op"
|
|
3812
|
+
}
|
|
3813
|
+
},
|
|
3814
|
+
"_meta": {
|
|
3815
|
+
"domain": "extract",
|
|
3816
|
+
"summary": "Export sprites or charsets, dump RAM, compute filesystem stats, or run firmware health checks.",
|
|
3817
|
+
"lifecycle": "request-response",
|
|
3818
|
+
"resources": [
|
|
3819
|
+
"c64://context/bootstrap",
|
|
3820
|
+
"c64://specs/basic",
|
|
3821
|
+
"c64://specs/assembly"
|
|
3822
|
+
],
|
|
3823
|
+
"prompts": [],
|
|
3824
|
+
"examples": [
|
|
3825
|
+
{
|
|
3826
|
+
"name": "Dump RAM to file",
|
|
3827
|
+
"description": "Write $0400-$07FF to hex file",
|
|
3828
|
+
"arguments": {
|
|
3829
|
+
"op": "memory_dump",
|
|
3830
|
+
"address": "$0400",
|
|
3831
|
+
"length": 1024,
|
|
3832
|
+
"outputPath": "./dumps/screen.hex"
|
|
3833
|
+
}
|
|
3834
|
+
},
|
|
3835
|
+
{
|
|
3836
|
+
"name": "Scan sprites",
|
|
3837
|
+
"description": "Scan $2000 for sprites",
|
|
3838
|
+
"arguments": {
|
|
3839
|
+
"op": "sprites",
|
|
3840
|
+
"address": "$2000",
|
|
3841
|
+
"length": 2048
|
|
3842
|
+
}
|
|
3843
|
+
}
|
|
3844
|
+
],
|
|
3845
|
+
"tags": [
|
|
3846
|
+
"extract",
|
|
3847
|
+
"diagnostics",
|
|
3848
|
+
"grouped"
|
|
3849
|
+
],
|
|
3850
|
+
"workflowHints": [
|
|
3851
|
+
"Pause the machine when advised so dumps and sprite scans remain stable.",
|
|
3852
|
+
"Summarise output file paths or sample counts so users can inspect artifacts quickly."
|
|
3853
|
+
],
|
|
3854
|
+
"platforms": [
|
|
3855
|
+
"c64u"
|
|
3856
|
+
]
|
|
3857
|
+
}
|
|
3858
|
+
},
|
|
3859
|
+
{
|
|
3860
|
+
"name": "c64_stream",
|
|
3861
|
+
"title": "Start or stop audio/video/debug streaming in a single tool.",
|
|
3862
|
+
"description": "Grouped entry point for starting and stopping Ultimate streaming sessions.",
|
|
3863
|
+
"inputSchema": {
|
|
3864
|
+
"type": "object",
|
|
3865
|
+
"description": "Streaming operations available via the c64_stream tool.",
|
|
3866
|
+
"oneOf": [
|
|
3867
|
+
{
|
|
3868
|
+
"type": "object",
|
|
3869
|
+
"description": "Start an Ultimate streaming session toward a host:port target.",
|
|
3870
|
+
"properties": {
|
|
3871
|
+
"stream": {
|
|
3872
|
+
"type": "string",
|
|
3873
|
+
"description": "Stream type to control (video/audio/debug).",
|
|
3874
|
+
"enum": [
|
|
3875
|
+
"video",
|
|
3876
|
+
"audio",
|
|
3877
|
+
"debug"
|
|
3878
|
+
]
|
|
3879
|
+
},
|
|
3880
|
+
"target": {
|
|
3881
|
+
"type": "string",
|
|
3882
|
+
"description": "Destination host:port or UDP target understood by the firmware.",
|
|
3883
|
+
"minLength": 3
|
|
3884
|
+
},
|
|
3885
|
+
"op": {
|
|
3886
|
+
"const": "start"
|
|
3887
|
+
}
|
|
3888
|
+
},
|
|
3889
|
+
"required": [
|
|
3890
|
+
"stream",
|
|
3891
|
+
"target",
|
|
3892
|
+
"op"
|
|
3893
|
+
],
|
|
3894
|
+
"additionalProperties": false
|
|
3895
|
+
},
|
|
3896
|
+
{
|
|
3897
|
+
"type": "object",
|
|
3898
|
+
"description": "Stop an active Ultimate streaming session.",
|
|
3899
|
+
"properties": {
|
|
3900
|
+
"stream": {
|
|
3901
|
+
"type": "string",
|
|
3902
|
+
"description": "Stream type to control (video/audio/debug).",
|
|
3903
|
+
"enum": [
|
|
3904
|
+
"video",
|
|
3905
|
+
"audio",
|
|
3906
|
+
"debug"
|
|
3907
|
+
]
|
|
3908
|
+
},
|
|
3909
|
+
"op": {
|
|
3910
|
+
"const": "stop"
|
|
3911
|
+
}
|
|
3912
|
+
},
|
|
3913
|
+
"required": [
|
|
3914
|
+
"stream",
|
|
3915
|
+
"op"
|
|
3916
|
+
],
|
|
3917
|
+
"additionalProperties": false
|
|
3918
|
+
}
|
|
3919
|
+
],
|
|
3920
|
+
"discriminator": {
|
|
3921
|
+
"propertyName": "op"
|
|
3922
|
+
}
|
|
3923
|
+
},
|
|
3924
|
+
"_meta": {
|
|
3925
|
+
"domain": "stream",
|
|
3926
|
+
"summary": "Start or stop audio/video/debug streaming in a single tool.",
|
|
3927
|
+
"lifecycle": "request-response",
|
|
3928
|
+
"resources": [
|
|
3929
|
+
"c64://docs/index",
|
|
3930
|
+
"c64://specs/sid"
|
|
3931
|
+
],
|
|
3932
|
+
"prompts": [
|
|
3933
|
+
"sid-music"
|
|
3934
|
+
],
|
|
3935
|
+
"examples": [
|
|
3936
|
+
{
|
|
3937
|
+
"name": "Start audio stream",
|
|
3938
|
+
"description": "Send audio to localhost",
|
|
3939
|
+
"arguments": {
|
|
3940
|
+
"op": "start",
|
|
3941
|
+
"stream": "audio",
|
|
3942
|
+
"target": "127.0.0.1:9000"
|
|
3943
|
+
}
|
|
3944
|
+
},
|
|
3945
|
+
{
|
|
3946
|
+
"name": "Stop audio stream",
|
|
3947
|
+
"description": "Stop streaming",
|
|
3948
|
+
"arguments": {
|
|
3949
|
+
"op": "stop",
|
|
3950
|
+
"stream": "audio"
|
|
3951
|
+
}
|
|
3952
|
+
}
|
|
3953
|
+
],
|
|
3954
|
+
"tags": [
|
|
3955
|
+
"stream",
|
|
3956
|
+
"monitor",
|
|
3957
|
+
"grouped"
|
|
3958
|
+
],
|
|
3959
|
+
"workflowHints": [
|
|
3960
|
+
"Confirm stream targets for the user so they can connect their tooling.",
|
|
3961
|
+
"Remind users to stop streams when capture completes to free resources."
|
|
3962
|
+
],
|
|
3963
|
+
"platforms": [
|
|
3964
|
+
"c64u"
|
|
3965
|
+
]
|
|
3966
|
+
}
|
|
3967
|
+
},
|
|
3968
|
+
{
|
|
3969
|
+
"name": "c64_debug",
|
|
3970
|
+
"title": "Manage breakpoints, inspect registers, and step through code on the VICE backend.",
|
|
3971
|
+
"description": "Grouped entry point for VICE debugger operations (breakpoints, registers, stepping).",
|
|
3972
|
+
"inputSchema": {
|
|
3973
|
+
"type": "object",
|
|
3974
|
+
"description": "Available debugger operations.",
|
|
3975
|
+
"oneOf": [
|
|
3976
|
+
{
|
|
3977
|
+
"type": "object",
|
|
3978
|
+
"description": "List all active VICE checkpoints (breakpoints).",
|
|
3979
|
+
"properties": {
|
|
3980
|
+
"op": {
|
|
3981
|
+
"const": "list_checkpoints"
|
|
3982
|
+
}
|
|
3983
|
+
},
|
|
3984
|
+
"required": [
|
|
3985
|
+
"op"
|
|
3986
|
+
],
|
|
3987
|
+
"additionalProperties": false
|
|
3988
|
+
},
|
|
3989
|
+
{
|
|
3990
|
+
"type": "object",
|
|
3991
|
+
"description": "Fetch a single checkpoint by id.",
|
|
3992
|
+
"properties": {
|
|
3993
|
+
"op": {
|
|
3994
|
+
"const": "get_checkpoint"
|
|
3995
|
+
},
|
|
3996
|
+
"id": {
|
|
3997
|
+
"type": "integer",
|
|
3998
|
+
"description": "Debugger checkpoint identifier.",
|
|
3999
|
+
"minimum": 1
|
|
4000
|
+
}
|
|
4001
|
+
},
|
|
4002
|
+
"required": [
|
|
4003
|
+
"op",
|
|
4004
|
+
"id"
|
|
4005
|
+
],
|
|
4006
|
+
"additionalProperties": false
|
|
4007
|
+
},
|
|
4008
|
+
{
|
|
4009
|
+
"type": "object",
|
|
4010
|
+
"description": "Create a new checkpoint (breakpoint) in VICE.",
|
|
4011
|
+
"properties": {
|
|
4012
|
+
"op": {
|
|
4013
|
+
"const": "create_checkpoint"
|
|
4014
|
+
},
|
|
4015
|
+
"address": {
|
|
4016
|
+
"type": "string",
|
|
4017
|
+
"description": "Start address (e.g. $0801).",
|
|
4018
|
+
"minLength": 1
|
|
4019
|
+
},
|
|
4020
|
+
"endAddress": {
|
|
4021
|
+
"type": [
|
|
4022
|
+
"string",
|
|
4023
|
+
"null"
|
|
4024
|
+
],
|
|
4025
|
+
"description": "Optional end address for range.",
|
|
4026
|
+
"minLength": 1
|
|
4027
|
+
},
|
|
4028
|
+
"stopOnHit": {
|
|
4029
|
+
"type": [
|
|
4030
|
+
"boolean",
|
|
4031
|
+
"null"
|
|
4032
|
+
],
|
|
4033
|
+
"description": "Pause execution when hit (default true).",
|
|
4034
|
+
"default": true
|
|
4035
|
+
},
|
|
4036
|
+
"enabled": {
|
|
4037
|
+
"type": [
|
|
4038
|
+
"boolean",
|
|
4039
|
+
"null"
|
|
4040
|
+
],
|
|
4041
|
+
"description": "Whether the checkpoint is enabled (default true).",
|
|
4042
|
+
"default": true
|
|
4043
|
+
},
|
|
4044
|
+
"temporary": {
|
|
4045
|
+
"type": [
|
|
4046
|
+
"boolean",
|
|
4047
|
+
"null"
|
|
4048
|
+
],
|
|
4049
|
+
"description": "Automatically remove after first hit.",
|
|
4050
|
+
"default": false
|
|
4051
|
+
},
|
|
4052
|
+
"operations": {
|
|
4053
|
+
"type": [
|
|
4054
|
+
"object",
|
|
4055
|
+
"null"
|
|
4056
|
+
],
|
|
4057
|
+
"description": "Checkpoint operation filters.",
|
|
4058
|
+
"properties": {
|
|
4059
|
+
"execute": {
|
|
4060
|
+
"type": [
|
|
4061
|
+
"boolean",
|
|
4062
|
+
"null"
|
|
4063
|
+
],
|
|
4064
|
+
"description": "Trigger on execute (default true).",
|
|
4065
|
+
"default": true
|
|
4066
|
+
},
|
|
4067
|
+
"load": {
|
|
4068
|
+
"type": [
|
|
4069
|
+
"boolean",
|
|
4070
|
+
"null"
|
|
4071
|
+
],
|
|
4072
|
+
"description": "Trigger on memory load.",
|
|
4073
|
+
"default": false
|
|
4074
|
+
},
|
|
4075
|
+
"store": {
|
|
4076
|
+
"type": [
|
|
4077
|
+
"boolean",
|
|
4078
|
+
"null"
|
|
4079
|
+
],
|
|
4080
|
+
"description": "Trigger on memory store.",
|
|
4081
|
+
"default": false
|
|
4082
|
+
}
|
|
4083
|
+
},
|
|
4084
|
+
"additionalProperties": false
|
|
4085
|
+
},
|
|
4086
|
+
"memspace": {
|
|
4087
|
+
"type": [
|
|
4088
|
+
"integer",
|
|
4089
|
+
"null"
|
|
4090
|
+
],
|
|
4091
|
+
"description": "VICE memory space (0=CPU, 1=Drive8, etc.).",
|
|
4092
|
+
"minimum": 0,
|
|
4093
|
+
"maximum": 4
|
|
4094
|
+
}
|
|
4095
|
+
},
|
|
4096
|
+
"required": [
|
|
4097
|
+
"op",
|
|
4098
|
+
"address"
|
|
4099
|
+
],
|
|
4100
|
+
"additionalProperties": false
|
|
4101
|
+
},
|
|
4102
|
+
{
|
|
4103
|
+
"type": "object",
|
|
4104
|
+
"description": "Remove a checkpoint by id.",
|
|
4105
|
+
"properties": {
|
|
4106
|
+
"op": {
|
|
4107
|
+
"const": "delete_checkpoint"
|
|
4108
|
+
},
|
|
4109
|
+
"id": {
|
|
4110
|
+
"type": "integer",
|
|
4111
|
+
"description": "Debugger checkpoint identifier.",
|
|
4112
|
+
"minimum": 1
|
|
4113
|
+
}
|
|
4114
|
+
},
|
|
4115
|
+
"required": [
|
|
4116
|
+
"op",
|
|
4117
|
+
"id"
|
|
4118
|
+
],
|
|
4119
|
+
"additionalProperties": false
|
|
4120
|
+
},
|
|
4121
|
+
{
|
|
4122
|
+
"type": "object",
|
|
4123
|
+
"description": "Enable or disable a checkpoint by id.",
|
|
4124
|
+
"properties": {
|
|
4125
|
+
"op": {
|
|
4126
|
+
"const": "toggle_checkpoint"
|
|
4127
|
+
},
|
|
4128
|
+
"id": {
|
|
4129
|
+
"type": "integer",
|
|
4130
|
+
"description": "Debugger checkpoint identifier.",
|
|
4131
|
+
"minimum": 1
|
|
4132
|
+
},
|
|
4133
|
+
"enabled": {
|
|
4134
|
+
"type": "boolean",
|
|
4135
|
+
"description": "Set to true to enable, false to disable."
|
|
4136
|
+
}
|
|
4137
|
+
},
|
|
4138
|
+
"required": [
|
|
4139
|
+
"op",
|
|
4140
|
+
"id",
|
|
4141
|
+
"enabled"
|
|
4142
|
+
],
|
|
4143
|
+
"additionalProperties": false
|
|
4144
|
+
},
|
|
4145
|
+
{
|
|
4146
|
+
"type": "object",
|
|
4147
|
+
"description": "Attach a conditional expression to a checkpoint.",
|
|
4148
|
+
"properties": {
|
|
4149
|
+
"op": {
|
|
4150
|
+
"const": "set_condition"
|
|
4151
|
+
},
|
|
4152
|
+
"id": {
|
|
4153
|
+
"type": "integer",
|
|
4154
|
+
"description": "Debugger checkpoint identifier.",
|
|
4155
|
+
"minimum": 1
|
|
4156
|
+
},
|
|
4157
|
+
"expression": {
|
|
4158
|
+
"type": "string",
|
|
4159
|
+
"description": "VICE monitor conditional expression.",
|
|
4160
|
+
"minLength": 1
|
|
4161
|
+
}
|
|
4162
|
+
},
|
|
4163
|
+
"required": [
|
|
4164
|
+
"op",
|
|
4165
|
+
"id",
|
|
4166
|
+
"expression"
|
|
4167
|
+
],
|
|
4168
|
+
"additionalProperties": false
|
|
4169
|
+
},
|
|
4170
|
+
{
|
|
4171
|
+
"type": "object",
|
|
4172
|
+
"description": "List available registers (metadata).",
|
|
4173
|
+
"properties": {
|
|
4174
|
+
"op": {
|
|
4175
|
+
"const": "list_registers"
|
|
4176
|
+
},
|
|
4177
|
+
"memspace": {
|
|
4178
|
+
"type": [
|
|
4179
|
+
"integer",
|
|
4180
|
+
"null"
|
|
4181
|
+
],
|
|
4182
|
+
"description": "VICE memory space (0=CPU, 1=Drive8, etc.).",
|
|
4183
|
+
"minimum": 0,
|
|
4184
|
+
"maximum": 4
|
|
4185
|
+
}
|
|
4186
|
+
},
|
|
4187
|
+
"required": [
|
|
4188
|
+
"op"
|
|
4189
|
+
],
|
|
4190
|
+
"additionalProperties": false
|
|
4191
|
+
},
|
|
4192
|
+
{
|
|
4193
|
+
"type": "object",
|
|
4194
|
+
"description": "Read register values, optionally filtered by name or id.",
|
|
4195
|
+
"properties": {
|
|
4196
|
+
"op": {
|
|
4197
|
+
"const": "get_registers"
|
|
4198
|
+
},
|
|
4199
|
+
"memspace": {
|
|
4200
|
+
"type": [
|
|
4201
|
+
"integer",
|
|
4202
|
+
"null"
|
|
4203
|
+
],
|
|
4204
|
+
"description": "VICE memory space (0=CPU, 1=Drive8, etc.).",
|
|
4205
|
+
"minimum": 0,
|
|
4206
|
+
"maximum": 4
|
|
4207
|
+
},
|
|
4208
|
+
"registers": {
|
|
4209
|
+
"type": [
|
|
4210
|
+
"array",
|
|
4211
|
+
"null"
|
|
4212
|
+
],
|
|
4213
|
+
"description": "Registers to include.",
|
|
4214
|
+
"items": {
|
|
4215
|
+
"type": "object",
|
|
4216
|
+
"description": "Selects a register by id or name.",
|
|
4217
|
+
"properties": {
|
|
4218
|
+
"name": {
|
|
4219
|
+
"type": [
|
|
4220
|
+
"string",
|
|
4221
|
+
"null"
|
|
4222
|
+
],
|
|
4223
|
+
"description": "Register name (case-insensitive)."
|
|
4224
|
+
},
|
|
4225
|
+
"id": {
|
|
4226
|
+
"type": [
|
|
4227
|
+
"integer",
|
|
4228
|
+
"null"
|
|
4229
|
+
],
|
|
4230
|
+
"description": "Register id.",
|
|
4231
|
+
"minimum": 0
|
|
4232
|
+
}
|
|
4233
|
+
},
|
|
4234
|
+
"additionalProperties": false
|
|
4235
|
+
}
|
|
4236
|
+
}
|
|
4237
|
+
},
|
|
4238
|
+
"required": [
|
|
4239
|
+
"op"
|
|
4240
|
+
],
|
|
4241
|
+
"additionalProperties": false
|
|
4242
|
+
},
|
|
4243
|
+
{
|
|
4244
|
+
"type": "object",
|
|
4245
|
+
"description": "Write register values.",
|
|
4246
|
+
"properties": {
|
|
4247
|
+
"op": {
|
|
4248
|
+
"const": "set_registers"
|
|
4249
|
+
},
|
|
4250
|
+
"memspace": {
|
|
4251
|
+
"type": [
|
|
4252
|
+
"integer",
|
|
4253
|
+
"null"
|
|
4254
|
+
],
|
|
4255
|
+
"description": "VICE memory space (0=CPU, 1=Drive8, etc.).",
|
|
4256
|
+
"minimum": 0,
|
|
4257
|
+
"maximum": 4
|
|
4258
|
+
},
|
|
4259
|
+
"writes": {
|
|
4260
|
+
"type": "array",
|
|
4261
|
+
"description": "Register writes to apply.",
|
|
4262
|
+
"items": {
|
|
4263
|
+
"type": "object",
|
|
4264
|
+
"description": "Register write descriptor.",
|
|
4265
|
+
"properties": {
|
|
4266
|
+
"name": {
|
|
4267
|
+
"type": [
|
|
4268
|
+
"string",
|
|
4269
|
+
"null"
|
|
4270
|
+
],
|
|
4271
|
+
"description": "Register name (case-insensitive)."
|
|
4272
|
+
},
|
|
4273
|
+
"id": {
|
|
4274
|
+
"type": [
|
|
4275
|
+
"integer",
|
|
4276
|
+
"null"
|
|
4277
|
+
],
|
|
4278
|
+
"description": "Register id.",
|
|
4279
|
+
"minimum": 0
|
|
4280
|
+
},
|
|
4281
|
+
"value": {
|
|
4282
|
+
"type": "integer",
|
|
4283
|
+
"description": "Value to write.",
|
|
4284
|
+
"minimum": 0
|
|
4285
|
+
}
|
|
4286
|
+
},
|
|
4287
|
+
"required": [
|
|
4288
|
+
"value"
|
|
4289
|
+
],
|
|
4290
|
+
"additionalProperties": false
|
|
4291
|
+
},
|
|
4292
|
+
"minItems": 1
|
|
4293
|
+
}
|
|
4294
|
+
},
|
|
4295
|
+
"required": [
|
|
4296
|
+
"op",
|
|
4297
|
+
"writes"
|
|
4298
|
+
],
|
|
4299
|
+
"additionalProperties": false
|
|
4300
|
+
},
|
|
4301
|
+
{
|
|
4302
|
+
"type": "object",
|
|
4303
|
+
"description": "Single-step CPU execution.",
|
|
4304
|
+
"properties": {
|
|
4305
|
+
"op": {
|
|
4306
|
+
"const": "step"
|
|
4307
|
+
},
|
|
4308
|
+
"count": {
|
|
4309
|
+
"type": [
|
|
4310
|
+
"integer",
|
|
4311
|
+
"null"
|
|
4312
|
+
],
|
|
4313
|
+
"description": "Number of instructions to step.",
|
|
4314
|
+
"minimum": 1,
|
|
4315
|
+
"default": 1
|
|
4316
|
+
},
|
|
4317
|
+
"mode": {
|
|
4318
|
+
"type": [
|
|
4319
|
+
"string",
|
|
4320
|
+
"null"
|
|
4321
|
+
],
|
|
4322
|
+
"description": "Step mode (into or over).",
|
|
4323
|
+
"enum": [
|
|
4324
|
+
"into",
|
|
4325
|
+
"over"
|
|
4326
|
+
]
|
|
4327
|
+
}
|
|
4328
|
+
},
|
|
4329
|
+
"required": [
|
|
4330
|
+
"op"
|
|
4331
|
+
],
|
|
4332
|
+
"additionalProperties": false
|
|
4333
|
+
},
|
|
4334
|
+
{
|
|
4335
|
+
"type": "object",
|
|
4336
|
+
"description": "Continue execution until the current routine returns.",
|
|
4337
|
+
"properties": {
|
|
4338
|
+
"op": {
|
|
4339
|
+
"const": "step_return"
|
|
4340
|
+
}
|
|
4341
|
+
},
|
|
4342
|
+
"required": [
|
|
4343
|
+
"op"
|
|
4344
|
+
],
|
|
4345
|
+
"additionalProperties": false
|
|
4346
|
+
}
|
|
4347
|
+
],
|
|
4348
|
+
"discriminator": {
|
|
4349
|
+
"propertyName": "op"
|
|
4350
|
+
}
|
|
4351
|
+
},
|
|
4352
|
+
"_meta": {
|
|
4353
|
+
"domain": "debug",
|
|
4354
|
+
"summary": "Manage breakpoints, inspect registers, and step through code on the VICE backend.",
|
|
4355
|
+
"lifecycle": "request-response",
|
|
4356
|
+
"resources": [
|
|
4357
|
+
"c64://specs/assembly",
|
|
4358
|
+
"c64://specs/memory-map"
|
|
4359
|
+
],
|
|
4360
|
+
"prompts": [
|
|
4361
|
+
"assembly-program",
|
|
4362
|
+
"memory-debug"
|
|
4363
|
+
],
|
|
4364
|
+
"examples": [
|
|
4365
|
+
{
|
|
4366
|
+
"name": "List checkpoints",
|
|
4367
|
+
"description": "Show all breakpoints defined in the emulator.",
|
|
4368
|
+
"arguments": {
|
|
4369
|
+
"op": "list_checkpoints"
|
|
4370
|
+
}
|
|
4371
|
+
},
|
|
4372
|
+
{
|
|
4373
|
+
"name": "Step over instruction",
|
|
4374
|
+
"description": "Advance one instruction without entering subroutines.",
|
|
4375
|
+
"arguments": {
|
|
4376
|
+
"op": "step",
|
|
4377
|
+
"mode": "over"
|
|
4378
|
+
}
|
|
4379
|
+
},
|
|
4380
|
+
{
|
|
4381
|
+
"name": "Inspect registers",
|
|
4382
|
+
"description": "Read CPU registers from memspace 0 (default).",
|
|
4383
|
+
"arguments": {
|
|
4384
|
+
"op": "get_registers"
|
|
4385
|
+
}
|
|
4386
|
+
}
|
|
4387
|
+
],
|
|
4388
|
+
"tags": [
|
|
4389
|
+
"debug",
|
|
4390
|
+
"vice",
|
|
4391
|
+
"breakpoint",
|
|
4392
|
+
"registers",
|
|
4393
|
+
"grouped"
|
|
4394
|
+
],
|
|
4395
|
+
"workflowHints": [
|
|
4396
|
+
"Use debugger tools after pausing execution so memory and screen reads remain stable.",
|
|
4397
|
+
"Communicate breakpoint effects clearly and restore original state when toggling them."
|
|
4398
|
+
],
|
|
4399
|
+
"platforms": [
|
|
4400
|
+
"vice"
|
|
4401
|
+
]
|
|
4402
|
+
}
|
|
4403
|
+
},
|
|
4404
|
+
{
|
|
4405
|
+
"name": "c64_vice",
|
|
4406
|
+
"title": "Reads or updates selected VICE resources that are safe to expose through MCP.",
|
|
4407
|
+
"description": "Grouped entry point for reading and updating selected VICE resources.",
|
|
4408
|
+
"inputSchema": {
|
|
4409
|
+
"type": "object",
|
|
4410
|
+
"description": "VICE emulator operations available via the c64_vice tool.",
|
|
4411
|
+
"oneOf": [
|
|
4412
|
+
{
|
|
4413
|
+
"type": "object",
|
|
4414
|
+
"description": "Read a VICE configuration resource (safe prefixes only).",
|
|
4415
|
+
"properties": {
|
|
4416
|
+
"op": {
|
|
4417
|
+
"const": "resource_get"
|
|
4418
|
+
},
|
|
4419
|
+
"name": {
|
|
4420
|
+
"type": "string",
|
|
4421
|
+
"description": "VICE resource name (example: SidEngine, C64Model).",
|
|
4422
|
+
"minLength": 1,
|
|
4423
|
+
"maxLength": 64,
|
|
4424
|
+
"pattern": "^[A-Z][A-Za-z0-9_.-]{0,63}$"
|
|
4425
|
+
}
|
|
4426
|
+
},
|
|
4427
|
+
"required": [
|
|
4428
|
+
"op",
|
|
4429
|
+
"name"
|
|
4430
|
+
],
|
|
4431
|
+
"additionalProperties": false
|
|
4432
|
+
},
|
|
4433
|
+
{
|
|
4434
|
+
"type": "object",
|
|
4435
|
+
"description": "Write a VICE configuration resource (safe prefixes only).",
|
|
4436
|
+
"properties": {
|
|
4437
|
+
"op": {
|
|
4438
|
+
"const": "resource_set"
|
|
4439
|
+
},
|
|
4440
|
+
"name": {
|
|
4441
|
+
"type": "string",
|
|
4442
|
+
"description": "VICE resource name (example: SidEngine, C64Model).",
|
|
4443
|
+
"minLength": 1,
|
|
4444
|
+
"maxLength": 64,
|
|
4445
|
+
"pattern": "^[A-Z][A-Za-z0-9_.-]{0,63}$"
|
|
4446
|
+
},
|
|
4447
|
+
"value": {
|
|
4448
|
+
"description": "VICE resource value (string or integer).",
|
|
4449
|
+
"oneOf": [
|
|
4450
|
+
{
|
|
4451
|
+
"type": "string"
|
|
4452
|
+
},
|
|
4453
|
+
{
|
|
4454
|
+
"type": "integer"
|
|
4455
|
+
}
|
|
4456
|
+
]
|
|
4457
|
+
}
|
|
4458
|
+
},
|
|
4459
|
+
"required": [
|
|
4460
|
+
"op",
|
|
4461
|
+
"name",
|
|
4462
|
+
"value"
|
|
4463
|
+
],
|
|
4464
|
+
"additionalProperties": false
|
|
4465
|
+
}
|
|
4466
|
+
],
|
|
4467
|
+
"discriminator": {
|
|
4468
|
+
"propertyName": "op"
|
|
4469
|
+
}
|
|
4470
|
+
},
|
|
4471
|
+
"_meta": {
|
|
4472
|
+
"domain": "vice",
|
|
4473
|
+
"summary": "Reads or updates selected VICE resources that are safe to expose through MCP.",
|
|
4474
|
+
"lifecycle": "request-response",
|
|
4475
|
+
"resources": [
|
|
4476
|
+
"c64://specs/memory-map"
|
|
4477
|
+
],
|
|
4478
|
+
"prompts": [
|
|
4479
|
+
"assembly-program",
|
|
4480
|
+
"memory-debug"
|
|
4481
|
+
],
|
|
4482
|
+
"examples": [
|
|
4483
|
+
{
|
|
4484
|
+
"name": "Read SID engine",
|
|
4485
|
+
"description": "Inspect the active SID emulation mode.",
|
|
4486
|
+
"arguments": {
|
|
4487
|
+
"op": "resource_get",
|
|
4488
|
+
"name": "SidEngine"
|
|
4489
|
+
}
|
|
4490
|
+
},
|
|
4491
|
+
{
|
|
4492
|
+
"name": "Set SID engine",
|
|
4493
|
+
"description": "Switch SID emulation to resid-fp (value 2).",
|
|
4494
|
+
"arguments": {
|
|
4495
|
+
"op": "resource_set",
|
|
4496
|
+
"name": "SidEngine",
|
|
4497
|
+
"value": 2
|
|
4498
|
+
}
|
|
4499
|
+
}
|
|
4500
|
+
],
|
|
4501
|
+
"tags": [
|
|
4502
|
+
"vice",
|
|
4503
|
+
"emulator",
|
|
4504
|
+
"resource",
|
|
4505
|
+
"grouped"
|
|
4506
|
+
],
|
|
4507
|
+
"workflowHints": [
|
|
4508
|
+
"Use emulator helpers when running on VICE to inspect or tweak safe runtime resources.",
|
|
4509
|
+
"Explain that resource changes only persist for the current emulator session unless saved in VICE manually."
|
|
4510
|
+
],
|
|
4511
|
+
"platforms": [
|
|
4512
|
+
"vice"
|
|
4513
|
+
]
|
|
4514
|
+
}
|
|
4515
|
+
}
|
|
4516
|
+
]
|
|
4517
|
+
}
|