Сборщик образов картриджей ПЗУ для приставки "Эльф"
(C) Prusak, https://zxbyte.ru
---------------------------------------------------

Программа представляет собой скрипт на языке Python и позволяет собрать образ картриджа ПЗУ для приставки "Эльф" из файлов игр *.alf.

Системные требования: требуется Python (проверялось на версии 3.10).

Вызов программы через командную строку:
python ALFimageBuilder.py [выходной файл] [входной файл со списком игр] [keys]
где:
	[выходной файл] - первый по счёту файл будет считаться выходным файлом. Если такой файл уже есть, он пересоздаётся.
	[входной файл] - текстовый файл со списком игр, которые нужно включить в формируемую прошивку. Требования к списку см. внутри файла spisok.txt.
	[keys] - ключи (необязательный параметр):
	/R - режим сборки образа ПЗУ с играми для установки на плату приставки "Эльф".
Объём ПЗУ ограничивается значением 128КБ. Из них 32КБ занимают 2 банка с прошивками меню "Эльф" и BASIC-48. Таким образом для игр остаётся 96КБ данных.
При вызове программы без ключей сборка осуществляется в образ картриджа.

Пример вызова: python ALFimageBuilder.py ROM0.bin spisok.txt
Программа, используя список игр из файла spisok.txt, создаст файл образ ПЗУ ROM0.bin для картриджа приставки "Эльф".

Ещё один пример: в этой папке есть файл spisok.txt, где указана игра Bruce Lee
Запускайте файл RunMe.bat, который из spisok.txt создаст образ ПЗУ картриджа.
Дальше, чтобы посмотреть как этот образ картриджа будет выглядеть в эмуляторе, запустите EMU.bat.





!!! В папке files ничего не менять и не удалять !!!


Возможные ошибки: 
- Invalid command line syntax - недостаточное количество аргументов командной строки;
- Not enough arguments - не указаны входной или выходной файлы;
- File size is not supported by ALF! - если в процессе сборки файл прошивки превысит объём 1МБ (для варианта сборки образа картриджа) или 128КБ (для варианта сборки образа ПЗУ на плату приставки);
- No games detected in file - если во входном файле не обнаружено ни одной игры;
- Internal catalog end marker error - ошибка в структуре внутреннего каталога обрабатываемого файла *.alf. Если во внутреннем каталоге больше 18 файлов, или если не найден маркер конца каталога;
- File structure error -  Если в заголовке alf-файла отсутствует байт #02 или #80 перед внутренним каталогом файлов.



ПРИЛОЖЕНИЕ
--------------

СТРУКТУРА ФАЙЛА *.alf

#0000-#02F3 (длина #02F4) - описание игры

Дальше начинается загрузчик игры:

#02F4 (длина 2 байта) - команда JR xxxx
#02F6 (длина 2 байта) - адрес компиляции загрузчика
#02F8 (длина 3 байта) - адрес начала игры относительно начала прошивки. Эти байты задаются сборщиком игр при обработке списка игр для помещения на в образ ПЗУ
#92FB (длина 1 байт) - значение, посылаемое в порт конфигурации приставки "Эльф" для включения первого банка ПЗУ с прошивкой. Может принимать только 2 значения - #80 (в случае вызова игры из прошивки для картриджа), либо #02 - в случае вызова игры из прошивки внутреннего ПЗУ Эльф
#02FC - таблица файлов внутри *.alf файла. Всего может быть не более 18 файлов! Это количество ограничено возможностью адресации команды JR
	Состоит из записей длиной по 5 байт.
	Байт +0 (длина 3) - адрес начала файла относительно начала *.alf файла;
	Байт +3 (длина 2) - длина файла.
После записи последнего файла идёт байт со значением #FF


Дальше идёт продолжение загрузчика. Сюда указывает команда JR xxxx.

После загрузчика добавляются 3 байта с командой перехода на начало загрузчика (JP xxxx, #C3 xx xx, где xxxx - адрес компиляции загрузчика)

Дальше располагаются файлы.