• Games
  • TMNT
  • Игры
  • Игры
Главная
Всё для геймера: Обзоры игр, Игровые новости, Читы, Советы и пр.
Всё о компьютерных и консольных играх.
Приветствую Вас Гость
Меню геймера
Разделы каталога
Общие игровые статьи [16]
Игровая аналитика, обзоры серий игр с разных платформ, анализ игр, игровой индустрии и т.д.
Онлайн игры [59]
Статьи и обзоры онлайновых клиентских и браузерных игр
Флэш игры/Flash [11]
2D/3D игры любого жанра на технологии Adobe Flash для игры в плеере или в браузере.
Браузерные онлайн-игры [53]
Браузере игры разных жанров и типов, индивидуальные, а также для социальных сетей и пр.
Разработка игр [41]
Создание игр, программирование, игровые движки, Языки программирования
Моддинг [1]
Модификация игр, перевод, локализация, русификация, ромхакинг
Эмуляция [3]
Эмуляторы и эмуляция компьютеров, консолей, игровых автоматов и прочих систем
Игровые фанфики [1]
Художественная игровая литература, творчество поклонников игр, игровых систем и платформ.
Настольные игры и игрушки [4]
Настольные игры, карточные игры, игрушки и сувениры
Опрос геймеров
Сколько часов в сутки вы играете в игры?
Всего ответов: 13941
Главная » Статьи » Игровые статьи » Разработка игр

Программа для работы с графическим процессором приставки SONY PLAYSTATION
3. Программа для работы с графическим процессором приставки SONY PLAYSTATION

; Программа печати текста на экране Playstation
; с использованием возможностей
; графического процессора
использует шрифт из файла font.bin
; PrintGPU_Dma создает список примитивов, передаваемый
; с использованием прямого доступа к памяти.
; PrintGPU ожидает готовности графического процессора
; и рисует без использования прямого доступа
; к памяти.
; Работает медленнее, но не требует памяти
; для создания списка примитивов.
org $80010000 ; Инициализация аппаратуры.
lui a0, $0800 ; Инициализация GPU,
jal InitGPU ; команда 8.
ori а0,а0,$0009 ; биты 0 и 1 = 01 - ширина экрана 320,
; бит 3 = 1- режим = PAL.
la a0,back ; Рисование фона,
jal SendList nop
jal Loadfont ; Загрузка шрифта, nop
; Рисование с использованием прямого доступа к памяти.
la a0,textl ; a0 = указатель на строку,
li al,$00200018 ; a1 : у«16|х (у=$2 0, х=$2 0) .
li а2,$00808080 ; а2 : фон = 808080 = белый,
jal PrintGPU_dma ; Создание списка примитивов, nop
jal SendList ; Передача с использованием ПДП.
or a0,zero,v0
; Рисование без использования прямого доступа к памяти,
la a0,text2 ; a0 = указатель на строку,
li al,$00600018 ; a1 : у«16|х (у=$2 0, х=$20) .
li а2, $00208080 ; а2 : фон = 808080 = белый.
jal PrintGPU ; Рисование.
nop
self j self nop
textl db "Here",$27,'s yar stuff printed.',$0a,$0d, 'Next line'
db $0a,'Just a linefeed.',$00
text2 db "And here",$27,'s some more text in yellow',$2c
db $0d,$0a,'printed without DMA.'
align 4
dw $0
; Подпрограммы работы с GPU
GP0 equ $1810
GP1 equ $1814
DPCR equ $10f0
DICR equ $10f4
D2_MADR equ $10a0 D2_BCR equ $10a4 D2_CHCR equ $10a8
; InitGPU - основная процедура инициализации ; Параметр: a0 - режим экрана

InitGPU
lui fp,$lf80
or t0,zero,rа
sw zero, GP1(fp) ; Сброс процессора (команда 0).
li t1, $05000000
jal WaitGPU nop
sw t1, GPl(fp)
li t1, $06ca0220 ; Размер по горизонтали (команда 6).
sw t1, GPl(fp) ; $|06|ca0|220 = 336 точек.
li t1, $0704b81e ; Размер по вертикали (команда 7).
sw t1, GPl(fp) ; Начало = $1e, конец = $12e = 272 точки.
sw a0, GP1(fp) ; Установка режима,
nop
li t1, $el0006cf ; Задание параметров рисования.
sw t1, GP0(fp)
; DFE = $1 (разрешено рисование в области экрана). ; DTD = $1 (включен режим смешивания цветов).
; TP = $1 (используется 8-разрядное кодирование цвета в текстурах). ; ABR = $0 (расчет полупрозрачности по формуле 0,5F + 0,5В). ; TY = $0 (координата у памяти текстур = 0 х 256 = 0). ; ТХ = $f (координата х памяти текстур = 15 х 64 = 960) .
li t1, $еЗ000000 ; Установка верхнего левого угла
sw t1, GP0(fp) ; области рисования.
li t1, $e407429f ; Установка правого нижнего угла
sw t1, GP0(fp) ; области рисования.
; X = bit $09 - $00 = $014f $29f. ; Y = bit $13 - $0a = $0110 $110.
li t1, $e5000000
sw t1, GP0(fp)
li t1, $03000000 ; Разрешение вывода изображения.
sw t1, GPl(fp)
or ra,zero,t0
jr ra
nop
; SendList - передача списка примитивов
; Параметр: a0 - адрес списка

SendList
lui fp,$lf80
or t0, zero, ra
li t2, $04000002
jal WaitGPU
nop
lw t3, DPCR(fp)
sw zero, DICR(fp)
ori t3, t3, $0800
sw t3, DPCR(fp)
sw t2, GPl(fp)
sw a0, D2_MADR(fp)
sw zero, D2_BCR(fp)
li tl, $01000401
sw t1, D2_CHCR(fp)
or ra, zero, t0
jr ra nop
; MemtoVRAM - передача графических данных в видеопамять ; in: a0 - адрес данных
; al - координаты х, у (у << 16 | х)
; а2 - высота и ширина w, h (h << 16 | w)
; аЗ - количество копируемых слов

MemtoVRAM
or t4,zero,ra ; Сохранение регистра RA.
jal WaitDone ; Ожидание освобождения видеопроцессора.
nop
or t5,zero,a0 ; Сохранение стартового адреса данных,
lui at,mvll
sw al,mvll(at) ; Установка координат области отображения,
sw a2,mvl2(at) ; Установка размеров области отображения,
lui a0,mvl ; Передача установок,
jal SendList
ori a0,a0,mvl
sll tl,a3,$10 ; Установка количества блоков.
ori tl,tl,$0001 ; Установка размера блока равным слову.
li t2,$01000201 ; Контроллер ПДП передает данные
; из памяти в видеопамять.
jal WaitDMA ; Ожидание освобождения контроллера. пор
sw t5,D2_MADR(fp) ; Установка базового адреса.
sw tl,D2_BCR(fp)
sw t2,D2_CHCR(fp) ; Запуск ПДП
or ra, zero, t4
jr ra
nop
mvl dw $04ffffff
dw $01000000
dw $a0000000 mvl1
dw $00000000
mvl2 dw $00000000
; WaitGPU - ожидание готовности GPU к приему команд

WaitGPU
lui fp,$lf80
lw v1, GP1(fp) ; Загрузка регистра состояния GPU.
lui v0, $1000 ; Проверка разряда $1c.
and v1, v1, v0
beqz v1, WaitGPU ; Пока разряд равен 0, GPU занят,
nop
jr ra
nop
; Waitldle - ожидание, пока GPU простаивает

WaitIdle
lui fp,$lf80
lui v1, $0400
widl lw v0, GP1(fp)
nop
and v0, v0, v1
beqz v0, widl
nop
jr ra
nop
; WaitDone - ожидание освобождения контроллера ПДП и GPU

WaitDone
lui fp, $lf80
wdl lw v0, D2_CHCR(fp)
lui vl, $0100
and v0, v0, vl
bne v0, zero, wdl
nop
wd2 lw v0, GP1(fp)
lui v1l, $0400
and v0, v0, vl
beq v0, zero, WaitDone
nop
jr ra
nop
; WaitDMA - ожидание освобождения контроллера ПДП

WaitDMA
lui fp, $lf80
wdmalp lw v0, D2_CHCR(fp)
lui vl, $0100
and v0, v0, v1
bne v0, zero, wdmalp nop
jr ra nop
txtDMA equ $0000
txtRGB equ $0004
txtX equ $0008
txtY equ $000a
txtU equ $000c
txtV equ $000d
txtClut equ $000e
; PrintGPU_dma - печать строки с использованием контроллера ПДП
; Параметры: а0 - указатель на печатаемую строку,
; a1 - координаты печати, а2 - цвет
; Результат: v0 - указатель на список примитивов

PrintGPU_dma
sw a1,cXY ; Сохранение координат.
lui v0,$7400 ; Установка параметров.
or t2,a2,v0
li t3, 511<<6
la t0,list2 ; t0 = указатель на элемент
; связанного списка.
lui v0,$00ff ; t1 = указатель на следующий элемент
; для контроллера ПДП.
ori v0,v0,$ffff
and tl,t0,v0
lui v0,$0300
or tl,tl,v0
addiu tl,tl,$0010
lh t5,cY
lh t4,cX
addiu t6,t5,$08
lbu v0,$0000(a0) ; Получение символа.
nop
slti vl,v0,$0020
beq vl,zero,pgpuloop
nop
jr ra
addiu v0,zero,-1

pgpuloop
; Поиск координат текстуры.
andi vl,v0,$001f
sll vl,vl,3
srl v0,v0,5
sll v0,v0,4
sw t1,txtDMA(t0) ; Установка указателя для контроллера ПДП.
sw t2,txtRGB(t0)
sh t4,txtX(t0) ; Установка координат.
sh t5,txtY(t0)
sb vl,txtU(t0) ; Установка ширины и высоты.
sb v0,txtV(t0)
sh t3,txtClut(t0) ; Задание цветовой таблицы.
addiu t0,t0,$10 ; Задание указателя на следующий элемент.
addiu t1,t1,$10
addiu v0,v0,$08
sw t1,txtDMA(t0)
sw t2,txtRGB(t0)
sh t4,txtX(t0) sh t6,txtY(t0)
sb v1,txtU(t0)
sb v0,txtV(t0)
addiu t4,t4,$08
addiu a0,a0,$01 ; Следующий символ.
lbu vO,$0000(a0)
sh t3,txtClut(t0) ; Цветовая таблица.

pgpuchk
slti vl,v0,$002 0 ; Управляющий символ?
bgtz vl,pgpucommand ; Переход к обработке команды.
nop
addiu t0,t0,$10 ; Обновление указателей,
j pgpuloop
addiu t1,t1,$10

pgpudone
li tl,$03ffffff ; Завершение списка,
sw tl,txtDMA(t0)
la v0,list ; Возврат адреса списка,
jr ra nop

pgpucommand
beq v0,zero,pgpudone ; Конец строки?
ori v1,zero,$000a ; Новая строка = $0a.
beq v0,v1,pgpuLF
ori v1,zero,$000d ; Возврат каретки = $0d.
beq v0,vl,pgpuCR
nop

pgpunxt
addiu a0,a0,$0001 ; Неизвестная команда?
lbu v0,$0000(a0)
j pgpuchk ; Пропустить, nop

pgpuLF
addiu t6,t6,$0010 ; Обработка новой строки.
j pgpunxt ; Переход к следующему символу.
addiu t5,t5,$0010

pgpuCR lw t4,cX ; Обработка возврата каретки.
j pgpunxt ; Переход к следующему символу.
nop

cXY
сХ dh $0
cY dh $0
; PrintGPU - печать текста без использования контроллера ПДП
; Параметры: а0 - указатель на строку,
; a1 - координаты строки,
; а2 - цвет

PrintGPU
or t0,zero,ra ; Сохранение адреса возврата.
li t1,$el00060f
li t2,$04000000 ; Выключение контроллера ПДП.
jal WaitDone
nop
sw t2,GP1(fp)
nop
sw t1(GP0(fp) ; Указание страницы текстур.
sw a1,c2XY ; Сохранение координат.
lui v0,$7400
or t1,a2,v0
lui t2, 511<<6
lh t4,c2Y
lh t3,c2X
addiu t5,t4,$08
lbu v0,$0000(a0) ; Получение символа.
nop
slti vl,v0,$0020
bne vl,zero,p2gpucommand
nop

p2gpuloop
; Поиск координат текстуры.
andi vl,v0,$001f
sll vl,vl,3
srl v0,v0,5
sll v0,v0,4
sll t9,v0,$8
or t9,t9,vl
or t9,t9,t2
addiu v0,v0,$08
sll t6,v0,$8
or t6,t6,vl
or t6,t6,t2
sll t8,t4,$10
or t8,t8,t3
jal WaitGPU
nop
sw tl,GP0(fp)
sw t8,GP0(fp)
sw t9,GP0(fp)
sll t8,t5,$10
or t8,t8,t3
jal WaitGPU
nop
sw tl,GP0(fp) ; Пересылка данных.
sw t8,GP0(fp)
sw t6,GP0(fp)
addiu t3,t3,$08

p2gpunxt
addiu a0,a0,$01 ; Переход к следующему символу.
lbu v0,$0000(a0)
nop
slti v1,v0,$0020 ; Управляющий символ?
bgtz v1,p2gpucommand
nop
j p2gpuloop ; Переход к рисованию следующего символа.
nop

p2gpudone
or ra,zero,t0 ; Возврат, если все напечатано.
jr ra
nop

p2gpucommand
beq v0,zero,p2gpudone ; Конец строки?
ori v1,zero,$000a
beq v0,v1,p2gpuLF ; Обработка новой строки,
ori v1,zero,$000d
beq v0,v1,p2gpuCR ; Обработка возврата каретки.
Nop ; Пропуск неизвестного символа
j p2gpunxt
p2gpuLF addiu t4,t4,$0010 ; Обработка перевода строки.
j p2gpunxt ; Y = Y + $10.
addiu t5,t5,$0010 p2gpuCR lw t3,c2X ; Обработка возврата каретки.
j p2gpunxt ; X = start X.
nop
c2XY
c2X dh $0
c2Y dh $0
; Загрузка шрифта в видеопамять.

Loadfont
or s0,zero,ra
la a0,img
li al,$000003c0
li a2,$00400040
li a3,$00000800
jal MemtoVRAM
nop
la a0,clut
li al,$01ff0000
li a2,$00010010
li a3,$00000008
jal MemtoVRAM
nop
or ra,zero,s0
jr ra
nop
; Область памяти для списка,

back
dw back2 ,back2>>8 ,back2>>16 , $03
dw $02000000
dw $000003c0
dw $010000fe

back2
dw $08ffffff
dw $38300040
dw $00000000
dw $00250010
dw $00000150
dw $00250010
dw $01100000
dw $00800000
dw $01100150

list db list2 ,list2»8 ,list2»16, $01
dw $el00060f
list2 dw $0
; Рабочие данные. Таблица цветов и изображение шрифта
clut dh $0000,$7fff,$7fff,$7fff,$7fff,$7fff,$7fff,$7fff
dh $7fff,$7fff,$7fff,$7fff,$7fff,$7fff,$7fff,$7fff
img incbin font.bin ; Шрифт.

Категория: Разработка игр | Добавил: G-GURU (11.11.2010)
Просмотров: 1523 | Рейтинг: 5.0/1 |
Вы можете отправить сообщение на e-mail друга:

Интересное геймерам:

Смотрите другие материалы по темам: PlayStation, программа, asm, приставки, PSX, Sony PlayStation, графический, ЗЫЧ, процессор.

Также вам предлагаются схожие с «Программа для работы с графическим процессором приставки SONY PLAYSTATION» материалы:

Если понравился материал «Программа для работы с графическим процессором приставки SONY PLAYSTATION» и вы можете обсудить его ниже.

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск информации
Игровые братья
Создание игр, Конструкторы игр, Игровые движки Перевод консольных игр Скачать файлы: софт, видео Игорный бизнес в России Разработка игр в СНГ Пранк - телефонные шутки
10 новых описаний
Hello, Neighbour
Как провести время на конференции наиболее эффективно
WarCraft Adventures: Lord of the Clans
Во что я люблю играть – гоняю эмуляторы!
Империю Онлайн 2: Халифат
Купля-продажа аккаунтов MMOG
Инди-игрострой почти мёртв
Hearthstone - игра от создателей легендарного Warcraft
Моё знакомство с играми в жанре квест
Картридж 500 in 1 для Dendy / Famicom
Все права сохранены за сайтом GFAQ.ru © 2016. Games Frequently Asked Questions
Полные прохождения, Секреты, Коды, Пароли, Советы, Уловки, Читы, Описания для Компьютерных и Консольных Игр. Хостинг от uCoz
Обращаем особое внимание на то, что при цитировании и размещении данных текстовых материалов, обязательно прикрепляйте ссылку на официальный сайт "GFAQ.ru".