LibPSn00b, PSn00bSDK software libraries
2019 Lameguy64 / Meido-Tek Productions

Licensed under Mozilla Public License

LibPSn00b make up the majority of PSn00bSDK as it provides the functions
necessary for developing software for the PSX. Most libraries, mainly the
GPU and GTE libraries are written mostly in assembly language.


Brief library overview:

	libc	- Standard C library. Contains only a small subset of the full
			  standard C library, mostly string and memory manipulation
			  functions.
			  
	psxgpu	- GPU library for video and graphics control. Most of the
			  important functions are implemented.
	
	psxgte	- GTE library for GTE accelerated vector transformations. Most
			  important functions are implemented.
			  
	psxapi	- Provides access to most of the BIOS functions calls of the
			  PSX BIOS.
			  
	psxetc	- Provides some misc functions such as debug font.

	psxspu	- SPU library. Basic functions such as hardware init, uploading
			  data to SPU RAM via DMA transfer and playing sound playback
			  are fully working but is currently lacking a number of
			  important functions, especially reverb.
			   
	Each library has its own readme file that contains its changelog, todo
	list, credits and some additional details of the library.


Compiling:

	Compiling the LibPSn00b libraries requires GCC and binutils targetting
	mipsel-unknown-elf built with libgcc. The path to those binaries must be
	specified in your PATH environment variable and the binaries must be
	prefixed by the target architecture (ie. mipsel-unknown-elf-gcc).

	Simply run the Makefile in this directory using make (or gmake if you're
	in a BSD environment). The Makefile should parse though each library
	directory and run the makefile in it.


Documentation:

	Documentation of all the libraries are found in libn00bref.odf and it features
	the same formatting as the official library documents. The document can be
	exported in PDF format for easier viewing with a web browser or PDF viewer.


Contributing:

	Contributions are open for this project. Just obey the following rules
	when making a contribution:

	* If you add new functions to libpsn00b make sure you document them in
	  libn00bref.odf. Documentation using Doxygen is discouraged.
	* This project desires functions that interact with hardware registers to
	  be written in assembly language. If you decide to write your functions
	  that interact with hardware registers in C make sure you define your
	  register pointers as volatile and they must work properly when compiled
	  with -O2 optimization.
	* Functions must work flawlessly on both emulators and real hardware.
	* Don't forget to put your user name in the readme file of the library
	  you've made a contribution on and details of what you've added/modified.
	* New functions that are not originally in the official SDK must be marked
	  as original code in both the library headers and the libn00bref document.

	
Library to-do list:

	Since the PSn00bSDK project still a work in progress, essential libraries
	for CD and controllers support are not yet created but are high priority.

	libc	 - Yet to include a complete C standard function
	
	psxcd	 - CD library. Not much progress as getting the CD controller to
			   cooperate has been one heck of a force to be reckoned with.
			   Gave up with my repeated attempts with no success. Absolutely
			   huge props to anyone who can figure out how to use the CD
			   controller properly! -Lameguy64

	psxpad	 - Pad/tap/gun library. No work has been done on it currently.
			   Supporting the Konami Justifier can be ignored as the way how
			   that lightgun works is pretty crude and likely going to be
			   awful to implement. Namco's Guncon is a lot simpler to
			   implement.

	psxpress - MDEC library. No work has been done on it currently. libpress
			   from the official libraries also contains functions for
			   encoding SPU compatible ADPCM data from raw PCM samples.

	Before implementing CD and controller support a better interrupt handling
	scheme must be implemented as it would save a lot of trouble. Details
	regarding this interrupt handler implementation can be found in psxgpu's
	readme document.