LINUX.ORG.RU

Masm2c + libdosbox - тулкит для обратной разработки DOS-игр

 , ,

Masm2c + libdosbox - тулкит для обратной разработки DOS-игр

6

2

Вышла первая публичная версия (0.9.6) тулкита для обратной разработки 16 битных DOS-игр: Masm2c и libdosbox.

Допустим, вы решили переписать движок старой любимой игры под ДОС или специализированного DOS-софта. Кроме того что реверс-инжиниринг сложен, задачу усложняет еще и то, что используется сегментная модель памяти (адресация за раз только 64 КБайт памяти одним сегментным регистром), прямой доступ к старому железу.

Если у вас есть бинарник с движком игры, тулкит позволяет сконвертировать его в работающий переносимый код на C++. Каждая инструкция x86 заменяется аналогичной функцией на С++ (native code). Libdosbox используется для эмуляции видео, звуковых устройств и для проверки конвертации каждой инструкции x86. Получается что-то среднее между декомпиляцией и дизассемблированием.

Как результат, далее вы можете переписывать игру используя современные утилиты: gdb, и т.д. Декомпиляция — в отдалённых планах.

Исходники составных частей проекта:
https://github.com/xor2003/masm2c (GPLv3)
https://github.com/xor2003/libdosbox (GPLv2)

Аналогичный инструмент — Spice86. Такие инструменты как Ghidra и reko не выдают рабочий код.

Целью проекта является улучшение игровых движков, а не нарушение авторских прав.

>>> Подробности



Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 9)

Ответ на: комментарий от xor2003

Вот так, думаю будет однозначнее:

портировать движок старой любимой игры c DOS на современную платформу

mydibyje ★★★★
()
Ответ на: комментарий от Adamos

Может не знает как редактировать новость, после публикации новости её только модератор может изменить.

mydibyje ★★★★
()

М-м-м, без конвертации прямых обращений к видеопамяти в хотя бы svgalib - не интересно. Ведь суть DOS-игрушек - в этом.

tiinn ★★★★★
()
Ответ на: комментарий от tiinn

А кто сказал, что без? С помощью libdosbox можно собрать дофига run-time информации, в том числе какие инструкции пишут в видео память. И потом использовать несколько вариантов для замены таких инструкций. Собственно уже сконверчено несколько игр

xor2003
() автор топика

Лучше бы макросы для ассемблера писали

xwicked ★★☆
()
Ответ на: комментарий от undef

masm2c может сконвертировать .asm исходник, запустить. Но libdosbox пока не умеет 32 бит код проверять. Присоединяйтесь, допишите. Для 32 бит не ставил такой цели пока, много есть декомпиляторов.

xor2003
() автор топика
Ответ на: комментарий от undef

DOS сама не умеет ни 32bit, ни Protected. За 640 килобайт можно запулить только данные, код нельзя. Точнее, запулить можно, только он работать там не будет. Поэтому, у любой ДОС программы (игры) всегда два требования к памяти - нижней, до 640к, и верхней.

lenin386 ★★★★
()

Currently limited to real mode 16 bit DOS software.

То есть всё вкусное мимо, как обычно :( А принца персии с полем чудес сами ешьте.

Что у подобных проектов за проблемы с защищённым режимом вечно? Казалось бы, всё можно до бита и такта сэмулировать давно - нет, скоро 30 лет как непреодолимые проблемы с запуском того же Duke Nukem 3D на современных системах.

yu-boot ★★★★★
()

Сконвертированы и запускаются: Stunts, Test drive 3, Alfa Waves, The Lost vikings, Goody, Battle Zone

xor2003
() автор топика
Ответ на: комментарий от yu-boot

Защищенный тоже можно сделать. Чуть сложнее наверно, но я базу сделал. Присоединяйтесь к разработке. Одному как-то тяжело тянуть бесплатные проекты

xor2003
() автор топика
Ответ на: комментарий от lenin386

DOS сама не умеет ни 32bit, ни Protected.

dos4gw тебе в помощь

Psilocybe ★★★★
()
Ответ на: комментарий от lenin386

Это поэтому старые BIOS вместо 4096KB памяти отображают 3712KB?

ex-kiev
()
Ответ на: комментарий от Psilocybe
  1. Сначала получаешь рабочий исходник, с помощью этого тулкита под современную платформу.
  2. Потом разбираешься в логике рендера.
  3. Вероятно переписываешь его.
  4. Добавляешь hi-res. Остальной код можно не трогать.
xor2003
() автор топика
Ответ на: комментарий от firkax

На питоне только конвертер. Язык простой и удобный. Исходники игор можно нагенерить на C++. Либо потом сконвертировать в C# (потому что там есть goto)

xor2003
() автор топика
Ответ на: комментарий от gremlin_the_red

Просто как пример игры под dos/4gw.

Blood или Redneck Rampage на дюковском движке, кстати, там не работают вроде.

Всякие dosbox, bochs, dosemu и иже с ними пробовал - так, чтобы вот прям сходу, без проблем, как это было на p166 с саундбластером - не получается. Или со звуком проблемы, или слайд-шоу в 800*600 даже на райзене, или ещё что-то. Люблю просто игрушки того времени :)

yu-boot ★★★★★
()
Ответ на: комментарий от xor2003

Допустим, вы решили переписать движок старой любимой игры

Зачем? Если я решу переписать старую любимую игру, то буду это делать на современном движке.

Rodegast ★★★★★
()

Stunts на скрине. Ностальгия, эх… Как я любил трассы там строить 30 лет назад…

pekmop1024 ★★★★★
()
Ответ на: комментарий от tiinn

Исходники игр здесь https://github.com/xor2003/libdosbox/tree/libdosbox/src/custom Оно похоже на ассмеблер. Чтобы было красивее - нужно декомпиляцию делать. можно сконвертить clang++ -> LLVM IR -> iril -> C# binary -> dotPeak -> C# source, или еще есть вариант

xor2003
() автор топика
Ответ на: комментарий от Rodegast

Но у тебя не получится сразу сделать 1 в 1 геймплей. А тут можно сделать копию и улучшения сделать опционально.

xor2003
() автор топика
Ответ на: комментарий от xor2003

Но у тебя не получится сразу сделать 1 в 1 геймплей

Конечно не получится. Будет игра на современном движке заточенная под современное железо. А если нужно 1 в 1, то DosBox.

Rodegast ★★★★★
()
Ответ на: комментарий от xor2003

Лет 10 пишу. Использованы части: Scummvm tasmrecover, dosbox, asm2c, qemu tests.

Лютобешено плюсую. +++ Есть же программисты... Один я школьник...😞
Тогда продолжай, может кто помогать начнёт.

xwicked ★★☆
()
Ответ на: комментарий от tiinn

Суть игрушек - в игрушках, технологии вторичны и никому не интересны. И тем более нигде не нужен никакой svgalib.

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

«технологии вторичны и никому не интересны» Поэтому многих прет писать тулы? Процент конечно никакой, но кому какая разница

xor2003
() автор топика
Ответ на: комментарий от gremlin_the_red

Не подскажешь, что означает строчка LH C:\DOS\MOUSE.EXE в AUTOEXEC.BAT?

А она хоть у кого-то работала? Говорят, что лишь QEMM умел переносить код в высокую память.

tiinn ★★★★★
()
Ответ на: комментарий от gremlin_the_red

На самом деле там две границы, одна на 640кб, вторая на 1088кб, он скорее всего вторую имел ввиду. LH грузит между 640 и 1088. Но на самом деле код можно и за 1088 положить и он будет работать, но возни слишком много (работать будет до первого межсегментного перехода, а значит надо запрещать прерывания большую часть времени).

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от tiinn

А она хоть у кого-то работала?

У всех. С MS DOS 5.0 это штатная фича родного менеджера памяти. До этого, как раз, это провернуть можно было только с использованием сторонних менеджеров.

Говорят, что лишь QEMM умел переносить код в высокую память.

Если что, UMA != HMA

gremlin_the_red ★★★★★
()
Ответ на: комментарий от gremlin_the_red

Загрузить драйвер в UMA. Даже больше тебе подскажу. 1. Драйвер - не совсем обычная программа. 2. UMA - в 16-и битном адресном пространстве.

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.