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

Программа для работы с графическим процессором приставки 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)
Просмотров: 2313 | Рейтинг: 5.0/1 |
Вы можете отправить сообщение на e-mail друга:

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

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

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

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

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск информации
Игровые братья
Создание игр, Конструкторы игр, Игровые движки Перевод консольных игр Скачать файлы: софт, видео Разработка игр в СНГ Пранк - телефонные шутки
10 новых описаний
Выгодно купить подарки в США, которых нет в РФ
Не забывайте про SEO продвижение для вашего сайта
Про российское кино и что же лучше посмотреть на Новый год
Для хобби или бизнеса вам все равно нужен собственный сайт
Apple уйдёт из РФ, стоит ремонтировать свои iPhone?
Резидент – популярный слот про шпиона
В какие умные игры я играю, и какие из них купил со скидками
Изобразительное искусство в компьютерных играх
A Plague Tale: Innocence
В процессе реализации игры на картриджах для Sega Mega Drive
Реалии нашего сельского хозяйства против «Farming Simulator»
Самое время сделать апгрейд своего ПК
Пробный урок любого из 80 курсов ЕШКО
Какие онлайн игры лучше, и кому стоит играть World of Tanks
Про мейнстримность постапокалипсис-серий «Fallout» и «STALKER»
Все права сохранены за сайтом GFAQ.ru © 2019. Games Frequently Asked Questions
Полные прохождения, Секреты, Коды, Пароли, Советы, Уловки, Читы, Описания для Компьютерных и Консольных Игр. Хостинг от uCoz
Обращаем особое внимание на то, что при цитировании и размещении данных текстовых материалов, обязательно прикрепляйте ссылку на официальный сайт "GFAQ.ru".