Category: История

17
Апр
2024

Среда разработки

Все очень просто:

  • Превосходный эмулятор БК11М https://gid.pdp-11.ru/
  • В нем запускаю ANDOS.
  • Код пишу во встроенном редакторе оболочки ANDOS или редакторе Vortex, если текст очень длинный.
  • Компилию старым добрым micro1103.
  • Собираю все линковщиком link Евгения Пашигорова с помощью батников.
  • Если надо перенести какие-то спрайты с PC – пишу их сразу в образ диска с помощью BKDE, а там превращаю в .obj с помощью утилиты 2obj (Е. Пашигоров)

И никаких проблем.

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

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

 

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

21
Сен
2022

Тебе позвонили!

Когда мы рубились в Goonies в школе, эта фраза обязательно звучала, когда оставалось мало жизни 🙂

Добавил этот самый звонок и сам проигрышный финал:

17
Окт
2021

Да не 30 лет мы его писали!

Все почему-то думают, что Принца писали 30 (кто-то уже даже говорит “больше 30”) лет. Ну конечно это не так. Что я, по-вашему, с 16 лет его пишу каждый день с утра до ночи? )) Специально прошерстил все исходники, по датам в них можно восстановить хронологию и сроки:

Самые ранние даты, которые мне попались:

; зеркальное копирование 8.4.92

; *** вывод спрайта *** 12.04.92 ;
; ANIMATOR

Само собой, это первые вещи, с которых все началось – без вывода спрайта никуда. Надо учитывать, что начал это все писать Женя, и случилось это после того, как я кучей демок типа “бегущий принц”, “горящий факел” убедил его в том, что надо попробовать. Первой был факел, точно. Допустим, недели две я его этим мучал, потом он еще думал о том, с чего начать… значит март 1992 можно считать началом эпопеи.

Дальше видим такую метку:

; обработка клавиатуры 25.07.92 ;

Раз дошло дело до клавиатуры, значит потребовалось управление. Значит это тот период, когда Женя сделал демку с бегающим по экрану принцем. В это время я уже поступил в институт и участие в проекте принимать перестал. Но я нарисовал почти все спрайты, так что было с чем  работать. И дальше дат никаких нет до вот этой:

; таблица управления 01.94

Видимо, Женя решил отдохнуть, пока я учился в институте 🙂 Но через какое-то время отдыхать ему надоело и он взялся за дело (я уже был в армии в 1993-1994 годах). Дальше идут даты:

;редактор лабиринтов дизасс. 15.02.94
;22.02.94

Видимо в январе Женя написал редактор лабиринтов, чтобы было где гонять Принца, но исходники потерял (что было немудрено с дискетами), впал в меланхолию, но в феврале взял себя в руки и сделал все заново, дизассемблировав бинарник редактора.

Дальше дело пошло:

; определение препятствия 21.06.94 ;
;--------------------------------------11.07.94-;

Насколько я помню, где-то летом я как раз приезжал в отпуск и Женя показал мне, как принц бегает уже не по экрану, а по лабиринту, залезая и слезая во всякие ямы. Это уже было круто.

Потом был какой-то застой, видимо. В ноябре 94-го я вернулся из армии (знатно поучился в институте) и записи пошли кучно:

; GRF Обработка движущихся объектов 18.03.95
; GRF Вывод решеток в текущем положении 19.04.95
; GRF Вывод окна и инициализация массивов для обработки 10.05.95
; движущихся объектов 
; GRF Движение фрез 24.05.95 14:27
; GRF Считываем фон для видимых решеток 31.05
; GRF Дым на кувшинами 5.06.95 14:57
; GRF Нажатие плиты 8.06.95 16:56
; GRF Вывод двери в текущем положении 14.06.95 10:07
; GRF Составление списка видимых шипов 20.06.95 9:55
; GRF Считываем фон для видимых шипов 20.06.95 10:47
; GRF Движение шипов 20.06.95 13:55
; GRF конвертор лабиринтов 29.11.95
; GRF Взятие предмета 21.12.95 ;

Блоки мы помечали, чтобы видеть кто накосячил ))

Потом большой перерыв, аж на два года:

;==== управление стражником ========24.5.97===
; нач.14.02.97

;----------------------------------------------------;
;загрузчик 19.03.97 ;
;----------------------------------------------------;

Не помню, с чем это связано. Видимо как раз интерес к БК угас, появились у всех PC по домам. А в 97-м как раз получили письмо из Сочи, от Григория Останина. Оказывается, наша старая демка докатилась до Сочи. Он спрашивал, когда доделаем Принца. Вот тут энтузиазм снова появился и мы стали доделывать. И стало ясно, что памяти не хватит. Тут уже на одном энтузиазме продолжать было сложно. Я делал стражников и у меня не было места под код их АИ. Я видел, что еще надо научить стражников куче вещей – они должны сами бродить по лабиринту в погоне за Принцем, прыгать в неглубокие ямы и т.д., а не просто махать мечом в пределах одного экрана. Чтобы выбить место под код, приходилось оптимизировать уже написанное, как правило в убыток скорости. Нельзя было делать развернутые циклы, таблицы для скорости вычислений… Принц становился тормозным. Сделали мы и обмен на ходу в памяти неиспользуемых на данный момент спрайтов на другие, подгрузки всякие и при этом никакой музыки на AY еще и подавно не было, и звуков на AY тоже. Даже оцифровки для вывода звуков на спикер, которые мы сделали, влезли не все… В итоге снова все заглохло. Аж до 2016 года.

За это время Женя переехал в другой город и еще много чего произошло. В 2016 я достал старые исходники, еще немного их помучал, добился уже полного исчерпания памяти и снова бросил. Потом аж в 2018-19 я вернулся к Принцу уже с вариантом использования СМК, что позволило снять проблему памяти. Циклы развернулись, появились таблицы… В итоге Принц и был доделан.

Так что никаких 30 лет Принца никто не делал долгими вечерами.

 

30
Сен
2021

“Отберите у Теда желтый блокнот!”

Вычеркиваем:

  • нужно иметь возможность скипнуть заставку джойстиком
  • портится нажимающаяся плита, если справа падает пол
  • странный глюк  с игнорированием клавиш после смерти (повторить пока не удалось)

Хитрый глюк с игнорированием клавиш обнаружил Алекс Шестипалов, за что ему граненое мерси 🙂 Возникало это только в ситуации, когда Принц с пола вешался на стену, но залезать передумывал и спрыгивал обратно на пол. Причем именно на стену, а не на арку. И если после этого умудриться ни разу не упасть, не спрыгнуть с высоты хотя бы одного кирпича, а затем погибнуть в бою со стражником – вот только тогда не появлялась надпись “Press button to continue” и ожидание клавиши было бесконечным.  Просто при спрыгивании с кирпича (без залезания наверх) высотомер не сбрасывался (ошибочно, конечно). А вот ожидание обнуления высотомера я добавил только недавно, для того, чтобы дождаться полного падения Принца в пропасть, прежде чем перезапускать лабиринт по нажатию клавиши. И тут звезды сошлись… Принц считался летящим и ожидание было вечным.

Заставка теперь пропускается клавишей джойстика. Завтра буду делать новое управление от джойстика, с добавочной кнопкой для прыжков и стрельбы.

 

18
Май
2021

Джойстик

Кстати о джойстиках.

У меня был герконовый джойстик, но на нем были кнопки, а не ручка. Я специально себе такой сделал, после того, как поиграл на Ямахе, где была офигенская клавиатура, позволявшая нажимать несколько клавиш одновременно. Конечно я захотел себе такой девайс управления. Но клавиатура БК не позволяет обрабатывать несколько одновременно нажатых клавиш стандартными средствами.

Мой “джойстик” был секцией клавиш вот от такого калькулятора:

Я отпилил 6 клавиш и запихнул в коробку от советских шашек. Кнопки были идеальные, герконовые, с мягким подпружиненным ходом. Очень жалею, что куда-то его задевал. Небось отдал Жене Пашигорову, а он на чердак закинул. Главное, что можно было нажимать кучу кнопок одновременно, это обеспечивало суперскую точность в играх, в отличие от этой ручки, которую мотылять туда-сюда надо. С ручкой наверное удобно играть в самолеты какие-нибудь, а бродить по лабиринтам с ним и в оригинальном принце задолбишься.

Вот в ролике мучается товарищ:

10
Янв
2021

Немного о стражниках и решетках

Недавно я обнаружил, что некоторые решетки открываются не в том порядке, в каком должны. Точнее, не теми плитами управляются. Загнал нужный лабиринт в редактор и понял, что редактировать привязку решеток к управляющим плитам невозможно. Можно только задать все связи заново. Ошибся – задавай все снова. Почему так сделано и как я умудрился все их связать? Ведь никаких записей на этот счет я не делал, это точно. Видимо, по памяти. И это неудивительно: чтобы перенести лабиринты на БК, мне приходилось заходить в КАЖДЫЙ экран каждого лабиринта. Буквально в каждый. Это означает, что я падал во все пропасти, на лету нажимая паузу и печатая экран на матричном принтере (бжжж…бжжжж..). А если по пути попадались падающие плиты? Надо было выяснить, какие падают, а какие нет. Это тоже добавляло повторных проходов. Конечно у меня все эти решетки отпечатались в памяти, ведь я прошел их по сто раз. Но некоторые связи были неочевидны – если по пути ты нажимал несколько открывающих плит, то уже не был уверен, какая именно плита какую решетку открыла, ведь одна плита может открыть их сразу несколько.

В итоге так и вышло – в нескольких решетках я ошибся. Исправляю теперь их прямо в дампе, так проще 🙂

Распечатанные листы А4 мы склеивали в огромные лабиринты, которые едва помещались на полу комнаты)) Долгое время одна такая распечатка в свернутом виде хранилась у меня. Но сейчас я ее не нашел. Наверное все-таки выкинул, или использовал при ремонте для закрывания пола…

Иногда память играла злую шутку – что-то запоминалось глобально, а какие-то вещи ускользали. Глаз замыливался. Я так привык проходить лабиринты на скорость, что только недавно узнал о том, что принц может и сам повторно доставать меч в бою, если сложил его. Клавишей “вверх”. Или что стражник может делать шаг назад, а также может хитро защищаться. Еще стражники теряют жизнь при падении с высоты, так же как принц, и могут помереть от этого, если жизнь была последней. Стражники видят принца сквозь решетку, слышат его шаги и отслеживают где он там бродит. Знают, когда между ними и принцем есть падающие плиты и не наступают на них. Могут гоняться за принцем по лабиринту, прыгая при этом в неглубокие ямы. Но не всегда! Если принц сам сложил меч и сбежал – стражник не будет его догонять. Но если в соседнем окне тоже есть стражник, то второго туда никак не заманишь. Двух стражников на экране в первом принце не бывает, это во втором принце они бегают толпами.
Вот такие детали в поведении стражников придают игре реализма. Враги принца не тупые монстры какие-нибудь)) А я стражников просто лихорадочно убивал и бежал дальше) Но при работе над фехтованием это все всплыло. Делать надо было все, иначе это уже не то…

Возможно, это и стало причиной того, что в 200х году проект застопорился. Памяти к тому времени совсем не осталось, код уже вылезал в экран. Экономия шла жуткая. И тут вдруг выяснилось, что стражникам нужен гораздо более сложный интеллект. Да еще и оказалось, что нескольких спрайтов стражника не хватает, они как раз используются для хитрой защиты. Там такие странные позы принимает стражник…

Потом оказалось, что и у принца есть такая фаза…

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

Поэтому с появлением СМК весь энтузиазм вернулся! Дополнительная память позволила развернуть многие циклы, оптимизировать некоторые критичные алгоритмы с помощью таблиц и это все значительно увеличило быстродействие принца. И есть еще пара глобальных вещей, которые могут его еще ускорить. Правда, мне кажется что и так хорошо))

 

18
Дек
2020

BAT-файлы

Постепенно программа росла и объем данных тоже. Процесс сборки занимал достаточно много времени. Если ты что-то менял в каком-то исходнике, надо было его скомпилировать в объектник и вручную слинковать все файлы в исполняемый модуль. Сначала это было не так страшно – штук пять объектников слинковал и все. Так как спрайты занимали много места и размещать их надо было в расширенной памяти, то их тоже слинковали в объектники. И тут вот уже от полученных объектников надо было отрезать таблицы меток, чтобы потом линковать их к исполняемому модулю. Женя написал для этого специальную утилиту.

Код рос и постепенно перестал помещаться в первые 16К. Придумали, как разместить код в расширенной памяти и вызывать эти подпрограммы из основной.  Где-то в это время линковать проект с помощью micro1103 стало уже невозможно – таблицы меток всех исходников стали слишком большими. Все-таки, micro1103 был написан для БК0010. Тогда Женя написал линковщик, который умел использовать всю память БК11М. И мы продолжили проект.

Все это было хорошо, но процесс сборки стал напряжным – надо было строго по списку линковать файлы, указывать разные адреса линковки, в определенные моменты сохранять таблицы меток от одних блоков данных, чтобы потом использовать их при сборке других модулей… Обычно один из нас сидел и набивал все это вручную, а второй подсказывал по списку что делать. Если кто-то ошибался, то процесс надо было начинать заново. Нудное дело, скажу я вам. А если ошибка происходила, но никто этого не замечал, то потом, когда при запуске принца все висло, надо было сидеть и догадываться в чем же причина –  было это из-за внесенных исправлений или при сборке что-то пошло не так?

И вот тогда Женя вдруг придумал как заставить монитор БК0010 вместо ввода с клавиатуры принимать текстовые команды из файла. Для этого он исправил сам монитор и написал программу “воспроизведения” таких текстовых файлов. Создали мы такой командный файлик, в котором записали последовательно все команды запуска линковщика, загрузки нужных объектников, сохранения промежуточных таблиц – в общем все, что делали вручную каждый раз. Запустили, увидели как все само собралось без участия человека и без ошибок. Далее были сцены поливания шампанским, запуска салютов, и что там еще в фильмах в случаях большой радости?