Автор Тема: SSIG - Sega Saturn Instructions Generator  (Прочитано 3785 раз)

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

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8109
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« : 14 Декабрь 2017, 14:04:14 »
SSIG - Sega Saturn Instructions Generator
Данная программа позволяет легко сгенерировать инструкции, поддерживаемые процессором SH-1/SH-2 (Super Hitachi), в машинный код. Также имеется краткое описание инструкций и регистров.

203808-0
« Последнее редактирование: 23 Ноябрь 2018, 12:50:25 от paul_met »

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1598
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #1 : 15 Декабрь 2017, 02:51:05 »
SSIG - Sega Saturn Instructions Generator
Что-то знакомое? :? Приятно видеть развитие идей. Переключатели инструкций радуют. :D
Теперь и Sega Saturn заполучила полезную тулзу, облегчающую труд отважных воинов. :thumbup:

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8109
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #2 : 15 Декабрь 2017, 09:24:50 »
Что-то знакомое? :? Приятно видеть развитие идей. Переключатели инструкций радуют. :D
Теперь и Sega Saturn заполучила полезную тулзу, облегчающую труд отважных воинов. :thumbup:
Давно была идея сделать удобный генератор. А то надоело постоянно лазить в доку, искать нужную инструкцию и перебивать вручную двоичный код в hex.

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8109
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #3 : 16 Ноябрь 2018, 16:51:41 »
Обновление утилиты. Список изменений прилагается.

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9386
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #4 : 17 Ноябрь 2018, 03:34:32 »
полезная прога.

возможно кто-то тут пишет больше чем пару-тройку команд, тогда удобнее использовать полноценный GNU ассемблер. в аттаче боекомплект и пример - запустить build.cmd -> test.s скомпилируется в test.bin (SH2 big endian)

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8109
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #5 : 17 Ноябрь 2018, 10:41:50 »
возможно кто-то тут пишет больше чем пару-тройку команд, тогда удобнее использовать полноценный GNU ассемблер. в аттаче боекомплект и пример - запустить build.cmd -> test.s скомпилируется в test.bin (SH2 big endian)
Спасибо, пригодится.

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9386
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #6 : 17 Ноябрь 2018, 23:01:51 »
та не за что.
заметил ошибочки в описаниях команд перехода относительно PC, они должны быть PC = PC + disp*2 + 4

еще может быть полезно - список команд всего семейства SuperH от SH1 до SH4A и их разновидностей (опкоды кликабельны)
http://www.shared-ptr.com/sh_insns.html

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8109
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #7 : 18 Ноябрь 2018, 00:47:44 »
заметил ошибочки в описаниях команд перехода относительно PC, они должны быть PC = PC + disp*2 + 4
В каких именно командах? Описание бралось из доки, но в сокращённом виде (всё, что влезало в окошко).

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9386
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #8 : 18 Ноябрь 2018, 01:04:04 »
всё Branch относительно PC, к примеру - Undelayed branching to (disp x 2 + PC), должно быть (disp x 2 + PC + 4)

еще в описании BSR-ов и JSR ошибочки - sets (PR = PC + 2), должно быть (PR = PC + 4)

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8109
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #9 : 18 Ноябрь 2018, 09:10:22 »
всё Branch относительно PC, к примеру - Undelayed branching to (disp x 2 + PC), должно быть (disp x 2 + PC + 4)

еще в описании BSR-ов и JSR ошибочки - sets (PR = PC + 2), должно быть (PR = PC + 4)
У Сеги, видимо, когда писали доки, кое-что так и осталось в уме, не попав на бумагу. По крайней мере, код генерируется корректно.
« Последнее редактирование: 19 Ноябрь 2018, 12:39:54 от paul_met »

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8109
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #10 : 19 Ноябрь 2018, 12:36:37 »
MetalliC, Раз уж ты в теме, то, может, подскажешь в чём может быть загвоздка в использовании регистра R0? Прикрепил скрины из дебаггера Меднафена (шаг за шагом). На последнем скрине происходит какая-то хрень - возвращение к предыдущей процедуре игнорируется, вместо чего мы попадаем неизвестно куда. Но стоит заменить регистр R0 на R1 (на первых двух скринах - т.е. грузим адрес для прыжка в R1 вместо R0), как всё работает корректно. И да, это только у Меднафена такие приключения. Но так как он считается самым точным на сегодня, то мало ли. может, я чего не догоняю. На форум Меднафена пока постить лень, может, тут разберёмся.

203625-0 203627-1 203629-2 203631-3 203633-4 203635-5

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9386
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #11 : 19 Ноябрь 2018, 20:17:59 »
вот в чём у тебя ошибка -
jsr @r0
mov.w @r1, r1

при этом регистр r1 = 0x0000000B, MOV.W находится в delay-слоте и выполняется до JSR, SuperH-процессоры могут читать лишь выровненные данные, т.е. MOV.W может читать лишь с четных адресов, при попытке чтения из адреса 0x0B процессор выпадет в исключение.

в эмуляторах обычно такие вещи игнорируются, но у Mednafen похоже сносит крышку.

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8109
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #12 : 19 Ноябрь 2018, 21:39:43 »
вот в чём у тебя ошибка -
jsr @r0
mov.w @r1, r1

при этом регистр r1 = 0x0000000B, MOV.W находится в delay-слоте и выполняется до JSR, SuperH-процессоры могут читать лишь выровненные данные, т.е. MOV.W может читать лишь с четных адресов, при попытке чтения из адреса 0x0B процессор выпадет в исключение.

в эмуляторах обычно такие вещи игнорируются, но у Mednafen похоже сносит крышку.
Вот оно что, а я и не обратил внимание на этот оставшийся хвост. Только не понятно, почему у него "снесло крышу" после RTS, а не  раньше.

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9386
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #13 : 19 Ноябрь 2018, 21:54:36 »
без понятия, это скорее вопрос к авторам меднафена.
на реальной железке до перехода на процедуру дело не дойдет, при попытке MOV.W проц сохранит на стеке PC и SR, считает 32бит значение по адресу VBR+24h и прыгнет на него.

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8109
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #14 : 20 Ноябрь 2018, 08:27:03 »
по адресу VBR+24h и прыгнет на него.
А почему именно по этому адресу? Что там хранится?

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9386
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #15 : 20 Ноябрь 2018, 18:49:00 »
так устроен этот процессор.
регистр VBR указывает на таблицу векторов прерываний, исключений, сброса итп.
при их возникновении процессор сохраняет некоторые регистры, читает 32бит значение по адресу VBR+xxx и переходит на него.
в случае чтения 16бит слова с нечетного адреса (или 32бит с не кратного четырем) возникает исключение "CPU address error", его адрес - 24h, т.е. VBR+24h

почитать об этом можно в sh7095.pdf Section 4 Exception processing

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8109
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #16 : 20 Ноябрь 2018, 20:42:27 »
так устроен этот процессор.
регистр VBR указывает на таблицу векторов прерываний, исключений, сброса итп.
при их возникновении процессор сохраняет некоторые регистры, читает 32бит значение по адресу VBR+xxx и переходит на него.
в случае чтения 16бит слова с нечетного адреса (или 32бит с не кратного четырем) возникает исключение "CPU address error", его адрес - 24h, т.е. VBR+24h

почитать об этом можно в sh7095.pdf Section 4 Exception processing
Полезная инфа, приму к сведению.

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8109
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #17 : 23 Ноябрь 2018, 12:54:00 »
Обновил прогу по замечанием выше и не только. ;)


Оффлайн Mr2

  • Пользователь
  • Сообщений: 1598
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
SSIG - Sega Saturn Instructions Generator
« Ответ #18 : 02 Декабрь 2018, 08:36:10 »
По дизайну:
Мне кажется, лог лучше сделать в отдельной вкладке. ;)