aboutsummaryrefslogtreecommitdiff
path: root/examples/beginner/hello/main.c
diff options
context:
space:
mode:
authorJohn Wilbert M. Villamor <lameguy64@gmail.com>2020-04-24 19:01:28 +0800
committerJohn Wilbert M. Villamor <lameguy64@gmail.com>2020-04-24 19:01:28 +0800
commit1aa0e17df7c325a41de8cf8a57f52ed853f08bf3 (patch)
tree5ec7f69ca0104f2b0a41e2ee7d3cb0cf0c9c54c5 /examples/beginner/hello/main.c
parente82da2abe4c264d4b48a48d79cf9b8e4c4fb8ab6 (diff)
downloadpsn00bsdk-1aa0e17df7c325a41de8cf8a57f52ed853f08bf3.tar.gz
Refined toolchain instructions, organized examples, added automatic retry for CdRead(), added FIOCSCAN ioctl in psxsio TTY driver, added tty and console examples.
Diffstat (limited to 'examples/beginner/hello/main.c')
-rw-r--r--examples/beginner/hello/main.c118
1 files changed, 118 insertions, 0 deletions
diff --git a/examples/beginner/hello/main.c b/examples/beginner/hello/main.c
new file mode 100644
index 0000000..1f02f0b
--- /dev/null
+++ b/examples/beginner/hello/main.c
@@ -0,0 +1,118 @@
+/*
+ * LibPSn00b Example Programs
+ *
+ * Hello World Example
+ * 2019-2020 Meido-Tek Productions / PSn00bSDK Project
+ *
+ * The obligatory hello world example normally included in nearly every
+ * SDK package. This example should also get you started in how to manage
+ * the display using psxgpu.
+ *
+ * Example by Lameguy64
+ *
+ *
+ * Changelog:
+ *
+ * January 1, 2020 - Initial version
+ */
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <psxetc.h>
+#include <psxgte.h>
+#include <psxgpu.h>
+
+
+// Define display/draw environments for double buffering
+DISPENV disp[2];
+DRAWENV draw[2];
+int db;
+
+
+// Init function
+void init(void)
+{
+ // This not only resets the GPU but it also installs the library's
+ // ISR subsystem to the kernel
+ ResetGraph(0);
+
+ // Define display environments, first on top and second on bottom
+ SetDefDispEnv(&disp[0], 0, 0, 320, 240);
+ SetDefDispEnv(&disp[1], 0, 240, 320, 240);
+
+ // Define drawing environments, first on bottom and second on top
+ SetDefDrawEnv(&draw[0], 0, 240, 320, 240);
+ SetDefDrawEnv(&draw[1], 0, 0, 320, 240);
+
+ // Set and enable clear color
+ setRGB0(&draw[0], 0, 96, 0);
+ setRGB0(&draw[1], 0, 96, 0);
+ draw[0].isbg = 1;
+ draw[1].isbg = 1;
+
+ // Clear double buffer counter
+ db = 0;
+
+ // Apply the GPU environments
+ PutDispEnv(&disp[db]);
+ PutDrawEnv(&draw[db]);
+
+ // Load test font
+ FntLoad(960, 0);
+
+ // Open up a test font text stream of 100 characters
+ FntOpen(0, 8, 320, 224, 0, 100);
+}
+
+// Display function
+void display(void)
+{
+ // Flip buffer index
+ db = !db;
+
+ // Wait for all drawing to complete
+ DrawSync(0);
+
+ // Wait for vertical sync to cap the logic to 60fps (or 50 in PAL mode)
+ // and prevent screen tearing
+ VSync(0);
+
+ // Switch pages
+ PutDispEnv(&disp[db]);
+ PutDrawEnv(&draw[db]);
+
+ // Enable display output, ResetGraph() disables it by default
+ SetDispMask(1);
+
+}
+
+// Main function, program entrypoint
+int main(int argc, const char *argv[])
+{
+ int counter;
+
+ // Init stuff
+ init();
+
+ // Main loop
+ counter = 0;
+ while(1)
+ {
+
+ // Print the obligatory hello world and counter to show that the
+ // program isn't locking up to the last created text stream
+ FntPrint(-1, "HELLO WORLD\n");
+ FntPrint(-1, "COUNTER=%d\n", counter);
+
+ // Draw the last created text stream
+ FntFlush(-1);
+
+ // Update display
+ display();
+
+ // Increment the counter
+ counter++;
+ }
+
+ return 0;
+}