
Сообщение от
zst
В одном режиме компьютер будет совместим с играми ZX Spectrum, доработанными для устранения клешинга.
В другом для программирования своих игр изображение фона строится тайлами, типа как в NES и SEGA, а спрайты будут рисоваться в спрайтовом слое командами LDIR.
В третьем режиме - текстовые программы с символьным экраном 30х80 символов.
Вот и советуй именно по выбранным способам изображения. Только давай без голословной критики. Подскажи, как улучшить, что добавить и почему ?
С моей точки зрения, три вышеописанных режима это свойства видеокарты (прошу прощения, что опять встреваю с видео). По-моему тут у вас в проекте ключевая ошибка - вы жестко "наградили" компьютер тремя режимами без возможности избежать их или расширить каким либо образом.
Мои соображения (раз критикую, то разумеется и предлагаю) - оставить компу комповое, а видеокарту вынести совсем в отдельное устройство, жестоко замапленное на #4000-#5980 (стандартный zx VRAM).
Таким образом можно подойти к разработке итеративным путем - сначала реализовать на отдельной плате стандартный zx видеорежим (к примеру 0), затем в другом устройстве реализовать и нулевой и первый (текстовый 80х25), затем в следующем устройстве реализовать нулевой, первый и второй режим (256х192 / 24bpp к примеру).
Как реализовать нулевой режим я писать не буду - там простой маппинг на стандартную видеопамять спектрума (для совместимости), он же является основным.
Режим #01 я описал вкраце тут. Поясню почему там фигурирует видеопамять, хотя вроде бы можно и без нее обойтись. По моим соображениям она нужна (и в небольшом количестве для этого режима) для того, что бы можно было забросить в видеокарту произвольные изображения в стандартном спектрумовском формате (1 байт на 8 точек + 1 байт на цвет точки и фона), через порты например, предварительно пометив нужную область в символьной области памяти #4000-#47D0 нулями, что бы видеокарта не формировала из этих знакомест символы на экране.
Режим #02 может выглядеть аналогично - управляющая область памяти в #4000-#5980 где расположены структуры объектов (как в режиме #01 там расположены коды символов и их цвет).
Структура объекта "тайл", к примеру может быть выровненной до 32 байт и в упрощенном виде выглядеть так:
Код:
objID db #00,#00 - ID объекта для его отрисовки
objX db #00,#00 - X-координата объекта
objY db #00,#00 - Y-координата объекта
... и так далее
что дает 192 (при выравнивании 32 байта на одну структуру) одновременно отрисовываемых видеокартой объекта с Z-сортировкой по порядку расположения в памяти (т.е. описатель тайла заднего плана должен быть расположен в памяти раньше, чем описатель тайла ближнего плана, а герой где то посередине).
Растр объектов заранее должен быть загружен в память видеокарты (через те же порты к примеру, в понятном видеокарте формате). Своей памяти на борту карты при 256х192/24bpp должно быть около мегабайта, что в общем то и не так много.
Объектами может служить тайл, спрайт, источник частиц, что то еще, что поддержит прошивка видеокарты.
В режиме #02 описал вполне себе суровый 2D ускоритель, который не занимает ни байта в памяти стандартного спектрума. В момент загрузки программы графика забрасывается в память карты, а затем управляется описателями структур через стандартную область памяти.