В какой-то теме на форуме был вопрос: что нужно для написания новых игр под Spec256?
Ответ звучал так: ничего.
Темы уже не помню, поэтому напишу в этой.
Поработав с раскраской нескольких игр и поэкспериментировав с аппаратным
эмулятором Spec256 пришел к выводу, что для минимизации аппаратных затрат нужно
придерживаться следующих правил:
Краткое руководство для написания игр в формате Spec256.
Те спрайты и тайлы, которые планируются к раскраске в 256-цветном режиме,
необходимо поместить в определенную область памяти, кратную степени двойки.
Например во второй банк (#8000 - #BFFF). Он же может быть использован в
ZX Spectrum128. При этом оперативной памяти для хранения спрайтов и тайлов
потребуется в 8 раз больше (16К х 8 = 128К). Где 8 - это ширина памяти
в байтах (64 разряда). Если ресурсов аппаратного эмулятора не хватает,
выделенную память можно уменьшить, например до 64К (#8000 - #9FFF) и т.д.
Также следует поместить буферы, через которые выводятся спрайты на экран
в эту же определенную область памяти. То же касается и для вывода графики через стек.
Еще необходимо избегать раскраски разных тайлов одним и тем же знакоместом,
где цвет определяется разными атрибутами.
Раскраску спрайтов и тайлов можно проводить в эмуляторе Кладова
EmuZWin с дальнейшим получением GFX файла. Так как формат файла имеет
попиксельную структуру, т.е. каждый пиксель кодируется байтом индекса
палитры, его необходимо преобразовать в другой формат, где для каждого
из восьми процессоров строка из восьми байтов пикселей одного знакоместа
преобразуется в восемь байтов растра для каждого процессора.
Например:
Допустим до раскраски имеется строка растра знакоместа #41,
где в эмуляторе Кладова нулевой бит (Paper) становится байтом #00,
а единичный (Ink) - #FF.
После преобразования в GFX-формат без раскраски получим строку растра в байтах
#FF0000000000FF00 (первый байт - младший бит в растре).
где каждый байт - это индекс палиты одного пикселя.
Далее такой формат преобразуем в #4141414141414141,
где каждый байт - это строка растра для соответствующего процессора.
Новый формат необходимо поместить в определенную память аппаратного эмулятора.
Это можно сделать в mif файле для встроенной статической памяти FPGA,
или подгрузить во внешнюю SDRAM память программным загрузчиком.
В видеоконтроллере аппаратного эмулятора происходит обратное
преобразование. Т.е. формат #4141414141414141 превращается в #FF0000000000FF00.
Если индексы равны #00 или #FF, цвет пикселя определяется как в обычном спектруме.
#00 - это Paper, а #FF - это Ink, с соответствующими атрибутами знакоместа.
Если индексы не равны #00 или #FF, то это означает что пиксель раскрашен, и его
цвет в этом случае определяется встроенной в видеоконтроллер палитрой.
Если надо раскрасить пиксель в черный или белый цвета, в палитре должны быть
соответствующие индексы не равные #00 и #FF. Например у Кладова это #50 и #2F.