Автор Тема: [SMD] Создание собственной многоигровки на одном чипе  (Прочитано 11770 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2957
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
игру я взял из тех, что ты посоветовал - Rambo, так как она самая маленькая 256 килобайт. меню у меня пока нет. надо хотя-бы одну игру сделать резиновой, чтобы добавить хотя-бы две игры - одну обычную любую и второй эту резиновую - и тогда можно сделать менюшку. эмулятор шелловский какой-то там Gens 665 - в нем есть дебаг 68K и я там подсматриваю адреса, которые потом пихаю в свой дизассемблер. на железе - не тестировал.

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

Добавлено позже:
а есть инструкции как читать файл карты? в дебаге 68K есть кнопка сохранить карту. там файл 1 мегабайт рожается... и типа флаги что процессор прочитал как код, а где недоходил вовсе, а где данные... вот расшифровка этих самых байт есть? конечно печаль, что только 1 мегабайт, а не весь ром можно херачить. я пока не понимаю кароче :) хотелось бы понять такие флаги, где происходит прыг на функцию. вот например я точно знаю что 2 лонг из заголовка указывает на Reset - D7E адрес. так-же поскольку файл на 1 байт больше мегабайта, то видимо его надо отрезать. тут пока с неотрезанным байтом. видимо не D7E, а D7F смотреть надо - получается $10.
D70: 00 50 55 55 45 54 55 45 55 55 50 55 50 11 51 10
D80: 11 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
тогда делаю поиск по $10 по всему файлу... но там бывает вылазят нечетные адреса, чего по идее быть не может. нечетный адрес не может быть началом функции. тогда может быть не $10 а следующий байт - $11 ? но там такая-же история.

в идеале бы тупо иметь кнопку "сохранить асм файл" - то есть сохранить содержимое окна эмулятора, пусть там и кривой код... пофиг мороз, потом можно текстовой файл отпарсить, заполучить человеческие адреса и перезапустить дизасм с правильным разбором команд... но там нет такой кнопки, а просматривать вручную это полное говнище - там полоска прокрутки сделана через жопу.
« Последнее редактирование: 29 Марта 2026, 07:22:24 от SeregaZ »

Оффлайн Talking_Sword

  • Пользователь
  • Сообщений: 1020
  • Happy Games Only!
    • Просмотр профиля
Если вы про то что можно самому создать многоигровый картридж, то для меня это втройне сложный вариант чем написать программу которая будет адреса менять, так как я по пайке, схемам и всему прочему не бум бум.
Невозможно написать программу, которая будет менять адреса. Точнее можно, но работать это не будет. Наверно даже заставку "Sega" игра не в состоянии будет показать.

То, что Беларус сказал, что можно сместить все абсолютные адреса в ROM-ах на мой взгляд нужно воспринимать скорее как юмор, а не как какой-то практический совет.

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

Купить дешевый картридж с платой, где текстолит удлинен пластиковой вставкой. Купить микросхемы для схемы переключения банков (в корпусе DIP). Насверлить в пластике отверстия для микросхем и вставить их в эти отверстия. Прошить ПЗУ. Обрезать часть дорожек на плате. Соеденить микросхемы по схеме. Подпаять схему к обрезанным дорожкам. Что может быть проще?

Вот вариант еще проще. Упрощенный вариант по сравнению со стандартным, который выкладывал я. Ограничение - все игры должны быть одинакового размера. Тоже можно собрать на плате с пластиком.

Еще проще вариант - 2\4 игры без меню, переключение по Reset. Игры тоже должны быть одинакового размера. Есть готовая плата.
если у нас все получиться то я сам могу такой сборщик написать, просто сейчас надобности такой нет.
Напишите. Если вы выложите свои наработки в общий доступ, то это будет полезно для многих. Как я уже говорил, почему-то никто не хочет написать сборщик многоигровых ROM-ов для Mega Drive.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2957
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
потому-что дизасмов резиновых нет :)

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3280
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
потому-что дизасмов резиновых нет :)
Могу сделать сборник любая игра + дюна + ррр.

Невозможно написать программу, которая будет менять адреса. Точнее можно, но работать это не будет. Наверно даже заставку "Sega" игра не в состоянии будет показать.
Есть ещё такой момент есть, в некоторых играх бывают 16-битные абсолютные адреса для участка $000000 - $008000 , такие без переделывания кода никак не сдвинуть.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2957
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
и баттл сити ты забыл :)

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

Добавлено позже:
и это причем сама игра галимая - всего 256 килобайт. что будет если тот-же МК3 Хак лопатить... там даже задумываться не хочется :)

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
в идеале бы тупо иметь кнопку "сохранить асм файл"
А ты пробовал использовать Exodus?, там есть такая кнопка :D

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

Добавлено позже:
Напишите. Если вы выложите свои наработки в общий доступ, то это будет полезно для многих. Как я уже говорил, почему-то никто не хочет написать сборщик многоигровых ROM-ов для Mega Drive.
Хорошо, тогда в скором времени этим займусь.

Я нашел еще многоигровки которые можно проверить на работоспособность:
2 in 1 - Fantastic Dizzy & Cosmic Spacehead (Europe)
2 in 1 - Psycho Pinball & Micro Machines (Europe)
3 in 1 Flashback - World Championship Soccer - Tecmo World Cup 92 (pirate)

две первых я не нашел, возможно что их так никто и не сдампил. В третьей я не понял как переключать игры, скорей всего через reset, но я пробовал в BizHawk использовать soft reset и hard reset, ничего из этого не сработало
« Последнее редактирование: 29 Марта 2026, 19:55:46 от SegaMark »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2957
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
смотрел. и ексодус и кмод - усё говно  :cry: там дизасм это не дизасм - это тупо начиная с первого байта берет и херачит как если бы это был код. это так не работает. потому что половина код, а половина - это данные и их исполнять процессором не надо.

а про перемотку в Gens 665... завтра наверное видос запишу с моим нытьем. уже сплю сижу...

НООООО! под конец прям афигел :) заставка стала стартовать! :) леплю и 2 нопа и 4 нопа - заставка прет :) пойду попробую еще вагон нопов налепить и посмотреть что получится.

мде... пожадничал :) посыпались команды типа jsr (label_7C78).w на этапе сборки - но это уже детали... запилить автозамену с .w на .l и пофиг мороз! :)

после замены в этом конкретном месте - собралось, но стало хуже :) хоть и не зависает. заставка, после должна быть замена экрана - зависает, но на кнопку старт реагирует. вот потом да, намертво. но это потом я собственно и недоходил еще. так-что игра уже потихоньку начинает тянутся... до полноценной резины еще далеко, но я доволен  :cool:

Добавлено позже:
еще тут заметил - часто встречается, когда такая конструкция и с pc и куда-то футболит, то там скорей всего несколько указателей и надо будет придумать автоматику, чтоб оно само в подобной ситуации разбивало и рекурсивно дальше парсило код по этим ссылкам.
« Последнее редактирование: 29 Марта 2026, 18:35:16 от SeregaZ »

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
что ты посоветовал - Rambo, так как она самая маленькая 256 килобайт
Columns еще меньше, всего 128кб. я не знаю существуют ли официальные игры еще меньше.

я извлек columns из Mega Games I (Europe) и сравнил с оригинальной columns REV1. самое яркое что бросается в глаза это то что в РОМе вырезаны куски, например вырезано все до 0x21E потом с 0x32C до 0x377 и тд, остальное пока не проверял.
Если кто-то может узнать скажите за что данные участки РОМа отвечают, очень интересно было бы узнать.

Columns в Mega Games находиться по адресу 0x80000-0x9FFFF. С концом не уверен так как там идет выравнивание и хрен знает где она на самом деле заканчивается

Добавлено позже:
там дизасм это не дизасм
Блин. он даже не смог нормально Columns дизасмнуть, хотя я не знаю какая игра может быть еще проще.
« Последнее редактирование: 29 Марта 2026, 20:26:31 от SegaMark »

Оффлайн Беларус

  • Модератор
  • Сообщений: 1547
    • ВКонтакте
    • Steam
    • Просмотр профиля
возможно что их так никто и не сдампил
А смысла их дампить нет - это же обычное переключение игр через сброс.
я пробовал в BizHawk использовать soft reset и hard reset, ничего из этого не сработало
И не должно, эмулятры Сеги не эмулируют переключение банков.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2957
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
я тем временем подозреваю мне надо програмку запилить, которая бы два файла трассеров сранивала автоматически и выдавала только самую соль разницы. сейчас глазами слепнешь сидишь все это обсмотреть  :wacko:

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3280
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Могу сделать сборник любая игра + дюна + ррр.
Вот переделал 10 in 1 на 8 in 1:
hang-on and monaco gp  -> rock n roll racing
shinobi and sonic -> dune
california -> tiny toon

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
я тем временем подозреваю мне надо програмку запилить, которая бы два файла трассеров сранивала автоматически и выдавала только самую соль разницы. сейчас глазами слепнешь сидишь все это обсмотреть 
winmerge используй

Добавлено позже:
А смысла их дампить нет - это же обычное переключение игр через сброс.
Где про это узнал? я не нашел информации что они через reset переключались

Добавлено позже:
И не должно, эмулятры Сеги не эмулируют переключение банков.
Спасибо, не знал. Думал если многоигровки с меню работают то и с ресетом должны

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2957
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
winmerge используй
э неее... мне хитрее надо. чтоб оно само то что мне надо искало и подсвечивало. так что тут тонкий подход нужен. например мне три символа в начале трассера нафиг не нужны: 00: потом сам опкод тоже. потом в конце символы xnzvc (они конечно магические и имеют какой-то смысл, но пока нафиг). потом адрес откуда произошло чтение - логика должна их сравнивать и там разница между адресами должна быть равна 4. сможет это твой winmerge?  :lol:

еще думаю при клике на строчку, чтоб вниз дублировались сразу регистры An и Dn - сейчас они невмещаются в поле обзора...

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
Вот переделал 10 in 1 на 8 in 1:
hang-on and monaco gp  -> rock n roll racing
shinobi and sonic -> dune
california -> tiny toon
:thumbup: Крутяк, я проверил все работает.
если не секрет расскажи как ты это сделал, мне бы это очень помогло в написании программы для создания многоигровок. Конкретно меня интересует:
Какие адреса у игр в многоигровке?
Пришлось ли для этого модифицировать игры которые добавлял?
Пробовал ли менять игры местами, то есть не в меню джампы изменить, а в самом РОМе поменять игры местами?

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3280
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
:thumbup: Крутяк, я проверил все работает.
если не секрет расскажи как ты это сделал, мне бы это очень помогло в написании программы для создания многоигровок. Конкретно меня интересует:
Какие адреса у игр в многоигровке?
Пришлось ли для этого модифицировать игры которые добавлял?
Пробовал ли менять игры местами, то есть не в меню джампы изменить, а в самом РОМе поменять игры местами?
На RRR и Dune у меня просто свои дизассемблы, так что я их пересобрал с начальным адресом $200000 и $300000 соответственно.
California эта первая игра в роме, поэтому её заменил просто - первые 512 Кб, кроме первых 512 байт заголовка, он уже от сборника. Но также требовалось в роме tiny toon убрать проверку чексуммы.

Меню не самое удобное, т.к. там надо ещё прописывать адреса stackpointer, reset, hblank, и vblank  (что в хедере рома по адресам 0x0, 0x4, 0x70, 0x78) для каждой игры. Для california (tiny toon) это в куске кода $A426C - $A4283. 

Вот оригинальная раскладка:
super hang on - 512 Kb   - 0x302000
golden axe -    512 Kb   - 0x100000
columns -       128 Kb   - 0x080000
sonic -         512 Kb   - 0x280000
sor -           512 kb   - 0x180000
shinobi -       512 Kb   - 0x200000
california   -  512 Kb   - 0x000000
sega soccer  -  256 Kb   - 0x0C0000
super monaco -  512 Kb   - 0x380000
flicky       -  128 Kb   - 0x0A0000

0x0A4000 - menu


Добавлено позже:
Пробовал ли менять игры местами, то есть не в меню джампы изменить, а в самом РОМе поменять игры местами?
Это так не работает, каждая игра 'пересобрана' под другое расположение в роме. Все адреса в её коде, изменены под другое расположение.

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
Прошить ПЗ
через что его прошивать? программатор willem подойдет?

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2957
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Ti_, я говорю ты Battle City забыл! - ведь на неё тоже есть дизасм.

и выкладывать нельзя было... ща китайцы набегут и через неделю на алике появятся :(

Оффлайн Беларус

  • Модератор
  • Сообщений: 1547
    • ВКонтакте
    • Steam
    • Просмотр профиля
Где про это узнал? я не нашел информации что они через reset переключались
У меня первые же строчки в Гугле - это СегаРетро:
segaretro.org/Double_Hits:_Micro_Machines_/_Psycho_Pinball
segaretro.org/2_Games_on_One_Cart:_Fantastic_Dizzy_and_Cosmic_Spacehead
Про третий сборник было сказано на другом сайте, название не запомнил. Я сравнил один ром и он полностью совпал кроме нескольких байт.

Думал если многоигровки с меню работают то и с ресетом должны
Ты то ли забываеш, што тебе пишут тут другие, или не понимаеш, или запутался. Как я понял, есть три вида многоигровок:
1) переключение через сброс - эмулировать смысла нет, т.к. можно играть в эти игры отдельно. Конешно же, игры всё равно сдампили и сравнили. Если были мелкие изменения, то в GoodGen они попали как [o1] (овердамп), скорее всево
2) переключение игр через меню - это меню в своём банке вместо игры, в других банках другие игры. Меню переключает банк и передаёт ей запуск игры. В эмулятре работает только это меню
3) переключение игр через меню, меню и все игры перекомпилированы для единово адресново пространства в 4 мб - то, што тебе надо. В идеальном случае у игр изменения лиш в абсолютных адресах, они все смещены на одно и то же значение. Все игры этих сборников можно сделать перемещаемыми-переставляемыми, если изучиш разницу.

мне бы это очень помогло в написании программы для создания многоигровок

И што она должна делать? Собирать сборники из изученных игр или же каким-то магическим способом определять што надо менять в играх? Все варианты тебе тут описали, даже железные. Тебе надо лиш выбрать.
От твоево решения зависит, куда попадёт эта тема :lol:

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
И што она должна делать?
Изначально планировал взять какую-нибудь многоигровку с меню, выяснить где там располагаются все игры и дать простую возможность заменять их, просто перекидывая в окно программы свои РОМы.


Добавлено позже:
Думаю Talking_Sword примерно так же делал. Брал РОМ многоигровки, находил где располагаются игры, заменял байты этой игры на байты своей игры, возможно еще джампы правил, смотря какая игра. Я хочу автоматизировать этот процесс, чтоб не приходилось в hex-редакторе ковыряться. Возможно что-то еще туда добавлю.
« Последнее редактирование: 30 Марта 2026, 16:04:13 от SegaMark »

Оффлайн Talking_Sword

  • Пользователь
  • Сообщений: 1020
  • Happy Games Only!
    • Просмотр профиля
через что его прошивать? программатор willem подойдет?
Это вообще зависит от того, какое ПЗУ будет использовано. Вообще, чисто в теории, он наверно сможет прошить практически любую NOR Flash, там алгоритм прошивки, можно сказать, у всех одинаковый. Но для многоигровки лучше брать ПЗУ большого объема. А вроде на ПЗУ Willem можно прошить NOR Flash максимум на 4 мегабайта (32 мегабита). Больше тоже можно, но придется переключать старшие адреса вручную переключателями и прошивать кусками. Но 64-128 мегабайт (1 гигабит) замучаешься прошивать кусками по 4 мегабайта, к тому же, у Willem низкая скорость, на сколько я знаю, значит это вообще вечность займет.

Ну какую-нибудь S29GL064 (с любой буквой) можно наверно будет прошить в два захода. Но это маловатый объем (8 мегабайт или 64 мегабит). С другой стороны, на доступные новодельные платы больше не поставишь, так как там посадочное место под TSOP48, а в TSOP48 максимум 8 мегабайт или 64 мегабит, я уже об этом говорил. Вообще, на место TSOP48 можно припаять TSOP56, а все остальные выводы припаять проводками, но на таких новодельных платах с пластиком не хватит места под TSOP56. Хотя можно за основу для многоигровки взять плату Flashkit, но там надо будет схему переключения банков делать на отдельной платке.
Думаю Talking_Sword примерно так же делал. Брал РОМ многоигровки, находил где располагаются игры, заменял байты этой игры на байты своей игры
Нет, я собирал ROM "с нуля". Разве что меню взял готовое (мне с моим пониманием программирования такое не написать). Сначала действительно думал сделать так, но решил все-таки взять себя в руки и разобраться.
« Последнее редактирование: 30 Марта 2026, 18:30:10 от Talking_Sword »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2957
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
тем временем я напозитиве  :cool: игра конечно еще сыплется на ровном месте... НООООО! я тут придумал систему ниппель: берем и парсим файл трассера, собираем в кучу адреса, подгружаем в мой дизассемблер и смотрим какие адреса мой дизассемблер прозевал раззява. додизасмливаем - профит! :) правда есть конечно и негатив... ибо это не совсем точно будет работать. ибо прыжки будут не совсем полные. но это уже хлеб.

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

Добавлено позже:
эм... как бы да, чуток новых адресов нашел и добавил... но ситуацию с резиной это не решило :) идея класс. жалко что этого пока-что мало.
« Последнее редактирование: 31 Марта 2026, 07:13:39 от SeregaZ »

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
ибо прыжки будут не совсем полные
Поясни. Как они могут быть неполные?

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2957
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
функция 1:
текст 1
текст 2
прыг на текст 4
текст 3
текст 4
текст 5

функция 2:
текст 1
прыг на текст 3 в функции 1
текст 2

предположим известен адрес функции 2, мы начинаем её парсить, система в ней находит ссыль на текст 3 в функции 1 - парсит там тоже. но вот верхушка функции 1 так и останется неизвестной :) понятно что если мы трассер будем писать более полно, то тогда конечно она рано или поздно там засветится...

тем временем продолжаю генерить гениальные идеи... кароче решил, что мне надо к трассер-парсеру приделать карту памяти, чтобы согласно командам в трассере - заполнялась память. правда пока не представляю как именно это сделать, ибо мне надо видеть во времени, как заполняется память. а хотелось бы чтоб кликом в любом месте - показывало состояние именно на момент события, которые ты заселектил. ибо так из тупика и не выбрался :) нормальный ром игры в моменте берет и прыгает с адреса 03CC на 0940, а ром курильщика с 03СС+4 на 08F0. долго мы с ИИ перетирали где это может быть... он грешит на вбланк и шбланк - дескать они в любое время могут влезть в основной код и привнести свою пургу и видимо это и произошло. вот мне надо отловить место где эта катавасия происходит и понять, почему при смещении, при условии что все известные метки я поправил - рожает совсем другой адрес. вместо 0940+4 = 08F0.

Добавлено позже:
начинаю ненавидеть рэмбу лютой ненавистью... не могу раздуплить где мой дизассемблер рожает косяк, при котором начальная радуга на логотипе Сега - работает, по всей видимости, больше чем 13 раз. и в результате в конце палитры вылазят клоунские цвета, то есть получается 68К вылез за пределы данных палитры и начал жрать и рисовать последующий код как данные палитры...

Добавлено позже:

подсказывают, что я перемудрил с метками :) завтра засяду за переделку.
« Последнее редактирование: 31 Марта 2026, 22:07:04 от ghostdog3 »

Оффлайн bgr

  • Пользователь
  • Сообщений: 618
    • ВКонтакте
    • Просмотр профиля
находил где-то 13 штук, это не считая официальные исходники. Точно не помню где я их все находил, но большинство из них я скачал с Romhacking.net там раньше был тип disassembler, сейчас не могу что-то похожее найти. Если нужно могу скинуть
Скинь пожалуйста, исходники тоже пригодились бы, но сам я встречал лишь исходники скалолаза и гаргульев

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2957
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
вчера мне напихали полную панамку в мой дизассемблер, что move.w все в кучу смешивает и ссылки, и переменные - из обоих делает ссылки, что неверно. буду сегодня пыхтеть, чтоб придумать систему чтоб отличала мухи от котлет. пока не представляю... ноооо зато пока спал - придумал, что в конце сбора файла можно будет править если не чексумму, то хотя-бы размер в хедере. то есть в конце асм файла мой дизассемблер будет добавлять метку конца рома endofrom, а в заголовке в $1A4 изначально уже стоит ссыль на эту метку dc.l  endofrom-1. просто в случае размера ссыль и есть число - размер файла, только что надо минус один добавить. чексумму бы средствами самого ASM68K.exe тоже бы наладить, но подозреваю не шмогла она не шмогла - по моему просто не умеет он. не предусмотрено функционалом прыгнуть в $200, читать по 2 байта, складывать, и в самом конце писать эту сумму в хедер. придется так и оставить внешний фиксер. ну... кофем залился, пойду изобретать что можно с move.w придумать...

Добавлено позже:
и сразу глюк с клоунскими цветами на радуге Sega ушел. правда добавились новые глюки :) но уже хлеб!

Добавлено позже:

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

по итогу, что легко сделать в текстовом редакторе - поставить курсор туда-то, вписать 5 букв таких-то - то практически нереально сделать кодом :) нельзя делать большой перерыв в проектах... я все забыл как это работает. и метку не могу добавить "безразборную", и как изменить число на метку не могу... прям печаль беда. надо вникать в свой собственный код. я не понимаю самого себя двухгодичной давности :) надо писать более подробные комментарии в своем коде...
« Последнее редактирование: 01 Апреля 2026, 16:36:12 от SeregaZ »

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
SeregaZ, Ты какой алгоритм дизассемблирования используешь, линейной развертки или рекурсивного спуска или и то и другое?
просто насколько я понял основная проблема это то что у тебя данные посреди кода находятся и ты их не можешь отличить. попробуй дизассемблировать по меткам, то есть если встречается переход то продолжаешь дизассемблировать с того места, а про старое забываешь

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2957
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
эээм... так я французским не владею :) у меня-ж три класса церковно программистско-приходской. наверное рекурсивного спуска, но ведь ссылки могут вести и наверх, посему рекурсивного выпуска... эээ... перезапуска? :) это, кстати, одна из основных проблем, почему у меня подтормаживает. если нашлась ссылка, и она еще не обработана - её добавляет в последующий разбор. но поскольку ссылка может вести наверх, значит надо опять по новой с начала стартовать переразбор, но уже с учетом этой новой ссылки. а в новой ссылке в свою очередь могут быть еще ссылки... и опять каждый раз все с нуля начинает. поэтому разбор происходит медленно. и так-же поэтому у меня окно дергаеться. количество строк меняется было 100 скажем, после доразбора стало 95. а селект был на 60 строчке к примеру. в результате на 60 строке теперь могут быть совсем другие строки и окно неприятно дергается, и ты сам теряешься где именно ты находишься :) пока не придумал систему как это отследить в моей вселенной. просто весь движок разрабатывал с нуля, без опыта, по очень отдаленным пониманиям как это должно работать. посему о скорости работы и удобстве тут пока-что приходится не думать. добиться бы чтоб это хоть как-то работало, потом уже с высоты полученного опыта думать о возвышенном.

повторюсь - я бы хотел чтоб все было совместимо со старым глючным ASM68K.exe, чтобы из коробки однокликово код собирался без проблем. ида так не может (хотя может уже и может - не слежу последние пару лет). да, это неправильный подход, ибо этот ASM68K.exe это тот еще глюказоид. как с тем-же EXG. и отвратным синтаксисом. с дурацкими правилами для отступов, для математики, для консольных команд. но я его очень люблю, он очень маленький. конечно я бы хотел свой собственный ассемблер и прям вшить его в свой проект. но объем регулярок и прочих парсеров текста в код, который придется родить - меня пугает. разве что буржуев потрясти, может кто-то уже делал подобное и взять код у них, просто добавив свои условия...

ну и по автоматике - конечно было бы здорово допилить то мое влезание в память эмулятора и выковыривание меток прямо оттуда напрямую.

но пока-что хочу добавить возможность добавить комментарий в код, возможность заменить значение на метку, возможность добавить метку без разбора кода.

Добавлено позже:
и кстати проблему с EXG в принципе можно решить не заменяя опкод на команду, а прям оставить как есть dc.b $xx, $xx - тогда ASM68K.exe будет делать полное совпадение с оригиналом.

Оффлайн bgr

  • Пользователь
  • Сообщений: 618
    • ВКонтакте
    • Просмотр профиля
SegaMark, ты типа про меня не забывай :)

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2957
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
включи ему песню группы Комбинация - Незабывай...

кароче что-то через чур сложно что-то я там нарожал. и то еще недорожал. пока только само окошко. механику еще пока не придумал. и то вручную надо будет самому добавлять эту метку. после, если нажать применить, то должна будет произойти проверка - а нет ли этой метки в системе? если нет, то добавить. но пока только как метку, без парсева.

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
bgr, я почему то подумал ты говоришь про исходники Rambo.
во вложении чисто дизасмы, то есть на ассемблере. Я почти все из них проверил, думаю остальные точно рабочие. В архиве нету то что я на гитхабе нашел, иначе бы я не смог такой большой архив отправить, так что я это просто сюда ссылками кину.
https://github.com/RetailGameSourceCode/BatmanReturns
https://github.com/anatsvit/erathworm-jim-disasm
https://github.com/ShiningForceCentral/SF2DISASM
https://github.com/gsaurus/sor-disassemblies
https://github.com/sonicretro/s1disasm
не добавил исходники остальных соников. их можно найти у того же автора


Добавлено позже:
исходники скалолаза и гаргульев
это у меня в отдельной папке лежит, я назвал это Project_Package. Это насколько я понял официальные исходники, то есть их кто то из команды разработки скинул. Из тех которые ты не назвал есть еще EX-mutants. Добавил их

Есть еще исходники на SGDK и BEX. Могу их скинуть если надо

Добавлено позже:
поскольку ссылка может вести наверх, значит надо опять по новой с начала стартовать переразбор, но уже с учетом этой новой ссылки. а в новой ссылке в свою очередь могут быть еще ссылки... и опять каждый раз все с нуля начинает
не думал что столько ссылок наверх может быть, думал наверх в основном функции при возврате ссылаются. То что ты описал так по идеи и надо делать.

Добавлено позже:
ASM68K.exe это тот еще глюказоид
а есть список всех этих багов и глюков, интересно было бы почитать. Из того что я заметил он не работает с инструкцией link, хотя некоторые дизассемблеры ее добавляют
« Последнее редактирование: 02 Апреля 2026, 18:05:21 от SegaMark »