Программа для работы с графическим процессором приставки 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 - координаты х, у (у >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 ; Шрифт.
1025 Прочтений • [Программа для работы с графическим процессором приставки SONY PLAYSTATION] [19.05.2012] [Комментариев: 0]