Автор Тема: Нужна помощь по командам M68k  (Прочитано 12081 раз)

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

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #90 : 12 Ноябрь 2012, 17:39:38 »
Т.е. оно везде так: адрес источника должен быть в два раза меньше реального адреса?
Добавлено позже:
Цитата: GManiac
Ты игру на ПК переписываешь, что ли?

Нет, просто нужно понять полностью что происходит в коде, и что куда копируется. Знаю, что графа в игре упакована, вот и ищу распаковщик. Но он не является единственной моей целью в этой игре)
Добавлено позже:
Цитата: GManiac
Ты игру на ПК переписываешь, что ли? Смотрю, ты этот Текмо Кап 2 года уже мучаешь, ещё с форума шедевра помню твои темы.

Нее) Я на долго забивал на него) Просто сейчас вот решил вернуться с новым опытом)

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #91 : 12 Ноябрь 2012, 17:43:35 »
Вот и интересно стало: при пересылке через DMA есть какие-то хитрости при указании адреса источника?
Всё правильно, адрес источника вначале делится на 2.
Адрес куда копировать это $C0000000, если бы было DMA - то $C0000080. То есть почти не отличается от адреса без dma.




Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #92 : 12 Ноябрь 2012, 17:50:20 »
Цитата: Ti_
Адрес куда копировать это $C0000000, если бы было DMA - то $C0000080. То есть почти не отличается от адреса без dma.

Ну с этим-то понятно.
Цитата: Ti_
Всё правильно, адрес источника вначале делится на 2.

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

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #93 : 12 Ноябрь 2012, 18:01:44 »
Т.е. в любой игре, если мне надо что-то скопировать через DMA, я должен указывать в регистры VDP адрес, поделенный на 2?
Да везде так.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #94 : 20 Ноябрь 2012, 22:12:28 »
Снова вопрос:
в игре нету ни VBLANK, ни HBLANK. Что может быть им заменой? Или если точнее: как найти то, что является заменой этим ф-циям?
ROM:00000000 ; STACK    vector: $000000
ROM:00000000 ; RESET    vector: $000200
ROM:00000000 ; BusErr   vector: $0003C2
ROM:00000000 ; AdrErr   vector: $0003C6
ROM:00000000 ; InvOpc   vector: $0003CA
ROM:00000000 ; DivBy0   vector: $0003CE
ROM:00000000 ; Check    vector: $0003D2
ROM:00000000 ; TrapV    vector: $0003D6
ROM:00000000 ; GPF      vector: $0003DA
ROM:00000000 ; Trace    vector: $0003DE
ROM:00000000 ; Reserv0  vector: $0003E2
ROM:00000000 ; Reserv1  vector: $0003E6
ROM:00000000 ; Reserv2  vector: $0003EA
ROM:00000000 ; Reserv3  vector: $0003EA
ROM:00000000 ; Reserv4  vector: $0003EA
ROM:00000000 ; BadInt   vector: $0003EA
ROM:00000000 ; Reserv10 vector: $0003EA
ROM:00000000 ; Reserv11 vector: $0003EA
ROM:00000000 ; Reserv12 vector: $0003EA
ROM:00000000 ; Reserv13 vector: $0003EA
ROM:00000000 ; Reserv14 vector: $0003EA
ROM:00000000 ; Reserv15 vector: $0003EA
ROM:00000000 ; Reserv16 vector: $0003EA
ROM:00000000 ; Reserv17 vector: $0003EA
ROM:00000000 ; Trap0    vector: $0003EA
ROM:00000000 ; Trap1    vector: $0003EA
ROM:00000000 ; Trap2    vector: $0003EA
ROM:00000000 ; Trap3    vector: $0003EA
ROM:00000000 ; Trap4    vector: $0003EA
ROM:00000000 ; Trap5    vector: $0003EA
ROM:00000000 ; Trap6    vector: $0003EA
ROM:00000000 ; Trap7    vector: $0003EA
ROM:00000000 ; Trap8    vector: $0003EA
ROM:00000000 ; Trap9    vector: $0003EA
ROM:00000000 ; Trap10   vector: $0003EA
ROM:00000000 ; Trap11   vector: $0003EA
ROM:00000000 ; Trap12   vector: $0003EA
ROM:00000000 ; Trap13   vector: $0003EA
ROM:00000000 ; Trap14   vector: $0003EA
ROM:00000000 ; Trap15   vector: $0003EA
ROM:00000000 ; Reserv30 vector: $0003EA
ROM:00000000 ; Reserv31 vector: $0003EA
ROM:00000000 ; Reserv32 vector: $0003EA
ROM:00000000 ; Reserv33 vector: $0003EA
ROM:00000000 ; Reserv34 vector: $0003EA
ROM:00000000 ; Reserv35 vector: $0003EA
ROM:00000000 ; Reserv36 vector: $0003EA
ROM:00000000 ; Reserv37 vector: $0003EA
ROM:00000000 ; Reserv38 vector: $0003EA
ROM:00000000 ; Reserv39 vector: $0003EA
ROM:00000000 ; Reserv3A vector: $0003EA
ROM:00000000 ; Reserv3B vector: $0003EA
ROM:00000000 ; Reserv3C vector: $0003EA
ROM:00000000 ; Reserv3D vector: $0003EA
ROM:00000000 ; Reserv3E vector: $0003EA
ROM:00000000 ; Reserv3F vector: $0003EA
Добавлено позже:
Ведь должна же быть функция, которая бы обрабатывала вертикальные  и горизонтальные прерывания.
« Последнее редактирование: 20 Ноябрь 2012, 22:23:00 от DrMefistO »

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #95 : 20 Ноябрь 2012, 23:28:33 »
Ведь должна же быть функция, которая бы обрабатывала вертикальные  и горизонтальные прерывания.

Попробуй поищи что-то похожее на:


Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #96 : 21 Ноябрь 2012, 10:05:44 »
Подобные процедуры я то нашел, которые проверяют бит 3 контрола, но они всего-то пустышки, как и у тебя в примере. А как же найти процедуру, которая бы что-то делала на период VBLANK/HBLANK'а?

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #97 : 21 Ноябрь 2012, 11:57:36 »
Подобные процедуры я то нашел, которые проверяют бит 3 контрола, но они всего-то пустышки, как и у тебя в примере. А как же найти процедуру, которая бы что-то делала на период VBLANK/HBLANK'а?
Кинь трейс лог на 1кадр. Толи вначале файла, толи в конце будет. (перед rte)

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #98 : 21 Ноябрь 2012, 12:24:40 »
DrMefistO, дак такой функции же достаточно чтобы проверить сменился кадр или нет.
А всё остальное, можно делать каждый раз после изменения счётчика кадров.
Вон, в том же UMK3 код задержки выгледит:
move #задержка, куда-то
jsr код_задержки ; процедура в UMK3 спецальная для этого
- а тут уже продолжение через несколько кадров.

Всё зависит от конкретной игры... можно по разному реализовать
можно тем же
Код: (псевдокод) [Выделить]
    move.l (текущий счётчик кадров), (temp)
loop:
    jsr обновление_чего-то
    cmp.l (tmp), (текущий счётчик каров)
    beq loop

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #99 : 25 Декабрь 2012, 16:51:18 »
Снова вопросец:
ROM:00006580                 neg.w   d0
ROM:00006582
ROM:00006582 loc_6582:                               ; CODE XREF: sub_6532+54j
ROM:00006582                 move.b  (a6,d0.w),(a6)+
ROM:00006586                 dbf     d2,loc_6582

В данном коде значение d0 делают с минусом, затем по адресу [a6 - d0] копируют байт в [a6] в цикле.

Вопрос в том, что буфер для распаковки у меня начался с адреса 0xFF0000. При подходе к данном участку в a6 у меня 0xFF0008, в d0 - 0x250.
После инвертирования получается 0xFDB0. Вот и не понимаю, куда оно ссылается, если буфер то еще в позиции 8, а назад оно просит на 0x250.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #100 : 25 Декабрь 2012, 18:15:38 »
После инвертирования получается 0xFDB0. Вот и не понимаю, куда оно ссылается, если буфер то еще в позиции 8, а назад оно просит на 0x250.
Ну вообще в зоне E00000-F00000 всё зеркалится по 65кб . То есть $FF0000-$FFFFFF равно $FE0000-$FEFFFF.
Но странно конечно тут, надо уточнять.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #101 : 25 Декабрь 2012, 18:23:40 »
Цитата: Ti_
То есть $FF0000-$FFFFFF равно $FE0000-$FEFFFF.

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

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #102 : 25 Декабрь 2012, 18:36:12 »
Но тогда выходит, что отнимать не неганое, что прибавлять неганое - один и тот же адрес, но там ничего нет, окромя нулей, т.к. туда ничего не распаковывалось еще..
Ну не знаю, надо ром смотреть. Это один архив такой или всё время.
По задумке то раз a6 буффер, и просто должны копироваться уже ранее распакованные цепочки продолжая распаковку.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #103 : 25 Декабрь 2012, 18:39:28 »
Цитата: Ti_
уже ранее распакованные цепочки продолжая распаковку.

Именно, о том и говорю. А в моем случае просится вперед (видимо за нулями - их там много). Таких архивов больше чем 1.
Добавлено позже:
Сделал так:
    if size >= ReturnTo then
    buffer^ := PByte(cardinal(buffer) - ReturnTo)^
    else
    buffer^ := PByte(cardinal(buffer) + (($10000 - ReturnTo) and $FFFF))^;

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #104 : 25 Декабрь 2012, 18:52:03 »

Именно, о том и говорю. А в моем случае просится вперед (видимо за нулями - их там много).
Если всегда за нулями... в нормальных анпакерах 0 и записывается.  А так мало ли, может там ещё какие-то данные для анпака.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #105 : 25 Декабрь 2012, 18:54:22 »
Цитата: Ti_
Если всегда за нулями... в нормальных анпакерах 0 и записывается.  А так мало ли, может там ещё какие-то данные для анпака.

Просто буфер то по сути цикличный. Размером в 0x10000. Поэтому так и интерпретировал, как написал. Т.е. смотреть с другого конца.
Добавлено позже:
Какашка, в общем получается. Сравнил результат анпака архива отладчиком, с моим. В тех местах, где d0 больше позиции в буфере, у меня не то, что в дампе.
Добавлено позже:
Правда не во всех местах. Там где надо нули, у меня они и есть)
« Последнее редактирование: 25 Декабрь 2012, 19:03:07 от DrMefistO »