NES ROM 9999-in-1 на MMC1 SNROM (256KB PRG, 8KB CHR-RAM). Проект на ca65/ld65 в Linux.
Есть рабочее меню в последнем банке (взято с маппера 212). Нужно переделать запуск игр для MMC1.

ЦЕЛЬ: добавить код загрузчика выбранной игры.

Данные:
- По адресу $001c хранится индекс (0-255) в таблицу повторений игр.
- Таблица повторений (256 байт):
.byte $01,$02,$03,$04,$05,$02,$01,$03,$05,$03,$05,$02,$03,$05,$03,$01
.byte $02,$03,$06,$05,$02,$01,$03,$05,$03,$05,$02,$03,$05,$03,$01,$02
.byte $03,$04,$05,$02,$01,$03,$05,$03,$05,$02,$03,$05,$03,$01,$02,$03
.byte $06,$05,$02,$01,$03,$05,$03,$05,$02,$03,$05,$03,$01,$02,$03,$04
.byte $05,$02,$01,$03,$05,$03,$05,$02,$03,$05,$03,$01,$07,$03,$06,$05
.byte $02,$01,$03,$05,$03,$05,$02,$03,$05,$03,$01,$02,$03,$05,$05,$02
.byte $01,$03,$05,$03,$05,$02,$03,$05,$03,$01,$02,$03,$05,$05,$08,$01
.byte $03,$05,$03,$05,$02,$03,$05,$03,$01,$02,$03,$05,$05,$02,$01,$03
.byte $05,$03,$05,$02,$03,$05,$03,$01,$02,$03,$05,$05,$02,$01,$03,$05
.byte $03,$05,$02,$03,$05,$03,$01,$02,$03,$05,$05,$02,$01,$03,$05,$03
.byte $05,$02,$03,$05,$03,$01,$02,$03,$05,$05,$02,$01,$03,$05,$03,$05
.byte $02,$03,$05,$03,$01,$02,$03,$05,$05,$02,$01,$03,$05,$03,$05,$02
.byte $03,$05,$03,$01,$02,$03,$05,$05,$02,$01,$03,$05,$03,$05,$02,$03
.byte $05,$03,$01,$02,$03,$05,$05,$02,$01,$03,$05,$03,$05,$09,$03,$05
.byte $03,$01,$02,$03,$05,$05,$02,$01,$03,$05,$03,$05,$02,$03,$05,$03
.byte $01,$02,$03,$05,$05,$02,$01,$03,$05,$03,$05,$02,$03,$05,$03,$01
- Список игр с параметрами (PRG размер, CHR размер, Mirroring, банки в ROM):
  1: Super Mario Bros (32KB,8KB,Horiz) - PRG банки 2-3, CHR в TILES
  2: Battle City (16KB,8KB,Vert) - PRG банк 4, CHR в BC_LB_CHR
  3: Galaxian (8KB,8KB,Vert) - PRG банк 1, CHR в GALAXIAN_CHR
  4: Lunar Ball (16KB,8KB,Vert) - PRG банк 6, CHR в BC_LB_CHR
  5: Duck Hunt (16KB,8KB,Horiz) - PRG банк 7, CHR в DH_WG_CHR
  6: Wild Gunman (16KB,8KB,Horiz) - PRG банк 9, CHR в DH_WG_CHR
  7: Balloon Fight (16KB,8KB,Horiz) - PRG банк 10, CHR в BF_BM_CHR
  8: Bomberman (16KB,8KB,Horiz) - PRG банк 12, CHR в BF_BM_CHR
  9: Ice Climber (16KB,8KB,Vert) - PRG банк 13, CHR в IC_CHR

ТРЕБОВАНИЯ к загрузчику:
1. Разместить в RAM (копировать при запуске) - иначе зависание.
2. Прочитать индекс из $001c, взять номер игры из таблицы повторений.
3. Для выбранной игры:
   - Настроить MMC1: Control register (mirroring: Horiz=0, Vert=1), CHR bank 0, CHR bank 1, PRG bank mode
   - Для 8KB CHR: оба CHR банка указывают на одну область ROM, копировать в CHR-RAM
   - Для 32KB PRG (Mario): настроить режим PRG с переключением двух банков
   - Для 16/8KB PRG: настроить режим с фиксированным последним банком
4. Скопировать CHR-данные в CHR-RAM через PPU $2007 (8KB)
5. Переключить PRG-банки согласно расположению игр
6. Выполнить прыжок на точку входа игры (обычно $8000)
7. Не смещать существующий код меню. Добавлять внизу сегмента CODE.

ВАЖНО: процедура выбора игры - _func_ecef. В ней нужно вызвать загрузчик.

Формат кода для ca65: локальные метки только с @, точка . только для директив, 16-битные адреса с < и >.

Уже есть Init_MMC1 в MMC1_INIT. Напиши код загрузчика с копированием в RAM, настройкой MMC1 для любой из 9 игр, и интеграцией в _func_ecef.
