diff options
| author | John Wilbert M. Villamor <lameguy64@gmail.com> | 2021-02-18 13:31:17 +0800 |
|---|---|---|
| committer | John Wilbert M. Villamor <lameguy64@gmail.com> | 2021-02-18 13:31:17 +0800 |
| commit | 63419d9cc07c56234d0f61a80f32105b192aec8e (patch) | |
| tree | 827cf4d134cf3b4618d0167cc912f3efd47c3aac /template | |
| parent | 1625072293c40ba3cb819f8f48aeb4b64e93b133 (diff) | |
| download | psn00bsdk-63419d9cc07c56234d0f61a80f32105b192aec8e.tar.gz | |
Lots of makefile corrections, improved build and toolchain instructions, added elf2cpe converter, fixed typo in plasma_tbl.h of n00bdemo example
Diffstat (limited to 'template')
| -rw-r--r-- | template/main.c | 118 | ||||
| -rw-r--r-- | template/makefile | 54 | ||||
| -rw-r--r-- | template/psn00bsdk-setup.mk | 68 |
3 files changed, 240 insertions, 0 deletions
diff --git a/template/main.c b/template/main.c new file mode 100644 index 0000000..1f02f0b --- /dev/null +++ b/template/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; +} diff --git a/template/makefile b/template/makefile new file mode 100644 index 0000000..42ff370 --- /dev/null +++ b/template/makefile @@ -0,0 +1,54 @@ +include psn00bsdk-setup.mk + +# Project target name +TARGET = template.elf + +# Searches for C, C++ and S (assembler) files in local directory +CFILES = $(notdir $(wildcard *.c)) +CPPFILES = $(notdir $(wildcard *.cpp)) +AFILES = $(notdir $(wildcard *.s)) + +# Create names for object files +OFILES = $(addprefix build/,$(CFILES:.c=.o)) \ + $(addprefix build/,$(CPPFILES:.cpp=.o)) \ + $(addprefix build/,$(AFILES:.s=.o)) + +# Project specific include and library directories +# (use -I for include dirs, -L for library dirs) +INCLUDE += +LIBDIRS += + +# Libraries to link +LIBS = -lpsxgpu -lpsxgte -lpsxspu -lpsxetc -lpsxapi -lc + +# C compiler flags +CFLAGS = -g -O2 -fno-builtin -fdata-sections -ffunction-sections + +# C++ compiler flags +CPPFLAGS = $(CFLAGS) -fno-exceptions + +# Assembler flags +AFLAGS = -g + +# Linker flags (-Ttext specifies the program text address) +LDFLAGS = -g -Ttext=0x80010000 -gc-sections \ + -T $(GCC_BASE)/$(PREFIX)/lib/ldscripts/elf32elmip.x + +all: $(OFILES) + $(LD) $(LDFLAGS) $(LIBDIRS) $(OFILES) $(LIBS) -o $(TARGET) + elf2x -q $(TARGET) + +build/%.o: %.c + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +build/%.o: %.cpp + @mkdir -p $(dir $@) + $(CXX) $(AFLAGS) $(INCLUDE) -c $< -o $@ + +build/%.o: %.s + @mkdir -p $(dir $@) + $(CC) $(AFLAGS) $(INCLUDE) -c $< -o $@ + +clean: + rm -rf build $(TARGET) $(TARGET:.elf=.exe) diff --git a/template/psn00bsdk-setup.mk b/template/psn00bsdk-setup.mk new file mode 100644 index 0000000..6ba23ae --- /dev/null +++ b/template/psn00bsdk-setup.mk @@ -0,0 +1,68 @@ +# PSn00bSDK project setup file +# Part of the PSn00bSDK Project +# 2019 - 2020 Lameguy64 / Meido-Tek Productions +# +# This file may be copied for use with your projects, see the template +# directory for a makefile template + +ifndef PREFIX + +PREFIX = mipsel-unknown-elf + +endif # PREFIX + +ifndef GCC_VERSION + +GCC_VERSION = 7.4.0 + +endif # GCC_VERSION + +# PSn00bSDK library/include path setup +ifndef PSN00BSDK_LIBS + +# Default assumes PSn00bSDK is in the same parent dir as this project + +LIBDIRS = -L../psn00bsdk/libpsn00b +INCLUDE = -I../psn00bsdk/libpsn00b/include + +else + +LIBDIRS = -L$(PSN00BSDK_LIBS) +INCLUDE = -I$(PSN00BSDK_LIBS)/include + +endif # PSN00BSDK_LIBS + +# PSn00bSDK toolchain path setup +ifndef GCC_BASE + +ifndef PSN00BSDK_TC + +# Default assumes GCC toolchain is in root of C drive or /usr/local + +ifeq "$(OS)" "Windows_NT" + +GCC_BASE = /c/mipsel-unknown-elf +GCC_BIN = + +else + +GCC_BASE = /usr/local/mipsel-unknown-elf +GCC_BIN = + +endif + +else + +GCC_BASE = $(PSN00BSDK_TC) +GCC_BIN = $(PSN00BSDK_TC)/bin/ + +endif # PSN00BSDK_TC + +endif # GCC_BASE + +CC = $(GCC_BIN)$(PREFIX)-gcc +CXX = $(GCC_BIN)$(PREFIX)-g++ +AS = $(GCC_BIN)$(PREFIX)-as +AR = $(GCC_BIN)$(PREFIX)-ar +LD = $(GCC_BIN)$(PREFIX)-ld +RANLIB = $(GCC_BIN)$(PREFIX)-ranlib
\ No newline at end of file |
