Автор Тема: Ассемблер для PS2.  (Прочитано 1273 раз)

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

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 847
  • Пол: Мужской
    • Просмотр профиля
Ассемблер для PS2.
« Ответ #30 : 19 Декабрь 2024, 13:05:07 »
тебе в какой регистр грузить то надо?

Загрузить число $4000000 (адрес регистра DISPCNT у GBA) в R0 - чтобы подготовиться к переводу в режим битмэпа. А ведь кроме DISPCNT,  видеорегистов есть ещё штук 40 (то есть с адресами $40000xx), и фиг ещё знает, какие понадобятся в дальнейшем - в случае с ними одной прокруткой точно не обойдётся.

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 847
  • Пол: Мужской
    • Просмотр профиля
Ассемблер для PS2.
« Ответ #31 : 25 Декабрь 2024, 07:43:34 »
Таааак, с загрузкой больших чисел в регистры вроде разобрался (хоть эта процедура и получилась очень уж многоступенчатой),  и даже с прерываниями. Остаётся только вопрос - почему выбранный кусок изображения всё ещё не выводится на экран?

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 847
  • Пол: Мужской
    • Просмотр профиля
Ассемблер для PS2.
« Ответ #32 : 01 Февраль 2025, 04:55:25 »
Пошуровав немного по официальной документации по PS2 (см. прикрепления), решил проверить на работоспособность код отрисовки простейшего прямоугольника.
org $bfc00000
lui t0, $1000
ori t0, t0, $3000
addi t1, t1, $6
sb t1, 0(t0)
addi t1, zero, $ffff
lui t1, $ff
addi t3, t3, $100
lui t4, $100
sb t1, 1(t0)
sb t2, 5(t0) ; 1st vertex
or t5, t4, t3
sb t1, 1(t0)
sb t5, 5(t0) ; 2nd vertex
sb t1, 1(t0)
sb t4, 5(t0) ; 3rd vertex
sb t1, 1(t0)
sb t3, 5(t0) ; 4th vertex
j $

Поскольку формировать исполняемые файлы я ещё не научился, скормить код решил попробовать через подставной псевдобиос. При таком раскладе экран почему-то (проверял на PCSX2) как был, так и остаётся чёрным. Никаких предварительных действий для активации экрана делать не надо?

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 847
  • Пол: Мужской
    • Просмотр профиля
Ассемблер для PS2.
« Ответ #33 : 27 Март 2025, 14:08:22 »
Решил тут в ассемблерном модуле для PowerPC реализовать полноценную поддержку постфиксов o, ., a, l, и т. д., чтобы сэкономить размер на базе опкодов и немножечко даже на коде. Однако, почему-то если без постфикса собранный ассемблер ещё нужную инструкцию воспринимает, то с постфиксом - один сплошной Illegal opcode.
Пробовал я реализовать поддержку постфиксов разными способами, начиная с этого - oldLine=linePtr;
             if (GetWord(word) == 'O') parm=parm|0x400;
             else linePtr=oldLine;
             if (GetWord(word) == '.') parm=parm|1;
             else linePtr=oldLine;
- однако ни один по итогу не сработал.

В текущем своём сильно промежуточном состоянии ассемблерный модуль PPC прикреплён ниже.