aspgnom
18.07.2025, 23:17
Привет всем. Я тут новенький, а так старенький 8-бит электронщик/программист. Первый собранный комп был "Специалист".
Мою любовь и боль. Как все помнят сборка на мгтф и половина горелых микросхем с ес-1020.Сборка и отладка заняла почти 2 года.
Потом быстрая пересадка на IBM PC и я на больше чем 30 лет забыл про 8-битный мир. Потом увидел статьи CityAceE и ностальжи
вернуло меня на путь истинный.
Посмотрев на попытку CityAceE переписать с Атари tony захотелось самому перенести какую то игру. Выбор пал на King's Bounty 1990 года под DOS(PC). Окунувшись в проект я так
увлекся что трачу на это все свое свободное время(когда глаза позволяют.)
https://pic.maxiol.com/thumbs2/1752865006.94636015.emu80qtkqszjrleua.png (https://pic.maxiol.com/?v=1752865006.94636015.emu80qtkqszjrleua.png&dp=2)
https://pic.maxiol.com/thumbs2/1752865924.94636015.emu80qtbpau5ximk7.png (https://pic.maxiol.com/?v=1752865924.94636015.emu80qtbpau5ximk7.png&dp=2)
С начала попробовал конвертировать обе заставки игры. Контроль режима 2 цвета на полоску в восемь точек(байт) из которых один черный вручную оказался очень трудоемок,
пришлось написать утилитку на Python-e которая контролировала корректность цветов. Конвертация изображения на удивление заняла много времени. Я совсем не художник и мне
было трудно дорисовывать элементы которые конвертировать не удалось.
Разобравшись с заставками дело перешло на карту уровня. Пришлось нарисовать заготовку редактора уровня на том же Python-е.
https://pic.maxiol.com/thumbs2/1752866522.94636015.pythonyq68wfpisc.png (https://pic.maxiol.com/?v=1752866522.94636015.pythonyq68wfpisc.png&dp=2)
https://pic.maxiol.com/thumbs2/1752866864.94636015.pythonazovmoojju.png (https://pic.maxiol.com/?v=1752866864.94636015.pythonazovmoojju.png&dp=2)
https://pic.maxiol.com/thumbs2/1752866813.94636015.pythonsyqomj9dd7.png (https://pic.maxiol.com/?v=1752866813.94636015.pythonsyqomj9dd7.png&dp=2)
https://pic.maxiol.com/thumbs2/1752866894.94636015.pythonyxz8sswxqb.png (https://pic.maxiol.com/?v=1752866894.94636015.pythonyxz8sswxqb.png&dp=2)
Ввод даже в редактор уровня занял почти 2 дня. Пришлось одновременно играть в игру.
А дальше началось самое интересное. В игре игрок остается в центре экрана и скролится вся область видимости на карту. Это и так непосильная задача(очистка экрана с использованием команд работы со стеком занимает порядка 70000 тактов с разверткой цикла на 64 push) для Специалиста(при выводе по спрайтово и используя маски наложения вывод залетает за 250000 тактов), так и размер блока спрайтов залезает за 30кб. Здесь я застрял почти на 3 месяца. Попытка сжать спрайты и разархивировать на лету(zx0) привело к падению отображения до 1750000 тактов.1 fps меня
не устраивал и началась оптимизация. Первым делом перестал перерисовывать спрайты которые совпадает со спрайтом в предыдущим положении игрока. Заменил процедуру вывода трех спрайтов
(вода, трава, песок) на простую заливку. Все это дало 1250000 тактов на кадр. Подумывал копировать область экрана с места на место, но в связи с тем что атрибут цвета не читается с экрана придется атрибуты хранить отдельно, а памяти и так не хватало. Потом Viktor Pykhonin дорисовал в свой эмулятор(Emu80) поддержку SD и жизнь заиграла новыми красками. Отказался от сжатия.
Создал что то типа ассоциативного кеша(памяти на все спрайты 32 кб все равно не хватало). Отвел под него 10кб а недостающие спрайты подкачивал. Таким образом довел отображение кадра от
100000 тактов до 450000 когда в кеш не попадаем. На этой оптимизации мои мозги(на данный момент) закончились и я вернулся к игре
Сделал перемещение по карте игрока и коллизии столкновений. Реверс изображения героя сделал через таблицу. Параллельно перерисовываю оставшийся контент от игры(ох много его там)
https://pic.maxiol.com/thumbs2/1752869217.94636015.emu80qtfvlvi4unjp.png (https://pic.maxiol.com/?v=1752869217.94636015.emu80qtfvlvi4unjp.png&dp=2)
https://pic.maxiol.com/thumbs2/1752869333.94636015.emu80qtump3k4os9u.png (https://pic.maxiol.com/?v=1752869333.94636015.emu80qtump3k4os9u.png&dp=2)
Сейчас идет добавление интерактивности элементам карты. Перерисовал штатный фонт чтоб он содержал русские буквы и уместился в 1 кб.
Разработка продолжается. Пока на этом все.
Мою любовь и боль. Как все помнят сборка на мгтф и половина горелых микросхем с ес-1020.Сборка и отладка заняла почти 2 года.
Потом быстрая пересадка на IBM PC и я на больше чем 30 лет забыл про 8-битный мир. Потом увидел статьи CityAceE и ностальжи
вернуло меня на путь истинный.
Посмотрев на попытку CityAceE переписать с Атари tony захотелось самому перенести какую то игру. Выбор пал на King's Bounty 1990 года под DOS(PC). Окунувшись в проект я так
увлекся что трачу на это все свое свободное время(когда глаза позволяют.)
https://pic.maxiol.com/thumbs2/1752865006.94636015.emu80qtkqszjrleua.png (https://pic.maxiol.com/?v=1752865006.94636015.emu80qtkqszjrleua.png&dp=2)
https://pic.maxiol.com/thumbs2/1752865924.94636015.emu80qtbpau5ximk7.png (https://pic.maxiol.com/?v=1752865924.94636015.emu80qtbpau5ximk7.png&dp=2)
С начала попробовал конвертировать обе заставки игры. Контроль режима 2 цвета на полоску в восемь точек(байт) из которых один черный вручную оказался очень трудоемок,
пришлось написать утилитку на Python-e которая контролировала корректность цветов. Конвертация изображения на удивление заняла много времени. Я совсем не художник и мне
было трудно дорисовывать элементы которые конвертировать не удалось.
Разобравшись с заставками дело перешло на карту уровня. Пришлось нарисовать заготовку редактора уровня на том же Python-е.
https://pic.maxiol.com/thumbs2/1752866522.94636015.pythonyq68wfpisc.png (https://pic.maxiol.com/?v=1752866522.94636015.pythonyq68wfpisc.png&dp=2)
https://pic.maxiol.com/thumbs2/1752866864.94636015.pythonazovmoojju.png (https://pic.maxiol.com/?v=1752866864.94636015.pythonazovmoojju.png&dp=2)
https://pic.maxiol.com/thumbs2/1752866813.94636015.pythonsyqomj9dd7.png (https://pic.maxiol.com/?v=1752866813.94636015.pythonsyqomj9dd7.png&dp=2)
https://pic.maxiol.com/thumbs2/1752866894.94636015.pythonyxz8sswxqb.png (https://pic.maxiol.com/?v=1752866894.94636015.pythonyxz8sswxqb.png&dp=2)
Ввод даже в редактор уровня занял почти 2 дня. Пришлось одновременно играть в игру.
А дальше началось самое интересное. В игре игрок остается в центре экрана и скролится вся область видимости на карту. Это и так непосильная задача(очистка экрана с использованием команд работы со стеком занимает порядка 70000 тактов с разверткой цикла на 64 push) для Специалиста(при выводе по спрайтово и используя маски наложения вывод залетает за 250000 тактов), так и размер блока спрайтов залезает за 30кб. Здесь я застрял почти на 3 месяца. Попытка сжать спрайты и разархивировать на лету(zx0) привело к падению отображения до 1750000 тактов.1 fps меня
не устраивал и началась оптимизация. Первым делом перестал перерисовывать спрайты которые совпадает со спрайтом в предыдущим положении игрока. Заменил процедуру вывода трех спрайтов
(вода, трава, песок) на простую заливку. Все это дало 1250000 тактов на кадр. Подумывал копировать область экрана с места на место, но в связи с тем что атрибут цвета не читается с экрана придется атрибуты хранить отдельно, а памяти и так не хватало. Потом Viktor Pykhonin дорисовал в свой эмулятор(Emu80) поддержку SD и жизнь заиграла новыми красками. Отказался от сжатия.
Создал что то типа ассоциативного кеша(памяти на все спрайты 32 кб все равно не хватало). Отвел под него 10кб а недостающие спрайты подкачивал. Таким образом довел отображение кадра от
100000 тактов до 450000 когда в кеш не попадаем. На этой оптимизации мои мозги(на данный момент) закончились и я вернулся к игре
Сделал перемещение по карте игрока и коллизии столкновений. Реверс изображения героя сделал через таблицу. Параллельно перерисовываю оставшийся контент от игры(ох много его там)
https://pic.maxiol.com/thumbs2/1752869217.94636015.emu80qtfvlvi4unjp.png (https://pic.maxiol.com/?v=1752869217.94636015.emu80qtfvlvi4unjp.png&dp=2)
https://pic.maxiol.com/thumbs2/1752869333.94636015.emu80qtump3k4os9u.png (https://pic.maxiol.com/?v=1752869333.94636015.emu80qtump3k4os9u.png&dp=2)
Сейчас идет добавление интерактивности элементам карты. Перерисовал штатный фонт чтоб он содержал русские буквы и уместился в 1 кб.
Разработка продолжается. Пока на этом все.