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

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

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #30 : 13 Сентябрь 2012, 19:02:33 »
я вроде популярно объяснил
ЗЫ: в M68k обратный код.
Добавлено позже:
:lol: Ты ещё поблагодари нас, что мы не стали говорить о Big-Endian, Little-Endian, и float и double :D. Тебе бы это вообще мозг разорвало  :wacko:

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #31 : 13 Сентябрь 2012, 19:11:06 »
Про BE, LE я вроде знаю)

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #32 : 13 Сентябрь 2012, 19:45:29 »
-32768 -1        0  1  32767
 $8000 $FFFF   0  1  7FFF

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #33 : 14 Сентябрь 2012, 02:26:24 »
Вот что дает отладчик:
Если в d0 имеется число 3C46, к примеру, то после SLT в d0 будет $3CFF, а если $8001, то в d0 будет $8000.

Как это все учитывать? И приведите пример ситуации с нулем, и какой результат будет.
Кривой у тебя отладчик. Сначала твои результаты сбили с толку, т.к. под рукой ничего не было. По той доке на зофаре:
Цитата
           Condition Codes set after CMP D0,D1 Instruction.
Relationship      Unsigned                         Signed
D1 <  D0          CS - Carry Bit Set               LT - Less Than
TST d0
аналогично
CMP #0, d0
Так вот, LT должно быть истина (т.е. SLT поставит $FF), если D1 меньше нуля. У тебя наоборот. Так же, как из поста
Цитата
а carry flag это когда из меньшего вычли большее.
следует, что CS (то бишь LT) будет тру, если второй операнд, т.е. d0, меньше первого, т.е. нуля.

Щас написал проверочный код и запустил в генсе. Генс делает, как ожидается.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #34 : 14 Сентябрь 2012, 09:02:50 »
Цитата: GManiac
Кривой у тебя отладчик.

Отладчик от r57Shell'а. Все вопросы к нему)
Добавлено позже:
Странно. На твоем примере оно пашет как ты и говорил.
Может быть я не дал всю ситуацию? Чуть позже я дам значения xnzvc.
Добавлено позже:
Итак:
1) xnzvc - все по нулям;
2) в d0 у нас C64C;
3) tst.w d0 устанавливает N в 1;
4) slt d0 устанавливает d0 в C6FF;
« Последнее редактирование: 14 Сентябрь 2012, 09:23:33 от DrMefistO »

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #35 : 14 Сентябрь 2012, 09:51:48 »
Ну, всё окей.
А ну не гнать на мой отладчик :lol:.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #36 : 14 Сентябрь 2012, 09:56:44 »
В смысле "окей"? Должно же быть наоборот, не?

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #37 : 14 Сентябрь 2012, 10:00:15 »
Вот что дает отладчик:
Если в d0 имеется число 3C46, к примеру, то после SLT в d0 будет $3CFF, а если $8001, то в d0 будет $8000.
Вот тут было что-то подозрительное, а в том что ты сейчас написал, всё окей.

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #38 : 14 Сентябрь 2012, 11:30:19 »
2) в d0 у нас C64C;
3) tst.w d0 устанавливает N в 1;
4) slt d0 устанавливает d0 в C6FF;
Тут всё верно. C64C - отрицательное число. Поэтому ставится FF.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #39 : 14 Сентябрь 2012, 11:34:17 »
Тьфу, а мне чего-то взбрело в голову, что оно положительное) Спасибо за пояснения.

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

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #40 : 14 Сентябрь 2012, 19:43:19 »
Да есть такая, "Геймдев под 68к"

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9375
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #41 : 14 Сентябрь 2012, 21:44:03 »
нене, там геймдев, а тут "вижу две комманды, но не пойму что они делают"  :lol:
кстати спасибо, тема доставила

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #42 : 14 Сентябрь 2012, 23:50:00 »
И вообще, в догонку, DrMefistO, ты же наверно пишешь на x86, x64 системах?
На них абсолютно такие же правила. просто больше байтов.
int a = -1 это 0xFFFFFFFF в памяти.
а теперь отгадайте загадку на эту тему
в каких случаях
int a;
if (a == -a)
    printf("hoho!");
выведет хохо?
Кто не хочет "спойлерить" своё предположение в личку.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #43 : 15 Сентябрь 2012, 00:27:44 »
в каких случаях
int a;
if (a == -a)
    printf("hoho!");
выведет хохо?
Кто не хочет "спойлерить" своё предположение в личку.

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #44 : 15 Сентябрь 2012, 07:31:42 »
Под предыдущим спойлером кроется истина.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #45 : 06 Октябрь 2012, 22:44:08 »
Продолжаю тему. Вопрос касаемо VDP:
ROM:00000580                 move.w  #$C000,($c00004).l
ROM:00000584                 move.w  #$80,-(sp)
ROM:00000588                 move.w  (sp)+,($c00004).l
Что делает данный набор команд? Не нашел в доках описания для первой команды.
« Последнее редактирование: 06 Октябрь 2012, 22:53:22 от DrMefistO »

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #46 : 06 Октябрь 2012, 23:26:21 »
В каких доках? VDP надо смотреть в доках по сеге, а не по 68к. В данном случае в порт C00004 пишется в два шага двойное слово #$C000 0080. В Sega Tech.doc в переводе от HWMan'а ищем C00004, затем запись в этот адрес. Там написано:
ПЕРВЫЙ ВАРИАНТ ЗАПИСИ : УСТАНОВКА РЕГИСТРА
D7   D6   D5   D4
1   0   0   RS4
У нас 1100, нам не подходит.

Нам подходит ВТОРОЙ ВАРИАНТ ЗАПИСИ : УСТАНОВКА АДРЕСА
D7   D6   D5   D4
CD1   CD0   A13   A12
смотрим табличку, понимаем, что у нас "ЗАПИСЬ В CRAM", но CD5 у нас равен 1, а в табличке 0. При этом ниже написано:
Внимание! Код ID CD5 используется при инициализации и запуска сервиса DMA. При этом дополнительной информации обо всех вариантах кода ID нет. Будьте внимательны, в примерах указаны нормальные значения.

Понимай как хочешь.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #47 : 06 Октябрь 2012, 23:28:39 »
Да я в доках по VDP и смотрел. Но чего-то про два шага не подумал) Пасибо)

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #48 : 06 Октябрь 2012, 23:29:30 »
С вопросом по аппаратной части сеги можно сюда
http://gendev.spritesmind.net/forum/index.php

Что за игра хоть? Можно убрать эту команду и посмотреть, как отреагирует эмулятор. Если будут issue с палитрой, значит, эмулятор понимает этот код как запись в CRAM.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #49 : 06 Октябрь 2012, 23:33:52 »
Собственно да, это запись в CRAM[0,0] с использованием DMA. Игра Quackshot.
Добавлено позже:
Т.к. до этого пишутся значения в регистры начальной адресации DMA.

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #50 : 08 Октябрь 2012, 08:48:53 »
такой метод видать для четкой реализации дма.
там же  дма заморочек много вроде записи из рам.
вот они и задействовали стэк, потому что он в рам находится.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #51 : 13 Октябрь 2012, 17:42:44 »
Bad Opcode.
В хексе выглядит как F0 XX. К примеру F0 12. Как игра (Tecmo Cup) понимает такие команды? IDA их не знает. Но это точно код.

Добавлено позже:
Хм, при выполнении F0 12 отладчик идет на RESERV1. Как с этим разобраться?

Еще позже:
Я так понял, что F0 XX - это переход на вектор, где XX - номер вектора. Забавно.

Непонятка:
Но F0 42 куда идет?
« Последнее редактирование: 13 Октябрь 2012, 18:14:53 от DrMefistO »

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #52 : 13 Октябрь 2012, 18:45:04 »
Качай табличку
http://www.emu-land.net/forum/index.php?topic=42330.0

А тут показано, как её можно красиво распечатать :)
http://gendev.spritesmind.net/forum/viewtopic.php?p=12074

Коды Fx не будут работать, точнее, они автоматом сбрасываются на спец. вектор для обработки кодов Fx (один!), но вряд ли в обычных играх он зайдествован.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #53 : 13 Октябрь 2012, 18:55:19 »
Спасибо, конечно, только я не понял, где в этой таблице эти коды?

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #54 : 13 Октябрь 2012, 19:03:45 »
В таблице как раз в группах 1010 и 1111 написано Invalid opcode. Нет таких кодов, они вызывают прерывание на вектора, которые в оригинальных доках называются Line-A emulator и Line-F emulator, и в тех же доках написано, что эти хексы оставлены на будущее или на кастомную реализацию опкодов разработчиком.
Не знаю, с чего ты взял, что
Цитата
Но это точно код.
Не может такого быть. А если есть, значит, вектор в любой случае один, и надо смотреть обработчик в нём.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #55 : 13 Октябрь 2012, 19:07:15 »
Точно код, т.к. посреди процедуры частяком в этой игре встречаются такие опкоды. И очень много F0 XX таких. 100% код. Возможно вектор один всего, это пока не проверил.

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #56 : 13 Октябрь 2012, 19:08:37 »
Называй точно игру и давай свою процедуру. Адрес её. И в каком месте игры вызывается.
В Landstalker тоже часто встречаются байты-некоды посреди процедуры, но они перепрыгиваются предварительным вызовом некой процедурки и увеличением адреса возврата.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #57 : 13 Октябрь 2012, 19:11:40 »
Игра: Tecmo Cup Football (J).bin
Например процедура: адрес процедуры 0x63C, на 0x67E - опкод.
Добавлено позже:
Уверен, что код, т.к. эти опкоды даже не перепрыгиваются. И процедура нормальная.
Добавлено позже:
Вызывается в начале первого матча.

Оффлайн GManiac

  • Пользователь
  • Сообщений: 1284
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #58 : 13 Октябрь 2012, 19:29:01 »
Ну, это тот редкий случай, когда реализован Line-F Emulator :) В обработчике же явно видно, что он берёт нижний байт команды и рассматривает его для прыжка на нужную подпрограмму (массив процедур). Точнее, это хорошо видно в эмуляторе.
_00001A7E: 206F 0002                MOVEA.L   $0002(A7),A0
_00001A82: 3018                     MOVE.W    (A0)+,D0
_00001A84: 2F48 0002                MOVE.L    A0,$0002(A7)
_00001A88: 0240 00FF                ANDI.W    #$00FF,D0
_00001A8C: E548                     LSL.W     #$2,D0
_00001A8E: 207B 0010                MOVEA.L   $00001AA0(pc,D0.W),A0
_00001A92: 4E90                     JSR       (A0)
_00001A94: 40D7                     MOVE      SR,(A7)
_00001A96: 4E73                     RTE       
..
_00001AA0: 0000 0E04
_00001AA4: 0000 0E8A
_00001AA8: 0000 0EAC
_00001AAC: 0000 0ED6
_00001AB0: 0000 0F04
_00001AB4: 0000 0F3E
_00001AB8: 0000 0FD0
_00001ABC: 0000 0FDC
_00001AC0: 0000 0FC4
_00001AC4: 0000 0F78
_00001AC8: 0000 1A9A
_00001ACC: 0000 1A9A
_00001AD0: 0000 100E
_00001AD4: 0000 100C
....

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Нужна помощь по командам M68k
« Ответ #59 : 14 Октябрь 2012, 19:17:54 »
Ну, это тот редкий случай, когда реализован Line-F Emulator :)
А в каких целях разрабы столь извращались? То есть нафига это нужно вообще.
Помню также что в comix zone используются #trap, а 2-байта следом за ним идущие тоже не код, а какие-то свойства для обработки.
Я видел только один опкод который IDA не знает - ori #$700,ccr  и подобное.