| Разработка и ромхакинг > Программирование |
| Ассемблер для PS2. |
| (1/2) > >> |
| Томахомэ:
Решил туточки написать модуль Emotion Engine для очень любимого мной ассемблера ASMX за авторством Брюса Томлина - инструмента очень, я бы так сказал, уютного: сверхпортативного, с простым синтаксисом, не склонного, в отличие от gas'а, перевирать набранный в исходнике код при сборке, и транслирующий его сразу в бинарник без посредства объектных файлов. Работа ведётся на основе модифицированного asmarm.c, поскольку ARM пока что в списке архитектур ASMX - единственный RISC, и вот от него-то и приходится плясать, делая поправки на все архитектурные различия с MIPS (причём, что самое смешное, у последнего структура опкода даже проще, чем у ARM). Выложенный ниже вариант - он пока ещё сильно-сильно промежуточный, где и "хвосты" от ARM далеко не все подтёрты, и ряд команд ещё только предстоит добавить. Работа ведётся в режиме реального времени, и если где-то чего-то упущу - сигнальте. Опирался я главным образом на официальные доки самой Sony (см. последние 2 прикрепления). |
| Sharpnull:
Стоит сравнить с armips. |
| Томахомэ:
Чистка продолжается. |
| Беларус:
Я правильно понял, что ASMX - это общий синтаксис ассемблера для разных архитектур? Типа, пишешь MOV, и для каждой архитектуры создаётся своя инструкция копирования? Если так, что с инструкциями, которые есть только в определённых архитектурах? А за официальные мануалы к PS2 огромное спасибо - когда-то перерыл кучу материала по этой приставке, а на эти, почему-то, не наткнулся. Добавлено позже: Оказывается, даже тут в 2016 упоминалась эта штука: emu-land.net/forum/index.php?topic=76637.0 --- Цитата ---This is a multi-CPU macro assembler for many major 8-bit and 16-bit CPUs, which can assemble code for multiple CPUs in the same source file. --- Конец цитаты --- Странно, что со временем не появился x86, ведь 68k есть, а он тоже сложный. А отсутствующие инструкции можно было бы автоматически заменять на несколько более простых, наверно. Эмулировать, т.е. |
| Томахомэ:
И ещё. |
| Томахомэ:
Привёл в собирабельный вид и интегрировал в ASMX, однако ждать адекватной работы пока рано - впереди ещё длинная полоса тестов. |
| DrMefistO:
Сорсы не хочешь выложить на Github в виде форка?) Так может какие умельцы ещё подтянутся. |
| Томахомэ:
Команды перехода по абсолютному адресу работают как надо. Проверялось, если кому любопытно, через подставной псевдобиос, специально занесённый в базу биосов приватной сборки MAME, где дебаггер, на мой взгляд, самый удобный. А вот вполне прописанные регистры MIPS мой ассемблер почему-то воспринимает как несуществующие. Где тут я и чего напортачил? |
| Томахомэ:
Тааааак, дела вроде пошли на лад - хоть для этого и пришлось скачать изначальный сорс asmarm.c ещё раз и взяться за его переписку заново, в истерическом темпе, почти в мыле, несколько раз оказавшись в шаге от закипания мозга и выкрутив всю свою личную память и внимательность на максимум. Проверка на работоспособность идёт не для каждой команды в отдельности, а по типам опкода. Если удастся довести до конца, следующей архитектуркой подвезут PowerPC - для Sega Model 3 и всего 7-го поколения консолей. |
| SeregaZ:
и прям будет что любые математические операции в виде параметров - все сожрет и неподавится? |
| Томахомэ:
--- Цитата: SeregaZ от 25 Октябрь 2024, 15:51:12 ---и прям будет что любые математические операции в виде параметров - все сожрет и неподавится? --- Конец цитаты --- Ээээээм... Немножко не понял. |
| SeregaZ:
ну типа move a1, d1 как бы простое и понятное. а что насчет сложных случаев типа move a1, d1 + 100 + (a3 / 2) * 8 ? вот такого плана. а то я тоже хотел для своего дизассемблера сразу и ассемблер чтоб был... и как бы простые базовые случае регуляркой вполне себе... но когда начинается всякая порнография с математическими операциями внутри одного параметра, то я расстраиваюсь :) |
| Томахомэ:
--- Цитата: SeregaZ от 25 Октябрь 2024, 16:29:07 ---ну типа move a1, d1 как бы простое и понятное. а что насчет сложных случаев типа move a1, d1 + 100 + (a3 / 2) * 8 ? вот такого плана. а то я тоже хотел для своего дизассемблера сразу и ассемблер чтоб был... и как бы простые базовые случае регуляркой вполне себе... но когда начинается всякая порнография с математическими операциями внутри одного параметра, то я расстраиваюсь :) --- Конец цитаты --- Одной командой ассемблера, в отличие от высокоуровневых языков, такое не сделать точно, нужна целая цепь операций. |
| Sharpnull:
--- Цитата: SeregaZ от 25 Октябрь 2024, 16:29:07 ---что насчет сложных случаев типа move a1, d1 + 100 + (a3 / 2) * 8 ? --- Конец цитаты --- Используйте компилятор C. Обычно ассемблеры не генерируют инструкции, не считая псевдоинструкций и макросов. Но вычислимые выражения на основе меток и констант должны поддерживаться как (пример для armips): --- Код: ---a equ 0x13 .org 800121C0h lui v0, 0x800d + 100 + (a / 2) * 8 ; На выходе lui v0, 0x80b9 --- Конец кода --- Можете поискать промежуточный язык, который сложнее ассемблера, но проще C и поэтому быстрее, для NES есть https://pubby.games/nesfab.html, для 6502, Z80 и др. https://github.com/KarolS/millfork. |
| SeregaZ:
блин... сложно спросить то, чего не понимаю толком сам :) попытаюсь еще раз: тут не про разные функции - как бы функция всего одна, просто параметр должен быть результатом каких-то математических вычислений. вот будет ли это тут работать? а то было бы интересно как этот просчет реализован... чтобы потом спереть в свой проект типа как для ASM68K.exe можно указать что-то типа такого: --- Код: ---units_vram1: dc.w units_vram units_size1: dc.w units_spr_end-units_spr units_vram2: dc.w base2*32 score_pics_gfx: dc.w (scend-scptr)/32 cmpa.l #(Z80RAM+$2000),a1 --- Конец кода --- типа первая строчка все понятно. а вот вторая и далее - швах :) в качестве параметра - математические операции. и это причем ладно еще простые операции, но ведь математика может быть гораздо сложнее. вот по идее нужен алгоритм, который бы читал параметр, и делал вывод - это просто одиночный параметр, а это математическая операция, которую надо посчитать, причем еще и в правильном порядке - типа сначала умножение, а плюс минус во вторую очередь. или если там есть скобки - в скобках отдельно... Добавлено позже: --- Цитата: Sharpnull от 25 Октябрь 2024, 17:32:43 ---Используйте компилятор C. --- Конец цитаты --- тото и оно что хотелось бы свою реализацию, ну или в крайнем случае библиотеку, чтоб типа послал ей строчку в качестве параметра "0x800d + 100 + (a / 2) * 8" а она посчитала и вернула, без необходимости городить свой огород по просчету. вот что меня опечалило, когда начал писать ассемблер. |
| Sharpnull:
--- Цитата: SeregaZ от 25 Октябрь 2024, 17:33:18 ---типа первая строчка все понятно. а вот вторая и далее - швах --- Конец цитаты --- Это обычные возможности нормального ассемблере. Скачайте asmx и проверьте, какие-то операции поддерживаются https://github.com/db-electronics/asmx/blob/master/asmx-doc.html. --- Цитата: SeregaZ от 25 Октябрь 2024, 17:33:18 ---тото и оно что хотелось бы свою реализацию, ну или в крайнем случае библиотеку, чтоб типа послал ей строчку в качестве параметра "0x800d + 100 + (a / 2) * 8" а она посчитала и вернула, без необходимости городить свой огород по просчету. вот что меня опечалило, когда начал писать ассемблер. --- Конец цитаты --- Есть ассемблеры, остаётся интегрировать в вашу программу. Если хотите сами написать, то учитесь писать ассемблеры (парсеры и т. п.). Не вижу проблем. |
| Mr2:
--- Цитата: SeregaZ от 25 Октябрь 2024, 17:33:18 ---параметр должен быть результатом каких-то математических вычислений. --- Конец цитаты --- Это хорошо в плане ускорения записи, но плохо в плане сопровождения: --- Код: --- lui v0, 0x80b9 lui v0, 0x800d + 100 + (a / 2) * 8 --- Конец кода --- Также вычисления будут замедлять компиляцию. |
| SeregaZ:
ну а как по другому, если там будут, к примеру, сложены плавающие адреса, которые станут известны только после компиляции? после первого прохода в смысле. поэтому ладно уж скорость замедлится - главное чтобы система могла такое переварить и в итоге родить рабочий и верный код :) и все равно когда начинаю думать как реализовать такую поддержку математики в качестве параметра - попаболь начинается такая, что думать сразу уже и не хочется :) так и валяется недоделанным уже который год... |
| Mr2:
--- Цитата: SeregaZ от 25 Октябрь 2024, 20:16:09 ---что думать сразу уже и не хочется --- Конец цитаты --- Такое у тебя наблюдается в каждой теме. :lol: |
| SeregaZ:
это нормально :blush: у творческого человека мысль должна вызреть, дойти до кондиции, и потом заночь забабахать. главное за это время пока оно который год уже зреет - все не забыть, что сделано было ранее. а то сто раз такое было - открываешь проект... это я написал? а что я хотел сказать этим участком кода? а вот этим? а это для чего?... |
| Навигация |
| Главная страница сообщений |
| Следующая страница |