P96 used to be called "Picasso96", but since the family of Pablo Picasso does not like this name, we refer to it as "P96" for now and all times. P96 is an RTG software package for the Amiga. It is commercial software, protected by copyright laws. You can purchase a license in our shop. Re-distribution of the new package is not allowed.
The shareware status of P96 V2.0 remains active: Re-distribution of this archive remains legal, as long as no money is charged and no claim about registration is made. The only source for a legal registration of the P96 software package is iComp's web site. This specifically includes the old V2.0 version, which is also the property of iComp GmbH.
A pre-existing license betwen the P96 authors Tobias Abt & Alexander Kneer and Hyperion has been turned into a co-ownership of P96: Hyperion owns and maintains the PPC port of it, which is part of AmigaOS4 and successors. This means that P96 in Hyperion's PPC-based OS does not need separate licensing.
Update September 2021 (V3.1.2)
- In case the display was switched from a display that is not in the chain to the native output, connected to another card that is in the display chain, then P96 did not de-activate the monitor switch of the other card, and hence the display remained blank.
- Added the 320x240 and 320x200 mode templates to P96Mode.
- The vesa mode templates of P96Mode lacked the sync polarity information. They have now been added.
- In case allocating an additional screen buffer for screen dragging does not work, V3.1.1 failed. V3.1.2 now falls back to an earlier method of migrating the front viewport and re-allocating it, requiring a roundtrip of the display contents through system RAM.
- In case the board did not indicate the presence of the blitter, memory reorganization for screen dragging might not have worked at all, and thus screen dragging may have failed. This also hurt the ZZ9000 which, besides having a blitter, does not indicate its presence to P96.
- In case the native Amiga output does not have any visible screen, it is now turned off and the background color is set to black.
- The flicker fixers are now only turned off if a board on the display chain becomes active. Otherwise, the native display generation remains untouched.
- In case no active screen is available anymore on a given monitor, the corresponding monitor is now blanked.
- When allocating the frontmost bitmap, the memory handling only migrated front and back bitmap if no blitter was available for moving memory around. It now migrates all bitmaps.
- The picasso96api.library now returns the CVisionPPC big-endian modes with increased priority to ensure tools use these modes with priority. This may help to get some programs to work that assume a particular display organization without checking what they get or need.
- The same modifications have been made to the emulation.library, which is responsible for emulation of the villageTronic API and the cybergraphics API.
- Note that while the above modifications make big-endian modes preferred modes, not all graphic modes may be available under all situations. In particular, if GRANTDIRECTACCESS is set, modes that require an "aperture switch" are not. In particular, the ARGB mode on the CVisionPPC requires such a switch to be made, and is thus not available, unless GRANTDIRECTACCES is not set.
- The CGfx emulation indicated the depth of the ARGB modes as 32bit, though the original CGfx API indicates depths of such modes as 24 bit. This got fixed, and alpha is not included in the depth computation for emulation purposes.
- Some programs seem to call LoadView(NULL) in supervisor mode. Note that this function is not supervisor-callable, though P96 now adds a workaround that executes at least some of the code in supervisor code.
- The P96 Installer script now explicitly sets the user level to "Intermediate" before continuing with the question whether to install the software. This is necessary as the "novice" user will never be asked, and therefore the user will never be asked, looping/waiting forever for confirmation.
Update to V3.1.0 (June 2021)
- This version adds much better multi-monitor support, including keeping the native Amiga display on the native RGB output if the screen is switched away from it.
- Mode coercion was actually slightly broken and could result in the mouse pointer leaving a native screen topwards even though an underlying RTG mode could not be shown.
- HIRES mouse pointers are now again available on Os 3.2 due to a new interface between RTG graphics and the intuition pointer class.
- If a board signals that it is not part of the display chain, P96 keeps now the native display active on the Amiga RGB output and thus allows a two-monitor setup with the native and the RTG output.
- The Pixel64 driver failed to detect the graphics card on the ateo bus board. The card detection function was fixed. Note that the older ateo driver you find elsewhere does not reserve sufficient memory for the sprite data and thus trashes the mouse pointer.
- See also the release notes of the 2.2 release: The fastlayers.library is obsolete. If you want fast layers operations, make sure you install either Os 3.1.4, or the V45 layers library from aminet.
- The screen-dragging disable logic did not work entirely correctly and enabled screen dragging, even if front and back screen were on two different boards.
- The maximal bitmap width on the S3Virge and S3Trio chips allowed to exceed widths of 4096 bytes, beyond what the chip can handle.
- Due to a FIFO misconfiguration, the S3Virge could not use the blitter if the stream processor was disabled and showed display glitches at high display resolutions. This was fixed.
- The rtg.library could cause a hit if a ViewPort with a NULL RasInfo or ColorMap was passed into LoadView.
- The rtg.library erraneously activated PiP/memory windows even if those were on a back screen.
- The memory window of the CVision3D was broken in multiple ways. Unfortunately, the stream processor requires a wait for a vblank to get disabled savely, or it trashes the screen or hangs. Note that the processor needs to be disabled on screen dragging or screen switches, so this happens regularly.
- Re-enabled the CVision3D memory window on 256 color background. There is nothing wrong with that.
- The WaitVerticalSync() function of the S3 chip did not restore memory banking properly on exit if waiting for the end of the sync. Note that the interrupt was disabled on Z-II sytems anyhow that required memory banking.
- The S3 Virge interrupt handler was massively reworked to operate properly on Z-II and Z-III machines. In particular, it restores proper banking from a shadow register.
- Now in Zorro-II mode the CVision3D also allows board interrupts. Enabled interrupts allow a more fluently screen dragging, and also may be used to synchronize to the screen, avoiding flicker on animations.
- Waiting for vertical blanking on the S3Chip was not working at all on Z-II machines as it accessed the register in the I/O bank where, due to a chip erratum, it was never registered. The Z-II code now accesses the register in the MMIO bank where it works.
- In case a screen whose monitor is not in the display chain looses the intuition input focus, P96 removes now the mouse pointer from the screen.
- In case a smaller screen was dragged down with a larger screen in the back, the rtg.library may have trashed memory upfront the smaller screen. This was because the lib assumed erraneously that the frontmost screen could be panned left-right.
- The default maximal planar memory is now 128K instead of 256K as this is the maximum permissible by legacy VGA registers (GR6, to be precise).
- In case allocating a planar bitmap was attempted that was too big to fit on the card, the rtg.library would have let this allocation pass, even though any later attempt to display this bitmap would have failed. The updated code now checks beforehand whether a bitmap can possibly be displayed.
- The memory reorginzation function did not reliably move planar data around as the BlitRectNoMaskComplete() function for planar data is just a dummy. Planar data is now moved by the CPU manually through the legacy VGA memory apperture mapping.
- 4-bit planar modes are now available on the CVision3D/S3Virge based cards. Due to a chip limitation, the maximum available memory in the planar mode is limited to 128K per plane, i.e. 512K total.
- The S3Virge memory window is now also disabled for interlaced modes because the S3 stream processor does not work on interlaced screens. Note that the stream processor is also not available on double clocked (high-resolution) modes and double-scan (line-doubled) modes.
- The CVision3D card driver recognizes now the tooltype INTERRUPT=No to disable the vertical sync interrupt usage. Use INTERRUPT=No in case you find that the interrupt handler is not working for you and you observe problems or conflicts with other expansion cards or the CIA interrupts.
- The rtg.library avoids now an additional WaitForSync() if it is possible. This enables smooth screen dragging especially on those chips where the CPU cannot reliably wait for a vertical blank (S3Virge).
- Due to panning by adjusting the memory window address and a rounding issue, the S3Virge memory window overlay could stop display DMA for the primary (background) stream a bit too early, causing artefacts at the left edge of a window on a panned screen.
- The S3Virge hardware accelerated line drawer did not clip lines correctly and could therefore draw outside of the window bounding box.
- For consistency reasons, the CVisionPPC card now also recognizes the tooltypes INTERRUPT=No and INTERRUPT=Yes, they work the inverse of the NOINTERRUPT tooltype, which is just harder to understand (double negation).
- The S3 accelerated line drawer was off by a lot. Due to a some missing sign extensions and clearing of low-order bits, computations might have been just wrong, resulting in incorrect clipping results. In case coordinates where negative, the algorithm also incorrectly adjusted the line start address without ensuring that this address must be a multiple of 8.
- The S3 line drawer did not always clip correctly, resulting small out-of-bounds pixel errors. The computation of the clip window is now done hopefully correctly.
- Since the S3 line drawer cannot ensure that it draws lines exactly as the built-in Bresenham which is used for off-card line drawing, and since this may result in some wrong pixels, the accelerated line drawer of the CVision3D can now be turned off by the tool type FASTDRAWLINE=No.
- The CVisionPPC accelerated line drawer may have also caused small out-of bounds clipping errors because its line drawer may not operate exactly as the built-in Bresenham algorithm. The same fixes of the clip window computation have been here applied as well. Also, the CVisionPPC fast line drawer can now be turned off by the tool type FASTDRAWLINE=No if this turns out to be a problem.
- The rtg.library line drawer interface was streamlined a bit avoiding unnecessary register ping-pong, probably speeding up the line drawer by a small amount.
- The 24-bit BGR mode of the S3Virge/CVision3D is back. Note, however, that it does not support screen dragging due to a limitation of the S3 chip. Note that this mode, due to the same limitations, does not support interlace, double-scan or double-clock modes. The resulting display will look "funny" because the stream processor (on which this mode is based) does not support scan doubling, interlace, double-clocking and screen- dragging.
- Due to some trickery, the planar mode of the S3Virge also gets a hardware sprite. The HW sprite is also enabled on the 24 bit mode.
- The S3Virge driver forgot to adjust the endianness for the line drawer and therefore drew lines in the PC endian monitor modes in the wrong color.
- Due to a hardware bug of the S3Virge, the line drawer operates flakey in the 24bit mode and may draw the last pixel in the wrong color. It is now replaced in this specific mode by the software renderer.
- The blitter fallback for the 32-bit true-color modes on the S3Virge were activated way too early as the chip can take stride values up to 4095 bytes, sufficient for most true-color screens. This allows blitter usage for rectangle fills, scrolling and inversion for many cases and thus speeds up processing of these modes by quite a bit.
- In 24 bit RGB or BGR modes, DrawEllipse confused the R/B channel order and drew the ellipses in the wrong color. All other modes are fine.
- Ellipse drawing on non-layered rastports in the COMPLEMENT mode left a couple of pixels non-complemented, namely the top, bottom, left and right edge of the ellipse, and for circles, the 45 diagonals. Actually, these pixels were inverted twice. Also, COMPLEMENT drawing of ellipses used the wrong color for 15, 16 and 32 bit RGB modes.
- The CVision3D driver reconfigures now Gary for a more relaxed bus timeout as the S3Virge chip may lock the bus for quite a while in high color depth modes and may thus trigger a physical bus error.
- In case you see flicker on 24bit 1024x768 modes of S3Virge boards, ensure that you reduce the clock frequency a bit as the chip is operating at its edge of bandwidth. Possible bus contentions may also cause system freezes or bus errors.
Update to V3.02 (January 2021)
- Added a new flag to indicate that the sprite resolution is halfed horizontally on double-clocked rates. Thie Cirrus GD5434 is a victim of this property.
- Computation of the total required video RAM for enabling the screen dragging was not correct, and did not take alignment requirements of screens into account. This was fixed now.
- The Z-III configuration of the CyberVision3D was not in the database of the installer script and thus failed to install the required components.
- The S3Virge.chip driver was still delivered with a major version of 7, though the major version should have been 42.
- Apparently, the legacy VGA engine of the S3 Virge chip has problems pipelining its data while the blitter is accessing the video RAM. The new driver therefore only enables the blitter if the stream processor is enabled as well, which happens for non-double-clocked, non-double-scan video modes and if no screen dragging is in process.
- The rtg.library did not accept a LoadModule'd version of the graphics library as original and thus recognized it as "patched" by the P5 CVisionPPC driver, disabling the native modes.
- The 3DLabsPermedia2 driver is now more careful reseting the chip which could create (physical) bus errors while the chip is still busy performing the reset.
- Due to a missing bracket, the 3DLabsPermedia2 driver was still not installed along with the CVisionPPC card driver.
Update to V3.01 (December 2020)
- S3Virge driver updated: Stream processor only used when screen dragging is not used
- S3Virge driver fixed for double scan modes
- rtg.library will allow "FakeNativeModes" if P5 patches are removed by another tool, which is NOT part of this P96 archive.
- SetRGB32() could not be called from supervisor mode. Fixed, which takes Shapeshifter back to working.
- 3DLabsPermedia2 now installed (fix in the installation script)
- ModifySprite() fixed, fixing MouseBlanker commodity.
- P-IV memory handling improved
Update to V3.0 (October 2020)
- added Screen dragging
- added CyberVision drivers
- Warp3D API compatibility
- please check back for more information here. We're publishing this in a hurry, while AmiWest ist still going on.
Update to V2.4.6
- Fixed AllocBitMap(), which was broken on very large screens in the (unpublished) version V2.4.5.
Update to V2.4.5
- Due to an oversight, allocating planar (4-bit) bitplanes on intuition V46 or above did not return the proper result as it allocated a chunky bitplane instead. As net-result, planar non-native graphics modes did not work at all.
Update to V2.4.4
- Bug in erasing True Colour screens fixed; Pagestream now works properly.
Update to V2.3
- Bug in BltMaskBitMapRastPort() fixed: The modulo-value of the mask was calculated wrong.
Updates in V2.2
- The fastlayers.library is obsolete. The distribution no longer includes it, and the rtg.library no longer uses it. A v45 version of layers is available in the aminet which provides similar functions, though not on the basis of a patch. Otherwise, P96 works also on top of the V40 layers.library.
- rtg.library: Apparently, some line drawing modes were a bit off, especially in combination with the firstDot flag. This may still require some testing, though.
- rtg.library: Blitting small bitmaps in 16-bit hi-color mode could have trashed memory.
- rtg.library: Some min-terms for 15 and 16-bit hi-color when blitting chunky to hi-color modes trashed registers and hence caused rendering defects.
- rtg.library: Allocating bitmaps for screens that are not yet visible, but about to become visible caused trashed screen content as soon as the screen was moved to front. This was because the bitmap already got board memory at its allocation time, which was however, overwritten by the backfill memory on a screen flip, causing random nonsense from non-initialized memory on the screen.
- rtg.library: Not yet visible true- or high-color bitmaps that are about to become visible but are not yet visible get the background colour from WB screen, even though they may not be even part of the WB.
- Fixed testing of occluded layers for PIP functions, adapted to the new V45 layers interface.
- test for native bitmaps: the rtg.library now uses consistently TypeOfMem() to test whether a bitmap can be accessed by the native chipset or requires CPU emulation.
- Added a new internal hook, EnableSoftSprite(boardinfo,formatflags,modeinfo) which allows a more flexible switching of softsprites than the simple SoftSpriteFlags available before. Especially the Cirrus GD534 has strange rules when the hardware cursor is available and when not.
- Some combinations of mask and line mode did not honor the FRST_DOT flag of the graphics rastport correctly. Fixed.
- JAM2 in HICOLOR mode rendered incorrect results when drawing lines.
- Some blit combinations with patterns did not honor the minterm combinations correctly, especially combinations of JAM1/JAM2 and INVERSVID were problematic.
- Cirrus GD5434 (PiccoloSD64 and others):
- double line mode was broken (there is probably still a similar bug in the GD542x)
- softsprite enabling is now more flexible
- avoids color artifacts at the right border in true-color autoscroll modes
- Due to a forgotten flag in the driver initialization, the pointer hot-spot was off if the BIGSPRITE option was used and the mode used line doubling.
- Cirrus GD542x (GVP Spectrum and Picasso II):
- removed artifacts on true-color screens with autoscroll enabled.
- there is potentially still a bug in the double-line scan modes.
- Develoment files both for application developers and card developers are now available. While the previous development files were based on the GD432x chip and the PicassoII board, both chip and card do not demonstrate the full feature set of P96 ideally. Instead, the GD5434 and PiccolloSD64 chip and card are now included. The GD5434 supports double-line scan modes, and requires a complicated-mode dependent soft-sprite switching that is only supported by the latest version of the rtg.library.
- Previous versions of P96Mode and the emulation.library required a private link library, namely the xls.lib. As this library is no longer available, the missing functions have been re-implemented.
- The P96 monitor driver became a lot shorter now.
- The install tool FindCVPPC caused hits on some systems. The tool was rewritten to avoid them now.
- Note that you can bypass the Amiga blitter now and use the CPU for blitting, thus allowing bitmaps in FAST MEM. This requires setting the following variable:
to contain the value "Yes" for this operation.
Update in January 2019 (V2.3)
- RTG library updated: Fixed non-working modes for Permedia2 chip, which had a problem with screenmodes using different byte-orders. This was not directly related to the Permedia2 chip, but a more generic error in RTG library, so if you have read about Bug#466 in the OS3 bug tracker in conjunction with BVisionPPC, this is the fix that came out of it.
Update in April 2019
- Improved compatibility with SDL. This is putting emphasis on "improved" but not "fixed", as SDL has an inherent problem that P96 cannot fix. SDL-driven programs may crash on a screen-change. When a screen-change is happening, then SDL is pulling a pointer to the bit map, but it does not lock it everytime it does that. The bad thing is that P96 may or may not have moved the bitmap in the mean time, which is documented behaviour. The good news is the "black screens" with NetSurf are mostly eliminated with this update.
Update July 2019 (V2.4.2)
- Cirrusgd542x driver updated, which was used for the P-II, GVP-Spektrum and others. Screens with more than 512 lines are now working properly, and automatic switching to software-cursor is now aware of special behaviour of the chip.
- fixed a test-case for the P-IV flicker fixer that initially only showed in emulation, but is now confirmed to fix the real deal as well.
Some things have changed with P96 V3.0!
- Memory management (the default implementations are usually fine).
- bi->AllocCardMemAbs(): Allocate memory of a given size at a particular graphics memory location, migrating any other memory that is in the way.
- bi->ReInitMemory(): Re-initialize the memory pool for a given RGBFormat.
- Sprite management:
- bi->EnableSoftSprite(): Check for a given RGBFormat and modeInfo whether a softsprite needs to be enabled (already new in 2.4.0, i.e. v41)
- Screen management:
- bi->SetSplitPosition(): Enable a split-screen at given line.
- BoardInfo->Flags: BIB_VGASCREENSPLIT: Board allows screen split.
Software Developer archive
The following archive explains how to adapt programs to use the P96 software (updated June 2021 for V3.1.0): Media:Develop.lha
Hardware manufacturer archive
The following archive shows how to make a driver for P96 using the full scope of the software, including hardware acceleration (updated June 2021 for V3.1.0): Media:CardDevelop.lha
Writing a driver
This has been exported to a separate Wiki article. Please see P96 Driver Development.
P96 is a very complex software package. Finding our way around it would not be possible without the help of Thomas Richter AKA Thor, who did the bulk of the work. Also, special consideration should be given to the beta tester team of OS3.1.4. Writing proper bug reports is hard work. Thanks for giving this the same love that you have for this wonderful platform: Marcus Gerards, Mikhail Malyshev, Thomas Klein, Ignacio Gully, Tobias "MastaTabs" Seiler and Christian "Scrat" Euler.
Operation and installation under UAE
The UAE driver has been removed from the package for unclear copyright reasons and for obsolescence. The only thing required is an icon and a generic loader, which is identical for all P96 drivers. Just go to devs:monitors/ and rename some other P96 driver (and icon) to "uaegfx" and "uaegfx.info" - only the name matters, but the loader is identical for all P96 drivers. Further, the only really important content of the icon/info file is that a tooltype "BOARDTYPE=uaegfx" is set.
The file "libs:picasso96/uaegfx.chip is not needed any more - this is the one that's under the problematic license. WinUAE has P96 support built-in since a few years, and that even has hardware-sprite support for the mouse pointer, which was not the case for the old drivers (yes, there were two versions with different bugs, one even without hardware blit functions).
If you really want to run an old version of UAE, you will find the required driver in the historic P96 shareware archive on Aminet.
Installing the new version of P96 under UAE involves some manual steps and ignoring warnings. Specifically, you need to select any other graphics card from the list to continue installation, and then you need to override the warning message that tells you that it's not a good idea to install graphics card drivers on an emulated system. This will get you though installation and let you do the change to the tooltype of the P96 monitors file (click the icon once, then select "information..." from the drop-down menu of WB).