Вход

Просмотр полной версии : Bad Apple для Апогей БК-01



Pyhesty
02.06.2020, 00:22
Всем привет,
пару месяцев назад я стал счастливым обладателем персонального ПК Апогей в полной комплектации =)
это реально было очень приятно распаковать его, достать кабели, разъемчики, целых четыре книжки,
подключить к телевизору, набрать первые буквы на новенькой клавиатурке...
Но все же хотелось что-то покодить, я никогда не видел РК-86, не знал, что бывает 8080, по этому открыл
книжку, которая шла в комплекте по программированию на ассемблере и был приятно удивлен, что в процессоре
целых 7мь(!) регистров общего назначения, между которыми можно кидаться данными неограниченно! целых 56кБ данных,
ещё и внешнее ПЗУ и при этом память общая с 16битным адресным пространством!
Вот это был королевски подгон =)
До этого я лет 10-12 программировал на microchip процессорах, у которых один регистр W и 35 команд (14-битных),
2-8кБ памяти ещё и разбитая на банки по 1024слова и нужно было отлавливать в кодепереход между ними, и ни в чем себе не отказывай)
Руки чесались...
7 мая мы с другом сделали небольшое демо bad apple для осциллографа Bad Apple или с Днем Радио (https://habr.com/ru/post/500984/)
и появилась идея перенести наработку на Апогей...
Подумал, с чего бы начать - ну есть таймер, вывести звук это должно быть просто... ну не знаю, почему так показалось... далее замучал форум вопросами =)
Ну ок, договорился с SegaBoy выпросил у него сграбить идею синхронизации с видеокадром =) и сам плеер ) хотя с самим звуком запарился, тк медведь на ухо наступил )))
Далее была работа с "видео", мне нужно было уложиться в 250кБ, так как это максимальная ПЗУ, что у меня была =))), но даже понизив частоту кадров до 10Гц,
не очень получалось ужаться, кадров получалось около 2100+ и в среднем кадр это 1920 байт...
с упаковкой видео пришлось помучится))) не h.264й кодек, но все же)
Но даже уменьшенное до 100байт на кадр не удавалось успеть все вывести за 20мс, пришлось схитрить и выкинуть один из внутренних циклов и продублировать код.
ну и добавил двойную буферизацию, это вообще помогло... по крайней мере нет артефактов при перерисовке кадра
короче, то, что получилось:

https://youtu.be/Nlw-08O7XwE

было интересно думать как создать демо, хотя и запарно отлаживать, вообще это мой первый некоторый демопроект,
если будут вопросы, пишите,
ps: если кто-то даст идею как считать данные с файла (210кБ данных) на картридже с SD картой, буду признателен, тогда попробую адаптировать код
к более удобному SD картриджу.

pss:во вложении образ ROM для emul80
нужно подменить штатный образ,
что бы запустить демо
R8000, 8001 ; что бы переключить страницу в 0
R0,2000 ; грузануть саму программу
G

goodboy
02.06.2020, 00:31
в среднем кадр это 1920 байт
? 64*25=1600

Pyhesty
02.06.2020, 00:52
? 64*25=1600
64х30
может на телевизоре не влезли все строки, я не пересчитывал...

CityAceE
02.06.2020, 04:59
Очень круто! Особенно, если учесть, что это первая работа для i8080, пусть даже и с многолетним опытом программирования других МП-систем.

А заливка не используется потому, что использовались наработки для вывода видеоряда на осциллограф или в целях экономии места для хранения кадров?

ivagor
02.06.2020, 06:18
Pyhesty, про видео на Апогее с SD есть тема (https://zx-pk.ru/threads/29597-apogej-vosproizvedenie-video.html). Что касается утрамбовки Bad Apple в 256 Кб, то со сжатием удалось уместить (https://zx-pk.ru/threads/9573-kino-i-vektor.html?p=984878&viewfull=1#post984878) 3286 кадров (15 FPS) с разрешением 64x48 с заливкой (музыку я не делал).

Pyhesty
02.06.2020, 11:03
А заливка не используется потому, что использовались наработки для вывода видеоряда на осциллограф или в целях экономии места для хранения кадров?

да, хотелось сделать относительно легкий вариант, тк было не понятно сколько потребуется мощности для отображения всего кадра,
в среднем получилось по 100байт на кадр (это за счет упаковки бит, но у меня нет алгоритма сжатия при хранении) но ниже ivagor пишет, что у него на кадр большего размера получилось
80 байт на кадр, я ещё не посмотрел его ссылки, но его цифры впечатляют =)
я поставил для себя условие около 10Гц вывести, а по началу у меня были даже проблемы с тем, что бы относительно быстро стереть кадр (хотя бы за 20мс),
дальше за счет оптимизации даже остался небольшой резерв, но вообще вывод одно кадра занимает около 60мс (выводится кусками) и ещё 20мс (может быть чуть меньше),
занимает очистка экрана. Резерва после небольшо оптимизации осталось процентов 30% по времени.

- - - Добавлено - - -

о! я главное где-то видел видео тему с выводом на апогее bad apple, но когда пробовал найти поиском не смог... (поиск выдает все что угодно, но не то, что ищешь)
сейчас гляну...


Pyhesty, про видео на Апогее с SD есть тема (https://zx-pk.ru/threads/29597-apogej-vosproizvedenie-video.html). Что касается утрамбовки Bad Apple в 256 Кб, то со сжатием удалось уместить (https://zx-pk.ru/threads/9573-kino-i-vektor.html?p=984878&viewfull=1#post984878) 3286 кадров (15 FPS) с разрешением 64x48 с заливкой (музыку я не делал).

hitomi2500
02.06.2020, 12:25
Шустро получилось, здорово!

У меня на Апогее получалось в разрешении 192х102 где-то 380 байт на кадр, а в 128х60 кажется около 200, это с дельта-кодированием и упаковкой в бинарное дерево. Частота кадров была очень низкой, около 2-3 Гц для высокого разрешения, и порядка 5 для низкого, есть видео на ютубе, находится по фразе "Видеопроигрыватель на Апогей БК-01Ц". Кадры я не стирал, рисовал только дельту, поэтому скорость была неравномерной. И работал с псевдографикой, кодируя в неё на стадии упаковки, поэтому точка у меня была байт а не бит. Если рисовать только контуры, то можно применять другие методы компрессии, они могут оказаться эффективнее. Например g-код (а-ля графические диктанты).

Насчёт SD-карты, я пользовался функциями биоса Алексея Морозова, который vinxru. Там всё относительно просто, сначала открывается файл (регистрами передаётся указатель на строку с именем), а потом идут последовательные чтения (регистрами задаётся адрес буфера и число байт для чтения). Вся логика работы с FAT и SD вынесена во внешний микроконтроллер. Исходник биоса и пример в загрузчике (boot.rk) есть в его репозитории : https://github.com/alemorf/retro/tree/master/radio_86rk-sd_controller/%D0%90%D0%BF%D0%BE%D0%B3%D0%B5%D0%B9

Ещё в качестве примера можно взять мой плеер, https://github.com/hitomi2500/avi2pseudo/tree/master/avplay, но у него исходники не очень причёсаны.

Pyhesty
02.06.2020, 12:32
во вложении образ ROM для emul80
нужно подменить штатный образ,
что бы запустить демо
R8000, 8001 ; что бы переключить страницу в 0
R0,2000 ; грузануть саму программу
G

если где почитать, как грузить данные с SD карты? или вообще про формат картриджа SD для Апогея?
ps: о! увидео выше ответ hitomi2500, спасибо!