Skip to content

fix(video): Merlin 8 title banner renders MouseText where flashing text belongs #117

Description

@relmer

Symptom

Booting Merlin 8 v2.47 on --machine Apple2e, the title banner renders as
garbage glyphs where MERLIN should be. Everything else on the screen is
correct, including the 8 2.47 on the same line and the whole menu below it.

  <garbled>  |-8  2.47      <- only the "MERLIN" part is wrong
   By Glen Bredon
   C :Catalog                <- all correct
   L :Load source
   ...

What the character ranges say

The split is the diagnostic. Reading the banner as a text line:

  • 8, , 2, ., 4, 7 are $38 $20 $32 $2E $34 $37 -- all in $00-$3F,
    which is inverse uppercase under BOTH ALTCHARSET settings. Renders correctly.
  • M E R L I N written as $4D $45 $52 $4C $49 $4E lands in $40-$5F, which
    is flashing uppercase when ALTCHARSET=0 and MouseText when ALTCHARSET=1.
    Renders as garbage.
  • The menu text is $80-$FF normal. Renders correctly.

The garbled glyphs are consistent with MouseText shapes (partial boxes, line
segments, arrow-ish forms) appearing where flashing letters were intended.

That points at ALTCHARSET reading as 1 while Merlin expects 0 -- or at the
MouseText glyph data in the alt set being wrong. Only the one range is affected,
which is why nothing else on screen is disturbed.

What I ruled out

  • Renderer range logic. Both text renderers handle the ranges correctly.
    Apple80ColTextMode.cpp guards inline (flash = !m_altCharSet && charCode >= 0x40 && charCode < 0x80) and AppleTextMode.cpp gets the same effect from its
    if (charCode < 0x40) ... else if (charCode < 0x80) structure. They agree.
  • Missing video ROM. Apple2e_Video.rom is present at 4096 bytes, the 4K
    //e ROM that carries MouseText, and HasAltCharSet() keys off it.
  • Propagation. MachineManager::SelectVideoMode reads
    iieSoftSwitches->IsAltCharSet() and pushes it to both text renderers.

So the wiring is right and the suspect is narrower: either the soft-switch state
itself, or the alt-set glyph data.

Reproduction

Needs a Merlin 8 disk image, which is commercial software and not in the repo.

Casso.exe --machine Apple2e --disk1 <merlin8.do>

The banner is on the boot screen; no interaction required.

Impact

Display only. Found while validating Merlin 8 as the reference assembler for
specs/019-assembler-dialects -- the assembler itself is unaffected, and Merlin
is otherwise fully functional under emulation (menus, catalog, and disk access
all work correctly).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingimpact: userEmulator end user: running Apple II softwarepriority: mediumReal value, niche or polish (end-user-value triage)

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions