Tagged: железо

14
Июн
2024

Новый вариант блиттера

Переписываю вывод всей графики на новый формат команд блиттера. Помимо изменения способа задания размеров спрайта, добавился и новый способ позиционирования спрайтов на экране — теперь блиттеру можно указать координату Y в виде номера строки. Раньше это был 24-битный адрес. Так что переделывать пришлось много чего. Но уже почти все получилось.
Из-за длительного перерыва (отпуск на море!) дело шло со скрипом. Все-таки пока целиком погружен в проект — пишется легко, вся структура в голове. А немного отвлекся и приходится въезжать заново 🙂

30
Апр
2024

Накрылось видео — займусь пока звуками

Так как с выводом на блиттер возникли проблемы (подробно описанные в предыдущем посте), решил пока заняться звуками из Dave. Формат оригинальных файлов звука уже нашел, изучаю. В AZBK можно выводить звук и на AY и на 2AY и на Covox…

30
Апр
2024

Внезапные грабли

Графика в текущем проекте (Dave) выводится с помощью AZBK, а точнее с помощью одной из графических фич AZBK — блиттера. Суть «азбучного» блиттера состоит в том, что ему можно давать пакет команд, который он читает себе в буфер и потом выполняет уже самостоятельно, не отнимая процессорного времени.

Читать далее

16
Апр
2024

Призраки и Блиттер

Наконец-то я победил эти «хвосты» при скроллинге! Можно делать игру дальше!

При больших сдвигах рулона среднего экранного слоя (где бродят Зомби) промелькивали объекты, которые должны были уже быть стерты. И борьба с ними заняла у меня три дня…

Пока я использовал блиттер в атоматическом режиме (он при этом сам стартует при каждом прерывании по вектору 100) — все было почти хорошо. Точнее, в эмуляторе было вооще все хорошо, а вот на реальном железе при глобальном скроллинге экрана иногда наблюдалось какое-то дергание экрана.  Этим, конечно же, было поручено заняться Тэду из будущего. При этом возникал вопросы о скоростном построении экрана из множества тайлов — ведь количество команд, которые можно скормить блиттеру за раз, ограничено.  А это значит, что лабиринт будет заполняться порциями, каждыя из которых будет выводиться при очередном прерывании по вектору 100 («кадровое»). С появлением в AZBK режима ручного запуска блиттера, эта проблема ушла — выдаем блиттеру пакет за пакетом и запускаем все это сами, не ожидая милостей от вектора 100. Заодно появилась возможность сбрасывать блиттеру фоновые задачи, типа «удали старые спрайты со скрытого экрана, а мы в это время посчитаем куда какому монстру сделать шаг». И вывод на экран стало возможно делать тогда, когда хочется, а не ожидая очередного «кадрового» прерывания. Вот тут и был подвох.

Как только я добавил Зомби, шагающих туда-сюда, потребовалось их еще и скроллить вместе с фоном, когда Дейв инициирует движение окна. При этом, когда скроллинг (вертикальный или горизонтальный) докручивался до максимума и надо было уже переключать окно, вдруг могли промелькнуть какие-то дополнительные фигуры Зомби, там, где их никак быть не могло. Я предположил, что это спрайты, которые не успели стереться, а это место экранной страницы было вытащено скроллингом на видимую область экрана.  Стало ясно, что эти вещи надо тоже теперь синхронизировать вручную — сдвиг рулонов и переключение видимой области экрана. Но когда пакет команд блиттеру ушел, то о том, что блиттер его обработал, можно судить только по биту 15 в регистре 177270. Т.е. надо ждать, когда этот бит сбросится в 0 и потом можно переключать  рулоны.

А рулоны двигаются совсем в другом месте — в подпрограмме перемещения слоев в зависимости от деятельности Дейва. Блиттер работает сам по себе где-то в фоне, а вот регистры скроллинга изменяют изображение сразу. Значит, нам в этой подпрограмме нельзя изменять сами регистры, нужно просто вычислять новые значения, чтобы применить их потом, сразу кучей, после того, как блиттер закончит стирать/выводить спрайты и все будет готово к отображению нового кадра. Причем желательно  это сделать как раз в момент обратного хода луча, чтобы было незаметно.

В итоге, я завел несколько переменных, содержащих копии регистров управления слоями экрана и движок теперь изменяет не сами регистры, а эти переменные. А перенос значений из этих переменных в сами регистры происходит в тот момент, когда все готово и блиттер завершил обработку команд.

Вот тогда призраки и были изгнаны и «дрожь земли» пропала!

Да, еще я напоролся на небольшие грабли: если пакет команд маленький, то блиттер так шустро его выполняет, что бит 15 (признак работы блиттера) и установиться не успевает. И это приводило к бесконечным ожиданиям «когда ты там начнешь команды обрабатывать??» и зависаниям.

27
Мар
2023

Корпус для БК

Идея перенести БК в десктопный корпус возникла у меня еще в 90-х годах, после приобретения дисковода. Контроллер дисковода, сам дисковод, блок питания к нему, шлейфы — все это лежало на столе. Потом добавился винчестер — еще одна коробка, к которой шли кабели. Я не отношусь к адептам «исконно-сермяжных БКшек  исключительно в родных корпусах, с тем самым шильдиком той самой шероховатости и  с тем самым отпечатком волоса, попавшего в форму корпуса». Так что мысль «собрать все это кубло со стола в один корпус и снабдить нормальным блоком питания» напрашивалась сама собой. И мысль была реализована. Загвоздка была с клавиатурой, но она тоже была разрешена, пусть и не очень удобно — на корпус был вынесен разъем, родная клава БК стала внешней, в отдельном корпусе. Подключалась многожильным кабелем. Но та БКшка канула в лету вместе с корпусом (самодельным, кстати).

По прошествии лет у меня снова появилась БК, на этот раз это был новодел БК-0011М от Voland. К нему был куплен контроллер СМК-512.  А потом Yellow Rabbit придумал контроллер, позволяющий подключить к БК клавиатуру PS/2 и разработал новый корпус для БК, в котором СМК был подключен через «елку» к МПИ, что позволяло разместить СМК вторым этажом над платой БК. Также в корпусе помещался адаптер GBS для подключения БК к современным мониторам. Корпус был шикарный, все было суперкомпактно, что и оказалось ошибкой — появился контроллер AZ, который уже нельзя было разместить в этом корпусе.

И тут мне попался на авито довольно компактный корпус от Kraftway Popular 4l51, в который по ширине как раз входила плата от БК:

Я купил его, добавил блок питания помощнее:

и собрал все в одном корпусе:

Дисководы пока не подключены, так как AZ пока не поддерживает их в прошивке. Кнопка Reset задействована та, что установлена на самом корпусе. Светодиод AZ «выведен» на переднюю панель световодом с али, диаметром 3мм.

Клавиатура была подключена через адаптер Yellow Rabbit, но сама клава оказалась некачественной, кнопки на ней перекашивались и нажимались через раз. Я искал клавиатуру получше, но был ограничен в выборе тем, что адаптер поддерживал именно PS/2, а сейчас подавляющее большинство клавиатур USB. И вот на днях Yellow Rabbit сделал еще один мегадевайс (ссылка на сайт автора),

который позволил мне подключить уже любую USB-клавиатуру. Что я немеделенно и сделал 🙂

Огромное мерси, Братец Кролик! 🙂

21
Мар
2023

Утерянная демка

На образах дисков нашлось «звуковое письмо» ребятам из Сочи, которое мы склепали за 5 минут, заюзав АЦП, сделанный Евгением Пашигоровым для создания 1-битных звуков на БК0011М. Сочинцы спрашивали нас, как продвигается работа над «Prince of Persia» для БК, вот мы и послали им в ответ тогдашний вариант Принца и эту демку. Звук воспроизводился на встроенную пищалку БКшки и был вполне узнаваем.

Датировано 02.06.1997

А вот сам АЦП, до сих пор цел:

 

А вот его схема:

19
Мар
2023

Продолжаем подключать джойстик

Итак, я распаял оба кабеля джойстика, в итоге задействовал все кнопки, которые на нем есть. Распайка получилась такая:

Контакт разъемаБит портаКлавиша джойстикаМаска
Б240Вверх1
А241Вправо2
Б232Вниз4
Б173Влево10
Б204Start20
А205Квадрат40
Б226Круг100
А237Select200
Б318Треугольник400
А319R21000
Б3210Крест2000
А3211R14000
А2913L120000
Б2914L240000
Б19общий

Да, бит 12 я пропустил, да и фиг с ним.