Вход

Просмотр полной версии : Внутренности программ



ivagor
01.05.2019, 18:59
В этой теме предлагаю делиться информацией о сабже.

Для затравки пара слов про игрушку Arkanoid (http://www.sensi.org/scalar/ware/161/). Под влиянием океанских упражнений tnt23 решил посмотреть некоторые моменты в векторовском арканоиде (сразу скажу, что имхо Кираш (http://www.sensi.org/scalar/ware/162/) круче, хотя и там не идеально).
Плюс этого арканоида (на мой субъективный взгляд) - позаимствованные в писишном попкорне элементы графики (кирпичи, рамки игрового поля, ракетка). Также мне нравится постепенное пропадание кирпичей.
Огромный минус, сводящий интерес к минимуму - отсутствие бонусов.
Вывод движущихся элементов графики (ракетка и мячик/шарик) ужасный. Сдвиг в нужную позицию по горизонтали (с точностью до пикселя) на ходу. Вывод/стирание по xor. Учета луча нет, поэтому можно легко видеть ненужное "переливание" цветов при перемещении.
Уровней 22. Каждый уровень ШxВ=10x13. При таких размерах уровней их скорее всего рисовали авторы, т.к. портировать их с таким размером вроде неоткуда.
Что меня особенно удивило - это стиль программирования. Параметры передаются в процедуры через стек. Не исключено, что эта игрушка (хотя бы частично) писалась на ЯВУ.

svofski
02.05.2019, 14:20
Если ты скинешь дампы уровней и какую-то базовую инфу о том, что там чем является, можно будет быстро забацать штуку, которая их превратит в картинки.

ivagor
02.05.2019, 15:23
Сами уровни (каждый по 65 байт) с 1F60h по 24F5h. В байте упакованы 2 кирпича (полубайты), в рабочем буфере они, конечно, в распакованном виде.
Изображения кирпичей с адреса 2578h. Каждый кирпич 2 байта в ширину x 9 строк x 2 плоскости, т.е. 36 байт. Хранятся построчно (слева направо), сверху вниз, 2 плоскости. Сначала плоскость A000, потом С000. Цвета: A000 - бирюзовый, С000 - красный, A000+C000 - белый (а фон - черный). Встречаются индексы кирпичей 0-6 и F, поэтому с 2578h картинки первых 7 типов, потом пробел и c 2794h последний тип.
Приведенные адреса рабочие, если разбирать исходный файл, то нужно их убавить на 100h.
Разобрал я не 100%, а только то, что меня интересовало, но уровни в сферу интереса удачно попали.

- - - Добавлено - - -

Забыл про "упаковку", но там очевидно: старший полубайт - левый кирпич, младший - правый.

ivagor
03.05.2019, 11:10
Очень простой и очень тупой фикс, чтобы мячик и ракетка не мигали. Побочный эффект - некоторое замедление игрового процесса.

ivagor
03.05.2019, 14:15
svofski спровоцировал меня на написание скрипта, рисующего уровни арканоида по бинарнику. Получилось весьма похоже. Небольшое дополнение к вышеприведенному описанию - высота содержательной части кирпича 9 строк, но еще нужно добавлять пустую строку, т.е. всего 10 строк на кирпич.

svofski
03.05.2019, 16:09
Класс! Плохо знаю уровни Попкорна, но LCL явно больше похоже на LACRAL, чем на ARKANOID или например на TAITO ;) Похоже, что из Попкорна не только кирпичи были использованы для вдохновения.

ivagor
03.05.2019, 16:58
Да, уровни явно старались сделать как в попкорне, хотя поле в векторовском варианте и поуже. Вот (https://youtu.be/GXIVxhL-86s?t=492) первый уровень, дальше мотаем и видим насколько похожи и следующие уровни.

- - - Добавлено - - -

Совпадение или нет, но в БКшном popcornе ширина поля 10 кирпичей. Но там попкорн почти настоящий.

svofski
03.05.2019, 17:13
Лё мон дю касс-брик, да. Кстати раньше не слышал звучки эти, чпоки забавные. На БК ух молодцы, в очень тесном месте сделали очень ловкий Попкорн.

Кстати вот он еще упомиает вот эту штуку:
https://en.wikipedia.org/wiki/List_of_Nintendo_DS_accessories#Paddle_Controller
Хоть тема и названа очень абстрактно и размещена в разделе про Вектор, понятно, все мы томимся ожиданием Океаноида. Можно сделать Oceanoid Controller.

ivagor
03.05.2019, 18:17
Насчет темы я надеюсь, что после арканоида еще будет о чем сюда написать. Хотя пока арканоид-океаноид сильно занимает моск.
Раньше я оффтопил про внутренности в других темах, теперь есть место для легального писания. Ну и есть надежда, что не только я буду здесь флудить.

Насчет писишного попкорна. Это еще одна игрушка из тех, которые технически можно портировать на вектор (пусть даже на вектор с квазом), но делать этого никто не будет. И непонятно, зачем урезали игровое поле (и в векторовском арканоиде и в БКшном попкорне). Если урезать декоративную боковую панель, то игровое поле влезает полностью и можно использовать оригинальные уровни.

svofski
03.05.2019, 22:46
но делать этого никто не будет
Ну почему ж так категорично. Вот сейчас все насмотрятся на Oceanoïd и ломанутся делать свои версии, в том числе и для Вектора. Arkanoïd переименуют в Old oceanoïd, Oceanoïd станет New Arkanoïd, итд итд итд...

ivagor
04.05.2019, 09:11
Еще на корвете есть попкорн. Там очень старались, но своеобразные размеры кирпичей и некоторые технические недоработки лично для меня снижают привлекательность корветовской версии.

metamorpho
19.05.2022, 15:41
Привет !!

Есть ли в эмуляторах Вектора возможность просмотреть код загруженной программы и скопировать его ?

Задача такая - мне нужно в игре (в формате ROM) найти некоторый код, далее этот код мне нужно перенести в мой ассемблерный текст, который находится в обычном текстовом формате на PC.

Подскажите какие есть варианты это сделать ?

Improver
19.05.2022, 17:22
Есть ли в эмуляторах Вектора возможность просмотреть код загруженной программы и скопировать его ?В эмуляторе EMU (http://bashkiria-2m.narod.ru/index/emul/0-8) есть неплохой отладчик -- можно посмотреть/изменить память, сохранить область памяти в бинарный файл (и загрузить из файла тоже может), посмотреть код исполняемой программы на ассемблере, плюс пошаговое исполнение и с точками останова и т.п. Но сохранять дизассемблированный код он не умеет, для этого нужно будет сохранённый на большом ПК бинарник из нужной области памяти Вектора пропустить через дизассемблер.

- - - Добавлено - - -

Если что, один из вариантов дизассемблера можно найти тут (https://zx-pk.ru/threads/9488-vektor-06ts-operatsionnye-sistemy.html?p=1056859&viewfull=1#post1056859). Или вот есть ещё неплохой DASMx (https://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/DASMx.shtml).

b2m
20.05.2022, 20:47
В последнем EMU можно сохранить листинг (зайти в отладчик, нажать Ctrl+S, выбрать диапазон адресов, выбрать опцию Save listing). Вот только это просто копия с экрана отладчика, и меток там не будет. Если кусок не большой, можно метки вручную расставить.

А так да, лучше нормальным дизассемблером делать.

svofski
24.05.2022, 01:39
Есть еще настоящий красноглазый способ сделать это в v06x - запустить gdb.exe из архива v06x и написать в нем


target remote localhost:4000

и будет отладочная сессия. В ней можно написать что-нибудь типа
disass 0,+16 и получить листинг. Правда, увы, только в мнемониках z80.

ivagor
19.08.2022, 17:16
В свое время некоторые невектористы критиковали Chip And Dale (http://www.sensi.org/scalar/ware/393/) за тормознутость. Получилось разогнать в полтора раза, стало пободрее.

Upd: Еще немного оптимизировал, стало в 1.7 раза быстрее оригинала.

Upd 24.08.2022: Стало в два раза быстрее оригинала.

Upd 27.08.2022: 25 FPS, более чем в два с половиной раза быстрее оригинала.

nzeemin
19.08.2022, 17:56
В свое время некоторые невектористы критиковали Chip And Dale (http://www.sensi.org/scalar/ware/393/) за тормознутость. Получилось разогнать в полтора раза, стало пободрее.

А к этому рому исходники есть? или ты прямо так, bare metal hacking?

ivagor
19.08.2022, 18:43
Я его еще тогда в основном дизассемблировал (там все очень просто), интересно было посмотреть как сделано. Сейчас добил дизасм, но выкладывать не готов, он выглядит ужасно. Если вдруг кто захочет, думаю часа за 2-3 можно дизассемблировать с нуля.
Еще немного оптимизировал (https://zx-pk.ru/threads/30425-vnutrennosti-programm.html?p=1160954&viewfull=1#post1160954).

- - - Добавлено - - -

Искал, искал и не нашел, где на форуме писали про Чипа с Дейлом. Нашел ролик (https://www.youtube.com/watch?v=eS7KXOwwRb8) VladTru. Он там пишет "всего порядка 6 кадров в секунду" - не согласен, в оригинальной версии в районе 9.5 FPS. В ChipAndDaleFastV3 - примерно 16.3 FPS.

CityAceE
19.08.2022, 19:20
Сейчас добил дизасм
Это же значит, что при желании можно сделать полноценную игру?

ivagor
19.08.2022, 20:06
при желании можно сделать полноценную игру?
Вопрос в том, что в игру можно взять из такой демонстрационной версии. Мое субъективное мнение, что наличие chipdale.rom показывает один из возможных вариантов движка для векторовской игры, но до собственно игры там очень далеко.

reddie
19.08.2022, 21:50
примерно 16.3 FPS
Если 16фпс без просадок (3 кадра на фрейм), это уже комфортная игра получается. Не каждая таким может похвастать.

ivagor
20.08.2022, 06:37
Если туда добавить игру, то она будет помедленнее, но удержать на приемлемом уровне можно.

ivagor
24.08.2022, 17:03
Отмечу круглую цифру - теперь Чип&Дейл (https://zx-pk.ru/threads/30425-vnutrennosti-programm.html?p=1160954&viewfull=1#post1160954) быстрее оригинала в 2 раза. Вектор медленный, но не настолько, насколько может показаться при поверхностном взгляде.

svofski
24.08.2022, 19:22
Понятно, что это совсем еще не игра и вряд ли так просто когда-нибудь ей станет. Но все равно впечатляет цветастостью и производительностью. Что ты сделал, чтобы стало так шустро?

ivagor
24.08.2022, 20:13
Часто открытие секрета фокуса оборачивается разочарованием.
Тут движок можно считать модифицированной версией движка в портах HUDSONовских игр с msx. А их я оптимизировал довольно долго и упорно. Основное ускорение за счет максимального облегчения основной процедуры сравнения текущих и "референсных" тайлов. Там было очень много лишнего, поэтому получилось заметно ускорить.
Интересующиеся могут сами посмотреть. Основной игровой цикл с 025A до 29E. Процедура сравнения тайлов - 032C.

ivagor
25.08.2022, 06:37
Искал, искал и не нашел, где на форуме писали про Чипа с Дейлом.
Еще поискал и нашел - 1 (https://zx-pk.ru/threads/835-vektor-06ts-obshchie-voprosy.html?p=24940&viewfull=1#post24940), 2 (https://zx-pk.ru/threads/835-vektor-06ts-obshchie-voprosy.html?p=72497&viewfull=1#post72497)

svofski
25.08.2022, 11:41
сравнения текущих и "референсных" тайлов
Ты имеешь ввиду поиск тайлов, которые изменились и требуют перерисовки? Извини, но я не так бегло читаю ассемблер, чтобы казуально на уровне светской беседы проанализировать 032C.

ivagor
25.08.2022, 12:05
Ты имеешь ввиду поиск тайлов, которые изменились и требуют перерисовки?
Точно так

svofski
25.08.2022, 13:21
Понятно. Я на самом деле вообще никогда не думал о том, как устроены игрушки такого рода внутри. Должно быть непросто сделать для компьютера уровня Вектора что-то, что было бы достаточно абстрактным и универсальным, в то же время имея неплохую производительность. В то же время все-таки начинать надо от конкретной игры, иначе абстрактность тут быстро заведет в тупик и прежде всего съест все силы и энтузиазм автора.

Наверное в банке артверка, которым благоразумно воспользовался parallelno, можно найти готовый артверк для какого-нибудь абстрактного платформера. Правда платформер без фишки в наше время вряд ли будет очень привлекательным, слишком уж избитый жанр. Тут если делать что-то, оно должно или быть про каких-то популярных персонажей с хорошей анимацией, или иметь какую-то свою интересную фишку типа Колобихи, или Bubble Ghost.

Смотрю на стримах lafromm31 бкшные игры и удивляюсь тому, как много бэкашникам иногда удавалось запихнуть в жалкие 16кб. Если без кваза, то соотношение основной памяти к экранной получается то же самое 1:1. У БК однозначно лучше соотношение производительности процессора и объема экранной памяти, но оно как раз по-моему съедается необходимостью постоянно играть в пятнашку последними оставшимися байтиками памяти.

За неимением лучших идей можно сделать версию Потапа с фоном и плавным движением. Тут можно вообще поразвлекать себя в несколько этапов (Этапы Потапа, прям скатывается с языка название сериала на ютубе) -- взять сорец на MSX-Basic, разобрать его во что-нибудь человекочитаемое, собрать его под SDL2 например, улучшить плавность в прототипе, перенести прототип на Вектор заново. Музыку в заставке сделать в phaser-е :)

Кстати, не могу найти сорцы Потапа. Что-то намекает на то, что это MSX Magazine 1988.03, но попадаются только сканы.

Upd: благодаря lafromm31 Потап быстро нашелся

ivagor
25.08.2022, 14:18
У БК однозначно лучше соотношение производительности процессора и объема экранной памяти
Впервые прочитал про эту замечательную и близкую сердцу каждого спектрумиста метрику в инфоркомовском издании и со временем не люблю ее все больше и больше. Считаю ее (метрику) в значительной степени несостоятельной, если компьютер (например вектор) обладает определенной гибкостью в использовании видопамяти.
Возьмем горизонтальный монохромный скроллер для спека. Его порт на вектор будет работать с тем же объемом видеопамяти, что и на спеке. Проц медленнее, поэтому конечно скорость будет ниже, но размер видоозу в этом частном случае не влияет.
А когда влияет, то и картинка может быть настолько лучше, что трудно говорить о сравнении.

- - - Добавлено - - -

Если до вечера исходник Потапа не найдется, то выложу тут.

svofski
25.08.2022, 15:05
Если до вечера исходник Потапа не найдется, то выложу тут.
Уже нашелся.

Что до метрики -- она всего лишь метрика, к тому же не единственная. Годится только для грубой оценки.

- - - Добавлено - - -


Если до вечера исходник Потапа не найдется, то выложу тут.
Вот то, что нашлось: cas (http://sensi.org/~svo/b/msx-potap/PUTUP.cas). Записал его как txt (http://sensi.org/~svo/b/msx-potap/putup.txt) в blueMSX. Но не могу запустить, все конфигурации, что я пробовал, выдают ошибку в строке 2200. Строка не хуже других на первый взгляд, но там нафаршировано будь здоров в этом листинге, так что ничего пока не понятно.

ivagor
25.08.2022, 16:12
Putup.bas на дискете. run"putup.bas" из дискового бейсика.

svofski
25.08.2022, 16:38
Твой запускается. Вот он выколупанный в виде текста (http://sensi.org/~svo/b/msx-potap/putup0.txt). Видно, что это когда-то было одной программой, но все же заметно отличается. Интересно, что это вдруг.

parallelno
26.08.2022, 00:32
Путап был изначально написан на бейсике?

svofski
26.08.2022, 04:39
parallelno, да. Там немного ассемблера для засылки тайлов и спрайтов, а так все на бейсике.

parallelno
26.08.2022, 08:10
svofski, прикольно. А на векторе он уже был переписан на асме, да?

- - - Добавлено - - -

Никак не могу нагуглить видео оригинала. Такое ощущение что игра была совсем не популярной. Интересно.

svofski
26.08.2022, 11:58
svofski, прикольно. А на векторе он уже был переписан на асме, да?

- - - Добавлено - - -

Никак не могу нагуглить видео оригинала. Такое ощущение что игра была совсем не популярной. Интересно.

Игра, похоже, была в дебрях дискет из приложений к MSX Magazine, а там вообще прорва малоизвестных науке чудес из глубин океана. Каким-то образом именно вот эта игра попала на Счетмаш и вызвала желание себя спортировать. Оригинал выглядит точно так же, как Векторовская версия.

Для Вектора его можно сказать скомпилировали, наверное вручную. Я немного поразгребал бейсиковский сорец вчера вечером. Муторно, но понять можно.

Удивило, что спрайтов там немного -- собственно Потап, дверь выхода и наверное злое солнышко. Все остальное тайлы. Еще не очень понятно, зачем там ассемблерные вставки. Наверное для ускорения старта, или может быть какая-то старая версия MSX-BASIC не поддерживала чего-то важного. Они используются только в начале и похоже просто записывают битмапы тайлов в нужное место видеопамяти. В ходе игры есть только один вызов USR, который чего-то переставляет местами -- я подозреваю, что это анимация огня.

Тайлы 8х8, но в игре всё из блоков 16х16 пикселей, то есть 2х2 тайла. Позабавило, что 2х2 печатается просто терминалом, 1 2 курсор влево-влево-вниз 3 4.

Кстати вот во всех версиях для MSX, что мне попались до сих пор, нету музыки на заставке. Ну и вообще заставка заметно отличается.

ivagor
26.08.2022, 12:16
во всех версиях для MSX, что мне попались до сих пор, нету музыки на заставке
Музыка в векторовской версии из snake it (https://www.youtube.com/watch?v=XEjhUoPPCYU), про это Tim0xA писал.

- - - Добавлено - - -

Насчет быстрой оценки организации графики (недисковых) msxных игр - meisei (http://www.emu-france.com/emulateurs/10-ordinateurs/167-msx-hardware/2929-meisei/).
Advanced > Tile Viewer/SpriteViewer
Сразу надо кинуть в каталог эмулятора msx.rom из BlueMSX и в настройках заменить (File>Media>Internal). Ну и нужно сделать cas из bas (могу выложить свой).

svofski
26.08.2022, 12:53
Уже в который раз поражаюсь твоей памяти. Как в ней все это держится.

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

parallelno
26.08.2022, 12:59
Даёшь путуп с гигачадом16! :)

svofski
26.08.2022, 13:49
Даёшь путуп с гигачадом16!
Я больше хотел просто вытащить логику в виде чего-то чуть-чуть более читаемого, чем бейсик, и засунуть в godot. Логика Путапа, прямо скажем, не самая загадочная. Но все-таки прикольно иметь референсный дизайн. А уж там должно быть нетрудно хоть в гигачад16, хоть куда.

Я как-то забыл что такое бейсик за все эти годы. Впечатляет сочетание высокоуровневости и феноменальной бестолковости. Но все же жалко, что в Векторовском бейсике из коробки насколько мне известно нельзя было ни тайлы, ни спрайты.

ivagor
26.08.2022, 14:12
Тайлы и спрайты в basic 2.5 сами по себе дают не так уж много, можно посмотреть на jeti в bass (http://www.sensi.org/scalar/ware/687/). Нужен был быстрый бейсик.

svofski
26.08.2022, 14:37
Тайлы и спрайты в basic 2.5 сами по себе дают не так уж много, можно посмотреть на jeti в bass (http://www.sensi.org/scalar/ware/687/). Нужен был быстрый бейсик.

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

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

svofski
27.08.2022, 13:26
Промежуточный результат разбора Путапа. Хорошо написан, для Бейсика-то вообще очень ловко. Автор явно знал, что делал.
https://gist.github.com/svofski/260f5be9f808d9d232d1d243d48bbe3a

ivagor
27.08.2022, 14:38
Круто! Можно добавить про D9D6 - преобразование hex записи числа (HL), (HL+1) в A

- - - Добавлено - - -

В области D9F0-D9FF используются только адреса D9FC-D9FF для переменных

ivagor
27.08.2022, 20:07
Вклинюсь с ЧипоДейлом (https://zx-pk.ru/threads/30425-vnutrennosti-programm.html?p=1160954&viewfull=1#post1160954) - 25 FPS. Можно еще быстрее, но тогда надо взять только графику и полностью переписать движок. На это я не готов, данное упражнение завершил.

parallelno
27.08.2022, 20:37
Промежуточный результат разбора Путапа. Хорошо написан, для Бейсика-то вообще очень ловко. Автор явно знал, что делал.
https://gist.github.com/svofski/260f5be9f808d9d232d1d243d48bbe3a

Крутяк!
Местами порадовало это:
- Скажите что-нибудь на путупском.
- LOCATE10,10:PRINT"лпоег йзтщ" ' ~ этаоин шрдлу
:)
А в целом очень классная работа! Жду с нетерпением быстрого и плавного путупа. :)

- - - Добавлено - - -

ivagor, мне иногда кажется что ты используешь какую-то нейросетку для оптимизации кода. Поэтому и не рассказываешь детали ускорения потому что не знаешь как оно работает. :D

ivagor
27.08.2022, 21:21
Есть такая штука (https://github.com/ilmenit/Phaistos), там и статейка лежит. Железный конь идет на смену крестьянской лошадке.

svofski
29.08.2022, 02:39
А в целом очень классная работа! Жду с нетерпением быстрого и плавного путупа
Как сделать плавный пока не знаю. Чтобы лучше переварить, переписал на gdscript на скорую руку https://svofski.github.io/potap/

ivagor
29.08.2022, 06:26
Супер, еще бы управление удобное сделать. Или wasd или курсор+пробел, но не asd+пробел

svofski
29.08.2022, 11:58
Супер, еще бы управление удобное сделать. Или wasd или курсор+пробел, но не asd+пробел
Если думать по геймпадному, asd + пробел становится понятней. Но конечно стрелочки я добавлю, тут я даже не подумал написать про управление -- думал не об этом.

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

Приблизительные идеи о достижении плавности:
1. враги становятся спрайтами
2. координаты потапа и врагов обретают дробную часть
3. тайлы, которые используются для определения коллизий, остаются, но заменяются пустышками

Предвижу много вопросов на стыках клеток, но по идее если сохранить всю логику по клеткам, должно быть решаемо. Не факт, что результат не будет восприниматься странно из-за того, что мы в дробной позиции, а координата для коллизии еще не доросла до округления в нужную сторону.

ivagor
29.08.2022, 12:14
Я не против плавности, но это будет уже несколько другая игра.
Что можно было бы улучшить в ремейке потапа для вектора:
1. Свести к минимуму тиринг. Скорость классической векторовской версии вполне достаточная, но главгерой при движении помаргивает. Ну и в векторовской версии есть недоработка - если задеть exit боком, то он частично сотрется и так останется, это тоже можно поправить.
2. Попробовать реализовать на бейсике. Вот тут конечно тяжко. Или свести функцию бейсика к вызову подпрограмм на асме или что-то такое сделать с бейсиком, чтобы он сам что-то мог. Кстати, есть версия на бейсике и для советского компа на ВМ80 - ПК8002. Правда там аппаратные тайлы и спрайты и портированный туда msx basic.

svofski
29.08.2022, 12:28
Было бы интересно понять, насколько другая. Пока это в Godot, цена эксперимента не так велика. Тут еще не знаю как оценивать. Сам я тот еще игрок к сожалению: когда начинаются уровни с пролетом над огнем итд у меня терпение лопается очень быстро.

Тиринг в Векторовской версии никогда меня не напрягал. Кстати в эмуляторах MSX мельтешня заметна гораздо сильнее, но оно и понятно. Вот идея перенести целиком на бейсике забавная, но боюсь, что тут самый простой способ -- это перенести сначала соответствующий бейсик. Ну и я не знаю, что именно в бейсике вызывает такие атомные тормоза (похоже, что правильный ответ "всё"), но если не переделывать в нем что-то радикально, шансов догнать оригинал тут по-моему никаких нет.

ivagor
29.08.2022, 13:08
Ну и я не знаю, что именно в бейсике вызывает такие атомные тормоза (похоже, что правильный ответ "всё"), но если не переделывать в нем что-то радикально, шансов догнать оригинал тут по-моему никаких нет.
Могу только согласиться

svofski
29.08.2022, 13:28
Могу только согласиться
У тебя большой опыт ковыряния в бейсиках. Что в них так тормозит? Например, они правда парсят каждую строчку по мере исполнения и никак этому нельзя помочь? Токены ок, но кроме токенов остаются аргументы функций и арфметические выражения, они видимо вычисляются каждый раз на ходу? Если попробовать на миг забыть наследие Альтаира с 8К памяти, что можно в бейсике изменить, чтобы сделать его быстрее. Объективно, не примериваясь на собственные ресурсы, но и не меняя язык, не превращая его в компилятор итд, а вот именно в рамках того, чем он является.

goodboy
29.08.2022, 13:47
на ZX есть `компиляторы` которые на самом деле не переводят строку в маш.код,
а конвертят её в формат более быстрый для передачи в интепретатор.
например Tobos

svofski
29.08.2022, 14:47
на ZX есть `компиляторы` которые на самом деле не переводят строку в маш.код,
а конвертят её в формат более быстрый для передачи в интепретатор.
например Tobos

У меня тоже была мысль первая -- зачем останавливаться на подмене операторов на токены, если можно все прожевать в деталях (но так, что бы потом можно было восстановить). Для листинга и редактирования можно потерпеть как фарш проворачивается назад, а для исполнения все же иметь то, что легко исполнить, а не легко отредактировать. Но пока я не знаю что на самом деле там происходит, так что это все так, слова и жестикулирование.

Константы можно было бы хранить в обработанном виде. Тут правда трудно соблюсти однозначное соответствие между текстом и внутренним представлением. Как отличить 0003 (ну захотелось мне так написать) от 3. Например так: токен "const-int", 3, индекс строки "0003" в таблице строк. Больше памяти нужно, ну и что.

А выражения как обрабатываются? Каждый раз строится дерево с нуля (наверное на ходу прямо исполняясь) ?

ivagor
29.08.2022, 15:11
В "постмикрософтовских 3.2" бейсиках, крайне популярных на советских компах с ВМ80:
1. Каждое обращение к переменной приводит к ее поиску по имени в области переменных
2. Константы каждый раз переводятся во внутреннее представление
3. Каждый переход/вызов подпрограммы приводит к поиску строки с требуемым номером по всей программе
4. Отдельно можно отметить наличие только 4х байтной плавучки (хотя и довольно хорошей в своем классе) при отсутствии 8-16 битных целых. Тут более поздние микрософтовские бейсики (в т.ч. msxный) отыгрываются, у них есть целые.

- - - Добавлено - - -

Ну и можно вспомнить микрософтовский компилятор бейсика для CP/M. На нем в принципе можно писать программы для вектора, но это отдельная история.

svofski
29.08.2022, 15:42
Да тут вообще непочатый край. Отсутствие целых это особенно ржавые вилы. Я наоборот предпочел бы целочисленный бейсик.

Про номера строк я даже не подумал подумать. Если правильно помню, то строка -- это два байта номер строки, байты токенизированной строки, 0. Длины нет. Получается, что переход на строку где-то в конце программы перелопачивает весь листинг? Зло, что тут скажешь. А можно применить творческий двоичный поиск -- тыкаемся просто в середину всей программы, ищем ближайший 0, определяем номер строки за ним и так далее ? Или так и сделано?

ivagor
29.08.2022, 16:18
Если правильно помню, то строка -- это два байта номер строки, байты токенизированной строки, 0. Длины нет.
Перед этим идет адрес начала следующей строки, т.е. все плохо, но не совсем. Переход на строку резво скачет от строки к строке, проверяя только номер.

svofski
29.08.2022, 17:18
Перед этим идет адрес начала следующей строки, т.е. все плохо, но не совсем. Переход на строку резво скачет от строки к строке, проверяя только номер.

То есть связный список, через это вставка строк работает не иначе?

ivagor
29.08.2022, 18:11
Да, однонаправленный. Вставка конечно тоже работает с этим, но на мой взгляд для быстродействия важнее поиск номера в переходах. В версии бейсика для ВМ1 я среди прочего ускорял поиск строки по номеру и поиск переменных по имени, можно и в версии для ВМ80 ускорить, но все это не так уж заметно.

Oleg N. Cher
29.08.2022, 18:26
Хватит спорить о том, как ускорить Бейсик, господа ;) Это родовая проблема Бейсика. Пишите уже на Форте ;)

ivagor
29.08.2022, 19:07
Скорее это проблема получивших широкое распространение реализаций в виде интерпретаторов, компиляторы могут быть не так уж плохи, как тот же микрософтовский. Правда он компилирует очень медленно, но сегодня, в век эмуляторов, это уже не так критично.

svofski
29.08.2022, 19:11
Oleg N. Cher, сначала надо Путап переписать на Форте ;) Это очень даже выполнимо, но как-то сейчас фокус смещен не в ту сторону.



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

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

Кстати, MSX Magazine 1987-10.

Рецензия в цветной части журнала со скринами (кстати, интересно -- вопросики там красные. Листинг есть, надо попробовать его распознать что ли.)



Put Up - г-н Юйчи Аго

Удивительно! Я впечатлен его созданием персонажа. И в довершение ко всему, это еще и хорошая игра. Как известно любому, кто когда-либо создавал игру, перемещение вражеских персонажей на самом деле довольно сложно. Потому что, в конце концов, человек, составляющий программу, должен решить, «какой вражеский персонаж будет следовать за игроком по какому образцу», и написать программу так, чтобы он двигался именно так. Обычно люди не хотят делать такие хлопотные вещи, но в этой игре много вражеских персонажей, и каждое движение имеет свою индивидуальность. Кроме того, хотя это игра-головоломка, она имеет высокий уровень действия и поддерживает правильный баланс. Ну, он липкий, но сделан хорошо. Итак, не могли бы вы сделать версию для диска, состоящую всего из 100 сцен, подготовить около 20 шаблонов фоновой музыки и сделать версию для диска?

И из раздела с листингом


Put Up
Юйчи Аго

Как играть

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

От редакции

Это действительно единственное объяснение, но игра — шедевр с глубоким вкусом. В любом случае, персонажи красивые, милые и продуманные. Например, пламя мерцает должным образом, а человек-вертолет вращает пропеллер, меняя выражение лица. Есть много вещей, которые вы не сможете прояснить, если не прочитаете движение.Вы можете увидеть, насколько это мило, глядя на объяснение фото, но это еще более удивительно, потому что это MSX1. Остальное просто фоновая музыка.


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

nzeemin
29.08.2022, 19:25
Ещё в тему "на чём писать под Вектор":
Возможно ли на Векторе писать под Паскалем с ассемблерными вставками?
А кросс-паскаль (чтобы на PC компилировать в бинарник) тоже есть?

svofski
29.08.2022, 19:43
nzeemin, из вопроса не 100% понятно -- ты все-таки имеешь ввиду кросс-компиляцию, или чтобы как на бейсике было тру, почувствовать себя в 80-х?

Pascal-MT+, с которым я познакомился благодаря твоему реверсу STALK1.SAV, в принципе подходит под оба определения. Я им пользовался как кросс, запуская его из под линукса (https://gist.github.com/svofski/c2aae20e1180aec73e0201ffa347e3cf?permalink_comment _id=3766334#gistcomment-3766334). Интересно, но я совершенно забыл откуда родом cpm, но такие вещи обычно как-то под ногами находятся. Да, но сам он при этом родной под 8080 и его можно запускать на Векторе. Выражаясь поэтичным языком редактора MSX Magazine -- "ну, он липкий, но сделан хорошо".

- - - Добавлено - - -


Скорее это проблема получивших широкое распространение реализаций в виде интерпретаторов
Вот интересно, Возовский Integer Basic совсем не обязан иметь все те же проблемы, что микрософтовский. Ты никогда не пробовал их сравнивать?

Oleg N. Cher
29.08.2022, 20:07
Возможно ли на Векторе писать под Паскалем с ассемблерными вставками?
А кросс-паскаль (чтобы на PC компилировать в бинарник) тоже есть?
Кросс-Оберон жеж уже давно есть. Транслирует в Си и потом через z88dk в бинарь. "Но там страшно и сектанты"(c) Н. Зимин ;)

ivagor
29.08.2022, 20:09
Возовский Integer Basic совсем не обязан иметь все те же проблемы, что микрософтовский. Ты никогда не пробовал их сравнивать?
Бейсики для 6502 я не смотрел, для меня это тяжело. Музычку из атари выхакивал с трудом.
Вероятно для 8080 лучшие бейсики все же микрософтовские, но более поздние. В принципе для вектора есть полунативный (не чисто CP/Mный) бейсик из этой серии - портированный корветовский (http://www.sensi.org/scalar/ware/96/).

svofski
29.08.2022, 21:15
Прикольная статья в вики про Бейсики. Особенно интересно про Атари бейсик. Они сделали все, о чем мы говорили раньше -- таблицу переменных, числовые константы сразу преобразованы итд. Но слажали в куче других значительно более простых деталей, из-за чего у них получился чуть ли не самый тормозной бейсик на свете

https://en.wikipedia.org/wiki/BASIC_interpreter#Performance

ivagor
30.08.2022, 06:26
Атаристам грех жаловаться, для них, пусть и не сразу, но сделали Turbo Basic (https://en.wikipedia.org/wiki/Turbo-BASIC_XL).

svofski
30.08.2022, 12:07
Вставка конечно тоже работает с этим
Вроде упоминалось в паре мест, что все равно строки обязательно в памяти подряд должны идти. Все равно странно как-то. Если тот же самый список адресов сделать отдельной таблицей, поиск по нему будет проходить радикально быстрее, можно спокойно двигаться в двух направлениях, бисечить и все что хочешь вообще. При том, что памяти он занимать будет ровно столько же. Ну ладно, для Альтаира допустим они писали там чуть ли не дыроколом по перфоленте, все можно понять. Но потом-то можно было поправить.

- - - Добавлено - - -


Атаристам грех жаловаться, для них, пусть и не сразу, но сделали Turbo Basic (https://en.wikipedia.org/wiki/Turbo-BASIC_XL).

Хороший датапоинт.

- - - Добавлено - - -


Супер, еще бы управление удобное сделать. Или wasd или курсор+пробел, но не asd+пробел

Сейчас должны стрелочки заработать (может быть надо как-то убедить браузер перегрузить кеш).
Что до плавности -- особого энтузиазма пока не было, а с полтыка плохо получается. Там так сделаны все проверки -- типа сделаем шаг в сторону и посмотрим, а не стена ли там. И поэтому делать шаг дробным не везде получается простой заменой размера шага. Лучше подождать, когда хотелка станет мощней.

ivagor
30.08.2022, 12:15
Ну ладно, для Альтаира допустим они писали там чуть ли не дыроколом по перфоленте, все можно понять. Но потом-то можно было поправить.
Basic 3.2 как раз был для Альтаира. Ну а то что наши не доработали (никто из многочисленных портировщиков на советские компы) - это же надо было разобраться и переделать. Зачем, если и так работает. Сам я тоже не модифицировал, правда у меня есть отмазка - я хотел, чтобы бейсиковские программы с самомодификацией продолжали работать в "моих" бейсиках.

svofski
30.08.2022, 12:52
Basic 3.2 как раз был для Альтаира. Ну а то что наши не доработали (никто из многочисленных портировщиков на советские компы) - это же надо было разобраться и переделать. Зачем, если и так работает. Сам я тоже не модифицировал, правда у меня есть отмазка - я хотел, чтобы бейсиковские программы с самомодификацией продолжали работать в "моих" бейсиках.

Оно и понятно, я без осуждения. Главное было чтоб работало. Ну и вообще Бейсик все же скорее язык для мощных калькуляторов, а то, что на нем некоторые умудрялись писать Путапы -- это аберрации. Все равно любопытно. И интересно было узнать про Атари. Кстати -- целая книга про него https://archive.org/details/ataribooks-the-atari-basic-source-book/page/n19/mode/2up

ivagor
30.08.2022, 14:52
Есть книжка (http://cpmarchives.classiccmp.org/trs80/Library/Books/Microsoft%20BASIC%20Decoded%20&%20Other%20Mysteries%20(1981)(James%20Farvour).pdf .7z) и по микрософтовскому для 8080, правда более позднему и продвинутому, чем 3.2. Это примерно корветовский бейсик.

BOBLS
10.03.2023, 08:59
Игра, похоже, была в дебрях дискет из приложений к MSX Magazine, а там вообще прорва малоизвестных науке чудес из глубин океана. Каким-то образом именно вот эта игра попала на Счетмаш и вызвала желание себя спортировать. Оригинал выглядит точно так же, как Векторовская версия.

Добры день. Я искал оригинальную версию Putup С MSX. И поиск меня натолкнул на этот разговор. Пробовал запускать ту версию, которая с дискеты, но сразу обнаружил, что в игре бесконечные жизни. Видимо этот код кто-то в своё время немного поправил.
Я любитель ретроигр и вспомнил эту игру из детства ещё с Вектора. Хотел сделать для неё набор ретродостижений, но не могу найти оригинал ( или хотя бы нормальную играбельную версию). У вас остались ещё какие-нибудь другие версии?
Можно, конечно и вручную поправить, но не хотелось бы вносить свои изменения в код. Хочу сохранить наследие "как есть".

svofski
10.03.2023, 12:24
Я разбирал ту версию, которая была здесь пару страниц назад (https://gist.github.com/svofski/260f5be9f808d9d232d1d243d48bbe3a). Для получения тру с двумя твердыми знаками можно попробовать разобрать печатный текст из журнала MSX Magazine 87-10 (https://archive.org/details/MSXmagazine198710S/page/n205/mode/2up), страницы 195-200. C современными техническими средствами это будет тривиальной задачей, но мне заморачиваться не хотелось.

BOBLS
10.03.2023, 15:01
О! Спасибо большое. Этого достаточно. Я могу сопоставить код на гитхабе и печатный оригинал и найти несоответствия. Это займет определённое время, но это того стоит. Планирую где-то через месяц начать, как закончу предыдущие достижения. Если интересно, скину то, что я нашёл. Там скорее всего где-то опечатка банальная.
Ещё вопрос не совсем по теме. Возможно ли сделать образ диска с автозапуском данной игры, как она есть на MSX? Это важный момент. Что бы пользователь просто запустил эмулятор, вставил диск и игра запустилась? Просто часто у пользователя нет клавиатуры, только джойстик.
В любом случае спасибо, теперь я знаю куда дальше двигаться.

- - - Добавлено - - -

Беглый просмотр кода с телефона показал, что нашему Патапу кто-то здесь нарисовал 100 жизней в строке 130 (RE=100: ) вместо двух. И на заставке небольшая опечатка в строке 170. Там лишние символы появились. Возможно это и всё. Но нужно будет отдельно ещё покапать и потестить играбельность.

BOBLS
02.02.2024, 22:56
Для получения тру с двумя твердыми знаками можно попробовать разобрать печатный текст из журнала MSX Magazine 87-10 (https://archive.org/details/MSXmagazine198710S/page/n205/mode/2up), страницы 195-200. C современными техническими средствами это будет тривиальной задачей, но мне заморачиваться не хотелось.

Пришло время и я разобрал эту версию Потапа. Печатную версию журнала удалили из archive.org из-за правообладателей. Возникли некоторые сложности со свободным временем и печатным текстом. Сразу скажу, что оригинальная версия несколько отличается от этой. Видно, что кто-то в дальнейшем доделывал игру. В игре появляются строки не кратные 10. Кто-то вставлял новые участки кода.
По мимо количества жизней я обнаружил
1. Не понятно, когда кончится время, и вылетит "Злое лицо", т.к. индикатора времени нет.
2. При прохождении уровня за оставшееся время не начисляются бонусные очки.
3. Не отображается на экране взял ли игрок красный шарик или нет. И какое их количество.
4. Незначительные изменения в уровнях, уже не помню что именно.
5. И ещё в одном месте были изменения в машинном коде.
6. Автор игры Yuichi Ago (吾郷 裕一). Я пытался с ним связаться через сайт, запрещённый в Росси.. Но он мне не ответил. Видимо страница заброшена.

Разместил небольшую статью с образом игры и листингом программы в ASCII формате. В образе диска один файл "AUTOEXEC.BAS". Запускается во многих эмуляторах с автозапуска.
MD5:
223189c6823f7376d133d44507068d19
https://archive.org/details/put-up-msx-1987-bas
Зная, как лютуют правообладатели, попросил залить к себе админа сайта https://download.file-hunter.com
DSK (https://download.file-hunter.com/Games/MSX1/DSK/Put%20Up%20(1987)%20(Yuichi%20Ago).zip)
Listing (https://download.file-hunter.com/BASIC%20Listings/Various/PUTUP.zip)
Планирую разработать комплект игровых ретродостижения за пару месяцев, что бы возродить интерес к этой замечательной игре.Put up (MSX) (https://retroachievements.org/game/28365)
Версия на Векторе была значительно интереснее, но пока retroachievements.org не поддерживает вектор 06c.
Надеюсь я не нарушил правила сайта обилием внешних ссылок.

ivagor
24.02.2024, 12:03
Можно сказать в дополнение к последним постам. Прохождение (https://www.youtube.com/watch?v=y9SGGZFeX4U) векторовского PUTUPа, мне понравилось.
Посмотрел и подумал, что если сделать огонь или воду палитрой и оставить только одного врага, то подобная игрушка вполне по силам модернизированному бейсику, на заметку желающим поучаствовать в конкурсе РЕТРОГРАД.