Super MegaZeux: Difference between revisions
Asiekierka (talk | contribs) |
m (→How It Works: Clarify and fix typos.) |
||
Line 13: | Line 13: | ||
SMZX mode can be accessed by setting the '''SMZX_MODE''' counter to 1, 2, or 3. In the editor, the current SMZX mode can be changed with the Select Screen Mode dialog (F11). | SMZX mode can be accessed by setting the '''SMZX_MODE''' counter to 1, 2, or 3. In the editor, the current SMZX mode can be changed with the Select Screen Mode dialog (F11). | ||
==How | ==How it works== | ||
SMZX Mode halves the horizontal screen resolution in favor of adding two colors per character, effectively making a color palette of 256 unique colors. | SMZX Mode halves the horizontal screen resolution in favor of adding two colors per character, effectively making a color palette of 256 unique colors. | ||
Each "pixel" in SMZX | Each "pixel" in SMZX is derived from a horizontally adjacent pair of text mode pixels in the following manner: | ||
{|class="wikitable" | |||
|+ | |||
!Color | |||
!Left pixel | |||
!Right pixel | |||
|- | |||
|Color I | |||
|'''off''' | |||
|'''off''' | |||
|- | |||
|Color II | |||
|'''on''' | |||
|'''off''' | |||
|- | |||
|Color III | |||
|'''off''' | |||
|'''on''' | |||
|- | |||
|Color IV | |||
|'''on''' | |||
|'''on''' | |||
|} | |||
If colors II and III seem backwards to experienced programmers, it is not a mistake; this is how the original DOS versions defined these colors. | |||
Line 47: | Line 71: | ||
===SMZX Mode 2=== | ===SMZX Mode 2=== | ||
SMZX mode 2 was the first to allow | SMZX mode 2 was the first mode to allow full user control over the 256 color palette. It is internally identical to SMZX mode 1, but instead of generating the new colors from a user-defined 16 color palette, it allows direct reading and writing of all 256 colors either through the '''set color # to # # #''' command or with the counters '''SMZX_Rn''', '''SMZX_Gn''', and '''SMZX_Bn'''. | ||
All colors are defined in pairs of 2 hex digits, represented below by 0xNN. Given the same example palette as before, c4F, the colors are referenced as such: | |||
{|class="wikitable" | {|class="wikitable" | ||
Line 64: | Line 90: | ||
|- | |- | ||
|Color III | |Color III | ||
|Uses the BG for the most significant hex digit and the FG | |Uses the BG for the most significant hex digit and the FG for the least significant hex digit | ||
|Color #0x4F (79 decimal) | |Color #0x4F (79 decimal) | ||
|- | |- | ||
Line 72: | Line 98: | ||
|} | |} | ||
(Note that colors II and III are backwards here to compensate for the backwards definitions of colors II and III from the character data. In practice, this won't matter to most users.) | |||
===SMZX Mode 3=== | ===SMZX Mode 3=== | ||
SMZX mode 3, which was added with the SDL port, uses a palette of 256 | SMZX mode 3, which was added with the SDL port, uses a palette of 256 completely independent colors as opposed to the effective 16 "base" colors of modes 1 and 2. By default, the colors for each subpalette cXX are defined as: | ||
{|class="wikitable" | {|class="wikitable" | ||
Line 101: | Line 127: | ||
|} | |} | ||
Subpalettes 253 through 255 "wrap around" the palette, so e.g. subpalette 253 will contain colors 253, 254, 255, and 0. | |||
As of MegaZeux 2.90, the color mappings of all 256 subpalettes in SMZX mode 3 can be customized either by using the '''SMZX_IDXx,y''' counter or by reassigning them in the SMZX [[palette editor]]. | As of MegaZeux 2.90, the color mappings of all 256 subpalettes in SMZX mode 3 can be customized either by using the '''SMZX_IDXx,y''' counter or by reassigning them in the SMZX [[palette editor]]. |
Revision as of 20:52, 16 March 2024
Super MegaZeux | |
Author | MadBrain, Akwende, Exophase |
Company | n/a |
Release Date | n/a |
Genre | MegaZeux Fork, regular feature since 2.69 |
Download | DMZX Archive |
Super MegaZeux (or SMZX mode) is the name for an alternative graphics mode accessible through MegaZeux. Its first mode (SMZX mode 1) was first introduced by MadBrain in a fork of 2.51s3.2; this original version was referred to as Super MegaZeux 100 Alpha (smzx100a). It relied on a little-documented text mode supported by NVIDIA, C&T, ATI, and possibly other chipsets. SMZX mode 1 was included in MZXAk, but not in any other MZX releases until MZX 2.69, which sported the original mode plus the more advanced mode 2. Mode 3 was introduced in 2.80, and does not correlate to an actual hardware text mode (as MZX no longer actually relied on text mode).
SMZX mode can be accessed by setting the SMZX_MODE counter to 1, 2, or 3. In the editor, the current SMZX mode can be changed with the Select Screen Mode dialog (F11).
How it works
SMZX Mode halves the horizontal screen resolution in favor of adding two colors per character, effectively making a color palette of 256 unique colors.
Each "pixel" in SMZX is derived from a horizontally adjacent pair of text mode pixels in the following manner:
Color | Left pixel | Right pixel |
---|---|---|
Color I | off | off |
Color II | on | off |
Color III | off | on |
Color IV | on | on |
If colors II and III seem backwards to experienced programmers, it is not a mistake; this is how the original DOS versions defined these colors.
SMZX Mode 1
SMZX mode 1, the original mode, generates two new palette colors as intermediates of the two normal-mode colors specified by the palette. This is the simplest Super MegaZeux mode to use, and is used in conjunction with a standard 16 color MZX palette. The example below uses the default palette for simplicity.
Palette color | Derived by | Example (c4F) |
---|---|---|
Color I | Background of specified palette | 42, 0, 0 (color 4) |
Color II | 1/3 between BG and FG colors | 49, 21, 21 |
Color III | 2/3 between BG and FG colors | 56, 42, 42 |
Color IV | Foreground of specified palette | 63, 63, 63 (color 15) |
SMZX Mode 2
SMZX mode 2 was the first mode to allow full user control over the 256 color palette. It is internally identical to SMZX mode 1, but instead of generating the new colors from a user-defined 16 color palette, it allows direct reading and writing of all 256 colors either through the set color # to # # # command or with the counters SMZX_Rn, SMZX_Gn, and SMZX_Bn.
All colors are defined in pairs of 2 hex digits, represented below by 0xNN. Given the same example palette as before, c4F, the colors are referenced as such:
Palette color | Derived by | Example (c4F) |
---|---|---|
Color I | Uses the background color for both hex digits | Color #0x44 (68 decimal) |
Color II | Uses the FG for the most significant hex digit and the BG for the least significant hex digit | Color #0xF4 (244 decimal) |
Color III | Uses the BG for the most significant hex digit and the FG for the least significant hex digit | Color #0x4F (79 decimal) |
Color IV | Uses the foreground color for both hex digits | Color #0xFF (255 decimal) |
(Note that colors II and III are backwards here to compensate for the backwards definitions of colors II and III from the character data. In practice, this won't matter to most users.)
SMZX Mode 3
SMZX mode 3, which was added with the SDL port, uses a palette of 256 completely independent colors as opposed to the effective 16 "base" colors of modes 1 and 2. By default, the colors for each subpalette cXX are defined as:
Palette Color | Derived by | Example (c4F) |
---|---|---|
Color I | The color in the palette specified by cXX | Color #0x4F (79 decimal) |
Color II | Color I plus 1 | Color #0x50 (80 decimal) |
Color III | Color I plus 2 | Color #0x51 (81 decimal) |
Color IV | Color I plus 3 | Color #0x52 (82 decimal) |
Subpalettes 253 through 255 "wrap around" the palette, so e.g. subpalette 253 will contain colors 253, 254, 255, and 0.
As of MegaZeux 2.90, the color mappings of all 256 subpalettes in SMZX mode 3 can be customized either by using the SMZX_IDXx,y counter or by reassigning them in the SMZX palette editor.
Compatibility
There are some minor and/or past issues with SMZX mode:
- Modes 1 and 2 only work on selected video hardware in DOS versions. Most DOS emulators, including DOSBox, do not support SMZX. Mode 3 was invented for the SDL port and has no hardware equivalent.
- Prior to MegaZeux 2.93, to support Super MegaZeux correctly on DOS versions of MegaZeux combined with certain graphics cards, the creation of an "ati_fix" file in the same directory as the MegaZeux executable was required. This causes MegaZeux to tweak the horizontal pixel shift register and reverse the nibble order of each color. Newer versions of MegaZeux attempt automatic detection.
- In MegaZeux 2.93 and above, the SVGA renderer can be used to draw SMZX in software. This enables its use on any SVGA-compatible graphics card, albeit at a performance cost compared to the EGA renderer.
- Prior to MegaZeux 2.90, the Super MegaZeux modes did not leave room in the palette for the reserved UI colors, and thus the UI borrowed the game colors. This resulted in the UI palette looking corrupted, especially in SMZX mode 3. As of MegaZeux 2.90, the UI is almost always drawn in normal mode with the protected palette.
- Hardware SMZX in DOS does not support this and still draws the UI in SMZX mode.
- 8bpp software rendering also doesn't support this and will draw the UI in normal mode but with SMZX palette colors.
- SMZX modes are not supported by the (fairly limited) Nintendo DS port.
Compatible hardware
Video Adapter | Year | Device(s) | Last tested MZX version | Reverse nibbles? | Horizontal shift hack? | Reported by | Notes |
---|---|---|---|---|---|---|---|
ATI Mobility Radeon X300 | 2005 | ThinkPad T43 | smzxtest | Yes | Yes | pagerorgy | |
ATI Radeon 7000 (AGP) | 2001 | - | smzxtest | Yes | Yes | kepstin | |
ATI Radeon 8500 | 2001 | - | 2.70 | Yes | Yes | ? | ati_fix |
ATI Radeon 9100 | 2003 | - | smzxtest | Yes | Yes | asie | |
ATI Radeon 9200 SE | 2003 | - | smzxtest | Yes | Yes | kepstin | |
ATI Rage Mobility-P (AGP) | 1999 | - | smzxtest | Yes | Yes | kepstin | |
ATI Rage XL (AGP) | 1998 | - | smzxtest | Yes | Yes | kepstin | |
C&T CT65548 | 1995 | Toshiba Satellite 100CS | 2.70 | No | No | Lachesis | |
C&T F65554 | 1997 | Toshiba Satellite Pro 465CDX | 2.70 | No | No | Jon Campbell | |
NVIDIA GeForce 2 MX100/200/400 | 2001 | - | 2.70, smzxtest | No | No | Terryn, kepstin | |
NVIDIA GeForce 4 MX420 | 2002 | - | smzxtest | No | No | kepstin | |
NVIDIA GeForce FX 5200 (AGP) | 2003 | - | smzxtest | No | No | kepstin | |
NVIDIA GeForce 6200 (AGP) | 2005 | - | 2.93 | No | No | BFeely | |
NVIDIA GeForce 7600 GS (AGP) | 2006 | - | 2.93 | No | No | asie | |
NVIDIA RIVA TNT2 | 1999 | - | 2.70 | No | No | ? | |
Oak Technology OTi037C | 1988 | - | smzxtest | Yes | No | SpindleyQ | |
S3 UniChrome Pro (VIA VT3344) | 2006 | Neoware CA21 (VIA CN700) | 2.93 | No | No | Lachesis |
Incompatible hardware
The most common failure mode for SMZX in video adapters seems to be a "pseudo-SMZX" mode with a 320x350 resolution where, for every pair of text mode pixels, the left 4-bit color is selected instead of combining their respective 4-bit colors into an 8-bit color.
Video Adapter | Year | Device(s) | Last tested MZX version | Reported by | Notes |
---|---|---|---|---|---|
3dfx Voodoo 3 2000 (AGP) | 1999 | - | smzxtest | kepstin | Doubles left pixel. |
ATI Mobility Radeon X1300 | 2006 | IBM ThinkPad T60 | smzxtest | pagerorgy | No doubling. (ATI detected) |
ATI Radeon HD 3450 (B629) | 2007 | - | 2.93 | Lachesis | No doubling. (ATI detected) |
Cirrus Logic CL-GD5426 | 1993 | - | smzxtest | dukeboitans | Doubles right pixel. |
Cirrus Logic CL-GD5440 | 1995 | - | smzxtest | asie | Doubles right pixel. |
Intel 852GMV | 2004 | Dell Inspiron 1150 | 2.93 | Lachesis | Doubles left pixel. |
Intel GMA 3100 (Intel G33) | 2007 | Dell Inspiron 530 | 2.93 | Lachesis | Doubles left pixel. |
Intel HD Graphics 520 | 2016 | Acer Aspire E 15 E5-575G-53VG (Core i5-6200U) | smzxtest | Lachesis | Doubles left pixel. |
Intel HD Graphics 2000 | 2011 | Intel Core i5-2400 | smzxtest | Lachesis | Doubles left pixel. |
Matrox MGA Millenium | 1995 | - | smzxtest | kepstin | No doubling. |
Matrox Millenium G200 (AGP) | 1998 | - | smzxtest | pagerorgy | No doubling. |
Matrox Mystique | 1996 | - | smzxtest | asie | No doubling. |
NeoMagic MagicGraph128XD (NM2160) | 1998 | IBM ThinkPad 560X | 2.93 | Lachesis | Doubles left pixel. |
NeoMagic MagicGraph256AV (NM2200) | 1998 | IBM ThinkPad 380Z | smzxtest | bartitsu59 | Doubles left pixel. |
NeoMagic MagicGraph256ZX (NM2360) | 1999 | IBM ThinkPad 600X | 2.93 | Lachesis | Doubles left pixel. |
NVIDIA GeForce GTX 660 | 2012 | - | smzxtest | Lachesis | Doubles left pixel. |
Paradise/Western Digital SVGA (unknown model) | 1994 | Compaq LTE Elite 4/50CX | 2.70 | Jon Campbell | Doubles left pixel. |
S3 Trio64V | 1995 | Compaq 4704 | 2.93 | Elig | Doubles left pixel. |
S3 Trio64V2/DX | 1996 | HP Brio 8314 | smzxtest | GreaseMonkey | No doubling? |
SiS 530 | 1998 | Compaq Presario 5184 | smzxtest | indigoparadox | Doubles left pixel. |
Tseng Labs ET4000 AX (ISA) | 1989 | - | smzxtest | dukeboitans | No doubling. |
Notable games that use SMZX mode
- & by Lancer-X
- Celestial Altar by Lancer-X
- red by Lancer-X
- Ultima IV (port) by Lancer-X
- Bloodlands by Maxim uses Mode 1 in a novel way: to blur the screen when the player takes damage.
- Akwende's Tetris, the pack-in game included with MZXak 1.0 and above
- Kaboink! by Logicow
- Hackers Can Turn Your Computer into a Bomb!
- Murder on the Yellow Express