NOTE: this file is parsed by a script to generate release notes. When contributing to PSn00bSDK, add a new block at the top following this template:
## <year>-<month>-<day>: [optional new version]
<contributor>:
- ...
- ...
You may run .github/scripts/generate_release_notes.py CHANGELOG.md
afterwards
to ensure the changelog can be parsed correctly.
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()
andCdCommandF()
for advanced usage of the CD-ROM, as well asCdReadRetry()
,CdReadBreak()
andCdGetRegion()
. -
psxgpu:
PutDrawEnv()
andDrawOTagEnv()
now properly apply the texture page and window attributes in theDRAWENV
structure. RECTs passed toLoadImage()
andStoreImage()
are now copied into a private buffer. AddedsetColor*()
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()
andFastExitCriticalSection()
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 usingpsn00bsdk_add_cd_image()
are now only rebuilt if necessary (i.e. if any of their dependencies change).
spicyjpeg:
-
psxspu: Fixed bugs in
SpuInit()
and inSpuWrite()
when using manual transfer mode (SPU_TRANSFER_BY_IO
). AddedSpuWritePartly()
. -
psxetc: Added
IRQ_Channel
andDMA_Channel
enums. -
examples: Refactored and bugfixed all sound examples. Renamed the old
spustream
example tocdstream
and added a newspustream
example demonstrating SPU audio streaming from main RAM. Both streaming examples now make use of the interleaved .VAG file format.
spicyjpeg:
-
libpsn00b: Cleaned up the internal logging system.
-
psxgpu: Added
MoveImage()
as well asMoveImage2()
,LoadImage2()
andStoreImage2()
.LoadImage()
andStoreImage()
now make use of the library's internal drawing queue instead of blocking. AddedEnqueueDrawOp()
for more advanced control of the drawing queue. ThegetTPage()
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.
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()
. RenamedCdlModeSize0
andCdlModeSize1
toCdlModeIgnore
andCdlModeSize
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. Fixedsystem/childexec
not properly uninstalling BIOS callbacks before launching the child executable. Added pause/resume code tosound/spustream
.
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. AddedGetHeapUsage()
andTrackHeapUsage()
. 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 ofCdGetSector()
).CdControl()
can now take aCdlLOC
as second argument when issuing a seek command (previously the argument was ignored if the command was notReadN
orReadS
). -
Replaced the
DEBUG
macro with the standard CNDEBUG
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. Updatedcmake_reference.md
to reflect the changes.
spicyjpeg:
-
libpsn00b: Changed the extension of
gtereg.h
,hwregs_a.h
andinline_s.h
to.inc
. Cleaned up old leftover PSXSDK headers. -
Updated documentation and added detailed instructions on how to install prebuilt releases.
spicyjpeg:
-
psxgpu: Added
VSyncHaltFunction()
. -
psxetc: Rewritten the library in C, making
RestartCallback()
behave more like its official SDK counterpart. AddedStopCallback()
andResetCallback()
. -
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 tographics/gte
. Replacedball16c.h
in all examples that included it with a binary .TIM file embedded through CMake.
spicyjpeg:
-
libc: Replaced default memory allocator with Nicolas Noble's PSYQo implementation. Added
sbrk()
andrealloc()
. -
psxspu: Rewritten the library in C, removing a few redundant non-standard functions and improving SPU DMA reliability. Renamed
SpuWait()
toSpuIsTransferCompleted()
(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
andu_long
types and replaced them with standard library fixed-size types (uint16_t
anduint32_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.
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 implementedClearOTag()
,DrawOTag2()
,DrawOTagEnv()
andGsGetTimInfo()
. -
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.
lameguy64:
- indev: psxmdec prototype is now functional through
psxpress
.
lameguy64:
-
examples: Replaced sample image of
mdec/mdecimage
with different artwork. Original image here. -
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()
andCdReadCallback()
functions inlibn00bref.odt
.
spicyjpeg:
-
libpsn00b: Added
hwregs_c.h
header and renamed some registers inhwregs_a.h
. Addedassert()
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
. ReplacedDL_CALL()
macro withDL_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 inio/pads
. -
mkpsxiso: Switched back to the master repository. The
dumpsxiso
command is now included in PSn00bSDK installations. -
Added
psn00bsdk_target_incbin()
andpsn00bsdk_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 ormake
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 whichmkpsxiso
and GCC are licensed respectively).
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 intoshare/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 toDR_AREA
,DR_TWIN
andDR_OFFSET
primitives and their associated macros. -
examples: Added
tilesasm
example. -
Updated readme file.
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.
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
andsystem573
examples. Also added CMake build script tocartrom
, which is now built alongside all other examples. -
Header files are now installed to
include/libpsn00b
instead oflib/libpsn00b/include
. -
Deprecated
malloc.h
and removed all references to it (stdlib.h
should be used instead). Movedint*_t
anduint*_t
types tostdint.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.
spicyjpeg:
-
Added
tinyxml2
andmkpsxiso
as git submodules and removed the (admittedly short-lived)SKIP_*
options completely. CMake'sExternalProject
is no longer used to download dependencies at build time. -
Added CMake presets file with presets for building installer packages.
Lameguy64:
-
Made a very tiny change in the readme file.
-
Included some of the indev directory from the SVN repository.
spicyjpeg:
-
Added
SKIP_TINYXML2
andSKIP_MKPSXISO
build options in place of the oldSKIP_DOWNLOAD
option, and a newBUNDLE_TOOLCHAIN
option for building packages. UpdatedINSTALL.md
accordingly and fixed git branch error when downloading mkpsxiso during build. -
Rewritten
toolchain.txt
(which is nowTOOLCHAIN.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
.
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.
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 suppressliblzp
pointer type warnings. -
Fixed another MSVC linker error when building
tinyxml2
automatically, as well as various toolchain/compiler test errors sometimes thrown by CMake. UpdatedINSTALL.md
with more details.
spicyjpeg:
-
Migrated libpsn00b, tools, examples and template to CMake, added a top-level
CMakeLists.txt
and thelibpsn00b/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 addeddoc/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
.
spicyjpeg:
-
psxetc: Added dynamic linking APIs (
dl*
,DL_*
), implemented indl.c
and_dl_resolve_wrapper.s
. The APIs can be accessed by includingdlfcn.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 definingSTACK_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 includingsys/types.h
, missingscanf()
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 addednm
commands to generate symbol maps required by the linker.
Lameguy64:
-
Libpsn00b: Added
int8_t
,int16_t
,int32_t
,int64_t
,uint8_t
,uint16_t
,uint32_t
anduint64_t
variable types insys/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()
fromu_int
tou_long
, as well as changing the type of the size element inCdlFILE
fromu_int
tou_long
.
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 inn00bdemo
. -
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.
Lameguy64:
-
psxgpu: Added struct names to many primitives.
-
psxgte: Defined
SquareRoot0()
andSquareRoot12()
. -
psxgte: Added
gte_lddp()
C macro. -
examples: Added C++ demo.
-
Updated readme a bit.
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.
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 thePSN00BSDK_LIBS
environment variable. See readme in thelibpsn00b
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 withExec()
. Arguments can be read viaargc
/argv[]
inmain()
or__argc
/__argv
anywhere else. -
libc: Added
SetHeapSize()
. -
psxgpu: Moved ISR and callback subsystem to
psxetc
. You'll have to link psxetc afterpsxgpu
andpsxapi
afterpsxetc
in your library string. -
psxetc: Moved debug font functions (
FntInit()
,FntOpen()
, etc) topsxgpu
. -
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()
, asLoadExec()
still has interrupts enabled when jumping to the loaded PS-EXE's entrypoint. Fixes programs made with PSn00bSDK crashing atResetGraph()
on PSIO when loading from the Menu System and possibly some emulators.
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.
Lameguy64:
-
Refined toolchain instructions a bit.
-
psxcd: Added automatic read retry for
CdRead()
operations, as long asCdReadSync()
is called until read completion. -
psxapi: Added BIOS
atoi()
andatol()
calls. Temporary, may be replaced with a faster implementation. -
psxsio: Added
ioctl()
support forFIOCSCAN
to probe for pending input in serial tty driver. -
examples: Reorganized examples, added new
tty
andconsole
examples.
Lameguy64:
-
psxcd: Fixed
CdInit()
syntax (there should be no arguments). -
psxcd: Fixed
CdlFILE
,loc
variable renamed topos
. -
documentation: Improved and updated toolchain instructions a bit.
Lameguy64:
-
documentation: Added docs for
CdOpenDir()
,CdReadDir()
andCdCloseDir()
. -
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()
andCdCloseDir()
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.
thp:
- libc: Added
abs()
andlabs()
functions.
Lameguy64:
-
libpsn00b: Renamed
libpsxcd
directory topsxcd
to match with other libraries. -
examples: Added obligatory hello world example.
-
documentation: Added CD-ROM library documentation.
Lameguy64:
-
psxapi: Added root counter or timer functions and related definitions.
-
examples: Added timer example.
-
psxgpu: Added
DR_AREA
,DR_OFFSET
andDR_TWIN
primitives and accompanyingsetDrawArea()
,setDrawOffset()
andsetTexWindow()
macros. -
psxgpu: Added parenthesis to argument value in
setlen()
,setaddr()
andsetcode()
macros, preventingaddPrims()
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 psxsioDelSIO()
fix). -
psxsio:
DelSIO()
now callsAddDummyTty()
. -
libc: Fixed bug in
strncpy()
not placing a NULL byte at end of string. -
libc: Fixed
strchr()
andstrrchr()
declarations commented out instring.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.
Lameguy64:
-
psxetc: Added
FntOpen()
,FntPrint()
andFntFlush()
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()
andFntFlush()
. Also added_boot()
call for returning to CD based serial loaders.
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).
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 removedsetDrawTPageVal()
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 inSYSTEM.CNF
and allows child executables to return to parent if left zero. -
psxapi: Renamed
_InitPad()
,_StartPad()
and_StopPad()
toInitPAD()
,StartPAD()
andStopPAD()
respectively. Fpscam example updated to new syntax.
Lameguy64:
-
Added
fpscam
example. -
Gave examples small descriptions.
-
Updated readme a little.
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 orderlibc
andlibgcc
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 invsprintf()
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 oldvsprintf.c
file is still included for those who really wantint64
support for whatever reason. -
libc: Removed
stdarg.h
which is part of GCC and not license compatible with MPL. The toolchain compiled with libgcc providesstdarg.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 ajr
instruction, which resuls to an inconsistent return value. This also brokeDrawSyncCallback()
. -
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()
andsetLineG3()
primitive macros. -
Added more functions in documentation.
williamblair:
- Fixed
FntLoad()
Y coordinate not working properly for debug font (due to Y coordinate not being specified for thegetTPage()
macro.
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
andstring.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()
andgetc()
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 usingAddSIO
) 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 ifa0
is non-zero but it likely only returns the correct value on VRAM transfers. Exact way howDrawSync()
returns the count in the official SDK is currently unknown.
qbradq:
- lzpack: Swapped a buffer length litteral with sizeof operator, fixing a stack overflow bug in some instances.
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 functionB(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. Seedoc/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
andinitcard.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 asopen()
,read()
andclose()
with path names starting withcdrom:/
to access files from CD after calling_InitCd()
.