Tips: Video Bugs
by Denis Pelli
December 29, 1998
Other than reading and writing pixels, all access to a video device normally goes through the software video driver. (You can use VideoToolbox SetEntriesQuickly.c to bypass the video driver of a few devices, but I don't recommend that, except as a last resort, because your program will then only work with the few video devices that SetEntriesQuickly supports.) The video driver is normally supplied in ROM on the video card or, for built-in video, in the computer's ROM. (Apparently, new PCI drivers can simply be tossed onto the System Folder.) Many drivers have subtle bugs that TimeVideo has uncovered and documented. This file is a complete list of all the bugs that I know of. I have the very strong impression that reporting these bugs to the manufacturers has led them to eliminate the bugs in subsequent versions. Before TimeVideo there was no easy way to test for most of these bugs. If your driver is not listed, please run TimeVideo and send me the report: denis@psych.nyu.edu
0. ATI PowerMac video cards: E.J. Chichilnisky, writes (12/29/98)
- "I have documented rather carefully a significant (2-3 fold) slowdown in PaintRect() on ATI cards in Macs that have two ATI cards installed, under OS 8.5.x compared to OS 8.1. ATI engineers have replicated it and blame it on MacOS rather than their own drivers. I have communicated this to Nano Urbina per your suggestion."
- "Internal ATI cards on G3 Rev2 Macs can suffer from a blurriness and dimness of the display that has been observed by many people (http://www.macintouch.com/g3dimvideo.html -- sorry, link broken as of September, 2000). The problem is with the G3R2 personality card, and is apparently absent in G3R1 and G3R3 machines. See that page for more info, including a hardware fix that I have tried and works."
1. The following drivers crash if one attempts to make a cscGetEntries request. GDGetEntries tests for these driver names and version numbers, and returns an error message instead of calling a driver that would crash. Try the demo TestGDVideo.
- Mac IIci "Macintosh II Built-In Video" (.Display_Video_Apple_RBV1) (Reported to Apple MacDTS 3/7/90 and Apple.Bugs 12/30/92)
- Relax 19" Model 200 (.Color_Video_Display version 9288). (Reported to Relax Tech. 1/19/93)
- DOME MD Max (.Display_Video_Apple_DOMEMax version 2). (Reported to DOME 3/30/95.)
2. The following drivers either take too long (more than 1 frame) to load the clut (i.e. cscSetEntries), or suppress one or more frame's worth of VBL interrupts each time they load the clut, or both. Try TimeVideo.
- Apple Power Macintosh 8500/120 (.Display_Video_Apple_Control) each call to cscSetEntries suppresses 1 vbl interrupt.
- Apple 4*8 and 8*24 "Macintosh Display Card" (.Display_Video_Apple_MDC) and "Macintosh Display Card 8*24 GC" (.Display_Video_Apple_MDCGC) take two frames to load the clut (and suppress one vbl interrupt) in all modes. (Reported to Apple.Bugs 12/30/92)
- Radius PrecisionColor 8 and 8xj take 5-8 frames to load the whole clut in 8-bit mode (and suppress 5-8 vbl interrupts); the time is proportional to the number of clut entries being loaded. (Ok in 1-, 2-, and 4-bit modes.)
- "RasterOps ColorBoard 264" (.RasterOps 1.2 264 Video Driver version 9327) takes 2 frames to load the clut (and suppresses 1 vbl interrupt) in 8- and 32-bit modes. (Ok in 1-, 2-, and 4-bit modes.)
- RasterOps "PaintBoard Li" 1.0 24XLi Video Driver takes 4 frames to load the clut (and suppresses 3 vbl interrupts) in 8-,16-, and 32-bit modes. (Ok in 1-,2-, and 4-bit modes.) (Reported to RasterOps 12/30/92).
- "RasterOps 8XL" (.RasterOps 1.2 8XL Video Driver version 9327) takes 4 frames to load the clut (and suppresses 3 vbl interrupts) in 8-bit mode. (Ok in 1-,2-, and 4-bit modes.)
- "RasterOps 24XLTV" (.RasterOps 1.4 24XLTV Video Driver version 9327) takes 4 frames to load the clut (and suppresses 3 vbl interrupts) in 8- and 32-bit modes. (Ok in 1-,2-, 4-, and 16-bit modes.)
- RasterOps "PaintBoard Turbo XL" (.RasterOps 1.0 PBTurboXL Video Driver version 9327) takes 4 frames to load the clut (and suppresses 3 vbl interrupts).
- "Spectrum/8*24 PDQ" (.Display_Video_Apple_SpecRice version 3) takes 4 frames to load the clut in all modes.
3. The following cards and drivers issue multiple VBL interrupts per frame, whereas they should emit exactly one per frame. Try TimeVideo.
- The 4*8 and 8*24 "Macintosh Display Card" (.Display_Video_Apple_MDC) emit several VBL interrupts per video frame. (Reported to Apple.Bugs 12/30/92)
- Apple Quadra 700 "Macintosh E Built-In Video" (.Display_Video_Apple_DAFB) emits 2 VBL interrupts per frame if the processor cache is enabled, but emits only 1, as it's supposed to, if the processor cache is disabled. (Reported by Kyle Cave, cavekr@ctrvax.vanderbilt.edu)
- Apple Quadra 900 "Macintosh C Built-In Video" (.Display_Video_Apple_DAFB) occasionally emits more than 1 VBL interrupt per frame.
- Apple Quadra 950 "Macintosh G Built-In Video" (.Display_Video_Apple_DAFB version 2) emits 2 or 3 VBL interrupts per frame. (Reported to Apple.Bugs 12/30/92)
- Note that the .Display_Video_Apple_DAFB version 3 driver does not exhibit this bug, at least on the Centris 650 where it resides. It would be interesting to try copying this driver to the afflicted Quadra's, adapting the instructions given above for copying a driver from the IIsi to the IIci.
4. 16 & 32-bit modes. These video drivers will correctly load the whole clut, but screw up if asked to load one clut entry at a time. The problems only occur in 16- and 32-bit mode, i.e. calling cscDirectSetEntries. Apparently few or no applications (other than TimeVideo) ever do this, as otherwise the manufacturers would have detected the fault.
- TrueVision NuVista version 3.0 cscDirectSetEntries (i.e. 16- and 32-bit pixel modes) loads garbage unless "start" is zero. cscSetEntries (i.e. 1-, 2-, 4-, and 8-bit pixel modes) works fine.
- RasterOps "PaintBoard Turbo XL" (.RasterOps 1.0 PBTurboXL Video Driver version 9327) crashes when attempting to serially load the CLUT in 16-bit mode.
5. The following video drivers don't support cscSetGamma or cscGetGamma. (Apparently Apple considers these calls optional, so not supporting them is not, strictly speaking, a bug.)
- "Radius PowerView" (.Radius PowerView Display version 9848) calling cscGetGamma returns a gamma table that's all zero. Calling cscSetGamma has no effect. Fortunately the permanent gamma table is the identity transformation. (Radius confirmed the bugs on 7/93.)
- "Radius GS/C" (.Radius GSC version 18663) doesn't support cscSetGamma or cscGetGamma. Unfortunately the permanent gamma table is NOT the identity transformation, so it fails the write-then-read cscSetEntries-cscGetEntries test performed by TimeVideo. (Radius suggests upgrading to one of their newer cards. 3/95)
- "SuperMac ColorCard" v1.97S (.Display_SuperMac_ColorCard version 1) does not implement the gamma table; cscSetGamma and cscGetGamma both return error codes. Fortunately the permanent gamma table is the identity transformation.
6. Some color video cards autodetect monochrome monitors, and remain in gray mode despite attempts to set to color mode (e.g. to use the Pelli-Zhang Video Attenuator). You may be able to fool the video card into thinking it's driving a color monitor by using a video adapter (about $40) to program the sense pins appropriately.
- If the "Radius PrecisionColor 8" and "Radius PrecisionColor 8Xj" sense a monochrome monitor then they always operate in "gray" mode, even though the driver allows you to set and read the color/gray bit. Try TimeVideo.
- Tom Busey asks, "I have an apple 2-page monochrome monitor, and I'd like to use an Pelli-Zhang Video Attenuator with it. The problem is that my PowerMac 7100 vram port insists that the 2-page monitor is grayscale only, i.e. TimeVideo reports "!color". Is there any way to trick the card into thinking it is in color so that I can use my video attenuator?" A few weeks later, he adds, "The MacLiberty Adapter does fool the computer into thinking I've got a color monitor. However, the monitor has an unusual connector and takes its input from the blue instead of the green video pin, so I'm making a custom video attenuator with its output on that pin."
7. Other bugs:
- "DOME Md Imaging Card" (.Display_Video_Apple_DOMEMd version 2) calling cscGetEntries returns RRR instead of RGB. (Patrick Flanagan reported it to DOME on 3/29/95.)
- "Spectrum/8*24 PDQ" (.Display_Video_Apple_SpecRice version 3) failed all cscGetEntries tests when in 16-bit-pixel mode.
- "Truevision NuVista+(TM) Card" (.Display_Video_NuVista version ??) fails all cscGetEntries tests. Reported by David Rose <PSY009@sysh.surrey.ac.uk> on 8/94.
- Relax 19" Model 200 (.Color_Video_Display version 9288) doesn't support the optional cscGetGamma Status call. The required cscGetPageCnt (aka cscGetPages) Status call erroneously returns a page count of 0 for all modes. Try TimeVideo or TestGDVideo. (Reported to Relax Tech. 1/19/93)
- TrueVision NuVista version 3.0 can't display MacsBug.
- The presence of the 8*24GC accelerator seems to halve the speed of CopyBits, at least on a RasterOps 8XL running on a Mac IIfx. CopyBitsQuickly is unaffected, of course.
- Apple PowerBook 520/540 "CSC-2 Built-In Video" (.Display_Video_Apple_CSC version 4) and the PowerBook500PPCUpgrade "CSC/E-CSC Built-In Video" (.Display_Video_Apple_CSC version 773) both make small 1-2% errors in the write-then-read cscSetEntries-cscGetEntries CLUT test performed by TimeVideo. (Perhaps they don't support cscSetGamma, and the fixed gamma table is slightly compressive.)
8. Video drivers that have been tested (v.0, unless noted otherwise):
- Apple "Toby frame buffer card" (.Display_Video_Apple_TFB v.4,5,& 6)
- Apple "Mac II High-Resolution Video Card" (.Display_Video_Apple_HRVC)
- Apple 8*24 "Macintosh Display Card" (.Display_Video_Apple_MDC)
- Apple "Macintosh Display Card 8*24 GC" (.Display_Video_Apple_MDCGC)
- Apple Mac Plus "1-bit QuickDraw"
- Apple Mac SE "1-bit QuickDraw"
- Apple Mac Portable "1-bit QuickDraw"
- Apple Mac Centris 610 "Macintosh I Built-In Video" (.Display_Video_Apple_DAFB v.3)
- Apple Mac Centris 650 "Macintosh I Built-In Video" (.Display_Video_Apple_DAFB v.3)
- Apple Mac Centris 660AV "Macintosh 3B" (.Display_Video_Apple_Civic)
- Apple Mac Classic II "Macintosh F Built-In Video" (.Display_Video_Apple_Apollo)
- Apple Macintosh LC III "Macintosh AA Built-In Video" (.Display_Video_Apple_Sonora)
- Apple "Macintosh SE/30 Internal Video" (.Display_Video_Apple_MacSE/30 Video)
- Apple Mac IIci "Macintosh II Built-In Video" (.Dksplay_Video_Apple_RBV1 v.0&1)
- Apple Mac IIsi "Macintosh A Built-In Video" (.Display_Video_Apple_RBV1 v.1)
- Apple Mac LC II "Macintosh B Built-In Video" (.Display_Video_Apple_V8)
- Apple Mac LC 475 "MEMCjr Built-In Video" (.Display_Video_Apple_DAFB v.5)
- Apple PowerBook 160 "Macintosh J Built-In Video"(.Display_Video_Apple_DBLite v.1)
- Apple PowerBook 160 "Macintosh A External Video"(.Display_Video_Apple_ViSC)
- Apple PowerBook 170 "Macintosh D Built-In Video" (.Display_Video_Apple_TIM)
- Apple PowerBook 180 "Macintosh A External Video" (.Display_Video_Apple_ViSC)
- Apple PowerBook 180 "Macintosh J Built-In Video" (.Display_Video_Apple_DBLite v.1)
- Apple PowerBook 520/540 "CSC-2 Built-In Video" (.Display_Video_Apple_CSC v.4)
- Apple PowerBook 500 PPC Upgrade "CSC/E-CSC Built-In Video" (.Display_Video_Apple_CSC v.773)
- Apple Power Macintosh 6100/60 "Built-In VRAM Video"
- Apple Power Macintosh 6100/60 "Built-In DRAM Video" (.Display_Video_Apple_Sonora v.3)
- Apple Power Macintosh 6100/60av "Built-In AV Video" (.Display_Video_Apple_Civic v.1)
- Apple Power Macintosh 7100/66 "Built-In VRAM Video" (.Display_Video_Apple_HPV_PDS v.1)
- Apple Power Macintosh 7100/66 "Built-In DRAM Video" (.Display_Video_Apple_Sonora v.3)
- Apple Power Macintosh 7200/90 "Built-in video" (.Display_Video_Apple_Platinum)
- Apple Power Macintosh 8100/80 "Built-In AV Video" (.Display_Video_Apple_Civic v.1)
- Apple Power Macintosh 8100/80 "Built-In VRAM Video" (.Display_Video_Apple_HPV_PDS v.1)
- Apple Power Macintosh 8100/80 "Built-In DRAM Video" (.Display_Video_Apple_Sonora v.2)
- Apple Power Macintosh 7200 (.Display_Video_Apple_Platinum)
- Apple Power Macintosh 8500/120 (.Display_Video_Apple_Control)
- Apple Quadra 630 "Valkyrie Built-In Video" (.Display_Video_Apple_Valkyrie)
- Apple Quadra 660AV "Macintosh 3B" (.Display_Video_Apple_Civic)
- Apple Quadra 700 "Macintosh E Built-In Video" (.Display_Video_Apple_DAFB)
- Apple Quadra 840AV "Macintosh 3A" (.Display_Video_Apple_Civic v.0&2)
- Apple Quadra 900 "Macintosh C Built-In Video" (.Display_Video_Apple_DAFB)
- Apple Quadra 950 "Macintosh G Built-In Video" (.Display_Video_Apple_DAFB v.1&2)
- Apple WS 6150/66 "Built-In DRAM Video" (.Display_Video_Apple_Sonora v.4)
- "DOME Md Imaging Card" (.Display_Video_Apple_DOMEMd v.2)
- DOME MD Max "Vortech" (.Display_Video_Apple_DOMEMax v.2)
- Ehman "15" Full Page Video Card..."(.Lapis DisplayServerT II Rev 1.0)
- E-Machines "ColorLink_ SX-T" (.Display_Video_Apple_EM_10T v.5376)
- Integrated Micro Solutions Twin-Turbo 128M PCI card (.Display_TwinTurbo)
- Lapis "Dual Page Video 1024x768" (.Lapis DisplayServer(TM) II Rev 1.0)
- "Radius GS/C" (.Radius GSC v.18663)
- "Radius PowerView" (.Radius PowerView Display v.9848)
- Radius PrecisionColor 8 (.Radius PrecisionColor 8)
- "Radius PrecisionColor 8Xj" (.Radius PrecisionColor 8Xj)
- "Radius Thunder/24 GT Interface" (.Radius Thunder 24 & IV Interface v.291)
- "RasterOps ColorBoard 264" (.RasterOps 1.2 264 Video Driver v.9327)
- RasterOps "PaintBoard Li" (.RasterOps 1.0 24XLi Video Driver v.9327)
- RasterOps "ProColor 32" (.RasterOps 1.0 32XL Video Driver v.9327)
- "RasterOps 8XL" (.RasterOps 1.2 8XL Video Driver v.9327)
- RasterOps 24 L (.RasterOps 1.0 24 L Video Driver)
- "RasterOps 24XLTV" (.RasterOps 1.4 24XLTV Video Driver v.9327)
- RasterOps "PaintBoard Turbo XL" (.RasterOps 1.0 PBTurboXL Video Driver v.9327)
- "Relax 19" Model 200" (.Color_Video_Display v.9288)
- "Spectrum/8*24 PDQ" (.Display_Video_Apple_SpecRice v.3)
- "SuperMac ColorCard" v1.97S (.Display_SuperMac_ColorCard v.1)
- "Truevision NuVista(TM) Card" (.Display_Video_NuVista v.3.0)
- "Truevision NuVista+(TM) Card" (.Display_Video_NuVista v.??)
Contributors to the VideoSynch,VideoBugs, & Speed pages.
- Ken Alexander, kennalex@uic.edu, E-Machines "ColorLink_ SX-T", PowerMac 8500
- Mike Alexander, Mike.Alexander@um.cc.umich.edu, RasterOps ColorBoard 264, why you can't replace boot monitor's driver.
- Michael Bach, bach@sun1.ruf.uni-freiburg.de, more on interrupts.
- David Brainard, brainard@condor.psych.ucsb.edu, Quadra 900, 8*24GC, RasterOps 24XLTV, RasterOps PaintBoard Turbo XL, PowerBook 520/540, synching cards.
- Tom Busey, busey@indiana.edu, RasterOps 8XL, Power Mac 8100/80, 7200/90, SuperMac ColorCard, Apple 2-page monochrome monitor, effect of 8*24GC "accel".
- Kyle Cave, cavekr@ctrvax.vanderbilt.edu, Ehman 15", Quadra 700.
- Raynald Comtois, raco@burrhus.harvard.edu, multiple interrupts per frame.
- Michael Eckert, meckert@ee.uts.edu.au, PowerMac 7100 timing & NuBus bug.
- Kaan Erdener, kerdener@ptnext.pitzer.edu, Quadra 660AV.
- Rhea Eskew, eskew@neu.edu, Psychophysics Display Interface.
- Bart Farell, bart_farell@isr.syr.edu, Quadra 840av, color cycling.
- Patrick Flanagan, flanagan@deakin.edu.au, DOME Md Imaging Card, Radius GS/C
- Mike Garver, Lapis Dual Page Video, Spectrum/8*24 PDQ
- Tony Hayes, PowerBook 180
- Anne P. Hillstrom, a.p.hillstrom@bangor.ac.uk, Apple PowerBook 500 PPC Upgrade
- Gregory Jackson, zu02203@uabdpo.dpo.uab.edu, DOME Md Max video card
- Richard Kunert, rkunert@facstaff.wisc.edu, PowerMac 7500,8500,9500
- Sergei Kurkin, Kurkin@med.hokudai.ac.jp, GDSetPageDrawn and GDSetPageShown
- Steve Lemke, lemke@radius.com, ShieldCursor
- Jan Linder, Jannl@aol.com, Quadra 630
- Jan-Eric Litton, janel@neuro.ks.se, PowerMac 8100/80
- Brian McElree, bdm@psych.nyu.edu, PowerMac 9500
- David Rose, PSY009@sysh.surrey.ac.uk, TrueVision NuVista+, Mac LC II
- Ariel Salomon, asalomon@joemama.mit.edu, Centris 610
- Dan Sears, sears@netcom.com, System 7.5.1, Apple Power Macintosh 6100/60av
- Steve Shevell, shevell@uchicago.edu: RasterOps "Paintboard Turbo XL"
- Paul Sowden, pss2ps@surrey.ac.uk, video bandwidth
- Scott Stevenson, stevenso@garnet.berkeley.edu, Power Macintosh 8100/80
- Nano Urbina, nano@apple.com, PowerMac 7500, 8500
- Jack Van Olst, jvanolst@west.net, IMS TwinTurbo 128 PCI card
- Marty Wachter, mrw@welchgate.welch.jhu.edu, Quadra 840AV
- Beau Watson, beau@vision.arc.nasa.gov, 9500 w Radius Thunder 30/1600 PCI video card
- Karsten Weber, karsten@john.berkeley.edu, synching two cards
- Wei Xie, U25384@UICVM.uic.edu, E-Machines "ColorLink_ SX-T", bug in SetEntriesQuickly for Apple 8*24 in Quadra 840AV.
- Xuemei Zhang, xmei@Psych.Stanford.EDU, Radius Thunder/24 GT
Please send any corrections or additions to denis@psych.nyu.edu