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
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "object",
|
|
3
|
+
"description": "Graphics operations available via the c64_graphics tool.",
|
|
4
|
+
"oneOf": [
|
|
5
|
+
{
|
|
6
|
+
"type": "object",
|
|
7
|
+
"description": "Capture one or more complete video frames from the active backend.",
|
|
8
|
+
"properties": {
|
|
9
|
+
"op": {
|
|
10
|
+
"const": "capture_frame"
|
|
11
|
+
},
|
|
12
|
+
"count": {
|
|
13
|
+
"type": [
|
|
14
|
+
"integer",
|
|
15
|
+
"null"
|
|
16
|
+
],
|
|
17
|
+
"description": "Number of frames to capture.",
|
|
18
|
+
"minimum": 1,
|
|
19
|
+
"maximum": 32,
|
|
20
|
+
"default": 1
|
|
21
|
+
},
|
|
22
|
+
"includePixels": {
|
|
23
|
+
"type": [
|
|
24
|
+
"boolean",
|
|
25
|
+
"null"
|
|
26
|
+
],
|
|
27
|
+
"description": "Include pixel payload bytes in the response.",
|
|
28
|
+
"default": true
|
|
29
|
+
},
|
|
30
|
+
"encoding": {
|
|
31
|
+
"type": [
|
|
32
|
+
"string",
|
|
33
|
+
"null"
|
|
34
|
+
],
|
|
35
|
+
"description": "Encoding used for the pixel payload when included.",
|
|
36
|
+
"enum": [
|
|
37
|
+
"base64",
|
|
38
|
+
"hex"
|
|
39
|
+
],
|
|
40
|
+
"default": "base64"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"required": [
|
|
44
|
+
"op"
|
|
45
|
+
],
|
|
46
|
+
"additionalProperties": false
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"type": "object",
|
|
50
|
+
"description": "Create PETSCII art from prompts, text, or explicit bitmap data, and optionally display it on the C64.",
|
|
51
|
+
"properties": {
|
|
52
|
+
"prompt": {
|
|
53
|
+
"type": [
|
|
54
|
+
"string",
|
|
55
|
+
"null"
|
|
56
|
+
],
|
|
57
|
+
"description": "Natural language prompt describing the desired PETSCII art.",
|
|
58
|
+
"minLength": 1
|
|
59
|
+
},
|
|
60
|
+
"text": {
|
|
61
|
+
"type": [
|
|
62
|
+
"string",
|
|
63
|
+
"null"
|
|
64
|
+
],
|
|
65
|
+
"description": "Exact text to render in PETSCII (overrides prompt derivation).",
|
|
66
|
+
"minLength": 1
|
|
67
|
+
},
|
|
68
|
+
"maxWidth": {
|
|
69
|
+
"type": [
|
|
70
|
+
"integer",
|
|
71
|
+
"null"
|
|
72
|
+
],
|
|
73
|
+
"description": "Maximum bitmap width in pixels (1-320).",
|
|
74
|
+
"minimum": 1,
|
|
75
|
+
"maximum": 320
|
|
76
|
+
},
|
|
77
|
+
"maxHeight": {
|
|
78
|
+
"type": [
|
|
79
|
+
"integer",
|
|
80
|
+
"null"
|
|
81
|
+
],
|
|
82
|
+
"description": "Maximum bitmap height in pixels (1-200).",
|
|
83
|
+
"minimum": 1,
|
|
84
|
+
"maximum": 200
|
|
85
|
+
},
|
|
86
|
+
"borderColor": {
|
|
87
|
+
"type": [
|
|
88
|
+
"integer",
|
|
89
|
+
"null"
|
|
90
|
+
],
|
|
91
|
+
"description": "Border colour index (0-15).",
|
|
92
|
+
"minimum": 0,
|
|
93
|
+
"maximum": 15
|
|
94
|
+
},
|
|
95
|
+
"backgroundColor": {
|
|
96
|
+
"type": [
|
|
97
|
+
"integer",
|
|
98
|
+
"null"
|
|
99
|
+
],
|
|
100
|
+
"description": "Background colour index (0-15).",
|
|
101
|
+
"minimum": 0,
|
|
102
|
+
"maximum": 15
|
|
103
|
+
},
|
|
104
|
+
"foregroundColor": {
|
|
105
|
+
"type": [
|
|
106
|
+
"integer",
|
|
107
|
+
"null"
|
|
108
|
+
],
|
|
109
|
+
"description": "Foreground colour index (0-15).",
|
|
110
|
+
"minimum": 0,
|
|
111
|
+
"maximum": 15
|
|
112
|
+
},
|
|
113
|
+
"dryRun": {
|
|
114
|
+
"type": "boolean",
|
|
115
|
+
"description": "When true, skip uploading the generated BASIC program to the C64.",
|
|
116
|
+
"default": false
|
|
117
|
+
},
|
|
118
|
+
"bitmap": {
|
|
119
|
+
"description": "Explicit bitmap definition for PETSCII rendering.",
|
|
120
|
+
"type": [
|
|
121
|
+
"object",
|
|
122
|
+
"null"
|
|
123
|
+
],
|
|
124
|
+
"properties": {
|
|
125
|
+
"width": {
|
|
126
|
+
"type": "integer",
|
|
127
|
+
"minimum": 1,
|
|
128
|
+
"maximum": 320
|
|
129
|
+
},
|
|
130
|
+
"height": {
|
|
131
|
+
"type": "integer",
|
|
132
|
+
"minimum": 1,
|
|
133
|
+
"maximum": 200
|
|
134
|
+
},
|
|
135
|
+
"pixels": {
|
|
136
|
+
"type": "array",
|
|
137
|
+
"items": {
|
|
138
|
+
"type": "integer",
|
|
139
|
+
"minimum": 0,
|
|
140
|
+
"maximum": 1
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
"required": [
|
|
145
|
+
"width",
|
|
146
|
+
"height",
|
|
147
|
+
"pixels"
|
|
148
|
+
],
|
|
149
|
+
"additionalProperties": false
|
|
150
|
+
},
|
|
151
|
+
"op": {
|
|
152
|
+
"const": "render_petscii_art"
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
"additionalProperties": false,
|
|
156
|
+
"required": [
|
|
157
|
+
"op"
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"type": "object",
|
|
162
|
+
"description": "Display PETSCII text with optional border and background colours.",
|
|
163
|
+
"properties": {
|
|
164
|
+
"text": {
|
|
165
|
+
"type": "string",
|
|
166
|
+
"description": "The PETSCII text to print after clearing the screen.",
|
|
167
|
+
"minLength": 1
|
|
168
|
+
},
|
|
169
|
+
"borderColor": {
|
|
170
|
+
"type": [
|
|
171
|
+
"integer",
|
|
172
|
+
"null"
|
|
173
|
+
],
|
|
174
|
+
"description": "Border colour index (0-15).",
|
|
175
|
+
"minimum": 0,
|
|
176
|
+
"maximum": 15
|
|
177
|
+
},
|
|
178
|
+
"backgroundColor": {
|
|
179
|
+
"type": [
|
|
180
|
+
"integer",
|
|
181
|
+
"null"
|
|
182
|
+
],
|
|
183
|
+
"description": "Background colour index (0-15).",
|
|
184
|
+
"minimum": 0,
|
|
185
|
+
"maximum": 15
|
|
186
|
+
},
|
|
187
|
+
"op": {
|
|
188
|
+
"const": "render_petscii_text"
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
"required": [
|
|
192
|
+
"text",
|
|
193
|
+
"op"
|
|
194
|
+
],
|
|
195
|
+
"additionalProperties": false
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"type": "object",
|
|
199
|
+
"description": "Display supplied 63-byte sprite data at the requested position and colour by writing memory and patching VIC-II registers directly.",
|
|
200
|
+
"properties": {
|
|
201
|
+
"sprite": {
|
|
202
|
+
"description": "63-byte sprite definition provided as base64/hex string or array of bytes.",
|
|
203
|
+
"type": [
|
|
204
|
+
"string",
|
|
205
|
+
"array"
|
|
206
|
+
],
|
|
207
|
+
"items": {
|
|
208
|
+
"type": "integer",
|
|
209
|
+
"minimum": 0,
|
|
210
|
+
"maximum": 255
|
|
211
|
+
},
|
|
212
|
+
"minItems": 63,
|
|
213
|
+
"maxItems": 63
|
|
214
|
+
},
|
|
215
|
+
"index": {
|
|
216
|
+
"type": "integer",
|
|
217
|
+
"description": "Sprite index (0-7) to configure in screen memory.",
|
|
218
|
+
"minimum": 0,
|
|
219
|
+
"maximum": 7,
|
|
220
|
+
"default": 0
|
|
221
|
+
},
|
|
222
|
+
"x": {
|
|
223
|
+
"type": "integer",
|
|
224
|
+
"description": "Sprite X position (0-511).",
|
|
225
|
+
"minimum": 0,
|
|
226
|
+
"maximum": 511,
|
|
227
|
+
"default": 100
|
|
228
|
+
},
|
|
229
|
+
"y": {
|
|
230
|
+
"type": "integer",
|
|
231
|
+
"description": "Sprite Y position (0-255).",
|
|
232
|
+
"minimum": 0,
|
|
233
|
+
"maximum": 255,
|
|
234
|
+
"default": 100
|
|
235
|
+
},
|
|
236
|
+
"color": {
|
|
237
|
+
"type": "integer",
|
|
238
|
+
"description": "Sprite colour index (0-15).",
|
|
239
|
+
"minimum": 0,
|
|
240
|
+
"maximum": 15,
|
|
241
|
+
"default": 1
|
|
242
|
+
},
|
|
243
|
+
"multicolour": {
|
|
244
|
+
"type": "boolean",
|
|
245
|
+
"description": "Enable multicolour mode for the sprite.",
|
|
246
|
+
"default": false
|
|
247
|
+
},
|
|
248
|
+
"op": {
|
|
249
|
+
"const": "render_sprite"
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
"required": [
|
|
253
|
+
"sprite",
|
|
254
|
+
"op"
|
|
255
|
+
],
|
|
256
|
+
"additionalProperties": false
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"type": "object",
|
|
260
|
+
"description": "Import an image file, convert it to VIC-II bitmap memory, write it into RAM, and display it.",
|
|
261
|
+
"properties": {
|
|
262
|
+
"imagePath": {
|
|
263
|
+
"type": "string",
|
|
264
|
+
"description": "Filesystem path of the source image (PNG, JPEG, BMP, GIF, TIFF, and other Jimp-supported formats).",
|
|
265
|
+
"minLength": 1
|
|
266
|
+
},
|
|
267
|
+
"format": {
|
|
268
|
+
"description": "Bitmap encoding mode to generate for the VIC-II display.",
|
|
269
|
+
"type": "string",
|
|
270
|
+
"enum": [
|
|
271
|
+
"hires",
|
|
272
|
+
"multicolor"
|
|
273
|
+
]
|
|
274
|
+
},
|
|
275
|
+
"bitmapAddress": {
|
|
276
|
+
"description": "Absolute C64 memory address, provided as an integer or hex string such as $2000.",
|
|
277
|
+
"type": [
|
|
278
|
+
"integer",
|
|
279
|
+
"string",
|
|
280
|
+
"null"
|
|
281
|
+
],
|
|
282
|
+
"default": 8192
|
|
283
|
+
},
|
|
284
|
+
"screenAddress": {
|
|
285
|
+
"description": "Absolute C64 memory address, provided as an integer or hex string such as $2000.",
|
|
286
|
+
"type": [
|
|
287
|
+
"integer",
|
|
288
|
+
"string",
|
|
289
|
+
"null"
|
|
290
|
+
],
|
|
291
|
+
"default": 1024
|
|
292
|
+
},
|
|
293
|
+
"borderColor": {
|
|
294
|
+
"type": [
|
|
295
|
+
"integer",
|
|
296
|
+
"null"
|
|
297
|
+
],
|
|
298
|
+
"description": "Border colour index (0-15).",
|
|
299
|
+
"minimum": 0,
|
|
300
|
+
"maximum": 15,
|
|
301
|
+
"default": 0
|
|
302
|
+
},
|
|
303
|
+
"backgroundColor": {
|
|
304
|
+
"type": [
|
|
305
|
+
"integer",
|
|
306
|
+
"null"
|
|
307
|
+
],
|
|
308
|
+
"description": "Background colour index (0-15). Used for multicolor mode and aspect-ratio padding.",
|
|
309
|
+
"minimum": 0,
|
|
310
|
+
"maximum": 15,
|
|
311
|
+
"default": 0
|
|
312
|
+
},
|
|
313
|
+
"preserveAspect": {
|
|
314
|
+
"type": "boolean",
|
|
315
|
+
"description": "Preserve the source image aspect ratio and pad with the background colour.",
|
|
316
|
+
"default": true
|
|
317
|
+
},
|
|
318
|
+
"op": {
|
|
319
|
+
"const": "render_bitmap"
|
|
320
|
+
}
|
|
321
|
+
},
|
|
322
|
+
"required": [
|
|
323
|
+
"imagePath",
|
|
324
|
+
"format",
|
|
325
|
+
"op"
|
|
326
|
+
],
|
|
327
|
+
"additionalProperties": false
|
|
328
|
+
}
|
|
329
|
+
],
|
|
330
|
+
"discriminator": {
|
|
331
|
+
"propertyName": "op"
|
|
332
|
+
}
|
|
333
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "object",
|
|
3
|
+
"description": "Memory operations available via the c64_memory tool.",
|
|
4
|
+
"oneOf": [
|
|
5
|
+
{
|
|
6
|
+
"type": "object",
|
|
7
|
+
"description": "Read a range of bytes and return a hex dump with address metadata.",
|
|
8
|
+
"properties": {
|
|
9
|
+
"address": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "Start address expressed as $HHHH, decimal, or a documented symbol name.",
|
|
12
|
+
"minLength": 1
|
|
13
|
+
},
|
|
14
|
+
"length": {
|
|
15
|
+
"type": "integer",
|
|
16
|
+
"description": "Number of bytes to read starting from the resolved address.",
|
|
17
|
+
"minimum": 1,
|
|
18
|
+
"maximum": 4096,
|
|
19
|
+
"default": 256
|
|
20
|
+
},
|
|
21
|
+
"op": {
|
|
22
|
+
"const": "read"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"required": [
|
|
26
|
+
"address",
|
|
27
|
+
"op"
|
|
28
|
+
],
|
|
29
|
+
"additionalProperties": false
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"type": "object",
|
|
33
|
+
"description": "Write a hexadecimal byte sequence into RAM.",
|
|
34
|
+
"properties": {
|
|
35
|
+
"address": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"description": "Destination address expressed as $HHHH, decimal, or a documented symbol name.",
|
|
38
|
+
"minLength": 1
|
|
39
|
+
},
|
|
40
|
+
"bytes": {
|
|
41
|
+
"type": "string",
|
|
42
|
+
"description": "Hex byte sequence like $AABBCC or AA BB CC to write starting at the resolved address.",
|
|
43
|
+
"minLength": 2,
|
|
44
|
+
"pattern": "^[\\s_0-9A-Fa-f$]+$"
|
|
45
|
+
},
|
|
46
|
+
"verify": {
|
|
47
|
+
"type": "boolean",
|
|
48
|
+
"description": "When true, verify the write by reading before and after the change; Ultimate hardware also pauses during verification.",
|
|
49
|
+
"default": false
|
|
50
|
+
},
|
|
51
|
+
"expected": {
|
|
52
|
+
"type": [
|
|
53
|
+
"string",
|
|
54
|
+
"null"
|
|
55
|
+
],
|
|
56
|
+
"description": "Optional hex data expected before the write (verifies before writing).",
|
|
57
|
+
"minLength": 2,
|
|
58
|
+
"pattern": "^[\\s_0-9A-Fa-f$]+$"
|
|
59
|
+
},
|
|
60
|
+
"mask": {
|
|
61
|
+
"type": [
|
|
62
|
+
"string",
|
|
63
|
+
"null"
|
|
64
|
+
],
|
|
65
|
+
"description": "Optional verification mask (hex); only bits set in the mask are compared.",
|
|
66
|
+
"minLength": 2,
|
|
67
|
+
"pattern": "^[\\s_0-9A-Fa-f$]+$"
|
|
68
|
+
},
|
|
69
|
+
"abortOnMismatch": {
|
|
70
|
+
"type": "boolean",
|
|
71
|
+
"description": "Abort the write when the pre-write verification fails.",
|
|
72
|
+
"default": true
|
|
73
|
+
},
|
|
74
|
+
"op": {
|
|
75
|
+
"const": "write"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"required": [
|
|
79
|
+
"address",
|
|
80
|
+
"bytes",
|
|
81
|
+
"op"
|
|
82
|
+
],
|
|
83
|
+
"additionalProperties": false
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"type": "object",
|
|
87
|
+
"description": "Return the current 40x25 text screen converted to ASCII.",
|
|
88
|
+
"properties": {
|
|
89
|
+
"op": {
|
|
90
|
+
"const": "read_screen"
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"additionalProperties": false,
|
|
94
|
+
"required": [
|
|
95
|
+
"op"
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"type": "object",
|
|
100
|
+
"description": "Poll the screen until a substring or regex appears, or timeout elapses.",
|
|
101
|
+
"properties": {
|
|
102
|
+
"pattern": {
|
|
103
|
+
"type": "string",
|
|
104
|
+
"description": "Substring or regex to find",
|
|
105
|
+
"minLength": 1
|
|
106
|
+
},
|
|
107
|
+
"isRegex": {
|
|
108
|
+
"type": [
|
|
109
|
+
"boolean",
|
|
110
|
+
"null"
|
|
111
|
+
],
|
|
112
|
+
"description": "Interpret pattern as regular expression",
|
|
113
|
+
"default": false
|
|
114
|
+
},
|
|
115
|
+
"caseInsensitive": {
|
|
116
|
+
"type": [
|
|
117
|
+
"boolean",
|
|
118
|
+
"null"
|
|
119
|
+
],
|
|
120
|
+
"description": "Case-insensitive search",
|
|
121
|
+
"default": true
|
|
122
|
+
},
|
|
123
|
+
"timeoutMs": {
|
|
124
|
+
"type": [
|
|
125
|
+
"integer",
|
|
126
|
+
"null"
|
|
127
|
+
],
|
|
128
|
+
"description": "Overall timeout in milliseconds",
|
|
129
|
+
"minimum": 1,
|
|
130
|
+
"default": 3000
|
|
131
|
+
},
|
|
132
|
+
"intervalMs": {
|
|
133
|
+
"type": [
|
|
134
|
+
"integer",
|
|
135
|
+
"null"
|
|
136
|
+
],
|
|
137
|
+
"description": "Poll interval in milliseconds",
|
|
138
|
+
"minimum": 1,
|
|
139
|
+
"default": 100
|
|
140
|
+
},
|
|
141
|
+
"op": {
|
|
142
|
+
"const": "wait_for_text"
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"required": [
|
|
146
|
+
"pattern",
|
|
147
|
+
"op"
|
|
148
|
+
],
|
|
149
|
+
"additionalProperties": false
|
|
150
|
+
}
|
|
151
|
+
],
|
|
152
|
+
"discriminator": {
|
|
153
|
+
"propertyName": "op"
|
|
154
|
+
}
|
|
155
|
+
}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "object",
|
|
3
|
+
"description": "Printer operations available via the c64_printer tool.",
|
|
4
|
+
"oneOf": [
|
|
5
|
+
{
|
|
6
|
+
"type": "object",
|
|
7
|
+
"description": "Generate BASIC that prints text to device 4.",
|
|
8
|
+
"properties": {
|
|
9
|
+
"text": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "Text to print on the connected printer.",
|
|
12
|
+
"minLength": 1
|
|
13
|
+
},
|
|
14
|
+
"target": {
|
|
15
|
+
"description": "Printer target: Commodore MPS (PETSCII) or Epson FX (ESC/P).",
|
|
16
|
+
"type": "string",
|
|
17
|
+
"enum": [
|
|
18
|
+
"commodore",
|
|
19
|
+
"epson"
|
|
20
|
+
],
|
|
21
|
+
"default": "commodore"
|
|
22
|
+
},
|
|
23
|
+
"secondaryAddress": {
|
|
24
|
+
"description": "Secondary address for device 4 (0 = upper/graphics, 7 = lowercase).",
|
|
25
|
+
"type": [
|
|
26
|
+
"integer",
|
|
27
|
+
"null"
|
|
28
|
+
],
|
|
29
|
+
"enum": [
|
|
30
|
+
0,
|
|
31
|
+
7
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"formFeed": {
|
|
35
|
+
"type": "boolean",
|
|
36
|
+
"description": "Emit a form-feed (CHR$(12)) at the end of the job.",
|
|
37
|
+
"default": false
|
|
38
|
+
},
|
|
39
|
+
"op": {
|
|
40
|
+
"const": "print_text"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"required": [
|
|
44
|
+
"text",
|
|
45
|
+
"op"
|
|
46
|
+
],
|
|
47
|
+
"additionalProperties": false
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"type": "object",
|
|
51
|
+
"description": "Print a bitmap row via Commodore (BIM) or Epson ESC/P workflows.",
|
|
52
|
+
"properties": {
|
|
53
|
+
"printer": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"description": "Target printer family.",
|
|
56
|
+
"enum": [
|
|
57
|
+
"commodore",
|
|
58
|
+
"epson"
|
|
59
|
+
],
|
|
60
|
+
"default": "commodore"
|
|
61
|
+
},
|
|
62
|
+
"columns": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"description": "Sequence of bitmap columns.",
|
|
65
|
+
"items": {
|
|
66
|
+
"type": "integer",
|
|
67
|
+
"description": "Bitmap column byte (0-255).",
|
|
68
|
+
"minimum": 0,
|
|
69
|
+
"maximum": 255
|
|
70
|
+
},
|
|
71
|
+
"minItems": 1
|
|
72
|
+
},
|
|
73
|
+
"repeats": {
|
|
74
|
+
"type": [
|
|
75
|
+
"integer",
|
|
76
|
+
"null"
|
|
77
|
+
],
|
|
78
|
+
"description": "Number of times to repeat the row (1-255).",
|
|
79
|
+
"minimum": 1,
|
|
80
|
+
"maximum": 255
|
|
81
|
+
},
|
|
82
|
+
"useSubRepeat": {
|
|
83
|
+
"type": [
|
|
84
|
+
"integer",
|
|
85
|
+
"null"
|
|
86
|
+
],
|
|
87
|
+
"description": "Repeat the next byte this many times (Commodore BIM SUB).",
|
|
88
|
+
"minimum": 1,
|
|
89
|
+
"maximum": 255
|
|
90
|
+
},
|
|
91
|
+
"secondaryAddress": {
|
|
92
|
+
"type": [
|
|
93
|
+
"integer",
|
|
94
|
+
"null"
|
|
95
|
+
],
|
|
96
|
+
"description": "Secondary address for device 4 (0 or 7).",
|
|
97
|
+
"minimum": 0,
|
|
98
|
+
"maximum": 7
|
|
99
|
+
},
|
|
100
|
+
"ensureMsb": {
|
|
101
|
+
"type": "boolean",
|
|
102
|
+
"description": "Ensure MSB set for Commodore printers.",
|
|
103
|
+
"default": true
|
|
104
|
+
},
|
|
105
|
+
"mode": {
|
|
106
|
+
"type": [
|
|
107
|
+
"string",
|
|
108
|
+
"null"
|
|
109
|
+
],
|
|
110
|
+
"description": "Epson ESC/P graphics mode (K/L/Y/Z/*).",
|
|
111
|
+
"minLength": 1,
|
|
112
|
+
"maxLength": 1
|
|
113
|
+
},
|
|
114
|
+
"density": {
|
|
115
|
+
"type": [
|
|
116
|
+
"integer",
|
|
117
|
+
"null"
|
|
118
|
+
],
|
|
119
|
+
"description": "Density parameter when using Epson mode '*'.",
|
|
120
|
+
"minimum": 0,
|
|
121
|
+
"maximum": 3
|
|
122
|
+
},
|
|
123
|
+
"timesPerLine": {
|
|
124
|
+
"type": [
|
|
125
|
+
"integer",
|
|
126
|
+
"null"
|
|
127
|
+
],
|
|
128
|
+
"description": "Number of times to print the row per line (1-10).",
|
|
129
|
+
"minimum": 1,
|
|
130
|
+
"maximum": 10
|
|
131
|
+
},
|
|
132
|
+
"op": {
|
|
133
|
+
"const": "print_bitmap"
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"required": [
|
|
137
|
+
"printer",
|
|
138
|
+
"columns",
|
|
139
|
+
"op"
|
|
140
|
+
],
|
|
141
|
+
"additionalProperties": false
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"type": "object",
|
|
145
|
+
"description": "Define custom printer characters (Commodore DLL mode).",
|
|
146
|
+
"properties": {
|
|
147
|
+
"firstChar": {
|
|
148
|
+
"type": "integer",
|
|
149
|
+
"description": "PETSCII code of first character to redefine (33-126).",
|
|
150
|
+
"minimum": 33,
|
|
151
|
+
"maximum": 126
|
|
152
|
+
},
|
|
153
|
+
"chars": {
|
|
154
|
+
"type": "array",
|
|
155
|
+
"description": "Character definitions to upload (1-32).",
|
|
156
|
+
"items": {
|
|
157
|
+
"type": "object",
|
|
158
|
+
"description": "Commodore MPS DLL character definition (11 columns).",
|
|
159
|
+
"properties": {
|
|
160
|
+
"a": {
|
|
161
|
+
"description": "Attribute flag (0=normal, 1=graphics).",
|
|
162
|
+
"type": [
|
|
163
|
+
"integer",
|
|
164
|
+
"null"
|
|
165
|
+
],
|
|
166
|
+
"enum": [
|
|
167
|
+
0,
|
|
168
|
+
1
|
|
169
|
+
]
|
|
170
|
+
},
|
|
171
|
+
"columns": {
|
|
172
|
+
"type": "array",
|
|
173
|
+
"description": "11 column bytes describing the character.",
|
|
174
|
+
"items": {
|
|
175
|
+
"type": "integer",
|
|
176
|
+
"description": "Column byte (0-255).",
|
|
177
|
+
"minimum": 0,
|
|
178
|
+
"maximum": 255
|
|
179
|
+
},
|
|
180
|
+
"minItems": 11,
|
|
181
|
+
"maxItems": 11
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
"required": [
|
|
185
|
+
"columns"
|
|
186
|
+
],
|
|
187
|
+
"additionalProperties": false
|
|
188
|
+
},
|
|
189
|
+
"minItems": 1,
|
|
190
|
+
"maxItems": 32
|
|
191
|
+
},
|
|
192
|
+
"secondaryAddress": {
|
|
193
|
+
"description": "Secondary address for device 4 (0 = upper/graphics, 7 = lowercase).",
|
|
194
|
+
"type": [
|
|
195
|
+
"integer",
|
|
196
|
+
"null"
|
|
197
|
+
],
|
|
198
|
+
"enum": [
|
|
199
|
+
0,
|
|
200
|
+
7
|
|
201
|
+
]
|
|
202
|
+
},
|
|
203
|
+
"op": {
|
|
204
|
+
"const": "define_chars"
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
"required": [
|
|
208
|
+
"firstChar",
|
|
209
|
+
"chars",
|
|
210
|
+
"op"
|
|
211
|
+
],
|
|
212
|
+
"additionalProperties": false
|
|
213
|
+
}
|
|
214
|
+
],
|
|
215
|
+
"discriminator": {
|
|
216
|
+
"propertyName": "op"
|
|
217
|
+
}
|
|
218
|
+
}
|