mirror of
https://gitlab.com/octtspacc/OcttBitsOfFun
synced 2025-06-05 21:59:28 +02:00
Full PS1 ASM Hello World with PsyQ
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,2 +1,6 @@
|
|||||||
*.o
|
*.o
|
||||||
|
*.ps1.bin
|
||||||
*.exe
|
*.exe
|
||||||
|
|
||||||
|
/PrismPs1
|
||||||
|
/saltelsasso.ps1
|
||||||
|
@@ -1,90 +0,0 @@
|
|||||||
// Demonstrate DISP/DRAW env, font setup, and display a text.
|
|
||||||
// Schnappy 2020
|
|
||||||
// Based on Lameguy64 tutorial : http://lameguy64.net/svn/pstutorials/chapter1/1-display.html
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <libgte.h>
|
|
||||||
#include <libetc.h>
|
|
||||||
#include <libgpu.h>
|
|
||||||
#define VMODE 1 // Video Mode : 0 : NTSC, 1: PAL
|
|
||||||
#define SCREENXRES 320 // Screen width
|
|
||||||
#define SCREENYRES 240 // Screen height
|
|
||||||
#define CENTERX SCREENXRES/2 // Center of screen on x
|
|
||||||
#define CENTERY SCREENYRES/2 // Center of screen on y
|
|
||||||
#define FONTSIZE 8 * 7 // Text Field Height
|
|
||||||
//DISPENV disp[2]; // Double buffered DISPENV and DRAWENV
|
|
||||||
//DRAWENV draw[2];
|
|
||||||
extern DISPENV disp[2];
|
|
||||||
extern DRAWENV draw[2];
|
|
||||||
short db = 0; // index of which buffer is used, values 0, 1
|
|
||||||
|
|
||||||
//extern void HelloMain();
|
|
||||||
|
|
||||||
// void SetDefDispEnv1(DISPENV *disp_, int x,int y,int yy)
|
|
||||||
// {
|
|
||||||
// SetDefDispEnv(disp_, x,y, SCREENXRES,yy);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// void Print12345(char c1,char c2,char c3,char c4,char c5)
|
|
||||||
// {
|
|
||||||
// char str[6];
|
|
||||||
// str[0] = c1;
|
|
||||||
// str[1] = c2;
|
|
||||||
// str[2] = c3;
|
|
||||||
// str[3] = c4;
|
|
||||||
// str[4] = c5;
|
|
||||||
// str[5] = 0;
|
|
||||||
// FntPrint(str);
|
|
||||||
// }
|
|
||||||
|
|
||||||
void c_init(void)
|
|
||||||
{
|
|
||||||
//ResetGraph(0); // Initialize drawing engine with a complete reset (0)
|
|
||||||
//SetDefDispEnv1(&disp[0]);
|
|
||||||
//SetDefDispEnv(&disp[0], 0, 0 , SCREENXRES, SCREENYRES); // Set display area for both &disp[0] and &disp[1]
|
|
||||||
//SetDefDispEnv(&disp[1], 0, SCREENYRES, SCREENXRES, SCREENYRES); // &disp[0] is on top of &disp[1]
|
|
||||||
//SetDefDrawEnv(&draw[0], 0, SCREENYRES, SCREENXRES, SCREENYRES); // Set draw for both &draw[0] and &draw[1]
|
|
||||||
//SetDefDrawEnv(&draw[1], 0, 0 , SCREENXRES, SCREENYRES); // &draw[0] is below &draw[1]
|
|
||||||
//if (VMODE) // PAL
|
|
||||||
//{
|
|
||||||
// SetVideoMode(MODE_PAL);
|
|
||||||
// disp[0].screen.y += 8; // add offset : 240 + 8 + 8 = 256
|
|
||||||
// disp[1].screen.y += 8;
|
|
||||||
//}
|
|
||||||
//SetDispMask(1); // Display on screen
|
|
||||||
setRGB0(&draw[0], 32, 32, 32); // set color for first draw area
|
|
||||||
setRGB0(&draw[1], 32, 32, 32); // set color for second draw area
|
|
||||||
draw[0].isbg = 1; // set mask for draw areas. 1 means repainting the area with the RGB color each frame
|
|
||||||
draw[1].isbg = 1;
|
|
||||||
PutDispEnv(&disp[db]); // set the disp and draw environnments
|
|
||||||
PutDrawEnv(&draw[db]);
|
|
||||||
FntLoad(960, 0); // Load font to vram at 960,0(+128)
|
|
||||||
FntOpen(32, 32, 320-32, FONTSIZE, 0, 280 ); // FntOpen(x, y, width, height, black_bg, max. nbr. chars
|
|
||||||
}
|
|
||||||
|
|
||||||
void c_display(void)
|
|
||||||
{
|
|
||||||
//DrawSync(0); // Wait for all drawing to terminate
|
|
||||||
//VSync(0); // Wait for the next vertical blank
|
|
||||||
PutDispEnv(&disp[db]); // set alternate disp and draw environnments
|
|
||||||
PutDrawEnv(&draw[db]);
|
|
||||||
db = !db; // flip db value (0 or 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
//void c_print(void)
|
|
||||||
//{
|
|
||||||
//FntPrint("Testin'"); // Send string to print stream
|
|
||||||
//FntFlush(-1); // Draw printe stream
|
|
||||||
//}
|
|
||||||
|
|
||||||
//int c_main(void)
|
|
||||||
//{
|
|
||||||
// c_init(); // execute init()
|
|
||||||
// while (1) // infinite loop
|
|
||||||
// {
|
|
||||||
//c_print();
|
|
||||||
//c_display();
|
|
||||||
//HelloMain();
|
|
||||||
// }
|
|
||||||
// return 0;
|
|
||||||
//}
|
|
@@ -1,99 +0,0 @@
|
|||||||
.extern c_init
|
|
||||||
.extern c_display
|
|
||||||
|
|
||||||
.extern DrawSync
|
|
||||||
.extern FntFlush
|
|
||||||
.extern FntPrint
|
|
||||||
.extern PutDispEnv
|
|
||||||
.extern PutDrawEnv
|
|
||||||
.extern ResetGraph
|
|
||||||
.extern SetDefDispEnv
|
|
||||||
.extern SetDefDrawEnv
|
|
||||||
.extern SetDispMask
|
|
||||||
.extern SetVideoMode
|
|
||||||
.extern VSync
|
|
||||||
|
|
||||||
|
|
||||||
.macro CallSetDefDispDrawEnv function,address,y
|
|
||||||
la $a0,\address
|
|
||||||
li $a1,0
|
|
||||||
li $a2,\y
|
|
||||||
li $a3,320
|
|
||||||
li $t0,240
|
|
||||||
sw $t0,16($sp)
|
|
||||||
jal \function
|
|
||||||
.endm
|
|
||||||
|
|
||||||
|
|
||||||
.macro SetBackgroundRgb address,r,g,b
|
|
||||||
# set params to items 26 27 28 of \address
|
|
||||||
.endm
|
|
||||||
|
|
||||||
|
|
||||||
.global main
|
|
||||||
main:
|
|
||||||
addi $sp,$sp,-4*6
|
|
||||||
|
|
||||||
lw $a0,0($0)
|
|
||||||
jal ResetGraph
|
|
||||||
|
|
||||||
CallSetDefDispDrawEnv SetDefDispEnv,dispEnvs+0, 0
|
|
||||||
CallSetDefDispDrawEnv SetDefDispEnv,dispEnvs+20,240
|
|
||||||
CallSetDefDispDrawEnv SetDefDrawEnv,drawEnvs+0, 240
|
|
||||||
CallSetDefDispDrawEnv SetDefDrawEnv,drawEnvs+92,0
|
|
||||||
|
|
||||||
SetBackgroundRgb drawEnvs+0, 32,32,32
|
|
||||||
SetBackgroundRgb drawEnvs+92,32,32,32
|
|
||||||
|
|
||||||
jal c_init
|
|
||||||
|
|
||||||
addi $sp,$sp,4*6
|
|
||||||
|
|
||||||
|
|
||||||
MainLoop:
|
|
||||||
#addi $sp,$sp,-4*5
|
|
||||||
|
|
||||||
jal DrawSync
|
|
||||||
|
|
||||||
jal VSync
|
|
||||||
|
|
||||||
jal c_display
|
|
||||||
|
|
||||||
la $a0,helloStr
|
|
||||||
jal FntPrint
|
|
||||||
# li $a0,70
|
|
||||||
# li $a1,71
|
|
||||||
# li $a2,72
|
|
||||||
# li $a3,73
|
|
||||||
# li $t0,120
|
|
||||||
# sw $t0,16($sp)
|
|
||||||
# jal Print12345
|
|
||||||
|
|
||||||
jal FntFlush
|
|
||||||
|
|
||||||
j MainLoop
|
|
||||||
|
|
||||||
#addi $sp,$sp,4*5
|
|
||||||
|
|
||||||
|
|
||||||
.data
|
|
||||||
helloStr:
|
|
||||||
.asciiz "Hello testin'!"
|
|
||||||
|
|
||||||
.global displayIndex
|
|
||||||
displayIndex:
|
|
||||||
.byte 0
|
|
||||||
|
|
||||||
# libgpu.h > DISPENV
|
|
||||||
.global disp
|
|
||||||
disp:
|
|
||||||
dispEnvs:
|
|
||||||
.align 2
|
|
||||||
.space 40
|
|
||||||
|
|
||||||
# libgpu.h > DRAWENV
|
|
||||||
.global draw
|
|
||||||
draw:
|
|
||||||
drawEnvs:
|
|
||||||
.align 2
|
|
||||||
.space 184
|
|
142
HelloWorld-PS1-PsyQ.asm/HelloWorld.s
Normal file
142
HelloWorld-PS1-PsyQ.asm/HelloWorld.s
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
.extern DrawSync
|
||||||
|
.extern FntFlush
|
||||||
|
.extern FntLoad
|
||||||
|
.extern FntOpen
|
||||||
|
.extern FntPrint
|
||||||
|
.extern PutDispEnv
|
||||||
|
.extern PutDrawEnv
|
||||||
|
.extern ResetGraph
|
||||||
|
.extern SetDefDispEnv
|
||||||
|
.extern SetDefDrawEnv
|
||||||
|
.extern SetDispMask
|
||||||
|
.extern VSync
|
||||||
|
|
||||||
|
|
||||||
|
.macro FlipByteVariable address
|
||||||
|
la $t0,\address
|
||||||
|
#lb $t1,0($t0)
|
||||||
|
#beq $t1,$0,__FlipByteVariable1__
|
||||||
|
beq $t0,$0,__FlipByteVariable1__
|
||||||
|
__FlipByteVariable0__:
|
||||||
|
li $t1,0
|
||||||
|
__FlipByteVariable1__:
|
||||||
|
li $t1,1
|
||||||
|
sb $t1,($t0)
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
|
.macro CallSetDefDispDrawEnv function,address,y
|
||||||
|
la $a0,\address
|
||||||
|
li $a1,0
|
||||||
|
li $a2,\y
|
||||||
|
li $a3,320
|
||||||
|
li $t0,240
|
||||||
|
sw $t0,16($sp)
|
||||||
|
jal \function
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
|
.macro SetDisplayBackgroundRgb address,r,g,b
|
||||||
|
li $t1,\r
|
||||||
|
la $t0,\address+25
|
||||||
|
sb $t1,0($t0)
|
||||||
|
|
||||||
|
li $t1,\g
|
||||||
|
la $t0,\address+26
|
||||||
|
sb $t1,0($t0)
|
||||||
|
|
||||||
|
li $t1,\b
|
||||||
|
la $t0,\address+27
|
||||||
|
sb $t1,0($t0)
|
||||||
|
|
||||||
|
la $t0,\address+24
|
||||||
|
li $t1,1
|
||||||
|
sb $t1,0($t0)
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
|
.global main
|
||||||
|
main:
|
||||||
|
addi $sp,$sp,-4*6
|
||||||
|
|
||||||
|
lw $a0,0($0)
|
||||||
|
jal ResetGraph
|
||||||
|
|
||||||
|
CallSetDefDispDrawEnv SetDefDispEnv,dispEnvs+0, 0
|
||||||
|
CallSetDefDispDrawEnv SetDefDispEnv,dispEnvs+20,240
|
||||||
|
CallSetDefDispDrawEnv SetDefDrawEnv,drawEnvs+0, 240
|
||||||
|
CallSetDefDispDrawEnv SetDefDrawEnv,drawEnvs+92,0
|
||||||
|
|
||||||
|
SetDisplayBackgroundRgb drawEnvs+0, 32,32,32
|
||||||
|
SetDisplayBackgroundRgb drawEnvs+92,32,32,32
|
||||||
|
|
||||||
|
la $a0,dispEnvs+0
|
||||||
|
jal PutDispEnv
|
||||||
|
|
||||||
|
la $a0,drawEnvs+0
|
||||||
|
jal PutDrawEnv
|
||||||
|
|
||||||
|
li $a0,960
|
||||||
|
li $a1,0
|
||||||
|
jal FntLoad
|
||||||
|
|
||||||
|
li $a0,32
|
||||||
|
li $a1,32
|
||||||
|
li $a2,320-32
|
||||||
|
li $a3,8*7
|
||||||
|
li $t0,0
|
||||||
|
sw $t0,16($sp)
|
||||||
|
li $t1,280
|
||||||
|
sw $t1,20($sp)
|
||||||
|
jal FntOpen
|
||||||
|
|
||||||
|
addi $sp,$sp,4*6
|
||||||
|
|
||||||
|
|
||||||
|
MainLoop:
|
||||||
|
jal DrawSync
|
||||||
|
jal VSync
|
||||||
|
|
||||||
|
la $a0,dispEnvs
|
||||||
|
la $t0,displayIndex
|
||||||
|
lb $t0,($t0)
|
||||||
|
li $t1,20
|
||||||
|
mult $t0,$t1
|
||||||
|
mflo $t0
|
||||||
|
add $a0,$a0,$t0
|
||||||
|
jal PutDispEnv
|
||||||
|
|
||||||
|
la $a0,drawEnvs
|
||||||
|
la $t0,displayIndex
|
||||||
|
lb $t0,($t0)
|
||||||
|
li $t1,92
|
||||||
|
mult $t0,$t1
|
||||||
|
mflo $t0
|
||||||
|
add $a0,$a0,$t0
|
||||||
|
jal PutDrawEnv
|
||||||
|
|
||||||
|
FlipByteVariable displayIndex
|
||||||
|
|
||||||
|
la $a0,helloStr
|
||||||
|
jal FntPrint
|
||||||
|
jal FntFlush
|
||||||
|
|
||||||
|
j MainLoop
|
||||||
|
|
||||||
|
|
||||||
|
.data
|
||||||
|
helloStr:
|
||||||
|
.asciiz "Hello testin'!"
|
||||||
|
|
||||||
|
displayIndex:
|
||||||
|
.byte 0
|
||||||
|
|
||||||
|
# libgpu.h > DISPENV
|
||||||
|
dispEnvs:
|
||||||
|
.align 2
|
||||||
|
.space 2*20
|
||||||
|
|
||||||
|
# libgpu.h > DRAWENV
|
||||||
|
drawEnvs:
|
||||||
|
.align 2
|
||||||
|
.space 2*92
|
@@ -1,5 +1,5 @@
|
|||||||
TARGET = HelloWorld
|
TARGET = HelloWorld
|
||||||
|
|
||||||
SRCS = HelloWorld2.s HelloWorld.c
|
SRCS = HelloWorld.s
|
||||||
|
|
||||||
include ../common.mk
|
include ../common.mk
|
@@ -10,7 +10,12 @@ Index of contents in this repo, might or might not always be complete...
|
|||||||
I will also try to credit everyone I can for all the contents listed, when my work is in great part based on someone else's.
|
I will also try to credit everyone I can for all the contents listed, when my work is in great part based on someone else's.
|
||||||
|
|
||||||
* Thanks to <https://github.com/PeterLemon/PSX/tree/master/Cube>:
|
* Thanks to <https://github.com/PeterLemon/PSX/tree/master/Cube>:
|
||||||
* [BouncyCubePs1](BouncyCubePs1)
|
* [BouncyCubePs1.asm](BouncyCubePs1.asm)
|
||||||
|
|
||||||
|
* Thanks to <https://github.com/ABelliqueux/nolibgs_hello_worlds/tree/main/hello_world> for the original code structure; all assembly code by me:
|
||||||
|
* [HelloWorld-PS1-PsyQ.asm](HelloWorld-PS1-PsyQ.asm)
|
||||||
|
|
||||||
|
(For now there's only PSX assembly things in here, this will soon change)
|
||||||
|
|
||||||
## Related
|
## Related
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user