Просмотр полной версии : Descent - демо игры с 8-цветными спрайтами для УКНЦ
BlaireCas
28.10.2021, 08:51
Тема была вынесена из другой, поэтому предысторию забросил под спойлер:
лучше всего для махания потенциальными возможностями PDP совместимых машин подходит «УК НЦ» там вроде с цветами попроще
С наличием цветов попроще. С их выводом на экран - не очень.
Там все относительно тормознуто ибо вывод графония там идет через ячейки памяти (регистры). Скажем засылаем адрес видеопамяти в одну ячейку, затем читаем/засылаем 8 бит (пикселей) во вторую. Кошмар на улице вязов часть 1.
Можно раскидать видео ОЗУ по обычному ОЗУ - тогда 40-80% нормальной памяти под код использовать будет нельзя.
Причем все 8 цветов может нарисовать только второй процессор который программеры не особо жалуют (а первый основной только 4 цвета осиливает). Память там раскидана по двум процессорам и перегнать кусок графония из первого процессора во второй для рисовки - те еще тормоза. Точно также через ячейки (регистры). То-есть тормоза уже в квадрате выходят.
Можно конечно сразу рисовать обеими процами, 2/3 графония держать в ОЗУ первого процессора, 1/3 в ОЗУ второго. Первый рисует свои цвета спрайта, второй свои и все это синхронизировать - работать будет, но гиморно и мало кто осиливал (обычно в играх брали один проц с его 56кб ОЗУ и использовали 4 цвета).
Вообщем УКНЦ это не слишком удобная для игорей машинка в плане программирования. Реально БК-0011М с переключением банков ОЗУ наааамного удобнее.
Впрочем - вот пример моего 8-ми цветного творения на УКНЦ (пытался игруху делать, как-обычно - начал и забросил :) (хахаха, классика игростроения)
https://i.imgur.com/KnzYmfe.gif
А по теме - вот хорошо что автор принца не забросил его. Помнится очень интересное чтиво было про то как они начинали делать этого принца, как извлекали звуки из писишной версии, как там спрайты "не мигали". Респект авторам.
Тут идет очень меееееедленная разработка игрушки, ну или прототипа игрушки. Демка одним словом. Скриншоты и ютуб где-то ниже.
Поскольку оно разрабатывается - изменения всякие без предупреждения идут на гитхаб:
https://github.com/blairecas/descent/
Исходники там. Релиза как такового нету. Еще даже до альфа версии не дошло.
Тем не менее:
1) Можно либо взять descnt.dsk готовый оттуда. Прицепить к эмулятору UKNCBTL (https://zx-pk.ru/threads/6257-emulyator-uknts-ukncbtl.html) или emustudio (https://zx-pk.ru/threads/18027-emulyator-uknts-emustudio.html) и загрузиться с него, игра в автозапуске.
2) Либо взять *.dat, descnt.sav из каталога release, скопировать куда нужно. Все файлы должны быть в DK (интересно как это расшифровывается, текущее устройство вообщем) перед запуском descnt.sav.
(в меню можно нажать вниз вниз вверх вверх вниз вверх - включится режим дебага, появятся некоторые циферки, скан коды нажатой и отпущенной клавиши и некое условное свободное время у двух процессоров для определения сколько на экран можно еще спрайтов напихать, ну а также нельзя будет умереть и можно будет переключать "эпизоды" по К2)
CityAceE
28.10.2021, 10:02
Впрочем - вот пример моего 8-ми цветного творения на УКНЦ (пытался игруху делать, как-обычно - начал и забросил (хахаха, классика игростроения)
Очень классно выглядит! :v2_thumb:
SuperMax
28.10.2021, 10:35
[QUOTE=BlaireCas;1134713]
Впрочем - вот пример моего 8-ми цветного творения на УКНЦ (пытался игруху делать, как-обычно - начал и забросил :) (хахаха, классика игростроения)
https://i.imgur.com/KnzYmfe.gif
классно!
реально стоит доделать!
Впрочем - вот пример моего 8-ми цветного творения на УКНЦ (пытался игруху делать, как-обычно - начал и забросил :) (хахаха, классика игростроения)
Весьма неплохо! Срочно доделать!
:v2_thumb:
PS: Hobot был бы в восторге...
Black Cat / Era CG
28.10.2021, 13:18
Впрочем - вот пример моего 8-ми цветного творения на УКНЦ (пытался игруху делать, как-обычно - начал и забросил (хахаха, классика игростроения)Вооот! Я бы поиграл!
Lethargeek
28.10.2021, 16:34
ну вот, палитра здорового человека :D только циферки на рамке плохо читаются
Впрочем - вот пример моего 8-ми цветного творения на УКНЦ (пытался игруху делать, как-обычно - начал и забросил (хахаха, классика игростроения)
Ого, класс! Хотя бы в виде демки можно выложить SAV-ку? При случае показывать: дескать, на УКНЦ и вот так тоже можно.
Впрочем - вот пример моего 8-ми цветного творения на УКНЦ (пытался игруху делать, как-обычно - начал и забросил :) (хахаха, классика игростроения)
https://i.imgur.com/KnzYmfe.gif
классно!
реально стоит доделать!
Если добавить еще движущихся обьектов наверное станет грустнее.
BlaireCas, сколько обектов тянет?
Можно конечно сразу рисовать обеими процами, 2/3 графония держать в ОЗУ первого процессора, 1/3 в ОЗУ второго. Первый рисует свои цвета спрайта, второй свои и все это синхронизировать - работать будет, но гиморно и мало кто осиливалОтличная идея! Тут главное один раз заставить себя написать такую библиотеку, а дальше уже легче пользоваться.
Впрочем - вот пример моего 8-ми цветного творения на УКНЦ (пытался игруху делать, как-обычно - начал и забросил :) (хахаха, классика игростроения)Очень круто! Анимировать бы спрайт героя, лазающего по лестнице.
76280
BlaireCas
29.10.2021, 12:20
BlaireCas, сколько обектов тянет?
Мало в моей реализации. 16х16 спрайты с маской. Пиксельные сдвиги по таблицам (кроме сдвига на 2пикс, он через asl).
На 25fps (половина от таймера 50Гц) потянет наверное штук 6, но я-бы не закладывался на такое количество ибо нужно будет и другую логику запихивать в игруху, оно-ж не демо. Очень быстро получается на БКшке у Manwe, у него на сайте есть пример спрайта марио двигающегося по рандомному бекграунду и там что-то на уровне спека получается.
https://i.imgur.com/oH0kGf4.png
Хотя бы в виде демки можно выложить SAV-ку?
Да держи. Добавил туда "девченок" для того чтобы уперлось в потолок фпс. Надо взять лопату и фонарик и стать на один уровень с ними - тогда на реальной УКНЦ моя отрисовка упирается в 25фпс, дальше снижать уже не слишком играбельно. Дебаговые цифры вверху отключаются по К2, остальные кнопки в меню описаны. Запуск прописан в автозагрузку диска. Сама демка это descnt.sav, desbin.dat
76281
Господа - тут все-же тема про БК. Игруху рано или поздно я приведу хотя-бы к виду "демо с десятком игровых экранов" и будет тема в соответвующем разделе. Просто это все небыстро. Сами-же понимаете что если "за неделю на изичах" то выходит целый год :)
BlaireCas, есть более эффективные способы расхода процессора. алгоритмы ннада?
BlaireCas
29.10.2021, 13:24
BlaireCas, есть более эффективные способы расхода процессора. алгоритмы ннада?
Было-бы интересно просто на словах.
Допустим берем только один цвет (не все 8). Как в спеке пусть будет. 8точек = байт. Есть спрайт+маска (2 байта). Есть фреймбуфер и там бекграунд.
Вроде особо много чего тут и не придумать. Сдвигаем байт маски на нужное число пикселей либо через таблицы либо командами сдвигов (таблицы быстрее). Получаем два байта, маскируем их в буфере. Повторить то-же самое для байта цвета.
Затем измененные части буфера на экран и вернуть буферу исходное состояние.
Где-то в деталях (навроде спрайты можно прешифтить заранее, анимацию заранее со сдвигами заготовить) могут быть различия, но вроде алгоритм какой-то такой
Соответственно для 4-х цветов будет все это повторено для фреймбуфера 2-го цветового бита, для 8-ми цветов еще и для третьего цветового бита. Поэтому общую задачу достаточно решить только для 1-битного цвета для начала видимо (ну в УКНЦ вообще без вариантов ибо один из цветовых планов экрана может рисовать лишь второй процессор)
CityAceE
29.10.2021, 14:13
Отделил в отдельную тему и перенёс в правильное место все сообщения, касающиеся демки игры для УКНЦ.
BlaireCas
29.10.2021, 15:03
Отделил в отдельную тему и перенёс в правильное место всё сообщения касающиеся демки игры для УКНЦ
Придется видимо доделывать раз уж тема появилась :)
- - - Добавлено - - -
Собственно по выводу спрайта (ширина 16 пикселей) с маской в один из цветовых планов буфера ..
Код с таблицами сдвигов вот такой (кусок кода для сдвига на 4 пикселя, для других сдвигов оно похожее, только смещения таблиц сдвигов другие).
Спрайт (каждые 8-пикс) идет в виде .BYTE маска, цвет, маска, цвет и тут зарыта гигантская собака ибо маска одинаковая для всех цветовых планов, а у меня маска для скорости размножена по каждому цветовому плану памяти. Это надо будет как-то чинить а то так памяти не напасешься.
BSFB04: ; 4-pix shift, R0-spr addr, R5-buf addr, R3-height, R4=30.
clr R1 ;
bisb (R0)+, R1 ; mask byte -> R1
clr R2 ;
bisb (R0)+, R2 ; sprite byte -> R2
bicb ShiftTable1(R1), (R5) ; shift and apply mask
bisb ShiftTable1(R2), (R5)+ ; shift and apply color
bicb ShiftTable2(R1), (R5) ; same for out-of-byte shifted pixels
bisb ShiftTable2(R2), (R5)
; repeat for second 8-pix sprite part
clr R1 ;
bisb (R0)+, R1 ; mask byte -> R1
clr R2 ;
bisb (R0)+, R2 ; sprite byte -> R2
bicb ShiftTable1(R1), (R5)
bisb ShiftTable1(R2), (R5)+
bicb ShiftTable2(R1), (R5)
bisb ShiftTable2(R2), (R5)
add R4, R5 ; R4=30., buffer next line addition
sob R3, BSFB04
return
В чем тут можно ускорить .. Черт его знает.
Шикарный движок, графика и сама игруха!
А на EmuStudio вообще летает)
Надо доделывать.
BlaireCas
29.10.2021, 18:15
А на EmuStudio вообще летает
Кстати я его вполне себе использую чтобы "побыстрому посмотреть результат" (для дебага юзается UKNCBTL).
Уже даже привык нажимать shift-del, ctrl-del, ctrl-del при его запуске - и вот бы их какими-нибудь параметрами задать.
Кстати я его вполне себе использую чтобы "побыстрому посмотреть результат" (для дебага юзается UKNCBTL).
Уже даже привык нажимать shift-del, ctrl-del, ctrl-del при его запуске - и вот бы их какими-нибудь параметрами задать.
А в чем разница с UKNCBTL?
Если заменить
add R4, R5
на
add #30., R5
то замедление сравнительно небольшое, зато можно использовать R4 для адреса маски и избавиться от лишнего дублирования маски.
BlaireCas
29.10.2021, 18:30
А в чем разница с UKNCBTL?
Разница в отображении? Наверное никакой нету. Только дефолтно EmuStudio "скушивает" последние 8 (что-ли) строк экрана и приходится жать shift-del чтобы они показались. А также сканлайны конечно винтажны, но для разработки мешают (без них пиксели виднее что-ли). Поэтому приходится два раза еще и жать ctrl-del.
А какая еще разница? Звука нет, дебага нет, да это думается ты знаешь-же. (в UKNCBTL еще и в восьмеричной системе всё в дебаге, что нереально удобно).
Еще можно разделить процедуры на две ветки. При нечетном R5 делать как сейчас, а при четном - словами вместо байтов (тут нужны будут альтернативные таблицы сдвигов).
BlaireCas
29.10.2021, 19:03
Если заменить
add R4, R5
Вот да, для центрального проца (где в два плана надо записать) надо будет пожертвовать регистр на разделение адреса масок и адреса цвета. А для периферийного один план и как сейчас вроде ок.
при четном - словами вместо байтов (тут нужны будут альтернативные таблицы сдвигов)
Думал думал, но не придумал ничего. Видел такое разделение у manwe кажется в демке вывода спрайта для БК (как мне показалось). Но пока-что даже не знаю..
Разница в отображении? Наверное никакой нету. Только дефолтно EmuStudio "скушивает" последние 8 (что-ли) строк экрана и приходится жать shift-del чтобы они показались. А также сканлайны конечно винтажны, но для разработки мешают (без них пиксели виднее что-ли). Поэтому приходится два раза еще и жать ctrl-del.
А какая еще разница? Звука нет, дебага нет, да это думается ты знаешь-же. (в UKNCBTL еще и в восьмеричной системе всё в дебаге, что нереально удобно).
Это я знаю) Это разница в минус)
Я думал, что ты запускаешь на EmuStudio за каким-то плюсом)
спрайты можно прешифтить заранее, анимацию заранее со сдвигами заготовить
Такой вывод будет самым быстрым, но хватит ли памяти? Киньте ссылку почитать про организацию страниц на УКНЦ.
Пока нарыл, что памяти всего 192к, под видео три битплана (переключаемые страницы) по 32к, а как остальная память распределена?
BlaireCas
29.10.2021, 23:03
запускаешь на EmuStudio за каким-то плюсом
Плюс вполне есть - он быстрее, раз. Кнопку "запуск" не надо жать :) два.
В VS Code настроил компиляцию всего, закидывание в диск и запуск emustudio - вполне быстро и кошерно заценить сразу что накодилося.
UPD: еще нашел почему лучше - ниже написал про 177054 в ПП. ukncbtl чего-то все-же ведет себя кажется неправильно при подключении доп. ОЗУ
организацию страниц на УКНЦ
Увы, там нет страниц если в том плане как это сделано на спеке/бк0011/других компах той поры. Кстати дополнительная память вовсе не под видео. Она просто ну как-бы есть. Таблицей видеострок обычно отображение экрана назначают на нее, но это не прям обязательно, ее можно использовать, но неудобно (там не выполнить код, методы доступа к ней тоже не блещут скоростью).
Центральный процессор видит свои 64кб и для доступа к ней-же + дополнительным 64кб памяти делается mov #addr/2, @#176640 и потом по адресу 176642 делаешь что-то с двумя байтами адреса addr. То-есть поскольку addr/2 то ЦП может через этот регистровый механизм "полазить" по 64кб своего + 64кб дополнительного ОЗУ. (ну по своему ОЗУ смысла так лазить нету, а вот по адресам выше 177777 вполне нормально, обычно туда через таблицу строк назначают цветовые планы 1,2 для отображения на экран и через такой костыль он с ними работает)
Периферийный процессор аналогично только адреса регистров другие (177010(addr/2), 177014(data) - аналоги тех двух в ЦП, через них он лазает по всему ОЗУ ЦП + еще байтовый 177012 - через него можно добраться до последних 32кб дополнительного ОЗУ в которые не может попасть ЦП).
Еще в периферийном процессоре можно выполнить команду mov #161, @#177054 - тогда эти дополнительные 32кб ОЗУ отобразятся на адреса 100000-157777 периферийного процессора, но с одним приколом - туда можно будет записывать, а считывать оттуда не получится ибо по стечению обстоятельств ПЗУ не отключается и оно работает на чтение быстрее и читаться будет из ПЗУ + возможно складываясь по OR с ОЗУ.
Например отобразив так память в ПП команда bis #123, @#100000 сделает веселый результат - она считает с ПЗУ, установит бит, и запишет итог в ОЗУ.
Кстати этот момент упущен в эмуляторах (!) если еще не пофиксили. В эмулях было так что при отображении в ПП дополнительного ОЗУ на обычные адреса памяти - можно было и читать с него что на реальной машинке не прокатит.
UPD: проверил - в emustudio вроде пофикшено, в ukncbtl кажись бага на месте
там нет страниц если в том плане как это сделано на спеке/бк0011/других компах
А жаль, это бы решило проблему быстрого вывода "чуть более, чем полностью" (с)
То есть, получается, для кода каждому процу условно доступна половина адресного пространства (32К), а вторая - под экран?
Как там организованы эти битпланы, все равно не въеду... Разрешение 640х288 (плюс служебка) это, по идее, 2 цвета на точку (1 бит/пиксел), что и дает около 32к.
Соответственно, основной проц может полноценно работать только с одним битпланом, а остальные через "костыли"/ППроц ?
Было-бы интересно просто на словах.
Допустим берем только один цвет (не все 8). Как в спеке пусть будет. 8точек = байт. Есть спрайт+маска (2 байта). Есть фреймбуфер и там бекграунд.
Вроде особо много чего тут и не придумать. Сдвигаем байт маски на нужное число пикселей либо через таблицы либо командами сдвигов (таблицы быстрее). Получаем два байта, маскируем их в буфере. Повторить то-же самое для байта цвета.
Затем измененные части буфера на экран и вернуть буферу исходное состояние.
Где-то в деталях (навроде спрайты можно прешифтить заранее, анимацию заранее со сдвигами заготовить) могут быть различия, но вроде алгоритм какой-то такой
Соответственно для 4-х цветов будет все это повторено для фреймбуфера 2-го цветового бита, для 8-ми цветов еще и для третьего цветового бита. Поэтому общую задачу достаточно решить только для 1-битного цвета для начала видимо (ну в УКНЦ вообще без вариантов ибо один из цветовых планов экрана может рисовать лишь второй процессор)
все правильно.
шифт в регистрах дорого по времени, шифт в таблицах лучше.
прешифт спрайтов гораздо выгоднее, но его надо делать с умом.
вот например есть анимация персонажа.
4 фазы движения в сторону, одна фаза прыжка.
берем имеющиеся спрайты и смотрим
раскатываем спрайты движения и получаем 4 фазы анимации с шифтом в 2 точки.
берем фазу прыжка и также шифтим.
итого вместо спрайтов 16*16*5 штук.
получаем 16*24*8 штук. при этом получая значительный привес по скорости.
дальше движение в другую сторону
можно получать разворачивая спрайт через таблицу.
с учетом 3х битпланов спрайта и 1 битплана маски
выгоднее по скорости будет держать 2 битплана спрайта развернутыми.
как то так.
получаем 4 фазы анимации с шифтом в 2 точки
Это уже небольшое ограничение получается, т.к. вывод будет не попиксельный, а через пиксель, плюс"остановка" персонажа будет строго по нулевому сдвигу.
Он будет как бы шагать по знакоместам, если перевести на спектрумовский язык. Для большинства ситуаций подойдет, тут главное разрабатывать фон (карту) с учетом этого.
Только и прыжки придется привязывать к знакоместам, иначе собьется расстановка фаз основной анимации.
Впрочем, это будет максимально быстрый вывод из всех возможных, что перевешивает недостатки. Вопрос лишь в размере доступной памяти под спрайты.
Это уже небольшое ограничение получается, т.к. вывод будет не попиксельный, а через пиксель, плюс"остановка" персонажа будет строго по нулевому сдвигу.
Он будет как бы шагать по знакоместам, если перевести на спектрумовский язык.
ну скажем так. идеальное движение - попиксельное, поэтому движение на 50 точек за 1 секунду смотрится плавным.
При темпе игры в 25 фпс движение спрайта на 1/256 или 1/320 экрана производит ощущение тормознутости.
не надо привязывать знакоместное движение к спектруму - это было до, и было после.
Для большинства ситуаций подойдет, тут главное разрабатывать фон (карту) с учетом этого.
Только и прыжки придется привязывать к знакоместам, иначе собьется расстановка фаз основной анимации.
ну на самом деле проблемы нет. это проблема управления.
в Ханте после приземления персонаж выравнивает позицию делая шаг.
красота исчезает если использовать концепт нажал кнопку - есть реакция, отпустил - нет реакции.
тот же Принц обсуждаемый ранее использует концепцию шага.
при нажатии направления он делает шаг.
это проблема управления
Точнее, программы обработки управления (вывода анимации).
Но вопрос о размере памяти остается актуальным =) Если есть запас под сдвиги фаз - есть и быстрый вывод. Собственно, как и на Спектруме.
Точнее, программы обработки управления (вывода анимации).
Но вопрос о размере памяти остается актуальным =) Если есть запас под сдвиги фаз - есть и быстрый вывод. Собственно, как и на Спектруме.
не совсем верно. Если у тебя есть память под подробную анимацию, то есть и под сдвиги.
кроме того при прескролле спрайтов можно добавить пару пикселей по горизонтали
спрайт становится 10, 18, 26 точек шириной. для мелкой графики это актуально.
Кнопку "запуск" не надо жать :) два.
Пункт меню Autostart либо в командной строке опция /autostart
Плюс ещё рекомендую в командной строке опцию /boot - чтобы не выбирать пункт из меню.
BlaireCas
31.10.2021, 01:46
Казалось процедуру спрайта шириной в 16-пикселей в буфер особо не ускорить.
Однако подсчитав такты и почесав голову оно все-же ускоряется.
BSFB04: ; 4-pix shift, R0-spr addr, R5-buf addr, R3-height, R4=30.
mov #4, R2
10$: ; first 8-pix
; clr R1 ; 14T
; bisb (R0)+, R1 ; 32T mask byte -> R1
; clr R2 ; 14T
; bisb (R0)+, R2 ; 32T color byte -> R2
; bicb ShiftTable1(R1), (R5) ; 77T shift 4-pix and apply mask
; bisb ShiftTable1(R2), (R5)+ ; 77T shift 4-pix and apply color
; bicb ShiftTable2(R1), (R5) ; 77T same for out-of-byte shifted pixels
; bisb ShiftTable2(R2), (R5) ; 77T
; = 400T
clr R1 ; 14T
bisb (R0)+, R1 ; 32T mask byte -> R1
ash R2, R1 ; 40T (R2=4)
bicb R1, (R5)+ ; 43T
swab R1 ; 14T
bicb R1, (R5) ; 43T
dec R5 ; 14T
clr R1 ; 14T
bisb (R0)+, R1 ; 32T color byte -> R1
ash R2, R1 ; 40T (R2=4)
bisb R1, (R5)+ ; 43T
swab R1 ; 14T
bisb R1, (R5) ; 43T
; = 386T
; repeat for second 8-pix sprite part
...
Закомментированная часть использовала таблицы для байтовых сдвигов. Однако ведь у нас "мощный 16-битный процессор!" (тм) ахахах.. Вообщем таблицы оказались не слишком нужны. Вроде выигрыш небольшой, а на сдвиге на 6 так и вообще будет отсутствовать.
Но, во-первых будет +память от таблиц сдвигов. А во-вторых это ускоряется еще дальше, поскольку половина спрайта всегда попадет на четный адрес и опять-таки "мощный 16-битный процессор!" (тм) начнет делать что-то полезное. Правда придется размножить эти процедуры (будто их и так мало было).
.. вообще уже начинает садо-мазохизмом попахивать, а не программированием ..
А как ты подсчитал такты? )
половина спрайта всегда попадет на четный адрес и опять-таки "мощный 16-битный процессор!" (тм) начнет делать что-то полезное.
Напрямую не по теме игры, но всё же. Вот сколько бы ни уверяли приверженцы PDP, что сохранение знака числа важно и нужно (размножение 7-го бита на старший байт командой MOVB), в программах каждый раз вижу мучения кодеров при загрузке младшего байта в регистры. Конкретно в данном примере из-за этой фичи приходится выполнять кучу лишних команд навроде обнуления регистров и взятия данных через индексную адресацию, одну из самых медленных. А если бы старший байт не портился - достаточно было бы загрузить младший. В старшем всегда бы находился адрес таблицы, что убирает обнуление и медленную и жрущую память индексную адресацию. В итоге выигрыш получился бы конкретный. Но что имеем, то имеем.
С телефона писать неудобно, так бы "перевёл" прогу под вариант с MOVB для сравнения.
BlaireCas
31.10.2021, 10:43
А как ты подсчитал такты? )
Использовал местную тему подсчета выполнения комманд (https://zx-pk.ru/threads/14702-raschjot-tochnogo-vremeni-vypolneniya-komand-razlichnymi-protsessorami-arkhitektury-pdp-11.html). Пробовал разные .sav-ки, от Patron'a скажем. Затем написал свой измеритель (поскольку мне было еще нужно замерить не только одну комманду, а сразу кусок кода). А как измерять - ну думаю (к другим в код не заглядывал) все измеряли как-то так: забивается относительно большой буфер повторяющейся командой (+буфер данных для всяких mov 4(R0), (R1)+). Крутится в цикле. Считаются прерывания сетевого таймера 50Гц. Потом зная частоту процессора считаются такты. Из-за работы контроллера памяти конечно вылезает всякая девиация +/- сколько-то, но тут уж ничего не поделать.
Кстати очень интересная тема, всем спасибо. Особенно удивил баг в процессоре 1801вм2 (заюзал в демке - если проц настоящий, в меню внизу напишет вместо "эмуляция").
Вот сколько бы ни уверяли приверженцы PDP, что сохранение знака числа важно и нужно
Меня это раздражает кстати. Не могли добавить команду movbb скажем без размножения знака. Уууу.. нехорошие разработчики. А еще-бы команду addb тоже не помешало. Но, возможно, такие команды уже просто нереально добавить не поломав систему команд (то-есть совместимость с pdp)
Кстати очень интересная тема, всем спасибо. Особенно удивил баг в процессоре 1801вм2 (заюзал в демке - если проц настоящий, в меню внизу напишет вместо "эмуляция").
Ты про баг со сбоем кэша? С ним надо аккуратнее, т.к. судя по всему его эффект может плавать.
- - - Добавлено - - -
Затем написал свой измеритель
А, ну если сам измерял, то хорошо.
Но опять же, на разных моделях и с разной степенью нагретости - разное может быть время.
Какая симпатичная демка, надеюсь дорастет до игры! А какой-то сюжет уже придуман?
Разница в отображении? Наверное никакой нету. Только дефолтно EmuStudio "скушивает" последние 8 (что-ли) строк экрана и приходится жать shift-del чтобы они показались. А также сканлайны конечно винтажны, но для разработки мешают (без них пиксели виднее что-ли). Поэтому приходится два раза еще и жать ctrl-del.
Я бы тебе скомпилировал версию с нужными параметрами по умолчанию, но разобрал эмулятор, т.к. стал внедрять в него тулбар и всякое такое) И на этом остановился)
Записал на видео запуск демки на реальной машине. До сих пор не верится что наконец-то появился проект, который столь полно использует графический потенциал машины!
https://youtu.be/8-PMtwuiBO0
Ну я там немного побаловался, пожмакал К1 для смены палитры, итд.
BlaireCas
02.11.2021, 21:26
Я бы тебе скомпилировал версию с нужными параметрами по умолчанию
Да не мучайся, я-ж написал что привык уже жать эти кнопки :)
Не в обиду Никите, поскольку его эмулятор я использую тоже, забыл написать что эмустудио еще имеет такой плюс как максимальная скорость при сохранении частоты прерывания vsync (я так понимаю с монитора винды берется, т.е. не 50Гц, а сколько у винды выставлено).
UKNCBTL тоже можно ускорить чтобы поменьше ждать загрузки системы и файла игры, но там ускоряется вообще всё, персонаж начинает гонзать :)
Ну и в эмустудио показывает все кадры, UKNCBTL только половину. Когда делал River Raid на УКНЦ это было заметно, у вертолетов не "крутился" винт ибо пропускался один кадр анимации. В данной игрухе пофиг, она почти везде 25Гц
Вообщем эмуляторы по-своему оба хороши.
Насчет дописывания демки игрухи - пишется очень медленно. Понемногу выбрасываю из нее хлам, ускоряю то-сё. Дело в том что работаю программистом и, вернувшись после работы, браться опять за код - нууу.. как в анекдоте про ".. а вокруг станки, станки ..". Поэтому медленно.
- - - Добавлено - - -
Какая симпатичная демка, надеюсь дорастет до игры! А какой-то сюжет уже придуман?
Жил-был хоббит. Работал шахтером (неудивительно для хоббита). Взял лопату и пошел копать (нет, террарию не осилю). Копал-копал, через 20 игровых экранов докопался до Vault 101, оттуда вылезли ваульт двеллеры, он их заразил коронавирусом. Потом прилетел анклав с президентом Генри Эденом, начали геноцид. Главный герой из подручных средств собирает оружие, бетмобиль, встает на акулу с электрогитарой и всем показывает крутоту.
Ахахахахах (ну тут зачатки движка сначала-бы доделать)
эмустудио еще имеет такой плюс как максимальная скорость при сохранении частоты прерывания vsync (я так понимаю с монитора винды берется, т.е. не 50Гц, а сколько у винды выставлено).
Да, это я делал для того, что лично мне очень приятно, когда игра или дема движется покадрово. Даже если эта скорость выше оригинала. Эта самая покадровая плавность для меня ностальгически приятна.
- - - Добавлено - - -
Насчет дописывания демки игрухи - пишется очень медленно. Понемногу выбрасываю из нее хлам, ускоряю то-сё. Дело в том что работаю программистом и, вернувшись после работы, браться опять за код - нууу.. как в анекдоте про ".. а вокруг станки, станки ..". Поэтому медленно.
Я тоже программистом работаю, и тоже иногда после программы по работе делаю программы для себя. И отчасти понимаю про станки)
- - - Добавлено - - -
Жил-был хоббит. Работал шахтером
Сама игра, графика и идея откуда-то взяты? Или все собственное?
- - - Добавлено - - -
Вообщем эмуляторы по-своему оба хороши.
Я на свой эмулятор в плане эмуляции УКНЦ уже смотрю как на что-то нещадно устаревшее. Имея те знания, которые есть сейчас, я бы совсем по другому сделал, чем в 2006 году.
Хотя, даже для того, чтобы написать относительно точный потактовый 1801ВМ2, надо очень потрудиться. Он на порядок сложнее, чем Z80 для эмуляции. Просто очень жесткий проц.
для того, чтобы написать относительно точный потактовый 1801ВМ2, надо очень потрудиться. Он на порядок сложнее, чем Z80 для эмуляции
Учитывая, что на Z80 есть мануалы от производителя с растактовкой команд, плюс довольно простая схема Спектрума дает стопроцентно определить задержки.
А вот для ВМ1/2/3 таких заводских мануалов, насколько знаю, не существует...
BlaireCas
02.11.2021, 21:58
Сама игра, графика и идея откуда-то взяты?
Особой идеи пока нету. Была мысль какой-то усложненный bolder dash сначала сделать, с зачатками terraria.
Болдер слишком банально. Террария даже в минимальном приближении слишком сложна и памятежруча. Допустим сделать даже 160х140 изменяемое игровое поле чтобы там разрушать/копать/строить - это уже приличный кусок памяти отгрызет, можно разумеется заюзать неиспользуемое дополнительное ОЗУ ибо в этом плане скорость работы с ним не очень важна.
Идея пока какая-то такая - terraria-подобное, только без стройки. Игровое поле насколько позволит память и перемещение по нему со сменой экрана (без тайловой прокрутки вправо/влево/вверх/вниз). Жать кнопки, копать лопатой, светить фонариком и т.д.
Графику персонажа + чего-то еще взял отсюда:
https://pixel-poem.itch.io/dungeon-assetpuck (я для примера, с какой-то другой коллекции брал, но смысл понятен, там на сайте полно графики для таких "8-бит творений" с лицензиями free to use).
Часть графония навроде забор/трава/дерево/факел/всякое сам наваял.
Здорово, что есть концепция =) Натыкался на посты вида "написал новый движок для диззи-подобных игр, дарю тому, кто придумает сюжет", что говорит о том, что не движком единым). Более-менее свободный мир, в котором можно приключенствовать, это здорово, и не так часто встречается на старых машинах. Жаль что я наверное в это творенние смогу поиграть только в эмуле, ибо на руках только спек и ДВК, который еще привести в приличное состояние надо.
Учитывая, что на Z80 есть мануалы от производителя с растактовкой команд, плюс довольно простая схема Спектрума дает стопроцентно определить задержки.
А вот для ВМ1/2/3 таких заводских мануалов, насколько знаю, не существует...
На ВМ2 есть подробные мануалы, а так же реверс, и мое описание тоже.
И все равно остались недоисследованные пятна - некие особенности сбоев кэша.
И сложность процессора видна, как на ладони.
BlaireCas,
https://www.youtube.com/watch?v=wjqcmGZoTes
Казалось процедуру спрайта шириной в 16-пикселей в буфер особо не ускорить.
Однако подсчитав такты и почесав голову оно все-же ускоряется.
А с какой целью игнорируется существование команды ASHC ?
- - - Добавлено - - -
1$: add #stride, r5
mov (r4)+, r0
ashc #shift, r0
mov (r4)+, r2
ashc #shift, r2
bic r0, @r5
bis r2, (r5)+
bic r1, @r5
bis r3, (r5)+
dec @sp
bne 1$
Весь внутренний цикл.
BlaireCas
03.11.2021, 11:33
А с какой целью игнорируется существование команды ASHC ?
А точно, вот я балбес :)
Код будет правда другой чем в примере, там забыты clr регистров. И также ashc сдвигает 32 бита используя старшее слово в R0 (младшее в R1). А так идея супер, вот она "мощь 16-битного процессора!" (тм).
А с какой целью игнорируется существование команды ASHC ?
Особенно, учитывая, что ASH и ASHC выполняются почти за одинаковое время. ASHC на 8 тактов дольше, если я правильно помню.
А точно, вот я балбес :)
Код будет правда другой чем в примере, там забыты clr регистров. И также ashc сдвигает 32 бита используя старшее слово в R0 (младшее в R1). А так идея супер, вот она "мощь 16-битного процессора!" (тм).
Упс, давно я дела с ВМ2 не имел, подзабыл детали исполнения "большого EIS". :rolleyes: В любом случае, так явно лучше, чем эти манипуляции с байтами. Рад, что смог помочь. :)
Кстати, думаю, что не нужно именно для спрайтов делать отдельную ветку без сдвига. Разве что для прибитой гвоздями статики. Для персонажей это -- только лишние заморочки. Всё равно, это только одна из фаз анимации. Максимум, что может из этого выйти -- это скачки fps при большом количестве персонажей. Что, как правильно заметил Джон Кармак, раздражает куда больше, чем равномерные тормоза.
BlaireCas
05.11.2021, 18:28
Дошел до интересного момента. Начал части данных пытаться переносить в область видеопамяти. Поскольку использую разрешение 320х288 - часть видеопамяти пустует и пора уже озаботиться как туда что-то понапихать, а не ждать когда в CPU при компиляции закончатся его 56кб).
Обнаружил что виндовый порт макро-11 вполне компиляет (делает листинг) по адресам выше 177777 что сильно порадовало.
Но теперь сам этот момент: Я допустим собрал "снапшот" всей памяти 0-377777(8) CPU + "снапшот" 0-177777(8) всей памяти PPU... И... а как их загрузить-то?? :)
Разумеется все будет грузиться средствами RT-11 и саму себя она затереть не должна пока загружает (после полной загрузки конечно-же затрется вообще всё). Пока-что мысли осваивать компрессию, грузить жатое в видеопамять, разжимать уже в обычную+видеопамять. Целиком таким образом все ОЗУ компьютера не загрузить конечно, но прям вообще всё и не нужно.
Вообщем пора ознакамливаться со сжатиями/распаковками... К счастью тут есть уже темы по ним и готовый код тоже.
Второй вариант - писать свой кастомный кусок считывания с дискеты/винта.. но это какая-т жесть будет уже.
Кстати, думаю, что не нужно именно для спрайтов делать отдельную ветку без сдвига.
Ну в общем случае верно. Однако мне поможет и отдельная.
Некоторые спрайты, скажем предварительно размещенные на уровне предметы, а возможно даже и выпавшие "из вон той крысы" будут изначально по смещению 0 пикселей. Также допустим паук, который по паутине лазает только вверх/вниз, разумеется аналогично изначально будет запланирован на нулевое смещение. Вылезающие из-под земли колья.. Да одним словом можно много чего придумать прибитое гвоздями по координате Х.
Второй вариант - писать свой кастомный кусок считывания с дискеты/винта.. но это какая-т жесть будет уже.
Зачем кастомный?
Я с RT-11 не работал в плане загрузки файлов с определенной позиции, но наверняка она есть чисто системными средствами. Надо у спецов спросить.
Грузишь в буфер кусок файла, перебрасываешь в теневую память, и так по кругу, пока все не загрузишь.
Дошел до интересного момента. Начал части данных пытаться переносить в область видеопамяти. Поскольку использую разрешение 320х288 - часть видеопамяти пустует и пора уже озаботиться как туда что-то понапихать, а не ждать когда в CPU при компиляции закончатся его 56кб).
Обнаружил что виндовый порт макро-11 вполне компиляет (делает листинг) по адресам выше 177777 что сильно порадовало.
Но теперь сам этот момент: Я допустим собрал "снапшот" всей памяти 0-377777(8) CPU + "снапшот" 0-177777(8) всей памяти PPU... И... а как их загрузить-то?? :)
Разумеется все будет грузиться средствами RT-11 и саму себя она затереть не должна пока загружает (после полной загрузки конечно-же затрется вообще всё). Пока-что мысли осваивать компрессию, грузить жатое в видеопамять, разжимать уже в обычную+видеопамять. Целиком таким образом все ОЗУ компьютера не загрузить конечно, но прям вообще всё и не нужно.
уверен ли ты что убивать RT-11 обязательно?
сколько оно весит то?
раз уж есть ОС может использовать её для подгрузки ресурсов, например для разных мест игры?
BlaireCas
06.11.2021, 15:32
уверен ли ты что убивать RT-11 обязательно?
А даже и не знаю на самом деле.
1) Хочется сделать самодостаточную игрушку. Как бы это понятнее сказать.. как .TAP наверное в спеке (возможно ошибаюсь). Которая после загрузки больше ничего не просит. Загрузил (хоть с магнитофона) и вперед.
2) Если оставить живой систему - то да, будет возможность подгружать например что-нибудь. Минусы такие - останется меньше памяти (навроде 40кб в основном процессоре и что-нибудь типа 15кб в периферийном, я не помню точные цифры, но сильно урежет память). Учитывая что только один фреймбуфер в периферийном процессоре - 7кб (14кб в основном проце) - там останется с гулькин нос. И подгрузка с диска уже будет как медвежья услуга (переходишь на другой экран в игре и дисковод начинает раскручиваться вжжж... начинает читать.. найс :)
3) Код для периферийного проца придется писать перемещаемым. То-есть изначально не знаешь по какому адресу будет запущен код. Для ассемблера dec это не прям жуть, он специально даже можно сказать "заточен" для таких вещей (относительная адресация), но радости мне это не сильно добавляет ибо привык к абсолютным адресам.
Если бы я не хотел 8 цветов и звуковые эффекты - вот тогда да, самое простое это будет выгрузить максимально всякие драйвера с RT-11 для увеличения доступной памяти и работать только в центральном процессоре. Стандартный режим программок для УКНЦ.
А даже и не знаю на самом деле.
1) Хочется сделать так-сказать самодостаточную игрушку. Как бы это понятнее сказать.. как .TAP наверное в спеке (возможно ошибаюсь). Которая после загрузки больше ничего не просит. Загрузил (хоть с магнитофона) и вперед.
Так в чем проблема? RT-11 позволяет открыть файл и читать его частями, ну так и прочитать большие файлы частями и распихать в память. Потом выкинуть RT-11, если совсем не нужно, и сделать на ее месте буферы или распаковать туда какие-то данные. Это ж не ЕМТ 36 на БК, где только одним куском файл прочесть можно.
Для ассемблера dec это не прям жуть, он специально даже можно сказать "заточен" для таких вещей (относительная адресация), но радости мне это не сильно добавляет ибо привык к абсолютным адресам.
А главное - перемещаемый код работает медленнее абсолютной адресации. В критически важном по быстродействию коде (демки, динамические игры) это играет решающую роль.
А главное - перемещаемый код работает медленнее абсолютной адресации
Вообще-то адресация по абсолютному адресу и относительная по PC работают с одинаковой скоростью.
перемещаемый код работает медленнее абсолютной адресации.
А может можно самомодифицированием подправить адреса-константы в коде?
Если да, то код не будет отличаться от абсолютного.
Вообще-то адресация по абсолютному адресу и относительная по PC работают с одинаковой скоростью.
Уж насколько я нуб в PDP, но даже не глядя в справочники по растактовке, по строению команды понятна её работа. Инструкция с абсолютной адресацией берёт аргумент и сразу работает с ним; относительной же приходится ещё и разницу (смещение) от РС высчитывать. Да, по размеру команды одинаковые, а вот быстродействие различается. Не буду сейчас лезть по справочникам и цитировать, ибо с телефона неудобно, но точно помню, что разница есть, и не в пользу относительной.
может можно самомодифицированием подправить адреса-константы в коде?
Если да, то код не будет отличаться от абсолютного
Почему бы нет... на БК и вообще PDP это вряд ли распространено ввиду наличия мощной относительной адресации, но на Спектруме широко применялась и применяется модификация кода (адресов) для его релоцируемости. Например, любой музыкальный редактор при компиляции плеера запрашивает его адрес, и по заранее составленной таблице модифицирует код, после чего уже плеер готов к работе с заданного адреса. Можно либо сделать так же, либо анализировать код и на лету корректировать абсолютную в относительную. Это потребует больше времени, но избавит от таблицы.
Уж насколько я нуб в PDP, но даже не глядя в справочники по растактовке, по строению команды понятна её работа. Инструкция с абсолютной адресацией берёт аргумент и сразу работает с ним; относительной же приходится ещё и разницу (смещение) от РС высчитывать. Да, по размеру команды одинаковые, а вот быстродействие различается. Не буду сейчас лезть по справочникам и цитировать, ибо с телефона неудобно, но точно помню, что разница есть, и не в пользу относительной.
Читать отсюда (https://zx-pk.ru/threads/32357-tst-(ro)-cmp-(r0)-(r0).html?p=1093436&viewfull=1#post1093436).
Читать отсюда (https://zx-pk.ru/threads/32357-tst-(ro)-cmp-(r0)-(r0).html?p=1093436&viewfull=1#post1093436).
Это для ВМ2. На ВМ1 разница есть, не приснилось же мне =)
Но тема про ВМ2, чего я не учёл, так что соглашусь.
А даже и не знаю на самом деле.
1) Хочется сделать самодостаточную игрушку. Как бы это понятнее сказать.. как .TAP наверное в спеке (возможно ошибаюсь). Которая после загрузки больше ничего не просит. Загрузил (хоть с магнитофона) и вперед.
это сильно ограничивает по памяти. относительно спектрума графика спрайтов займет х2 тайлов х3
сколько там памяти всего 256+64=320 - ну маловато.
2) Если оставить живой систему - то да, будет возможность подгружать например что-нибудь. Минусы такие - останется меньше памяти (навроде 40кб в основном процессоре и что-нибудь типа 15кб в периферийном, я не помню точные цифры, но сильно урежет память). Учитывая что только один фреймбуфер в периферийном процессоре - 7кб (14кб в основном проце) - там останется с гулькин нос. И подгрузка с диска уже будет как медвежья услуга (переходишь на другой экран в игре и дисковод начинает раскручиваться вжжж... начинает читать.. найс :)
лучше запихивать паками по 8-16 экранов.
3) Код для периферийного проца придется писать перемещаемым. То-есть изначально не знаешь по какому адресу будет запущен код. Для ассемблера dec это не прям жуть, он специально даже можно сказать "заточен" для таких вещей (относительная адресация), но радости мне это не сильно добавляет ибо привык к абсолютным адресам.
как вообще устроена RT11? можно как-то ее минимизировать или она прибита гвоздями где удобно авторам?
Но тема про ВМ2, чего я не учёл, так что соглашусь.
Но в УКНЦ только ВМ2. Поэтому все остальные процессоры не имеют значения)
BlaireCas
12.11.2021, 18:11
как вообще устроена RT11? можно как-то ее минимизировать или она прибита гвоздями где удобно авторам?
Ну немного прибита гвоздями, но дело даже не прямо в ней. Система сидит в ОЗУ центрального процессора и даже пусть она выдаст 45 килобайт - уже вполне себе пойдет.
Но тут есть момент. В УКНЦ есть второй проц. И система эта RT-11 его использует и как "эмулятор контроллера дисковода", и как "эмулятор терминала", и как наверное еще что-то. Вообщем из-за того что второй проц все это дело эмулирует - дефолтно у него занято ОЗУ довольно сильно. Память у обоих процов своя и получив нормальный кусок памяти в первом процессоре, но не получив ничего во втором - я обломаюсь ибо:
1) Чтобы получить 8 цветов - второй проц нужно заюзать на полную (там придется хранить часть графония с одним битовым цветовым планом.
2) Также только периферийный проц может издать какие-либо биперные звуки (а они нужны тоже) - соответственно кусман кода/данных еще и на звуки в него надо запихать.
3) Также желательно чтобы он рисовал текст. Ибо опять - только он и может нарисовать условно говоря белым цветом. А это значит что шрифты хранить тоже в его ОЗУ (можно использовать ПЗУшные, но мне хочется 6х8, а не 8х8.. тут правда есть способ подрезать и сделать из 8-ми пиксельных 6-ти пиксельные.. однако изврат)
Если-же во втором проце выбросить всю левоту из памяти и под свои нужды заюзать где-то 30кб (32кб минус таблица прерываний/стек/таблица строк экрана) - то уже становится намного веселей.
Продолжу насчет игрухи. Вообщем взяв у manwe & ivanq компрессию с БКшки - получилось накропать лоадер который все скомпилированные куски памяти с диска сначала грузит в видеопамять, а затем распаковывает по четырем местам: ОЗУ центрального процессора, ОЗУ периферийного процессора, видеопамять планы 1,2 и видеопамять план 0.
Распаковка из видеопамяти в видеопамять это однако вышел тот еще изврат. Ладно фиг с ним с распаковкой по одним адресам. Но там еще и другое - видеопамять планов 1,2 адресуется сразу по слову, а алгоритм распаковки использует байты. Например нужно взять текущую позицию байтовую минус N байт. А адресовать можно лишь словами.. фууу УКНЦ чортова зараза такая :) Куда не плюнь неудобства вылазят.
Сейчас думаю что сделать с вот таким:
https://i.imgur.com/RcFNinF.png
Смысл кажется понятен - вся карта вся сделана тайлами 16х16. Персонаж лопатой может там копать (не все блоки) а-ля болдер даш. Разумеется выглядит это все криво с обрезанными гранями. Тратить кучу тайловой памяти на "обгрызание" по всем возможным вариантам одного лишь тайла - неразумно. (16 вариантов-же). Накладывать постоянно во фреймбуфер маску с обгрызанием поверх - затратно по процессору (и так 5-6 спрайтов еле осиливает, тайлы конечно побыстрее, но тоже не айс). Пока просто накидаю сверху неровностей если пустой кубик ну хоть нижнюю заполненную грань разнообразит.
BlaireCas, не надо болдер даш. болдер дашей много.
сделай платформер.
вот например
https://www.youtube.com/watch?v=06JLWFDO-QA
Тратить кучу тайловой памяти на "обгрызание" по всем возможным вариантам одного лишь тайла - неразумно.
А кэш завести -- не? Commander Keen выруливает по скорости как раз за счёт специально организованного кэша. Ну, УКНЦ -- это не PC+EGA, но всё же?
- - - Добавлено - - -
BlaireCas, не надо болдер даш. болдер дашей много.
сделай платформер.
Болдердашей, да, до пня. Но зато -- это простая игра, на ней можно хотя бы двигло обкатать. Ну а там -- пусть будет платформер. А то, глядишь, и метроидвания вообще!
shattered
14.11.2021, 11:19
специально организованного кэша
подробнее и с картинками:
https://retrocomputing.stackexchange.com/questions/22175/what-is-adaptive-tile-refresh-in-the-context-of-commander-keen
как вообще устроена RT11? можно как-то ее минимизировать или она прибита гвоздями где удобно авторам?
Нет, особо там ничего не прибито, можно конфигурировать и перепиливать, не вопрос. Проблема в том, что минимизировать её особо некуда, она и так зверски ужата. Когда работает пользовательская программа, то обязательно только присутствие RMON -- "Резидентного монитора". Который и есть ядро ОС. Ну и драйверов диска(ленты) и терминала, они небольшие.
Это реально минимум, дальше резать уж некуда. Разве что изобретать свою сверхпростую файловую систему. Ну терминал-то ладно, он для графической игры не нужен, но для УКНЦ его драйвер -- по сути пустышка, всё делает ПП.
подробнее и с картинками:
https://retrocomputing.stackexchange.com/questions/22175/what-is-adaptive-tile-refresh-in-the-context-of-commander-keenЭто определенно не самый лучший вариант для укнц.
Игры со скроллом карты не для такой организации экрана.
Нет, особо там ничего не прибито, можно конфигурировать и перепиливать, не вопрос. Проблема в том, что минимизировать её особо некуда, она и так зверски ужата. Когда работает пользовательская программа, то обязательно только присутствие RMON -- "Резидентного монитора". Который и есть ядро ОС. Ну и драйверов диска(ленты) и терминала, они небольшие.
Это реально минимум, дальше резать уж некуда. Разве что изобретать свою сверхпростую файловую систему. Ну терминал-то ладно, он для графической игры не нужен, но для УКНЦ его драйвер -- по сути пустышка, всё делает ПП.Вот и вопрос можно ли оставить только ту часть ос что находиться в основной памяти.
только ту часть ос что находиться в основной памяти
Она вся и находится в основной памяти, в память ПП сама RT ничего не грузит. И драйвер терминала - он, по сути, сидит в RMON, тот, который TT.SYS нужен, когда идёт "открытие" файла и файловые запросы на TT:
Хотите уменьшить размер в памяти - генерация и выбор параметров - тогда можно уменьшить размер RMON
Игры со скроллом карты не для такой организации экрана.
Ну, вертикальный скролл на УКНЦ вообще не требует никаких ресурсов, т.к. делается таблицей строк.
BlaireCas
14.11.2021, 15:58
вертикальный скролл на УКНЦ вообще не требует никаких ресурсов
Монитор на бок повернуть - вуаля, скролл стал горизонтальным (супермарио можно делать)
Монитор на бок повернуть - вуаля, скролл стал горизонтальным (супермарио можно делать)
На самом деле можно и не переворачивая. И тоже получить почти аппаратный горизонтальный скроллинг.
Однако, это сьест много ресурсов памяти.
Т.к. придется хранить 4 копии экрана, если сдвиг по 2 пикселя, и 8 копий, если сдвиг по 1 пикселю.
Однако, это сьест много ресурсов памяти
...которой и так нет =))
лучше тогда делать уровни не вытянутые, а вертикальные, с кучей "этажей". Для БК/УКНЦ самое то.
BlaireCas
14.11.2021, 17:08
Т.к. придется хранить 4 копии экрана, если сдвиг по 2 пикселя, и 8 копий, если сдвиг по 1 пикселю.
Да уж учитывая что разрешение 640 - можно и по знакоместу двигать, имхо будет играбельно (смотря с какой скоростью удастся прорисовывать недостающую вертикальную часть). На спеке-же двигают так в некоторых играх, а пиксели там намного жирнее, и ничего, вполне терпимо.
Будет дергаться конечно от перерисовки самый правый край, но селяви, зато МАРИО
лучше тогда делать уровни не вытянутые, а вертикальные, с кучей "этажей". Для БК/УКНЦ самое то.
off: Ага, портировать doodle jump на УКНЦ :D
Да уж учитывая что разрешение 640 - можно и по знакоместу двигать, имхо будет играбельно
Это слишком дискретно. Получится движение по 4 пикселя.
Лучше по два. И обновление каждый кадр.
Будет красота и плавнота.
Это у нас будет по 10Кб на битплан. Т.е. по 20Кб на 4-хцветный битплан.
Повторяем это 4 раза, получается 80Кб памяти CPU.
И 40Кб памяти PPU.
В общем, это значительно меньше, чем всё. Еще и на графику и код останется место.
На спеке-же двигают так в некоторых играх, а пиксели там намного жирнее, и ничего, вполне терпимо
Особенно во времена ЭЛТ-телевизоров, там пикселы, по сути, и не видны.
Вот, вспомнил, пожалуй, лучшую игру сразу с вертикальным и горизонтальным скроллами: Batman 3 - The Movie
Весьма неплохо смотрится. Даже уровни с бэтмобилем и как его там... бэт-самолетом, на них фпс проседает, но терпимо.
https://youtu.be/ORHAiUDt6gU?t=143
BlaireCas
21.11.2021, 02:26
Почистил код от "веселящих" комментов и мусора и выложил все на гитхаб (в стартовом посте ссылка). Релизов не делаю по понятным причинам, но последнее скомпиленное там-же в descnt.dsk лежит. Не знаю можно-ли чужие вещи типа rt11.exe безо всяких копирайтов туда выкладывать, ну да окей.. Впрочем для луны я тоже спрайт откуда-то (с саботера вроде) спер без разрешения ахах :)
Отредактировал стартовый пост, всякие хотелки набросал. Особо расписывать пока-что нечего, что-то добавляется, что-то удаляется.. понемногу движок становится похож на движок, а не на набор процедур для теста вывода графики. Периодически оно там на гитхабе будет апдейтиться вместе со стартовым постом.
лучшую игру сразу с вертикальным и горизонтальным скроллами
Ух.. воспоминания детства. (хотя на элиту наверное было убито намного больше времени)
Почистил код от "веселящих" комментов и мусора и выложил все на гитхаб
Класс! Уже чувствуется настоящая игра.
Движок просто летает.
И графика весьма приятная.
Отредактировал стартовый пост, всякие хотелки набросал
В идеале по мере выхода "обновлений" можно в первый пост добавлять инфу об изменениях в текущей версии: что добавлено, что пофикшено. Оно, конечно, необязательно, но придаёт солидности работе =) Да и самому потом проще отлавливать баги (а без них не бывает), о которых напишут на форуме.
А при наличии некоторого времени ещё и видео на ютубе обновлять.
Запустил на реале. Работает очень резво! Экраны переключаются быстро.
https://youtu.be/Wu57j_yXUvw
Кстати, в меню пишет "эмуляция". Видимо глюк всё-таки плавающий. Уверяю, я запускал на реальной машине, могу дать доказательства ))
Кстати, в меню пишет "эмуляция". Видимо глюк всё-таки плавающий. Уверяю, я запускал на реальной машине, могу дать доказательства ))
Он и есть плавающий. А еще точнее - недоизученный.
- - - Добавлено - - -
Запустил на реале. Работает очень резво! Экраны переключаются быстро.
Хорошо бы и звук с реала записать.
Хорошо бы и звук с реала записать.
Ага, просто я сделал кабель для монитора МС 6106 и использую его с видеозахватом (Beholder A8) через переходник.
Но я что-нибудь придумаю. Может кину звук вместо какой-нибудь земли.
- - - Добавлено - - -
Хорошо бы и звук с реала записать.
Вот и со звуком.
https://youtu.be/oLaEDEoFcQ4
Симпатяшно. Но я бы делал переход на новый экран не так. То есть, не занавеской, а псевдослучайной заменой строк. Учитывая возможности УКНЦ, можно даже сначала построить картинку низкого разрешения, а потом её дорисовывать.
Вот и со звуком.
Получается, что озвучено только меню.
Получается, что озвучено только меню.
Ну да, это и на эмуляторе вроде видно.
Ну да, это и на эмуляторе вроде видно.
Я играю только на своем эмуле, на нем звук не реализован)
Я играю только на своем эмуле, на нем звук не реализован)
А, прошу прощения ).
Я EmuStudio запускаю только ради режимов КГД, КЦГД и других терминалов. :)
Ах, если бы терминалы отделить от УКНЦ и реализовать IP подключение к эмулятору ДВК... А то все прочие терминалки, Putty например, без русского языка :-(
BlaireCas
21.11.2021, 19:34
Уверяю, я запускал на реальной машине, могу дать доказательства ))
А во втором видео слышно что на реальной. Эмулятор не осиливает высокие ноты (на слух вообщем понятно).
Вот то что баг процессора не произошел - ну видимо его надо действительно изучать. В теме где разбирался баг - тоже высказывалось что он динамический и может так, может эдак произойти.
Получается, что озвучено только меню.
Ну сама музыка особо и не нужна, а звуков еще нет вообще, это в планах только запихнуть хоть какой-то примитивный генератор звучков.
UPD:
Поменял немного определение бага. Сейчас определяется вот так:
; check for real 1801VM2
clr R1
mov (PC), R0
inc R1
br 10$
10$: cmp R1, #1
beq 99$
На моей УКНЦ определяет. Если верно понимаю - то inc R1 может либо сработать 2 раза, либо не сработать вообще. Вообще странно что баг может произойти, может не произойти.. Казалось уж процессор должен детерминированно как-то работать.
Добавил также копку лопатой (пока-что черновой вариант), можно добраться до самого нижнего уровня (куда судя по названию в игре и надо будет попасть).
Ух е... 4х20 экранов это кажется перебор. Падал персонаж довольно долго на нижний уровень и пока он падал - стало понятно что на столько графония на разнообразный контент памяти не хватит.
стало понятно что на столько графония на разнообразный контент памяти не хватит.
Раз нет памяти на графику - надо брать геймплеем =) В смысле, разнообразием логики на уровнях/этажах.
Их даже необязательно рисовать целиком а ля массив, можно генерить на лету для экономии памяти.
При таком подходе получаются огромные карты при скромной памяти компа (например, Saboteur на Спектруме).
На моей УКНЦ определяет. Если верно понимаю - то inc R1 может либо сработать 2 раза, либо не сработать вообще. Вообще странно что баг может произойти, может не произойти.. Казалось уж процессор должен детерминированно как-то работать.
Дело не только в процессоре.
По скольку это баг ошибки кэша, происходит накладывание новых данных читаемых из памяти на старые, которые уже в кэше и используются для декодирования команды.
Поэтому играет роль скорость отклика памяти. А на разных УКНЦ она может плавать. И даже на одной и той же машинке.
И, плюс, повторюсь, что не хватило усидчивости изучить этот баг до конца. Т.е. принцип его как бы описан, но не все варианты, получившиеся на практическом железе, удалось логически обосновать. Нужны тесты.
Я бы рекомендовал на всякий случай этот баг вообще не задействовать в программе, а проверять на эмулятор/реал как-то по другому.
- - - Добавлено - - -
Добавил также копку лопатой
Когда прокопался на экран ниже, потом пошел правее и стал заглядывать на экраны выше, то возвращаясь ниже, экраны заглючивали, появлялись множественные анимированные тайлы.
- - - Добавлено - - -
В общем, глюк происходит, когда с нижнего экрана копаешь на верхний.
BlaireCas
22.11.2021, 00:03
проверять на эмулятор/реал как-то по другому
А наверное уберу позже этот кусок кода. Большого смысла проверять на эмулятор нету, каких-то фишек от присутствия эмулятора вроде не планируется.
В общем, глюк происходит, когда с нижнего экрана копаешь на верхний.
Спс за багрепорт. Это спрайты еще не проверяются на выход за границы фреймбуфера и лезут в неположенные куски памяти. Еще спрайтовалку/конвертер .png надо будет доделывать на произвольную высоту спрайта ибо сейчас 16х16 и это перерасход. Та-же лопата меньше размером и явно лишние нули просто хранятся/рисуются.
например, Saboteur на Спектруме
:) Луна сперта с саботера-2 (немного подправлена), а так да. Когда-то очень давно увидел саботер-2 в первый раз и думалось "ух какой здоровенный лабиринт, ого!". Лифт особенно когда отсчитывает этажи побуквенно мол "ну ничего-себе весь алфавит этажей!". Сейчас когда разглядываешь полную карту саботера-2 в виде картинки гигантской - сразу видно что спрайтов не так уж и много, очень большой кусок здания это вообще подземелье однотипное и т.д... А ведь в первый раз поражало масштабностью.
:) Луна сперта с саботера-2 (немного подправлена), а так да. Когда-то очень давно увидел саботер-2 в первый раз и думалось "ух какой здоровенный лабиринт, ого!". Лифт особенно когда отсчитывает этажи побуквенно мол "ну ничего-себе весь алфавит этажей!". Сейчас когда разглядываешь полную карту саботера-2 в виде картинки гигантской - сразу видно что спрайтов не так уж и много, очень большой кусок здания это вообще подземелье однотипное и т.д... А ведь в первый раз поражало масштабностью.
хех в игре firelord 500 экранов
карта занимает примерно 4кб
Карту можно пожать примитивным пакером, т.к. тайлы в пределах одного экрана обычно отличаются малым ассортиментом.
в "Last Mission" упакованные лабиринты, можно посмотреть формат – здесь обсуждалась версия для УКНЦ
BlaireCas
24.11.2021, 08:55
в "Last Mission" упакованные лабиринты
Ну карта моего размера влезла, с ней вроде проблем нету. Разумеется можно и как в болдер даш сделать. Там карта вида "линия от и до", "прямоугольник рандомное заполнение seed=1" и т.д. Влезет вообще слон, но тогда будут сложности с дизайном + у меня карту можно менять ковыряя лопатой посему ее проще "развернутую" держать.
Про память это я про кол-во памяти для спрайтов. Собственно с чего начался первый пост - с того что несмотря на "8-цветов" и 192кб памяти в УКНЦ - сделать на ней что-то дельное прилично сложнее чем на БК-0011 с 128кб. Ибо половина ОЗУ в УКНЦ адресуема через одно место на букву ж.. (нет бы сделали банки памяти как в нормальных компах :) .. но делали мини pdp-11).
Посему спрайты могут лежать только в "быстрой" памяти которой ровно половина от 192кб да еще она разделена по двум процессорам.
А карту и прочее как-раз можно упихать в эту тормозную память (там-же и видеопамять находится, но при разрешении 320х288 половина экрана не используется).
Тут конечно можно начать извращаться и перегонять спрайты туда-сюда из одной памяти в другую при переходе на сл. экран. Получится "level is loading..." ахахах, дожили, загрузка уровня на восьмибитке (ну окей пусть 16-ти).
(про Last Mission - куда-то запропал наш S_V_B который ее делал на УКНЦ, кажется приобрел Союз-Неон и что-то может под него программит?)
Также чую что нужна еще процедура вывода зеркального спрайта для экономии памяти. Но оно и так еле 5 спрайтов рисует, а тут еще и зеркалировать побайтно через таблицу - вообще сдохнет все.
Кстати появился паучок :) Ня
https://i.imgur.com/KpSgcnG.png
Кривовато нарисовал, но вроде пойдет. Не кусает, просто бегает. Натыкается на препятствия и прокапывая под ним пол - можно "провалить" паучка куда-нибудь (однако на другой экран он не перейдет). Эту часть геймплея навроде Lode runner-a можно использовать чтобы "обойти" паука не сражаясь с ним лопатой.
Иногда он может правда "застрять" в блоке если переходить между экранами, это фиксить надо будет
Посему спрайты могут лежать только в "быстрой" памяти
Можно пойти на компромисс: на разных экранах могут быть разные спрайты (врагов, лута, стен, да чего угодно, - тот же паучок), значит, достаточно при смене экрана перегрузить эти данные в быструю память. А те, что нужны постоянно, держать в быстрой. Небольшая, в долю секунды, задержка вряд ли будет ощутима.
BlaireCas
24.11.2021, 09:38
на разных экранах могут быть разные спрайты
Ага, уже думаю про такое. Экспериментировать надо будет. Как и с зеркальными спрайтами. Явно держать постоянно в памяти зеркалированные версии спрайтов это не оч. здравая мысль. Нужно будет либо добавлять процедуру вывода зеркально, либо перед уровнем их готовить из обычных.
Либо добавлять процедуру вывода зеркально, либо перед уровнем их готовить из обычных.
Либо зеркалить черезстрочно по таблице на ходу =) Что даст одинаковые затраты на вывод обычного и зеркального спрайтов.
Это несколько дольше обычного, зато при куче зеркальных не будет просадок быстродействия, всё выровнено.
Это несколько дольше обычного, зато при куче зеркальных не будет просадок быстродействия, всё выровнено.Выровнять быстродействие можно, храня половину спрайтов зеркальными :) Тогда статистически число обычных и зеркальных спрайтов на экране будет примерно равно.
Глюки:
1. Паук не может провалиться на экран ниже. А если игрок ушел экраном ниже и вернулся, паук уже оказывается застрявшим в непробиваемом кубике, левее, чем он был до падения игрока на экран ниже.
2. Если раскопать глубоко вниз, потом падать в бездну, а потом упасть на самые нижние экраны, потом пойти максимально вправо, затем прыгнуть вверх то появляется опять глюк с анимирующимися тайлами в виде долларов всяких.
Либо зеркалить черезстрочно по таблице на ходу =) Что даст одинаковые затраты на вывод обычного и зеркального спрайтов.
Это несколько дольше обычного, зато при куче зеркальных не будет просадок быстродействия, всё выровнено.
А не проще по системному таймеру посчитать сколько времени занял цикл формирования текущего кадра для всех движущихся объектов и в зависимости от этого подождать больше или меньше в финальной задержке? Или в УКНЦ такого таймера нет?
Выровнять быстродействие можно, храня половину спрайтов зеркальными
Можно и так. Но если карта ляжет неудачно и вывести надо будет кучу тех, что все равно надо зеркалить - возможен дискомфорт =)
А не проще по системному таймеру посчитать сколько времени занял цикл формирования текущего кадра
Раз у ВМ1 есть таймер, то у ВМ2 всяко тоже должен быть. Но речь о другом: оптимизировать максимальную загрузку кадра, ну вы поняли (с)
Чтобы не просаживать принудительно фпс по нижней границе, а поднять его до максимально возможного, от которого уже и плясать.
А что делать с фонариком?
https://pic.maxiol.com/thumbs2/1637855057.1845235324.20211125183827.jpg (https://pic.maxiol.com/?v=1637855057.1845235324.20211125183827.jpg&dp=2)
А что делать с фонариком?
https://pic.maxiol.com/thumbs2/1637855057.1845235324.20211125183827.jpg (https://pic.maxiol.com/?v=1637855057.1845235324.20211125183827.jpg&dp=2)
А чего цвета такие странные?
Фото с монитора на реале. И RGB/GRB не менял.
Тоже баг нашёл похоже.
Прокопал на правый экран снизу. Все блоки копаются, а самый верхний ряд - нет.
Кстати, очень неудобно копать блок справа сверху спрайта персонажа. Приходится в прыжке нажимать стрелку вправо, и далеко не всегда удаётся попасть точно. Может продублировать управление на цифровой блок клавиатуры (8 4 5 6 или 8 4 2 6), а на 7 9 1 3 - копание по диагонали.
https://pic.maxiol.com/thumbs2/1637914861.1559558028.20211126081437225.png (https://pic.maxiol.com/?v=1637914861.1559558028.20211126081437225.png&dp=2)
Раз у ВМ1 есть таймер, то у ВМ2 всяко тоже должен быть.К сожалению, нет
(про Last Mission - куда-то запропал наш S_V_B который ее делал на УКНЦ, кажется приобрел Союз-Неон и что-то может под него программит?)
Сейчас мне немного не до того.. сам переболел ковидом, Тесть умер... похороны и.т.д. (вот вам факт.. антипрививочники Тесть не хотел делать прививку.. остальные сделали)
- - - Добавлено - - -
По поводу быстрого вывода спрайтов - развернул циклы..и быстрый переход на нужную высоту. работает быстрее.
- - - Добавлено - - -
;R3 ширина
ASL R3
ASL R3
ADD R3,PC
JMP JH0 ; нулевой ширины не бывает
JMP JH1
JMP JH2
JMP JH3
JMP JH4
JMP JH5
JMP JH6
JMP JH7
JMP JH8
JMP JH9 ;ЛОГО
; R4 высота
JH0:
JMP NXSP
JH1:
CMP #3, R4
BNE 1$
JMP H13
1$: CMP #14., R4
BNE 2$
JMP H114
2$: CMP #16., R4
BNE 3$
JMP H116
3$: JMP NXSP
Как-то так..
H116:
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
H114: BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
H13: BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #79.,@#176640
JMP NXSP
H216:
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
H26: BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #78.,@#176640
JMP NXSP
H412:
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #76.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #76.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #76.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #76.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #76.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #76.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #76.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #76.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #76.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #76.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #76.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #76.,@#176640
JMP NXSP
H516:
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #75.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #75.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #75.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #75.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #75.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #75.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #75.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #75.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #75.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #75.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #75.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #75.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #75.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
INC @#176640
BIS (R5)+,@#176642 ;рисуем спрайт
ADD #75.,@#176640
BIS (R5)+,@#176642 ;рисуем спрайт
Давно писал.. но работает быстрее
быстрый переход на нужную высотуЕсли JMP, а не BR, то лучше абсолютную адресацию использовать – она немного быстрей относительной.
Если JMP, а не BR, то лучше абсолютную адресацию использовать – она немного быстрей относительной.
На ВМ2 вычисление абсолютного адреса и относительного абсолютно одинаковы по времени.
S_V_B, а почему не JMP @TABLE(R3) ? Так же быстрее и проще. И памяти в два раза меньше надо. И таблицу можно класть, где угодно.
Да, если хочется скорости, то адреса и константы можно положить в регистры, зачем они простаивают?
- - - Добавлено - - -
Как-то так, например:
BIS (R5)+,@R2 ;рисуем спрайт
INC @R0
BIS (R5)+,@R2 ;рисуем спрайт
INC @R0
BIS (R5)+,@R2 ;рисуем спрайт
INC @R0
BIS (R5)+,@R2 ;рисуем спрайт
INC @R0
BIS (R5)+,@R2 ;рисуем спрайт
INC @R0
BIS (R5)+,@R2 ;рисуем спрайт
ADD #75.,@R0
- - - Добавлено - - -
А ещё можно адрес положить в регистр, например, R1, и действовать так:
INC R1
MOV R1, @R0
Но тут уже надо мерить, какой вариант быстрее. Может быть и так, и этак.
На ВМ2 вычисление абсолютного адреса и относительного абсолютно одинаковы по времени.а, ну тогда да. Я по привычке на БК 0010 ориентируюсь
BlaireCas
05.12.2021, 14:50
а, ну тогда да. Я по привычке на БК 0010 ориентируюсь
Ухты, на ВМ1 время разное?
Просто когда-то тоже думал что оно разное. Тут меня (в какой-то теме) аналогично поправили что в УКНЦ процессор разную адресацию делает с одной скоростью. Не поверив - полез проверять. Написал тесты для УКНЦ, запустил на реальной машинке - ааа.. чорт и правда чудеса какие-то. Выглядит разумеется интересно. По логике должно тратиться время на операцию сложения адреса и смещения. Однако оно не тратится.
А я ведь вообще специально весь код делал с включением режима абсолютной адресации думая что "ну оно-ж быстрее! должно быть быстрее!"
Здесь есть люди раскопавшие внутренности процессора и наверняка знающие почему так.
Как по мне так это просто хитрый ход разработчиков - они замедлили "короткую" операцию (поставили сложение с нулем например при вычислении абсолютного адреса) и теперь обе адресации стали одинаковыми.
Либо просто сложение настолько быстрое что делается скажем за такт и не влияет.
- - - Добавлено - - -
Все блоки копаются, а самый верхний ряд - нет.
Сделано специально чтобы себе жизнь упростить. Верхний ряд он с травой, деревом, ящики всякие, забор и т.д.
Чтобы не городить проверку на то под какими тайлами можно копать - сделал просто, взял и запретил копать на самом верхнем уровне выше определенной координаты. Иначе пришлось-бы париться с падающим на голову деревом/ящиком/стоящим мужиком :)
Либо просто сложение настолько быстрое что делается скажем за такт и не влияет.
Или предвыборка следующей команды занимает шину, и процессор даже в варианте без сложения вынужден ждать.
BlaireCas
05.12.2021, 14:58
Если раскопать глубоко вниз, потом падать в бездну, а потом упасть на самые нижние экраны, потом пойти максимально вправо, затем прыгнуть вверх то появляется опять глюк с анимирующимися тайлами в виде долларов всяких
Где-то может вылезти ерунда из-за отсутствующих проверок выхода спрайтов за экран. На всякий случай поставил общую проверку пока-что. А так да, было дело что при особо упорном прыгании и одновременном нажатии влево (+постоянно копать чтобы еще и лопата вылезла) в самом левом верхнем углу экрана - портилась память за пределами фреймбуфера/где-то еще.
В эмуляторе Никиты надо будет побольше посмотреть. Там есть удобная фича как показ изменившихся кусков памяти другим цветом, еще бы бектрейсинг откуда менялось (но это уже уберкруто, кажется такого на навороченных эмулях спека даже нету)
- - - Добавлено - - -
А что делать с фонариком?
Предполагается что части лабиринта будут закрыты темнотой и герой туда пройти либо не сможет либо наугад бродить в темноте. Фонарик будет освещать на 1-2 тайла вокруг героя. Апгрейд фонарика (сжирание какой-нибудь батарейки для него) в дальнейшем будет освещать весь экран. Как-то так. Но пока это еще не реализовано.
Здесь есть люди раскопавшие внутренности процессора и наверняка знающие почему так.
Как по мне так это просто хитрый ход разработчиков - они замедлили "короткую" операцию (поставили сложение с нулем например при вычислении абсолютного адреса) и теперь обе адресации стали одинаковыми.
Либо просто сложение настолько быстрое что делается скажем за такт и не влияет.
Ничего никто специально не замедлял)
Я уже ну несколько раз писал, почему это происходит. И все подробности растактовок адресаций ВМ2 описывал в соответствующей теме)
BlaireCas
05.12.2021, 15:33
И все подробности растактовок адресаций ВМ2 описывал в соответствующей теме
Имхо еще сдвиг ASHC делается за то-же время что и ASH? Тут писали про это. Ну господа, это-ж чудеса. Как это сдвиг двух слов может быть таким-же как сдвиг одного? Явно "замедлили где-то!"
- - - Добавлено - - -
Тем временем сделал хоть какой-то примитивный редактор уровней (на джаваскрипте).
https://i.imgur.com/x68q2Mb.png
Иначе это было ну уже совсем мучение редактировать в виде .word 1,24,56,21,34 и т.д.
Пока-что не сделано восстановление экранов и их упаковка (выход на другой экран и возвращение назад ресетит объекты типа паука/айтемов). Ну это я еще в раздумьях о выборе способа хранения лабиринта.
И подошло время сделать биперные звуки. (примитивная музыка в меню и так есть, неузнаваемо, но кастлевания wood carving partita :)
Насчет звуков пока мысли такие:
1) Самое простое (уже делал) - храним времена для таймера переключения уровней бипера - типа .byte 50, 49, 38, 27 и т.д. будет означать "ждать 50 едениц времени, переключить уровень на верхний, ждать 49 едениц времени, переключить уровень на нижний и т.д." - жутко бешено жруче по памяти, зато можно засунуть чего хочешь в виде звуков. Из-за бешеной жручести малоприменимо.
2) Пока-что думаю над таким:
[___/''''''''''] это базовый кусок сигнала (нижний уровень/верхний).
Общий кусок длится L времени, после каждого куска к этой L добавляется(вычитается) допустим LD
Процент времени X который длится нижний уровень также после каждого куска может изменяться добавлением/вычитанием определенной величины XD
Повторить некое кол-во раз CNT
Перейти к началу инициализации величин L,LD,X,XD и повторить всё опять кол-во раз TCNT
Итого на весь сигнал будет храниться всего несколько величин TCNT,CNT,L,LD,X,XD которыми можно сделать разнообразные вещи.
Это один из "маленьких эффектов"
Второй "маленький эффект" это почти то-же самое, но с рандомными X и L (да тупо с ПЗУ можно брать или по своему коду даже идти).
Из таких частей будет состоять весь звуковой эффект (ну их можно будет чередовать или повторять с разными параметрами до окончания эффекта)
Памяти особо много не сожрет. Вообщем пока попытаюсь запрограммить и посмотреть что выйдет.
Имхо еще сдвиг ASHC делается за то-же время что и ASH? Тут писали про это. Ну господа, это-ж чудеса. Как это сдвиг двух слов может быть таким-же как сдвиг одного? Явно "замедлили где-то!"
Это происходит потому, что сдвиговый регистр условно говоря 32-битный. И ему все равно, что сдвигать, 16 бит или 32 бита.
Дополнительные 8 тактов занимает лишь копирование второго слова в сдвиговый регистр (4 такта), и копирование после сдвига обратно (4 такта). И все.
BlaireCas
05.12.2021, 22:12
Добавил несколько звуков. Схема ну не прям та что описал, что-то навроде. То-есть идея да, идея та - некими приращениями менять длительности чередования низкого и высокого уровней бипера с разным шагом.
Надо будет разумеется допиливать. Пока-что все кривовато.
(если что - UKNCBTL чутка кривит в звуках/музыке, на настоящем получше)
И прям смешно тут стало. Ирония судьбы. В играх детства ну вот ненавидел этот звук прыжка .. и что-же? И такой-же сделал у себя :) Ахахах
(если что - UKNCBTL чутка кривит в звуках/музыке, на настоящем получше)
Хорошо бы посмотреть видео со звуком с реала.
- - - Добавлено - - -
Багрепорт: Каждый раз при входе на экран лопата появляется заново)
Хорошо бы посмотреть видео со звуком с реала.
Завтра сделаю
BlaireCas
06.12.2021, 11:05
Багрепорт: Каждый раз при входе на экран лопата появляется заново)
Это нормально. Тут просто я еще в раздумьях неких насчет формата хранения лабиринтов и объектов.
Пока-что лабиринт сделан в виде массива цельного [dy*dx] без разделений на экраны. При прокапывании в нем проходов - запоминается сразу по всему этому массиву и пока-что не восстанавливается если скажем выйти по клавише "стоп" и опять запустить. (т.е. одноразово все).
Объекты-же привязаны к каждому "экрану" игровому (поэтому паук не может переползти на другой экран). Ну тут понятно - чтобы мне не обрабатывать вообще всех пауков/etc по карте, а только тех которые на экране. Ну и также чтобы игрок не смог теоретически собрать всех пауков на один экран и устроить аццкие тормоза
Ну и вот тут я еще не решил (казалось-бы) мелкие вопросы. И таких мелких моментов тьма :) для большого компа о таких вещах не думают, но тут слишком все ужато по памяти-ж..
Например:
- сколько выделить байт на хранение инфы об объекте. Хватит 4-х (тип/подтип, аргумент 1, аргумент 2, координата тайла) или может сделать 3 байта, а может и наоборот 6.
- нужно-ли фиксированное число объектов делать (скажем 4) для экрана (не нужно). Раз не нужно, то как получше хранить кол-во объектов для экрана (в ниблах/в байтах, вроде нибла хватит на 15 объектов, а это прилично.. но а вдруг - ведь объекты там не только те которые рисуются на экране, а еще триггеры действий и то что на экране рисоваться и не будет)
- сколько выделить для объектов про-запас (для "спавна" тех-же пауков например или еще для каких динамически создаваемых штук)
- стоит-ли вообще хранить цельный лабиринт в виде здорового массива (пока-что решил что стоит ибо у меня экраны пересекаются по одной строке/столбцу - иначе в связи с изменяемым лопатой лабиринтом будут проблемы с "а можно-ли вообще перейти на сл. экран, может там занято")
Поэтому пока-что когда входишь на экран - объекты его переписываются в рабочую область, а когда выходишь с экрана - они должны будут сохраниться откуда взяты, но пока выясняю этот момент как их хранить - я и не делаю сохранение.
Если хранить "целиком" как массив, то каждый тайл удобней для экономии места кодировать полубайтом, это 16 вариантов. Так сделано в Lode Runner, причём там вообще 8 вариантов тайлов, насколько помню. Само собой, можно ещё и сжать каждый экран, вопрос во времени распаковки-упаковки обратно (раз планируется сохранение "истории действий" на карте при переходах по экранам).
Либо генерить программно, тут основная задача - подбор алгоритма построения, чтоб рисовалась вменяемая карта, а не хаос по RND. Грамотному алгоритму понадобятся лишь несколько байт, задающих генерацию всего экрана.
Местоположение итемов, врагов и прочее тоже можно генерить, хотя бы частично.
Я бы хранил невидимую часть лабиринта в сжатом виде, а прокопы -- в виде битовой карты. Битовая карта 256x256 займёт 8 КБ, а лабиринт большего размера всё равно ни один вменяемый игрок не осилит раскопать.
Если лабиринт фиксированный, то есть варианты, как сжимать получше. Собственно, они известны: автогенеренаторы различные и сборка из типовых блоков. В принципе, можно написать автоупаковщик, который будет по нарисованному вручную лабиринту искать блоки. Это небыстро, но нужно же всего один раз при сборке мастера. Ну, естественно, при сборке из блоков нужно предусмотреть возможность накладывать блоки друг поверх друга и в конце делать мелкие патчи. Собственно, полторы сотни экранов в Эксолоне так и сделаны. Да и вообще это достаточно типовой подход.
- - - Добавлено - - -
Либо генерить программно, тут основная задача - подбор алгоритма построения, чтоб рисовалась вменяемая карта, а не хаос по RND. Грамотному алгоритму понадобятся лишь несколько байт, задающих генерацию всего экрана.
Тут хорошо работает гибридный подход: базовую структуру уровня, т.е. проходы, платформы, двери, аретефакты мы задаём вручную, а всякий декор расставляет рандом. Если поиграться с параметрами генератора, то обычно получается вполне натурально.
проходы, платформы, двери, аретефакты мы задаём вручную, а всякий декор расставляет рандом.
Да, ключевые места всё равно задаются вручную. Главное найти компромисс с генератором, дабы смена экрана не превращалась в "подождите, генерю карту" =)) Если быстродействие и аппаратные особенности позволяют, можно распаковывать соседние экраны "фоном", пока игрок занят делами на текущем.
Записал на реале.
https://youtu.be/5JE3qYMBnpA
Записал на реале.
https://youtu.be/5JE3qYMBnpA
Очень прелестные звуки. И вроде совсем игру не тормозят.
Сколько они занимают по времени?
Хорошо бы посмотреть видео со звуком с реала.
Завтра сделаю
https://www.youtube.com/watch?v=mYOrYvTbgAQ
- - - Добавлено - - -
Звук прыжка реально очень бесячий. А копания земли - приятный.
Звук прыжка реально очень бесячий.
Учитывая то, что игроки любят перемещаться прыжками, наверное звук придется поменять или убрать)
CodeMaster
06.12.2021, 22:21
Звук прыжка реально очень бесячий.
ИМХО БКшная классика :-/ не в смысле прыжка, а именно звука.
Что-то долго продолжения нет.
BlaireCas
20.08.2022, 12:58
Что-то долго продолжения нет.
Автор болел, а потом ушел в запой :)
И вообще не знаю как тайлы поверх игрока сделать, это атас уже для УКНЦ будет. Вот видно что ГГ стоит поверх булькающей кислоты мол и неизвестно как сделать чтобы она булькала поверх спрайта. (нет, спрайты другие не вариант)
https://i.imgur.com/Om7yzF3.png
Ну и собственно запись с кхм.. действиями прототипа игрухи. (да да, это эмустудио и пропущено 2/3 кадров при записи в гиф и конвертации на ресурсе, на реальной железке более нормально смотрится)
https://i.imgur.com/os30NcU.mp4
Для УКНЦ так уже довольно продвинутая игра.
В комнате где нет света - пустые и неоткрытые клетки лучше бы разным цветом сделать, выглядят одинаково.
BlaireCas
20.08.2022, 16:59
Для УКНЦ
Кстати офигенно выручает твой эмулятор. Особенно когда звуки опробывать надо. Иначе железную технику постоянно по стык С2 грузить...
Но вот бы еще пару вещей:
1) вводишь адрес памяти - курсор ну совсем не виден там, нельзя инвертированным сделать его? Чтобы сразу в глаза бросался :) Ну или передвигать окно с памятью под первую позицию, раньше так было сделано и было удобнее да!
2) ну и чтобы можно бы было поменять ячейки памяти (понимаю что это атас ведь окно дизассемблирования попортится если прям под него подпадет.. но клевая-бы была фича)
(сорри что про эмулятор тут, но он юзается ведь.. отзывы потребителей мол все такое ага)
Картинка про курсор, набрал например 12345 и .. ну не видно его где он там :)
https://i.imgur.com/VcVwZi6.png
В комнате где нет света - пустые и неоткрытые клетки лучше бы разным цветом сделать, выглядят одинаково.
Да самому неприятно когда темные тайлы 16х16 открываются, но быстрее похоже ничего не придумать. Просто тайл не рисуется в этом случае. Без фонарика тупо будет темнота неосвещенная. С фонариком ГГ "светит" немного на +1 тайл по всем направлениям. Планируется типа что его надо все-ж заюзывать когда он выдается чтобы потратился и был весь экран освещен, на записи я просто знаю куда идти (ну еще бы не знать) и не тратил фонарь а так его сразу надо было потратить на экране вроде как.
И вообще не знаю как тайлы поверх игрока сделать, это атас уже для УКНЦ будет. Вот видно что ГГ стоит поверх булькающей кислоты мол и неизвестно как сделать чтобы она булькала поверх спрайта. (нет, спрайты другие не вариант)
Почему не вариант? Для этих клеток сделать анимированный слой поверх. Так все делают. Чтобы не мерцало, при находжении поверх этих клеток собирать картинку в буфере в простой памяти и потом перекидывать в экран.
BlaireCas
20.08.2022, 18:08
Почему не вариант?
Нереальные тормоза будут. Я там экономил и так на отрисовке скок только можно и даже тайловый буфер не 8х8, а 16х16 потому-что это внезапно зароляло, 224 цикла всяких tst bit и т.д. однако жрут больше чем вывод спрайта даже. А если их помножить на 4 то вообще жуть. Несмотря на 8Мгц машинка довольно тормозная, там спек на более медленной частоте выигрывает.
Но по теме - тайлы у меня без маски. А так надо будет либо какую-то автомаску делать (тормоза) либо заранее ее хранить (память). Вообщем фиг с ним, проще сделать что если падаешь в кислоту эту анимированную то сразу помираешь да и все :) Обход ограничений геймдизайном.
Чтобы не мерцало, при находжении поверх этих клеток собирать картинку в буфере
Разумеется оно с буферизацией. Три буфера на каждый цветовой план (синий цвет в периферийном процессоре, мол параллельная работа же :) В буфере на каждый тайл есть битовые флаги такие
; bits: 7 6 5 4 3 2 [10]
; 7 - 'current frame' draw flag, 6 - 'previous frame'
; 5 - darken tile
; 4 - hazardous
; 3 - animated (last 2 bits in tile #)
; 2 - breakable
; [1,0] 0 - passable/any, 1 - ladder type, 2 - box type, 3 - solid
Дальше делать еще один флаг мол "этот тайл поверх игрока и плюс он еще и с маской ага" - нууу... не лезет уже :) всё занято
Да еще вертикальному пауку как-то паутину пририсовывать надо и тоже неясно ибо у меня пустые тайлы там обшиваются "травой" при прокапывании если заметить. Довольно неплохо смотрится кстати, не так "квадратно" пусть и с потерей нескольких тайлов на это дело.
А вот теперь паук который сверху спускается должен прорисовавать нитку паутины.. понятно что в текущей реализации это не прокатит, надо будет тупо сделать тайл с ниткой паутины чтоли но тогда "обшить" травой уже не получится и паук попортит мне там траву. (Какое-то сумбурное объяснение, но вообщем как-то так)
проще сделать что если падаешь в кислоту эту анимированную то сразу помираешь да и все Обход ограничений геймдизайном.
Или спрайт человечка сделать обрезанный снизу, и пены в место стыка пририсовать.
Ну или смешивать с кислотой по OR/AND/XOR, так нередко делают в спектрумовских играх, когда спрайты в воде.
Глянуть, какой вариант будет лучше выглядеть, если устроит - так и делать. Маска при этом не нужна, смешиваем сразу спрайт.
TomaTLAB
21.08.2022, 11:19
и паук попортит мне там траву.
Нужны 4 тайла паутины: без травы, трава слева, трава справа и с обеих сторон.
Решение какой отрисовывать принимать в зависимости от соседей справа/слева. Может на них трава расти или нет.
Возможно еще 5-ый с кирпичами на заднике.
То же самое можно сделать для каких нибудь динамических цепей, веревок и т.п.
BlaireCas
21.08.2022, 11:46
Нужны 4 тайла паутины: без травы, трава слева, трава справа и с обеих сторон.
Да, как-то так если нормально делать. Зажрет память на 4 лишних тайла конечно, но что поделать :( не оставлять-же паука без паутины, а то непонятно как он ползает по пустому месту вверх и вниз.
Пока-что памяти в обычном ОЗУ еще хватает вроде как. Всякую ерунду там для экономии в видеопамяти неотображаемой храню хотя это очень неудобно (доступ к ней та еще бяда).
Вообщем как-то получилось, ну пока и так попрет.
https://i.imgur.com/9bBlYIi.png
randomizer
21.08.2022, 21:11
Заметил что после запуска игры, так же как и после запуска Krackout и RiverRide, не останавливается двигатель дисковода.
Таймер работы двигателя навешен на прерывание по обратному ходу луча.
175306$:TST @#07130 ; Двигатель НГМД вращается ?
BEQ 0175326$ ; Нет
DEC @#07130 ; Уменьшить счетчик вращения двигателя
BNE 0175326$ ; Еще не конец
CALL @#07132 ; Вызов п/п выключения двигателя НГМД
175326$:
Если обращение к дисководу больше не продполагается, то можно просто вызввать подпрограмму.
CALL @#07132
Если двигатель был запущен, он будет остановлен.
Если обращение к дисководу больше не продполагается, то можно просто вызввать подпрограмму.
Код:
CALL @#07132
Нету такого в дизассемблированной версии. Не CALL @#07132, а CALL @7132. Идёт вызов подпрограммы не по адресу 07132, а по адресу, которая находится в ячейке 07132. Туда драйвер дисковода заносит значение 0134454, так что можно и так - CALL @#134454. Но это если контроллер дисковода есть. А если игра запускается с ЖД или грузится через стык С2, и нет контроллера дисковода, то будет TRAP4.
randomizer
21.08.2022, 22:46
Нету такого в дизассемблированной версии.
В дизассемблированной версии ошибка, проверял по коду ПЗУ на реальной машинке.
там JSR PC, @011604(PC), что эквивалентно CALL @#07132
Если контроллера дисковода нет(или загрузка производилась не с дисковода), то по адресу 07132 будет значение 0, а по адресу 0, инструкция RETURN.
JSR PC, @011604(PC), что эквивалентно CALL @#07132
JSR PC, @011604(PC) - 77 режим адресации
CALL @#07132 - 37 режим адресации, так что такая трактовка точно ошибка
В дизассемблированной версии ошибка, проверял по коду ПЗУ на реальной машинке.
там JSR PC, @011604(PC), что эквивалентно CALL @#07132
Ошибок в дизассемблированной версии не может быть, т.к. она потом транслировалась и сверялась с оригиналом.
Ошибка у вас. Разберем.
По адресу 0175322 находится команда 004777 011604. Сразу видим, что метод адресации используется косвенно-относительный с кодом 77, а не обращение к абсолютному адресу с кодом 37. А раз это косвенно-относительный способ адресации, то для получения адреса исполнения команды CALL надо вычислить адрес ячейки с адресом запуска. Для этого сложим значение 011604 с адресом после этого слова 0175326, в итоге и получим 07132.
randomizer
21.08.2022, 23:23
Ошибка у вас. Разберем.
Так и есть, Но тем не менее работало)
Работало, в смысле программа не обрушивалась, а в итоге возвращалась к нормальному выполнению)
- - - Добавлено - - -
В общем отключая прерывания по обратному ходу, нужно выполнить CALL @07132
В общем отключая прерывания по обратному ходу, нужно выполнить CALL @07132
Ну не совсем. Это можно, если адрес вашей программы в ОЗУ ПП заранее известен, и программа так и транслируется. Но в ПП программа может грузится по разным адресам, потому лучше такую комбинацию: CLR R0, CALL @7132(R0).
BlaireCas
22.08.2022, 02:41
Заметил что после запуска игры, так же как и после запуска Krackout и RiverRide, не останавливается двигатель дисковода.
Хм, я не использую в софте ничего из RT-11 после загрузки игрух, но если что-то не так то ну в этой-то игре код на гитхабе, в кракоуте и ривер рейде оно чего-то похожее. Может где-то и накосячил, вот уж не знаю точно. После считывания данных через ЕМТ больше не должно быть никаких обращений к дискам.
Весь код чтения с диска:
READFL: mov #MSG001, MSGADR ; possible error: device error
.fetch #BUF001, #DKN001 ; test device
bcc 10$
return
10$: mov #MSG002, MSGADR ; possible error: channel is active
.looku #AREA01, #7, #DKN001 ; test file, return R0-file size in blocks
bcc 20$
tstb @#52 ; check what error
beq 12$ ; it's channel is active?
mov #MSG003, MSGADR ; file not found
12$: sec
return
20$: ; reading prepare
mov R0, MAXBLK ; file size
clr CURBLK ; block to read
mov #MSG005, MSGADR ; possible error: file read error
mov #176640, R4
mov #176642, R5
40$: ; reading cycle
.readw #AREA01, #7, #BUF002, #256., CURBLK
bcs 90$ ; C=1 is error
tst R0 ; R0=readed words count
beq 50$ ; nothing readed? (eof?)
; readed, data in BUF002
inc CURBLK
mov #BUF002, R0
mov FILNUM, R2
asl R2
call @WRITAB(R2) ; call per-file write proc
cmp CURBLK, MAXBLK
blt 40$
; eof
50$: .close #7
clc ; set no error
return
90$: ; read error
tstb @#52 ; error word addr
beq 50$ ; no error - it's what? eof again?
.close #7
sec
return
На эмуляторе UKNCBTL и правда показывает что мотор дисковода работает. Хм. Интересно конечно. А как его остановить получается тогда? (у меня железка с загрузкой через rs-232 и даже не знаю чего там с дисководом, но видимо это нехорошо)
>Если обращение к дисководу больше не продполагается, то можно просто вызввать подпрограмму.
>Код: CALL @#07132
>Если двигатель был запущен, он будет остановлен.
Это вот в ЦП или в ПП надо вызвать? В ПП наверное да? (блин у меня конечно там сильно портится вся память при загрузке, ну чтож.. работающий мотор дисковода это плохо и так нельзя)
UPD: попробовал и там и сям вызвать, в ПП просто все зависло, в ЦП выдало веселящую надпись ***СТОП*** :) Короче нужны еще способы как остановить мотор у дисковода :)
- - - Добавлено - - -
Ну не совсем. Это можно, если адрес вашей программы в ОЗУ ПП заранее известен, и программа так и транслируется. Но в ПП программа может грузится по разным адресам, потому лучше такую комбинацию: CLR R0, CALL @7132(R0).
А вот это вот в ПП заработало. Я не знаю что оно делает но вроде мотор отключился после загрузки игрухи как показывает UKNCBTL.. Спс Алекс :) Чудеса какие-т, но оно сработало! Алилуйя :) Реально не знаю что сделал код, но мотор он отключил вроде.
(надо будет встроить в ривер рейд и в кракоут если найду уже как их скомпилять)
Получилось как-то так :) Но работает ведь да? У меня нет дисковода, могу только по Никитиному эмулятору смотреть.
; //////////////////////////////////////////////////////////////////////////////
; // PPU second phase prepare
; //////////////////////////////////////////////////////////////////////////////
PPUST2:
CLR R0 ; I dunno what is here? Alex_K said DO THAT
CALL @7132(R0) ; and it's working! stopping FD motor
; set PSW (HP**TNZVC) = 110000000 (HP=11, disable interrupts, halt mode)
mtps #600
; 11 110 001 (all RAM banks of plane 0)
; WARNING !!! We can't read (and bit/tst so on..) from there, but CAN write
Спасибо парни что заметили этот факап!
BlaireCas, вот тут твоя игра попала в обзор про УКНЦ: https://youtu.be/dVenGboVfpE?t=686
BlaireCas
04.09.2022, 12:16
BlaireCas, вот тут твоя игра попала в обзор про УКНЦ: https://youtu.be/dVenGboVfpE?t=686
В каком-то неинтересном виде она туда попала :)
Твой енкаунтер кст тоже попал. Вот он намного полноценнее сделан конеч.
- - - Добавлено - - -
А вообще какие у нас "новодельные" игры (или попытки на них сделаны)
Stop the Express: https://zx-pk.ru/threads/27446-portirovanie-stop-the-express.html
Highway Encounter: https://zx-pk.ru/threads/27621-hwyenc.html (круто кстати, заюзать еще второй проц на звуки и будет "как на спектруме!")
Joe Blade: https://zx-pk.ru/threads/32901-portirovanie-joe-blade-na-uknts.html
Desolate: https://zx-pk.ru/threads/32566-portirovanie-desolate-s-ti-83-plus-na-uknts.html
Lode Runner: https://zx-pk.ru/threads/24886-portirovanie-lode-runner-bk-gt-uknts.html
Last Mission: https://zx-pk.ru/threads/29643-portirovanie-igry-quot-last-mission-quot-na-uknts.html
River Raid: https://zx-pk.ru/threads/32469-river-raid-na-uknts.html
Krakout: https://zx-pk.ru/threads/31397-portirovanie-igry-quot-krakout-quot-na-uknts.html
Возможно что-то еще упустил. Ну что-ж. Лучше чем ничего :)
А вообще какие у нас "новодельные" игры (или попытки на них сделаны)
Descent в этой теме
ChibiAkumas - https://zx-pk.ru/threads/31548-chibiakumas.html
BlaireCas
04.09.2022, 13:11
Descent в этой теме
ChibiAkumas - https://zx-pk.ru/threads/31548-chibiakumas.html
А точно! Слона-то и не заметил.
https://i.imgur.com/C3J0Xea.png
Нужно будет какую-то отдельную тему по новоделу из игорей. Эх сложно без Хобота, за всем не уследишь..
вот тут твоя игра попала в обзор про УКНЦ
там дальше и Highway Encounter есть =))
в целом, выпуск хороший, пусть и с некоторыми неточностями по железу, но представление о компе дает.
BlaireCas
04.09.2022, 15:16
Я вот тут историю в игре нормально придумать не могу. Пока-что (покурив конопли, шутка) история такая.
Лезет какой-то чувак в подземелья. Зачем он лезет - непонятно (вроде и наверху ему хорошо жилось). Видит сны.
Потом находит там похороненную свою сестру. Ну и какая-нибудь тетя-паучиха ему говорит поищи всякую фигню чтобы я тебе отвар сделала и ты память восстановил. Ну а он не помнит типа ничего.
Затем играешь за другого персонажа которого послали собственно их убить, но застрелил он только сеструху этого мол главного героя.
А дальше пока неясно, нафига мол вниз лезть там что фолаут или чет навроде, подземные жители типа сопротивлялись.. вообщем сложнааааа.
Я вот тут историю в игре нормально придумать не могу. Пока-что (покурив конопли, шутка) история такая.
Лезет какой-то чувак в подземелья. Зачем он лезет - непонятно (вроде и наверху ему хорошо жилось). Видит сны.
Потом находит там похороненную свою сестру. Ну и какая-нибудь тетя-паучиха ему говорит поищи всякую фигню чтобы я тебе отвар сделала и ты память восстановил. Ну а он не помнит типа ничего.
Затем играешь за другого персонажа которого послали собственно их убить, но застрелил он только сеструху этого мол главного героя.
А дальше пока неясно, нафига мол вниз лезть там что фолаут или чет навроде, подземные жители типа сопротивлялись.. вообщем сложнааааа.
Неверный концепт. Танцевать надо от того что ты хочешь реализовать.
BlaireCas
09.09.2022, 14:14
Добавил "летучую мышь" (выглядит конечно ужасновато, хомяк с крыльями от бабочки :) .. ахахах.. полдня-ж рисовал
https://i.imgur.com/ZAGoGmg.png
И тут-то тормоза УКНЦ при полноценной работе с маской/буфером/отсутствие прешифта и всеми тремя цветными планами уже начинают сказываться.
Например летает 2 летучих мыши 16х16. И еще герой прыгнул допустим. Получается три спрайта заинвалидировали каждый по 4 тайла буфера вокруг себя в "удачный" момент. Итого 12 кусков буфера (16х16) для восстановления/прорисовки на экран что-то поднапрягли процессоры.
Когда вот пауки бегали/лазили вверх-вниз ровно по границам тайлов - было намного веселей. Пауки-то инвалидировали максимум 2 штуки тайла каждый.
Black Cat / Era CG
09.09.2022, 17:48
Летучка хорошо вышла. Мне нравится.
BlaireCas, а можно посмотреть на код вывода спрайта? Не должно оно тормозить ТАК. БК медленнее, чем даже ПП УКНЦ, а на ней таких проблем нет.
для восстановления/прорисовки на экран что-то поднапрягли процессоры.
Выложи эту версию игры, может эти тормоза редкие или несильные.
Вот ссылка на видео моего рендера. Да, при шаге на соседнюю клетку на мгновение замирает, но там полностью пересчитывается видимость карты и объектов. Можно сделать несколько в фоне, чтобы шаг был мгновенный, но сейчас не до того.
https://youtu.be/ZanlUnj75p0
хомяк с крыльями
Это шикарный хомяк. Тянет на боса. А рядовых мышек можно поменьше, понеприметнее, чтобы они из тайла в тайл порхали.
BlaireCas
09.09.2022, 19:23
код вывода спрайта?
Собственно все на гитхабе есть.
1. Сам спрайт выводится сначала в буфер (по 1-му буферу на каждый цветной план). Вроде ты-ж подсказал юзать ASHC?
2. Затем буферы выводятся на экран (тут тормоза врубаются ибо экранное ОЗУ) я использую дефолтное с записью туда через регистры (уупс.. не отображать-же ВОЗУ в обычную память, эдак никакой памяти не напасешься).
3. Ну затем буферы восстанавливаются тайлами (вроде тут проблем не должно быть)
; plane-1 buffer routine, R0=spr addr, R5=buf addr, R4=height
BufSprite1:
bic #^B1111111111110000, R1 ; X % 16
bne 20$
; zero shift
; R0=spr addr, R5=buf even addr, R4=height
mov #BUFWID, R1
10$: bic (R0)+, (R5) ; mask word
bis (R0)+, (R5) ; color word
inc R0 ; 14T skip plane-2 colors
inc R0 ; 14T
add R1, R5 ; 14T buffer next line
sob R4, 10$ ; 32T|16T
return
; non-zero shift
; R0=spr addr, R5=buf even addr, R4=height
20$: mov (R0)+, R3 ; 32T mask word
clr R2 ; 14T R2:R3 - mask dword
ashc R1, R2 ; 92T (for R1=15) R2:R3 << R1
bic R3, (R5)+ ; 43T apply mask words
bic R2, (R5) ; 43T
dec R5 ; 14T back to previous addr
dec R5 ; 14T
mov (R0)+, R3 ; 32T color word
clr R2 ; 14T R2:R3 - color word
ashc R1, R2 ; 92T (for R1=15) R2,R3 << R1
bis R3, (R5)+ ; 43T apply color words
bis R2, (R5) ; 43T
inc R0 ; 14T skip plane-2 colors
inc R0 ; 14T
add #BUFWID-2, R5 ; 32T
sob R4, 20$ ; 32T|16T
; =568T*16
return
Понятно что на 2-й цветной буфер будет аналогично.
Ну и разумеется там относительно приличный оверхед в обвязке вывода еще мол чтобы не всегда 16px по высоте выводить (спрайт из 2-х пикселей по высоте выведет только 2 строкив цикле да и все)
Периферийный процессор отдельно, но там нечто аналогичное.
Но! Когда буферный план надо вывести на экран - я не могу тупо копировать навроде (R4 адрес буфера, R5 адрес экрана):
10$: mov (R4), (R5)
add R1, R4
add R2, R5
sob R3, 10$
(так-то вот клево-бы было)
Потому-что - у меня адреса экрана выше 200000 :), ну и экран в центральном процессоре там побит на байты (8-пикселе). То-есть приходится поочередно из каждого буфера делать movb по ячейкам 176640 (адрес экранных 8-ми пикселей) 176642 (данные экранных 8-ми пикселей).
; draw 16x16 from buffer to screen, R1-levelX, R2-levelY
Buf2Scr16:
.ppexe #CmdBuf2Scr16
mov #176640, R4
; to screen addr
asl R2
mov LevYScrOfs(R2), R0 ; R0=starting screen line addr
asl R1 ; R1=LevelX*2
add R1, R0 ; R0=scr addr
mov R0, (R4) ; screen addr -> @#176640
; to buffer addr
mov LevYBufOfs(R2), R0
add R1, R0 ; buffer 1 addr -> R0
;
mov #SCRWID-1, R1
; 1st buffer
mov R0, -(SP)
mov (R4), -(SP)
mov #16., R3
mov #176642, R5
10$: movb (R0)+, (R5)
inc (R4)
movb (R0)+, (R5)
add #BUFWID-2, R0
add R1, (R4)
sob R3, 10$
; 2nd buffer
mov (SP)+, (R4)
mov (SP)+, R0
add #VBufferSize, R0
mov #16., R3
inc R5 ; R5=176643
20$: movb (R0)+, (R5)
inc (R4)
movb (R0)+, (R5)
add #BUFWID-2, R0
add R1, (R4)
sob R3, 20$
return
- - - Добавлено - - -
Выложи эту версию игры, может эти тормоза редкие или несильные.
А в первом посте ссыль на гитхаб. Берется оттуда например descnt.dsk - запускается, прописано в автозагрузку.
Ну или то что в /release скопировать куда хочется (на hdd образ например УКНЦ-шный).
Я бы не сказал что тормозит ибо я оставил пока только 1-ну мышь там в одном месте, 1-го паука, самого героя, и подбираемый объект который тоже спрайт. Максимум для 25фпс будет 2 мыши, герой и объект который лежит четко на одном тайле.
(если хочется увидеть мышь - проще в меню нажать вниз-вниз-вверх-вверх-вниз-вверх, затем подобрать лопату, затем нажать К2, затем еще раз нажать К2 (можно подбирать фонарик можно не подбирать), затем еще раз К2, затем еще раз К2 - дальше попытаться вылезти наверх где мыши водятся ибо дебажный режим и ниже еще ничего нет, а то по-нормальному честно можно париться еще мол там проходить, хоть небольшие да все-ж есть подколы для обычного прохождения, а с дебаговым режимом можно переключать "эпизоды")
Ага, спасибо за указание нужных кусков кода. Да, ASHC я вроде действительно сам предлагал. Есть предложения, как сделать повеселее и этот код, там место для оптимизации на мой взгляд есть. Только у меня тут 2 ночи уже, спать совсе пора. Позже.
Но. Даже с вот этим запихиванием видеоданных через бестолковую однобайтовую дырку ... ну не должно оно быть НАСТОЛЬКО медленно. Там случаем не происходит такого, что процедура рисования вызывается несколько раз на кадр? Я как-то сам попал на такое же, из-за немерцающего вывода было непонятно, что лишняя работа делается.
BlaireCas
10.09.2022, 02:46
Но. Даже с вот этим запихиванием видеоданных через бестолковую однобайтовую дырку ... ну не должно оно быть НАСТОЛЬКО медленно.
Ну изначально из-за чего влез в спор с jerri (очень крутой человек, сожрал собаку на графонии, но 8-ми битном) - это вот то что УКНЦ несмотря на кучу памяти (мол да там-же цельных 192Кб! да они зажрались! Saboteur обычный не осилить. А ведь там поездка в "метро" нормас сделана. Фу фуууу... А и Knight Lore написан на 48кб и всем играм даст фору)
Вообщем типа УКНЦ более бестолковый чем БК 0011М. Но что-ж, возможно это даже так. Однако это первый мой комп в котором изучал асм от пдп. Это как первая любовь. В игрухе получилось не прям круто, графоний рисовать страдать и тырить попиксельно с другим мест тоже та еще проблема. Придумывать сюжет вообще атас. (а что рисовать не придумав сюжет? тупо попрыгать мол не свалиться как в montezuma's revenge чтобы (кст очень хорошо сделан на атари, реиграбельно и все такое). Вообщем сложняк поэтому и тянется так долго. Все эти передвижения и прыжки ГГ парился делал чтобы не было совсем ужасно, чтобы не было мол прыгнул вперед и нельзя повернуть назад. Заняло кучу туповатого кода. А то получилась бы иначе игруха от BIL Corp (где он сейчас)
Мне там надо сделать чтобы фантом за тобой ходил и повторял движения, на вид вроде очень просто. Тупо сохряняешь последние 16 фреймов координаты героя и потом прорисовываешь их на втором спрайте. Ну должно как-бы прокатить. Герой ходит по два пикселя за кадр 25фпс и отставание follower-a на два тайла почти будет не так прям ужс выглядеть. Разве-что когда герой(иня) будет стоять на месте тогда второй персонаж тупо подбежит и станет за ней.
А как сделать чтобы например если ГГ прыгнула на другой блок и он за ней прыгал только потом (то-есть ты перепрыгиваешь лужу кислоты, второй герой который за тобой идет стоит думает, прыгать сразу не должен)? Сложна да :(
Кстати у тебя Сандро возможно получилос-бы что-то типа EOB на писишке типа данжен кравлер с а-ля ФПС видом. НО сам знаю что это ужас даже с современными средствами разработки (мало памяти, зажуёт всю сразу)
(очень сумбурно написал, damn that demon alcohol (c) nazareth)
Кстати у тебя Сандро возможно получилос-бы что-то типа EOB на писишке типа данжен кравлер с а-ля ФПС видом. НО сам знаю что это ужас даже с современными средствами разработки (мало памяти, зажуёт всю сразу)
Так я собственно уже год потихоньку пишу и это: https://zx-pk.ru/threads/33655-crawlspsace-psevdo-3d-dvizhok-dlya-poshagovykh-rolevykh-igr.html
Памяти маловато, но хватает пока. На 11М+диск вообще проблем нету, там можно хоть как в TES:Arena мир размером в континент сделать.
Только я хочу не EOB, а хоррор про потерянный в космосе космический корабль с всякой жутью на борту. Типа как System Shock или Dead Space, но только по духу, ни разу не клон. У походовки свои правила и логика, не надо туда клонировать 3D в реальном времени, это не сработает.
BlaireCas
10.09.2022, 16:24
Сделал follower-а на пробу. Ну а что :) Весело "бегает" ахах, аж понравилось.
Разумеется он "ненастоящий", а тупо повторение последних 16-ти координат и анимаций спрайта ну только с другим базовым номером спрайта.
https://i.imgur.com/iYddMHK.gif
То что тут в синем цвете это нормально, так задумано специально.
А в общем случае нормального последователя очень сложно написать, т.к. есть куча ситуаций, когда надо будет с ним разойтись, а места нету. И что делать?
Собственно, я помню только один случай, когда всё нормально сделано. Это принц персидский, а точнее -- спинофф от 2008 года. Вот там Элика проявляет просто-таки невероятные чудеса ловкости, чтобы не мешать нашему анонимному герою. И наоборот, как раз очень даже ему помогает.
Вот я специально нашел демонстрацию акробатики (и это ещё далеко не все, что она может!)
https://youtu.be/-4aqRiK1YsA?t=177
CodeMaster
13.09.2022, 23:25
Я вот тут историю в игре нормально придумать не могу. Пока-что (покурив конопли, шутка) история такая.
Лезет какой-то чувак в подземелья. Зачем он лезет - непонятно (вроде и наверху ему хорошо жилось). Видит сны.
Потом находит там похороненную свою сестру. Ну и какая-нибудь тетя-паучиха ему говорит поищи всякую фигню чтобы я тебе отвар сделала и ты память восстановил. Ну а он не помнит типа ничего.
Затем играешь за другого персонажа которого послали собственно их убить, но застрелил он только сеструху этого мол главного героя.
А дальше пока неясно, нафига мол вниз лезть там что фолаут или чет навроде, подземные жители типа сопротивлялись.. вообщем сложнааааа.
Нинель с группой друзей диггеров узнала о заброшенном подземелье под одним из замков в Трансильвании. Будучи законопослушными гражданами они уведомили местный МЧС о маршруте группы и времени возвращения. Параллельно Нинель переписывалась о планах похода с братом Максом, который обычно был в их группе, но сейчас находился в командировке на алмазных шахтах Якутии. Когда Макс в очередной раз поднялся на поверхность ожидая увидеть от сестры в Телеграм фотоотчет о их походе по подземельям, он увидел только "Нинель был(а) в 08:11". Не на шутку встревожившись Макс написал Нинель, а затем и друзьям из группы. Через час не получив ответа Макс написал в МЧС, откуда получил ответ, что группа не вышла на связь в установленное время, после чего группа спелеологов обыскала подвал заброшенного замка, но не нашли там ни следов группы, ни входа в пещеру. Поняв, что всё очень нехорошо, Макс приостанавливает командировку в ПАО "Алмазы Якутии" и первым рейсом через Москву, затем Турцию отправляется в Трансильванию по координатам 48.535084, 23.495443 которые сообщала Нинель в переписке. Взяв в местной фирме "Шмульц и Ко" необходимую экипировку на прокат, Макс отправился на поиски таинственного подземелья... Covfefe
Дальше продолжать?
Дальше продолжать?
Ага =)
CodeMaster
17.09.2022, 07:54
Столкнулся с таким моментом: надо описать некоторые вещи, например почему никто не могу найти вход в подземелье. Хочется придумать нечто небанальное, но 1) не уверен, что это возможно реализовать 2) будет ли коде вообще придерживаться сценария. Т.е. вопрос в том: спойлерить ли квесты или нет? Хотелось бы услышать мнение и начальника транспортного цеха BlaireCas, тоже.
BlaireCas
17.09.2022, 12:30
Господа, я-ж прикалываюсь. Ну некое подобие сюжета там уже имеется даже (поиграть вполне уже можно хотя и называется демо).
Правда в игрухе сделано лишь штук 15 экранов и а-ля "первый эпизод". А вся карта 64 экрана.
Учитывая что один тайл или спрайт я рисую по полдня и то когда настроение есть - сколько дальше делать еще - уму непостижимо.
Это проблема программистов - сначала делается некое подобие движка, а когда дело доходит до серьезной работы с его наполнением - ууух, тут-то включается лень и прочее. Хорошо вот когда портируешь что-то - там сразу уже всё готовое есть, а когда нечто свое собственное делаешь - э... запала хватит вот ну на движок да.
Это проблема программистов - сначала делается некое подобие движка, а когда дело доходит до серьезной работы с его наполнением - ууух, тут-то включается лень и прочее. Хорошо вот когда портируешь что-то - там сразу уже всё готовое есть, а когда нечто свое собственное делаешь - э... запала хватит вот ну на движок да.
То же самое с портированием, уж поверь. В убийственном режиме почти без сна делаешь адаптацию до уровня, когда уже всё более-менее шевелится, сам удивляешься такому результату за такое короткое время. А потом запал куда-то пропадает и надо уже себя заставлять хоть что-то доделать.
То же самое с портированием, уж поверь.
Наверное, это связано с тем, что основным двигателем и интересом является только определенная часть задачи. Например, написать движок, чтобы он был быстрым. А все остальное, идущее прицепом, уже так не мотивирует и напоминает скучное перекладывание листочков в бухгалтерии)
potetino
20.09.2022, 22:27
Игра отличная, сейчас включил на железке цвета отличные прорисовка тоже, это наверно лучшая игра на сегодня на УКНЦ, делайте дальше не бросайте проект.
вот когда портируешь что-то - там сразу уже всё готовое есть
Запал давно уже кончился :( Пытаюсь заставить себя допилить LastMission.
Вопрос: В чем ты редактировал звуковые эффекты или они у тебя процедурные?
CodeMaster
21.09.2022, 08:18
Запал давно уже кончился Пытаюсь заставить себя допилить LastMission.
Может такие проекты стоит делать open source? Глядишь то там сто грамм, то тут сто грамм и проект допилили общими усилиями?
Может такие проекты стоит делать open source? Глядишь то там сто грамм, то тут сто грамм и проект допилили общими усилиями?
По наблюдениям - не законченный проект редко доводит до ума неавтор.
И так же по наблюдениям - такие не законченные проекты неавтор часто переписывает чуть больше, чем полностью.
А сто грамм только затушат так и не загоревшися костер.
CodeMaster
21.09.2022, 09:04
А сто грамм только затушат так и не загоревшися костер.
Я скорее про то, что изначально в open source. Тут было несколько проектов, когда люди успешно писали при помощи и с подсказками корифеев. Были, правда и неудачные примеры. Это наверное зависит от характера пишущего...
изначально в open source
Да, с этим немного лучше.
Это наверное зависит от характера пишущего
Свои проекты (то есть - для себя, любимого) - целиком от характера пишушего.
Проекты, которые нужны кому-то, но пишет не он - в большей степени от характера нуждающегося и его умения матевировать (именно с А :) )
BlaireCas
22.09.2022, 15:03
Заодно сюда напишу как тут сделана примитивная музыка и звук:
Хорошая статья кстати: https://www.gamejournal.it/the-sound-of-1-bit-technical-constraint-as-a-driver-for-musical-creativity-on-the-48k-sinclair-zx-spectrum/
Собственно в УКНЦ как и на спеке и прочих биперных компах звуки извлекаются переключением 1/0 в регистре бипера (хотя есть и другие способы, но ну их в баню, будем придерживаться стандартов - 1/0 и все тут :)
Регистр в периферийном (!) процессоре @#177716
Чтобы туда послать бит 1 в динамик надо сделать mov #200, @#177716 (а нефиг париться с bis/bic - поверьте прокатит и так, mov быстрее, а другие биты в этом регистре нам не нужны, пусть будут нулями и зшб)
Чтобы послать 0 в динамик соответственно clr @#177716
Итого весь звук состоит из переключений 1/0 в определенной последовательности.
Можно заюзать ВЕСЬ периферийный проц чтобы издавать звуки (ведь у нас фактически два компа в одном, но блин периферийный проц нужен чтобы рисовать в "синий" план видеопамяти поэтому ну нафиг его полностью юзать под звук)
И тут ведь в УКНЦ в периферийном проце есть таймер который может генерить прерывания по заданной длительности. Вся идея музыки тупо переключать 1/0 и менять длительности этого переключения.
Сначала инициализируем (отключаем) таймер:
; pp timer ready wait
PptIni: clr @#177710
tst @#177714
tst @#177710
bne PPTINI
return
Затем его надо включить будет однажды (при звучании эффекта или очередной ноте музыки)
10$: clr @#177716 ; low signal to speaker
mov #SndIntHi, @#304 ; set next sound interrupt to high signal proc
mov SndLLo, @#177712 ; low signal duration
30$: tst @#177714
tst @#177714
bis #^B01000101, @#177710 ; allow int, start, timer = 8mks
99$: mtps #0
Срабатывает прерывание например по вектору таймера 304 - вот обработчик бита 1
SndIntHi:
mov #200, @#177716 ; set high level
mov #SndIntLo, @#304 ; next interrupt addr - set to low tick
mov SndLHi, @#177712
tst @#177714
tst @#177714
rti
Тут-же устанавливается вектор прерывания на другой адрес (а там включится бит 0), заносится длительность бита 1 в таймер 177712 и два раза считывается регистр 177714 чтобы подтвердить изменение таймера (поверьте - это для надежности! я сам не знаю зачем ДВА раза считывать регистр, вроде одного должно хватать, но так надо и все тут)
Для одноголосной музыки все банально. Делаем "ровные" переключения 1/0, но для более комфортного звучания лучше сразу менять duty у сигнала и например уменьшать таймер переключения динамика в 1 на скажем некоторую величину, а таймер переключения в 0 соответственно увеличивать. Получится более весело.
-- тут сообщение из лички с S_V_B ---
За саму идею я взял спектрумовский BeepFX (редактор под винду конечно). Под мои звуки там надо параметры пересчитывать будет.
Сам его код на прерываниях УКНЦ реализовать разумеется нет воозможности. Он там написан под 100% зажирания процессора, а у меня на прерываниях таймера.
Смысл такой. Есть N "фреймов" звука. (это не экранные фреймы, просто цикл)
Есть изначальные параметры "длительность циклов переключения 1/0 во фрейме, длительность 1 в динамике, длительность 0 в динамике"
Также есть дополнительные параметры при смене фрейма мол изменить длительность переключения 1/0, изменить длительность 1, изменить длительность 0"
Врубилось прерывание от таймера 4мкс допустим. Врубаешь 1 в динамике, ставишь длительность 1 в таймер, переставляешь вектор прерывания на другой где будет дальше 0 идти.
Врубилось очередное прерывание, там ставишь 0, ставишь длительность нуля в таймер. Проверяешь что не закончилась длительность локального переключения 1/0
Если закончилась - пошел новый фрейм. Добавляешь к длительностям всем некие числа которые прописаны и по-новой.
Минусы такие что чаще чем сколько-то циклов процессора - прерывания не обслужишь и есть некий минимум на длительности 1/0
Код сам собственно имеется в том-же descent на гитхабе в файле descnt_ppu.mac по метке SNDSTA: но там разбираться долго. Итого весь эффект описывается такими например вещами:
SND005:
.word SND_TONE ; звук (еще есть пауза например и должен быть шум)
.word 04 ; четыре "фрейма"
.word 8*256 ; тут используется только старший байт - 8 циклов смены 1/0 изначально
.word 2*256 ; при смене "фрейма" добавить это к предыдущему мол каждый фрейм длительность смены 1/0 общая будет увеличиваться на 2
.word 124, -20 ; 124 тика таймера для 1 в динамике и каждый фрейм уменьшаем на 20
.word 114, -18 ; 114 тика таймера для 0 в динамике и каждый фрейм уменьшаем на 18 (теперь понятно зачем прибавлять к длительности фрейма 2 чтобы не терять в общей длительности)
.word 0 ; конец хорош звучать
---
Еще можно добавить что таймер в счетчик который пишется 177712 юзает только 12 бит, и не байт и не слово но как сделали так сделали
BeepFX экспортирует в удобоваримый для нас формат который потом можно скриптом причесать?
BlaireCas
22.09.2022, 15:18
экспортирует в удобоваримый для нас формат который потом можно скриптом причесать?
Нет к сожалению, но он оперирует похожими вещами. Мол частота переключения 0/1, duty у 1, их изменение каждый фрейм. На прерывания придется разумеется пересчитывать его числа. А полностью отдавать проц на звук нууууу.. неохота, он еще и клаву обслуживает и рисовать только он умеет в "синем" цвете.
Там поэкспериментируй в винде - поймешь кст :)
Будем копать :)
Мне звук лифта нарыть нужно.
- - - Добавлено - - -
Я в ПП только лабиринт рисую (статику), спрайты скорости не хватает.
randomizer
22.09.2022, 22:36
Есть ещё вариант использовать AY-3-8910, чтобы не грузить ПП, да и музыку можно проигрывать)
https://github.com/aberranthacker/aberrant_sound_module
Для пробы в своё время заказал три платы, сначала хотел вообще одну, но человек который делал разводку, настоял чтобы я заказал как минимум три, на случай производственных дефектов.
В общем есть ещё две платы, планировал предложить устройство тем кто разрабатывает игры.
Только на какое-то время отошёл от все этой темы.
Но сейчас, если есть интерес, готов передать эти две платы, в том числе и со смонтированными компонентами. Чтобы в играх начала появляться поддержка)
- - - Добавлено - - -
Или отнесу в Яндекс музей)
Есть ещё вариант использовать AY-3-8910, чтобы не грузить ПП, да и музыку можно проигрывать)
https://github.com/aberranthacker/aberrant_sound_module
Для пробы в своё время заказал три платы, сначала хотел вообще одну, но человек который делал разводку, настоял чтобы я заказал как минимум три, на случай производственных дефектов.
В общем есть ещё две платы, планировал предложить устройство тем кто разрабатывает игры.
Только на какое-то время отошёл от все этой темы.
Но сейчас, если есть интерес, готов передать эти две платы, в том числе и со смонтированными компонентами. Чтобы в играх начала появляться поддержка)
- - - Добавлено - - -
Или отнесу в Яндекс музей)
1. Мало у кого будет карточка.
2. Нет стандарта подключения (я например цеплял AY через ИРПР).
- - - Добавлено - - -
P.S.
Если бы была поддержка в эмуляторах.. тогда имеет смысл.
randomizer
23.09.2022, 09:36
Если бы была поддержка в эмуляторах.. тогда имеет смысл.
Не сказал бы, что отсутствие поддержки в эмуляторах как то мешает.
Наоборот приятней на реальной машинке играть, со звуком и музыкой.
Да и когда проигрыватель портировал, это тоже никак не мешало.
Для Союз-Неона например, нет эмулятора с отладчиком, но всё равно что-то пишут под него.
А здесь же, есть необходимые инструменты.
Ну да ладно, пока буду оставаться единственным обладателем уникального устройства :)
Ну да ладно, пока буду оставаться единственным обладателем уникального устройства
И единственным потенциальным слушателем. Я тоже единственный обладатель AY на ИРПР, это же не означает, что кто-то кроме меня будет под него писать. (а кроме меня он нафиг никому не нужен).
Если бы была поддержка в эмуляторах то любой мог бы заценить твои усилия.
Мало у когоНет стандарта подключения (я например цеплял AY через ИРПР)
Странно, раньше читал про AY на УКНЦ, неужели это единичные кустарные прецеденты?
А на какой советский комп с завода ставили?
На БКшке тоже кустарщина но сообщество на порядок больше (т.к. УКНЦ не бытовая машинка, а в школе вряд ли с паяльником тебе бы дали в нее залезть).
BlaireCas
23.09.2022, 13:28
Странно, раньше читал про AY на УКНЦ, неужели это единичные кустарные прецеденты?
Есть подозрение что УКНЦ в своей массе не было "домашним" компом. Стояли в школах, где-то еще. Они были дороговаты по сравнению с БК, а там уже и спек появлялся. Может один-два кустаря что-то делали для себя, но каким-то единым "стандартом" это не было. Как показатель - я не видел еще игры с AY тех времен.
- - - Добавлено - - -
Есть ещё вариант использовать AY-3-8910, чтобы не грузить ПП, да и музыку можно проигрывать)
https://github.com/aberranthacker/aberrant_sound_module
Довольно круто выглядит. Три AY-шки? Серьезно? :) Огогогого.
Но боюсь увы, на УКНЦ мало кто чего пишет и все сложно с ней. Вот тут был в этом разделе человек который "открыл" что в ней два процессора и .. и видимо немного офигел от того как все неудобно сделано, что видеопамять "где-то там", что несмотря на 192кб ОЗУ еще попробуй с ней нормально поработай (никак нормально).
randomizer
23.09.2022, 13:38
Как показатель - я не видел еще игры с AY тех времен.
Разве это препятствует тому чтобы использовать AY сейчас?
Всего несколько человек делают игры для УКНЦ.
Я тоже подключал AY к ИРПР, пришлось даже заменить ВВ55 для этого, у нее одна линия оказалась не рабочей.
Не удобно, не красиво, лежит уже не помню где, но работало.
- - - Добавлено - - -
Вот тут был в этом разделе человек который "открыл" что в ней два процессора и .. и видимо немного офигел от того как все неудобно сделано
Местами неудобно, привыкать нужно.
А местами очень даже, послал байт ПП, и он что-то там делает, позволяя ЦП делать что-то ещё.
Хотя, если бы решил не ограничиваться четырьмя цветами, а использовать все восемь. Тоже сложностей было бы поболе.
Есть подозрение что УКНЦ в своей массе не было "домашним" компом.
Насколько я помню, он стоил достаточно прилично, но когда он появился у нас в Саратове в продаже (магазин Электроника) - я мог позволить себе его купить (но и зарабатывал я тогда достаточно прилично), причём сразу взял там же и парный флоповод - то есть, судя по всему - цена не была запредельной. И это был третий мой домашний комп (Микроша, БК-0010-01).
Увы.. из этой тройки ни один не сохранился.. Микрошу и БК продал (уже после покупки БК), а УК-НЦ успешно (случайно) спалил отец (так и не восстановил тогда - а потом появился Квант-4С) . А потом, когда квартиру родителей разбирали - не успел сестру предупредить и его сдали куда-то в приёмку...
Насколько я помню, он стоил достаточно прилично
1200р стоил vs 650 БК, для народа выбор был очевиден.
для народа выбор был очевиден
Народ народу рознь. Для меня тоже выбор был очевиден.
Ну и УК-НЦ (по крайне мере у нас) появился уже тогда, когда рубль стал стоить дешевле (возможность заработать стала больше) против БК, когда он был дороже, так что прямой сравнение не корректно. К сожалению, не помню - во сколько он мне обошёлся, но то, что купил одновременно УК-НЦ и накопители на флопах (их купил немного раньше) - что то, но говорит.
BlaireCas
23.09.2022, 14:09
причём сразу взял там же и парный флоповод
Ну вот это говорит уже о том что видимо было довольно поздновато когда уже и IBMки полезли всякие. Ну скажем год 92-й уже после развала СССР.
Так-то взять УКНЦ + 2 дисковода было рили неподъемно никак. А без дисководов от нее считай не было проку в отличие от БК или спека.
Народ народу рознь. Для меня тоже выбор был очевиден.
Это как раз подтверждает правило, не все были такие продвинутые и богатые. Когда будущий программист упрашивал папу купить комп, папа покупал БК.
Когда у нас появились БК в магазине электроника год наверное 88 (я был в 7м классе) родители очень прохладно отнеслись к моей мечте. Пришлось барыжить ТДКСами (покупать в Сибе продавать в УК).
И как я сейчас вижу я ничего не потерял, купив БК, а не УКНЦ.
BlaireCas
23.09.2022, 14:33
ничего не потерял, купив БК, а не УКНЦ
Если 0011М то она да, даже поинтереснее и попроще была. Опять-же можно было магнитофоном обойтись легко. На УКНЦ в те годы вообще никто не знал что ее можно к мафону подключать. В школах локалка была. В учереждениях от университетов куда на практику ходили были уже с дисководами.
Спек так вообще в те годы впрочем нишу очень быстро позанимал.
А из наших компов вот с интересом про Вектор-06Ц читаю. Прикольно, такой довольно неплохой комп-же был. Только видимо опять-же в те годы без ПО. А так очень зачетен даже. Пусть и не спек, но все-ж.
у скажем год 92-й уже после развала СССР.
В паспорте на блок питания дата изгоготвления - 91.02. Насколько я помню - когда покупал - был снег, то есть врят ли это дальше середины марта.
Так-то взять УКНЦ + 2 дисковода было рили неподъемно никак.
Это было первое появление УК-НЦ в Саратове, так что.. Сколько оно там стояли при покупке с завода и за безнал - не скажу.
91 год - мне было 25 и я зарабатывал столько, что - а) мне не надо было клянчить у родителей и б) я мог просто пойти и купить
- - - Добавлено - - -
На УКНЦ в те годы вообще никто не знал что ее можно к мафону подключать.
То есть почитать документацию - ну вот просто ну никак, да? Я с самого начал знал и вроде как даже попробовал, но мне это дело не нравилось уже на Микроше, так что максимум - попробовал. Но раз можно было пользоваться магнитофоном на Микроше и БК - что мешало на УК-НЦ? Ну умение читать документацию?
- - - Добавлено - - -
Если восстанавливать хронологию (примерно, по памяти)
1987.09-1988.04 - Кустовой ВЦ Саратовавтотранса. Где то в этот период купил Микрошу - помню, потому что напаивал ещё микросхемы ОЗУ поверх распаянных - дома с ходу не получилось (плохо залудил ножки впаянных) - а что бы очистить плату от канифоли - таскал на работу - там спирта было - улейся. Скорее всего - где то зимой
1988.04-1990.10 - СП ВТИ (С - это Саратовское, а не совместное :) ) в этот период был куплен БК - так как в сентябре 90-ого поступил на мехмат саратовского универа - и чего то для него я успел посчитать на БК, а так же потому, что Микрошу и БК я продал потом одному знакомому с этой работы. Причем - не сильно после октября 90-ого - я с ним не долго контачил - он был из Энгельса и видились мы с ним сначала на работе, а потом я один проект сделал через его кооператив - написал эмулятор VT-52 для Агата (они Агаты продали какой-то кафедре на универа вместо терминалов - и за эту работу мне тогда выплатили штуку).
1991.02 - дата в паспорте на блок питания - сильно похоже на то, что близко к дате покупки УК-НЦ, потому как БК я мог продать ТОЛЬКО после того, как у меня появилась УК-НЦ - и сильно много не могло пройти с момента увольнения с СП ВТИ.
Так что - дата покупки - сто процентно весна 91-ого, и в БОЛЬШОЙ вероятностью (погода) - конец февраля 91-ого.
Ну и ещё из занимательного - в кустовом ВЦ через полгода работы меня перевели на должность инженера - без высшего - то есть на тот момент я начал получать 150 р в месяц. В СП ВТИ - сразу инженер и 150 р.
BlaireCas
23.09.2022, 15:25
1991.02 - дата в паспорте на блок питания - сильно похоже на то, что близко к дате покупки УК-НЦ
С дисководами двумя она за 2 штуки по тем деньгам наверняка была. Это СЛИШКОМ уже было даже для работающего. Причем работающего недавно.
Но вообщем смысл-то понятен. У нас БКшки были более распространены. Под них и статьи писались и газеты выходили. УКНЦ это некоторая "вещь в себе" была. То что тебе повезло - ну клево, многие брали спек или БК. Банально дешево и кассеты с софтом в ларьках. У друзей у всех были либо спеки либо БКшки. А какие-то единичные случаи УКНЦ с дисководами в личное пользование они нонфактор. (ИМХО конечно)
Для Союз-Неона например, нет эмулятора с отладчиком, но всё равно что-то пишут под него.
Эмулятор есть.
И даже с каким-никаким кривеньким отладчиком консольным.
С дисководами двумя она за 2 штуки по тем деньгам наверняка была. Это СЛИШКОМ уже было даже для работающего. Причем работающего недавн
Я даже примерно не помню, сколько во сколько оно тогда мне обошлось.
А насчёт работающего недавно - я уже тогда (спасибо тебе, химфак МГУ :):) ) был с компами даже на ТЫ, а.. даже не знаю - как это назвать :) Так что, в КВУ, увидев СМ-2М первый раз в жизни - уже через пару недель, когда была какая-то проблема с программированием - звали меня :) И зарплату со второго месяца сделали надбавкой 130, если не ошибаюсь. Ддолжность, правдда, так и не поменяли, пока не узнали, что собираюсь уйти - но через два месяца я таки ушел - ибо в СП ВТИ стояла СМ-1600 - кто ж против PDP-11 то попрёт :)
randomizer
23.09.2022, 16:05
И даже с каким-никаким кривеньким отладчиком консольным.
Личного опыта на эту тему у меня нет.
Manwe, на докладе посвящённом Неону говорил, что отладчика нет.
Приходится использовать тот что в эмуляторе БК, и потом переносить уже отлаженный код в программу для Неона.
CodeMaster
23.09.2022, 16:51
но через два месяца я таки ушел - ибо в СП ВТИ стояла СМ-1600 - кто ж против PDP-11 то попрёт
Как-то далеко вас от игры унесло потоком воспоминаний.
Manwe, на докладе посвящённом Неону говорил, что отладчика нет.
Приходится использовать тот что в эмуляторе БК, и потом переносить уже отлаженный код в программу для Неона.
Это все равно, что Рабинович напел песню Билз)
Я же автор эмулятора, и я знаю, что он там есть, хоть и примитивный)
- - - Добавлено - - -
Что это за доклад, где его посмотреть или почитать?
randomizer
23.09.2022, 17:05
Что это за доклад, где его посмотреть или почитать?
"Демодуляция", в прошлое воскресенье. Видео докладов ещё не выложили.
"Демодуляция", в прошлое воскресенье. Видео докладов ещё не выложили.
Т.е. это можно было посмотреть только в прямом эфире?
randomizer
23.09.2022, 20:40
Т.е. это можно было посмотреть только в прямом эфире?
Только в живую, онлайн трансляции не было. Но всё снимали, со временем выложат видео.
Manwe, на докладе посвящённом Неону говорил, что отладчика нет.
Вы больше его слушайте, он мноооого чего расскажет, например что НЦ-8010 и БК-0010 это один и тот же комп.
А потом такие "доклады" в сети висят, и все их воспринимают как истину в последней инстанции - что вы, это же на самом фестивале зачитали!
Я уж не говорю про ситуацию на форуме в начале прошлого года, удивлён как его тогда не забанили.
Вы больше его слушайте, он мноооого чего расскажет, например что НЦ-8010 и БК-0010 это один и тот же комп.
А потом такие "доклады" в сети висят, и все их воспринимают как истину в последней инстанции - что вы, это же на самом фестивале зачитали!
Я уж не говорю про ситуацию на форуме в начале прошлого года, удивлён как его тогда не забанили.
Хотелось бы, без шуток, ваши исследования в форме доклада.
Ну чтобы было больше источников информации. С БК-подобными вообще с информацией не очень.
Наткнулся на спектрумовскую игрушку, смахивает по оформлению и геймплею на сабж. Не настаиваю, но можно потырить что-нибудь оттуда =))
https://www.youtube.com/watch?v=C_8-nL3xTrY
Автор же сказал, что тырить не в его планах и портировать тоже.. Это уже другой уровень дзена.. Но хватит ли сил на все вот вопрос. Время не важно..важен процесс..
- - - Добавлено - - -
Тоже мысли сделать нелинейную бродилку.. Но хотя бы запихнуть ее в 32мб... Но это уже под Неон.. Драйвер уже написал, скрипт лэнгвидж на подходе..., последние восемь лет займет сюжет и юзабилити.
Вы больше его слушайте, он мноооого чего расскажет, например что НЦ-8010 и БК-0010 это один и тот же комп.Во-первых, я нигде ни разу не говорил, что "НЦ-8010 и БК-0010 это один и тот же комп" – зачем вы обманываете людей в Интернете? Максимум, что я говорил на эту тему – что НЦ-8010 и БК-0001 это, ВОЗМОЖНО, один и тот же комп, и то по неофициальной нумерации.
Во-вторых, когда я говорил, что отладчика под Союз-Неон нет, вам надо было слушать контекст. Чуть ранее в той же лекции я показывал многозадачную систему и рассказывал какие процессы запущены, в том числе назвал и отладчик! Поэтому, пожалуйста, послушайте внимательно, что имелось в виду в контексте: так называемые отладчики (что на железном Союз-Неоне, что в эмуляторе) не отвечают современным стандартам и не идут ни в какое сравнение со средствами, которыми пользуются люди при программировании для БК 0010. В эмуляторе БК от Gid действительно отличный отладчик. Прекрасный инструмент. Ничего подобного для Союз-Неона нет.
Это все равно, что Рабинович напел песню Билз). Я же автор эмулятора, и я знаю, что он там есть, хоть и примитивный)Дорогой друг, если бы ты выложил исходники, отладчик был бы уже не примитивный и мы им пользовались бы, всем на радость!
А потом такие "доклады" в сети висят, и все их воспринимают как истину в последней инстанции - что вы, это же на самом фестивале зачитали!В этом докладе говорится, что с 90-ых годов для Союз-Неона не написано новых программ, кроме тех, что показаны на слайде. Через пару лет эта информация устареет (появятся новые программы). А доклад по-прежнему останется на youtube. У вас от этого сильно пригорать будет? Напишете в youtube и Спортлото с требованием удалить ролик? Закон о клевете или о фейках потребуете применить?.. Мне трудно поверить, что некто может придираться к подобной ерунде.
Я уж не говорю про ситуацию на форуме в начале прошлого года, удивлён как его тогда не забанили.Кого и за что должны были забанить?
Дорогой друг, если бы ты выложил исходники, отладчик был бы уже не примитивный и мы им пользовались бы, всем на радость!
К сожалению старый движок всего эмулятора я расформировал, и зимой было начал делать новый, но случилось немирное время, новые обстоятельства, и пока это подвисло в воздухе.
BlaireCas
05.10.2022, 18:57
Автор же сказал, что тырить не в его планах и портировать тоже..
Эт точно. Хотелось сделать что-то свое в кои-то веки. Вроде для начала и так неплохо получилось.
Ютуб не снимал (кстати надо будет сделать однажды, снять с живой техники, нечем телефон закрепить лол, ну можт чего придумаю), но вроде там все окей для первого "эпизода".
А когда дальнейшее будет пока неясно, автор подлежит некоей ситуации с похождениями в войсках РФ (ну понятно что если неповезет) и как-то даже не знаешь тут чего придумывать дальше и что рисовать :) Ну да ладно.
Главное пример для других - почему-бы и нет.
УКНЦ вполне тянет мелкие такие игрушки если не очень увлекаться кучей спрайтов и прочего. Да и вон большие спрайты судя по Chibi Akumas тоже вполне хорошо выглядит даже.
Случайно обнаружил, что игрушка-то уже играбельная.
Очень классно и динамично сделано.
Дошел до темноты с фонариком и убился о паука)
Жалко, нет нескольких жизней, слишком легко откинуть лопату)
BlaireCas
15.07.2023, 06:20
Жалко, нет нескольких жизней
Нажать (в стартовом меню) "вниз вниз вверх вверх вниз вверх" :) Появятся дебаговые циферки и будет бессмертие.
А так да, экранов 12 вроде сделано и .. больше ничего
Возможно станет интересно когда дойдешь до "воспоминаний" где надо девочкой бегать и парень будет бегать за ней, сделано туповато, но мне этот "эпизод" нравится как он за тобой бегает и прыгает (тупо по твоим координатам конечно, но.. прикольно получилось). Правда дальше уровни не делал и вообщем надоело увы. Слишком долгий проект получился, нехватило энтузиазма дальше рисовать уровни.
- - - Добавлено - - -
Дошел до темноты с фонариком
Фонарик предполагается "использовать" стоя на самой крайней клетке (паук специально не подходит к крайней клетке, то-есть там безопасно стоять).
А так фонарик освещает на несколько клеток и как-бы была мысль чтобы фонари не тратить в "темных" комнатах (но для этого надо знать собственно эти темные комнаты) и под конец самой игры с ними можно было-бы пройти кое-куда.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot