Все о БК ДВК УКНЦ VAX Alpha
Архив ПО для ретрокомпьютеров
предоставляю бесплатный хостинг на PDP-11.RU для проектов о ретрокомпьютерах
У z80, да и у 8086 можно непосредственно модифицировать оба байта в слове, обращаясь к каждому из них как к отдельному регистру.
А на PDP-11, чтобы изменить байт в регистре, при этом оставив старший байт неизменным, необходимо использовать пару команд
Так же необходимо выполнять команду SWAB чтобы получить доступ ко второму байту. И отлеживать где какой байт внутри регистра.Код:CLRB Rd BISB (Rs)+,Rd
Помимо оверхеда, это еще и не очень удобно.
Добавляет неудобства ещё то, что в оригинале ChibiAkumas очень много самомодифицируещегося кода.
Речь не о недостатках и преимуществах, а просто о том, насколько просто транслировать код одного процессора, в код другого.
Oleg N. Cher(31.03.2020)
теперь понятно. просто не надо "транслировать" - надо писать исходя из ассемблера PDP-11.
я хорошо помню как я писал под x86 и переплевался от его убогости после PDP-11 тк мышление заточено под 16-ти разрядный процессор и его возможности.
а вот если привыкнуть и осознать возможности - продукт будет получаться качественнее и легче ибо не будет натягивания совы на глобус.
Все о БК ДВК УКНЦ VAX Alpha
Архив ПО для ретрокомпьютеров
предоставляю бесплатный хостинг на PDP-11.RU для проектов о ретрокомпьютерах
Согласен на 100% с SuperMax.
Плевался точно так же на x86...
Код PDP-11 намного компактнее выходит.
А уж что касается операционок на х86, так что-то подобное RSX-11 появилось как WIN NT и OS/2...
Короче, я разбаловался на PDP-11![]()
Последний раз редактировалось Alex; 30.03.2020 в 17:35.
Ну, как повелось, те кто знают как надо, не особо что-то делают
А я в свое время загорелся повторить опыт Никиты по переносу игры со Спектрума на УКНЦ.
Выбрал только Amstrad CPC, т.к. там есть четырехцветный видеорежим и конечно игры под него.
Правда на ассемблере до этого не писал. Поэтому не было ни привычек, ни предпочтений.
Изучал ассемблер сразу для двух разных процессоров. А потом читал на одном, писал на другом.
То как надо, уже в процессе стало яснее ясного.
И целом да, для PDP-11 код получается лаконичней. Но при работе с данными побайтово, появляются исключения.
nzeemin(30.03.2020), Oleg N. Cher(31.03.2020)
С байтами надо правильно работать. Понимать, что алгоритм работы с байтом - затратен. Проще работать с последовательностью байтов в памяти, а регистр с хранением двух байт - нереален. Правильно один регистр в качестве указателя байтового, на объект второй как собственно аккумулятор для требуемых действий. И сразу не нужны никакие битовые операции для работыХотя самый правильный способ, продумать алгоритм таким образом, чтобы работа именно с байтами была минимизирована. Стараться работать со словами. Всё будет сильно быстрее. Одна словная пересылка будет более чем в два раза шустрее, чем две байтовых ... На сколько именно - вопрос сложный. Зависит от конкретной модели процессора. Конечно, в алгоритм придётся изменения вносить
![]()
randomizer(24.07.2022)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Прошло каких то пару лет, и большая часть движка игры реализована)
демо с первым уровнем
Управление курсорными клавишами, и УПР - смартбомба, F и Y стрельба.
Помню что выбирал клавиши так, чтобы из коды отпускания не пересекались.
Звук только на AY, используются два чипа, один для музыки, второй для звуковых эффектов.
Но в этой сборке отправка данный на AY выключена.
Только сейчас подумал, что можно же было автообнаружение звуковой платы сделать
Движок игры получился 6Кб, прям идельно помещается в области памяти выше 56К.
Пробовал его туда переместить, сразу заметно так игра ускоряется. Так что очень сложно играть становится.
Замерял сколько времени требуется чтобы пролистать весь уровень, получилось что с движком в доп. памяти, уровень прокручивается на 30% быстрее.
Большой соблазн его там и оставить. Сразу память появляется под второй кадр для всех спрайтов, да и маска для затирания фона влезет)
Но в эмуляторе нет поддержки доп. памяти.
Кстати, толи это проблема QT версии эмулятора (на другой не проверял), толи ещё что.
Когда удерживаешь клавишу, примерно через секунду регистрируется её отпускание, хотя она по прежнему нажата.
На реальном машине всё четко работает.
И опять же, только в эмуляторе, бывает что возникает ошибка загрузка данных с диска с кодом
102 "Не найден сектор с заданным номером"
Причём чтобы убрать эту ошибку, достаточно увеличить размер блока данных на одно слово.
При этом количество занимаемых блоком данных секторов не меняется.
Да, и чтобы убрать эту ошибку, я увеличиваю размер на одно слово не загружаемого блока данных, а того, который загружается перед ним.
Т.е. сначала загружается движок игры, а потом сразу же за ним уровень игры.
Эта ошибка возникает при загрузке уровня, а чтобы её убрать, увеличиваю размер движка на одно слово.
А на реальной машине всё норм.
aberrant_hacker
nzeemin(17.07.2022), Oleg N. Cher(19.07.2022), SuperMax(18.07.2022)
Так она прекрасно рабоет в эмуляторе, для ознакомления)
![]()
![]()
А если интересно как она работает на реальном железе с движком в доп. памяти, то вот.
aberrant_hacker
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)