aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/psxgpu/setvideomode.s
diff options
context:
space:
mode:
authorJohn Wilbert M. Villamor <lameguy64@gmail.com>2019-04-06 10:11:07 +0800
committerJohn Wilbert M. Villamor <lameguy64@gmail.com>2019-04-06 10:11:07 +0800
commitf3e040230772f978540a71aea43dfde200992922 (patch)
treebd8ca31b72dd01e24980b073854e263589530f56 /libpsn00b/psxgpu/setvideomode.s
downloadpsn00bsdk-f3e040230772f978540a71aea43dfde200992922.tar.gz
First commit
Diffstat (limited to 'libpsn00b/psxgpu/setvideomode.s')
-rw-r--r--libpsn00b/psxgpu/setvideomode.s50
1 files changed, 50 insertions, 0 deletions
diff --git a/libpsn00b/psxgpu/setvideomode.s b/libpsn00b/psxgpu/setvideomode.s
new file mode 100644
index 0000000..718a4dd
--- /dev/null
+++ b/libpsn00b/psxgpu/setvideomode.s
@@ -0,0 +1,50 @@
+.set noreorder
+
+.include "hwregs_a.h"
+
+
+.section .text
+
+.global SetVideoMode
+.type SetVideoMode, @function
+SetVideoMode:
+ addiu $sp, -4
+ sw $ra, 0($sp)
+
+ jal ReadGPUstat
+ nop
+
+ srl $a1, $v0, 17
+ andi $a1, 0x1f
+
+ srl $v1, $v0, 14 # Reverse flag
+ andi $v1, 1
+ sll $v1, 6
+ or $a1, $v1
+
+ srl $v1, $v0, 16 # Horizontal resolution 2
+ andi $v1, 1
+ sll $v1, 6
+ or $a1, $v1
+
+ andi $a1, 0xf7 # Mask off PAL bit
+
+ la $v0, _gpu_standard
+ beqz $a0, .set_done
+ sw $0 , 0($v0)
+ li $v1, 1
+ sw $v1, 0($v0)
+ b .set_done
+ or $a1, 0x8
+.set_done:
+
+ lui $v0, 0x800 # Apply new mode
+ or $a1, $v0
+ lui $v0, IOBASE
+ sw $a1, GP1($v0)
+
+ lw $ra, 0($sp)
+ addiu $sp, 4
+ jr $ra
+ nop
+