| Разработка и ромхакинг > Ромхакинг и программирование |
| SSIG - Sega Saturn Instructions Generator |
| (1/1) |
| paul_met:
SSIG - Sega Saturn Instructions Generator Данная программа позволяет легко сгенерировать инструкции, поддерживаемые процессором SH-1/SH-2 (Super Hitachi), в машинный код. Также имеется краткое описание инструкций и регистров. |
| Mr2:
--- Цитата: paul_met от 14 Декабрь 2017, 14:04:14 ---SSIG - Sega Saturn Instructions Generator --- Конец цитаты --- Что-то знакомое? :? Приятно видеть развитие идей. Переключатели инструкций радуют. :D Теперь и Sega Saturn заполучила полезную тулзу, облегчающую труд отважных воинов. :thumbup: |
| paul_met:
--- Цитата: Mr2 от 15 Декабрь 2017, 02:51:05 ---Что-то знакомое? :? Приятно видеть развитие идей. Переключатели инструкций радуют. :D Теперь и Sega Saturn заполучила полезную тулзу, облегчающую труд отважных воинов. :thumbup: --- Конец цитаты --- Давно была идея сделать удобный генератор. А то надоело постоянно лазить в доку, искать нужную инструкцию и перебивать вручную двоичный код в hex. |
| paul_met:
Обновление утилиты. Список изменений прилагается. |
| MetalliC:
полезная прога. возможно кто-то тут пишет больше чем пару-тройку команд, тогда удобнее использовать полноценный GNU ассемблер. в аттаче боекомплект и пример - запустить build.cmd -> test.s скомпилируется в test.bin (SH2 big endian) |
| paul_met:
--- Цитата: MetalliC от 17 Ноябрь 2018, 03:34:32 ---возможно кто-то тут пишет больше чем пару-тройку команд, тогда удобнее использовать полноценный GNU ассемблер. в аттаче боекомплект и пример - запустить build.cmd -> test.s скомпилируется в test.bin (SH2 big endian) --- Конец цитаты --- Спасибо, пригодится. |
| MetalliC:
та не за что. заметил ошибочки в описаниях команд перехода относительно PC, они должны быть PC = PC + disp*2 + 4 еще может быть полезно - список команд всего семейства SuperH от SH1 до SH4A и их разновидностей (опкоды кликабельны) http://www.shared-ptr.com/sh_insns.html |
| paul_met:
--- Цитата: MetalliC от 17 Ноябрь 2018, 23:01:51 ---заметил ошибочки в описаниях команд перехода относительно PC, они должны быть PC = PC + disp*2 + 4 --- Конец цитаты --- В каких именно командах? Описание бралось из доки, но в сокращённом виде (всё, что влезало в окошко). |
| MetalliC:
всё 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:
--- Цитата: MetalliC от 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:
MetalliC, Раз уж ты в теме, то, может, подскажешь в чём может быть загвоздка в использовании регистра R0? Прикрепил скрины из дебаггера Меднафена (шаг за шагом). На последнем скрине происходит какая-то хрень - возвращение к предыдущей процедуре игнорируется, вместо чего мы попадаем неизвестно куда. Но стоит заменить регистр R0 на R1 (на первых двух скринах - т.е. грузим адрес для прыжка в R1 вместо R0), как всё работает корректно. И да, это только у Меднафена такие приключения. Но так как он считается самым точным на сегодня, то мало ли. может, я чего не догоняю. На форум Меднафена пока постить лень, может, тут разберёмся. |
| MetalliC:
вот в чём у тебя ошибка - jsr @r0 mov.w @r1, r1 при этом регистр r1 = 0x0000000B, MOV.W находится в delay-слоте и выполняется до JSR, SuperH-процессоры могут читать лишь выровненные данные, т.е. MOV.W может читать лишь с четных адресов, при попытке чтения из адреса 0x0B процессор выпадет в исключение. в эмуляторах обычно такие вещи игнорируются, но у Mednafen похоже сносит крышку. |
| paul_met:
--- Цитата: MetalliC от 19 Ноябрь 2018, 20:17:59 ---вот в чём у тебя ошибка - jsr @r0 mov.w @r1, r1 при этом регистр r1 = 0x0000000B, MOV.W находится в delay-слоте и выполняется до JSR, SuperH-процессоры могут читать лишь выровненные данные, т.е. MOV.W может читать лишь с четных адресов, при попытке чтения из адреса 0x0B процессор выпадет в исключение. в эмуляторах обычно такие вещи игнорируются, но у Mednafen похоже сносит крышку. --- Конец цитаты --- Вот оно что, а я и не обратил внимание на этот оставшийся хвост. Только не понятно, почему у него "снесло крышу" после RTS, а не раньше. |
| MetalliC:
без понятия, это скорее вопрос к авторам меднафена. на реальной железке до перехода на процедуру дело не дойдет, при попытке MOV.W проц сохранит на стеке PC и SR, считает 32бит значение по адресу VBR+24h и прыгнет на него. |
| paul_met:
--- Цитата: MetalliC от 19 Ноябрь 2018, 21:54:36 ---по адресу VBR+24h и прыгнет на него. --- Конец цитаты --- А почему именно по этому адресу? Что там хранится? |
| MetalliC:
так устроен этот процессор. регистр VBR указывает на таблицу векторов прерываний, исключений, сброса итп. при их возникновении процессор сохраняет некоторые регистры, читает 32бит значение по адресу VBR+xxx и переходит на него. в случае чтения 16бит слова с нечетного адреса (или 32бит с не кратного четырем) возникает исключение "CPU address error", его адрес - 24h, т.е. VBR+24h почитать об этом можно в sh7095.pdf Section 4 Exception processing |
| paul_met:
--- Цитата: MetalliC от 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:
Обновил прогу по замечанием выше и не только. ;) |
| Mr2:
По дизайну: Мне кажется, лог лучше сделать в отдельной вкладке. ;) |
| Навигация |
| Главная страница сообщений |