ReDMCSB DM1/CSB Native Parity Audit

Audit date: 2026-08-31 Reference: local ReDMCSB WIP20210206, Toolchains/Common/Source/ Scope: Firestaff’s native DM1 and CSB V1 routes. ReDMCSB establishes control flow and data ownership; it is not treated as a substitute for original-media captures.

Corrections made from source review

Area ReDMCSB evidence Firestaff correction Verification
DM1 psychic defence CHAMPION.C:F0321 calls BASE.C:F0030; the scaled product truncates Removed a host half-up rounding step from F0762_MAGIC_GetDefenderPsychicAdjustedAttack_Compat dm1_v1_combat_damage_source_lock
DM1/CSB low-stamina arithmetic CHAMPION.C:F0306 documents package/compiler operand-order behaviour Native handoff chooses first-operand semantics only for Megamax Atari ST and High C FM Towns; PC 3.4 and DM1 Amiga 2.x retain second-operand semantics dm1_v1_f0306_stamina_pc34_compat
DM1 PC 3.4 screen palette DATA.C:G0347 and PALETTE.C:G3088 give the top/bottom RGB4 values Replaced a hand-written Atari-looking DAC palette in the PC3.4 compatibility screen with the exact G0347 values, losslessly expanded into the host DAC6 representation dm1_v1_screen_framebuffer_pc34_compat, dm1_v1_pc34_native_cli_boot, dm1_v1_dos_en_archive_cli_boot
DM1 floor-object relocation DUNGEON.C:F0163 (line 1769) appends one THING only after clearing its next link; F0164 (line 1840) removes the current list owner before a move. MOVESENS.C:804→870 demonstrates that order in a source movement path. Made the compact floor-cell drop transaction unlink → capacity-check → link, including rollback on a full destination; it can no longer leave duplicated floor entries or move coordinates without a list entry. The live M11 regressions follow authentic Atari ST and Amiga C2548 alcove objects through F0302 inventory→mouse-hand and F0374 mouse-hand→floor, then read the compact source chain to require exactly one owner. dm1_v1_object_interaction_source_lock; m11_dm1_real_alcove_item_runtime_atari_st, m11_dm1_real_alcove_item_runtime_amiga20 (retail ZIPs, in-memory)
DM1 real archive object transfer CLIKVIEW.C:F0373 moves the painted pile-top THING to G4055; PANEL.C:F0302 then owns placement in a legal inventory slot Alcove hit-testing now accepts the visible native F0132 destination rectangle as well as PC34 F0791/C2500 zones. Atari ST 1.2 and Amiga 2.0 archive tests verify pickup, legal inventory placement, and floor ownership after drop. m11_dm1_real_alcove_item_runtime_atari_st, m11_dm1_real_alcove_item_runtime_amiga20 (original ZIPs, in-memory)
DM1 HoC wall object visibility DUNVIEW.C:F0115 classifies drawable items from the current square’s Thing chain; REVIVE.C:F0280 consumes C127 mirror candidates. Ordinary wall sensors such as C013 are independent controls. Limited HoC payload suppression to C127 mirror controls and recognized mirror text. A generic sensor no longer suppresses unrelated original wall objects; the PC34 stair-torch regression verifies its F0115 candidate and exact global ornament 32 pixels from original GRAPHICS.DAT. dm1_v1_projectile_explosion_render_pc34_compat; dm1_v1_viewport_floor_ceiling_items_pc34_compat; m11_dm1_hoc_wall_material_receipt_pc34 (PC34 ZIP, in-memory)
DM1 alcove cross-platform fixture coverage DUNVIEW.C:F0124 only presents an item when the original wall Thing chain contains both an alcove sensor and an item The real-media test also boots IIGS 2.1 and FM Towns English archives, then skips the interaction when that source-owned Thing-chain fixture is absent; no item is synthesized for coverage. m11_dm1_real_alcove_item_runtime_iigs, m11_dm1_real_alcove_item_runtime_fmtowns (original media, in-memory; skipped: fixture absent)
DM1 PC 3.4 audio from selected archive SOUND.C:F0740-F0743 consumes SONG.DAT; SWSH.C drives the title PSG program, while GRAPHICS.DAT:SND3 owns in-game effects The audio locator now recognizes a selected retail ZIP as a data root and passes ZIP::DATA/SONG.DAT and ZIP::DATA/GRAPHICS.DAT to the shared bounded reader. No media file is extracted or written. The source music gate and live M11 audio initialization both exercise those virtual paths. dm1_v1_f0740_f0743_music_source_gate; dm1_v1_swsh_psg_audio_pc34_compat (PC34 ZIP, in-memory)
DM1 PC 3.4 sound-event arbitration data DATA.C:1264-1310 MEDIA719/MEDIA712 defines all 35 I34E rows; SOUND.C:F0064/F0065 consumes each row’s period, priority and loud/soft distances Replaced guessed host values with the exact source rows and rejects invalid event indices before M11 presentation. A packed-media gate binds every event to its authentic SND3 item and decodes the complete source bank in memory. dm1_v1_sound_music_source_lock; dm1_v1_audio_source_closure_real_pc34
CLI selected-game ingress ReDMCSB’s STARTUP1.C → TITLE.C:F0437 → ENTRANCE.C:F0441 path is reachable only after the caller has selected the game; --menu is an explicit alternative path Initialised M11_PhaseA_Options.menuRequested. The field had been added to the public options type without a default, so stack bytes could make ordinary --game dm1 silently retain M12 instead of entering the selected-game transaction m11_direct_launch_prepare_all_games; debugger-backed native CLI option check (directLaunch=1, menuRequested=0)
DM1 open fake-wall floor ornaments DUNGEON.C:F0172 converts an open fake wall to a corridor, then calls F0170 for M558; a closed fake wall instead follows the wall route Preserve that effective-element conversion when calculating the M11 floor-ornament ordinal, so an open fake wall may expose its source-owned random ornament while a closed one cannot test_m11_overlay_command_queue_block
DM1 closed fake-wall wall sensors DUNGEON.C:F0172 converts a closed fake wall to C00 before walking wall TEXTSTRING/SENSOR things Use the effective wall class for the M11 sensor and ornament draw paths, so visible source ornaments on closed or imaginary fake walls are no longer discarded as raw type C06 test_m11_overlay_command_queue_block
CSB teleporter eligibility CSB’s Lord Chaos/Grey Lord/Materializer rule differs from the DM1 comparison path CSB helper defaults to the CSB rule and exposes DM1 only as an explicit comparison mode csb_v1_graphics_extras_pc34_compat
CSB F0093 creature palette DUNVIEW.C:2805-2815 restores colour slots 9/10 through replacement sets 8/12 before walking CurrentMapAllowedCreatureTypes; Atari and version-3 G2025/F0695 tables have distinct D3 targets The live M11 adapter resets both slots, applies the current map’s final ordered owner, and selects the source palette family for Atari, Amiga, and FM Towns rather than applying PC targets csb_v1_f0093_replacement_palette_pc34_compat, real Atari/Amiga/FM Towns startup and M12→M11 handoff tests
CSB Atari MSA intake Atari preservation media must be decoded in memory before the FAT-owned game files are read Removed an impossible host-size overflow branch after retaining the actual MSA bounds (<=64 sectors/track, <=2 sides); the remaining multiplication guards cover the decoded image csb_v1_atari_msa
CSB FM Towns F0115 group blit DUNVIEW.C:F0093 applies the current map’s ordered allowed-creature palette owners before F0115 draws a group The F31 runtime stores its admitted dungeon outside M11’s legacy DM1 mirror. The palette bridge now reads that real map’s metadata list directly from the owned dungeon payload, so F0093 can complete and the IMG2-backed Prison group blits rather than failing closed csb_v1_fmtowns_en_m11_real_media_handoff, csb_v1_fmtowns_ja_m11_real_media_handoff
CSB M11 input bridge scope COMMAND.C:F0361/F0380 queues and dispatches C001..C006; mouse hits reach the same queue through F0358/F0359 Corrected stale wording that described the narrow event translator as an active playability TODO. M11 owns the live keyboard, pointer, and gamepad consumers and invokes the bridge only for the source command queue transition csb_v1_input_command_bridge_pc34_compat, csb_v1_command_input_geometry_pc34_compat, m11_gamepad_csb_input_bridge
CSB launcher-gate regression fixture M12’s current interaction is game card -> platform card -> presentation card -> launch; it must not silently reinterpret a platform-selection action as a launch Marked the fixture as already past the platform-card step before it sends ACCEPT to the canonical launch gate. The test again verifies the intended invariant: hash-shaped launcher metadata can form an intent but cannot manufacture the absent original files needed by the native CSB boot profile csb_v1_required_complete_launches
DM1 FM Towns picture-library loader test The shipped Towns runtime owns DATA/GRAPHICS.DAT; ReDMCSB’s FM Towns source maps this through INIT_PIC_LIB / READ_ASSET rather than a generated cache Removed the test-only /tmp fixtures. Fixtures now stay in CTest’s build working directory and are removed after each assertion, matching Firestaff’s no-extraction storage rule Rebuilt test_dm1_v1_fmtowns_pic_library_loader; direct CTest pass

Validated boundaries

Evidence still required

The following are deliberately not marked complete without original media captures:

Synthetic fixtures may isolate these rules in tests, but they do not satisfy any of the capture requirements above.