aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authorspicyjpeg <thatspicyjpeg@gmail.com>2023-05-11 23:26:42 +0200
committerspicyjpeg <thatspicyjpeg@gmail.com>2023-05-11 23:26:42 +0200
commit58a8306d24fe29d965aa8b40ddc37c3163c0a2f9 (patch)
tree08e8c7dd495d1c4c6fcf5f7ba6b4b10693dc42f6 /README.md
parent2021cdfca29dc5c98e570a674ac97f92f47a1129 (diff)
downloadpsn00bsdk-58a8306d24fe29d965aa8b40ddc37c3163c0a2f9.tar.gz
Bump SDK to v0.23 and GCC to v13.1, update readme
Diffstat (limited to 'README.md')
-rw-r--r--README.md144
1 files changed, 61 insertions, 83 deletions
diff --git a/README.md b/README.md
index 07ad738..50c50a0 100644
--- a/README.md
+++ b/README.md
@@ -1,85 +1,58 @@
# PSn00bSDK
-PSn00bSDK is a 100% free and open source SDK project for the original Sony
-PlayStation for developing homebrew applications and games for the console.
-This SDK may be used for freeware, commercial, and open source homebrew
-projects as far as what the SDK currently supports. Out of all the open
-source PS1 SDK projects that have come and gone from active development
-over the years, PSn00bSDK is arguably the most capable of them all.
-
-Much of the SDK is merely just a set of libraries (`libpsn00b`) and some
-utilities for converting executables and data files to formats more usable
-on the target platform. The compiler used is just the standard GNU GCC
-toolchain compiled to target mipsel and has to be acquired separately.
-The library API was deliberately written to resemble the library API of the
-official libraries as closely as possible not only for familiarity reasons
-to experienced programmers but also so that existing sample code and tutorials
-that have been written over the years would still apply to this SDK, as well
-as making the process of porting over existing homebrew originally made with
-official SDKs easier with minimal modificationn provided they do not depend
-on libgs.
-
-PSn00bSDK is currently a work in progress and cannot really be considered
-production ready, but what is currently implemented should be enough to
-produce some interesting homebrew with the SDK especially with its extensive
-support for the GPU and GTE hardware. There's no reason not to fully support
-hardware features of a target platform when said hardware features have been
-fully documented for years (nocash's PSX specs document in this case).
-
-Most of `libpsn00b` is written mostly in MIPS assembly more so functions that
-interface with the hardware. Many of the standard C functions are implemented
-in custom MIPS assembly instead of equivalents found in the BIOS ROM, for both
-stability (the BIOS `libc` implementation of the PlayStation is actually buggy)
-and performance reasons.
-
-
-## Notable features
-
-As of October 11, 2022:
-
-* Extensive GPU support with lines, flat shaded or textured polygon and sprite
- primitives, high-speed DMA for VRAM transfers and ordering tables. All video
- modes for both NTSC and PAL standards also supported with fully adjustable
- display area and automatic video standard detection based on last GPU mode.
+PSn00bSDK is an open source homebrew software development kit for the original
+Sony PlayStation, consisting of a C/C++ compiler toolchain and a set of
+libraries that provide a layer of abstraction over the raw hardware in order to
+make game and app development easier. A CMake-based build system, CD-ROM image
+packing tool (`mkpsxiso`) and asset conversion utilities are also provided.
+
+At the heart of PSn00bSDK is `libpsn00b`, a set of libraries that implements
+most of the core functionality of the official Sony SDK (excluding higher-level
+libraries) plus several new extensions to it. Most of the basic APIs commonly
+used by homebrew apps and games built with the official SDK are available,
+making PSn00bSDK a good starting point for those who have an existing codebase
+but want to move away from Sony tools.
+
+Currently supported features include:
+
+* Full support for the GPU's functionality including all primitive types (lines,
+ polygons, sprites) as well DMA transfers managed through a software-driven
+ command queue that can optionally be extended with custom commands. Both NTSC
+ and PAL video modes are fully supported.
* Extensive GTE support with rotate, translate, perspective correction and
lighting calculation fully supported through C and/or assembly GTE macros
paired with high speed matrix and vector helper functions. All calculations
performed in fixed point integer math, not a single float used.
-* Flexible interrupt service subsystem with easy to use callback mechanism for
- simplified handling and hooking of hardware and DMA interrupts. No crude
- event handler hooks or kernel hacks providing great compatibility with
- HLE BIOS implementations and loader/menu type homebrew programs.
+* BIOS-based interrupt dispatch system providing the ability to register custom
+ callbacks for all IRQs and DMA channels while preserving compatibility with
+ all functions provided by the BIOS.
-* BIOS controller functions for polling controller input work as intended
- thanks to proper handling of hardware interrupts. Optional limited support
- for manual polling.
+* Basic support for controller input through the BIOS, with optional limited
+ support for manual polling.
-* Complete Serial I/O support and console driver to redirect standard input and
- output to the serial port. Hardware flow control supported.
+* Complete Serial I/O support with buffering and console driver to redirect BIOS
+ standard input and output to the serial port. Hardware flow control supported.
-* Full CD-ROM support using `libpsxcd` featuring data reading, CD-DA and XA
- audio playback, a built-in ISO9660 file system parser with no file count
- limit and support for multi-session discs.
+* CD-ROM support featuring asynchronous reading, CD-DA and XA-ADPCM audio
+ playback and a built-in ISO9660 file system parser with no file count limit.
+ Additional support for multi-session discs and bypassing region checks on
+ supported console models.
-* MDEC support, lossy image decompression and video playback using
- `libpsxpress` (currently only bitstream versions 1 and 2 are supported).
+* Full MDEC support for hardware accelerated lossy image decompression and video
+ playback.
* Preliminary limited support for Konami System 573 arcade hardware.
-* Experimental support for dynamic linking at runtime, with support for
- function and variable introspection by loading a map file generated at build
- time.
-
-* Uses Sony SDK library syntax for familiarity to experienced programmers
- and makes porting existing homebrew projects to PSn00bSDK easier.
-
-* Works on real hardware and most popular emulators.
-
-* Fully expandable and customizable to your heart's content.
+* Experimental support for dynamic linking at runtime, including function and
+ variable introspection by loading a map file generated at build time.
+Note that, while PSn00bSDK's API is to some extent compatible with the official
+SDK's, the project is *not* meant to be a drop-in replacement for it, both
+since reimplementing the entire SDK would be a major undertaking and because
+many parts of it are inefficient, clunky and/or provide relatively little value.
## Obtaining PSn00bSDK
@@ -97,27 +70,31 @@ used as a starting point.
For more information on how to get started, or if you wish to build the SDK
yourself from source instead, refer to [installation.md](doc/installation.md).
+## Tutorials and examples
-## Examples
-
-There are a few examples and complete source code of `n00bdemo` included in the
-`examples` directory. More example programs may be added in the future and
-contributed example programs are welcome.
-
-There's also [Lameguy's PlayStation Programming Tutorial Series](http://lameguy64.net/tutorials/pstutorials)
-for learning how to program for the PlayStation. Much of the tutorials should
-apply to PSn00bSDK.
+The `examples` directory contains several example programs showcasing different
+parts of the SDK (mostly graphics); the source code of `n00bdemo` can also be
+found in the same directory. More example programs may be added in the future
+and contributed example programs are welcome.
+[Lameguy's PlayStation Programming Tutorial Series](http://lameguy64.net/tutorials/pstutorials)
+was written with older versions of PSn00bSDK in mind and is outdated at this
+point, but may still be useful as an introduction to the console's hardware and
+the basics of the graphics and controller APIs.
## To-do List
+* `libpsxgte`: Rewrite all assembly functions from scratch as parts of them have
+ been lifted as-is from Sony libraries. **PSn00bSDK is currently** (and
+ will probably always be) **in a legal gray area due to this.**
+
* `libpsxspu`: Plenty of work to be done. Some kind of MIDI sequencer (similar
to the one present in the official SDK) should be added at some point, along
with a proper API for audio streaming.
* `libpsxcd`: Implement a command queue mechanism for the CD-ROM.
-* `libpsxpress`: Add support for version 3 and IKI frame bitstreams.
+* `libpsxpress`: Add an API for SPU-ADPCM audio encoding at runtime.
* `libc`: Improve the memory allocation framework with multiple allocators,
replace the string functions with optimized implementations and maybe add
@@ -127,32 +104,33 @@ apply to PSn00bSDK.
controller driver, and possibly a library for interfacing to IDE/ATAPI drives
to make development for arcade systems easier.
-
## Credits
-Main developer/author/whatever:
+Main developers/authors:
* **Lameguy64** (John "Lameguy" Wilbert Villamor)
+* **spicyjpeg**
Contributors:
-* **spicyjpeg**: dynamic linker, `libpsxpress`, CMake scripts, some docs and
- examples.
* **Silent**, **G4Vi**, **Chromaryu**: `mkpsxiso` and `dumpsxiso` (maintained
as a [separate repo](https://github.com/Lameguy64/mkpsxiso)).
Honorable mentions:
+* **Soapy**: wrote the original version of the `inline_c.h` header containing
+ GTE macros.
* **ijacquez**: helpful suggestions for getting C++ working.
-* **Nicolas Noble**: his OpenBIOS project gave insight to how the BIOS works
- internally.
+* **Nicolas Noble**: author of the
+ [pcsx-redux](https://github.com/grumpycoders/pcsx-redux) emulator, OpenBIOS
+ and other projects which proved invaluable during development.
Helpful contributors can be found in the changelog.
References used:
-* [nocash's PlayStation specs document](http://problemkaputt.de/psx-spx.htm)
- and Nicolas Noble's [updated version](https://psx-spx.consoledev.net).
+* [Martin Korth's psx-spx document](http://problemkaputt.de/psx-spx.htm) and the
+ [community-maintained version](https://psx-spx.consoledev.net).
* MIPS and System V ABI specs (for the dynamic linker).
* Tails92's PSXSDK project (during PSn00bSDK's infancy).