aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorspicyjpeg <thatspicyjpeg@gmail.com>2024-10-14 17:44:12 +0200
committerspicyjpeg <thatspicyjpeg@gmail.com>2024-10-14 17:44:12 +0200
commit787db196ad3c4e945792997111d759f82110775a (patch)
tree878943ae179709b77f411ce5c4857d28eb6d8fc2 /doc
parent9c792e636a7803f8003643b2f91f040257398b3f (diff)
downloadpsn00bsdk-787db196ad3c4e945792997111d759f82110775a.tar.gz
Deprecate CPack packages and old changelog, fix ldscripts
Diffstat (limited to 'doc')
-rw-r--r--doc/old/old_changelog.md1028
-rw-r--r--doc/old/reference.odt (renamed from doc/LibPSn00b Reference.odt)bin145765 -> 145765 bytes
2 files changed, 1028 insertions, 0 deletions
diff --git a/doc/old/old_changelog.md b/doc/old/old_changelog.md
new file mode 100644
index 0000000..da49827
--- /dev/null
+++ b/doc/old/old_changelog.md
@@ -0,0 +1,1028 @@
+
+# PSn00bSDK changelog (archived)
+
+**NOTE**: due to the large amount of changes in recent PSn00bSDK releases, this
+file is no longer being updated and is only kept here for reference purposes.
+Refer to the commit history for more information about newer releases.
+
+## 2023-07-03: 0.24
+
+spicyjpeg:
+
+- libc: Fixed various mistakes in the GTE leading zero count intrinsics and the
+ `setjmp.h` header.
+
+- psxgpu: `PutDispEnv()` no longer requires manual adjustments in order to
+ center the screen in PAL mode. `FntSort()` now supports printing multiple
+ lines.
+
+- smd: The .SMD model parser code from n00bdemo has been split off into its own
+ library, usable from any PSn00bSDK project.
+
+- examples: `beginner/hello`, `beginner/cppdemo` and `system/timer` have been
+ rewritten completely. `cdrom/cdxa` now checks for the end of the file properly
+ rather than relying on it to be encoded in a specific way. `sound/cdstream`
+ has been refactored to use a ring buffer in main RAM and includes a reusable
+ SPU audio streaming library.
+
+- Added some missing register macros (`SPU_CH_ADSR_VOL`) to `hwregs_c.h` and
+ fixed some previously wrong kernel-related constants.
+
+- Removed the `PSN00BSDK_LIBGCC` CMake variable and related code, as the GCC
+ toolchain can automatically find `libgcc` on its own.
+
+## 2023-05-11: 0.23
+
+spicyjpeg:
+
+- libc: Added some missing C++ STL headers (`cassert`, `cctype`, `cstdint`,
+ `cstdio`, `cstdlib`, `cstring`). Added `setjmp()` and `longjmp()` as well as
+ the `jmp_buf` type.
+
+- psxgpu: Added `SetDrawOpType()` and the `GPU_DrawOpType` enum for more
+ flexibility when using custom drawing queue callbacks with `EnqueueDrawOp()`.
+ Added GPU IRQ variants of all display list sending APIs (`DrawOTagIRQ()`,
+ `DrawOTagEnvIRQ()`, `DrawBufferIRQ()` and so on).
+
+- examples: Cleaned up `beginner/cppdemo` and updated it to use the new STL
+ headers.
+
+- docs: Added `drawing_queue.md`, a reference on the internals of the GPU
+ library's drawing queue implementation.
+
+## 2023-04-05
+
+spicyjpeg:
+
+- libc: Fixed bugs in some string manipulation and number parsing functions.
+ Added `memccpy()`. Removed the `SYSTEM.CNF` argument parser as it would
+ interfere with manual argc/argv passing in some edge cases.
+
+- psxgpu: Added `IsIdleGPU()` and fixed a bug in `SetVideoMode()`. Added new
+ "tagless" primitive structures with the `_T` suffix (e.g. `POLY_FT4_T`,
+ `SPRT_T`, ...) and related macros (`setPolyFT4_T()`, `setSPRT_T()`, ...) that
+ can be used to group multiple primitives into a single display list packet
+ for better performance. Fixed some macros not working properly with negative
+ values. Renamed `DR_MASK` and `setDrawMask()` to `DR_STP` and `setDrawStp()`
+ respectively for consistency with the official SDK.
+
+- psxcd: Added `CdUnlock()`. Improved reliability of `CdGetRegion()` on early
+ Japanese console models.
+
+- psxetc: Added `SetDMAPriority()` and `GetDMAPriority()`.
+
+- psxapi: Added PCDRV (host file I/O) API, declared in the `psxsn.h` header.
+
+- psxpress: Fixed bugs in the MDEC API. Added support for bitstream version 3
+ to the GTE-accelerated decoder. Replaced `DecDCTvlcCopyTable()` with
+ `DecDCTvlcCopyTableV2()` and `DecDCTvlcCopyTableV3()` for better control over
+ how much of the scratchpad is used for lookup tables.
+
+- examples: `mdec/strvideo` is now (finally) functional on real hardware and
+ can properly detect the end of a video file even if immediately followed by
+ another video on the disc. Added previously missing CD image dependencies to
+ the CMake scripts of the examples that make use of CD images.
+
+- tools: `elf2x` no longer adds region strings to converted executables, fixing
+ issues with DuckStation's region autodetection. Updated `mkpsxiso` to 2.03 in
+ order to fix a bug with its thread pool implementation on Linux.
+
+- Updated binutils and recompiled the GCC toolchain with the
+ `--disable-hosted-libstdcxx` option, allowing a subset of the C++ STL to be
+ used in PSn00bSDK projects.
+
+## 2022-12-18: 0.22
+
+spicyjpeg:
+
+- libc: Fixed `assert()` macro and removed redundant type definitions. Added
+ GTE-accelerated leading zero count intrinsics (`__builtin_clz()`).
+
+- psxcd: Rewritten some parts of the library in pure C. Added `CdCommand()` and
+ `CdCommandF()` for advanced usage of the CD-ROM, as well as `CdReadRetry()`,
+ `CdReadBreak()` and `CdGetRegion()`.
+
+- psxgpu: `PutDrawEnv()` and `DrawOTagEnv()` now properly apply the texture
+ page and window attributes in the `DRAWENV` structure. RECTs passed to
+ `LoadImage()` and `StoreImage()` are now copied into a private buffer. Added
+ `setColor*()` macros.
+
+- psxspu: Fixed setting of bus wait states when using `SpuRead()`.
+
+- psxetc: Fixed several critical bugs in the dynamic linker. GOT relocation and
+ linking of variables and objects are now handled properly.
+
+- psxapi: Added `FastEnterCriticalSection()` and `FastExitCriticalSection()`
+ inline macros for quick enabling and disabling of interrupts.
+
+- Renamed some registers in `hwregs_c.h`, `hwregs_a.inc` and updated examples
+ accordingly.
+
+- All projects are now compiled with `-Og` in debug mode and `-O2` in release
+ mode by default. CD images created using `psn00bsdk_add_cd_image()` are now
+ only rebuilt if necessary (i.e. if any of their dependencies change).
+
+## 2022-10-27
+
+spicyjpeg:
+
+- psxspu: Fixed bugs in `SpuInit()` and in `SpuWrite()` when using manual
+ transfer mode (`SPU_TRANSFER_BY_IO`). Added `SpuWritePartly()`.
+
+- psxetc: Added `IRQ_Channel` and `DMA_Channel` enums.
+
+- examples: Refactored and bugfixed all sound examples. Renamed the old
+ `spustream` example to `cdstream` and added a new `spustream` example
+ demonstrating SPU audio streaming from main RAM. Both streaming examples now
+ make use of the interleaved .VAG file format.
+
+## 2022-10-21: 0.21
+
+spicyjpeg:
+
+- libpsn00b: Cleaned up the internal logging system.
+
+- psxgpu: Added `MoveImage()` as well as `MoveImage2()`, `LoadImage2()` and
+ `StoreImage2()`. `LoadImage()` and `StoreImage()` now make use of the
+ library's internal drawing queue instead of blocking. Added `EnqueueDrawOp()`
+ for more advanced control of the drawing queue. The `getTPage()` macro now
+ supports extended Y coordinates (512-1023) on systems with 2 MB of VRAM.
+
+- psxsio: Removed `_sio_control()` and replaced it with a completely new
+ asynchronous buffered serial port driver. Rewritten the serial TTY driver to
+ make use of the new API.
+
+## 2022-10-16
+
+spicyjpeg:
+
+- psxetc: Fixed (another) critical bug in the IRQ callback dispatcher. This
+ also fixed some examples that were broken ever since the library was
+ rewritten in C. Made the dynamic linker less verbose, improving DLL loading
+ speed in debug mode.
+
+- psxcd: Added `CdDataSync()`. Renamed `CdlModeSize0` and `CdlModeSize1` to
+ `CdlModeIgnore` and `CdlModeSize` respectively.
+
+- psxpress: Fixed a bug in the Huffman decompression API that would make it
+ crash if the bitstream header didn't contain a valid decompressed length,
+ even if the bitstream was properly encoded. This fix makes the API fully
+ usable for video playback (as demonstrated by the new example).
+
+- examples: Added `mdec/strvideo` FMV playback example. Fixed
+ `system/childexec` not properly uninstalling BIOS callbacks before launching
+ the child executable. Added pause/resume code to `sound/spustream`.
+
+## 2022-10-11
+
+spicyjpeg:
+
+- libpsn00b: Completely rewritten CMake scripts. Six copies of each library are
+ now built and installed, one for each combination of configuration (debug and
+ release) and target type (executable with/without $gp-relative addressing and
+ DLL). Library debug logging is now completely disabled when a project is
+ built in release mode (using `-DCMAKE_BUILD_TYPE=Release`).
+
+- libc: Replaced `memset()` with a much faster optimized implementation that
+ makes use of Duff's device. Added `GetHeapUsage()` and `TrackHeapUsage()`.
+ Removed `_mem_init()`.
+
+- psxetc: Fixed a critical bug in `DMACallback()` that would lead to the DMA
+ interrupt handler being disabled entirely in some edge cases.
+
+- psxgpu: Replaced the debug font with an improved one. No changes have been
+ made to the API.
+
+- psxcd: Added `CdGetSector2()` (asynchronous variant of `CdGetSector()`).
+ `CdControl()` can now take a `CdlLOC` as second argument when issuing a seek
+ command (previously the argument was ignored if the command was not `ReadN`
+ or `ReadS`).
+
+- Replaced the `DEBUG` macro with the standard C `NDEBUG` macro, which is only
+ defined if the project is being built in release mode.
+
+- Added `PSN00BSDK_*_LINK_LIBRARIES` CMake variables to control which SDK
+ libraries are linked to newly created executables and DLLs. Updated
+ `cmake_reference.md` to reflect the changes.
+
+## 2022-09-22
+
+spicyjpeg:
+
+- libpsn00b: Changed the extension of `gtereg.h`, `hwregs_a.h` and `inline_s.h`
+ to `.inc`. Cleaned up old leftover PSXSDK headers.
+
+- Updated documentation and added detailed instructions on how to install
+ prebuilt releases.
+
+## 2022-08-21: 0.20
+
+spicyjpeg:
+
+- psxgpu: Added `VSyncHaltFunction()`.
+
+- psxetc: Rewritten the library in C, making `RestartCallback()` behave more
+ like its official SDK counterpart. Added `StopCallback()` and
+ `ResetCallback()`.
+
+- psxspu: `SpuInit()` now properly resets the starting address of all channels,
+ preventing them from accidentally triggering the SPU IRQ.
+
+- examples: Added an example audio file to `sound/spustream` and a texture to
+ `graphics/gte`. Replaced `ball16c.h` in all examples that included it with a
+ binary .TIM file embedded through CMake.
+
+## 2022-07-31
+
+spicyjpeg:
+
+- libc: Replaced default memory allocator with Nicolas Noble's PSYQo
+ implementation. Added `sbrk()` and `realloc()`.
+
+- psxspu: Rewritten the library in C, removing a few redundant non-standard
+ functions and improving SPU DMA reliability. Renamed `SpuWait()` to
+ `SpuIsTransferCompleted()` (and tweaked its prototype) for compatibility with
+ the official SDK. `SpuInit()` now loads a dummy block at the beginning of SPU
+ RAM by default.
+
+- psxmdec: Added experimental Huffman decoding API. Two implementations with
+ different performance and memory usage tradeoffs are available.
+
+- psxapi: Added `SwEnterCriticalSection()`, `SwExitCriticalSection()`,
+ `SetConf()` and various thread- and event-related BIOS API wrappers that were
+ previously missing.
+
+- Deprecated `u_short`, `u_int` and `u_long` types and replaced them with
+ standard library fixed-size types (`uint16_t` and `uint32_t` respectively) in
+ all library code.
+
+- Ninja is now bundled with binary releases of the SDK. A `BUNDLE_NINJA` option
+ was added to the main CMake script to toggle bundling when building packages.
+
+## 2022-06-26
+
+spicyjpeg:
+
+- psxgpu: Rewritten the entire library in C, fixing a few bugs (including one
+ that made 384x240 and 384x256 modes unusable) and adding a drawing queue in
+ the process. `DrawOTag()` can now be called while another OT is being drawn
+ to enqueue up to 8 other OTs.
+
+- psxgpu: Added missing `setXYWH()` macro and implemented `ClearOTag()`,
+ `DrawOTag2()`, `DrawOTagEnv()` and `GsGetTimInfo()`.
+
+- libpsn00b: Renamed `_start()` to `_start_inner()` and added a `_start()` stub
+ that can be overridden to insert custom startup code. Modified the linker
+ scripts to assume RAM is 8 MB by default, to make it easier to target arcade
+ or development hardware.
+
+- examples: Fixed some functions in `io/system573`.
+
+- tools: `elf2x` now warns if the converted executable crosses the 2 MB RAM
+ boundary.
+
+- Debugging symbols in ELF files are now generated by default for all target
+ types. This does not affect the size of built executables or DLLs, as those
+ are always stripped.
+
+## 2022-03-30
+
+lameguy64:
+
+- indev: psxmdec prototype is now functional through `psxpress`.
+
+## 2022-03-25: 0.19
+
+lameguy64:
+
+- examples: Replaced sample image of `mdec/mdecimage` with different artwork.
+ Original image [here](http://lameguy64.net/?page=drawings&post_id=9).
+
+- examples: Updated readme file in examples directory to reference the new
+ `mdec/mdecimage` example program.
+
+- psxsio: Added dummy hooks to unsupported device functions for tty device.
+
+- docs: Minor corrections on `dev_notes.md`.
+
+- docs: Updated documentation for `CdGetSector()` and `CdReadCallback()`
+ functions in `libn00bref.odt`.
+
+## 2022-02-27
+
+spicyjpeg:
+
+- libpsn00b: Added `hwregs_c.h` header and renamed some registers in
+ `hwregs_a.h`. Added `assert()` as a proper macro.
+
+- libpsn00b: Added new MDEC library; `psxpress`.
+
+- psxspu: Fixed critical bug in `SpuSetReverb()`.
+
+- psxetc: Fixed minor typos and bugs in `dlfcn.h`. Replaced `DL_CALL()` macro
+ with `DL_PRE_CALL()`.
+
+- psxapi: Rewritten all BIOS API stubs using a Python script and a JSON list,
+ both of which are included in the library's source directory.
+
+- examples: Updated `io/system573` with bugfixed I/O board code and separated
+ the APIs into a separate source file. Fixed timing bugs in `io/pads`.
+
+- mkpsxiso: Switched back to the master repository. The `dumpsxiso` command is
+ now included in PSn00bSDK installations.
+
+- Added `psn00bsdk_target_incbin()` and `psn00bsdk_target_incbin_a()` CMake
+ functions for quickly embedding binary files into executables and libraries.
+ The examples have been modified to use this function where applicable.
+
+- Added `LIBPSN00B_GENERATOR` CMake option to allow the host-side tools to be
+ compiled with MSVC or Xcode while still using Ninja or `make` to build the
+ libraries and examples. This is required as neither MSBuild nor Xcode support
+ custom toolchains.
+
+- Updated `LICENSE.md` with additional license information as well as a full
+ copy of the GPLv2 and GPLv3 (under which `mkpsxiso` and GCC are licensed
+ respectively).
+
+## 2022-01-17
+
+Lameguy64:
+
+- docs: Removed old and incomplete `libn00bref.odt` document (a precursor of
+ the LibPSn00b Library Reference document).
+
+- examples: Improved description of `hdtv` example. Examples directory is now
+ copied into `share/psn00bsdk` directory for both installation and package
+ building. Build instructions for examples also included.
+
+- docs: Removed documentation for `SetDrawTPageVal()` as the function was
+ removed ages ago. Added documentation to `DR_AREA`, `DR_TWIN` and `DR_OFFSET`
+ primitives and their associated macros.
+
+- examples: Added `tilesasm` example.
+
+- Updated readme file.
+
+## 2021-12-23
+
+spicyjpeg:
+
+- psxcd: `CdGetSector()` now expects the sector size to be in 32-bit word units
+ (rather than bytes) for consistency with the official CD-ROM library. The
+ library's ISO9660 parser and helper functions have been updated accordingly.
+ **This is a breaking change**.
+
+- examples: Added `spustream` audio streaming example.
+
+## 2021-11-28: 0.18
+
+spicyjpeg:
+
+- libc: Removed `STACK_MAX_SIZE` and added `_mem_init()` back. RAM and stack
+ size can now be set by calling `_mem_init()` manually before allocating any
+ memory (however this seems to be currently broken).
+
+- libc: `sprintf()` now supports fixed padding when using the `%@` (binary
+ integer) format specifier.
+
+- psxcd: File paths with forward slashes instead of backslashes, as well as
+ paths containing both slash types, are now accepted.
+
+- psxapi: Added wrapper around BIOS function `GetSystemInfo()`.
+
+- examples: Added `pads` and `system573` examples. Also added CMake build
+ script to `cartrom`, which is now built alongside all other examples.
+
+- Header files are now installed to `include/libpsn00b` instead of
+ `lib/libpsn00b/include`.
+
+- Deprecated `malloc.h` and removed all references to it (`stdlib.h` should be
+ used instead). Moved `int*_t` and `uint*_t` types to `stdint.h`.
+
+- Fixed file permission errors when attempting to install the SDK on macOS.
+
+- Cleaned up, updated and moved all documentation to the `doc` folder.
+ Rewritten this changelog and added a script to generate release notes.
+
+## 2021-10-31
+
+spicyjpeg:
+
+- Added `tinyxml2` and `mkpsxiso` as git submodules and removed the (admittedly
+ short-lived) `SKIP_*` options completely. CMake's `ExternalProject` is no
+ longer used to download dependencies at build time.
+
+- Added CMake presets file with presets for building installer packages.
+
+## 2021-10-25
+
+Lameguy64:
+
+- Made a very tiny change in the readme file.
+
+- Included some of the indev directory from the SVN repository.
+
+## 2021-10-17: 0.17
+
+spicyjpeg:
+
+- Added `SKIP_TINYXML2` and `SKIP_MKPSXISO` build options in place of the old
+ `SKIP_DOWNLOAD` option, and a new `BUNDLE_TOOLCHAIN` option for building
+ packages. Updated `INSTALL.md` accordingly and fixed git branch error when
+ downloading mkpsxiso during build.
+
+- Rewritten `toolchain.txt` (which is now `TOOLCHAIN.md`) and added proper
+ Windows toolchain build instructions.
+
+- Added safety checks in CMake scripts to ensure `elf2x`/`mkpsxiso` are
+ installed before attempting to build an executable or CD image.
+
+- examples: Added CMake build script to (and removed makefile from) `vagsample`.
+
+## 2021-06-10
+
+Lameguy64:
+
+- psxspu: Fixed register typo in `SpyKeyOn` causing unpredictable instability.
+
+- psxspu: Fixed bug where `SpuKeyOn` does not set the key-on bits for voices 16
+ to 23.
+
+- examples: Added `vagsample` SPU example.
+
+## 2021-09-27
+
+spicyjpeg:
+
+- liblzp, tools: Fixed tools not building on MSVC and cleaned up LZP API
+ declarations (replaced meaningless `void*` pointers with proper types).
+
+- libpsn00b: Added missing `PSN00BSDK_VERSION` CMake variable.
+
+- examples: Fixed childexec (`parent.exe`) example crashing due to the child
+ executable not being relocated in the new build script. Patched n00bdemo to
+ suppress `liblzp` pointer type warnings.
+
+- Fixed another MSVC linker error when building `tinyxml2` automatically, as
+ well as various toolchain/compiler test errors sometimes thrown by CMake.
+ Updated `INSTALL.md` with more details.
+
+## 2021-09-13
+
+spicyjpeg:
+
+- Migrated libpsn00b, tools, examples and template to CMake, added a top-level
+ `CMakeLists.txt` and the `libpsn00b/cmake` directory for CMake setup scripts,
+ got rid of the old makefiles and installation method.
+
+- Updated docs to match the new build system, moved installation instructions
+ to `INSTALL.md` and added `doc/cmake_reference.md` describing the SDK's CMake
+ API and variables.
+
+- mkpsxiso: Added rules to automatically download, build and install mkpsxiso
+ (as well as its dependencies) as part of the SDK.
+
+- cpack: Added initial CPack support and created the cpack directory containing
+ branding assets for installers built through CPack. A shell script is
+ provided to regenerate the assets from their source SVGs.
+
+- liblzp: Copied library headers to `libpsn00b/include/lzp`.
+
+- psxetc: Fixed a random typo in a javadoc comment (those should be eventually
+ rewritten into proper documentation anyway).
+
+- Added CMake, VS Code and DLL related entries to `.gitignore`.
+
+## 2021-08-16: 0.16
+
+spicyjpeg:
+
+- psxetc: Added dynamic linking APIs (`dl*`, `DL_*`), implemented in `dl.c` and
+ `_dl_resolve_wrapper.s`. The APIs can be accessed by including `dlfcn.h`,
+ while another header (`elf.h`) provides structs and enums to help with manual
+ parsing of library headers.
+
+- libc: Removed `_mem_init.s`, improved heap initialization code. Added support
+ for setting how much RAM to use for the stack (by defining `STACK_MAX_SIZE`)
+ and for overriding/replacing the default memory allocator.
+
+- psxapi: Added wrapper around BIOS function `FlushCache()`.
+
+- psxspu: Fixed wrong bounds check in `SpuSetTransferStartAddr()`.
+
+- examples: Added an example showing how to compile dynamically-loaded
+ libraries (DLLs) and load them at runtime using the new dynamic linker.
+
+- libpsn00b: Added `libpsn00b/ldscripts` directory and linker scripts for both
+ executables and DLLs. Also fixed several broken header files (`psxgpu.h` not
+ including `sys/types.h`, missing `scanf()` declarations, ...).
+
+- Rewritten most makefiles (both for libraries and examples) and centralized
+ all compiler flags into a single `psn00bsdk-setup.mk` file for consistency
+ and easier editing. Added flags to build libpsn00b without gp-relative
+ addressing for compatibility with the dynamic linker. Also added `nm`
+ commands to generate symbol maps required by the linker.
+
+## 2021-07-01
+
+Lameguy64:
+
+- Libpsn00b: Added `int8_t`, `int16_t`, `int32_t`, `int64_t`, `uint8_t`,
+ `uint16_t`, `uint32_t` and `uint64_t` variable types in `sys/types.h`.
+
+- psxgte: Replaced unsigned int variable types with `u_long` to further improve
+ compatibility with code written for the official Sony SDK and to make my
+ tutorial examples easier to compile on PSn00bSDK. Example programs have been
+ updated to account for this change.
+
+- psxcd: Changed type of 2nd argument of `CdRead()` from `u_int` to `u_long`,
+ as well as changing the type of the size element in `CdlFILE` from `u_int` to
+ `u_long`.
+
+## 2021-02-17
+
+Lameguy64:
+
+- Improved build instructions in readme file and fixed some typos.
+
+- Improved `toolchain.txt` instructions.
+
+- tools: Added experimental `elf2cpe` converter for executing PSn00bSDK
+ programs in official development units. No debug symbols however.
+
+- Fixed prefixes to allow SDK libraries and examples to be built
+ with `mipsel-none-elf`.
+
+- examples: Fixed typo in `plasma_tbl.h` causing multiple definitions when
+ compiling with newer versions of GCC in `n00bdemo`.
+
+- examples: `cartrom` example now marked as obsoleted, but still kept for
+ reference purposes.
+
+- Includes alextrevisan's GTE macros in `inline_c.h`.
+
+- Added makefile template.
+
+## 2021-01-05
+
+Lameguy64:
+
+- psxgpu: Added struct names to many primitives.
+
+- psxgte: Defined `SquareRoot0()` and `SquareRoot12()`.
+
+- psxgte: Added `gte_lddp()` C macro.
+
+- examples: Added C++ demo.
+
+- Updated readme a bit.
+
+## 2020-11-29
+
+Lameguy64:
+
+- libpsn00b: Defined MDEC hardware and related DMA registers in `hwregs_a.h`
+ file.
+
+- psxgte: Fixed entry typo in table of `squareroot.s` (pointed out by
+ SoapyMan).
+
+- libc: `memmove` updated to account for forward-looped memory move (by
+ ckosmic).
+
+- examples: Removed redundant toolchain executable definitions in the
+ makefiles.
+
+- examples: Included HDTV example for Github repo.
+
+## 2020-09-19
+
+Lameguy64:
+
+- Revised makefiles for building the libraries and examples in a way to make
+ building with different toolchain versions easier with the `PSN00BSDK_TC`
+ environment variable. Library installation and linking is also made easier
+ with the `PSN00BSDK_LIBS` environment variable. See readme in the `libpsn00b`
+ directory for details.
+
+- examples: Fixed libgcc not found error when compiling some of the examples.
+
+- libc: Added `strtok()`.
+
+- libc: Added support for command line arguments. Pass arguments via
+ `SYSTEM.CNF` `BOOT=` string or a string array with `Exec()`. Arguments can
+ be read via `argc`/`argv[]` in `main()` or `__argc`/`__argv` anywhere else.
+
+- libc: Added `SetHeapSize()`.
+
+- psxgpu: Moved ISR and callback subsystem to `psxetc`. You'll have to link
+ psxetc after `psxgpu` and `psxapi` after `psxetc` in your library string.
+
+- psxetc: Moved debug font functions (`FntInit()`, `FntOpen()`, etc) to `psxgpu`.
+
+- psxetc: Fixed stack management in `RestartCallback()`.
+
+- examples: Added argument passing in `childexec` example.
+
+- psxcd: Fixed crashing on PSIO and possibly some emulators by implementing
+ a response buffer read limiter.
+
+- psxgpu: Interrupts are now disabled before setting up ISR and callbacks in
+ `ResetGraph()`, as `LoadExec()` still has interrupts enabled when jumping to
+ the loaded PS-EXE's entrypoint. Fixes programs made with PSn00bSDK crashing
+ at `ResetGraph()` on PSIO when loading from the Menu System and possibly some
+ emulators.
+
+## 2020-07-25
+
+Lameguy64:
+
+- psxgte: Added `ScaleMatrixL()`.
+
+- doc: Corrected documentation for `CdReadSync()` function.
+
+- psxcd: Added new define: `CdlIsoLidOpen`.
+
+- psxcd: Updated media change detection logic, media change is checked
+ by lid open status bit in all CD-ROM file functions. `CdControl()` calls will
+ also trigger the media change status on lid open.
+
+- psxcd: Fixed bug in `CdGetVolumeLabel()` where it constantly reparses the
+ file system regardless of media change status.
+
+- examples: Updated `cdrom/cdbrowse` example slightly.
+
+- psxcd: Added `CdLoadSession()`.
+
+- psxcd: Fixed bug where `CdReadDir()` locks up in an infinite loop when it
+ encounters a NULL directory record, and the parser has not yet exceeded the
+ length of the directory record.
+
+- doc: Replaced library version numbers with SVN revision numbers in the
+ introduced fields.
+
+- doc: Started work on CD-ROM library overview.
+
+## 2020-04-24
+
+Lameguy64:
+
+- Refined toolchain instructions a bit.
+
+- psxcd: Added automatic read retry for `CdRead()` operations, as long as
+ `CdReadSync()` is called until read completion.
+
+- psxapi: Added BIOS `atoi()` and `atol()` calls. Temporary, may be replaced
+ with a faster implementation.
+
+- psxsio: Added `ioctl()` support for `FIOCSCAN` to probe for pending input in
+ serial tty driver.
+
+- examples: Reorganized examples, added new `tty` and `console` examples.
+
+## 2020-03-11
+
+Lameguy64:
+
+- psxcd: Fixed `CdInit()` syntax (there should be no arguments).
+
+- psxcd: Fixed `CdlFILE`, `loc` variable renamed to `pos`.
+
+- documentation: Improved and updated toolchain instructions a bit.
+
+## 2020-02-28
+
+Lameguy64:
+
+- documentation: Added docs for `CdOpenDir()`, `CdReadDir()` and
+ `CdCloseDir()`.
+
+- psxgpu: Added `GetODE()`.
+
+- psxspu: Fixed `SpuKeyOn()` bug where only 16 of the 24 channels can be
+ activated, due to channel bits being written as a 16-bit word.
+
+- psxcd: Added `CdOpenDir()`, `CdReadDir()` and `CdCloseDir()` for parsing
+ directories.
+
+- psxcd: Issuing `CdlNop` (`GetStat`) commands now triggers the media change
+ flag internal to the libraries when CD lid is opened, so file system
+ functions can update the cached ISO descriptor when the disc has been
+ changed.
+
+- psxcd: Made internal variables and functions for iso9660 parsing static.
+
+## 2020-02-25
+
+thp:
+
+- libc: Added `abs()` and `labs()` functions.
+
+## 2020-01-06
+
+Lameguy64:
+
+- libpsn00b: Renamed `libpsxcd` directory to `psxcd` to match with other
+ libraries.
+
+- examples: Added obligatory hello world example.
+
+- documentation: Added CD-ROM library documentation.
+
+## 2019-11-22: 0.15b
+
+Lameguy64:
+
+- psxapi: Added root counter or timer functions and related definitions.
+
+- examples: Added timer example.
+
+- psxgpu: Added `DR_AREA`, `DR_OFFSET` and `DR_TWIN` primitives and
+ accompanying `setDrawArea()`, `setDrawOffset()` and `setTexWindow()` macros.
+
+- psxgpu: Added parenthesis to argument value in `setlen()`, `setaddr()` and
+ `setcode()` macros, preventing `addPrims()` from being used in a more
+ sensible manner (ie. `addPrims(ot, sub_ot+3, sub_ot)`).
+
+- examples: Added render2tex render to texture example.
+
+- psxspu: Fixed typo in `spuinit.s` on section specifier specifying a data
+ section instead of text section, resulting to jump to
+ non-instruction-aligned linker errors.
+
+- psxgpu: Increased ISR stack size to 2048 bytes.
+
+- psxsio: Added `kbhit()` to poll keyboard input asynchronously and stdin
+ is now buffered with an IRQ handler.
+
+- psxapi: Added `AddDummyTty()` (for psxsio `DelSIO()` fix).
+
+- psxsio: `DelSIO()` now calls `AddDummyTty()`.
+
+- libc: Fixed bug in `strncpy()` not placing a NULL byte at end of string.
+
+- libc: Fixed `strchr()` and `strrchr()` declarations commented out in
+ `string.h`.
+
+- libpsn00b: Added the long awaited libpsxcd library with cdxa example.
+ Documentation will come soon but existing libcd docs should be good
+ enough for awhile.
+
+- psxgpu: Fixed non functioning GPU DMA wait in `DrawSync()`.
+
+- LibPSn00b run-time library is now officially 0.15b.
+
+## 2019-10-11
+
+Lameguy64:
+
+- psxetc: Added `FntOpen()`, `FntPrint()` and `FntFlush()` functions.
+
+- psxgpu: Fixed typo in `termPrim()` macro (value too long).
+
+- examples: Added billboarding sprites example.
+
+- psxapi: Transferred `putchar()` BIOS function to libc.
+
+- libpsn00b: Updated makefiles adding `-fdata-sections` and
+ `-ffunction-sections` so unused functions will be stripped out, which yields
+ smaller executables.
+
+- libc: Fixed negative integers not displaying properly in
+ `vsprintf()`/`vsnprintf()`.
+
+- libc: Fixed zero padding not working in `vsprintf()`/`vsnprintf()`.
+
+- fpscam: Added debug text using `FntOpen()`, `FntPrint()` and `FntFlush()`.
+ Also added `_boot()` call for returning to CD based serial loaders.
+
+## 2019-09-23
+
+Lameguy64:
+
+- libc: Added `strcat()` function.
+
+- Included PSn00bSDK logo vector.
+
+- psxgte: Added `gte_stsz()` macro.
+
+- psxgpu: Fixed typos in `setUVWH()` macro.
+
+- Added `_boot()` BIOS function (`A(A0h)` aka Warmboot, useful for CD based
+ serial loaders).
+
+## 2019-08-17: 0.13b
+
+Lameguy64:
+
+- LibPSn00b run-time library is officially version 0.13b.
+
+- examples: updated balls and n00bdemo examples for the `setDrawTPage()`
+ correction.
+
+- psxgpu: Fixed error on `setDrawTPage()` syntax and removed
+ `setDrawTPageVal()` macro (not needed).
+
+- psxapi: Added event handler definitions related to memory cards.
+
+- psxapi: Added BIOS memory card functions.
+
+- examples: Added childexec example demonstrating a parent executable
+ transferring execution to a child executable and back.
+
+- elf2x: `s_addr` no longer set on PS-EXE header, console BIOS already sets it
+ by STACK value in `SYSTEM.CNF` and allows child executables to return to
+ parent if left zero.
+
+- psxapi: Renamed `_InitPad()`, `_StartPad()` and `_StopPad()` to `InitPAD()`,
+ `StartPAD()` and `StopPAD()` respectively. Fpscam example updated to new
+ syntax.
+
+## 2019-07-18
+
+Lameguy64:
+
+- Added `fpscam` example.
+
+- Gave examples small descriptions.
+
+- Updated readme a little.
+
+## 2019-07-17: 0.12b
+
+Lameguy64:
+
+- LibPSn00b run-time library is officially version 0.12b.
+
+- libc: Added basic C++ support (many thanks to ijacquez).
+
+- libc: Updated start function that should make it possible for a child
+ executable to return to a parent executable, return logic automatically
+ calls `EnterCriticalSection()`.
+
+- libc: Updated build method which takes `libgcc` from the compiler and adds
+ its own object files into it, eliminating linker problems caused by having
+ to order `libc` and `libgcc` libraries in a specific manner.
+
+- psxgpu: Added `RestartCallback()`.
+
+- psxgpu: Added `StoreImage()` function.
+
+- psxgpu: Fixed bugged `setRECT()` macro.
+
+- libc: Added `assert.h`.
+
+- examples: Balls example now has 166% more balls.
+
+- psxgpu: Increased ISR stack size to 1024 bytes so printf can be used in
+ callbacks safely.
+
+- libc: Removed `int64` (long long) printing in `vsprintf()` for better
+ performance, as the R3000 does not support 64-bit arithmetic natively
+ so its emulated like floats. `int64` still used for processing floats and
+ doubles and old `vsprintf.c` file is still included for those who really
+ want `int64` support for whatever reason.
+
+- libc: Removed `stdarg.h` which is part of GCC and not license compatible
+ with MPL. The toolchain compiled with libgcc provides `stdarg.h` and other
+ standard headers.
+
+- examples: Updated `sdk-common.mk` variable convention for better flexibility.
+
+- libpsn00b: Added `common.mk` file containing global values for all libraries.
+
+- Updated library and toolchain build instructions.
+
+- psxgpu: Fixed bug in DMACallback where the internal DMA handler would fail
+ to install due to `GetInterruptCallback()` retrieving the callback value
+ immediately in the branch delay slot of a `jr` instruction, which resuls to
+ an inconsistent return value. This also broke `DrawSyncCallback()`.
+
+- psxsio: Done fixes on `_sio_control()` from the aformentioned issues with
+ load instructions in delay slots.
+
+- psxgte: Added `DVECTOR` struct.
+
+- psxgpu: Added `setLineF2()`, `setLineG2()`, `setLineF3()` and `setLineG3()`
+ primitive macros.
+
+- Added more functions in documentation.
+
+## 2019-07-01
+
+williamblair:
+
+- Fixed `FntLoad()` Y coordinate not working properly for debug font (due to
+ Y coordinate not being specified for the `getTPage()` macro.
+
+## 2019-06-23: 0.10b
+
+Lameguy64:
+
+- LibPSn00b Run-time Library is officially version 0.10b.
+
+- Reworked readme file with improved build instructions.
+
+- libpsn00b: Added missing C extern groups for C++ compatibility in
+ `psxapi.h`, `stdlib.h` and `string.h`.
+
+- libpsn00b: Removed changelogs in the readmes of each libpsn00b library
+ as its much easier to keep track of changes in a single changelog than
+ scattering them across multiple changelogs.
+
+- psxapi: Added `Exec()` function and EXEC struct.
+
+- psxgpu: Added `DrawPrim()` function (uses direct I/O).
+
+- psxgpu: `VSync()` function completely overhauled. Logic is now based on
+ Sony's code but more efficient and can return total number of vblanks
+ elapsed, number of hblanks since last call and wait up to n vblanks
+ specified by an appropriate argument value. It will also generate a timeout
+ when vblank interrupt stops working and would attempt to restart it.
+
+- psxapi: Added `gets()` and `getc()` BIOS functions.
+
+- psxapi: Corrected a `putc()`/`putchar()` discrepancy. `putc()` puts a
+ character to a file stream, `putchar()` puts a character to stdout.
+
+- Completely revised library reference manual with better formatting and
+ more functions documented.
+
+- psxgpu: Added `DrawSyncCallback()`.
+
+- psxgpu: Implemented DMA interrupt callback system with `DMACallback()`
+ allowing to handle DMA interrupts very easily.
+
+- libpsn00b: Implemented Serial I/O library (`psxsio`) with serial tty device
+ (installed using `AddSIO`) and serial callback support. Serial library
+ is also fully documented.
+
+- psxgpu: Implemented IRQ callback system with `InterruptCallback()` allowing
+ to set interrupt callbacks very easily.
+
+- psxgpu: Implemented proper IRQ handler installed using HookEntryInt or
+ `SetCustomExitFromException()` for handling VSync and other interrupts.
+ `ChangeClearPAD(0)` must now be called after `_InitPad()` or vsync timeout
+ will occur.
+
+- libpsn00b: Started making local labels prefixed with `.L` instead of `.`
+ making them not appear in symbol lists resulting in a cleaner symbol dump.
+ Still not possible to do function-scope local labels like in ASMPSX because
+ GAS syntax is ASS (or ASS GAS which is farts, GAS is farts).
+
+- psxgpu: `DrawSync()` function now waits for DMA completion and GPU transfer
+ ready instead of simply waiting for GPU transfer ready which is the likely
+ cause of subtle GPU related timing issues, it also sets GPU DMA transfer
+ mode to off afterwards. It can also read number of words remaining in DMA
+ transfer if `a0` is non-zero but it likely only returns the correct value on
+ VRAM transfers. Exact way how `DrawSync()` returns the count in the official
+ SDK is currently unknown.
+
+## 2019-06-07
+
+qbradq:
+
+- lzpack: Swapped a buffer length litteral with sizeof operator, fixing a stack
+ overflow bug in some instances.
+
+## 2019-05-23
+
+Lameguy64:
+
+- Added `dev notes.txt` file in docs that includes notes about the many quirks
+ quirks about the console discovered during the development of this SDK
+ project.
+
+- Updated `libn00bref.odf` a little.
+
+- Added `cartrom` example.
+
+- Added `rgb24` example.
+
+- Got custom exit handler set using `SetCustomExitFromException()` (BIOS
+ function `B(19h)`) working. Currently used to acknowledge VSync IRQ but
+ actual VSync handling is still done with events and needs to be
+ transferred to the custom exit handler. At least it lets BIOS
+ controller functions to work now. See `doc/dev notes.txt` for details
+ on how this handler behaves.
+
+- Made stack usage in `ResetGraph()` less wasteful. You only need to
+ allocate N words on stack based on N arguments of the function
+ being called.
+
+- VSync IRQ handling now done using a custom exit from exception handler.
+ Actual VSync handling is yet to be moved to the custom exit handler
+ though.
+
+- Made stack usage in `start.s` of libc a lot less wasteful.
+
+- Implemented controller support via BIOS functions (use `_InitPad()`,
+ `_StartPad()` and `_StopPad()`). BIOS memory card functions may also
+ work as well but its not tested yet.
+
+- Removed duplicate `initpad.s` and `initcard.s` functions in psxapi.
+
+- Added `_InitCd()` function to psxapi which is a safer version of `_96_init()`
+ as it preserves other DMA channel settings. Use BIOS file functions such
+ as `open()`, `read()` and `close()` with path names starting with `cdrom:/`
+ to access files from CD after calling `_InitCd()`.
diff --git a/doc/LibPSn00b Reference.odt b/doc/old/reference.odt
index 44543fd..44543fd 100644
--- a/doc/LibPSn00b Reference.odt
+++ b/doc/old/reference.odt
Binary files differ