From a remote user's Genesis block-tile/palette-matching session. All 5 items
built; verified live end-to-end.
- getTile/tilesAscii/tileFingerprints: Genesis VRAM is stored by gpgx as 16-bit
words in host-LE order, so raw video_ram bytes are word-byte-swapped vs the
VDP-logical layout — getTile was returning scrambled pixels (cost the user
10+ turns to diagnose). Now un-swapped by default for the live emulator
(logicalPixels:true; pass false for raw), with `byteSwapCorrected` in the
response. readMemory(video_ram) on Genesis gained a note documenting the swap.
- m68k symbol/map lookup: m68k-elf-ld now emits a linker map (-Map), surfaced
through buildForPlatform → buildSourceWithDebug({platform:"genesis"}) as the
.map text. Lets you find where a RAM var like `well` landed and writeMemory
to it. SGDK links work-RAM through its 0xE0FF0000 mirror; the low 16 bits are
the system_ram offset. VERIFIED: built a ROM, read `well @ 0xe0ff0048` from
the map, wrote to system_ram offset 0x48, read it back byte-exact.
- inspectPatternTiles `scale`: integer nearest-neighbor upscale so a small tile
strip is actually readable inline (the default 8×8 tiles were unreadable).
- previewTileArt `fromEmulator:true`: read tiles straight from live VRAM (no
readMemory→base64 round-trip), Genesis byte-swap handled; palette defaults to
live when tiles come from the emulator. Also fixed a latent bug where
paletteFromEmulator's getHostOrNull(sessionKey) had sessionKey undefined —
now threaded through previewTileArtCore.
- Genesis inspectPalette: returns a `subPalettes` grouping (PAL0=0-15 … PAL3=
48-63) + a note, so you don't guess which flat CRAM index your PALn is.
Suite 387 → 390, all green.