c64bridge 1.0.7 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/skills/assembly-program/SKILL.md +37 -0
- package/.github/skills/basic-program/SKILL.md +40 -0
- package/.github/skills/cross-platform-demo/SKILL.md +32 -0
- package/.github/skills/drive-manager/SKILL.md +33 -0
- package/.github/skills/graphics-demo/SKILL.md +30 -0
- package/.github/skills/hello-world/SKILL.md +36 -0
- package/.github/skills/memory-debug/SKILL.md +32 -0
- package/.github/skills/pr-converge/SKILL.md +33 -0
- package/.github/skills/printer-job/SKILL.md +30 -0
- package/.github/skills/sid-music/SKILL.md +35 -0
- package/.github/skills/software-launch/SKILL.md +31 -0
- package/.github/skills/stream-control/SKILL.md +29 -0
- package/.github/skills/system-control/SKILL.md +32 -0
- package/AGENTS.md +28 -7
- package/README.md +69 -14
- package/data/assembly/assembly-spec.md +2 -0
- package/dist/c64Client.js +238 -60
- package/dist/config.js +48 -26
- package/dist/device.js +92 -37
- package/dist/diagnostics.js +62 -2
- package/dist/hostPaths.js +128 -0
- package/dist/loggingHttpClient.js +59 -1
- package/dist/mcp-server.js +409 -286
- package/dist/numericArg.js +55 -0
- package/dist/petscii.js +13 -1
- package/dist/platform.js +12 -3
- package/dist/prompts/registry.js +6 -1
- package/dist/tools/access.js +66 -0
- package/dist/tools/debug.js +6 -0
- package/dist/tools/developer.js +67 -34
- package/dist/tools/errors.js +54 -3
- package/dist/tools/input.js +23 -6
- package/dist/tools/machineControl.js +112 -20
- package/dist/tools/memory.js +135 -30
- package/dist/tools/meta/artifacts.js +5 -5
- package/dist/tools/meta/background.js +216 -54
- package/dist/tools/meta/compilation.js +6 -5
- package/dist/tools/meta/config.js +15 -6
- package/dist/tools/meta/filesystem.js +16 -14
- package/dist/tools/meta/graphics.js +48 -20
- package/dist/tools/meta/memory.js +45 -19
- package/dist/tools/meta/program.js +10 -7
- package/dist/tools/meta/screen.js +116 -25
- package/dist/tools/pauseGuard.js +23 -0
- package/dist/tools/pollValidator.js +53 -8
- package/dist/tools/programRunners.js +62 -18
- package/dist/tools/registry/batch.js +16 -4
- package/dist/tools/registry/config.js +9 -2
- package/dist/tools/registry/disk.js +12 -2
- package/dist/tools/registry/drive.js +3 -0
- package/dist/tools/registry/extract.js +3 -0
- package/dist/tools/registry/graphics.js +59 -6
- package/dist/tools/registry/index.js +17 -1
- package/dist/tools/registry/memory.js +11 -1
- package/dist/tools/registry/platform.js +4 -1
- package/dist/tools/registry/printer.js +2 -1
- package/dist/tools/registry/program.js +5 -1
- package/dist/tools/registry/rag.js +1 -0
- package/dist/tools/registry/sound.js +12 -1
- package/dist/tools/registry/stream.js +2 -1
- package/dist/tools/registry/system.js +8 -1
- package/dist/tools/schema.js +7 -7
- package/dist/tools/streaming.js +34 -4
- package/dist/tools/translation/assembler.js +247 -24
- package/dist/tools/translation/basicDetokenizer.js +80 -0
- package/dist/tools/translation/basicTokenizer.js +8 -3
- package/dist/tools/translation/disassembler.js +14 -0
- package/dist/tools/types.js +258 -7
- package/dist/tools/vice.js +5 -16
- package/dist/vicBitmap.js +1 -1
- package/dist/vice/mockServer.js +3 -0
- package/dist/vice/process.js +19 -0
- package/dist/vice/resourcePolicy.js +36 -0
- package/dist/vice/viceClient.js +22 -5
- package/doc/vice/support-matrix.md +17 -11
- package/mcp/schemas/c64_batch.schema.json +2 -1
- package/mcp/schemas/c64_config.schema.json +25 -475
- package/mcp/schemas/c64_debug.schema.json +3 -602
- package/mcp/schemas/c64_disk.schema.json +17 -344
- package/mcp/schemas/c64_drive.schema.json +2 -157
- package/mcp/schemas/c64_extract.schema.json +10 -364
- package/mcp/schemas/c64_graphics.schema.json +19 -426
- package/mcp/schemas/c64_input.schema.json +5 -318
- package/mcp/schemas/c64_memory.schema.json +23 -491
- package/mcp/schemas/c64_printer.schema.json +3 -258
- package/mcp/schemas/c64_program.schema.json +16 -491
- package/mcp/schemas/c64_rag.schema.json +1 -81
- package/mcp/schemas/c64_select_backend.schema.json +2 -36
- package/mcp/schemas/c64_sound.schema.json +20 -822
- package/mcp/schemas/c64_stream.schema.json +4 -75
- package/mcp/schemas/c64_system.schema.json +28 -348
- package/mcp/schemas/c64_vice.schema.json +2 -71
- package/mcp/server.json +1 -1
- package/mcp/tools.json +1983 -6910
- package/mcp.json +21 -1
- package/package.json +16 -8
- package/scripts/mockC64Server.mjs +44 -0
- package/scripts/run-coverage.mjs +27 -1
- package/scripts/smoke-run.sh +3 -2
- package/scripts/start.mjs +23 -1
- package/server.json +35 -2
- package/dist/.tsbuildinfo +0 -1
- package/doc/agent-state-spec.md +0 -243
- package/doc/audit/secret-handling.md +0 -61
- package/doc/plans/bun/baseline-metrics.md +0 -16
- package/doc/plans/bun/migration-checklist.md +0 -55
- package/doc/plans/bun/migration.md +0 -83
- package/doc/plans/improve-knowledge/notes.md +0 -43
- package/doc/plans/improve-knowledge/plan.md +0 -121
- package/doc/plans/improve-knowledge/rollout.md +0 -110
- package/doc/plans/meta-tools/README.md +0 -110
- package/doc/plans/meta-tools/analysis.md +0 -272
- package/doc/plans/meta-tools/catalog.md +0 -435
- package/doc/plans/meta-tools/notes.md +0 -192
- package/doc/plans/meta-tools/rollout.md +0 -368
- package/doc/plans/prompts/README.md +0 -96
- package/doc/plans/prompts/user-prompt-ideas.md +0 -147
- package/doc/plans/tool-consolidation/notes.md +0 -28
- package/doc/plans/tool-consolidation/plan.md +0 -169
- package/doc/plans/tool-consolidation/rollout.md +0 -104
- package/doc/plans/vice-backend-switch/plan.md +0 -486
- package/doc/plans/vice-backend-switch-2/plan.md +0 -48
- package/doc/plans/vice-support/notes.md +0 -63
- package/doc/plans/vice-support/plan.md +0 -88
- package/doc/plans/vice-support/rollout.md +0 -99
- package/doc/reviews/audit.md +0 -143
- package/doc/reviews/hardening/01-fable/prompt-handover.md +0 -125
- package/doc/reviews/hardening/01-fable/prompt.md +0 -98
- package/doc/reviews/hardening/01-fable/review-prompt.md +0 -468
- package/doc/reviews/hardening/01-fable/review.md +0 -1234
- package/doc/reviews/vice-support-review.md +0 -185
- package/scripts/compare-rest/rest-compare-2025-11-01T00-25-21-830Z.json +0 -2513
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"write",
|
|
9
9
|
"read_screen",
|
|
10
10
|
"wait_for_text",
|
|
11
|
+
"list_basic",
|
|
11
12
|
"disassemble",
|
|
12
13
|
"copy_memory",
|
|
13
14
|
"fill_memory",
|
|
@@ -24,10 +25,21 @@
|
|
|
24
25
|
},
|
|
25
26
|
"length": {
|
|
26
27
|
"type": "integer",
|
|
27
|
-
"description": "Number of bytes to read starting from the resolved address.",
|
|
28
|
+
"description": "Number of bytes to read starting from the resolved address. Limits depend on op.",
|
|
28
29
|
"minimum": 1,
|
|
29
|
-
"maximum":
|
|
30
|
-
|
|
30
|
+
"maximum": 16384
|
|
31
|
+
},
|
|
32
|
+
"format": {
|
|
33
|
+
"type": [
|
|
34
|
+
"string",
|
|
35
|
+
"null"
|
|
36
|
+
],
|
|
37
|
+
"description": "Output layout. hex (default) returns one hex string; dump adds a 16-bytes-per-line listing with addresses and a printable PETSCII column.",
|
|
38
|
+
"enum": [
|
|
39
|
+
"hex",
|
|
40
|
+
"dump"
|
|
41
|
+
],
|
|
42
|
+
"default": "hex"
|
|
31
43
|
},
|
|
32
44
|
"bytes": {
|
|
33
45
|
"type": "string",
|
|
@@ -65,7 +77,7 @@
|
|
|
65
77
|
},
|
|
66
78
|
"pattern": {
|
|
67
79
|
"type": "string",
|
|
68
|
-
"description": "Substring or regex to find",
|
|
80
|
+
"description": "Substring or regex to find (at most 200 characters; regex with nested quantifiers or backreferences is rejected) Limits depend on op.",
|
|
69
81
|
"minLength": 1
|
|
70
82
|
},
|
|
71
83
|
"isRegex": {
|
|
@@ -89,8 +101,9 @@
|
|
|
89
101
|
"integer",
|
|
90
102
|
"null"
|
|
91
103
|
],
|
|
92
|
-
"description": "Overall timeout in milliseconds",
|
|
104
|
+
"description": "Overall timeout in milliseconds (1-120000)",
|
|
93
105
|
"minimum": 1,
|
|
106
|
+
"maximum": 120000,
|
|
94
107
|
"default": 3000
|
|
95
108
|
},
|
|
96
109
|
"intervalMs": {
|
|
@@ -98,8 +111,8 @@
|
|
|
98
111
|
"integer",
|
|
99
112
|
"null"
|
|
100
113
|
],
|
|
101
|
-
"description": "Poll interval in milliseconds",
|
|
102
|
-
"minimum":
|
|
114
|
+
"description": "Poll interval in milliseconds (at least 20)",
|
|
115
|
+
"minimum": 20,
|
|
103
116
|
"default": 100
|
|
104
117
|
},
|
|
105
118
|
"instructionCount": {
|
|
@@ -107,7 +120,7 @@
|
|
|
107
120
|
"integer",
|
|
108
121
|
"null"
|
|
109
122
|
],
|
|
110
|
-
"description": "Stop after this many instructions
|
|
123
|
+
"description": "Stop after this many instructions. When given, it replaces length: 3 x instructionCount bytes are read (fewer near $FFFF).",
|
|
111
124
|
"minimum": 1,
|
|
112
125
|
"maximum": 512
|
|
113
126
|
},
|
|
@@ -178,487 +191,6 @@
|
|
|
178
191
|
"required": [
|
|
179
192
|
"op"
|
|
180
193
|
],
|
|
181
|
-
"description": "Memory operations available via the c64_memory tool.\n\nOperations:\n- read: Read a range of bytes and return a hex dump with address metadata. Required inputs: address. Optional inputs: length.\n- write: Write a hexadecimal byte sequence into RAM. Required inputs: address, bytes. Optional inputs: verify, expected, mask, abortOnMismatch.\n- read_screen: Return the current 40x25 text screen converted to ASCII. Required inputs: none.\n- wait_for_text: Poll the screen until a substring or regex appears, or timeout elapses. Required inputs: pattern. Optional inputs: isRegex, caseInsensitive, timeoutMs, intervalMs.\n- disassemble: Disassemble a memory region into annotated 6502/6510 instructions, including undocumented opcodes with canonical names. Symbol annotations from `.vs` files are applied when available. Works on C64U/U64, U2-family hardware, and VICE. Required inputs: address. Optional inputs: length, instructionCount.\n- copy_memory: Copy a RAM region to another address. Required inputs: source, dest, length.\n- fill_memory: Fill a memory range with a repeating byte pattern. Required inputs: address, length, pattern.\n- search_memory: Search for a byte pattern within a memory range and return matching addresses. Required inputs: startAddress, endAddress, pattern. Optional inputs: maxResults.\n- compare_memory: Compare two memory regions byte-by-byte and report differences. Required inputs: address1, address2, length. Optional inputs: maxDiffs.\n- save_memory: Dump a memory range to a local file, with an optional PRG load-address header. Required inputs: startAddress, endAddress, filePath. Optional inputs: asPrg.",
|
|
182
|
-
"additionalProperties": false
|
|
183
|
-
"x-c64bridge-operations": [
|
|
184
|
-
{
|
|
185
|
-
"op": "read",
|
|
186
|
-
"description": "Read a range of bytes and return a hex dump with address metadata.",
|
|
187
|
-
"required": [
|
|
188
|
-
"address"
|
|
189
|
-
],
|
|
190
|
-
"optional": [
|
|
191
|
-
"length"
|
|
192
|
-
],
|
|
193
|
-
"inputSchema": {
|
|
194
|
-
"type": "object",
|
|
195
|
-
"description": "Read a range of bytes and return a hex dump with address metadata.",
|
|
196
|
-
"properties": {
|
|
197
|
-
"address": {
|
|
198
|
-
"type": "string",
|
|
199
|
-
"description": "Start address expressed as $HHHH, decimal, or a documented symbol name.",
|
|
200
|
-
"minLength": 1
|
|
201
|
-
},
|
|
202
|
-
"length": {
|
|
203
|
-
"type": "integer",
|
|
204
|
-
"description": "Number of bytes to read starting from the resolved address.",
|
|
205
|
-
"minimum": 1,
|
|
206
|
-
"maximum": 4096,
|
|
207
|
-
"default": 256
|
|
208
|
-
},
|
|
209
|
-
"op": {
|
|
210
|
-
"const": "read"
|
|
211
|
-
}
|
|
212
|
-
},
|
|
213
|
-
"required": [
|
|
214
|
-
"address",
|
|
215
|
-
"op"
|
|
216
|
-
],
|
|
217
|
-
"additionalProperties": false
|
|
218
|
-
}
|
|
219
|
-
},
|
|
220
|
-
{
|
|
221
|
-
"op": "write",
|
|
222
|
-
"description": "Write a hexadecimal byte sequence into RAM.",
|
|
223
|
-
"required": [
|
|
224
|
-
"address",
|
|
225
|
-
"bytes"
|
|
226
|
-
],
|
|
227
|
-
"optional": [
|
|
228
|
-
"verify",
|
|
229
|
-
"expected",
|
|
230
|
-
"mask",
|
|
231
|
-
"abortOnMismatch"
|
|
232
|
-
],
|
|
233
|
-
"inputSchema": {
|
|
234
|
-
"type": "object",
|
|
235
|
-
"description": "Write a hexadecimal byte sequence into RAM.",
|
|
236
|
-
"properties": {
|
|
237
|
-
"address": {
|
|
238
|
-
"type": "string",
|
|
239
|
-
"description": "Destination address expressed as $HHHH, decimal, or a documented symbol name.",
|
|
240
|
-
"minLength": 1
|
|
241
|
-
},
|
|
242
|
-
"bytes": {
|
|
243
|
-
"type": "string",
|
|
244
|
-
"description": "Hex byte sequence like $AABBCC or AA BB CC to write starting at the resolved address.",
|
|
245
|
-
"minLength": 2,
|
|
246
|
-
"pattern": "^[\\s_0-9A-Fa-f$]+$"
|
|
247
|
-
},
|
|
248
|
-
"verify": {
|
|
249
|
-
"type": "boolean",
|
|
250
|
-
"description": "When true, verify the write by reading before and after the change; Ultimate hardware also pauses during verification.",
|
|
251
|
-
"default": false
|
|
252
|
-
},
|
|
253
|
-
"expected": {
|
|
254
|
-
"type": [
|
|
255
|
-
"string",
|
|
256
|
-
"null"
|
|
257
|
-
],
|
|
258
|
-
"description": "Optional hex data expected before the write (verifies before writing).",
|
|
259
|
-
"minLength": 2,
|
|
260
|
-
"pattern": "^[\\s_0-9A-Fa-f$]+$"
|
|
261
|
-
},
|
|
262
|
-
"mask": {
|
|
263
|
-
"type": [
|
|
264
|
-
"string",
|
|
265
|
-
"null"
|
|
266
|
-
],
|
|
267
|
-
"description": "Optional verification mask (hex); only bits set in the mask are compared.",
|
|
268
|
-
"minLength": 2,
|
|
269
|
-
"pattern": "^[\\s_0-9A-Fa-f$]+$"
|
|
270
|
-
},
|
|
271
|
-
"abortOnMismatch": {
|
|
272
|
-
"type": "boolean",
|
|
273
|
-
"description": "Abort the write when the pre-write verification fails.",
|
|
274
|
-
"default": true
|
|
275
|
-
},
|
|
276
|
-
"op": {
|
|
277
|
-
"const": "write"
|
|
278
|
-
}
|
|
279
|
-
},
|
|
280
|
-
"required": [
|
|
281
|
-
"address",
|
|
282
|
-
"bytes",
|
|
283
|
-
"op"
|
|
284
|
-
],
|
|
285
|
-
"additionalProperties": false
|
|
286
|
-
}
|
|
287
|
-
},
|
|
288
|
-
{
|
|
289
|
-
"op": "read_screen",
|
|
290
|
-
"description": "Return the current 40x25 text screen converted to ASCII.",
|
|
291
|
-
"required": [],
|
|
292
|
-
"optional": [],
|
|
293
|
-
"inputSchema": {
|
|
294
|
-
"type": "object",
|
|
295
|
-
"description": "Return the current 40x25 text screen converted to ASCII.",
|
|
296
|
-
"properties": {
|
|
297
|
-
"op": {
|
|
298
|
-
"const": "read_screen"
|
|
299
|
-
}
|
|
300
|
-
},
|
|
301
|
-
"additionalProperties": false,
|
|
302
|
-
"required": [
|
|
303
|
-
"op"
|
|
304
|
-
]
|
|
305
|
-
}
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
"op": "wait_for_text",
|
|
309
|
-
"description": "Poll the screen until a substring or regex appears, or timeout elapses.",
|
|
310
|
-
"required": [
|
|
311
|
-
"pattern"
|
|
312
|
-
],
|
|
313
|
-
"optional": [
|
|
314
|
-
"isRegex",
|
|
315
|
-
"caseInsensitive",
|
|
316
|
-
"timeoutMs",
|
|
317
|
-
"intervalMs"
|
|
318
|
-
],
|
|
319
|
-
"inputSchema": {
|
|
320
|
-
"type": "object",
|
|
321
|
-
"description": "Poll the screen until a substring or regex appears, or timeout elapses.",
|
|
322
|
-
"properties": {
|
|
323
|
-
"pattern": {
|
|
324
|
-
"type": "string",
|
|
325
|
-
"description": "Substring or regex to find",
|
|
326
|
-
"minLength": 1
|
|
327
|
-
},
|
|
328
|
-
"isRegex": {
|
|
329
|
-
"type": [
|
|
330
|
-
"boolean",
|
|
331
|
-
"null"
|
|
332
|
-
],
|
|
333
|
-
"description": "Interpret pattern as regular expression",
|
|
334
|
-
"default": false
|
|
335
|
-
},
|
|
336
|
-
"caseInsensitive": {
|
|
337
|
-
"type": [
|
|
338
|
-
"boolean",
|
|
339
|
-
"null"
|
|
340
|
-
],
|
|
341
|
-
"description": "Case-insensitive search",
|
|
342
|
-
"default": true
|
|
343
|
-
},
|
|
344
|
-
"timeoutMs": {
|
|
345
|
-
"type": [
|
|
346
|
-
"integer",
|
|
347
|
-
"null"
|
|
348
|
-
],
|
|
349
|
-
"description": "Overall timeout in milliseconds",
|
|
350
|
-
"minimum": 1,
|
|
351
|
-
"default": 3000
|
|
352
|
-
},
|
|
353
|
-
"intervalMs": {
|
|
354
|
-
"type": [
|
|
355
|
-
"integer",
|
|
356
|
-
"null"
|
|
357
|
-
],
|
|
358
|
-
"description": "Poll interval in milliseconds",
|
|
359
|
-
"minimum": 1,
|
|
360
|
-
"default": 100
|
|
361
|
-
},
|
|
362
|
-
"op": {
|
|
363
|
-
"const": "wait_for_text"
|
|
364
|
-
}
|
|
365
|
-
},
|
|
366
|
-
"required": [
|
|
367
|
-
"pattern",
|
|
368
|
-
"op"
|
|
369
|
-
],
|
|
370
|
-
"additionalProperties": false
|
|
371
|
-
}
|
|
372
|
-
},
|
|
373
|
-
{
|
|
374
|
-
"op": "disassemble",
|
|
375
|
-
"description": "Disassemble a memory region into annotated 6502/6510 instructions, including undocumented opcodes with canonical names. Symbol annotations from `.vs` files are applied when available. Works on C64U/U64, U2-family hardware, and VICE.",
|
|
376
|
-
"required": [
|
|
377
|
-
"address"
|
|
378
|
-
],
|
|
379
|
-
"optional": [
|
|
380
|
-
"length",
|
|
381
|
-
"instructionCount"
|
|
382
|
-
],
|
|
383
|
-
"inputSchema": {
|
|
384
|
-
"type": "object",
|
|
385
|
-
"description": "Disassemble a memory region into annotated 6502/6510 instructions, including undocumented opcodes with canonical names. Symbol annotations from `.vs` files are applied when available. Works on C64U/U64, U2-family hardware, and VICE.",
|
|
386
|
-
"properties": {
|
|
387
|
-
"address": {
|
|
388
|
-
"type": "string",
|
|
389
|
-
"description": "Start address as $HHHH, decimal, or symbol name.",
|
|
390
|
-
"minLength": 1
|
|
391
|
-
},
|
|
392
|
-
"length": {
|
|
393
|
-
"type": "integer",
|
|
394
|
-
"description": "Number of bytes to read and disassemble.",
|
|
395
|
-
"minimum": 1,
|
|
396
|
-
"maximum": 4096,
|
|
397
|
-
"default": 64
|
|
398
|
-
},
|
|
399
|
-
"instructionCount": {
|
|
400
|
-
"type": [
|
|
401
|
-
"integer",
|
|
402
|
-
"null"
|
|
403
|
-
],
|
|
404
|
-
"description": "Stop after this many instructions (overrides length as a termination condition).",
|
|
405
|
-
"minimum": 1,
|
|
406
|
-
"maximum": 512
|
|
407
|
-
},
|
|
408
|
-
"op": {
|
|
409
|
-
"const": "disassemble"
|
|
410
|
-
}
|
|
411
|
-
},
|
|
412
|
-
"required": [
|
|
413
|
-
"address",
|
|
414
|
-
"op"
|
|
415
|
-
],
|
|
416
|
-
"additionalProperties": false
|
|
417
|
-
}
|
|
418
|
-
},
|
|
419
|
-
{
|
|
420
|
-
"op": "copy_memory",
|
|
421
|
-
"description": "Copy a RAM region to another address.",
|
|
422
|
-
"required": [
|
|
423
|
-
"source",
|
|
424
|
-
"dest",
|
|
425
|
-
"length"
|
|
426
|
-
],
|
|
427
|
-
"optional": [],
|
|
428
|
-
"inputSchema": {
|
|
429
|
-
"type": "object",
|
|
430
|
-
"description": "Copy a RAM region to another address.",
|
|
431
|
-
"properties": {
|
|
432
|
-
"source": {
|
|
433
|
-
"type": "string",
|
|
434
|
-
"description": "Source start address ($HHHH, decimal, or symbol).",
|
|
435
|
-
"minLength": 1
|
|
436
|
-
},
|
|
437
|
-
"dest": {
|
|
438
|
-
"type": "string",
|
|
439
|
-
"description": "Destination start address.",
|
|
440
|
-
"minLength": 1
|
|
441
|
-
},
|
|
442
|
-
"length": {
|
|
443
|
-
"type": "integer",
|
|
444
|
-
"description": "Number of bytes to copy (1–16384).",
|
|
445
|
-
"minimum": 1,
|
|
446
|
-
"maximum": 16384
|
|
447
|
-
},
|
|
448
|
-
"op": {
|
|
449
|
-
"const": "copy_memory"
|
|
450
|
-
}
|
|
451
|
-
},
|
|
452
|
-
"required": [
|
|
453
|
-
"source",
|
|
454
|
-
"dest",
|
|
455
|
-
"length",
|
|
456
|
-
"op"
|
|
457
|
-
],
|
|
458
|
-
"additionalProperties": false
|
|
459
|
-
}
|
|
460
|
-
},
|
|
461
|
-
{
|
|
462
|
-
"op": "fill_memory",
|
|
463
|
-
"description": "Fill a memory range with a repeating byte pattern.",
|
|
464
|
-
"required": [
|
|
465
|
-
"address",
|
|
466
|
-
"length",
|
|
467
|
-
"pattern"
|
|
468
|
-
],
|
|
469
|
-
"optional": [],
|
|
470
|
-
"inputSchema": {
|
|
471
|
-
"type": "object",
|
|
472
|
-
"description": "Fill a memory range with a repeating byte pattern.",
|
|
473
|
-
"properties": {
|
|
474
|
-
"address": {
|
|
475
|
-
"type": "string",
|
|
476
|
-
"description": "Start address ($HHHH, decimal, or symbol).",
|
|
477
|
-
"minLength": 1
|
|
478
|
-
},
|
|
479
|
-
"length": {
|
|
480
|
-
"type": "integer",
|
|
481
|
-
"description": "Number of bytes to fill (1–16384).",
|
|
482
|
-
"minimum": 1,
|
|
483
|
-
"maximum": 16384
|
|
484
|
-
},
|
|
485
|
-
"pattern": {
|
|
486
|
-
"type": "string",
|
|
487
|
-
"description": "Hex bytes to repeat, e.g. 'FF' or 'AA 55'. Space-separated or run together.",
|
|
488
|
-
"minLength": 2,
|
|
489
|
-
"pattern": "^[\\s0-9A-Fa-f$]+$"
|
|
490
|
-
},
|
|
491
|
-
"op": {
|
|
492
|
-
"const": "fill_memory"
|
|
493
|
-
}
|
|
494
|
-
},
|
|
495
|
-
"required": [
|
|
496
|
-
"address",
|
|
497
|
-
"length",
|
|
498
|
-
"pattern",
|
|
499
|
-
"op"
|
|
500
|
-
],
|
|
501
|
-
"additionalProperties": false
|
|
502
|
-
}
|
|
503
|
-
},
|
|
504
|
-
{
|
|
505
|
-
"op": "search_memory",
|
|
506
|
-
"description": "Search for a byte pattern within a memory range and return matching addresses.",
|
|
507
|
-
"required": [
|
|
508
|
-
"startAddress",
|
|
509
|
-
"endAddress",
|
|
510
|
-
"pattern"
|
|
511
|
-
],
|
|
512
|
-
"optional": [
|
|
513
|
-
"maxResults"
|
|
514
|
-
],
|
|
515
|
-
"inputSchema": {
|
|
516
|
-
"type": "object",
|
|
517
|
-
"description": "Search for a byte pattern within a memory range and return matching addresses.",
|
|
518
|
-
"properties": {
|
|
519
|
-
"startAddress": {
|
|
520
|
-
"type": "string",
|
|
521
|
-
"description": "Start of search range ($HHHH, decimal, or symbol).",
|
|
522
|
-
"minLength": 1
|
|
523
|
-
},
|
|
524
|
-
"endAddress": {
|
|
525
|
-
"type": "string",
|
|
526
|
-
"description": "End of search range (inclusive).",
|
|
527
|
-
"minLength": 1
|
|
528
|
-
},
|
|
529
|
-
"pattern": {
|
|
530
|
-
"type": "string",
|
|
531
|
-
"description": "Hex bytes to find, e.g. 'A9 00' for LDA #$00.",
|
|
532
|
-
"minLength": 2,
|
|
533
|
-
"pattern": "^[\\s0-9A-Fa-f$]+$"
|
|
534
|
-
},
|
|
535
|
-
"maxResults": {
|
|
536
|
-
"type": [
|
|
537
|
-
"integer",
|
|
538
|
-
"null"
|
|
539
|
-
],
|
|
540
|
-
"description": "Maximum matches to return (default 10).",
|
|
541
|
-
"minimum": 1,
|
|
542
|
-
"maximum": 100,
|
|
543
|
-
"default": 10
|
|
544
|
-
},
|
|
545
|
-
"op": {
|
|
546
|
-
"const": "search_memory"
|
|
547
|
-
}
|
|
548
|
-
},
|
|
549
|
-
"required": [
|
|
550
|
-
"startAddress",
|
|
551
|
-
"endAddress",
|
|
552
|
-
"pattern",
|
|
553
|
-
"op"
|
|
554
|
-
],
|
|
555
|
-
"additionalProperties": false
|
|
556
|
-
}
|
|
557
|
-
},
|
|
558
|
-
{
|
|
559
|
-
"op": "compare_memory",
|
|
560
|
-
"description": "Compare two memory regions byte-by-byte and report differences.",
|
|
561
|
-
"required": [
|
|
562
|
-
"address1",
|
|
563
|
-
"address2",
|
|
564
|
-
"length"
|
|
565
|
-
],
|
|
566
|
-
"optional": [
|
|
567
|
-
"maxDiffs"
|
|
568
|
-
],
|
|
569
|
-
"inputSchema": {
|
|
570
|
-
"type": "object",
|
|
571
|
-
"description": "Compare two memory regions byte-by-byte and report differences.",
|
|
572
|
-
"properties": {
|
|
573
|
-
"address1": {
|
|
574
|
-
"type": "string",
|
|
575
|
-
"description": "First region start address.",
|
|
576
|
-
"minLength": 1
|
|
577
|
-
},
|
|
578
|
-
"address2": {
|
|
579
|
-
"type": "string",
|
|
580
|
-
"description": "Second region start address.",
|
|
581
|
-
"minLength": 1
|
|
582
|
-
},
|
|
583
|
-
"length": {
|
|
584
|
-
"type": "integer",
|
|
585
|
-
"description": "Number of bytes to compare (1–16384).",
|
|
586
|
-
"minimum": 1,
|
|
587
|
-
"maximum": 16384
|
|
588
|
-
},
|
|
589
|
-
"maxDiffs": {
|
|
590
|
-
"type": [
|
|
591
|
-
"integer",
|
|
592
|
-
"null"
|
|
593
|
-
],
|
|
594
|
-
"description": "Max differences to report (default 10).",
|
|
595
|
-
"minimum": 1,
|
|
596
|
-
"maximum": 200,
|
|
597
|
-
"default": 10
|
|
598
|
-
},
|
|
599
|
-
"op": {
|
|
600
|
-
"const": "compare_memory"
|
|
601
|
-
}
|
|
602
|
-
},
|
|
603
|
-
"required": [
|
|
604
|
-
"address1",
|
|
605
|
-
"address2",
|
|
606
|
-
"length",
|
|
607
|
-
"op"
|
|
608
|
-
],
|
|
609
|
-
"additionalProperties": false
|
|
610
|
-
}
|
|
611
|
-
},
|
|
612
|
-
{
|
|
613
|
-
"op": "save_memory",
|
|
614
|
-
"description": "Dump a memory range to a local file, with an optional PRG load-address header.",
|
|
615
|
-
"required": [
|
|
616
|
-
"startAddress",
|
|
617
|
-
"endAddress",
|
|
618
|
-
"filePath"
|
|
619
|
-
],
|
|
620
|
-
"optional": [
|
|
621
|
-
"asPrg"
|
|
622
|
-
],
|
|
623
|
-
"inputSchema": {
|
|
624
|
-
"type": "object",
|
|
625
|
-
"description": "Dump a memory range to a local file, with an optional PRG load-address header.",
|
|
626
|
-
"properties": {
|
|
627
|
-
"startAddress": {
|
|
628
|
-
"type": "string",
|
|
629
|
-
"description": "Start address of region to save.",
|
|
630
|
-
"minLength": 1
|
|
631
|
-
},
|
|
632
|
-
"endAddress": {
|
|
633
|
-
"type": "string",
|
|
634
|
-
"description": "End address (inclusive).",
|
|
635
|
-
"minLength": 1
|
|
636
|
-
},
|
|
637
|
-
"filePath": {
|
|
638
|
-
"type": "string",
|
|
639
|
-
"description": "Absolute or relative path for the output file.",
|
|
640
|
-
"minLength": 1
|
|
641
|
-
},
|
|
642
|
-
"asPrg": {
|
|
643
|
-
"type": [
|
|
644
|
-
"boolean",
|
|
645
|
-
"null"
|
|
646
|
-
],
|
|
647
|
-
"description": "Prepend a 2-byte little-endian load-address header (PRG format). Default: true.",
|
|
648
|
-
"default": true
|
|
649
|
-
},
|
|
650
|
-
"op": {
|
|
651
|
-
"const": "save_memory"
|
|
652
|
-
}
|
|
653
|
-
},
|
|
654
|
-
"required": [
|
|
655
|
-
"startAddress",
|
|
656
|
-
"endAddress",
|
|
657
|
-
"filePath",
|
|
658
|
-
"op"
|
|
659
|
-
],
|
|
660
|
-
"additionalProperties": false
|
|
661
|
-
}
|
|
662
|
-
}
|
|
663
|
-
]
|
|
194
|
+
"description": "Memory operations available via the c64_memory tool.\n\nOperations:\n- read: Read a range of bytes and return a hex dump with address metadata. Required inputs: address. Optional inputs: length, format.\n- write [write]: Write a hexadecimal byte sequence into RAM. Required inputs: address, bytes. Optional inputs: verify, expected, mask, abortOnMismatch.\n- read_screen: Return the current 40x25 text screen converted to ASCII. Required inputs: none.\n- wait_for_text: Poll the screen until a substring or regex appears, or timeout elapses. Required inputs: pattern. Optional inputs: isRegex, caseInsensitive, timeoutMs, intervalMs.\n- list_basic: List the BASIC program in memory as text: reads the $2B-$2E pointers, walks the line links and detokenises. Works on C64U/U64, U2-family hardware, and VICE. Required inputs: none.\n- disassemble: Disassemble a memory region into annotated 6502/6510 instructions, including undocumented opcodes with canonical names. Symbol annotations from `.vs` files are applied when available. Works on C64U/U64, U2-family hardware, and VICE. Required inputs: address. Optional inputs: length, instructionCount.\n- copy_memory [write]: Copy a RAM region to another address. Required inputs: source, dest, length.\n- fill_memory [write]: Fill a memory range with a repeating byte pattern. Required inputs: address, length, pattern.\n- search_memory: Search for a byte pattern within a memory range and return matching addresses. Required inputs: startAddress, endAddress, pattern. Optional inputs: maxResults.\n- compare_memory: Compare two memory regions byte-by-byte and report differences. Required inputs: address1, address2, length. Optional inputs: maxDiffs.\n- save_memory [write]: Dump a memory range to a local file, with an optional PRG load-address header. Required inputs: startAddress, endAddress, filePath. Optional inputs: asPrg.",
|
|
195
|
+
"additionalProperties": false
|
|
664
196
|
}
|