Skip to content

Commit 96d168f

Browse files
committed
[mcp] Fix bug in get disassembly getting stuck forever
1 parent 81c4b3f commit 96d168f

File tree

2 files changed

+13
-11
lines changed

2 files changed

+13
-11
lines changed

platforms/shared/desktop/mcp/mcp_debug_adapter.cpp

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -337,21 +337,21 @@ std::vector<DisasmLine> DebugAdapter::GetDisassembly(u16 start_address, u16 end_
337337
}
338338
}
339339

340-
u16 addr = scan_start;
340+
u32 addr = scan_start;
341341

342-
while (addr <= end_address)
342+
while (addr <= (u32)end_address)
343343
{
344344
GG_Disassembler_Record* record = NULL;
345345

346346
if (use_explicit_bank)
347-
record = memory->GetDisassemblerRecord(addr, (u8)bank);
347+
record = memory->GetDisassemblerRecord((u16)addr, (u8)bank);
348348
else
349-
record = memory->GetDisassemblerRecord(addr);
349+
record = memory->GetDisassemblerRecord((u16)addr);
350350

351351
if (IsValidPointer(record) && record->name[0] != 0)
352352
{
353353
DisasmLine line;
354-
line.address = addr;
354+
line.address = (u16)addr;
355355
line.bank = record->bank;
356356
line.name = record->name;
357357
strip_color_tags(line.name);
@@ -381,7 +381,7 @@ std::vector<DisasmLine> DebugAdapter::GetDisassembly(u16 start_address, u16 end_
381381
// Handle wrap-around within the bank when explicit bank is used
382382
if (use_explicit_bank)
383383
{
384-
u16 offset_in_bank = addr & 0x1FFF;
384+
u16 offset_in_bank = (u16)addr & 0x1FFF;
385385
offset_in_bank += (u16)record->size;
386386
if (offset_in_bank >= 0x2000)
387387
{
@@ -392,7 +392,7 @@ std::vector<DisasmLine> DebugAdapter::GetDisassembly(u16 start_address, u16 end_
392392
}
393393
else
394394
{
395-
addr = addr + (u16)record->size;
395+
addr = addr + (u32)record->size;
396396
}
397397

398398
if (record->size == 0)
@@ -403,9 +403,6 @@ std::vector<DisasmLine> DebugAdapter::GetDisassembly(u16 start_address, u16 end_
403403
// No record at this address, try next byte
404404
addr++;
405405
}
406-
407-
if (addr < start_address && !use_explicit_bank)
408-
break;
409406
}
410407

411408
return result;

platforms/shared/desktop/mcp/mcp_server.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,8 @@ void McpServer::HandleToolsList(const json& request)
507507
{"title", "Get Disassembly"},
508508
{"description", "Get disassembled HuC6280 assembly code for a logical address range. "
509509
"Returns: logical address, bank, segment, mnemonic, and raw bytes. "
510-
"NOTE: Disassembled records only exist for code that has been executed during emulation."},
510+
"NOTE: Disassembled records only exist for code that has been executed during emulation. "
511+
"Recommended max range is 0x2000 (one bank). Use multiple calls for larger areas."},
511512
{"inputSchema", {
512513
{"type", "object"},
513514
{"properties", {
@@ -1601,6 +1602,10 @@ json McpServer::ExecuteCommand(const std::string& toolName, const json& argument
16011602
if (start_address > end_address)
16021603
return {{"error", "start_address must be <= end_address"}};
16031604

1605+
u32 range_size = (u32)end_address - (u32)start_address + 1;
1606+
if (range_size > 0x2000)
1607+
return {{"error", "Address range too large. Maximum range is 0x2000 (8KB). Use smaller ranges for disassembly."}};
1608+
16041609
// Optional bank parameter (-1 means use current MPR mappings)
16051610
int bank = -1;
16061611
if (arguments.contains("bank"))

0 commit comments

Comments
 (0)