PSn00bSDK changelog

Items that are lower in the log are more recently implemented.

11-29-2020 by Lameguy64:

* Defined MDEC hardware and related DMA registers in hwregs_a.h file.

* Fixed entry typo in table of squareroot.s (pointed out by SoapyMan).

* memmove updated to account for forward-looped memory move (by ckosmic).

* Removed redundant toolchain executable definitions in the makefiles of
  examples.
  
* Included HDTV example for Github repo.


09-19-2020 by 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.


07-25-2020 by 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.


04-24-2020 by 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.


03-11-2020 by 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.


02-28-2020 by 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.


02-25-2020 by thp:

* libc: Added abs and labs() functions.

  
01-06-2020 by Lameguy64:

* libpsn00b: Renamed libpsxcd directory to psxcd to match with other libraries.

* examples: Added obligatory hello world example.

* documentation: Added CD-ROM library documentation.


11-22-2019 by 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.


10-11-2019 by 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.


09-23-2019 by 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).


08-17-2019 by 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.


07-18-2019 by Lameguy64:

* Added fpscam example.

* Gave examples small descriptions.

* Updated readme a little.


07-17-2019 by 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.
  

07-01-2019 by williamblair:

* Fixed FntLoad() Y coordinate not working properly for debug font (due to
  Y coordinate not being specified for the getTPage() macro.


06-23-2019 by 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.


06-07-2019 by qbradq:

* lzpack: Swapped a buffer length litteral with sizeof operator, fixing a
  stack overflow bug in some instances.


05-23-2019 by Lameguy64:

* Added dev notes.txt file in docs that includes notes about the many
  quirks about the console discovered during the development of this
  SDK project.

* Updated libn00bref.odf a little.

* Added turboboot 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().
