fix(gfx): 0x1f7 is a registry ERASE, not a create
RE correction: op 0x1f7's worker gfx_registry_erase_range (@0x47d8b0) loops gfx_registry_erase over [handle, handle+count) — a teardown, not a create. Objects are created lazily by the geometry SET ops (gfx_object_get_or_create). GfxState.EraseRange + VM case + tests; opcodes.toml renamed gfx-elem-create -> gfx-elem-erase; Ghidra handler + workers annotated. Booted SC0000 CG geometry unchanged for the working CGs (no regression). Engine 40 green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -253,9 +253,10 @@ public sealed class VirtualMachine
|
||||
{
|
||||
var o = Gfx.GetOrCreate(Read(a[0])); o.Field68 = Read(a[1]); o.Field6c = Read(a[2]); return pc + 1;
|
||||
}
|
||||
case "gfx-cmd-register": // 0x1a2 (val) — register/select
|
||||
case "gfx-elem-create": // 0x1f7 (handle)(count) — ensure object + slot
|
||||
case "gfx-cmd-register": // 0x1a2 (val) — register/insert
|
||||
Gfx.GetOrCreate(Read(a[0])); return pc + 1;
|
||||
case "gfx-elem-erase": // 0x1f7 (handle)(count) — erase registry range (teardown, NOT create)
|
||||
Gfx.EraseRange(Read(a[0]), Read(a[1])); return pc + 1;
|
||||
case "gfx-elem-release": // 0x1fa (handle)
|
||||
Gfx.Release(Read(a[0])); return pc + 1;
|
||||
case "gfx-blit-color": // 0x202 (handle)(x)(y)(alpha)(color) — blend deferred
|
||||
|
||||
Reference in New Issue
Block a user