GALAGA24 / NOVATO COMPATIBILITY INVESTIGATION
Investigated 23 October 2026

RESULT
A separate 32IC/32K standalone adaptation is a practical development path.
The current GALAGA24.COM cannot run unchanged. Renaming or relocating the
COM alone cannot fix the missing RAM and graphics hardware.
No full Novato-compatible Galaga game has been completed or tested here.

CURRENT NOVATO SOURCE REVIEWED
Repository: https://github.com/fatherdougalmaguire/Novato
Pinned commit: fee2a64ffe5b5479e5c0994ced2c8bdbe201364c
Files checked: Novato/Model/Bus.swift, Novato/Model/Keyboard.swift,
Novato/Metal Shader/ScreenBuffer.metal, Novato/NovatoApp.swift,
Novato/SettingsAndAbout.swift, and the current project README.
The current README describes beta status and implemented keyboard input.
Earlier descriptions of missing keyboard input were out of date.

CONCRETE DIFFERENCES
1. RAM: Novato maps 32K RAM at 0000-7FFF, BASIC ROM at 8000-BFFF,
   optional ROM at C000-DFFF, and network ROM at E000-EFFF.
   GALAGA24 uses working maps and lists across 8000-B3FF and a stack near
   BFF0. Writes to those ROM mappings do not supply the required RAM.
2. PCG: Novato allocates only 0800h bytes, or 128 8x16 characters.
   Premium PCG bank selection at port 1C is explicitly unimplemented.
   The display shader indexes characters 128-255 directly into that 2K
   array; it has no Premium attribute-bank lookup.
   GALAGA24's atlas has 502 sprite glyphs, in addition to its 128 font
   glyphs, and uses banked PCG and per-cell Premium attributes.
3. Loading: Novato can quick-load bytes at a configurable address and set
   the execution address. This supports a standalone BIN. It does not
   provide GALAGA24's expected CP/M BDOS, loader guard or warm-boot menu.
4. Keyboard: standard matrix input and CRTC addressed-key scans are
   implemented. A standalone build should scan ordinary matrix controls
   directly and remove CP/M keyboard calls. Premium arrows should not be
   assumed; comma/period/Space are a suitable initial baseline.
5. Colour: Novato implements Alpha/non-Premium colour encoding. A new
   backend must use that mapping rather than Premium colour attributes.
6. Sound/joystick: the current README lists sound and unfinished PIO data
   input/output work. Bus.swift has incomplete PIO input behaviour.
   Start with keyboard and no sound; do not promise joystick support.

RECOMMENDED GAME BUILD
- Standalone BIN quick-loaded below 8000, without CP/M dependencies.
- New standard-PCG renderer limited to 128 glyphs and low-RAM buffers.
- Use ROM text and a reduced/reused set of alien/sprite phases, or a
  carefully bounded dynamic tile cache. The existing 502-glyph renderer
  cannot simply be retained.
- Preserve GALAGA24 gameplay logic where memory and CPU budgets permit.
- Establish keyboard/display behaviour before adding colour and effects.
- Test on the actual Novato app before calling the full game compatible.
This is a substantial rendering/memory conversion, not a loader patch.

INCLUDED COMPATIBILITY PROBE
NOVPROBE.BIN is a 527-byte standalone Z80 diagnostic, not the full game.
It uses only 32K RAM, standard video/PCG, and ports 08/0B/0C/0D.
There are no CP/M calls, Premium attributes, sound or joystick reads.
It shows text and a small PCG alien. Held comma/period move the alien;
Space switches its pose and can be held simultaneously with movement.

HOW TO TRY IT
1. Reset Novato. Choose its emulated keyboard mapping.
2. Set Quickload load address to 0900 and start/execute address to 0900.
   These values are hexadecimal. Both addresses must be the same.
3. Quick-load NOVPROBE.BIN and run/resume.
4. Confirm the heading is readable and an alien appears near the middle.
5. Hold comma, release it, then hold period. Movement should continue
   while held and stop on release. Hold Space with period; the pose
   should change while movement continues.
6. Reset Novato to exit the test. Do not load this BIN as a CP/M COM.
A monochrome display is sufficient for this first test. The current
Novato source requires an emulator restart when changing colour mode.

VALIDATION AND LIMITS
The assembled binary was run in a Z80 CPU test with a source-based model
of Novato's 32K memory boundary, 2K PCG, colour latch and CRTC keyboard.
Checks passed for startup text, PCG bytes, held-key motion, stopping on
release, simultaneous Space/movement, supported ports only and no writes
to ROM or unavailable RAM. Source and test are included.
This model is not Novato itself. Its Swift CPU, UI keyboard delivery,
Metal renderer and timing have not been executed here; macOS is not
available in this environment. Real-app testing is still necessary.

REBUILD
z88dk-z80asm -b -m -oNOVPROBE.BIN NOVPROBE.asm
The Python test uses the z80 package used by the Microbee game tests.
