psxsdk/Changelog

269 lines
18 KiB
Plaintext

2019-04-10 (0.6.2):
- Included GTE library by LameGuy64/Meido-Tek as 'libmeidogte'
- New example: gtecube. Demonstrates libmeidogte
- The 'rottest' and 'puzzle' examples always set a PAL video mode regardless of the setting in Makefile.cfg
Fixed.
- Removed unused macro code from spasm
2018-01-15 (0.6.1) :
- Fixed bug where LO and HI registers were not saved and restored by the NoBIOS exception handler
- Some definitions (like the ones for the interrupt controller and the GPU) moved out of
library source code to public headers, so they are available to all applications that may need them
- Fixes in pad.c so that compiler optimizations do not generate code with bad behavior
- Fixed crash when using a GCC 7.x+ compiler when calling static constructors during initialization.
- Static constructors are now called in backwards order. (as they are on most systems)
- Fixed bug where the __ctor_list symbol wouldn't have the address of the constructor list,
but would have its address offset unpredictably (leading to the crash mentioned above).
- Integrated upstream changes from F3M in libf3m
- Removed all references to Composer 669 music format in the sources and
documentation of libmodplay, as support for the format was never
implemented.
- Added psxs3m example. Mostly the same as psxmod but using libf3m
instead of libmodplay
- Fixed some issues in the psxmod example.
2016-06-03 (0.6):
- size_t and ssize_t definitions moved from stdio.h to types.h, and types.h is included automatically by stdio.h
- Added strcoll() - as a wrapper to strcmp()
- File device enum is now public and moved to stdio.h
It was incorrectly private and in libpsx/src/libc.c before
- fopen(): path argument is now const char*
- rename() and remove(): both arguments are now const char*
- open(): filename argument is now const char*
- get_real_file_size() and get_file_size(): argument is now const char*
- firstfile(): name argument is now const char*
- Added stdin, stdout and stderr FILE structures
- Implemented fwrite(). Only works with stdout and stderr
- Implemented fputs(). Only works with stdout and stderr
- Implemented freopen()
- Implemented clearerr(), feof(), ferror() and fileno()
- Implemented placeholders for strerror() and strerror_r()
- Added libf3m, to playback S3M module files, adapted to PSXSDK from GreaseMonkey's F3M
- libm/k_rem_pio2.c: fixed misleading indentation at line 188.
libm/e_asin.c: fixed misleading indentation at line 89.
libm/w_exp.c: o_threshold and u_threshold variables only defined when
_IEEE_LIBM is not defined
Fixed warnings with GCC 6.1.0
- Compilation warnings fixed for some tools, and some cleanup in spasm/parser.c
- Fixed warnings with psxgte.h - specifier was put after and not before enumeration
- Fixed warnings in the examples
2015-07-29 (0.5.99):
- Added PSX_WarmReboot()
- Fixed extern directive for GsCurDrawEnvH: was wrongly specified for GsCurDrawEnvY
- NORMAL_LUMINOSITY is now an alias for NORMAL_LUMINANCE: "luminosity" is an incorrect term for the meaning
- Added PRFONT_RL(f), PRFONT_GL(f), RLFONT_BL(f) attributes to GsSetFontAttrib(). These allow to adjust the luminance factor for the color components used when drawing the font: in few words, when used correctly, the attributes can be used to change the color of the font on the fly, without using another color look-up table.
- Added set_cop_register(), get_cop_register() and run_cop_instruction().
set_cop0_register() and get_cop0_register() are now aliases for set_cop_register() and
get_cop_register() respectively.
- Added set_cop_ctrl_register() and get_cop_ctrl_register()
- Fixed some bugs in the Makefiles, thanks to rsoft and Missingno_force for providing patches
- Fixed a bug in bmp2tim where 4-bit images with a width not a multiply of 4, or 8-bit images with a width
not a multiply of 8 were erronously generated and thus contained invalid data.
It should not have been possible to generate such images in the first place.
- Fixed a bug in bmp2tim where unnecessary debug messages were printed on screen when converting an image.
- The path for objcopy hardcoded inside elf2exe is now taken from the OBJCOPY variable specified in Makefile.cfg,
and not from the OBJCOPY_PATH define in the source code itself
- Added -fno-strict-overflow flag by default to Makefile.cfg and to the psx-gcc and psx-g++ scripts
- Multiplication registers HI and LO are now saved and restored by the vblank and root counter handlers -
this could give problems if any division or multiplication instruction was used inside a handler.
Fortunately no such instructions are used inside handlers most times.
- Greatly improved nv-SPASM - now it should be fully compatible (maybe save some quirks)
with the Hitmen assembler
- Added GsVPrintFont()
2014-04-22 (0.4.99):
- Fixed the Makefile for the tools, now it considers the HOST_* variables and removes executables
correctly under Windows
- added --enable-languages=c to the command line to build GCC, in toolchain.txt
- Added abort() to libc
- Fixed Makefile for misc directory
- Fixed genscript.sh: generated link script playstation.x now correctly
includes libgcc and does not rely on EXTERN directives
- New SsUpload() implementation contributed by Shendo, which contains workarounds for emulators.
Also works on ePSXe.
- Fixed wrong return value for McWriteSector()
- Introduced debug build, that can be built by specifying the PSXSDK_DEBUG
flag at compile time - it has more verbose messages, diagnostics, etc.
- Very verbose messages are now only compiled in for the debug builds.
- Added support for the 1KB scratchpad, which is the data cache that went
unused in the PlayStation - it acts as a kind of "fast RAM";
it is accessible as the byte array __scratchpad
- Added RemoveRCntHandler()
- Removed the InitCARD() - StartCARD() - StopCARD() sequence in PSXSDK_Init() when using BIOS mode,
so that the vblank handler would not crash - the fix was acknowledging the interrupt in psxsdk's internal handler
(in start/start.s). Thanks to Shendo for reporting this.
- The shell to use when executing scripts can now be specified in Makefile.cfg by changing the HOST_SHELL variable
- Moved the prototypes for index(), rindex(), strcasecmp() and strncasecmp()
from string.h to strings.h, to be more standard
- Implemented the ffs*() and the popcount*() family of functions
(the prototypes are in string.h or strings.h)
- string.h now includes strings.h for backward compatibility - advice: do not rely on this.
when you use something whose prototype is in strings.h, ALSO include strings.h!
- implemented bitstring.h, bit string manipulation macros
- implemented memccpy()
- index() and rindex() were wrongly implemented both in libpsx/src/libc/string.c and as
macros in strings.h; now they are only implemented as macros in strings.h
- added swab()
- added defines for EXIT_SUCCESS and EXIT_FAILURE in stdlib.h
- __PSXSDK__ is now defined by psx-gcc, this makes easier for code
to detect it is being compiled for the PSXSDK
- added defines for O_RDLOCK, O_WRLOCK, O_SCAN, O_RCOM, O_EXCL, O_ASYNC, O_NOWAIT
and O_NOBUF, and corrected define for O_APPEND (it is now correctly 256, not 8) in fcntl.h
- Added a very simple implementation of stat().
Only the st_size, st_blksize and st_blocks fields are available in struct stat (sys/stat.h)
- Added exit() and atexit() (stdlib.h)
- Added vprintf()
- Added GsSetListEx()
- Added C++ support. Thanks to Mauro Persano (fzort) for contributing this the initialization code.
- Fixed linked list corruption bug in GSTPoly3()
- Added GsPolyLine() and GsGPolyLine() to draw non-graduated and graduated poly lines.
- Added GsGTPoly3() and GsGTPoly4() to draw graduated (shaded) textured 3-point and 4-point polygons
- Added nv-SPASM to PSXSDK, a free and open source implementation of the Hitmen's spASM assembler, written by nextvolume.
It will be installed as `spasm'.
2013-11-09 (0.3.99):
- Added GsRotateVector(). It is a wrapper to internal libpsx functions.
- Added prototype to nextfile() in psxbios.h, it was missing.
- Added documentation for SetVBlankHandler(), it was missing.
- Fixed bug in modplay where instruments with an empty sample were played
with the sample of the immediately next instrument; now they are not
played at all, which is the correct behaviour.
- libmodplay and its tools now ignore "useless" samples (less than 32 bytes)
when loading MOD files.
- Added Doxygen documentation for libmodplay.
- Removed division by zero bug in the MOD playing code in libmodplay.
Fixes crashing on real hardware.
- libmodplay now supports only MOD files, as the old saying goes
"do one thing and do it well".
- Implemented ctype completely in the libc. The is*() family of functions was
notably missing.
- Implemented atoi() and atol() in the libc.
- Fixed the issue of strtol() returning 0 for strings beginning with whitespace.
- Added PRFONT_UNIXLF attribute to built-in font rendering functions.
With PRFONT_UNIXLF, the writing goes to the new line and *also* to the beginning of the new line.
When not using PRFONT_UNIXLF, the '\r\n' sequence has the same effect as '\n' when using PRFONT_UNIXLF.
- Carriage return was ignored by GsPrintFont(). This is now fixed.
- Fixed bad code in libc/string.c
- Added strcasestr(), stpcpy(), stpncpy(), strnlen(), memrchr() to libc
- Added and adapted serial port library by Shendo.
- Added and adapted new pad reading code and memory card code by Shendo.
The memory card filesystem is not yet implemented! You can only use raw sector reads and writes for now.
- libadpcm is now at least eight times faster. There were some implicit floating point operations left which have been removed.
- SsAdpcmPack() now supports non-ending and non-looping samples, useful to generate sound data at runtime.
- Added experimental "NoBIOS" mode, where no BIOS calls and exception handlers are used.
It is accessed by passing the PSX_INIT_NOBIOS flag to PSX_InitEx(). Support for many things is missing or doesn't work as well
as the "BIOS" mode.
- [REALLY IMPORTANT]
The compiling and installation phases are now separate; i.e. to build and install the new SDK libraries and tools,
use "make" then "make install", instead of just "make" like it used to be.
- Added support for 'j', 't', 'z', 'q' length identifiers to vsnprintf()
- vsnprintf() now honors the space flag.
- [vsnprintf()]
The behavior when handling an unknown character in the format after '%' is now correct,
i.e. the character is added to the output string, and the format specification is escaped.
The previous, incorrect behavior was ignoring the character and staying in format
specification until the character for a known type was found.
- Added missing prototypes for strdup() and strndup() to string.h
- Now string functions use size_t instead of int for lengths and counts
- Added memmem(), lltoa(), ltoa(), itoa(), ulltoa(), ultoa() and utoa() to libc
2013-05-14 (0.2.99):
- Changed internal version to 0.2.99 (was 0.1.99)
- Implemented PSX_PollPad() which is similar to PSX_ReadPad() but much more advanced.
Analog sticks and NeGCon are now supported.
- Updated information about reading CD-RWs in the readme.
- Added --showoffset option in cdcat
- Added -removelogo option in lictool
- Added runexe.h and prototype for PSX_RunEXE(), which was missing
- Added GsDrawListPIO(), that uses GPU port I/O access instead of GPU DMA to transfer primitive data to the GPU.
- Added GsInitEx(), which allows to specify flags for GPU initilization.
GsInit() is now a wrapper to GsInitEx(), and it is the same as calling GsInitEx(0)
- srand() and rand() are now implemented in the C library and the BIOS versions are no longer used.
- Changed joypad reading code, now it should work better.
- Beginnings of XM music file support in libmodplay. Support doesn't really work yet, though.
- Added Coprocessor 0 register manipulation functions get_cop0_register() and set_cop0_register()
From 0.1 to 2013-01-14:
- Added several math constants (such as M_PI) to math.h
- Added GsSetDispEnvSimple() and GsSetDrawEnvSimple() prototypes to psxgpu.h. The functions already existed in 0.1 but they were not prototyped and a warning was given by the compiler when they were used in a program.
- Added sys/types.h
- [SERIOUS] Fixed GsSpriteFromImage() - the v value when the pixel mode was 4-bit or 8-bit was incorrect
- Added GetSystemRomVersion() function
- [SERIOUS] As many functions provided by the BIOS which handled memory did not work correctly or at all,
memcmp(), memcpy(), memmove(), memcmp(), memchr(), bzero(), bcopy() and bcmp() have been implemented in
PSXSDK's libc. This fixes a lot of problems.
- Fixed GsPrintFont(), the x position was incremented before drawing a character.
Now it is incremented after drawing a character.
- Now the joysticks/joypads are read using low-level routines instead of using BIOS routines.
This is more versatile and allows the implementation of things such as vibration.
On the other hand, this can cause conflicts with the BIOS' memory card handling routines.
If you don't do directly file manipulation calls on the memory card there should be no problem, however,
as the PSXSDK functions to read/write the memory card take care of that already.
The functions added are: QueryPAD(), pad_read_raw(), pad_escape_mode().
- Implemented vibration for DualShock-compatible controllers.
The functions added are: pad_enable_vibration(), pad_set_vibration()
- The PSXSnake example now vibrates your joystick when you die.
- Fixed calculate_real_padding_hex() in libc.c. This should fix padding with hexadecimal
numbers in vsnprintf based functions (sprintf() / GsPrintFont() / etc.).
- SetVBlankHandler() and SetRCntHandler() now change handler if they're called after an handler
has already been set. In 0.1, they did not change handler and kept the old handler.
- bmp2tim now also supports setting magic pink as transparent (like Allegro).
- scalex and scaley in the GsSprite structure now act like PsyQ or Blade Libs when they are
higher than eight. When they are lower than eight they act like in 0.1.
- Added scaling, wrapping, and justifying support to GsPrintFont()
Attributes can be set by using GsSetFontAttrib()
- In 0.1 bmp2tim crashed if it didn't find or couldn't read the source bitmap, this is fixed now.
- Fixed endianness issue for wav2vag on big endian machines.
- Added GsScreenW and GsScreenH global variables which report the size of the screen
in the current video mode so you don't have to keep track of that yourself
- Added is_load_delay_ok(). This checks if the load delay slot behaves as it does on real hardware.
Many emulators do not emulate the load delay slot and show inaccurate behavior.
You really need to know this only if you are doing interesting things with opcodes yourself, otherwise the compiler and the assembler will take care of this for you.
- After returning from main() the empty endless loop wasn't running. This is now fixed.
- Added %f format to vsnprintf(). This adds floating point support to all functions using the *sprintf() family of functions, including GsPrintFont
- Added '@' conversion to vsscanf and vsprintf(). It is a base-2 (binary) conversion and it is a psxsdk specific extension.
- Added support for 64-bit integers in vsnprintf() for binary, decimal, octal and hexadecimal formats.
- Added 2d rotation support to sprites.
- Added long file name support (via TRANS.TBL) to fopen() using the cdromL: virtual device
- Added gs_get_tpage_num, gs_get_tpage_u and gs_get_tpage_v macros to psxgpu.h, with which
you can obtain the tpage, u and v parameters for textures knowing the coordinate in the framebuffer
- Added GsIsWorking() alias for GsIsDrawing()
- Removed useless jr $ra, nop instruction sequence which was never executed in system calls, and fixed CriticalSection system calls
- Added GsScreenM to store current video mode (NTSC or PAL)
- Removed -O0 from the psx-gcc script, you can now specify optimizations on the compiler command line.
PSXSDK library code is still compiled without optimizations, though.
- Fixed a really nasty bug when checking if (input image width + x origin) and (input image height + y origin)
were out of boundary in bmp2tim
- GsPrintFont() now recognizes TAB ('\t') and prints it accordingly (eight white characters)
- Added the low-level CDROM library.
- Added PSX_InitEx(). It allows to more strictly control what is initialized compared to PSX_Init()
- Added -mpink option to tim2bmp. Transparency is rendered as "magic pink" in the output bitmap file.
- GsSetFont() now keeps the old value for the item related to the argument if -1 is passed as the value of the argument.
i.e: GsSetFont(-1, -1, 30, 40) will just change the font clut x and y to 30 and 40, and will keep the font origin x and y unchanged.
- Fixed some bugs in the huff program which were pointed out by Gemini ages ago, but were never fixed (really).
- Fixed vsnprintf buffer overflow.
- Fixed floating point printing bug in vsnprintf.
- Fixed the bug with GsGPoly4 that happened because the arrays of the colors in the structure were three bytes long
instead of correctly being four bytes long. Thanks to Xavier Del Campo Romero for reporting this.
- Implemented index(), rindex(), strspn(), strcspn(), strtok() and strsep() in the libc.
- Implemented strlwr() and strupr() in the libc.
- Implemented qsort() in the libc.
- Implemented realloc() in the libc.
- Implemented optional auto-waiting in GsDrawList(). If GsSetAutoWait() is called at any time in the program,
after that moment you will not need to wait for the GPU to finish working in your code, everything will be done
automatically. Auto-waiting needs to be enabled as it is disabled by default.
- Removed a totally wrong comment in start.s which said "this might now work on PSOne".
It made its way through despite being about some strange things happening when PSXSDK was
began to be programmed??
- Fixed stupid bug in SsUploadVag()
- Readded abs() to libc.
- Added PSX_INIT_SAVESTATE flag to PSX_Init() to save the state
of the BIOS before initializing the library
- Added PSX_RestoreBiosState()
- Added PSX_RunExe() to easily load another exe to run instead of the currently running one
- Changed the prototype and return value for PSX_GetButtonName() to something sane.
- GsUploadImage() now has a void return type. It was int before but it never returned anything.
- Fixed a lot of warnings when compiling libpsx.
- Fixed an array initialization out of bounds problem in libmodplay.