@henols/vice-mcp 0.2.2 → 0.2.4
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/README.md +2 -2
- package/THIRD-PARTY-NOTICES.md +422 -1
- package/anno-bank.ts +171 -0
- package/anno-cli.ts +1736 -163
- package/anno-confidence.ts +2 -2
- package/anno-derive.ts +6 -6
- package/anno-details.ts +4 -4
- package/anno-enum-gen.ts +416 -30
- package/anno-export-asm.ts +1211 -126
- package/anno-graphics.ts +338 -0
- package/anno-hazard-report.ts +1367 -0
- package/anno-import.ts +495 -0
- package/anno-index.ts +8 -8
- package/anno-join.ts +480 -0
- package/anno-memmap-render.ts +22 -21
- package/anno-provenance-ledger.ts +472 -0
- package/anno-regbits-gen.ts +13 -13
- package/anno-register.ts +159 -0
- package/anno-store-export.ts +661 -0
- package/anno-store.ts +635 -124
- package/anno-symbols.ts +7 -7
- package/anno-tools.ts +1169 -16
- package/anno-types.ts +313 -40
- package/backend-detect.mts +124 -312
- package/build.ts +3 -1
- package/capture-predicate.ts +597 -0
- package/channel-lock.ts +349 -0
- package/evid-ingest.ts +217 -0
- package/evid-reconcile.ts +316 -0
- package/host-tool-client.ts +430 -0
- package/incident-record.ts +23 -12
- package/install-resources.ts +29 -13
- package/memmap-lookup.ts +285 -0
- package/package.json +27 -8
- package/prg-image.ts +1 -2
- package/repo-root.ts +87 -3
- package/resources/backend-detect.mjs +98 -236
- package/resources/broker-control.mjs +220 -54
- package/resources/broker-epoch.mjs +7 -8
- package/resources/broker-kill.mjs +36 -31
- package/resources/broker-launch.mjs +511 -374
- package/resources/broker-state.mjs +69 -24
- package/resources/container-guard.mjs +1 -1
- package/resources/ghidra-project.mjs +790 -0
- package/resources/host-tool.mjs +2533 -0
- package/resources/vice-broker.mjs +434 -290
- package/resources/vice-launcher.sh +127 -9
- package/stock-address.ts +1 -1
- package/stock-condition.ts +1 -1
- package/stock-connect.ts +9 -5
- package/stock-derived.ts +29 -37
- package/stock-diagnose.ts +200 -36
- package/stock-dispatch.ts +179 -77
- package/stock-handler.ts +1 -1
- package/stock-paths.ts +18 -14
- package/stock-petscii.ts +1 -1
- package/stock-protocol.ts +1 -1
- package/stock-recycle.ts +83 -2
- package/stock-reproducible-run.ts +811 -0
- package/stock-run-until.ts +100 -1
- package/stock-symbols.ts +4 -4
- package/stock-timing.ts +1 -1
- package/stop-oracle.ts +167 -0
- package/text-capability-probe.ts +660 -0
- package/text-connect.ts +157 -0
- package/text-protocol.ts +810 -0
- package/text-tools.ts +778 -0
- package/textmon-backtrace.ts +385 -0
- package/textmon-cpuhistory.ts +335 -0
- package/textmon-memmap.ts +494 -0
- package/textmon-profile.ts +458 -0
- package/textmon-registers.ts +748 -0
- package/tools-manifest.stock.json +864 -3
- package/vice-broker-client.ts +253 -108
- package/vice-errors.ts +268 -0
- package/vice-proxy.ts +339 -2144
- package/vsf-slice.ts +640 -0
- package/anno-d64.ts +0 -310
- package/capability-registry.ts +0 -390
- package/refresh-manifest.ts +0 -124
- package/tools-manifest.json +0 -1223
- package/vice-probe.ts +0 -278
- package/vice-sync.ts +0 -336
- package/vice.ts +0 -772
|
@@ -3440,7 +3440,7 @@
|
|
|
3440
3440
|
},
|
|
3441
3441
|
{
|
|
3442
3442
|
"name": "vice_run_until",
|
|
3443
|
-
"description": "Run until an address is reached. \"cycles\" is NOT implemented on stock and is refused whenever present, including alongside \"address\" (it used to be silently dropped while the answer still said reached:true); unexpected argument names are refused by name too. timeout_ms (stock-only) bounds the wait; an address that never executes returns a timedOut answer rather than hanging. machineHalted is stamped on every answer (never omitted, so an absent field can never be read as false) and is DERIVED, not asserted: true on a hit and on a timeout whose cleanup CHECKPOINT_DELETE was answered over a live socket, false when that delete failed or the socket is gone and the run-state projection does not say stopped. machineHalted false means the state could not be established, NOT that the machine is running -- machineHaltedNote says which case applies and names vice_execution_run (halted) or vice_diagnose (unestablished) as the next call. A timed-out wait racing its own cleanup CHECKPOINT_DELETE against a fired-but-unreported checkpoint is resolved from a live program-counter read: raceResolved is pc_at_address (confirmed reached), pc_elsewhere (confirmed not reached), or unresolved (the PC read itself failed, in which case reached is omitted entirely and reachedUnknown is true rather than asserting a guessed value either way).",
|
|
3443
|
+
"description": "Run until an address is reached. \"cycles\" is NOT implemented on stock and is refused whenever present, including alongside \"address\" (it used to be silently dropped while the answer still said reached:true); unexpected argument names are refused by name too. timeout_ms (stock-only) bounds the wait; an address that never executes returns a timedOut answer rather than hanging. machineHalted is stamped on every answer (never omitted, so an absent field can never be read as false) and is DERIVED, not asserted: true on a hit and on a timeout whose cleanup CHECKPOINT_DELETE was answered over a live socket, false when that delete failed or the socket is gone and the run-state projection does not say stopped. machineHalted false means the state could not be established, NOT that the machine is running -- machineHaltedNote says which case applies and names vice_execution_run (halted) or vice_diagnose (unestablished) as the next call. A timed-out wait racing its own cleanup CHECKPOINT_DELETE against a fired-but-unreported checkpoint is resolved from a live program-counter read: raceResolved is pc_at_address (confirmed reached), pc_elsewhere (confirmed not reached), or unresolved (the PC read itself failed, in which case reached is omitted entirely and reachedUnknown is true rather than asserting a guessed value either way). reproducible (stock-only, absent by default) runs the whole reproducible-run protocol instead of the ordinary path -- arm the frame anchor and the target while halted, monitor-issued hard RESET, exactly one resume, then an event-driven wait on the target checkpoint's own id -- and answers with the four-term stop identity (pc, hitCount, line, cycle), where hitCount is the FRAME ANCHOR's count and targetHitCount is the target's own. It is a whole-procedure switch with no sub-flags (there is no skip_reset, no_anchor or reset_only, so a protocol-without-the-reset is not a callable option) and it REFUSES rather than degrades: reproducible: true without frame_anchor is refused naming why the frame term cannot otherwise be supplied, frame_anchor without reproducible is refused rather than accepted and ignored, and a build whose REGISTERS_AVAILABLE enumerates no PC/LIN/CYC is refused before anything is armed.",
|
|
3444
3444
|
"inputSchema": {
|
|
3445
3445
|
"type": "object",
|
|
3446
3446
|
"properties": {
|
|
@@ -3455,6 +3455,14 @@
|
|
|
3455
3455
|
"timeout_ms": {
|
|
3456
3456
|
"type": "number",
|
|
3457
3457
|
"description": "Stock-only. Milliseconds to wait for the address to be reached before giving up; default 30000, clamped to a ceiling of 600000."
|
|
3458
|
+
},
|
|
3459
|
+
"reproducible": {
|
|
3460
|
+
"type": "boolean",
|
|
3461
|
+
"description": "Stock-only. Absent by default. When true, runs the reproducible-run protocol (REPRO-02) rather than the ordinary run-until path: the frame anchor and the target are armed while the machine is halted, a monitor-issued hard RESET is issued, exactly ONE resume is sent, and the wait resolves on the target checkpoint's own CHECKPOINT_INFO. Requires frame_anchor. A whole-procedure switch, never composable sub-flags -- there is no skip_reset, no_anchor or reset_only, because a shipped protocol-without-the-reset would be exactly the second route a caller can forget it took. Must be a boolean; a string is refused rather than coerced, since the string \"false\" is truthy."
|
|
3462
|
+
},
|
|
3463
|
+
"frame_anchor": {
|
|
3464
|
+
"type": "string",
|
|
3465
|
+
"description": "Stock-only. Absent by default, and REQUIRED whenever reproducible is true -- an address (number, hex, or symbol) of a site executed once per frame, whose hit count IS the frame term of the stop identity (PC, hit_count, (LIN, CYC)). No default is supplied and none would be safe to guess: the once-per-frame site is release-specific, and a cracked release almost always takes over the IRQ, so a KERNAL site such as $EA31 may never execute at all. Omitting it with reproducible: true is REFUSED rather than degraded to a two-term identity -- (LIN, CYC) is a within-frame position, not a monotonic clock, so without the frame term two stops one whole frame apart certify as the same stop. Supplying it WITHOUT reproducible is also refused, rather than accepted and ignored. May equal address: the procedure still arms two distinct checkpoints (the anchor non-temporary, the target temporary) and waits on the target's own id."
|
|
3458
3466
|
}
|
|
3459
3467
|
}
|
|
3460
3468
|
},
|
|
@@ -3527,6 +3535,72 @@
|
|
|
3527
3535
|
},
|
|
3528
3536
|
"raceNote": {
|
|
3529
3537
|
"type": "string"
|
|
3538
|
+
},
|
|
3539
|
+
"protocol": {
|
|
3540
|
+
"type": "string"
|
|
3541
|
+
},
|
|
3542
|
+
"reproducibleStop": {
|
|
3543
|
+
"type": "boolean"
|
|
3544
|
+
},
|
|
3545
|
+
"reproducibleStopNote": {
|
|
3546
|
+
"type": "string"
|
|
3547
|
+
},
|
|
3548
|
+
"frameAnchor": {
|
|
3549
|
+
"type": "number"
|
|
3550
|
+
},
|
|
3551
|
+
"targetCheckpointId": {
|
|
3552
|
+
"type": "number"
|
|
3553
|
+
},
|
|
3554
|
+
"anchorCheckpointId": {
|
|
3555
|
+
"type": "number"
|
|
3556
|
+
},
|
|
3557
|
+
"targetHitCount": {
|
|
3558
|
+
"type": "number"
|
|
3559
|
+
},
|
|
3560
|
+
"anchorHitsObserved": {
|
|
3561
|
+
"type": "number"
|
|
3562
|
+
},
|
|
3563
|
+
"anchorHitCountObserved": {
|
|
3564
|
+
"type": "number"
|
|
3565
|
+
},
|
|
3566
|
+
"anchorStoppedFirst": {
|
|
3567
|
+
"type": "boolean"
|
|
3568
|
+
},
|
|
3569
|
+
"anchorStoppedFirstNote": {
|
|
3570
|
+
"type": "string"
|
|
3571
|
+
},
|
|
3572
|
+
"anchorCleanup": {
|
|
3573
|
+
"type": "string"
|
|
3574
|
+
},
|
|
3575
|
+
"anchorCleanupError": {
|
|
3576
|
+
"type": "string"
|
|
3577
|
+
},
|
|
3578
|
+
"cleanupNote": {
|
|
3579
|
+
"type": "string"
|
|
3580
|
+
},
|
|
3581
|
+
"pc": {
|
|
3582
|
+
"type": "number"
|
|
3583
|
+
},
|
|
3584
|
+
"line": {
|
|
3585
|
+
"type": "number"
|
|
3586
|
+
},
|
|
3587
|
+
"cycle": {
|
|
3588
|
+
"type": "number"
|
|
3589
|
+
},
|
|
3590
|
+
"hitCountNote": {
|
|
3591
|
+
"type": "string"
|
|
3592
|
+
},
|
|
3593
|
+
"stopIdentityTerms": {
|
|
3594
|
+
"type": "array"
|
|
3595
|
+
},
|
|
3596
|
+
"stopIdentityNote": {
|
|
3597
|
+
"type": "string"
|
|
3598
|
+
},
|
|
3599
|
+
"resumes": {
|
|
3600
|
+
"type": "number"
|
|
3601
|
+
},
|
|
3602
|
+
"resumesNote": {
|
|
3603
|
+
"type": "string"
|
|
3530
3604
|
}
|
|
3531
3605
|
},
|
|
3532
3606
|
"required": [
|
|
@@ -3540,7 +3614,7 @@
|
|
|
3540
3614
|
},
|
|
3541
3615
|
{
|
|
3542
3616
|
"name": "vice_diagnose",
|
|
3543
|
-
"description": "Read-mostly. Answers which of five states this session's emulator is in on the stock backend -- restarted, checkpoint_trap, wedged, monitor_held_elsewhere, or live -- with the evidence that produced the verdict. The fork's sixth verdict, naming a stale-versus-fresh read distinction, is absent on stock: every stock read pauses the machine uniformly, so that distinction is unreachable by construction. It may resume the machine once or twice to measure a cycle bracket, so it is never something to call reflexively; when it runs a bracket it leaves the machine PAUSED afterward -- resuming is your own next call. A \"checkpoint_trap\" verdict means the machine stopped ITSELF at an armed checkpoint and must NOT be recycled -- recycling a self-inflicted stop destroys a healthy instance. \"monitor_held_elsewhere\" means a different client already holds this instance's single binary-monitor slot -- the instance is healthy, just claimed elsewhere. machinePaused is derived from the emulator's own observed run state, never hand-passed; machinePausedSource says whether that derivation was a direct wire observation of a STOPPED/JAM event agreeing with this path's own halting reads (\"observed\"), inferred because no session was ever obtained (\"no_session\"), or inferred (\"structural\") -- which covers both an unknown run state AND a run state reading of \"running\", since every path reaching a verdict has already sent a halting read, so \"running\" contradicts this path's own reads rather than observing the machine. machinePaused is therefore never false for a session that reached a verdict. evidence.jamObserved is always present (never omitted) and is true once a JAM (0x61) event has arrived on this instance's wire: the 6510 hit an illegal opcode and the CPU is dead REGARDLESS of the verdict. Recover with vice_machine_reset, NOT vice_recycle -- recycling destroys an instance a reset would have fixed. With -jamaction 2 a jam reads as wedged (both brackets zero advance); with the default jamaction the emulator keeps burning cycles refetching the same opcode, so both brackets ADVANCE and it reads as live. Neither is a wedge, and jamObserved is the only thing that tells them apart. EVERY answer that establishes no verdict at all -- with no exception left -- is isError:true with text beginning \"vice_diagnose: diagnosis_unavailable (<reason>)\", for one of: protocol_decode_failure, connection_lost, request_timeout, monitor_acquisition_timeout, session_refused, evidence_gathering_failed, liveness_unmeasurable, unknown. liveness_unmeasurable is the expected outcome on a stock 3.9-class build (no CPUHISTORY_GET and no LIN/CYC enumerated): the bracket could not be MEASURED, which is not the same as measuring zero advance and is never a wedge. That outcome is deliberately NOT one of the five verdicts above -- it means the machine's state is UNKNOWN, not live, wedged, or anything else, and is never on its own grounds a reason to call vice_recycle.",
|
|
3617
|
+
"description": "Read-mostly. Answers which of five states this session's emulator is in on the stock backend -- restarted, checkpoint_trap, wedged, monitor_held_elsewhere, or live -- with the evidence that produced the verdict. The fork's sixth verdict, naming a stale-versus-fresh read distinction, is absent on stock: every stock read pauses the machine uniformly, so that distinction is unreachable by construction. It may resume the machine once or twice to measure a cycle bracket, so it is never something to call reflexively; when it runs a bracket it leaves the machine PAUSED afterward -- resuming is your own next call. A \"checkpoint_trap\" verdict means the machine stopped ITSELF at an armed checkpoint and must NOT be recycled -- recycling a self-inflicted stop destroys a healthy instance. \"monitor_held_elsewhere\" means a different client already holds this instance's single binary-monitor slot -- the instance is healthy, just claimed elsewhere. machinePaused is derived from the emulator's own observed run state, never hand-passed; machinePausedSource says whether that derivation was a direct wire observation of a STOPPED/JAM event agreeing with this path's own halting reads (\"observed\"), inferred because no session was ever obtained (\"no_session\"), or inferred (\"structural\") -- which covers both an unknown run state AND a run state reading of \"running\", since every path reaching a verdict has already sent a halting read, so \"running\" contradicts this path's own reads rather than observing the machine. machinePaused is therefore never false for a session that reached a verdict. evidence.jamObserved is always present (never omitted) and is true once a JAM (0x61) event has arrived on this instance's wire: the 6510 hit an illegal opcode and the CPU is dead REGARDLESS of the verdict. Recover with vice_machine_reset, NOT vice_recycle -- recycling destroys an instance a reset would have fixed. With -jamaction 2 a jam reads as wedged (both brackets zero advance); with the default jamaction the emulator keeps burning cycles refetching the same opcode, so both brackets ADVANCE and it reads as live. Neither is a wedge, and jamObserved is the only thing that tells them apart. evidence.channelContention is always present (never omitted); when held is true the OTHER monitor channel (stock's binary and -remotemonitor text channels) holds this instance's halt authority, the verdict is live, bracketsRun is 0 because no bracket was run at all, and the instance is healthy -- never a reason to recycle; wait for the other channel's operation to finish, or find its holder. channelContention.channel/operation/grantId/heldMs name the holder's channel, operation, grant id (the literal \"unknown\" when the holder carries none) and hold duration in whole milliseconds when held is true, and are null -- never omitted, never 0 for heldMs -- when held is false. EVERY answer that establishes no verdict at all -- with no exception left -- is isError:true with text beginning \"vice_diagnose: diagnosis_unavailable (<reason>)\", for one of: protocol_decode_failure, connection_lost, request_timeout, monitor_acquisition_timeout, session_refused, evidence_gathering_failed, liveness_unmeasurable, unknown. liveness_unmeasurable is the expected outcome on a stock 3.9-class build (no CPUHISTORY_GET and no LIN/CYC enumerated): the bracket could not be MEASURED, which is not the same as measuring zero advance and is never a wedge. That outcome is deliberately NOT one of the five verdicts above -- it means the machine's state is UNKNOWN, not live, wedged, or anything else, and is never on its own grounds a reason to call vice_recycle.",
|
|
3544
3618
|
"inputSchema": {
|
|
3545
3619
|
"type": "object",
|
|
3546
3620
|
"additionalProperties": false
|
|
@@ -3566,10 +3640,30 @@
|
|
|
3566
3640
|
"properties": {
|
|
3567
3641
|
"jamObserved": {
|
|
3568
3642
|
"type": "boolean"
|
|
3643
|
+
},
|
|
3644
|
+
"channelContention": {
|
|
3645
|
+
"type": "object",
|
|
3646
|
+
"properties": {
|
|
3647
|
+
"held": {
|
|
3648
|
+
"type": "boolean"
|
|
3649
|
+
},
|
|
3650
|
+
"channel": {},
|
|
3651
|
+
"operation": {},
|
|
3652
|
+
"grantId": {},
|
|
3653
|
+
"heldMs": {}
|
|
3654
|
+
},
|
|
3655
|
+
"required": [
|
|
3656
|
+
"held",
|
|
3657
|
+
"channel",
|
|
3658
|
+
"operation",
|
|
3659
|
+
"grantId",
|
|
3660
|
+
"heldMs"
|
|
3661
|
+
]
|
|
3569
3662
|
}
|
|
3570
3663
|
},
|
|
3571
3664
|
"required": [
|
|
3572
|
-
"jamObserved"
|
|
3665
|
+
"jamObserved",
|
|
3666
|
+
"channelContention"
|
|
3573
3667
|
]
|
|
3574
3668
|
},
|
|
3575
3669
|
"machinePaused": {
|
|
@@ -3644,6 +3738,773 @@
|
|
|
3644
3738
|
"runState"
|
|
3645
3739
|
]
|
|
3646
3740
|
}
|
|
3741
|
+
},
|
|
3742
|
+
{
|
|
3743
|
+
"name": "vice_device_console",
|
|
3744
|
+
"description": "Stock-only, no fork counterpart -- reaches VICE's text monitor over the -remotemonitor channel and halts the machine for the duration of the command, exactly as a binary-monitor command does. Issues the single allowlisted verb \"device c:\", resetting the current default device (memspace) back to the main CPU. Use this after a drive checkpoint hit leaves default_memspace pointed at a drive unit -- ADVANCE_INSTRUCTIONS and EXECUTE_UNTIL_RETURN then step the wrong CPU, and a bank-qualified checkpoint condition fails outright, until this is issued. This is an explicit tool, not auto-healing: nothing on the binary-side stepping path calls it automatically.",
|
|
3745
|
+
"inputSchema": {
|
|
3746
|
+
"type": "object",
|
|
3747
|
+
"additionalProperties": false
|
|
3748
|
+
},
|
|
3749
|
+
"outputSchema": {
|
|
3750
|
+
"type": "object",
|
|
3751
|
+
"properties": {
|
|
3752
|
+
"response": {
|
|
3753
|
+
"type": "string"
|
|
3754
|
+
},
|
|
3755
|
+
"note": {
|
|
3756
|
+
"type": "string"
|
|
3757
|
+
},
|
|
3758
|
+
"runState": {
|
|
3759
|
+
"type": "string",
|
|
3760
|
+
"enum": [
|
|
3761
|
+
"running",
|
|
3762
|
+
"stopped",
|
|
3763
|
+
"unknown"
|
|
3764
|
+
]
|
|
3765
|
+
}
|
|
3766
|
+
},
|
|
3767
|
+
"required": [
|
|
3768
|
+
"response",
|
|
3769
|
+
"note",
|
|
3770
|
+
"runState"
|
|
3771
|
+
]
|
|
3772
|
+
}
|
|
3773
|
+
},
|
|
3774
|
+
{
|
|
3775
|
+
"name": "vice_warp_set",
|
|
3776
|
+
"description": "Stock-only, no fork counterpart -- reaches VICE's text monitor over the -remotemonitor channel and halts the machine for the duration of the command, exactly as a binary-monitor command does. Issues \"warp on\" or \"warp off\" depending on \"enabled\". There is no runtime WarpMode *resource* on stock -- measured err=0x01 OBJECT_MISSING over RESOURCE_GET -- so this is the only way to toggle warp at runtime on this backend; warp requested at launch time (-warp / InitialWarpMode) is a separate mechanism this tool does not touch. The response reports warp's own OBSERVED state rather than assuming the write took.",
|
|
3777
|
+
"inputSchema": {
|
|
3778
|
+
"type": "object",
|
|
3779
|
+
"properties": {
|
|
3780
|
+
"enabled": {
|
|
3781
|
+
"type": "boolean",
|
|
3782
|
+
"description": "true issues \"warp on\", false issues \"warp off\"."
|
|
3783
|
+
}
|
|
3784
|
+
},
|
|
3785
|
+
"required": [
|
|
3786
|
+
"enabled"
|
|
3787
|
+
],
|
|
3788
|
+
"additionalProperties": false
|
|
3789
|
+
},
|
|
3790
|
+
"outputSchema": {
|
|
3791
|
+
"type": "object",
|
|
3792
|
+
"properties": {
|
|
3793
|
+
"requested": {
|
|
3794
|
+
"type": "boolean"
|
|
3795
|
+
},
|
|
3796
|
+
"response": {
|
|
3797
|
+
"type": "string"
|
|
3798
|
+
},
|
|
3799
|
+
"note": {
|
|
3800
|
+
"type": "string"
|
|
3801
|
+
},
|
|
3802
|
+
"runState": {
|
|
3803
|
+
"type": "string",
|
|
3804
|
+
"enum": [
|
|
3805
|
+
"running",
|
|
3806
|
+
"stopped",
|
|
3807
|
+
"unknown"
|
|
3808
|
+
]
|
|
3809
|
+
}
|
|
3810
|
+
},
|
|
3811
|
+
"required": [
|
|
3812
|
+
"requested",
|
|
3813
|
+
"response",
|
|
3814
|
+
"note",
|
|
3815
|
+
"runState"
|
|
3816
|
+
]
|
|
3817
|
+
}
|
|
3818
|
+
},
|
|
3819
|
+
{
|
|
3820
|
+
"name": "vice_memmap_show",
|
|
3821
|
+
"description": "Stock-only, no fork counterpart -- reaches VICE's text monitor over the -remotemonitor channel and issues the single allowlisted verb \"memmapshow\", returning a structured, adjacency-merged access map in which execute is its own bit, for both RAM and ROM, never folded into a read. \"startAddress\", \"endAddress\" and \"maxRanges\" are client-side projection filters applied AFTER parsing -- none of the three ever reaches the socket, and the dialed command is always the frozen literal \"memmapshow\". An address with no recorded access is reported only via the gap between \"addressesWithRecordedAccess\" and \"addressesQueried\" -- never rendered, named, or implied as data.",
|
|
3822
|
+
"inputSchema": {
|
|
3823
|
+
"type": "object",
|
|
3824
|
+
"properties": {
|
|
3825
|
+
"startAddress": {
|
|
3826
|
+
"type": "integer",
|
|
3827
|
+
"minimum": 0,
|
|
3828
|
+
"maximum": 65535,
|
|
3829
|
+
"description": "Inclusive lower bound of the projection filter. Defaults to 0. Applied after parsing, never sent to the text monitor."
|
|
3830
|
+
},
|
|
3831
|
+
"endAddress": {
|
|
3832
|
+
"type": "integer",
|
|
3833
|
+
"minimum": 0,
|
|
3834
|
+
"maximum": 65535,
|
|
3835
|
+
"description": "Inclusive upper bound of the projection filter. Defaults to 65535. Applied after parsing, never sent to the text monitor."
|
|
3836
|
+
},
|
|
3837
|
+
"maxRanges": {
|
|
3838
|
+
"type": "integer",
|
|
3839
|
+
"minimum": 1,
|
|
3840
|
+
"maximum": 4096,
|
|
3841
|
+
"description": "Hard ceiling on the number of emitted merged ranges. Defaults to 256, clamped to 4096 regardless of what is requested."
|
|
3842
|
+
}
|
|
3843
|
+
},
|
|
3844
|
+
"additionalProperties": false
|
|
3845
|
+
},
|
|
3846
|
+
"outputSchema": {
|
|
3847
|
+
"type": "object",
|
|
3848
|
+
"properties": {
|
|
3849
|
+
"command": {
|
|
3850
|
+
"type": "string"
|
|
3851
|
+
},
|
|
3852
|
+
"identityWarning": {
|
|
3853
|
+
"type": "string"
|
|
3854
|
+
},
|
|
3855
|
+
"ranges": {
|
|
3856
|
+
"type": "array",
|
|
3857
|
+
"items": {
|
|
3858
|
+
"type": "object",
|
|
3859
|
+
"properties": {
|
|
3860
|
+
"start": {
|
|
3861
|
+
"type": "integer"
|
|
3862
|
+
},
|
|
3863
|
+
"end": {
|
|
3864
|
+
"type": "integer"
|
|
3865
|
+
},
|
|
3866
|
+
"io": {
|
|
3867
|
+
"type": "object",
|
|
3868
|
+
"properties": {
|
|
3869
|
+
"read": {
|
|
3870
|
+
"type": "boolean"
|
|
3871
|
+
},
|
|
3872
|
+
"write": {
|
|
3873
|
+
"type": "boolean"
|
|
3874
|
+
},
|
|
3875
|
+
"execute": {
|
|
3876
|
+
"type": "boolean"
|
|
3877
|
+
}
|
|
3878
|
+
},
|
|
3879
|
+
"required": [
|
|
3880
|
+
"read",
|
|
3881
|
+
"write",
|
|
3882
|
+
"execute"
|
|
3883
|
+
]
|
|
3884
|
+
},
|
|
3885
|
+
"rom": {
|
|
3886
|
+
"type": "object",
|
|
3887
|
+
"properties": {
|
|
3888
|
+
"read": {
|
|
3889
|
+
"type": "boolean"
|
|
3890
|
+
},
|
|
3891
|
+
"write": {
|
|
3892
|
+
"type": "boolean"
|
|
3893
|
+
},
|
|
3894
|
+
"execute": {
|
|
3895
|
+
"type": "boolean"
|
|
3896
|
+
}
|
|
3897
|
+
},
|
|
3898
|
+
"required": [
|
|
3899
|
+
"read",
|
|
3900
|
+
"write",
|
|
3901
|
+
"execute"
|
|
3902
|
+
]
|
|
3903
|
+
},
|
|
3904
|
+
"ram": {
|
|
3905
|
+
"type": "object",
|
|
3906
|
+
"properties": {
|
|
3907
|
+
"read": {
|
|
3908
|
+
"type": "boolean"
|
|
3909
|
+
},
|
|
3910
|
+
"write": {
|
|
3911
|
+
"type": "boolean"
|
|
3912
|
+
},
|
|
3913
|
+
"execute": {
|
|
3914
|
+
"type": "boolean"
|
|
3915
|
+
}
|
|
3916
|
+
},
|
|
3917
|
+
"required": [
|
|
3918
|
+
"read",
|
|
3919
|
+
"write",
|
|
3920
|
+
"execute"
|
|
3921
|
+
]
|
|
3922
|
+
},
|
|
3923
|
+
"annotations": {
|
|
3924
|
+
"type": "array",
|
|
3925
|
+
"items": {
|
|
3926
|
+
"type": "string",
|
|
3927
|
+
"enum": [
|
|
3928
|
+
"dummy",
|
|
3929
|
+
"uninitialized-read",
|
|
3930
|
+
"uninitialized-exec"
|
|
3931
|
+
]
|
|
3932
|
+
}
|
|
3933
|
+
}
|
|
3934
|
+
},
|
|
3935
|
+
"required": [
|
|
3936
|
+
"start",
|
|
3937
|
+
"end",
|
|
3938
|
+
"io",
|
|
3939
|
+
"rom",
|
|
3940
|
+
"ram",
|
|
3941
|
+
"annotations"
|
|
3942
|
+
]
|
|
3943
|
+
}
|
|
3944
|
+
},
|
|
3945
|
+
"rangeCount": {
|
|
3946
|
+
"type": "integer"
|
|
3947
|
+
},
|
|
3948
|
+
"truncated": {
|
|
3949
|
+
"type": "boolean"
|
|
3950
|
+
},
|
|
3951
|
+
"addressesWithRecordedAccess": {
|
|
3952
|
+
"type": "integer"
|
|
3953
|
+
},
|
|
3954
|
+
"addressesQueried": {
|
|
3955
|
+
"type": "integer"
|
|
3956
|
+
},
|
|
3957
|
+
"executeCounts": {
|
|
3958
|
+
"type": "object",
|
|
3959
|
+
"properties": {
|
|
3960
|
+
"io": {
|
|
3961
|
+
"type": "integer"
|
|
3962
|
+
},
|
|
3963
|
+
"rom": {
|
|
3964
|
+
"type": "integer"
|
|
3965
|
+
},
|
|
3966
|
+
"ram": {
|
|
3967
|
+
"type": "integer"
|
|
3968
|
+
}
|
|
3969
|
+
},
|
|
3970
|
+
"required": [
|
|
3971
|
+
"io",
|
|
3972
|
+
"rom",
|
|
3973
|
+
"ram"
|
|
3974
|
+
]
|
|
3975
|
+
},
|
|
3976
|
+
"runState": {
|
|
3977
|
+
"type": "string",
|
|
3978
|
+
"enum": [
|
|
3979
|
+
"running",
|
|
3980
|
+
"stopped",
|
|
3981
|
+
"unknown"
|
|
3982
|
+
]
|
|
3983
|
+
}
|
|
3984
|
+
},
|
|
3985
|
+
"required": [
|
|
3986
|
+
"command",
|
|
3987
|
+
"ranges",
|
|
3988
|
+
"rangeCount",
|
|
3989
|
+
"truncated",
|
|
3990
|
+
"addressesWithRecordedAccess",
|
|
3991
|
+
"addressesQueried",
|
|
3992
|
+
"executeCounts",
|
|
3993
|
+
"runState"
|
|
3994
|
+
]
|
|
3995
|
+
}
|
|
3996
|
+
},
|
|
3997
|
+
{
|
|
3998
|
+
"name": "vice_memmap_zap",
|
|
3999
|
+
"description": "Stock-only, no fork counterpart -- reaches VICE's text monitor over the -remotemonitor channel and halts the machine for the duration of the command, exactly as a binary-monitor command does. Issues the single allowlisted verb \"memmapzap\", which clears the emulator's accumulated memory-access map, and then \"memmapshow\", so the returned \"addressesWithRecordedAccess\" and \"addressesQueried\" are observable proof the map was cleared, never a bare acknowledgement. Takes no parameters at all. An address with no recorded access is reported only via the gap between \"addressesWithRecordedAccess\" and \"addressesQueried\" -- never rendered, named, or implied as data.",
|
|
4000
|
+
"inputSchema": {
|
|
4001
|
+
"type": "object",
|
|
4002
|
+
"properties": {},
|
|
4003
|
+
"additionalProperties": false
|
|
4004
|
+
},
|
|
4005
|
+
"outputSchema": {
|
|
4006
|
+
"type": "object",
|
|
4007
|
+
"properties": {
|
|
4008
|
+
"command": {
|
|
4009
|
+
"type": "string"
|
|
4010
|
+
},
|
|
4011
|
+
"identityWarning": {
|
|
4012
|
+
"type": "string"
|
|
4013
|
+
},
|
|
4014
|
+
"addressesWithRecordedAccess": {
|
|
4015
|
+
"type": "integer"
|
|
4016
|
+
},
|
|
4017
|
+
"addressesQueried": {
|
|
4018
|
+
"type": "integer"
|
|
4019
|
+
},
|
|
4020
|
+
"executeCounts": {
|
|
4021
|
+
"type": "object",
|
|
4022
|
+
"properties": {
|
|
4023
|
+
"io": {
|
|
4024
|
+
"type": "integer"
|
|
4025
|
+
},
|
|
4026
|
+
"rom": {
|
|
4027
|
+
"type": "integer"
|
|
4028
|
+
},
|
|
4029
|
+
"ram": {
|
|
4030
|
+
"type": "integer"
|
|
4031
|
+
}
|
|
4032
|
+
},
|
|
4033
|
+
"required": [
|
|
4034
|
+
"io",
|
|
4035
|
+
"rom",
|
|
4036
|
+
"ram"
|
|
4037
|
+
]
|
|
4038
|
+
},
|
|
4039
|
+
"runState": {
|
|
4040
|
+
"type": "string",
|
|
4041
|
+
"enum": [
|
|
4042
|
+
"running",
|
|
4043
|
+
"stopped",
|
|
4044
|
+
"unknown"
|
|
4045
|
+
]
|
|
4046
|
+
}
|
|
4047
|
+
},
|
|
4048
|
+
"required": [
|
|
4049
|
+
"command",
|
|
4050
|
+
"addressesWithRecordedAccess",
|
|
4051
|
+
"addressesQueried",
|
|
4052
|
+
"executeCounts",
|
|
4053
|
+
"runState"
|
|
4054
|
+
]
|
|
4055
|
+
}
|
|
4056
|
+
},
|
|
4057
|
+
{
|
|
4058
|
+
"name": "vice_cpu_history",
|
|
4059
|
+
"description": "Stock-only, no fork counterpart -- reaches VICE's text monitor over the -remotemonitor channel and halts the machine for the duration of the command, exactly as a binary-monitor command does. Issues \"chis\" (or \"chis N\" for a caller-chosen decimal row count -- the ONE place that string is built, and validated/rendered there, never here), returning the decoded CPU-history entries -- address, raw bytes, disassembly, registers, processor flags and cycle count -- in the emulator's own emitted order. \"chis\" is compiled behind the same build-time flag as vice_memmap_show's \"memmapshow\"; a build without --enable-cpuhistory is reported as a named missing capability with its remedy, never a parse error.",
|
|
4060
|
+
"inputSchema": {
|
|
4061
|
+
"type": "object",
|
|
4062
|
+
"properties": {
|
|
4063
|
+
"count": {
|
|
4064
|
+
"type": "integer",
|
|
4065
|
+
"minimum": 1,
|
|
4066
|
+
"maximum": 65535,
|
|
4067
|
+
"description": "Number of most-recent history rows to request. Omitted dials the bare \"chis\" verb."
|
|
4068
|
+
}
|
|
4069
|
+
},
|
|
4070
|
+
"additionalProperties": false
|
|
4071
|
+
},
|
|
4072
|
+
"outputSchema": {
|
|
4073
|
+
"type": "object",
|
|
4074
|
+
"properties": {
|
|
4075
|
+
"command": {
|
|
4076
|
+
"type": "string"
|
|
4077
|
+
},
|
|
4078
|
+
"identityWarning": {
|
|
4079
|
+
"type": "string"
|
|
4080
|
+
},
|
|
4081
|
+
"entries": {
|
|
4082
|
+
"type": "array",
|
|
4083
|
+
"items": {
|
|
4084
|
+
"type": "object",
|
|
4085
|
+
"properties": {
|
|
4086
|
+
"address": {
|
|
4087
|
+
"type": "integer"
|
|
4088
|
+
},
|
|
4089
|
+
"bytes": {
|
|
4090
|
+
"type": "array",
|
|
4091
|
+
"items": {
|
|
4092
|
+
"type": "integer"
|
|
4093
|
+
}
|
|
4094
|
+
},
|
|
4095
|
+
"disassembly": {
|
|
4096
|
+
"type": "string"
|
|
4097
|
+
},
|
|
4098
|
+
"registers": {
|
|
4099
|
+
"type": "object",
|
|
4100
|
+
"properties": {
|
|
4101
|
+
"a": {
|
|
4102
|
+
"type": "integer"
|
|
4103
|
+
},
|
|
4104
|
+
"x": {
|
|
4105
|
+
"type": "integer"
|
|
4106
|
+
},
|
|
4107
|
+
"y": {
|
|
4108
|
+
"type": "integer"
|
|
4109
|
+
},
|
|
4110
|
+
"sp": {
|
|
4111
|
+
"type": "integer"
|
|
4112
|
+
}
|
|
4113
|
+
},
|
|
4114
|
+
"required": [
|
|
4115
|
+
"a",
|
|
4116
|
+
"x",
|
|
4117
|
+
"y",
|
|
4118
|
+
"sp"
|
|
4119
|
+
]
|
|
4120
|
+
},
|
|
4121
|
+
"flags": {
|
|
4122
|
+
"type": "object",
|
|
4123
|
+
"properties": {
|
|
4124
|
+
"n": {
|
|
4125
|
+
"type": "boolean"
|
|
4126
|
+
},
|
|
4127
|
+
"v": {
|
|
4128
|
+
"type": "boolean"
|
|
4129
|
+
},
|
|
4130
|
+
"unused": {
|
|
4131
|
+
"type": "boolean"
|
|
4132
|
+
},
|
|
4133
|
+
"b": {
|
|
4134
|
+
"type": "boolean"
|
|
4135
|
+
},
|
|
4136
|
+
"d": {
|
|
4137
|
+
"type": "boolean"
|
|
4138
|
+
},
|
|
4139
|
+
"i": {
|
|
4140
|
+
"type": "boolean"
|
|
4141
|
+
},
|
|
4142
|
+
"z": {
|
|
4143
|
+
"type": "boolean"
|
|
4144
|
+
},
|
|
4145
|
+
"c": {
|
|
4146
|
+
"type": "boolean"
|
|
4147
|
+
}
|
|
4148
|
+
},
|
|
4149
|
+
"required": [
|
|
4150
|
+
"n",
|
|
4151
|
+
"v",
|
|
4152
|
+
"unused",
|
|
4153
|
+
"b",
|
|
4154
|
+
"d",
|
|
4155
|
+
"i",
|
|
4156
|
+
"z",
|
|
4157
|
+
"c"
|
|
4158
|
+
]
|
|
4159
|
+
},
|
|
4160
|
+
"cycles": {
|
|
4161
|
+
"type": "integer"
|
|
4162
|
+
}
|
|
4163
|
+
},
|
|
4164
|
+
"required": [
|
|
4165
|
+
"address",
|
|
4166
|
+
"bytes",
|
|
4167
|
+
"disassembly",
|
|
4168
|
+
"registers",
|
|
4169
|
+
"flags",
|
|
4170
|
+
"cycles"
|
|
4171
|
+
]
|
|
4172
|
+
}
|
|
4173
|
+
},
|
|
4174
|
+
"count": {
|
|
4175
|
+
"type": "integer"
|
|
4176
|
+
},
|
|
4177
|
+
"runState": {
|
|
4178
|
+
"type": "string",
|
|
4179
|
+
"enum": [
|
|
4180
|
+
"running",
|
|
4181
|
+
"stopped",
|
|
4182
|
+
"unknown"
|
|
4183
|
+
]
|
|
4184
|
+
}
|
|
4185
|
+
},
|
|
4186
|
+
"required": [
|
|
4187
|
+
"command",
|
|
4188
|
+
"entries",
|
|
4189
|
+
"count",
|
|
4190
|
+
"runState"
|
|
4191
|
+
]
|
|
4192
|
+
}
|
|
4193
|
+
},
|
|
4194
|
+
{
|
|
4195
|
+
"name": "vice_profile_flat",
|
|
4196
|
+
"description": "Stock-only, no fork counterpart -- reaches VICE's text monitor over the -remotemonitor channel and halts the machine for the duration of the command, exactly as a binary-monitor command does. Issues \"prof flat\" (or \"prof flat N\" for a caller-chosen decimal row count, validated/rendered by the transport's own builder), returning ranked cycle counts by address -- total and self cycles, each with a percentage -- in the emulator's own rank order (highest first). \"prof flat\" carries no build-time guard at all.",
|
|
4197
|
+
"inputSchema": {
|
|
4198
|
+
"type": "object",
|
|
4199
|
+
"properties": {
|
|
4200
|
+
"count": {
|
|
4201
|
+
"type": "integer",
|
|
4202
|
+
"minimum": 1,
|
|
4203
|
+
"maximum": 65535,
|
|
4204
|
+
"description": "Number of ranked rows to request. Omitted dials the bare \"prof flat\" verb."
|
|
4205
|
+
}
|
|
4206
|
+
},
|
|
4207
|
+
"additionalProperties": false
|
|
4208
|
+
},
|
|
4209
|
+
"outputSchema": {
|
|
4210
|
+
"type": "object",
|
|
4211
|
+
"properties": {
|
|
4212
|
+
"command": {
|
|
4213
|
+
"type": "string"
|
|
4214
|
+
},
|
|
4215
|
+
"identityWarning": {
|
|
4216
|
+
"type": "string"
|
|
4217
|
+
},
|
|
4218
|
+
"entries": {
|
|
4219
|
+
"type": "array",
|
|
4220
|
+
"items": {
|
|
4221
|
+
"type": "object",
|
|
4222
|
+
"properties": {
|
|
4223
|
+
"totalCycles": {
|
|
4224
|
+
"type": "integer"
|
|
4225
|
+
},
|
|
4226
|
+
"totalPercent": {
|
|
4227
|
+
"type": "number"
|
|
4228
|
+
},
|
|
4229
|
+
"selfCycles": {
|
|
4230
|
+
"type": "integer"
|
|
4231
|
+
},
|
|
4232
|
+
"selfPercent": {
|
|
4233
|
+
"type": "number"
|
|
4234
|
+
},
|
|
4235
|
+
"address": {
|
|
4236
|
+
"type": "integer"
|
|
4237
|
+
}
|
|
4238
|
+
},
|
|
4239
|
+
"required": [
|
|
4240
|
+
"totalCycles",
|
|
4241
|
+
"totalPercent",
|
|
4242
|
+
"selfCycles",
|
|
4243
|
+
"selfPercent",
|
|
4244
|
+
"address"
|
|
4245
|
+
]
|
|
4246
|
+
}
|
|
4247
|
+
},
|
|
4248
|
+
"count": {
|
|
4249
|
+
"type": "integer"
|
|
4250
|
+
},
|
|
4251
|
+
"decimalSeparator": {
|
|
4252
|
+
"type": "string",
|
|
4253
|
+
"enum": [
|
|
4254
|
+
",",
|
|
4255
|
+
"."
|
|
4256
|
+
]
|
|
4257
|
+
},
|
|
4258
|
+
"runState": {
|
|
4259
|
+
"type": "string",
|
|
4260
|
+
"enum": [
|
|
4261
|
+
"running",
|
|
4262
|
+
"stopped",
|
|
4263
|
+
"unknown"
|
|
4264
|
+
]
|
|
4265
|
+
}
|
|
4266
|
+
},
|
|
4267
|
+
"required": [
|
|
4268
|
+
"command",
|
|
4269
|
+
"entries",
|
|
4270
|
+
"count",
|
|
4271
|
+
"decimalSeparator",
|
|
4272
|
+
"runState"
|
|
4273
|
+
]
|
|
4274
|
+
}
|
|
4275
|
+
},
|
|
4276
|
+
{
|
|
4277
|
+
"name": "vice_backtrace",
|
|
4278
|
+
"description": "Reaches VICE's text monitor over the -remotemonitor channel and halts the machine for the duration of the command, exactly as a binary-monitor command does. Issues the bare, unparameterized \"bt\" verb -- \"depth\" never reaches the wire; it truncates the PARSED frame list client-side, since \"bt\" itself takes no wire parameter -- returning the current-PC frame plus the reconstructed JSR-chain frames in the emulator's own emitted order, each with its origin, callee, SP offset, raw bytes and disassembly. The fork advertises this same tool name over its own custom HTTP API with an UNDECLARED response shape; this stock entry's structured, declared outputSchema is the two backends' one point of difference for this shared name.",
|
|
4279
|
+
"inputSchema": {
|
|
4280
|
+
"type": "object",
|
|
4281
|
+
"properties": {
|
|
4282
|
+
"depth": {
|
|
4283
|
+
"type": "number",
|
|
4284
|
+
"description": "Max stack frames to show (default: 16, max: 64). A client-side projection filter applied to the PARSED frame list -- \"bt\" itself takes no wire parameter."
|
|
4285
|
+
}
|
|
4286
|
+
},
|
|
4287
|
+
"additionalProperties": false
|
|
4288
|
+
},
|
|
4289
|
+
"outputSchema": {
|
|
4290
|
+
"type": "object",
|
|
4291
|
+
"properties": {
|
|
4292
|
+
"command": {
|
|
4293
|
+
"type": "string"
|
|
4294
|
+
},
|
|
4295
|
+
"identityWarning": {
|
|
4296
|
+
"type": "string"
|
|
4297
|
+
},
|
|
4298
|
+
"currentPc": {
|
|
4299
|
+
"type": "object",
|
|
4300
|
+
"properties": {
|
|
4301
|
+
"address": {
|
|
4302
|
+
"type": "integer"
|
|
4303
|
+
},
|
|
4304
|
+
"bytes": {
|
|
4305
|
+
"type": "array",
|
|
4306
|
+
"items": {
|
|
4307
|
+
"type": "integer"
|
|
4308
|
+
}
|
|
4309
|
+
},
|
|
4310
|
+
"disassembly": {
|
|
4311
|
+
"type": "string"
|
|
4312
|
+
}
|
|
4313
|
+
},
|
|
4314
|
+
"required": [
|
|
4315
|
+
"address",
|
|
4316
|
+
"bytes",
|
|
4317
|
+
"disassembly"
|
|
4318
|
+
]
|
|
4319
|
+
},
|
|
4320
|
+
"frames": {
|
|
4321
|
+
"type": "array",
|
|
4322
|
+
"items": {
|
|
4323
|
+
"type": "object",
|
|
4324
|
+
"properties": {
|
|
4325
|
+
"origin": {},
|
|
4326
|
+
"callee": {
|
|
4327
|
+
"type": "integer"
|
|
4328
|
+
},
|
|
4329
|
+
"spOffset": {
|
|
4330
|
+
"type": "integer"
|
|
4331
|
+
},
|
|
4332
|
+
"address": {
|
|
4333
|
+
"type": "integer"
|
|
4334
|
+
},
|
|
4335
|
+
"bytes": {
|
|
4336
|
+
"type": "array",
|
|
4337
|
+
"items": {
|
|
4338
|
+
"type": "integer"
|
|
4339
|
+
}
|
|
4340
|
+
},
|
|
4341
|
+
"disassembly": {
|
|
4342
|
+
"type": "string"
|
|
4343
|
+
}
|
|
4344
|
+
},
|
|
4345
|
+
"required": [
|
|
4346
|
+
"origin",
|
|
4347
|
+
"callee",
|
|
4348
|
+
"spOffset",
|
|
4349
|
+
"address",
|
|
4350
|
+
"bytes",
|
|
4351
|
+
"disassembly"
|
|
4352
|
+
]
|
|
4353
|
+
}
|
|
4354
|
+
},
|
|
4355
|
+
"returnedCount": {
|
|
4356
|
+
"type": "integer"
|
|
4357
|
+
},
|
|
4358
|
+
"totalCount": {
|
|
4359
|
+
"type": "integer"
|
|
4360
|
+
},
|
|
4361
|
+
"truncated": {
|
|
4362
|
+
"type": "boolean"
|
|
4363
|
+
},
|
|
4364
|
+
"runState": {
|
|
4365
|
+
"type": "string",
|
|
4366
|
+
"enum": [
|
|
4367
|
+
"running",
|
|
4368
|
+
"stopped",
|
|
4369
|
+
"unknown"
|
|
4370
|
+
]
|
|
4371
|
+
}
|
|
4372
|
+
},
|
|
4373
|
+
"required": [
|
|
4374
|
+
"command",
|
|
4375
|
+
"currentPc",
|
|
4376
|
+
"frames",
|
|
4377
|
+
"returnedCount",
|
|
4378
|
+
"totalCount",
|
|
4379
|
+
"truncated",
|
|
4380
|
+
"runState"
|
|
4381
|
+
]
|
|
4382
|
+
}
|
|
4383
|
+
},
|
|
4384
|
+
{
|
|
4385
|
+
"name": "vice_io_registers",
|
|
4386
|
+
"description": "Stock-only, no fork counterpart -- reaches VICE's text monitor over the -remotemonitor channel and halts the machine for the duration of the command, exactly as a binary-monitor command does. Issues \"io $aaaa\" for the REQUIRED \"address\" argument (the bare \"io\" verb dumps every chip; this tool decodes the chip covering exactly one address), returning the chip's 64-byte register dump, its decoded VIC-II display state, and its sprite table. Every decoded-prose line this parser does not recognise is preserved verbatim and counted, never silently dropped or mapped onto a typed field. \"io\" carries no build-time guard, but degrades per-chip at runtime with its own two fixed strings when a chip has nothing to report -- reported as a named chip fact, never mistaken for a missing build capability. The decoded display state and sprite table are VIC-II only; an address covered by another chip (e.g. CIA1, CIA2, SID) is refused by name, with its register dump reported as having read cleanly.",
|
|
4387
|
+
"inputSchema": {
|
|
4388
|
+
"type": "object",
|
|
4389
|
+
"properties": {
|
|
4390
|
+
"address": {
|
|
4391
|
+
"type": "integer",
|
|
4392
|
+
"minimum": 0,
|
|
4393
|
+
"maximum": 65535,
|
|
4394
|
+
"description": "REQUIRED. The C64 address whose covering chip is decoded."
|
|
4395
|
+
}
|
|
4396
|
+
},
|
|
4397
|
+
"required": [
|
|
4398
|
+
"address"
|
|
4399
|
+
],
|
|
4400
|
+
"additionalProperties": false
|
|
4401
|
+
},
|
|
4402
|
+
"outputSchema": {
|
|
4403
|
+
"type": "object",
|
|
4404
|
+
"properties": {
|
|
4405
|
+
"command": {
|
|
4406
|
+
"type": "string"
|
|
4407
|
+
},
|
|
4408
|
+
"identityWarning": {
|
|
4409
|
+
"type": "string"
|
|
4410
|
+
},
|
|
4411
|
+
"sections": {
|
|
4412
|
+
"type": "array",
|
|
4413
|
+
"items": {
|
|
4414
|
+
"type": "object",
|
|
4415
|
+
"properties": {
|
|
4416
|
+
"chip": {
|
|
4417
|
+
"type": "string"
|
|
4418
|
+
},
|
|
4419
|
+
"dump": {
|
|
4420
|
+
"type": "object",
|
|
4421
|
+
"properties": {
|
|
4422
|
+
"baseAddress": {
|
|
4423
|
+
"type": "integer"
|
|
4424
|
+
},
|
|
4425
|
+
"bytes": {
|
|
4426
|
+
"type": "array",
|
|
4427
|
+
"items": {
|
|
4428
|
+
"type": "integer"
|
|
4429
|
+
}
|
|
4430
|
+
}
|
|
4431
|
+
},
|
|
4432
|
+
"required": [
|
|
4433
|
+
"baseAddress",
|
|
4434
|
+
"bytes"
|
|
4435
|
+
]
|
|
4436
|
+
},
|
|
4437
|
+
"decoded": {
|
|
4438
|
+
"type": "object"
|
|
4439
|
+
},
|
|
4440
|
+
"sprites": {
|
|
4441
|
+
"type": "object",
|
|
4442
|
+
"properties": {
|
|
4443
|
+
"columns": {
|
|
4444
|
+
"type": "integer"
|
|
4445
|
+
},
|
|
4446
|
+
"rows": {
|
|
4447
|
+
"type": "array",
|
|
4448
|
+
"items": {
|
|
4449
|
+
"type": "object",
|
|
4450
|
+
"properties": {
|
|
4451
|
+
"label": {
|
|
4452
|
+
"type": "string"
|
|
4453
|
+
},
|
|
4454
|
+
"values": {
|
|
4455
|
+
"type": "array",
|
|
4456
|
+
"items": {
|
|
4457
|
+
"type": "string"
|
|
4458
|
+
}
|
|
4459
|
+
}
|
|
4460
|
+
},
|
|
4461
|
+
"required": [
|
|
4462
|
+
"label",
|
|
4463
|
+
"values"
|
|
4464
|
+
]
|
|
4465
|
+
}
|
|
4466
|
+
}
|
|
4467
|
+
},
|
|
4468
|
+
"required": [
|
|
4469
|
+
"columns",
|
|
4470
|
+
"rows"
|
|
4471
|
+
]
|
|
4472
|
+
}
|
|
4473
|
+
},
|
|
4474
|
+
"required": [
|
|
4475
|
+
"chip",
|
|
4476
|
+
"dump",
|
|
4477
|
+
"decoded",
|
|
4478
|
+
"sprites"
|
|
4479
|
+
]
|
|
4480
|
+
}
|
|
4481
|
+
},
|
|
4482
|
+
"unrecognisedLines": {
|
|
4483
|
+
"type": "array",
|
|
4484
|
+
"items": {
|
|
4485
|
+
"type": "string"
|
|
4486
|
+
}
|
|
4487
|
+
},
|
|
4488
|
+
"unrecognisedLineCount": {
|
|
4489
|
+
"type": "integer"
|
|
4490
|
+
},
|
|
4491
|
+
"runState": {
|
|
4492
|
+
"type": "string",
|
|
4493
|
+
"enum": [
|
|
4494
|
+
"running",
|
|
4495
|
+
"stopped",
|
|
4496
|
+
"unknown"
|
|
4497
|
+
]
|
|
4498
|
+
}
|
|
4499
|
+
},
|
|
4500
|
+
"required": [
|
|
4501
|
+
"command",
|
|
4502
|
+
"sections",
|
|
4503
|
+
"unrecognisedLines",
|
|
4504
|
+
"unrecognisedLineCount",
|
|
4505
|
+
"runState"
|
|
4506
|
+
]
|
|
4507
|
+
}
|
|
3647
4508
|
}
|
|
3648
4509
|
]
|
|
3649
4510
|
}
|