c64bridge 1.0.6 → 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.
Files changed (136) hide show
  1. package/.github/skills/assembly-program/SKILL.md +37 -0
  2. package/.github/skills/basic-program/SKILL.md +40 -0
  3. package/.github/skills/cross-platform-demo/SKILL.md +32 -0
  4. package/.github/skills/drive-manager/SKILL.md +33 -0
  5. package/.github/skills/graphics-demo/SKILL.md +30 -0
  6. package/.github/skills/hello-world/SKILL.md +36 -0
  7. package/.github/skills/memory-debug/SKILL.md +32 -0
  8. package/.github/skills/pr-converge/SKILL.md +33 -0
  9. package/.github/skills/printer-job/SKILL.md +30 -0
  10. package/.github/skills/sid-music/SKILL.md +35 -0
  11. package/.github/skills/software-launch/SKILL.md +31 -0
  12. package/.github/skills/stream-control/SKILL.md +29 -0
  13. package/.github/skills/system-control/SKILL.md +32 -0
  14. package/AGENTS.md +28 -7
  15. package/README.md +70 -15
  16. package/data/assembly/assembly-spec.md +2 -0
  17. package/dist/c64Client.js +238 -60
  18. package/dist/chargen.js +0 -4
  19. package/dist/config.js +53 -28
  20. package/dist/device.js +92 -37
  21. package/dist/diagnostics.js +66 -5
  22. package/dist/hostPaths.js +128 -0
  23. package/dist/logger.js +3 -2
  24. package/dist/loggingHttpClient.js +71 -2
  25. package/dist/mcp-server.js +416 -291
  26. package/dist/numericArg.js +55 -0
  27. package/dist/petscii.js +13 -6
  28. package/dist/platform.js +12 -3
  29. package/dist/prompts/registry.js +6 -1
  30. package/dist/redact.js +166 -0
  31. package/dist/tools/access.js +66 -0
  32. package/dist/tools/debug.js +6 -0
  33. package/dist/tools/developer.js +77 -36
  34. package/dist/tools/errors.js +54 -3
  35. package/dist/tools/input.js +25 -8
  36. package/dist/tools/machineControl.js +113 -21
  37. package/dist/tools/memory.js +135 -30
  38. package/dist/tools/meta/artifacts.js +5 -5
  39. package/dist/tools/meta/background.js +216 -54
  40. package/dist/tools/meta/compilation.js +6 -5
  41. package/dist/tools/meta/config.js +20 -10
  42. package/dist/tools/meta/configInventory.js +25 -2
  43. package/dist/tools/meta/diagnostics.js +2 -1
  44. package/dist/tools/meta/filesystem.js +16 -14
  45. package/dist/tools/meta/graphics.js +48 -20
  46. package/dist/tools/meta/memory.js +45 -19
  47. package/dist/tools/meta/program.js +10 -7
  48. package/dist/tools/meta/screen.js +116 -25
  49. package/dist/tools/pauseGuard.js +23 -0
  50. package/dist/tools/pollValidator.js +53 -8
  51. package/dist/tools/programRunners.js +62 -18
  52. package/dist/tools/registry/batch.js +17 -11
  53. package/dist/tools/registry/config.js +9 -2
  54. package/dist/tools/registry/disk.js +12 -2
  55. package/dist/tools/registry/drive.js +3 -0
  56. package/dist/tools/registry/extract.js +3 -0
  57. package/dist/tools/registry/graphics.js +59 -6
  58. package/dist/tools/registry/index.js +17 -1
  59. package/dist/tools/registry/memory.js +11 -1
  60. package/dist/tools/registry/platform.js +4 -1
  61. package/dist/tools/registry/printer.js +2 -1
  62. package/dist/tools/registry/program.js +5 -1
  63. package/dist/tools/registry/rag.js +1 -0
  64. package/dist/tools/registry/sound.js +12 -1
  65. package/dist/tools/registry/stream.js +2 -1
  66. package/dist/tools/registry/system.js +8 -1
  67. package/dist/tools/schema.js +7 -7
  68. package/dist/tools/streaming.js +34 -4
  69. package/dist/tools/translation/assembler.js +247 -24
  70. package/dist/tools/translation/basicDetokenizer.js +80 -0
  71. package/dist/tools/translation/basicTokenizer.js +8 -3
  72. package/dist/tools/translation/disassembler.js +14 -0
  73. package/dist/tools/types.js +258 -7
  74. package/dist/tools/vice.js +5 -16
  75. package/dist/vicBitmap.js +1 -1
  76. package/dist/vice/mockServer.js +3 -0
  77. package/dist/vice/process.js +19 -0
  78. package/dist/vice/resourcePolicy.js +36 -0
  79. package/dist/vice/viceClient.js +22 -5
  80. package/doc/vice/support-matrix.md +17 -11
  81. package/mcp/schemas/c64_batch.schema.json +2 -1
  82. package/mcp/schemas/c64_config.schema.json +33 -466
  83. package/mcp/schemas/c64_debug.schema.json +3 -602
  84. package/mcp/schemas/c64_disk.schema.json +17 -344
  85. package/mcp/schemas/c64_drive.schema.json +2 -157
  86. package/mcp/schemas/c64_extract.schema.json +10 -364
  87. package/mcp/schemas/c64_graphics.schema.json +19 -426
  88. package/mcp/schemas/c64_input.schema.json +5 -318
  89. package/mcp/schemas/c64_memory.schema.json +23 -491
  90. package/mcp/schemas/c64_printer.schema.json +3 -258
  91. package/mcp/schemas/c64_program.schema.json +16 -491
  92. package/mcp/schemas/c64_rag.schema.json +1 -81
  93. package/mcp/schemas/c64_select_backend.schema.json +2 -36
  94. package/mcp/schemas/c64_sound.schema.json +20 -822
  95. package/mcp/schemas/c64_stream.schema.json +4 -75
  96. package/mcp/schemas/c64_system.schema.json +28 -348
  97. package/mcp/schemas/c64_vice.schema.json +2 -71
  98. package/mcp/server.json +1 -1
  99. package/mcp/tools.json +1990 -6900
  100. package/mcp.json +21 -1
  101. package/package.json +19 -8
  102. package/scripts/mockC64Server.mjs +44 -0
  103. package/scripts/run-coverage.mjs +27 -1
  104. package/scripts/smoke-run.sh +3 -2
  105. package/scripts/start.mjs +23 -1
  106. package/server.json +53 -3
  107. package/dist/.tsbuildinfo +0 -1
  108. package/doc/agent-state-spec.md +0 -243
  109. package/doc/plans/bun/baseline-metrics.md +0 -16
  110. package/doc/plans/bun/migration-checklist.md +0 -55
  111. package/doc/plans/bun/migration.md +0 -83
  112. package/doc/plans/improve-knowledge/notes.md +0 -43
  113. package/doc/plans/improve-knowledge/plan.md +0 -121
  114. package/doc/plans/improve-knowledge/rollout.md +0 -110
  115. package/doc/plans/meta-tools/README.md +0 -110
  116. package/doc/plans/meta-tools/analysis.md +0 -272
  117. package/doc/plans/meta-tools/catalog.md +0 -435
  118. package/doc/plans/meta-tools/notes.md +0 -192
  119. package/doc/plans/meta-tools/rollout.md +0 -368
  120. package/doc/plans/prompts/README.md +0 -96
  121. package/doc/plans/prompts/user-prompt-ideas.md +0 -147
  122. package/doc/plans/tool-consolidation/notes.md +0 -28
  123. package/doc/plans/tool-consolidation/plan.md +0 -169
  124. package/doc/plans/tool-consolidation/rollout.md +0 -104
  125. package/doc/plans/vice-backend-switch/plan.md +0 -486
  126. package/doc/plans/vice-backend-switch-2/plan.md +0 -48
  127. package/doc/plans/vice-support/notes.md +0 -63
  128. package/doc/plans/vice-support/plan.md +0 -88
  129. package/doc/plans/vice-support/rollout.md +0 -99
  130. package/doc/reviews/audit.md +0 -143
  131. package/doc/reviews/hardening/01-fable/prompt-handover.md +0 -125
  132. package/doc/reviews/hardening/01-fable/prompt.md +0 -98
  133. package/doc/reviews/hardening/01-fable/review-prompt.md +0 -468
  134. package/doc/reviews/hardening/01-fable/review.md +0 -1234
  135. package/doc/reviews/vice-support-review.md +0 -185
  136. package/scripts/compare-rest/rest-compare-2025-11-01T00-25-21-830Z.json +0 -2513
@@ -9,7 +9,8 @@
9
9
  "unmount",
10
10
  "file_info",
11
11
  "create_image",
12
- "find_and_run"
12
+ "find_and_run",
13
+ "find_paths"
13
14
  ],
14
15
  "description": "Selects the operation."
15
16
  },
@@ -128,8 +129,7 @@
128
129
  "string",
129
130
  "null"
130
131
  ],
131
- "description": "Root path to search",
132
- "minLength": 1,
132
+ "description": "Root path to search Limits depend on op.",
133
133
  "default": "/"
134
134
  },
135
135
  "nameContains": {
@@ -146,7 +146,8 @@
146
146
  "type": "string",
147
147
  "description": "File extensions to include (without dot)",
148
148
  "minLength": 1
149
- }
149
+ },
150
+ "description": "Limits depend on op."
150
151
  },
151
152
  "caseInsensitive": {
152
153
  "type": [
@@ -186,349 +187,21 @@
186
187
  "minimum": 1,
187
188
  "maximum": 100,
188
189
  "default": 10
190
+ },
191
+ "maxResults": {
192
+ "type": [
193
+ "integer",
194
+ "null"
195
+ ],
196
+ "description": "Maximum results",
197
+ "minimum": 1,
198
+ "maximum": 1000,
199
+ "default": 100
189
200
  }
190
201
  },
191
202
  "required": [
192
203
  "op"
193
204
  ],
194
- "description": "Disk operations available via the c64_disk tool.\n\nOperations:\n- list_drives: List Ultimate drive slots and their mounted images. Required inputs: none.\n- mount: Mount a disk image with optional verification and retries. Required inputs: drive, image. Optional inputs: type, attachmentMode, driveMode, verify, powerOnIfNeeded, resetAfterMount, maxRetries, retryDelayMs.\n- unmount: Remove the mounted image from an Ultimate drive slot. Required inputs: drive.\n- file_info: Inspect metadata for a file on the Ultimate filesystem. Required inputs: path.\n- create_image: Create a blank disk image of the specified format. Required inputs: format, path. Optional inputs: diskname, tracks.\n- find_and_run: Search for a PRG/CRT by name substring and run the first match. Required inputs: nameContains. Optional inputs: root, extensions, caseInsensitive, sort, waitMs, captureCandidates.",
195
- "additionalProperties": false,
196
- "x-c64bridge-operations": [
197
- {
198
- "op": "list_drives",
199
- "description": "List Ultimate drive slots and their mounted images.",
200
- "required": [],
201
- "optional": [],
202
- "inputSchema": {
203
- "type": "object",
204
- "description": "List Ultimate drive slots and their mounted images.",
205
- "properties": {
206
- "op": {
207
- "const": "list_drives"
208
- }
209
- },
210
- "additionalProperties": false,
211
- "required": [
212
- "op"
213
- ]
214
- }
215
- },
216
- {
217
- "op": "mount",
218
- "description": "Mount a disk image with optional verification and retries.",
219
- "required": [
220
- "drive",
221
- "image"
222
- ],
223
- "optional": [
224
- "type",
225
- "attachmentMode",
226
- "driveMode",
227
- "verify",
228
- "powerOnIfNeeded",
229
- "resetAfterMount",
230
- "maxRetries",
231
- "retryDelayMs"
232
- ],
233
- "inputSchema": {
234
- "type": "object",
235
- "description": "Mount a disk image with optional verification and retries.",
236
- "properties": {
237
- "drive": {
238
- "type": "string",
239
- "description": "Drive identifier (for example drive8).",
240
- "minLength": 1
241
- },
242
- "image": {
243
- "type": "string",
244
- "description": "Absolute or Ultimate filesystem path to the disk image.",
245
- "minLength": 1
246
- },
247
- "type": {
248
- "type": [
249
- "string",
250
- "null"
251
- ],
252
- "description": "Override detected image type when firmware guesses incorrectly.",
253
- "enum": [
254
- "d64",
255
- "g64",
256
- "d71",
257
- "g71",
258
- "d81"
259
- ]
260
- },
261
- "attachmentMode": {
262
- "type": [
263
- "string",
264
- "null"
265
- ],
266
- "description": "Attachment mode controlling how the firmware treats the mounted image.",
267
- "enum": [
268
- "readwrite",
269
- "readonly",
270
- "unlinked"
271
- ]
272
- },
273
- "driveMode": {
274
- "type": [
275
- "string",
276
- "null"
277
- ],
278
- "description": "Drive emulation mode to switch to during verification.",
279
- "enum": [
280
- "1541",
281
- "1571",
282
- "1581"
283
- ]
284
- },
285
- "verify": {
286
- "type": "boolean",
287
- "description": "When true, power on/reset/verify using the reliability workflow.",
288
- "default": false
289
- },
290
- "powerOnIfNeeded": {
291
- "type": "boolean",
292
- "description": "Power on the drive automatically before mounting when verify=true.",
293
- "default": true
294
- },
295
- "resetAfterMount": {
296
- "type": "boolean",
297
- "description": "Issue a drive reset after mounting when verify=true.",
298
- "default": true
299
- },
300
- "maxRetries": {
301
- "type": "integer",
302
- "description": "Maximum number of mount retries when verify=true.",
303
- "minimum": 0,
304
- "maximum": 5,
305
- "default": 2
306
- },
307
- "retryDelayMs": {
308
- "type": "integer",
309
- "description": "Delay between mount retry attempts when verify=true.",
310
- "minimum": 0,
311
- "maximum": 5000,
312
- "default": 500
313
- },
314
- "op": {
315
- "const": "mount"
316
- }
317
- },
318
- "required": [
319
- "drive",
320
- "image",
321
- "op"
322
- ],
323
- "additionalProperties": false
324
- }
325
- },
326
- {
327
- "op": "unmount",
328
- "description": "Remove the mounted image from an Ultimate drive slot.",
329
- "required": [
330
- "drive"
331
- ],
332
- "optional": [],
333
- "inputSchema": {
334
- "type": "object",
335
- "description": "Remove the mounted image from an Ultimate drive slot.",
336
- "properties": {
337
- "drive": {
338
- "type": "string",
339
- "description": "Drive identifier such as drive8, drive9, or unit name defined in the Ultimate UI.",
340
- "minLength": 1
341
- },
342
- "op": {
343
- "const": "unmount"
344
- }
345
- },
346
- "required": [
347
- "drive",
348
- "op"
349
- ],
350
- "additionalProperties": false
351
- }
352
- },
353
- {
354
- "op": "file_info",
355
- "description": "Inspect metadata for a file on the Ultimate filesystem.",
356
- "required": [
357
- "path"
358
- ],
359
- "optional": [],
360
- "inputSchema": {
361
- "type": "object",
362
- "description": "Inspect metadata for a file on the Ultimate filesystem.",
363
- "properties": {
364
- "path": {
365
- "type": "string",
366
- "description": "Absolute or Ultimate filesystem path to the disk image to mount or manage.",
367
- "minLength": 1
368
- },
369
- "op": {
370
- "const": "file_info"
371
- }
372
- },
373
- "required": [
374
- "path",
375
- "op"
376
- ],
377
- "additionalProperties": false
378
- }
379
- },
380
- {
381
- "op": "create_image",
382
- "description": "Create a blank disk image of the specified format.",
383
- "required": [
384
- "format",
385
- "path"
386
- ],
387
- "optional": [
388
- "diskname",
389
- "tracks"
390
- ],
391
- "inputSchema": {
392
- "type": "object",
393
- "description": "Create a blank disk image of the specified format.",
394
- "properties": {
395
- "format": {
396
- "type": "string",
397
- "description": "Disk image format to create.",
398
- "enum": [
399
- "d64",
400
- "d71",
401
- "d81",
402
- "dnp"
403
- ]
404
- },
405
- "path": {
406
- "type": "string",
407
- "description": "Destination path on the Ultimate filesystem.",
408
- "minLength": 1
409
- },
410
- "diskname": {
411
- "type": [
412
- "string",
413
- "null"
414
- ],
415
- "description": "Optional disk label (1-16 characters, converted to PETSCII).",
416
- "minLength": 1,
417
- "maxLength": 16
418
- },
419
- "tracks": {
420
- "type": [
421
- "integer",
422
- "null"
423
- ],
424
- "description": "Track count (D64 supports 35 to 41; DNP requires explicit tracks).",
425
- "minimum": 1,
426
- "maximum": 255
427
- },
428
- "op": {
429
- "const": "create_image"
430
- }
431
- },
432
- "required": [
433
- "format",
434
- "path",
435
- "op"
436
- ],
437
- "additionalProperties": false
438
- }
439
- },
440
- {
441
- "op": "find_and_run",
442
- "description": "Search for a PRG/CRT by name substring and run the first match.",
443
- "required": [
444
- "nameContains"
445
- ],
446
- "optional": [
447
- "root",
448
- "extensions",
449
- "caseInsensitive",
450
- "sort",
451
- "waitMs",
452
- "captureCandidates"
453
- ],
454
- "inputSchema": {
455
- "type": "object",
456
- "description": "Search for a PRG/CRT by name substring and run the first match.",
457
- "properties": {
458
- "root": {
459
- "type": [
460
- "string",
461
- "null"
462
- ],
463
- "description": "Root path to search",
464
- "minLength": 1,
465
- "default": "/"
466
- },
467
- "nameContains": {
468
- "type": "string",
469
- "description": "Substring to match",
470
- "minLength": 1
471
- },
472
- "extensions": {
473
- "type": [
474
- "array",
475
- "null"
476
- ],
477
- "items": {
478
- "type": "string",
479
- "description": "File extensions to include (without dot)",
480
- "minLength": 1
481
- }
482
- },
483
- "caseInsensitive": {
484
- "type": [
485
- "boolean",
486
- "null"
487
- ],
488
- "description": "Case-insensitive name match",
489
- "default": true
490
- },
491
- "sort": {
492
- "type": [
493
- "string",
494
- "null"
495
- ],
496
- "description": "Sort order for matches",
497
- "enum": [
498
- "discovered",
499
- "alphabetical"
500
- ],
501
- "default": "discovered"
502
- },
503
- "waitMs": {
504
- "type": [
505
- "integer",
506
- "null"
507
- ],
508
- "description": "Delay after firmware run before returning",
509
- "minimum": 0,
510
- "default": 0
511
- },
512
- "captureCandidates": {
513
- "type": [
514
- "integer",
515
- "null"
516
- ],
517
- "description": "Include up to this many candidates in result",
518
- "minimum": 1,
519
- "maximum": 100,
520
- "default": 10
521
- },
522
- "op": {
523
- "const": "find_and_run"
524
- }
525
- },
526
- "required": [
527
- "nameContains",
528
- "op"
529
- ],
530
- "additionalProperties": false
531
- }
532
- }
533
- ]
205
+ "description": "Disk operations available via the c64_disk tool.\n\nOperations:\n- list_drives: List Ultimate drive slots and their mounted images. Required inputs: none.\n- mount [write]: Mount a disk image with optional verification and retries. Required inputs: drive, image. Optional inputs: type, attachmentMode, driveMode, verify, powerOnIfNeeded, resetAfterMount, maxRetries, retryDelayMs.\n- unmount [c64u, u2] [write]: Remove the mounted image from an Ultimate drive slot. Required inputs: drive.\n- file_info [c64u, u2]: Inspect metadata for a file on the Ultimate filesystem. Required inputs: path.\n- create_image [c64u, u2] [destructive]: Create a blank disk image of the specified format. Required inputs: format, path. Optional inputs: diskname, tracks.\n- find_and_run [c64u, u2] [write]: Search for a PRG/CRT by name substring and run the first match. Required inputs: nameContains. Optional inputs: root, extensions, caseInsensitive, sort, waitMs, captureCandidates.\n- find_paths [c64u, u2]: Search Ultimate storage for paths whose names contain a substring, without running anything. Required inputs: nameContains. Optional inputs: root, extensions, maxResults, caseInsensitive.",
206
+ "additionalProperties": false
534
207
  }
@@ -35,161 +35,6 @@
35
35
  "required": [
36
36
  "op"
37
37
  ],
38
- "description": "Drive operations available via the c64_drive tool.\n\nOperations:\n- reset: Issue an IEC reset for the selected drive slot. Required inputs: drive.\n- power_on: Power on a specific Ultimate drive slot. Required inputs: drive.\n- power_off: Power off a specific Ultimate drive slot. Required inputs: drive.\n- load_rom: Temporarily load a custom ROM into an Ultimate drive slot. Required inputs: drive, path.\n- set_mode: Set the emulation mode for a drive slot (1541/1571/1581). Required inputs: drive, mode.",
39
- "additionalProperties": false,
40
- "x-c64bridge-operations": [
41
- {
42
- "op": "reset",
43
- "description": "Issue an IEC reset for the selected drive slot.",
44
- "required": [
45
- "drive"
46
- ],
47
- "optional": [],
48
- "inputSchema": {
49
- "type": "object",
50
- "description": "Issue an IEC reset for the selected drive slot.",
51
- "properties": {
52
- "drive": {
53
- "type": "string",
54
- "description": "Drive identifier such as drive8, drive9, or unit name defined in the Ultimate UI.",
55
- "minLength": 1
56
- },
57
- "op": {
58
- "const": "reset"
59
- }
60
- },
61
- "required": [
62
- "drive",
63
- "op"
64
- ],
65
- "additionalProperties": false
66
- }
67
- },
68
- {
69
- "op": "power_on",
70
- "description": "Power on a specific Ultimate drive slot.",
71
- "required": [
72
- "drive"
73
- ],
74
- "optional": [],
75
- "inputSchema": {
76
- "type": "object",
77
- "description": "Power on a specific Ultimate drive slot.",
78
- "properties": {
79
- "drive": {
80
- "type": "string",
81
- "description": "Drive identifier such as drive8, drive9, or unit name defined in the Ultimate UI.",
82
- "minLength": 1
83
- },
84
- "op": {
85
- "const": "power_on"
86
- }
87
- },
88
- "required": [
89
- "drive",
90
- "op"
91
- ],
92
- "additionalProperties": false
93
- }
94
- },
95
- {
96
- "op": "power_off",
97
- "description": "Power off a specific Ultimate drive slot.",
98
- "required": [
99
- "drive"
100
- ],
101
- "optional": [],
102
- "inputSchema": {
103
- "type": "object",
104
- "description": "Power off a specific Ultimate drive slot.",
105
- "properties": {
106
- "drive": {
107
- "type": "string",
108
- "description": "Drive identifier such as drive8, drive9, or unit name defined in the Ultimate UI.",
109
- "minLength": 1
110
- },
111
- "op": {
112
- "const": "power_off"
113
- }
114
- },
115
- "required": [
116
- "drive",
117
- "op"
118
- ],
119
- "additionalProperties": false
120
- }
121
- },
122
- {
123
- "op": "load_rom",
124
- "description": "Temporarily load a custom ROM into an Ultimate drive slot.",
125
- "required": [
126
- "drive",
127
- "path"
128
- ],
129
- "optional": [],
130
- "inputSchema": {
131
- "type": "object",
132
- "description": "Temporarily load a custom ROM into an Ultimate drive slot.",
133
- "properties": {
134
- "drive": {
135
- "type": "string",
136
- "description": "Drive identifier such as drive8, drive9, or unit name defined in the Ultimate UI.",
137
- "minLength": 1
138
- },
139
- "path": {
140
- "type": "string",
141
- "description": "Absolute or Ultimate filesystem path to the disk image to mount or manage.",
142
- "minLength": 1
143
- },
144
- "op": {
145
- "const": "load_rom"
146
- }
147
- },
148
- "required": [
149
- "drive",
150
- "path",
151
- "op"
152
- ],
153
- "additionalProperties": false
154
- }
155
- },
156
- {
157
- "op": "set_mode",
158
- "description": "Set the emulation mode for a drive slot (1541/1571/1581).",
159
- "required": [
160
- "drive",
161
- "mode"
162
- ],
163
- "optional": [],
164
- "inputSchema": {
165
- "type": "object",
166
- "description": "Set the emulation mode for a drive slot (1541/1571/1581).",
167
- "properties": {
168
- "drive": {
169
- "type": "string",
170
- "description": "Drive identifier such as drive8, drive9, or unit name defined in the Ultimate UI.",
171
- "minLength": 1
172
- },
173
- "mode": {
174
- "type": "string",
175
- "description": "Drive hardware profile to emulate.",
176
- "enum": [
177
- "1541",
178
- "1571",
179
- "1581"
180
- ]
181
- },
182
- "op": {
183
- "const": "set_mode"
184
- }
185
- },
186
- "required": [
187
- "drive",
188
- "mode",
189
- "op"
190
- ],
191
- "additionalProperties": false
192
- }
193
- }
194
- ]
38
+ "description": "Drive operations available via the c64_drive tool.\n\nOperations:\n- reset [write]: Issue an IEC reset for the selected drive slot. Required inputs: drive.\n- power_on [write]: Power on a specific Ultimate drive slot. Required inputs: drive.\n- power_off [write]: Power off a specific Ultimate drive slot. Required inputs: drive.\n- load_rom [c64u, u2] [destructive]: Temporarily load a custom ROM into an Ultimate drive slot. Required inputs: drive, path.\n- set_mode [write]: Set the emulation mode for a drive slot (1541/1571/1581). Required inputs: drive, mode.",
39
+ "additionalProperties": false
195
40
  }