@database "SystemPatch.guide" @author "Sante" @remark "$VER: SystemPatch Guide 1.26 (06 May 2005)" @node MAIN "SystemPatch Guide" SystemPatch 2.94final (06/05/2005) Guide version 1.26 _____________________________________________________________________________________________ Sections of this guide - First be sure to read the @{"disclaimer" link DISC} notice - Look at the @{"what's new" link NEW} page to see what is changed since last public version - If you don't know what we are talking about: @{"what is it" link DESCRIPTION} page - System @{"requirements" link REQS} to run SystemPatch - A list of @{"patches installed" link PATCHES} by SystemPatch - If you want to use my program please read its @{"usage and installation" link INST} - You can spread this around the world: @{"distribution" link DIST} - People I have to @{"thank" link THANKS} - Hoping there are no serious @{"bugs" link BUGS} - A short @{"history" link HISTORY} page remembering all versions - Now take a look at the @{"author" link AUTHOR} - @{"Statistics" link STATS} about this software - Users considerations and some answer to your @{"questions" link FAQ} All work done by Sante Nocciolino © 2000-2005 @endnode @node STATS "Statistics" 30421 lines of assembly code 6083 global symbols 583 local symbols 5 years of development Software utilized during the build of the various versions of SystemPatch: PhxAss MC680x0/68851/6888x Macro Assembler v4.43 Copyright 1991-2004 by Frank Wille vlink V0.9h (c)1997-2005 by Frank Wille IRA V1.05beta (28.1.3) (c)1993-95 Tim Ruehsen (SiliconSurfer/PHANTASM) D68k V2.0.8 MC68000-68060,MC68881/82,MC68851 Disassembler Copyright 26.11.95 by Denis Ahrens lvo v37.3 Copyright (c) 1990-1993 Commodore-Amiga, Inc. Native Developer Kit for AmigaOS 3.9 In_Go, the interactive reassembler v4.0i by Ingo Molter gcc version 2.95.3 20010315 (release) SObjA - Version 1.03 Copyright (C) 1990 - Ray Burr GoldED 6.2.3 MuForce 40.30 by Thomas Richter WinUAE Documentation: AutoDocs AMIGA ROM Kernel Reference Manual MC680x0 reference 1.0 Hardware utilized: Amiga 1200 with a Blizzard 1260 at 66Mhz, 64 MB RAM PC with AMD Athlon XP 2400+ 512 MB RAM @endnode @node DISC "Disclaimer" Disclaimer ********** THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDER AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @endnode @node FAQ "FAQ" FAQ *** Q: can I use exec patches with OS 3.9+BoingBag2? A: yes, you can use them without problems. Q: can I remove BlazeWCP 1.74? A: yes, SystemPatch uses BlazeWCP 1.74 code. Q: can I remove FText from my user-startup? A: yes, you can. Q: it's your WaitBlit implementation faster than HogWaitBlit in BlizKick? A: no, they operate in the same way but I suggest you to do not use HogWaitBlit: replacing functions in ROM is more effective than patches but in some circumstances HogWaitBlit can cause corruptions in serial comunications(I've experimented this on my Amiga). Q: can I use SystemPatch on a system with gfx board? A: no, SystemPatch is for Amiga without gfx board, it works on AGA (I only have my A1200 with 68060 for debugging). Some people reported me that my program works with Picasso gfx boards and Picasso96 software but some bugs appear. Q: need I your exec and vectors patches if I have exec 44.1beta4 by Harry Sintonen? A: you don't need a thing until you discover its utility. Harry's exec it's very good so I think that if you don't like having too much patches installed on your OS you can avoid the use of my patches. Q: can I use SystemPatch with NOLAYERS and NOGFX on my CGFX system? A: yes, you can! C: I tested the new SystemPatch and it works on my UAE 0.8.25 PPC, the only problem is the GUI patch so I use NOGUI(?), I run PowerIcons (It's not displayed correctly) and Workbench3.5 so I use NOUTIL as well, system runs whit boingbag2 installed, I can feel the difference. C: I`m using this on Amithlon, and the system `seems` to go slightly faster now. Used it with NOUTIL and NOGFX. @endnode @node AUTHOR "Author" Author ****** If this program does not crash on your system or you think it is useful let me know about it. Write me! Congratulations and insults are welcome or if you want to send me anything you like you can( comments, sources, progs, other patches...). Sante Nocciolino E-mail: ziosante@libero.it or nocciolino.sante@tiscali.it Home-page: http://web.tiscali.it/ziosante @endnode @node NEW "What's new" What's new ********** Changes since last public version: - added two untested patches: SortGList(), DoCollision(). - added X-Windows task to FAllocRasterExcludeList. - at this time I think I'll not add more patches, this is the last incarnation of SystemPatch with its goodies and its bugs. I hope people liked my effort. @endnode @node DESCRIPTION "Description" Description *********** ABOUT It's merely a try to implement a patch that could group part of known patches for 68k Amigas, with some implemented by me. A sort of "all in one" patch. WHY I want my Amiga to be faster but I don't like to install tons of programs that patch my system and could interfere each other...So I started coding SystemPatch. USEFUL SystemPatch is intended to be useful on AGA systems. SystemPatch replaces some functions of the operating system with optimized ones, increasing the system efficiency in a multitasking environment. If you don't have OS3.5 or OS3.9, SystemPatch can fix some bugs in exec.library for you because the code of its patches takes care of known bugs of old execs. If you have FBlit running SystemPatch takes care of it, installing appropiate patches that require it and excludes patches that conflict with it. USELESS If you have a MMU and the mmu.library by Thomas Ritcher, SystemPatch can protect the code used by installed patches from being over-written( this is not true for quicklayers.library). FUTURE There are some speedups to quicklayers.library I've in mind but I lack the time to implement them. @endnode @node REQS "Requirements" Requirements ************ MINIMUM: - OS 3.0+ - CPU 68020 - FAST RAM SUGGESTED: - OS 3.1+ - CPU 68060 - FAST RAM - AGA - FBlit V3+ - a MMU and the mmu.library V41+ by Thomas Richter @endnode @node sbitmap "Copy and Sync superbitmaps" TYPE: optimize NOTE: requires FBlit by Stephen Brookes CopySBitMap() and SyncSBitMap() are patched to use BltBitMap() to copy/syncronize superbitmaps. @endnode @node bltclear "BltClear()" TYPE: optimize NOTE: requires FBlit by Stephen Brookes If FBlit is running the patch is based on QBC 1.1 by Rick Pratt included the special version for 68030; if FBlit is not running a different version is used. @endnode @node draw "Draw()" TYPE: optimize NOTE: not installed if FBlit is running @endnode @node extent "Extent routines" TYPE: optimize Implemented in C and compiled with gcc. The code generated is much better then ROM routines so I decided to include them in SystemPatch. Not explicitly tested for speed. @endnode @node wcp "WCP patches" TYPE: optimize Based on BlazeWCP 1.74 by Rick Pratt. @endnode @node initarea "InitArea()" TYPE: bug fix Fix graphics/InitArea() bug, AreaEllipse() crashed if buffer wasn't explicitly zeroed & maxvectors was limited to 8191. @endnode @node relsema "ReleaseSemaphore() bug fix" TYPE: bug fix ******* exec.library/ReleaseSemaphore ***************************************** * * * NAME * ReleaseSemaphore -- make signal semaphore available to others * * SYNOPSIS * ReleaseSemaphore(signalSemaphore) * A0 * * void ReleaseSemaphore(struct SignalSemaphore *); * * FUNCTION * ReleaseSemaphore() is the inverse of ObtainSemaphore(). It makes * the semaphore lockable to other users. If tasks are waiting for * the semaphore and this this task is done with the semaphore then * the next waiting task is signalled. * * Each ObtainSemaphore() call must be balanced by exactly one * ReleaseSemaphore() call. This is because there is a nesting count * maintained in the semaphore of the number of times that the current * task has locked the semaphore. The semaphore is not released to * other tasks until the number of releases matches the number of * obtains. * * Needless to say, havoc breaks out if the task releases more times * than it has obtained. * * INPUT * signalSemaphore -- an initialized signal semaphore structure * * BUGS * In V39 and V40 Kickstart, there is an error condition that bump * ss_NestCount twice, if multiple Procure() SemaphoreMessages and * a ObtainSemaphore() are pending for the same task. * * NOTE * This call is guaranteed to preserve all registers. * * SEE ALSO * InitSemaphore(), ObtainSemaphore(), ObtainSemaphoreShared() * ******************************************************************************* @endnode @node rawdofmt "RawDoFmt()" TYPE: optimize I've only written a RawDoFmt() implementation in C, compiled with gcc and made some speed test. On my AGA Amiga 1200 with a 68060/66 is faster than ROM routine. Time to format 65536 strings: ROM routine 9.65 s SystemPatch 4.44 s @endnode @node replymsg "ReplyMsg()" TYPE: bug fix This patch fixes the hang if GetMsg() is called in tight loop on 68060. @endnode @node PATCHES "Installed patches" Installed patches ***************** It patches these functions: in intuition.library @{"AllocRemember()" link allocrem} @{"FreeRemember()" link allocrem} in graphics.library DisownBlitter() @{"WaitBlit()" link waitblit} QBlit() QBSBlit() WaitTOF() RectFill() SetAPen() SetBPen() SetDrMd() SetABPenDrMd() WritePixel() OwnBlitter() DisownBlitter() LockLayerRom() UnLockLayerRom() @{"BltClear()" link bltclear} @{"WritePixelLine8()" link wcp} @{"WritePixelArray8()" link wcp} @{"WriteChunkyPixels()" link wcp} @{"Text()" link text} @{"ReadPixelLine8()" link rpl} ClearRegion() @{"InitArea()" link initarea} GetBitMapAttr() @{"AllocRaster()" link allocraster} FreeRaster() AddBob() @{"Draw()" link draw} ClearScreen() ClearEOL() SetFont() TextLength() InitRastPort() @{"BltBitMap()" link bltbitmap} @{"SetRGB32()" link setrgb32} @{"SetRGB32CM()" link setrgb32cm} @{"CopySBitMap()" link sbitmap} @{"SyncSBitMap()" link sbitmap} @{"TextFit()" link extent} @{"TextExtent()" link extent} @{"FontExtent()" link extent} SortGList() DoCollision() in exec.library Forbid() Schedule() Reschedule() GetMsg() PutMsg() @{"ReplyMsg()" link replymsg} Enqueue() Signal() SetSignal() ExitIntr() DisPatch() Cause() Exception() Wait() InitSemaphore() AddSemaphore() @{"ReleaseSemaphore()" link relsema} AddPort() WaitPort() RemPort() RemSemaphore() RemResource() SetExcept() Insert() AddHead() Remove() RemHead() RemTail() Switch() DoIO() WaitIO() @{"RawDoFmt()" link rawdofmt} in utility.library (not installed on 040/060) SMult32() UMult32() SMult64() UMult64() SDivMod32() UDivMod32() It loads the @{"quicklayers.library" link quicklayers} to speed up layers.library. It replaces Auto Vector Interrupts routines with faster ones. It replaces BLIT interrupt vector. These patches do not interfere with other programs like: FBlit, SysPatch (best if you run SystemPatch after it), CMQ (and other CopyMem() patches), MCP (you have to disable QuickLayers patch), PoolMem (and other memory allocation patches), Executive, Mult64Patch. NOTE: Routines that could be dangerous on 040/060 systems are not installed. @endnode @node rpl "ReadPixelLine8()" TYPE: optimize ;------------------------------------------------------------------------------ ; ; 100% systemfriendly PlanarToChunky converter for use with intuition ; screens in applications/games/whatever. ; ; Coded in 1994 by Morten Eriksen. ; Reach me through email: mortene@stud.unit.no. ; ; Use and modify as you like - give credit where appropriate. ; ; Timings on my A1200 with 68EC020 and 32-bit fastram: ; ; Testcase Dimensions This routine C='s ReadPixelArray8 ; ; 1 320x256x5 - 10 frames (0.20 seconds) 41 frames ; 2 320x256x8 - 16 frames (0.32 seconds) 51 frames ; 3 640x512x4 - 34 frames (0.68 seconds) 158 frames ; 4 1024x1024x1 - 35 frames (0.70 seconds) 312 frames ; 5 752x578x8 - 89 frames (1.78 seconds) 312 frames ; ; Please suggest speed-ups in the code if you see any (by changing the ; algorithm, using other instructions with less executiontime, better ; pipelining, etc etc). The 'convert32pixels' is of course the bottleneck, ; as this subroutine accounts for almost all processing done in the ; converter. ; ; Some modifications (stack use instead global data, no 68000 support) in ; 1998 by Stephan Rupprecht ; ; This routine takes a buffer of chunkybytes and fills it with converted ; planar datas from the source BitMap. ; ; As a replacement for C='s ReadPixelArray8 routine, this one is more than ; three times as fast (in worst case) and works directly on bitmaps (instead ; of RastPorts). All cases handled (any width and height > 0, no alignment ; restrictions). Works on OCS/ECS/AGA, all Kickstarts and any MC680x0 CPU. ; The downside is that it does not do clipping and does not work with ; interleaved bitmaps (support for interleaved bitmaps should be piece of ; cake to implement, though). ; ;------------------------------------------------------------------------------ @endnode @node bltbitmap "BltBitMap()" TYPE: optimize NOTE: not installed if FBLit is running ***************************************************************************** * * NewBltBitMap() * * Replacement BltBitMap which uses the 68030 instead of the blitter. * The following conditions must hold for the CPU routine to be used: * * o Bitmaps aligned on same longword bit offset * (i.e. XSrc % 32 == XDest % 32) * * o If source bitmap == destination bitmap, then YSrc != YDest * * o Blitter minterm = $Cx (i.e. straight copy) * * If any of these conditions doesn't hold, then the original BltBitMap * is called instead. * * Input: * D0 - X Source * D1 - Y Source * D2 - X Dest * D3 - Y Dest * D4 - X Size * D5 - Y Size * D6 - Minterm * D7 - Mask, indicating which planes are to be affected * A0 - Pointer to source bitmap structure * A1 - Pointer to destination bitmap structure * A2 - Pointer to temporary bitmap structure (not used) * * Output: * D0 - Number of planes actually copied * * The copy routine works as follows. Everything is done in longword * units. If the bitmap being copied fits horizontally into a single * longword, then the CopySingle() routine is used which copies a * single column of longwords, masked out as appropriate. Otherwise, * there are at least two longwords involved (the left and right edges * of the bitmap), with possibly some longwords inbetween as well. * CopyMultiple() is called to perform this copy; it uses two mask * values to identify which bits in the left and right longwords should * be copied. The longwords (if any) in between are copied verbatim. * * Note that using longwords gives a big win on the A3000 since it can * access CHIP ram via the 32 bit bus. This relies on the data being * longword aligned of course. In the worst case (where a bitmap width * is not a multiple of 4), one out of every two rows will be longword * aligned, which is not too bad. In the more common case, every row * is longword aligned. For overscan users, it's best to have your * screen width a multiple of 32. * ***************************************************************************** @endnode @node text "Text()" TYPE: optimize NOTE: requires FBlit by Stephen Brookes Based on FText 1.7 by Rick Pratt. @endnode @node waitblit "WaitBlit()" TYPE: optimize This turns on DMAF_BLITHOG in DMACON write register while the Blitter is busy and it turns off the flag on exit. @endnode @node quicklayers "quicklayers.library" version 0.54 I've discovered a side effect on systems with 3.0 ROM where for a strange reason the BltBitMap() routine corrupts the first pixels of the first row of destination bitmap when minterm is 0xC0( vanilla copy) and we are blitting to a rastport; this is visible on Workbench pull down menues when quicklayers is installed. To find the problem I had to use WinUAE emulating an A500 with 68020+FPU, ECS and 3.0 ROM. SwapBitsRastPortClipRect() patch in quicklayers.library uses BltBitmap() with a minterm of 0xC0 so it is affected by this problem. The problem disappears if you use a replacement for the BltBitMap() routine like FBlit or just a 3.1 ROM. SystemPatch BltBitMap() patch does vanilla copies only on bitmaps aligned on the same longword bit offset, other bitmaps use original ROM routine. If you have a 3.0 ROM the installer script will install the old quicklayers 0.52 which doesn't use BltBitMap() in SwapBitsRastPortClipRect(). @endnode @node allocraster "AllocRaster()" TYPE: optimize NOTE: requires FBlit by Stephen Brookes It redirects memory allocations to MEMF_ANY instead of MEMF_CHIP. Tasks can be excluded from promotion creating the ENV:FAllocRasterExcludeList file which contains a list of tasks; each task name must be separated by a carriage return. If your program starts but you can not see anything probably it is a task that must be excluded. To determine task name you can use a monitor program like Scout. CLI processes can be listed by typing "status" from shell. Example of dangerous tasks that must be excluded: Quake68k, BloodNet AGA. @endnode @node setrgb32 "SetRGB32()" TYPE: optimize SetRGB32() is patched to use LoadRGB32(). Autodocs says: "LoadRGB32 is faster than SetRGB32, even for one color." @endnode @node allocrem "AllocRemeber() FreeRemeber()" TYPE: optimize AllocRemember() - Identical to the Intuition AllocRemember() function, except that it only allocates one chunk of memory, instead of two. This can reduce memory fragmentation, and gives an increase in speed. FreeRemember() - Identical to the Intuition FreeRemember() function, except that it does not take the ReallyForget parameter. This means that you cannot free up just the myRemember structures; the call to FreeRemember() will free the whole kaboodle. @endnode @node setrgb32cm "SetRGB32CM()" TYPE: bug fix Somewhere I've read: "The AGA SetRGB32CM() BUG problem The SetRGB32CM() AGA OS call doesn't set the lower 4 bits of the blue component. You can prove this by calling SetRGB32CM() and studying the blue component calling GetRGB32()." This modified version of SetRGB32CM() should fix the problem...I'm too lazy to test this. I hope there is someone interested in testing this and reporting me if the fix works! @endnode @node INST "Installation" Installation ************ SystemPatch should be copied to your C: directory and the supplied quicklayers.library to your LIBS: directory. You can run it from shell or from your user-startup just typing the program name. If you have not or not enough fast memory or inadeguate processor it exits without installing anything. If you have FBlit you should run SystemPatch after it. If you have Executive, it's best to launch it after SystemPatch. You should disable MCP QuickLayers patch unless you use the NOLAYERS option. Parameters: QUIET it doesn't output any message if everything ok. NOINTS it doesn't install faster Auto Vector Interrupts and Interrupt Vectors. NOEXEC exec.library patches are not installed. NOGFX graphics.library patches are not installed. NOUTIL utility.library patches are not installed (recommended on OS 3.5+). MMU this option needs mmu.library V41+ and a MMU in your processor to work. It marks memory used by patches as ROM memory, so faulty programs can not overwrite them (I mean that code can not be damaged, but functions can always be over-patched by other software). Use this feature with care because it is yet experimental. NOLAYERS it doesn't load quicklayers.library. NOINTUITION does not install intuition.library patches. - You can disable single patches by typing the unneeded patch prefixed by minus; type "SystemPatch ?" to see the patches you can disable. @endnode @node DIST "Distribution" Distribution ************ SystemPatch is FREEWARE. You can distribute the original archive around the universe as long as no charges are collected. This archive may be included in freeware collections. @endnode @node THANKS "THANKS" Thanks ****** Riccardo Micci (for 68060 testing). Rick Pratt for his FText, QuickBC, BlazeWCP. Morten Eriksen for his planar to chunky code. Thomas Richter for mmu.library. Luca 'Hexaae' Longone for bugs hunting. Simone Bevilacqua, Kev Harrison, Balogh Karoly, Brian Sharman, Michael Evans, Stellan, AmigaMancer... Everyone who helped me! Last but not least: AMIGA! @endnode @node BUGS "Known bugs" BUGS **** Every new version corrects some bug and introduces new ones, so stay warned. Take a look at @{"intuition.library" link allocrem} patches. Look too at the @{"quicklayers.library" link quicklayers} page. Text() patch is installed only if you have FBlit running, but SystemPatch does not check if FBlit is V3+ (as needed). Some people use my patch on Amiga with Picasso gfx board reporting me only one problem: smart refresh windows hang the system so you have to use simple refreh. Sorry for this, but I've not the possibility to debug my patch on systems with gfx boards. ...users have to fill this page. Tested on : A1200 OS3.0 68020+68882 8 Megs Fast Ram A1200 OS3.0 Blizzard IV 16 Megs Fast Ram A1200 OS3.5+BoingBag2a Blizzard IV 16 Megs Fast Ram A1200 OS3.5 68060/50 16 Megs Fast Ram A1200 OS3.9+BoingBag1 68030+68882 16Megs Fast Ram A1200 OS3.9+BoingBag2 68060/66 64Megs Fast Ram WinUAE @endnode @node HISTORY "History" History ******* NOTE: beta versions usually are not released to the public - 2.94final (06/05/2005) added SortGList(), DoCollision(). - 2.94ß (13/04/2005) beta 2: changed some behaviour in non-FBlit BltBitMap(). - 2.94ß (15/03/2005) beta 1: added X-Windows task to FAllocRasterExcludeList; updated guide. - 2.93 (21/02/2005) fixed a nasty bug for ReadPixelLine8() that appears with interleaved bitmaps; minor update in quicklayers.library for SwapBitsRastPortClipRect(); two versions of quicklayers included, one is explicitly for 3.0 ROM; little improvement to BltBitMap(); updated installer script; added SyncSBitMap()and CopySBitMap(); added TextFit(), TextExtent() and FontExtent(); updated documentation. - 2.92 (11/02/2005) added a fix for the ROM AGA routine SetRGB32CM()(asked by Kev Harrison), little optimization to SetRGB32() patch. - 2.91 (22/01/2005) some bugfix to RawDoFmt() causing un-aligned output in some case(reported by Luca "Hexaae" Longone). - 2.9 (16/01/2005) improved RawDoFmt()...previous version was causing incompatibilities whith some software...now all problems should be fixed! - 2.8 (13/01/2005) another fix for RawDoFmt()...I hope the last!!! updated quicklayers.library. - 2.7 (31/12/2004) another case solved for RawDoFmt(): locale.library FormatString() incompatibility. - 2.6 (12/12/2004) fast fix for RawDoFmt(): hexadecimals were converted in lower-case. - 2.6 (11/12/2004) fixed a bug in the AllocRaster() that caused anonymous tasks to be un-promotable, . added RawDoFmt(), AllocRemember(), FreeRemember(). - 2.5 (20/10/2004) fixed a bug that caused some MuForce hits in presence of anonymous tasks that were using AllocRaster() patch. - 2.4 (18/09/2004) Added SetRGB32() patch. AllocRaster() allocs to MEMF_ANY instead of MEMF_FAST. Finally done a better task exclusion system for AllocRaster(). - 2.3 (08/04/2004) fixed bugs in AllocRaster(); some WB games like VChess, MineRunner, ... was saying there was not enough memory(reported by Luca "Hexaae" Longone). - 2.3ß (28/02/2004) a lot of small enhancements, minor speedups to some gfx functions and bugfixes. AllocRaster() patch causes probelms with games like Quake68k and BloodNet AGA, now fixed(reported by Luca "Hexaae" Longone). WritePixel() bug that causes system freezing with Octamed SoundStudio when using its Synthetic Sound Editor(reported by Luca "Hexaae" Longone). ENV:FAllocRasterExcludeList can contain a list of tasks to be excluded from AllocRaster() chip to fast memory promotion. I've to do a better implementation for the task exclusion of AllocRaster() patch. Added patches for non FBlit systems: BltBitMap(), Draw(), BltClear(). Previous BltClear() required FBlit but was installed too when FBlit was not running. Added: ClearScreen(), ClearEOL(), InitRastPort(), TextLength(), SetFont(). Other improvements I don't remember. - 2.2 (10/01/2004) removed RemIBob() because buggy. - 2.1d (12/12/2003) added AllocRaster(), AddBob(), RemIBob() patches. - 2.1b49(26/08/2003) only updated quicklayers.library: ScrollLayer() removed, SwapBitsRastPortClipRect() a little faster. - 2.1b (01/08/2003) streamlined code to gain some little speed. quicklayers.library is now version 0.48 and has new patches: DoHookClipRects(), ScrollLayer(), SwapBitsRastPortClipRect(). - 2.1 (27/04/2003) added possibility to disable single patches. corrected bugs in exec patches. Added WaitIO(), DoIO(), InitArea(), ClearRegion(), GetBitMapAttr(). quicklayers.library is now linked using PhxLnk. - 2.0d (04/04/2003) corrected my mistake in BltClear030() that could cause problems on 68030 processors; removed a problem with Switch() on FPU systems; streamlined code in Reschedule(); added some output strings; corrected bugs in error handling of MMU code. - 2.0c (02/03/2003) updated graphics patches to BlazeWCP 1.74 code; added ReadPixelLine8() patch; corrected a bug in Exception(). - 2.0b (18/01/2002) minor changes to installation code. Streamlined quicklayers.library. - 2.0a (16/01/2002) created the included quicklayers.library. - 2.0 (15/09/2001) introduced new layers.library patches. - 1.9d (08/08/2001) 3rd beta release. Aggressive memory protection is used if MuForce is running. - 1.9d (31/07/2001) 2nd beta release. Cleaned up code a little. Included a little GUI interface. - 1.9d (19/07/2001) Beta release. Added some error strings for MMU code. Added WritePixelLine8(), WritePixelArray8(), WriteChunkyPixels(), BltClear(), Text(). - 1.9c (09/07/2001) Beta release. Cleaned MMU handling code. Added more MMU errors recognition. Now MMU handling code should be nearly complete. - 1.9c This is an alpha release. Added MMU option; now you can protect installed patches from being overwritten by faulty programs. - 1.9b Removed DoHookClipRects() becase was buggy on OS3.9(try to run WBClock with layers.library patch installed). - 1.9a Bugfixed patching code. Now compiled with Phxass (was compiled with Snma before this release). - 1.9 Added gfx patches: RectFill(), SetAPen(), SetBPen(), SetDrMd(), SetABPenDrMd(), WritePixel(), OwnBlitter(), DisownBlitter(), LockLayerRom(), UnLockLayerRom(). - 1.8fß Bug fixed on command line parser. - 1.8f Added command line parameters and some output text. - 1.8e Readded Switch(), GetMsg(). Reworked code a little. Reworked installation code; some patches are not installed on 040/060 systems. - 1.8d Faster WaitBlit(). Added WaitTOF(). - 1.8c Now if you own a 68040/68060 the utility.library patches are no more installed. Re-added Exception(), Wait(), InitSemaphore(), ReleaseSemaphore(), AddSemaphore(), AddPort(), WaitPort(), RemPort(), SetExcept(), Insert(), AddHead(), Remove(), RemHead(), RemTail(), RemResource(), RemSemaphore(). - 1.8b Added DisPatch(), Cause(). - 1.8a Added Signal(), SetSignal(), Enqueue(), ExitIntr(). - 1.8 Totally rewritten. Lot of patches removed because of problems with various Hardware. - 1.7b New UDivMod32() and SDivMod32() patches: these make a control on operands before taking division to avoid divide by zero errors. This fixes problems with programs that call that functions with wrong arguments(causing divide by zero errors). - 1.7 Removed Interrupts Vector patches because of a bug with mfm decoding of trackdisk. - 1.6f General speedup to interrupt vectors and auto vector interrupts. - 1.6e Corrected a bug in SOFTINT. Little speedup to BLIT. - 1.6d Reworked code for a better use of caches. - 1.6c Little speedup to InitRastPort(). - 1.6 Added AreaMove(), EraseRect(), ReleaseSemaphore(). Added Interrupt Vectors patches (see patches list in this doc). - 1.5g Added InitSemaphore(), AddSemaphore(), AddPort(), RemResource(), RemSemaphore(). Little speedup to Switch() and DoHookClipRects(). - 1.5f Little speedup to DoHookClipRects(). Changed the installation code. - 1.5e Nothing changed except the source. Now it uses CopyMemQuick() to install the patches. - 1.5d Added DoHookClipRects() patch. - 1.5c Re-added Switch(), now works perfectly. If Executive is launched this patch is not installed. - 1.5b Speeded up Auto Vector Interrupts. - 1.5a New Wait(). Some misc speedups. Aestetical changes to source. - 1.5 Restored old WaitBlit() patch (version 1.2 of SystemPatch) for safety reasons. Added utility.library patches. Reworked source. New Wait(). - 1.4 Removed a bug in QBlit() patch. Added QBSBlit() patch. - 1.3 Changed WaitBlit() patch (it's a little faster to return if blitter is not busy). Added a QBlit() patch. - 1.2 First public release. Reworked patch installation code to do it more compatible with Executive (this is done by removing Switch() patch). - 1.1 Fixed a bug in Schedule() that made to crash my system sometimes. - 1.0 First internal release. @endnode