Мне интересны разобранные исходники игры. Хочу сделать порт на профи.
Вид для печати
продолжаю про парк ...
Сегодня сгенерил и поправил асм
т.е. в ром для MSX можно скомпилить
скомпилил его sjasmplus - заработало
вставил в начале кучку db, скомпилил - заработало
выкучил кучу db (всякие там фонты и прочее) и перенес в конец, скомпилил - заработало
вставил в начале области данных кучку db, скомпилил - заработало
конечно не все тестил, но стартует, музыку играет, начальные уровни работают
правда еще есть непонятности с самим sjasmplus
область данных там вся ds
а он ее добавляет 0 к бинарнику
---------- Post added at 15:26 ---------- Previous post was at 15:21 ----------
спасибо, это видел, музику посмотрю
а с экраном явно очень простые
гораздо интереснее в корветовских ITAExpress & Pacman
там хитрый вывод, 3 типа символов, с разным типом заполнения
и вывод спрайтов в pacman достаточно приличный есть
(целых 6 спрайтов, там кстати расспаковыные спрайты занимают 24к)
и там по 4 сдвига каждого а не по 8
То, что ром не работает в MSX - так и должно быть. Т.к. для бОльшего быстродействия при замене команд Z80 я специально использую модифицирующийся код. А так как в MSX игра запускается с картриджа (фактически ПЗУ), то разумеется, что модификация кода там не происходит, отсюда и глюки. В эмуляторе b2m есть возможность запустить ром в области ОЗУ (я чуть ранее давал правку конфига), поэтому именно он используется для отладки.
Кроме этого, все процедуры оптимизированы по быстродействию с учетом того, что на Векторе команды выполняются за количество тактов кратное 4-м. Т.е., например, при рекомпиляции в зависимости от количества итераций цикл может автоматически развернуться или нет. Поэтому при переносе на другую платформу, это тоже нужно учитывать, т.к. то, что хорошо для Вектора, не обязательно будет лучшим выбором для другой платформы.
А вообще, по моему скромному разумению, программирование Вектора - есть перманентный акт великого шаманства. Даже Michael Abrash с его Graphics Programming Black Book и извратами с кодом для Кваки рядом в изощрениях не стоит. Вектор - это такая удивительная платформа, где "ничего нельзя, но если очень хочется, то - можно". Сколько под него программаю, и это ощущение не проходит.
я наверное не совсем точно выразился ;)
я разобрал ОРИГИНАЛЬНУЮ MSX ROM версию парка
Ваш исходник был точкой отсчета так сказать
из него перенес метки и структуру (то что перенеслось)
после этого ручками в IDA разбирал что и как
и вот этот исходник из IDA я и скомпилил сегодня
а по поводу "поправил" эт скорее про другое
например в IDA у меня отдельный сегмет для MSX VRAM
с метками для каждой строки, каждого символа PGT & PGC
там метки вид
LD DE,PGC3_12
LD DE,VL13+12h
их и преобразовал в константы вида
LD DE,PGC3+(12*8)
LD DE,VLINE+(13*32)
теперь надо отдельно делать Z80->i8080
но есть идея как СИЛЬНО облегчить себе жизнь
LST файл должен очень помочь
а то что писал выше - тесты что похоже оно более мение нормально дизассемблировалось ибо сдвиг кода/данных на вид не влияет на работоспособность
крутотень редкая
буду поглядывать в Ваш исходник, аж интересно стало
получается таки по LST файлу детектить z80 инструкции
вот статистика по park
это сколько раз встречается в исходнике
уже заменил
jr -> jp
djnz -> dec b;jp nz
ldir -> call _ldir_
все работает
причем работа с IX похоже только в муз плеереКод:[["jr", 372],
["djnz", 42],
["ldir", 15],
["bit", 54],
["ld", 43],
["set", 7],
["res", 6],
["rr", 6],
["out", 5],
["dec", 4],
["neg", 4],
["exx", 4],
["sbc", 2],
["reti", 2],
["pop", 2],
["add", 2],
["inc", 1],
["rl", 1],
["im", 1],
["push", 1],
["cp", 1]]
bit - надо менять более обдуманно, сохранять A нужно делеко не всегда
в общем работа ползет потрошку
А не лучше ли будет написать что то свое похожее, чем разгребать чужой код? Да и графику можно оптимизировать для использования всех возможностей Вектора.
возможно, но, графику в MSX играх можно оптимизировать и так достаточно не сложно
там графика отдельный граф процессор
и обращение к нему четко известны, и понятно как оптимизировать
в свое время на корвете (и на векторе тоже вроде)
хорошие порты ямаховских игр задали планку качества
и на корвете до них мало кто смог дотянуться
на векторе вроде с этим получше, но все равно - порты это пример
а вообше игровая механика - штука тонкая
например в pacman фирменном каждый соперник имеет свою логику
и даже есть целые стратегии как уходить от каждого из них
есть ОГРОМНЫЙ документ с описанием
кстати к сожалению на корвете/векторе цвета убили при портировании :(
Тут я полностью согласен с esl. Точно воссоздать игровую механику довольно сложно. Скорее всего это получится уже совсем другая игра "по-мотивам". IMHO, если стоит задача сделать аналог, то же проще именно портировать, чем переписать заново. Хотя есть прецедент, когда игра была переписана и динамика игры совершенно не пострадала. Это "Exolon". На форуме есть интервью с автором http://zx.pk.ru/showthread.php?t=11067. Это очень качественная работа.Цитата:
Сообщение от TAL
У меня была своя стратегия, которая позволяла чисто механически проходить первые 2 или три этапа практически неуязвимо. Когда я попробовал эту стратегию на MSX, все было точно также. И в "Warp & Warp" тоже можно было выкосить практически всех врагов тупо бегая вокруг укрытия против часовой стрелки и непрерывно стреляя. В "Putup"-е без сноровки иногда бывает трудно нажать одновременно прыжок и движение влево-вправо. Думалось, что это глючок игры. Но нет, в версии для MSX все точно так же. Это к вопросу о точности переноса механики игры. Никакое переписывание этого не даст. Только портирование кода. И что главное, в этом случае, игры сохраняют свое первозданное очарование и не выглядят тупыми подделками!
Не знаю, как на других платформах, но на Векторе в версиях от ПО"Счетмаш" цвет действительно сделан абы-как. Но в рекомпиляциях "новой волны" цвет почти соответствует оригиналу. Вот на примере "Color ball"-а:
1) версия MSX
http://s018.radikal.ru/i514/1208/fe/8c6c93cacc5f.jpg
2) версия ПО "Счетмаш"
http://s019.radikal.ru/i620/1208/b7/d5b6bf403ccb.jpg
3) "новая волна"
http://s017.radikal.ru/i424/1208/9d/772e7f3af486.jpg
я про цвет писал именно в контексте pacman
про остальные игры - имхо близко к реальному - хорошо
но они делали тоже вполне приемлеммо ;)
вот тот текст про который я говорил
pacmandossierl
там 4 цвета, и КАЖДЫЙ имеет свое поведение
при портировании они убили цвета, и отличить их нет способа ;)
но я про это узнал только прочитав статью
и думаю что авторы порта даже не думали про это
ибо реализовать на Корвете/Векторе думаю вполне реально
Blinky: The red ghost's character is aptly described as that of a shadow and is best-known as “Blinky”. In Japan, his character is represented by the word oikake, which means “to run down or pursue”. Blinky seems to always be the first of the ghosts to track Pac-Man down in the maze. He is by far the most aggressive of the four and will doggedly pursue Pac-Man once behind him.
Pinky: Nicknamed “Pinky”, the pink ghost's character is described as one who is speedy. In Japan, he is characterized as machibuse, meaning “to perform an ambush”, perhaps because Pinky always seems to be able to get ahead of you and cut you off when you least expect it. He always moves at the same speed as Inky and Clyde, however, which suggests speedy is a poor translation of the more appropriate machibuse. Pinky and Blinky often seem to be working in concert to box Pac-Man in, leaving him with nowhere to run.
Inky: The light-blue ghost is nicknamed “Inky” and his character is described as one who is bashful. In Japan, he is portrayed as kimagure, meaning “a fickle, moody, or uneven temper”. Perhaps not surprisingly, Inky is the least predictable of the ghosts. Sometimes he chases Pac-Man aggressively like Blinky; other times he jumps ahead of Pac-Man as Pinky would. He might even wander off like Clyde on occasion! In fact, Inky may be the most dangerous ghost of all due to his erratic behavior. Bashful is not a very good translation of kimagure, and misleads the player to assume Inky will shy away from Pac-Man when he gets close which is not always the case.
Clyde: The orange ghost is nicknamed “Clyde” and is characterized as one who is pokey. In Japan, his character is described as otoboke, meaning “pretending ignorance”, and his nickname is “Guzuta”, meaning “one who lags behind”. In reality, Clyde moves at the same speed as Inky and Pinky so his character description is a bit misleading. Clyde is the last ghost to leave the pen and tends to separate himself from the other ghosts by shying away from Pac-Man and doing his own thing when he isn't patrolling his corner of the maze. Although not nearly as dangerous as the other three ghosts, his behavior can seem unpredictable at times and should still be considered a threat.
О как! Я не знал, это интересно. Помотрел в версии для MSX - точно цветные, не обращал внимания ))
К слову, когда я в первый раз играл в "Pacman" на MSX, то это было на "зеленом" ученическом мониторе. Мне любой цвет был бы в радость )) А вообще, "Pacman" - это моя вторая компьютерная игра, в которую я играл. Первой был "Galaxian". Было это в далеком 1986 году. Пару лет назад были попытки портировать "Galaxian" на Вектор, но потом эта работа была заброшена и ivagor сделал версию для ПК-8002, т.к. эта машинка идеально подходит для портирования с MSX.
В приложении версия для ПК-8002.
;)
у меня первая MSX игра была King's Valley, до сих пор помню как час сидели и не прошли первый уровень ...
любофф детства
тоже 16к рома ....
Очередные обновления
пора что-то решать ;)
подскажите, где на форуме можно сделать специальную тему про это ?
где буду описывать что есть
и потом от нее можно будет ссылки на порты сделать ?
сделал репозиторий на bitbucket
https://bitbucket.org/esl/park_dissassm
там и веду работы, так сказать
т.е. оно достаточно актуально
та же есть локальная вики, можно там доку писать ...
там будут мои активные работы
и при необходимости дам права желающим, можно будет форкать и делать порты
что сейчас сделано
исходник частично разбит на файлы,
инициализация фонтов,
отрисовка всех фонов
и инициализация врагов
функции вывода врагов на экран
музыка
частично сделан переход в сторону 8080
но не весь
jr->jp
всякие там ld de,(xxxx)
и по мелочам
но пока с этой работой остановился, ибо для z80 машинок она не нужна и может пока подождать
т.к. исходники уже СИЛЬНО перепаханы а оно на вид работает, дизасм вроде достаточно неплох
что в репозитории
база для IDA с которой все и началось
исходный ASM который скомпилился
напиленый асм
картинки на которых есть все три знакогенератора (чтоб как справочник использовать)
скриптики которые помогают портировать на 8080 (выводят комманды которох нет в i8080)
моя идея была - в эмуляторе не делать полной эмуляции VDP
а оставить только логику игрушки а весь вывод перехачить
и картики брать уже не из кода, а из картинок знакогенератора
как-то так
и еще совсем не понятно насколько правильно оставлять это в открытом доступе
ибо всякие там копирайты ...
можно сделать приватный репозиторий, но народ должен иметь опыт работы.
Для вектора есть версия с 3мя цветами спрайтов. Для этого просто задействована еще одна плоскость, так что для корвета такой вариант не пойдет, тем более все равно цветов маловато. Можно было сделать больше цветов, но для этого нужны были другие процедуры (потом в другой игрушке попробовал), а pacman был практически моим первым околоMSXным опытом.
Вот ведь совершенно портабельная на Вектор игра. Почти все на черном фоне, перерисовки за спрайтами минимум (хотя шляпа то и дело по кирпичу проезжает). Вся логика ограничена "кататься от стенки до стенки", или "мигать раз в Х кадров". Порты есть на все возможные системы от Atari 2600 до PC. Никому не охота заняться? ;)
http://www.youtube.com/watch?v=_zbg9rs5QZY
На Векторе есть практически точно такая же игра под названием Амбал, даже анимация змеи и черепа в ней один в один как на видео.
тут на форуме один участник сделал ее порт на ZX
Да, но это просто игра, сделанная отдаленно по мотивам и играть в нее совсем не так приятно. На Векторе можно сделать не хуже, чем на Атари.
Монтесума есть для ColecoVision, что суть MSX без клавиатуры, так что опыт портирования может оказаться полезным. Есть еще какие-то самодельные бразильские порты именно на MSX, но я не понял ни где их найти, ни чем они лучше. Насколько я смог понять из обрывочных записей в блогах 2006-2008 годов, автор одного из портов сгинул, а автор второго решил выпустить результат на картридже. Тоже, правда, сгинул. Осталась только Ютуба, но в ней фальшиво звучит Кукарача. Проклятье просто какое-то!
Все же звуковой чип отличается, хотя и не принципиально.
И можно еще упомянуть SG-1000. Большинство игр на этих платформах одинаковые, буквально несколько штук не было на MSX, но сейчас их уже вроде все портанули.
Приложил 2 варианта - предварительный и окончательный (хотя может был и более окончательный, я сейчас уже не помню).
Между прочим, на ТИА-МЦ есть ведь своеобразный украинский ответ Athletic Landу - "Конек-горбунок" и уже для 580ВМ80 (эмуляция есть в emu). Хотя 1 в 1 на вектор его было бы перенести непросто.
О, прикольно, что ты их выцепил. Но если уж делать, то по-моему лучше с оригинала. Огрехи MSX-ной версии видны даже по ютубе.
Edit: не хотел сказать, что я стану воротить нос от MSX-ного порта на Векторе ;)
Мне тоже так кажется. Бразильский товарищ там лишнего добавил. Но были порты с этих приставок и с минимальным вмешательством (других товарищей), например Bomb Jack с сеги.
К слову в монтезуме (и на калеке и на msx) меня лично раздражает плохая вписываемость в лестницы с правой стороны.
Это не оттого, что оригинал был заточен на 320 точек в строке, а все калекоподобные были потом подточены на 256? А ведь есть еще Монтесума на Atari 2600, это вообще не для людей со слабым воображением ;)
160 и 320 это одно и то же =)
Еще можно упомянуть версию для Сеги Master System, там графика другая (своеобразная).
Упоминавшийся Ambal интересен (мне) тем, что это одна из немногих игрушек, хорошо использующих графические возможности вектора, хотя может в реализации игрового процесса и есть шероховатости. Есть еще игрушка по мотивам Ambala - Death in the Pyramid
Интересно, какое железо на Yamaha MSX, отсутствующее на "Векторе", позволяло делать вот такие игры:
Zanac Gameplay Video
Metal Gear Gameplay Video
(эти обе игры - одни из самых известных на MSX-платформе, и раз их не портировали на "Вектор", наверняка на то были существенные аппаратные ограничения)
Не знаю, были на MSX тайлы? Подозреваю, что были, как и на всех компьютерах того времени. По сути, игровое поле сделано в текстовом режиме. Это позволяет сделать очень быстрое обновление игрового поля. На Векторе есть аппаратная прокрутка, но с ней все не так просто: перерисовывать целиком 8*4 строк 50 раз в секунду для векторовского процессора — серьезная задача. Но хуже того, все статические части экрана должны быть перерисованы целиком каждый кадр, чтобы стоять на месте. Настоящее зазеркалье. Это практически сводит все преимущества аппаратной прокрутки на нет.
И спрайты, которые на Векторе могут быть реализованы только программно. Каждый движущийся объект должен быть перерисован каждый кадр. Если под ним что-то есть, это надо сложить с маской спрайта и вывести заново. На процессоре 8080 это чудовищно медленно. На Векторе можно рисовать по слоям, но это нас очень быстро лишает цветов. Например, можно сделать, чтобы белый был независимым от остальных цветов — тогда рисовать белые спрайты будет очень просто, но полезных цветов для игрового поля останется только 8. Добавляем еще один "спрайтовый слой", получаем 4 цвета для поля, 4 для спрайтов.
Поэтому большинство игр для Вектора либо не очень цветные, либо не очень часто обновляют экран. Но все равно существует множество игр, которые на Векторе могли бы быть очень хорошими, если бы они для него были ;)
---------- Post added at 13:44 ---------- Previous post was at 13:42 ----------
У меня отношения с этими играми чисто ностальгические. Графика с Атари меня умиляет, она мне кажется гармоничной и естественной, а от SMS версии мне хочется родиться обратно.
Metal Gear все же для MSX2
Лучший вектор для игрушек - это ПК6128Ц. У него только 2 недостатка: очень маленькая распространенность и отсутствие кое-какой периферии.
Мне кажется, это почти единственный "сбалансированный" по цветам режим для Векторовских игр. Всё-таки, 8 цветов и "быстрые" спрайты без маскирования - это не так уж и плохо. Есть только одна тонкость, и связана она с прокруткой экрана. Пожалуй, можно ухитрится написать движок с плавной вертикальной прокруткой, используя аппаратный скролл и цветовую схему выше (игра Полёт-не в счёт, там uni-planar спрайты, а нужны будут bi-planar). Проблема есть с горизонтальным скроллом - видна перерисовка уровня. Не смертельно, (на многих платформах видел и похуже) но-неприятно. Собственно, я и наколбасил вот это, http://sensi.org/~svo/scalar/ware/865/, чтобы оценить "мырганье" при перерисовке bi-planar уровня. Для себя счёл мырганье неприемлемым, и пришлось делать фрейм-буфер, что сразу ограничило количество цветов до 4х. Это было не такое простое решение, и, возможно мырганьем в горизонтали для некоторых игр можно и пренебречь.
Плавное движение спрайтов вполне возможно, правда с дискретизацией на 2 пиксела, а не на 1. Тогда и фаз надо в памяти хранить по 4 на спрайт. Их обязательно надо просчитать заранее (по-крайней мере, я храню все 8 фаз в памяти квазидиска), иначе быстродействие будет убито сдвигами. Естественно, всё чтение с квазидиска в видеопамять, - только стеком (включая и уровень и спрайты). Для оптимизации по быстродействию, байты в спрайтах можно хранить "змейкой". Прогнал тут тест на своём движке, и убедился что 12 спрайтов размером 32x32 пиксела плюс главный герой 24x64 - предел после которого начинает чувствоваться лёгкое замедление.
Есть ещё одна тонкая тонкость - sprite clipping. Негоже, когда спрайты болтаются по экрану, а потом исчезают на краю целиком. Проблема в том, что для клиппинга, даже на границах байт нужны отдельные стековые процедуры, и они значительно медленнее.
И всё-же, предложенная цветовая схема 4x4 наверное - самое то.
---------- Post added at 07:32 ---------- Previous post was at 07:14 ----------
Если честно, то с Metal Gear я проблем в смысле аппаратных ограничений
не вижу. Zanac в таком виде невозможен потому как на Векторе аппаратно прокручивается весь экран, и меню придётся убрать. Если делать программную прокрутку, не думаю что хватит быстродействия. Всё-таки у MSX - 9918 видеопроцессор с аппаратной поддержкой спрайтов и видеопамять в 2 раза меньше.
Если в виде 4 для фона+3 для спрайтов, то это многие использовали: Ambal (и Ко), Гротоход, вроде еще что-то было
К сожалению оригинальная придумка SESа - 8 цветов для полэкрана с даблбуфферингом была им реализована только в демке. В игрушке можно было бы получить 8 цветный фон + 8 цветные спрайты, пусть и ценой быстродействия. Но у него T-REX и без этого крутой получился.
Одна плоскость выделяется под маску - верхняя половина 00, нижняя FF или наоборот. Когда приходит время переключить отображаемый буфер - меняем палитру и сдвигаем картинку в нужное положение.
Можно таким макаром организовать и чересстрочный вариант (вроде SES такого извращения не предлагал).
Поясни, пожалуйста, оригинальную придумку. Не будучи совсем в теме, трудно составить четкую картину того, что именно и где. Какой-нибудь коварный мультиколор и щелканье страницами квазидиска посреди хода луча?
---------- Post added at 16:08 ---------- Previous post was at 16:07 ----------
Ааа, это чтобы можно было "спокойно" перерисовывать 25 кадров в секунду вместо 50.
Не только, если быстродейтвия хватит (что, конечно, вряд ли) можно и 50 (а можно и 16 и 12 и т.д). Независимая от FPS фишка - возможность перерисовывать любую часть области вывода (пусть и уменьшеной в 2 раза), без мигания.
А 6128 мне как раз очень импонирует 4мя возможными полноцвентыми и полноразмерными экранными буферами. В т.ч. и проблемы с полноэкранным скроллингом можно решить.
Аналогия между очень редким 6128 и свободно покупаемым и подключаемым к любому вектору AYком мне не совсем понятна. Тогда и квазидиск и дисковод надо исключать из оборота. Как-то слишком хардкорно.
Сделать что-то крутое для голого вектора - в этом есть своя прелесть, но зачем ограничиваться только этим минимальным вариантом.
Мне тоже кажется, что ничего зазорного в делать под 6128 нет.
Но!!! (мой канюч): тот-же самый софт должен работать и под стандартным Вектором. Пусть с урезанными цветами и пропуском фич, но работать должен. У 6128, как я понимаю, аналог i8085, и там с точки зрения программера вся разница - только в наличии RIM и SIM.
Сразу возникает вопрос. А программно возможно отличить, бежит ли софт на 06ц или 6128? Возможно, попытки переключения страниц через 0Eh и записи с последующим чтением и есть такой тест, но я немного не в курсе, у 6128 квазидиск - стандартная поставка, или расширение, как у 06ц. Правда, наличие квазидиска легко проверяется таким-же макаром через порт 10h. Его, как я понимаю оба компа поддерживают одинаково, или нет?
Ещё вопрос насчёт видеопамяти в 6128. Видеоконтроллер читает все переключенные 32K из квазидиска, или возможны варианты с переключением отдельных плоскостей? Вообще хорошо-бы инфу по портам 6128 где-нибудь нарыть.
У нас с Tim0xой с Lode Runnerom почти так и получилось.
Можно отличить по флагам, причем благодаря Денису Кущу (спасибо ему за это) способ проверен на реале. Tim0xе я этот тест посылал, со временем, надеюсь, он его выложит в картотеку.
Стандартный квазидиск к 6128 все же не подключить. Было ли для него свое (совместимое со стандартным векторовским) расширение ОЗУ - это только астраханские инсайдеры могут рассказать. Но у 6128 все же есть 128 Кб на борту + КНГМД - не так уж плохо.
Руководство по эксплуатации ПК-6128Ц
---------- Post added at 19:37 ---------- Previous post was at 19:35 ----------
Это не совсем так.
1. Пресловутые mov r,r; inr r; dcr r выполняются на нем за 4, а не за 8 тактов.
2. Есть небезынтересные недокументированные (вернее плохо документированные) команды.