## Changes done for each driverversion:

# head (0.16-1, Rudolf)

- General:
  - Expanded modelist to include suggested modes above 1600x1200 upto 2048x1536 resolution: Done by Andrew Bachmann;
  - CRTC timing restriction checking updated: Modelists exported adhere to every cards max. CRTC capability now: the oldest cards support upto and including 1600x1200, while the newest cards support upto and including 2048x1536 resolution.

# mga_driver 0.15 (Rudolf)

- G400/G400MAX:
  - Secondary head (maven) sync polarity programming fixed/implemented for monitor mode: this never worked correctly yet;
  - Fixed TVout aspect ratio, size, position and distortions; also removed refreshrate dependancies. This means the PAL and NTSC Desktop modes 640x480, 800x600 and 1024x768 are fully OK now;
  - Implemented the PAL and NTSC Video VCD and DVD TVout modes: being 640x480 and 720x480 for NTSC; 768x576 and 720x576 for PAL. Checkout the tools and VCD/DVD on TV stuff;
  - Checked out the overscanning rubbish visible on the top of the screen on the secondary head if spaces with virtual height are used. This cannot be fixed decently for monitor mode due to a MAVEN hardware design fault; fixed TVout modes via a vertical sync 'tweak' though. Also updated the workaround code for non-virtual and virtual-width-only modes to respect RAM size and non-accelerated modes;
  - Updated ProposeMode RAM and virtual width requirement checks for dualhead modes.
- G450:
  - Updated ProposeMode RAM and virtual width requirement checks for dualhead modes;
  - Added full DPMS support for secondary head;
  - Disabled G400 MAVEN design fault workaround code as the new 'on die MAVEN' is OK.
- G550:
  - Updated ProposeMode RAM and virtual width requirement checks for dualhead modes;
  - Added full DPMS support for secondary head;
  - Disabled G400 MAVEN design fault workaround code as the new 'on die MAVEN' is OK.
- General:
  - Retrace sync fix: sync now actually happens during retrace;
  - BWindowScreen R3-style function update for acceleration and page flipping/virtualscreens in apps ('Allegro' update): fixed cloning accelerants, fixed acceleration in clones;
  - CRTC timing restriction checking updated;
  - Kernel driver now signals abort on not being able to setup the INT routine instead of letting the machine freeze during accelerant initialisation;
  - Primary head sync polarity programming fixed: this never worked correctly;
  - Fixed/updated DPMS functionality on primary head as only part of it was working;
  - DPMS compatibility update for use with sync_on_green: Secondary head DPMS remains operational; primary head will only blank the display while keeping it's sync in place;
  - Modified the default settings file for use of the hardcursor ('hardcursor true'). It turns out BDirectWindow windowed mode needs this setting for it to be enabled ('Chart' demo app for instance). If you want a cursor on both heads using dualhead you need to change the settings file back to 'hardcursor false' yourself now.

# mga_driver 0.14 (Rudolf)

- Millenium I:
  - Enabled Millenium I support;
  - Fixed the kernel driver for working Millenium I support;
  - 'Pins' V1 card-config BIOS test readout implemented: This is not useable yet due to lack of info;
  - Implemented hardcursor support;
  - Fixed 2D acceleration: added software adress linearisation switch;
  - Fixed mode setup for 800x600 in 8, 15 and 16bit color, and 1600x1200 in 8 bit color by implementing framebuffer slopspace;
  - Fixed output brightness (sync_on_green error);
  - Fixed ScreenPrefs refreshrate trouble;
  - Tuned BWindowScreen support (MOVE_DISPLAY syncs to retrace now).
- Millenium II:
  - Implemented hardcursor support;
  - Fixed 2D acceleration problem: added software adress linearisation switch;
  - Fixed mode setup for 800x600 in 8, 15 and 16bit color, and 1600x1200 in 8 bit color by implementing framebuffer slopspace;
  - Fixed output brightness (sync_on_green error);
  - Fixed ScreenPrefs refreshrate trouble;
  - 2D acceleration is operational now: removed read access on a write only register;
  - Tuned BWindowScreen support (MOVE_DISPLAY syncs to retrace now).
- G100:
  - 2D engine update (removed read access on a write only register): acceleration also works now if card is used as secondary videocard.
- G200:
  - Improved overlay support for virtual workspaces (will improve more later on).
- G400/G400MAX:
  - Re-implemented videoPLL setup for monitormode;
  - Re-implemented videoPLL setup for TVout mode;
  - Re-implemented TVout functionality: output quality is still the same, but some handy logging is implemented for instance now. The Linux code has gone;
  - Fixed the low contrast/intensity setting of the TVout picture and tuned the colorburst signal;
  - Improved non-coldstarted dualhead and TVout support;
  - BWindowScreen support update for dualhead and TVout use;
  - Improved hardcursor support for dualhead stretch and switch modes, in standard and virtual spaces;
  - Improved overlay support for virtual workspaces and dualhead switch mode with TVout enabled (will improve more later on).
- G450:
  - Implemented videoPLL setup for monitor mode and TVout mode with 'on the fly' loopback filter configuration;
  - Checked and updated pins readout for all VCO reported specs;
  - Implemented basic TVout support;
  - Fixed a small bug in all PLL's that prevented TVout color from working correctly. This bug was also responsible for 'jumping' refreshrate changes on moving the corresponding slider in Be's screenprefs panel. The refreshrates and system speed are thus set more accurately now;
  - Fixed the low contrast/intensity setting of the TVout picture and tuned the colorburst signal;
  - Improved/fixed non-coldstarted dualhead and TVout support;
  - Setup TVout picture vertical sizing and positioning: the DVD and VCD modes are operational! (Checkout the tools and VCD/DVD on TV stuff);
  - BWindowScreen support update for dualhead and TVout use;
  - Improved hardcursor support for dualhead stretch and switch modes, in standard and virtual spaces;
  - Improved overlay support for virtual workspaces and dualhead switch mode with TVout enabled (will improve more later on);
  - Enabled sync signals to both the analog output connectors instead of not touching them. This might fix some 'secondary head non-working' problems, and some 'secondary card use' problems.
- G550:
  - Implemented videoPLL setup for monitor mode and TVout mode with 'on the fly' loopback filter configuration;
  - Checked and updated pins readout for all VCO reported specs;
  - Implemented basic TVout support;
  - Fixed a small bug in all PLL's that prevented TVout color from working correctly. This bug was also responsible for 'jumping' refreshrate changes on moving the corresponding slider in Be's screenprefs panel. The refreshrates and system speed are thus set more accurately now;
  - Fixed the low contrast/intensity setting of the TVout picture and tuned the colorburst signal;
  - Fixed non-coldstarted dualhead and TVout support;
  - Setup TVout picture vertical sizing and positioning: the DVD and VCD modes are operational! (Checkout the tools and VCD/DVD on TV stuff);
  - BWindowScreen support update for dualhead and TVout use;
  - Improved hardcursor support for dualhead stretch and switch modes, in standard and virtual spaces;
  - Improved overlay support for virtual workspaces and dualhead switch mode with TVout enabled (will improve more later on);
  - Enabled sync signals to both the analog output connectors instead of not touching them. This might fix some 'secondary head non-working' problems, and some 'secondary card use' problems.
- General:
  - Implemented framebuffer slopspace. This 'feature' is needed for (decent) standard mode support on older cards (before G100), and also enables very flexible non-standard mode support on all cards (in horizontal pixel multiples of 8 pixels);
  - Implemented support for primary head 'sync on green'. The driver config file mga.settings is used to enable/disable this function. Sync on green is functional on Millenium I upto and including G200 cards. G400, G450 and G550 cards apparantly miss the needed wiring on the videocard to actually support this;
  - Shutdown kernel driver Matrox Mystique 170/220 recognition. These cards are not supported, so the driver may not interfere with possible other drivers that *do* support these cards;
  - Prevented the driver from using the motherboard interrupts IRQ0, 1 or 2 if assigned to the Matrox card: otherwise the system may crash or hang on boot. Thanks to Sunlung Suen for nailing this one;
  - Removed read access on a write only register. This fixes 2D acceleration on Millenium 2 cards and G100 acceleration not working if used as secondary videocard. Because this register was used incorrectly on all cards it might fix other (sporadic) problems also.
  - Added BeOS BWindowScreen bug workaround ('ProposeMode limitation check' setup error): BWindowScreen is working fully in every valid configuration 'guaranteed' now!
  - Fixed a MOVE_DISPLAY bug: horizontal move instructions where not correctly carried out for 16 and 32bit colormodes. for 16bit moves the X-coordinate was divided by two, for 32bit moves it was divided by four. This fix definately improves support for large virtual workspaces including BWindowScreen;
  - Added BWindowScreen support for extremely large virtual spaces. Overlay can always be used (on G200 and later cards), 2D acceleration functions are only exported if they support a certain size;
  - Fixed errors in displaymode list exported by the driver: corrected 1152x864 modes timing errors; modes beyond cardspecs are nolonger exported.

# mga_driver 0.13 beta2 (Rudolf)

- Millenium II:
  - No improvements (for this version).
- G100:
  - Removed another hardcursor bug that prevented it to work correctly on some occasions (bitmap trouble),
  - Verified and improved coldstart support via actual use as secondary videocard.
- G200:
  - Implemented 'hardware zooming' in overlay. Also fixed bottom and right-most 'line' distortions sometimes visible,
  - Completed 'official' card coldstart and verified it via actual use as secondary videocard,
  - Minimized 'high-resolution video on high-resolution desktop' (downscaling) distortions in overlay by setting up G200 memory access priority. Note: This is a 'known limitation' of the G200 cards, their memory bandwidth is limited. G400 and later cards do not suffer from this on overlay...
- G400/G400MAX:
  - Implemented 'hardware zooming' in overlay. Also fixed bottom and right-most 'line' distortions sometimes visible,
  - Completed 'official' card coldstart and verified it via actual use as secondary videocard,
  - Toggled (and verified) NTSC/PAL TV output so it matches with dualheadsetup setting,
  - Included TV-adapter cable detection (currently only used on cross-connecting heads),
  - Modified dualhead implementation for head cross-connecting and overlay,
  - Added analog amplification setting for secondary head (monitor mode: prevents analog flat-panels from being driven into saturation which resulted in bright, distorted colors).
- G450:
  - Implemented 'hardware zooming' in overlay. Also fixed bottom and right-most 'line' distortions sometimes visible,
  - System PLL is programmed according to pins reported specs,
  - Implemented full card coldstart support: Not yet verified, but should work as secondary videocard,
  - Included TV-adapter cable detection: Analog VGA output connector is automatically chosen like the card's BIOS does if the card has a primary DVI connector,
  - Extended/fixed/changed dualhead implementation for cross-connecting heads, overlay use, and (coldstarted) VGA-BIOS independent functionality (not yet verified, but should work OK).
- G550:
  - Implemented 'hardware zooming' in overlay. Also fixed bottom and right-most 'line' distortions sometimes visible,
  - System PLL is programmed according to pins reported specs,
  - Implemented full card coldstart support and verified it via actual use as secondary videocard,
  - Included TV-adapter cable detection: Analog VGA output connector is automatically chosen like the card's BIOS does if the card has a primary DVI connector,
  - Extended/fixed/changed dualhead implementation for cross-connecting heads, overlay use, and (coldstarted) VGA-BIOS independent functionality.
- General:
  - Re-included the 'Be screenprefs Panel' lower-refreshrate limit at 48Hz, 'mistakenly' removed in V0.13 beta1,
  - Verified the high-refreshrate limits, works nicely according to specs and pins. G200 for instance can do 1600x1200x32 in max. 60Hz,
  - The 'mga.settings' file 'usebios' option default setting for the driver is (re)set to 'false', so the G100-G550 cards will be fully started now. Please report if you encounter problems!!
  - The 'mga.settings' file 'hardcursor' option default setting is (re)set to 'false', so dualhead works OK 'out of the box'. This is a failsafe setting: if you only use singlehead mode you can manually re-enable it,
  - Finally completed the 'migration' to the new PINS implementation. The old version is completely removed now! (pre G100 PINS readout will be implemented also, and some minor modifications might still be done in the future to support new features the driver will get.)

# mga_driver 0.13 beta1 (Rudolf)

- Millenium II:
  - No improvements.
- G100:
  - 'Pins' card-config BIOS readout re-implemented / expanded,
  - Complete 'official' card coldstart,
  - SDRAM card CAS latency tuning included,
  - Hardware cursor / 2D support fixed,
  - RAM amount detection fixed,
  - PLL timebase detection included,
  - Improved BWindowScreen support,
  - System, RAM and DAC speeds more accurately set.
- G200:
  - 'Pins' card-config BIOS readout re-implemented / expanded,
  - More official card coldstart,
  - RAM amount detection fixed,
  - B_YCbCr422 (is YUY2) hardware overlay colorkeying completed,
  - PLL timebase detection included,
  - Improved BWindowScreen support,
  - System, RAM and DAC speeds more accurately set.
- G400/G400MAX:
  - 'Pins' card-config BIOS readout re-implemented / expanded,
  - Improved card coldstart,
  - RAM amount detection fixed,
  - B_YCbCr422 (is YUY2) hardware overlay colorkeying completed,
  - PLL timebase detection included,
  - Improved BWindowScreen support,
  - System and DAC speeds more accurately set.
- G450:
  - 'Pins' card-config BIOS readout re-implemented / expanded,
  - RAM amount detection fixed,
  - B_YCbCr422 (is YUY2) hardware overlay colorkeying completed,
  - DAC speeds more accurately set,
  - PLL timebase detection included,
  - Improved BWindowScreen support,
  - PLL loopback filters configured 'on the fly'.
- G550:
  - 'Pins' card-config BIOS readout re-implemented / expanded,
  - RAM amount detection fixed,
  - B_YCbCr422 (is YUY2) hardware overlay colorkeying completed,
  - DAC speeds more accurately set,
  - PLL timebase detection included,
  - Improved BWindowScreen support,
  - PLL loopback filters configured 'on the fly'.

REMARK: Re-implementing Pins is something that has it's repercussions throughout the entire driver. Most improvements are at least somewhat connected to this. Pins describes the actual specifications of your videocard. It provides info on type, amount, speed and configuration of cardRAM. It tells the driver if TVout or DVI exist on your card. It also specifies largely what the other specifications are for every individual MGA card outthere.

# mga_driver 0.13 alpha2 (Apsed)

- TODO cleaning code styling
- TODO use of pseudo-dma
- TODO g550 dual
- TODO get card properties, not using fake bios setup
- TODO ? remove preR5 cloning area bug turnaround
- TODO implementation of GET_ACCELERANT_DEVICE_INFO following cards
- 09/06/2002
- merge of overlay implementation by Rudolf for G200-G550 (no colorkeying yet, but scaling and filtering work now)
- Millenium2 workish with strang
- 12/05/2002
- Millenium2 not working
- 08/05/2002
- cleanup LOG scheme for efficiency?, and to log some confiruration parameters from testers
- 04/05/2002
- ioctl DEVICE_NAME implementation
- use Be Driver Settings API instead ./config/*.h files
- uses #define for registers, ? is more efficient, so mga_regs.c "moved" in mga_macros.h
- corrected G200 PIXPLLP.pixplls value from Matrox doc, no visible effect
- logging revisited to use vsprintf instead poor emulation
- 24/04/2002
- some modifications to cleanup G200 geometry and colors problems: most important: YDSTORG set to 0 and PIXRDMSK to 0xff
- Mark Watson's G400 driver renamed mga driver, because it shall work not only with G400
- Mark Watson's texts or unused files from previous release moved in MarkWatson directory
- mgaGx00 directory moved one level up, renamed mga and #include cleaned

# G400 driver 0.13 alpha1 (Rudolf)

- Hardware overlay, no scaling, filtering or colorkeying yet.

# G400 driver 0.12 (last version done by Mark Watson)

- uses patch from Jean-Michel Batto to enable support for the G550

# G400 driver 0.11

- Dualhead support for the G450 (NOTE: no TVout though....)

# G400 driver 0.10b

- Clears ZORG on G450, this fixes blitting crash (no reboot from win required)

# G400 driver 0.10a

- (whistles)....This release never happened:-)

# G400 driver 0.10

- TVout support (for medium resolution modes - picture placement still off)
- G450 support (must reboot from windows to prevent crash in screen to screen blit)
- Adjusted G100/G200 to use bios initialisation (colours still broken...)

# G400 driver 0.09(a)

- 0.09 was initially (well for 3 months!) released with singlehead broken...
- Fixed G400 crash when cold booting (no idea why it works, but it does...)
- Preliminary G100 support (you must reboot from another OS, as with G200 - also only 32-bit)

# G400 driver 0.08

- Preliminary G200 support
- Removed DMA stuff (just wastes memory ATM)
- More sensible use of CRTC/DAC connection on dualhead
- MAVEN border is black!

# G400 driver 0.07

- PCI retries re-enabled (did not fix problem)
- DualHead support
- DMA preliminaries(just wastes 1MB RAM ATM)

# G400 driver 0.06

- Supports custom monitor timing
- PCI retries disabled
- Detects amount of card RAM
- SDRAM support
- Uses VBI instead of VSYNC interrupt (more blanking time after waiting for retrace)
- CRTC unlocked at init

# G400 driver 0.05

- Refresh rate set much more accurately.
- H-Sync, V-Sync polarity is REALLY set!
- Fix for R4.5.0 implemented, but still best to upgrade.
- Memory priority requests are set
- Benaphore for engine synchronisation initialised properly
- Synchronisation now always waits for idle if it has to wait, rather than attempting (and sometimes failing) to wait for individual operations.
- Pixel clock of display mode reported accurately (so refresh rate reported correctly)
- Maximum pixel clock reported correctly

# G400 driver 0.04

- Discovered driver only works with R4.5.2, no fix (yet?) (please upgrade)
- Removed MAX hack (problem was not with MAX cards, but with Be version - see above)
- Adjusted vertical sync to give more precise refresh rates (still could be better)
- Fixed bug with MOVE_DISPLAY (occurred when returning from fullscreen apps)
- Adjusted mouse pointer positioning, so hot spot is in the correct place.

# G400 driver 0.03a

- Reworked interrupt code, now uses correct method.

# G400 driver 0.03

- Vertical blank interrupt fixed - no longer steals interrupts!
- Polarity is set for VSYNC and HSYNC
- refresh with low dot clock is now correct
- logfile now has 3 levels (1 - all, 2 - info, 3 - error)
- ROM is now mapped in a better way (thanx for the info)
- Sounds like init is failing for some G400MAX owners. Please try new version first, but if it still fails please do the following (it sets it up as a standard G400 without using the BIOS):
  - cd accelerent/mgag400
  - mv mga_fake_info.c mga_info.c