History


VersionDateChanges
2.00 Beta 5xx/08/2005Fixed silly bugs on pixel macros (yes, once more !). Credits go to Sebastian and Kevin for the fixes (escape one of the question marks that form trigraph ??!, etc.).
Restructured the entire documentation, so that it can be maintained and most of all read more easily. I myself didn't even feel like browsing that 180K block anymore, I guess ExtGraph users don't either. The main documentation is following the way started by the tilemap engine documentation - which is much smaller.
updated the documentation, made the HTML code cleaner using Firefox plugin HTML Validator. My schoolmate Yoann made me aware a while ago that the HTML code I used and made was poor (but at least, it uses CSS !).
Fixed side clipping of GrayClipISprite8_MASK_R, thanks to Jean-François Geyelin for the report.
Added new TestCollide routines (request from TIGCC/TICT board user "lachprog"), optimized existing ones.
Added plane scaling routines. As all such routines, they eat up a lot of CPU time, they are rather large due to unrolled loops and/or lookup tables, they require doubling the space allocated to planes, their effect is more or less ugly (especially when there's text). Some games are more playable on 89 using that technique, but others should be adapted to the other screen size in order not to rely on those rather slow routines.
Optimized and added single sprite -> 2 plane routines. Thanks to David Randall (Ranman) for the contribution and part of the coding.
Optimized extgraph.h for size: removed many useless "extern" and "register" keywords, saving ~12 KB.
Switched to TIGCC 0.96 and its GCC 4.x, which required small changes in the build batchfile (which you should hardly ever use anyway).
Switched to a more general and powerful cleanup script which uses GNU tools under an Unix shell. Requires Cygwin or MSYS (untested) on Win32.
Added a fork of the TIGCCLIB grayscale routine, which can run the tilemap engine, and a mention of Grib. See the root of this documentation for more information.
Added GrayClipISpriteX16_MASK_R, based on Genlib's put_masked_big_sprite, made by Julien RF; made several other X16 routines.
Added three ClipSpriteX8 routines, based on code by Geoffrey Anneheim (geogeo), which I significantly optimized; it.
Created GrayClipISprite16_TRAND/L_R as an example of TRAND/L routines. The readme used to be wrong about making TRAND/L from TRANB/W, and making TRAND/L was not so easy.
On 12/08/2005, created a SVN repository for ExtGraph at http://opensvn.csie.org/ExtGraph. Anonymous checkout allowed, but recommended only to check if particular bugs were fixed since the latest beta/release. Indeed, the trunk may contain broken things or break the API without notice (and it did multiple times in the few days before this beta !).
Fixed GrayClip(I)Sprite32_MASK_R. Thanks to Olivier Givaudan for the report.
Fixed *SpriteX8Get(_R), they used to crash the calculator when bytewidth was < 2. Thanks to Geoffrey Anneheim (geogeo) for the report.
Fixed a long-hidden bug on FastFillRect(_R) in A_REVERSE mode. Thanks to Olivier Givaudan for the report.
Tested in unusual conditions (low bytewidths, both dimensions odd) and eventually fixed (Clip)SpriteX8(_R) routines.
Changed several function names, only rarely-used ones.
Fixed a number of simple rectangle functions.
Added FastTestLine_*_R.
Optimized FastLine_*_R for both size and speed.
Fixed FastDrawLine(_R) in A_XOR mode and FastLine_Invert_R: there was often a problem at the middle of the line.
Added PixCollide*_R routines.
Added (Gray)(Clip)FillTriangle_R and callbacks for them. The architecture (routine + callback) is close to that of Genlib, with good reason. The grayscale versions require modified grayscale routines (see an item above).
Added GrayFastDrawLine_R.
2.00 Beta 425/12/2004removed (I)SHADOW(2) routines: they are nearly useless thanks to Create(I)Sprite(I)Shadow and OR routines (which require a small additional amount of space) and they increase maintenance (more than one quarter of all drawing modes).
added Gray(Clip)S[ame]MASK routines.
added a number of hints in the readme, to help users customizing routines by themselves.
added fast background save&restore routines, with the corresponding demo (demo22): faster replacement for Get + RPLC, i.e. another way to do without redrawing everything all the time. This one can outperform all other approaches under some conditions.
Thanks to the input of Julien, they are better.
fixed once more pixel macros, thanks to Kevin.
added missing "const" keyword to most prototypes: at last, no more warnings about discarded qualifiers.
nearly all occurences of ".data" were replaced by ".text". This suits better to the latest TIGCC Betas (better code with -ffunction-sections -fdata-sections --reorder-sections). No impact on compression ratio.
Reduced length of all label names in most ASM routines (unless this made the routines both unreadable and impossible to maintain). This saved dozens of kilobytes on extgraph.a (up to 500 bytes per function !) and .s sources, and improved compression ratio !
ExtGraph doesn't force global imports (from the external files added with GNU ar) anymore. This saves ~6 KB on the size of extgraph.a and won't interfere with clients anymore. Thanks to Sebastian for the report.
Julien told me about speed optimizations on TRANW and TRANB sprite routines (found in programs by pad and PpHd): +15% for TRANW, +>30 % for TRANB.
small optimization (2 bytes, 4 clocks) on a number of sprite routines. [A and B] is equivalent to [B and A]...
small optimization on several routines: d3 or d4 can be saved to a1 instead of the stack.
fixed long-hidden bugs. Most B/W Sprite32 routines were buggy, thanks to Jesse Frey for the report. I found other long-hidden bugs retesting the entire library.
updated the tilemap engine. The API was reduced somewhat: Julien took out with the most useless modes to reduce maintenance. Two demos were added. However, the tilemap engine is still incompatible with the TIGCCLIB grayscale doublebuffering.
brand-new pure ASM ttunpack routines by Samuel Stearley. The fast version gives a huge speed increase (now over 80 KB/sec !), interesting size decrease (while the routine is definitely optimized for speed, with code inlining, and we did not trade safety for speed and size !) compared to the C routine Greg, him and later I had optimized. The small version is 240 bytes (more than 300 bytes smaller than the other version), but it is slow (~<20 KB/sec).
updated SpriteX8 functions, splitting them into normal and slower versions.
several new routines related to planes (Fill, FillWithGarbage). To be fair, I want to mention that I received suggestions and code from Dave Randall, but I had already thought about implementing such routines, and I made a different implementation.
added GrayFastDrawHLine_R, done by Julien.
probably added bugs, forgot fixes, forgot to mention fixes...
not updated the documentation much: most new functions are not described, some prototypes in this documentation may be wrong, etc... There are several annoying bugs in ExtGraph, and I'm on holiday, so I'm spending some time making a bugfix release
translated and released the todo list.
2.00 Beta 311/06/20044 distributions are now available. .tar.bz2 is not the most powerful format, but it's OS-independent, and significantly reduces the size of the library.
Other large TICT software distributions (mainly TICT-Explorer, TI-Chess, FAT-Engine) will be available in both formats too in next versions.
New (I)SHADOW(2)/ISHADOW/ISHADOW2 sprite, clipped sprite routines; not all 32 pixel-wide sprite routines were written.
demo12 and demo17 now also show the usage of SHADOW2 and ISHADOW2 functions.
New Create(I)Sprite(I)Shadow routines: these routines compute a shadowed sprite from another; this shadowed sprite can be used with OR routines, resulting in a huge speed improvement, since (I)SHADOW(2) routines are rather slow.
Optimized EXT_GETPIX_AN the same way as EXT_SET/CLR/XORPIX_AN, fixed all these macros: they used to have too wide constraints for inline ASM, resulting into nonexistent instructions and therefore errors while building projects.
Improved macro EXT_XCHG: since the asm exg instruction can exchange address registers, address registers are now allowed too.
Semi-preshifted sprite functions / macros are now available (8x8 are lacking).
Rewritten many BLIT_R routines to take blitmask in d3, suppressing the inconsistency.
Rewritten TestCollide... routines in ASM, added __regparm__ versions.
Bugfixed the exepack decompression function introduced in Beta 2, thanks to maeyhem for the report. I decreased the size of the decompression routines a bit by turning two 4-byte branches into 2-byte branches.
Bugfixed SpriteX8 routines (bug reported by Travis Fischer, "Fisch2"), thanks to Julien Richard-Foy and step back to older C routines. They used to trigger Address Errors when both height and bytewidth were odd. The rather quick fix (due to lack of time) turns into slightly slower routines (the larger the sprite is, the higher the difference is). This will be improved in next versions.
Revamped the readme at the root of the distribution.
Documentation update (nearly complete):
  • fixed several problems (missing [END OF BOLD] at the beginning messed up the entire documentation, added [PARAGRAPH] and [END OF PARAGRAPH] everywhere);
  • added prototypes and descriptions;
  • made more compatible with that profusion of browsers (suggestions by Kevin Kofler and Sebastian Reichelt).
  • now using free and native SciTE to edit this documentation (I had to fix the formatting of this changelog though).
  • added tips, comparison between the different approaches.
Changed several directory names to 8.3 format.
2.00 Beta 228/03/2004Tilemap engine widely updated, more functions and power (although currently incompatible with the "real" TIGCCLIB doublebuffering); documentation now in English, thanks to Malcolm Smith (TRGenius) for fixing our translation.
Documentation update started, far from complete.
Added a sprite function test program, see right above.
Added another unpacking routine, the new one doesn't disable interrupts (slower but doesn't mess up grayscale).
demo6 now uses the full 92+/V200 screen.
Fixed various bugs: thanks to Jordan Krage (jmank88), Nicolas Lalevée (hibou), ? (Vertyos) for the report.
Slightly optimized many (Gray)(Clip)SpriteX functions (jackiechan), other optimizations are on the way.
Missing SpriteX8_MIRROR_HV_R written.
New routines (GraySpriteX_SHADOW, transition effects, tile (aligned sprite) routines, (Gray)(Clip)SpriteX_RPLC, non-clipped outlined circle drawing, etc.).
Various other routines are on the way (preshifted sprites, more rectangle-drawing routines, more transition effects...). We're open to suggestions up to some extent, too.
2.00 Beta 119/12/2003Tilemap engine added (documentation currently in French, it will be translated into English ASAP).
Small changes in the documentation.
2.00 "Beta 0"18/12/2003Massive update !
Credits for this version go to:
  • Julien Richard-Foy (jackiechan): the vast majority of sprite routines, the upcoming tilemap engine, new scaling routines, several line routines... He's the main contributor, of course. The majority of the work for this version was done by him.
  • Christophe Molon-Noblot (Ximoon): SpriteX8 routines.
  • Olivier Armand (ExtendeD): generic line routine supporting the three drawing modes (optimized a bit).
  • Lionel Debroux: general maintaining, reorganization of the library, tests.
  • Greg Dietsche, Samuel Stearley: updated unpacking routine (safe and faster). Current hexarray taken from SuperStart.
1.0222/05/2002Stepped back to old version of decompression function, because the new one causes random errors to be thrown.
For TIGCC versions greater than 0.93 all functions are declared with "__attribute__((__stkparm__))" in extgraph.h to work correctly with commandline switch -mregparm
1.0108/05/2002Bug in exepack decompression function fixed. Thanks to MastaZog from the TIGCC Programming Forum for the report.
1.0005/04/2002Address calculations in almost all routines changed for speedup (using 0x1e instead of 0xffffe). Thanks to Francesco Orabona (bremen79@infinito.it) for this suggestion.
Macros for bounding rectangle collision testing (BOUNDS_COLLIDE,BOUNDS_COLLIDE8, BOUNDS_COLLIDE16 and BOUNDS_COLLIDE32) added
Functions for Collision detection (TestCollide8() and TestCollide16()) added
bug in macro EXT_PIXOFFSET (missing brackets) fixed. Thanks to Greg Dietsche (greg@gregd.org) for the report.
Demo11 added which shows how to use the collision detection functions TestCollide8() and TestCollide16()
0.9702/04/2002Function FastDrawVLine() added (thanks Lionel, for the original code)
All functions which takes a color argument optimized by using internally the fact that the color values are bit-flags
Demo1 is built now separately for each calctype to reduce codesize
2 bugs in FastDrawHLine() fixed by Francesco Orabona (bremen79@infinito.it)
0.9525/02/2002FastDrawHLine: missing static keyword for local array added to gain speed and size reduction
Local arrays in scaling function declared static to gain speed and size
ClearGrayScreen2B - converted to ASM file (.s)
FastCopyScreen - converted to ASM file (.s)
Exepack decompression routine added (taken from TIGCC Tools Suite)
ttunpack.h and ttarchive.h integrated into extgraph.h for ease of use
Section about Exepack Decompression and TTArchives added to docs
0.9022/02/2002Demos modified by Lionel Debroux (lionel_debroux@yahoo.fr)
Utilities: EXTGRAPH_VERSION_STR, EXTGRAPH_VERSION_PWDSTR, EXTGRAPH_VERSION_MAIN, EXTGRAPH_VERSION_SUB added
Utilities: CheckHWMatch() and DESIRED_CALCTYPE added
0.8705/02/2002Adaptions to compile correctly with TIGCC 0.93 and beyond
0.8631/07/2001ClearGrayScreen2B and FastCopyScreen converted to pure ASM routines
Function FastDrawHLine added (horizontal line drawing)
Functions FastDrawGrayHLine/FastDrawGrayHLine2B added
Misstyped -w option changed to -W in batch files
Misstyped -w option changed to -W in batch files
All problems reported by -W fixed
Routines DrawGrayChar and DrawGrayChar2B added
Warning added to docs of FastCopyScreen
Grayscale variants of sprite drawing routines added
Documentation of SpriteX_BLIT functions fixed
Typo in macro EXT_PIXADDR fixed (thanks FlashZ for reporting)
0.8031/05/2001Routines FloodFill and FloodFillMF added
Demo8 (floodfill demo) added
Routines SpriteX8_MIRROR_H and SpriteX8_MIRROR_V added
Demo9 (sprite x8 mirror demo) added
ClearGrayScreen re-implemented as very fast ASM loop
Routine FastCopyScreen added
Demo10 (fastcopyscreen demo) added
0.7622/05/2001Format information of wide sprites added to X8 functions
Mis-typed macro DrawGrayRect() fixed
Second bug in treatment of x position in ALL scaling routines fixed
ClearGrayScreen/ClearGrayScreen2B added
SpriteX8_MASK and SpriteX8_BLIT fixed
Usage info changed
0.7517/05/2001All TABs removed from the sources
Grayscale support routines for doublebuffering added (DrawStr2B etc.)
Problems with grayscale support routines fixed
Demo6 and demo7 programs added
Wide sprite routines (SpriteX8_OR/_AND/_XOR/_BLIT/_MASK/Get) added
x position treatment in scaling routines fixed
0.7015/05/2001Fast Pixel Access Macros added
FastDrawLine supports now A_NORMAL, too
DrawGrayStrExt restores now previously active font
Documentation of KronicDeth reformatted and incorporated
0.5107/05/2001Sprite scale routines added
0.5006/05/2001Sprite get routines added
0.3014/04/2001Grayscale routines added (taken from TI-Chess and slightly modified)
0.2013/04/2001Sprite routines added (formerly released as TSE) and library renamed to extgraph
0.1012/04/2001Project started (scroll routines and linedrawing routine)