NES550D is an experimental Mapper 0/NROM, Mapper 1/MMC1 and Mapper 4/MMC3 emulator module for Magic Lantern on the Canon EOS 550D, firmware 1.0.9. It provides the ML menu, persistent configuration, safe task lifecycle, iNES ROM discovery, queued controller input, 6502 execution, PPU background/sprite output, basic APU audio, and a 720×480 display with either a centered 512×480 exact-2× NES viewport or a nearest-neighbour 720×480 stretched fullscreen mode.
No external emulator source is included. The implementation is original to
this module. Camera-specific display, input, storage and ASIF-DMA audio remain
outside the portable core in nes550d.c and nes_audio_ml.c.
The POC compatibility target is iNES Mapper 0, MMC1 PRG switching/mirroring
with 8 KiB CHR-RAM, and MMC3 PRG/CHR switching, mirroring and approximate
scanline IRQs. Logic is scheduled near 60 Hz independently from
adaptively scheduled camera display frames. The display scheduler always shows
an initial frame, forces a refresh after eight logic frames, and resynchronizes
after sustained deadline loss; a slow ROM can reduce display rate without
becoming permanently gray. CPU, PPU and APU timing remains approximate rather
than cycle accurate; MMC1 CHR-ROM banking and MMC3 A12 edge timing are
incomplete.
Debug sessions use separate ML/LOGS/NES-<rom>.LOG and -RAW.LOG files.
Build from this directory with make. The result is build/nes.mo.
Install only on a compatible Magic Lantern 550D.109 build by copying it to
ML/MODULES/. Put authorized .nes files in ML/NES/.
Files in roms/*.nes are intentionally ignored by Git and must not be added
to commits, archives, or releases. To copy up to 32 local test ROMs to an
attached 550D.109 card without changing push.sh, run:
./push-roms.sh /path/to/cardThe helper verifies ML/MODULES/550D_109.sym before writing to ML/NES/.