Просмотр полной версии : Безумная идея - дизасмить игры DOS и перекомпилировать в ZX
Andrew771
18.07.2015, 23:23
Съездил я значица в отпуск на Средиземноморье и с собой прихватил книжку "Ассемблер для IBM PC" (примерное название), почитать от скуки на пляже. И пришла у меня одна нехорошая идея - а что если:
1. Дизассемблировать игру DOS (начала 90х годов);
2. Найти в данных все изображения графики и текста, вручную отредактировать их;
3. Не меняя ничего остального, компильнуть в код ZX.
Идейка на чем базируется: как я понял, вывод текста и графики в PC базируется на вызовах прерываний BIOS и DOS. По сути, как у нас процедуры ПЗУ на Спектруме. Просто надо эти прерывания (процедуры) в количестве около 30 штук переписать в код ZX, типа их эмуляция. И тогда вызовы из кода игры для них будут перенаправляться в эти процедуры. А также, как я понял, в PC коды программы и данных четко разделены, что будет несложно найти и пересчитать адреса данных.
Единственная проблема - если вывод графики производится непосредственно в адреса видеобуфера, тут пока не знаю, как бороться.
Посмотрел размер игр для DOS, занимают примерно по 300 кб. Но подозреваю, что большая часть там попиксельная графика, которая прилично сожмется в Спектруме.
В общем, что думаете, реально ли это? Или пойти проспаться? :)
Shadow Maker
19.07.2015, 01:24
Не, теоретически это можно сделать, но времени потратишь больше, чем написать прямой порт той же игры :)
Хочу не старую игру дизассемблировать, а новую и потом скомпилить под ZX :)
Battlefield 4 хочу на спектруме :D
denpopov
19.07.2015, 06:04
В лоб адаптировать не удастся, нужно врубаться в дизассемблер и изучать те же вызовы BIOS. Дойдет до того что пейси просто понравится:)
denpopov
19.07.2015, 13:58
А еще данная группа разрабатывает свою версию Fallout под названием Fallout of Arizona
Как же, сейчас он все бросит и побежит Fallout на Спектрум адаптировать...
Andrew771
19.07.2015, 14:45
В лоб адаптировать не удастся, нужно врубаться в дизассемблер и изучать те же вызовы BIOS.
Но этих вызовов всего около 30 биосовских и 7 досовских: http://www.codenet.ru/progr/dos/ , тем более некоторые не нужны. Можно их съэмулировать в Спекки - переписать на ассемблере Спека вручную.
Больше всего гнетёт, если вывод графики происходит непосредственно в адреса видеобуфера, то нужно пересчитывать по идее из EGA (640x350) в ZX (256х192), а это приведет к сильной потере быстродействия и искажениям. Т.е., вручную придется всё равно переписывать. А видеобуфер, скорее всего, используется во многих играх, т.к. позволяет намного быстрее выводить графику, чем через прерывания BIOS. :(
---------- Post added at 14:45 ---------- Previous post was at 14:38 ----------
Andrew771, попробуй начать с QSP
Или "Звездное наследие" на выбор
Никогда не любил квесты, ну можь кроме эротических. Основатель Юрий Матвеев правильно поступил, можь мне тоже :)
axe_chita
19.07.2015, 15:22
Если ответить в двух словах, лучше проспаться.
Более развернуто - проще написать игру заново чем пытаться перенести ассемблерный код из другой архитектуры.
По поводу работы игр через вызовы BIOS то они использовались минимально т.к. были ОООООЧЕНЬ медленными, и в большинстве случаях использовались графические библиотеки которые работали напрямую с портами и писали напрямую в видеопамять. Вызовы же DOS использовались не так часто (открыть, читать, закрыть, гораздо реже писать). Более того в многих играх мелкие файлы игры собирались в один большой файл ресурсов чтоб уменьшить потери времени на открытие - закрытие файлов.
Нет есть конечно обратный пример что можно кросстранслировать из более простой архитектуры в более производительную. Friends software в свое время (в 1993) выпустили тулзу с помощью которой можно было преобразовать ROM MSX1 в EXE которые можно было запускать из под MSDOS. Но для запуска игры, требовавшей z80 и 64кб оперативки плюс видеоконтроллер ti9918 c 16кб видеоозу, нужна была 286 на 12мгц с 1мб озу и vga адаптером. плюс все равно нужно было ручками править код.
Максагор
19.07.2015, 16:54
Не, ну теоретически, особенно если брать досовские игры под XT и IBM286, написанные под консоль, CGA и EGA и конвертить их в АТМ-экураны той же АТМки и ZX-Evolution/BaseConf то теоретически возможно. А уж если есть исходники на ЯВУ, то тем более - теже Принц и Гоблинсы под ЦПМ на АТМке как раз с исходников на Си перекомпилировались (под него и под паскаль для АТМ были созданы совместимые по командам графические библиотеки). Правда потом надо было все это оптимизировать, ибо тормозило жуть - Принца оптимизировали более не менее, а вот Гоблинсы только на Еволюшене на 14МГц нормально идут, а на 7МГц АТМки - жуть тормозная.
А уж если есть исходники на ЯВУ, то тем более - теже Принц и Гоблинсы под ЦПМ на АТМке как раз с исходников на Си перекомпилировались (под него и под паскаль для АТМ были созданы совместимые по командам графические библиотеки).
Очень интересно. Откуда кто взял исходники Принца на Си? Пару лет назад было сообщение, что автор игры Принц нашёл случайно дискету с исходниками у себя, ранее считалось, что авторские исходники утеряны. Писал он игру, как я понял, на асме под Aplle II. Есть ещё вариант игры для Amstrad CPC 464, но я его так и не смог запустить ни в эмуле ни на реале.
Очень интересно. Откуда кто взял исходники Принца на Си?копирайты в игре есть "Andrey W.Honitch (C) Moscow 1994"
Shadow Maker
19.07.2015, 22:26
Учитывая что их Хонич и написал... Чойта вряд ли. Принц кстати он же не на си написан, а на асме?
копирайты в игре есть "Andrey W.Honitch (C) Moscow 1994"
Я АТМ-вского принца почти можно сказать не видел. В эмуле (когда-то уже ближе к современности), что-то плохо запускалось, на реале (середина 90х) видел пару раз. А вот когда я заинтересовался платформой Амстрада, то ессно искал коллекции игр для него. И в образах ленты и дисков. Нашёл прица. Мысль была какая? Ведь у АТМ экран по разрешению аналогичен Амстраду (CGA). Перенести игру можно было бы через декомпиляцию и переписывание машинозависимых частей. Этот вариант вполне реален. Но АТМовский принц был написан с нуля, спектрумовский вроде тоже. В последнем было ужасающее количество глюков. Их было столько в первых версиях, что играть было совсем неинтересно.
Andrew771
20.07.2015, 14:29
Есть еще декомпиляторы в языки высокого уровня, это если известно, на чем была написана игра. Но не знаю, как у них качество.
denpopov
20.07.2015, 14:53
Есть еще декомпиляторы в языки высокого уровня, это если известно, на чем была написана игра
IDA справляется.
Если сделать интерпретатор, получится хоть программы для QBasic запустить? Или проще заново написать?
http://www.youtube.com
Andrew771
20.07.2015, 21:24
На Спеке уже есть компиляторы Бейсика, С, Паскаля, Оберона. Под них несложно (но муторно) адаптировать имеющиеся исходные коды для IBM PC.
Но я хотел именно игры, для которых отсутствуют (недоступны) исходные коды.
cherkasy
22.07.2015, 02:34
Есть ещё вариант игры для Amstrad CPC 464, но я его так и не смог запустить ни в эмуле ни на реале.[/QUOTE]
надо 128ю машину или в эмуле 128й вариант (winape20a18, arnold...)
я с диска запускал, все работает тоже.
сколько тех игр под дос?
сколько из них достойны под спек?
сколько из них можно под спековское разрешение заколупать?
Andrew771
22.07.2015, 16:18
1. Знаменитая игра про ж.д. ShortLine - одним файлом менее 300кб.
2. Цивилизация 1 - исполнимый файл менее 300кб, остальное картинки в отдельных файлах.
Вот еще нашел суперское - исходники классических игр (http://habrahabr.ru/post/256679/), даже дизасмить не надо.
denpopov
22.07.2015, 16:28
Вот еще нашел суперское - исходники классических игр, даже дизасмить не надо
переписывать убъешься.
Andrew771
22.07.2015, 16:33
переписывать убъешься.
Чисто теоретически. Там имеется исходный код на ассемблере для Принца Персии. А что если тупо заменить команды на Спектрумовские (это легко можно автоматизировать), остается только заменить процедуры вывода графики и формат графики.
---------- Post added at 16:33 ---------- Previous post was at 16:31 ----------
Исходники на ЯВУ адаптировать под имеющиеся для Спектрума компиляторы :)
denpopov
22.07.2015, 17:14
Там имеется исходный код на ассемблере для Принца Персии
поправочка - код на 6502, к тому же исходники весьма хитрые, есть тьма тредов на форумах- "Как скомпилировать код?".
Bedazzle
23.07.2015, 13:29
Просто надо эти прерывания (процедуры) в количестве около 30 штук переписать в код ZX, типа их эмуляция. И тогда вызовы из кода игры для них будут перенаправляться в эти процедуры.
Возьмём какой-нибудь процессор (https://ru.wikipedia.org/wiki/8086#.D0.A0.D0.B5.D0.B3.D0.B8.D1.81.D1.82.D1.80.D1 .8B). И оказывается, что регистров там больше, чем в Спеке. Кроме этого, процессор 16-битный. И это мы ещё не рассматриваем игрушки, которые хотят мегабайт или больше памяти. :)
Выходит, что просто тупо перенести ассемблерный код не получится.
Если же брать процессор послабее (https://ru.wikipedia.org/wiki/8008) (а значит, и игрушки будут похреновее), то мы возвращаемся назад в конец 70х или самое начало 80х. Есть ли смысл переносить такие игрушки? :)
denpopov
23.07.2015, 16:40
Есть ли смысл переносить такие игрушки?
Наверное да, пока народ прется от ретро:)
Имеет смысл перенос игр с Amstrad CPC на ATM или Эву, в разрешении 320 на 240, графику переделывать не нужно. Если игра стоящая (как принц), то имеет смысл перенос и он будет вполне реален.
axe_chita
23.07.2015, 17:54
1. Знаменитая игра про ж.д. ShortLine - одним файлом менее 300кб.
2. Цивилизация 1 - исполнимый файл менее 300кб, остальное картинки в отдельных файлах.
Вот еще нашел суперское - исходники классических игр (http://habrahabr.ru/post/256679/), даже дизасмить не надо. в циве еще и оверлеи были (в них графическая часть была, ну и звук еще)
И да, если мне не изменяет память, в форуме проскальзывала более безумная идея: реализовать на Спектруме JVM хотябы уровня самых простых телефонов. Если реализовать то такой пласт игр поднимется
denpopov
23.07.2015, 18:37
Имеет смысл перенос игр с Amstrad CPC на ATM или Эву, в разрешении 320 на 240, графику переделывать не нужно.
что, даже манипуляции с 6845?:)
Bedazzle
23.07.2015, 19:32
Наверное да, пока народ прется от ретро:)
Согласен, вопрос некорретно поставлен. Надо было спросить "нужно ли пытаться переносить таким методом?" :)
А что многие старые игрушки в лёгкую дают прикурить новому барахлу - тут спорить смысла не вижу.
axe_chita
23.07.2015, 19:44
может тогда проще игры с qbasic-а перенести?
в инете их не так уж мало
навскидку http://www.qb45.com/files.php?cat=5
что, даже манипуляции с 6845?
Я не написал про манипуляции, я писал про графику. Вывод оной, как и опрос клавы и прочее переписывается. просто когда у нас исх экран имеет большее разрешение, а туда, куда портируем меньшее то получаем сложности или исх картинка имеет больше цветов или исх картинка цвет на пикседь, а у нас атрибуты, то тоже проблемы.. Тут графика по сути одинакова и этих сложностей нет. Или мне статью написать, как портировать игры? Мы ж не из детского сада. И многие тут имеют отпыт написания на асме по 15-20 лет. Не смешно докапываться до каждого слова, понимать надо правильно, а не в стиле ааа.
Возможно дизасмить и переводить есть смысл только для самых простых гам (у спека например нет аппаратного скролла, и его ничем не заменишь).
Возможно есть смысл обратить внимание на чисто векторные гамы (ну например LHX (http://www.old-games.ru/game/852.html)
.
Подставить в алгоритм свои процедуры линий-заливок куда проще чем головоломные и медленные выводы спрайтов (спек проигрывает в скорости даже i286)...
denpopov
23.07.2015, 20:46
навскидку http://www.qb45.com/files.php?cat=5
ох, лол, это ж адаптированный под венду старый добрый QB. На нем писались другие интересные игры, но сырки походу утрачены.
---------- Post added at 21:46 ---------- Previous post was at 21:45 ----------
Не смешно докапываться до каждого слова, понимать надо правильно, а не в стиле ааа
а что бы ты выбрал для портирования из Амстрада?
axe_chita
24.07.2015, 03:00
ох, лол, это ж адаптированный под венду старый добрый QB. На нем писались другие интересные игры, но сырки походу утрачены.
В смысле? Нужны исходники самого компилятора Бейсика?
Или исходники игр? Надо определиться как-то.
по исходникам игр http://www.old-games.ru/forum/threads/besplatnye-igry-s-otkrytym-isxodnym-kodom.60598/
а что бы ты выбрал для портирования из Амстрада?
Как уже писал выше - Принц. Мне думается, что на Амстраде более правильная версия, чем сделана на АТМ. Ближе к оригиналу и меньше глюков. И ещё есть с десяток игр, которые не порт с ZX, их можно посмотреть. Т.е. я хочу сказать, что в начале 90х, нужно было именно портировать принца на АТМ, а не писать с нуля, но в то время не было доступа к софтам Amstrad и я думаю, что у нас в стране вообще никто не имел инфы, что это за компы (к сожалению). А т.к. принц на АТМ уже есть, то смысла в портировании особого нет, только из спортивного интереса.
denpopov
24.07.2015, 08:05
Как уже писал выше - Принц.
Кажется, Принца переносили уже.
насчет Амстрада - хороший порт R-Type удался бы.
Andrew771
24.07.2015, 15:58
Возьмём какой-нибудь процессор. И оказывается, что регистров там больше, чем в Спеке. Кроме этого, процессор 16-битный. И это мы ещё не рассматриваем игрушки, которые хотят мегабайт или больше памяти.
Выходит, что просто тупо перенести ассемблерный код не получится.
16-битные регистры заменяются на регистровые пары Z80. Некоторые команды 8086 будут заменяться несколькими командами Z80. Адресные регистры у нас только в HL могут идти.
---------- Post added at 15:58 ---------- Previous post was at 15:56 ----------
И да, если мне не изменяет память, в форуме проскальзывала более безумная идея: реализовать на Спектруме JVM хотябы уровня самых простых телефонов. Если реализовать то такой пласт игр поднимется
Прошарил эти темы на форуме. Все попытки обрывались, т.к. становилось ясно, что быстродействие будет никаким. А что если сделать не интерпретатор Java байт-кода, а перекомпилятор? :)
Bedazzle
24.07.2015, 16:52
16-битные регистры заменяются на регистровые пары Z80. Некоторые команды 8086 будут заменяться несколькими командами Z80.
Я даже боюсь представить, как это скажется на быстродействии. :)
Может, проще сразу эмулятор писать? :)
axe_chita
24.07.2015, 19:14
16-битные регистры заменяются на регистровые пары Z80. Некоторые команды 8086 будут заменяться несколькими командами Z80. Адресные регистры у нас только в HL могут идти.
А в результате этих преобразований у нас код разбухает, наверное где то в полтора раза. А памяти у нас не богато.
Чтоб не быть голословным отправлю всех заинтересованных к истории переноса игр MSX стандарта на Вектор и Aleste 520EX. в первом случае боролись с иной архитектурой проца (i8080 vs z80) во втором случае с эмуляцией VDP Yamaha V9938 на Motorolla 6845.
---------- Post added at 02:14 ---------- Previous post was at 01:43 ----------
"Перенесем DOSBox на Спектрум и другие 8-ми битные компьютеры!"
Звучит как революционный лозунг:v2_dizzy_army:
denpopov
24.07.2015, 19:42
16-битные регистры заменяются на регистровые пары Z80. Некоторые команды 8086 будут заменяться несколькими командами Z80
ACTION! для 6502 легко меняет эти манипуляции легко.
axe_chita
24.07.2015, 19:59
к сожалению сайт vector06c.narod.ru где обсуждалась рекомпиляция ушел в даун поэтому даю ссылку на вебархив http://web.archive.org/web/20100129100554/http://vector06c.narod.ru/
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot