Category: Железо

16
Апр
2024

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

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

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

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

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

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

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

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

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

09
Фев
2024

Аппаратный скролинг на AZBK

Сделал экран размером 512х512, причем видимая часть 256х192. И кручу рулон во всех направлениях двумя регистрами – горизонтального и вертикального скроллинга. Так работает он мгновенно, то пришлось вставить задержку, чтобы было вообще видно, что экран двигается 🙂

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 я пропустил, да и фиг с ним.

 

18
Мар
2023

Джойстик успешно заработал

Распаял 8 проводов джойстика, причем один провод оказался в самом джое обрезан по самый шнур, пришлось нарастить. Это первые 8 проводов из планируемых 15, но проверить мне не терпелось и я подключил пока как есть. И оказалось, что вполне себе работает. Удар, правда, оказался не на том бите, что я распаял, но это временно. Джой оказался весьма чувствительным, так что пришлось привыкать:

По просьбам некоторых, выкладываю фото паяльника: