VOGONS


First post, by Rav

User metadata
Rank Member
Rank
Member

Hi there

UCP 2.0.1 :

The attachment ucp2.zip is no longer available

Screenshots from my MMX

The attachment ucp2_1.png is no longer available
The attachment ucp2_2.png is no longer available

I got my new UCP in a state that in can finally be published.
The new version is compatible with the following PCI chips:
[Northbridge]
- ALi M1521
- ALi M1531
- ALi M1541
- Intel 440BX
- Intel 440EX
- Intel 440FX
- Intel 440LX
- Intel 440ZX
- Intel i815

[Southbridge]
- ALi M1523
- ALi M1533
- ALi M1543
- Intel PIIX
- Intel PIIX3
- Intel PIIX4
- Intel ICH2

[Video cards]
- S3 Trio64
- S3 Trio64 V2 DX
- S3 Virge DX

I do plan to port (refactor/remake) code for ISA chipset support soon. Plus some improvement / modification probably as for the layout as some options are kind of long so I might change the UI so the top half are the settings and the bottom half, the help... Or maybe update the center vertical line so it's dynamic to auto adjust width according to the stuff in the left column. Once I have ISA stuff back, that will allow me to also configure other PCI stuff that are accessed thru normal I/O ports (for example that BuB S3 fixing stuff)

If you have any idea for improvement or request for chipset, please let me know

Utilisation, you won't be lost, if you ever used Award BIOS. Settings are saved in the same folder as the .exe. Once you made configurations, you can put the thing in the autoexec.bat with /autoload switch, to just load the configured settings.

There is a memory test tool in the program, but it's still alpha-ish and ugly. If you want to test new memory timing/speed settings in memtest86+, you can simply boot using something like QEMM, set the settings and press ctrl-alt-del, it will fastboot (instantly load memtest from the flop) without going back to the BIOS, preserving all settings. If you do that, be sure to not have network drivers loaded as they also don't get reseted and they will DMA packets in the RAM, failing the test.

Note that I have only tested on Ali M1531/M1533 (My system). Settings in yellow in the screenshot are what I changed (Gained 1.5fps on Quake yay!)

There way more interesting options in Ali chipsets.. Intel seam to be way more limited..

Here two chip support file :

The attachment piix4.c is no longer available

,

The attachment ali1541.c is no longer available

.
I welcome peoples making some for other chips that are not listed, and I will add them to UCP2.

User loadable files are planned to be supported in a future version (once I have all structures for all the supported way of patching stuff implemented and stabilised).
Here an example of a register setting for a freetext format (digit between 0 and 31)

    {
"PCI Latency Timer",
"Controls the amount of time the M1531 can burst data to the PCI Bus.",
0, 0, 0, 0x0C, // Bus, Dev, Func, Reg
0xF800, // Mask: Bits 7-3
11, // Shift: 3 bits
0, // opt_count: 0 (not used)
{ {NULL, 0} }, // opts: Empty/Unused
0, // current_idx: current or default value
0, // default_idx: default value, populated and first launch from the currently configured setting by the BIOS

INPUT_TYPE_FREEFORM, // It's a number input
0, // Min Value
31 // Max Value
}

Bus, Dev, Func will be removed in the future, just set it all to 0,0,0

Here another one for a setting with choices:

{
"Refresh period", "Period to refresh DRAMs. Longer delay = faster operation.",
0, 0, 0, 0x44, 0x0700, 8,
5, { {"1024 Clk", 0},{"2048 Clk", 1},{"4096 Clk", 2},{"8192 Clk", 3},{"16384 Clk", 4} }, 0, 0,
INPUT_TYPE_LIST, 0, 0
},

Note to people wanting to help submitting chip files.
PCI Configuration mode is accessed via 32 bits chunks and x86 is little endian. So here how to properly set the register

Example register 0x44, bit 2-3.
You take the register from the doc, 0x44, and do "mod 4". you endup with "0", so you do as simply as:
Register "0x44", mask "0C" and shift "2"

Example register 0x46, bit 2-3
0x46 mod 4 is equal to 2, so you have to shift all the stuff 2 times 8 bits on the left
You write it as register "0x44" still (You can also write 0x46, my program do chop the two last bits of the register digit.)
Mask would be "0x0C0000"
shift would be "18" (2 + (2 * 8 ))

5/4/26 : Updated UCP2
- Simple hotfix to fix a bug in the screen configuration restoration (when user exit the TUI). It won't leave you with an invisible cursor anymore if you disable "UCP Settings > Restore screen framebuffer".
- Added part of planned IO Port type register configurations (nothing to see there, yet)

5/5/26 : Updated UCP2 to 2.0.1
- IO PORT support other than PCI Configuration mode supported
- ISA chipset supported (none implemented)
- PCI adaptors supported
- Save file format updated to support the IO Port stuff and ISA devices (Old format is converted to the new one if you already have a save file).

Added the following chipset
- 440EX
- 440FX
- 440LX
- 440XZ
- PIIX3
- PIIX

Added the following video cards
- S3 Trio64
- S3 Trio64 V2 DX
- S3 Virge DX

Last edited by Rav on 2026-05-06, 03:50. Edited 7 times in total.

Reply 2 of 16, by Rav

User metadata
Rank Member
Rank
Member
marxveix wrote on 2026-04-28, 10:01:

Does it work cheaper Intel 440 chipsets, like 440zx/440lx/440ex?

Support for more chipsets will be added soon.

Code for chipsets are specific and pinned to them by there VID/DID.

Edit : half support is implemented. If you don't have a supported northbridge, but have a supported southbridge, you will see the setting for the southbridge. And vise versa.
If you configure for say the PIIX4, and later update for a new version that support the 440EX, then the configuration you did for the PII4X will be preserved.

Reply 3 of 16, by carlostex

User metadata
Rank l33t
Rank
l33t

Oh wow, this is something i really want to try out. My main retro system is a 430TX chipset which uses the Intel PIIX4 southbridge. I'm wondering what options are available to tweak.

Reply 4 of 16, by jheronimus

User metadata
Rank Oldbie
Rank
Oldbie

Would be cool to have custom chipset register files like in TweakBIOS or wpcredit. This way users will be able to contribute files for various esoteric chipsets.

MR BIOS catalog
Unicore catalog

Reply 5 of 16, by Rav

User metadata
Rank Member
Rank
Member
jheronimus wrote on 2026-04-28, 20:28:

Would be cool to have custom chipset register files like in TweakBIOS or wpcredit. This way users will be able to contribute files for various esoteric chipsets.

I do plan to have external files support in the future.
In the form of a binary format that would contain all the needed stuff.

It's not available yet as I'm not done with all the needed stuff (right now it only support registers in the PCI Configuration mode, no I/O registers or other fancy stuff).
Once I have all the stuff supported and all array structure defined and stable for everything, I plan to release a program that convert between text and binary (both directions)

The files will be in a "chips" subdirectory and UCP2 will scan theses to see if they support some of the present PCI devices.

The save format is already made in a way to support user modifications of registers definitions (it will still load and apply even if the definition get updated to add more stuff, and will also work if the order of the entries in the file change. Only saved stuff that is removed from the files don't get loaded/applied.).

Here is a current built-in file. Feel free to create new one and I can integrate it in the current version.

The attachment ali1541.c is no longer available
Last edited by Rav on 2026-04-29, 00:59. Edited 1 time in total.

Reply 6 of 16, by Rav

User metadata
Rank Member
Rank
Member
jheronimus wrote on 2026-04-28, 20:28:

Would be cool to have custom chipset register files like in TweakBIOS or wpcredit. This way users will be able to contribute files for various esoteric chipsets.

Here the support file for the PIIX4 :

The attachment piix4.c is no longer available

Northbridge are.. more interesting but...
It have few ISA stuff, and a lot of IDE timing stuff (Backup your stuff before testing that please)

Reply 7 of 16, by jheronimus

User metadata
Rank Oldbie
Rank
Oldbie
Rav wrote on 2026-04-28, 21:11:

Here is a current built-in file. Feel free to create new one and I can integrate it in the current version.

The attachment ali1541.c is no longer available

Nice! I'll try to mess with it on the weekend and add SiS 600, that one really benefits from this.

MR BIOS catalog
Unicore catalog

Reply 8 of 16, by Rav

User metadata
Rank Member
Rank
Member

Note to people wanting to help submitting chip files.
PCI Configuration mode is accessed via 32 bits chunks and x86 is little endian. So here how to properly set the register

Example register 0x44, bit 2-3.
You take the register from the doc, 0x44, and do "mod 4". you endup with "0", so you do as simply as:
Register "0x44", mask "0C" and shift "2"

Example register 0x46, bit 2-3
0x46 mod 4 is equal to 2, so you have to shift all the stuff 2 times 8 bits on the left
You write it as register "0x44" still (You can also write 0x46, my program do chop the two last bits of the register digit.)
Mask would be "0x0C0000"
shift would be "18" ( 2 + (2 * 8 ))

Reply 9 of 16, by Rav

User metadata
Rank Member
Rank
Member

Updated UCP2

- Simple hotfix to fix a bug in the screen configuration restoration (when user exit the TUI). It won't leave you with an invisible cursor anymore if you disable "UCP Settings > Restore screen framebuffer".
- Added part of planned IO Port type register configurations (nothing to see there, yet)

Reply 10 of 16, by StuckIn1999

User metadata
Rank Newbie
Rank
Newbie

This is pretty cool stuff
Does it talk directly to chipset registers or uses a bypass?

Reply 11 of 16, by Rav

User metadata
Rank Member
Rank
Member
StuckIn1999 wrote on 2026-05-05, 08:22:

This is pretty cool stuff
Does it talk directly to chipset registers or uses a bypass?

Right now it talk to the Chipset using the PCI Configuration Mode (IO at 0xCF8 / 0xCFC) and only support PCI chipsets.

The version I am working on can also talk to PCI adaptors and ISA devices via IO Ports ( It's going to be available soon including support for some S3 cards Pedestal bit fix mentioned here : https://bitsundbolts.com/2026/04/23/fixing-th … l-bit-bios-mod/ Funny enough I noticed that many of the S3 on 86Box have that bit enabled but they don't emulate the feature. ). Just doing some extra polishing and testing before releasing

Reply 12 of 16, by Rav

User metadata
Rank Member
Rank
Member

UCP2 has been updated!

changelog:

- IO PORT support other than PCI Configuration mode supported
- ISA chipset supported (none implemented)
- PCI adaptors supported
- Save file format updated to support the IO Port stuff and ISA devices (Old format is converted to the new one if you already have a save file).

Added the following chipset
- 440EX
- 440FX
- 440LX
- 440ZX
- PIIX3
- PIIX

Added the following video cards
- S3 Trio64
- S3 Trio64 V2 DX
- S3 Virge DX

Reply 13 of 16, by aVd

User metadata
Rank Member
Rank
Member
Rav wrote on 2026-05-05, 16:29:

The version I am working on can also talk to PCI adaptors and ISA devices via IO Ports ( It's going to be available soon including support for some S3 cards Pedestal bit fix mentioned here : https://bitsundbolts.com/2026/04/23/fixing-th … l-bit-bios-mod/ Funny enough I noticed that many of the S3 on 86Box have that bit enabled but they don't emulate the feature. ). Just doing some extra polishing and testing before releasing

Hi, @Rav,
With all my respect to the retro hardware repair work of @BitsUndBolts, his a.i. based videos are... let's say it this way - not a good source of reliable information. The last ones of his videos about S3 ViRGE and Trio3D video cards are just somehow working mumbo-jumbo shady exercises based on a.i. slop.

Briefly, here's what I have about so called "S3 BIOS bright bug":

For the older S3 cards based on Trio64V2/DX, ViRGE/DX, ViRGE/GX chips the "pedestal bit" in 0x03C5 register is this one: x x B x x x x x (the sixth bit if we count from the least significant bit starting from one). So, to cure the "bright bug" in the safest way, we have to use bitwise operation "AND 0xDF" (oxDF = 1 1 0 1 1 1 1 1) applied to the register 0x03C5. This way we don't change any other previously set bit values in the register.

Working assembly code for disabling "bright bug" on S3 Trio64V2/DX, ViRGE/DX, ViRGE/GX
MOV	DX,3C4
MOV AL,8
OUT DX,AL
INC DX
MOV AL,6
OUT DX,AL
DEC DX
MOV AL,1A
OUT DX,AL
INC DX
IN AL,DX
AND AL,DF ; dis. BB
OUT DX,AL

The safest reverse bitwise operation enabling "bright bug" for the same older S3 card is with "OR 0x20" (0x20 = 0 0 1 0 0 0 0 0) applied to the same register 0x03C5. This way we don't change any other previously set bit values in the register.

Working assembly code for enabling "bright bug" on S3 Trio64V2/DX, ViRGE/DX, ViRGE/GX
MOV	DX,3C4
MOV AL,8
OUT DX,AL
INC DX
MOV AL,6
OUT DX,AL
DEC DX
MOV AL,1A
OUT DX,AL
INC DX
IN AL,DX
OR AL,20 ; en. BB
OUT DX,AL

Important note: The above dosn't apply to the very first ViRGE/325 (86C325) chip! Possibly due to different register's settings.

For the newer S3 cards based on ViRGE/GX2, Trio3D and possibly even Savage(4) chips the "pedestal bit" in 0x03C5 register is this one: x x x x B x x x (the fourth bit if we count from the least significant bit starting from one). In this case, to cure the "bright bug" in the safest way, we have to use bitwise operation "AND 0xF7" (oxF7 = 1 1 1 1 0 1 1 1). We don't change any other previously set bit values in this register.

Working assembly code for disabling "bright bug" on S3 ViRGE/GX2, Trio3D
MOV	DX,3C4
MOV AL,8
OUT DX,AL
INC DX
MOV AL,6
OUT DX,AL
DEC DX
MOV AL,27
OUT DX,AL
INC DX
IN AL,DX
AND AL,F7 ; dis. BB
OUT DX,AL

The safest reverse bitwise operation enabling "bright bug" for the same newer S3 cards is with "OR 0x08" (0x08 = 0 0 0 0 1 0 0 0).

Working assembly code for enabling "bright bug" on S3 ViRGE/GX2, Trio3D
MOV	DX,3C4
MOV AL,8
OUT DX,AL
INC DX
MOV AL,6
OUT DX,AL
DEC DX
MOV AL,27
OUT DX,AL
INC DX
IN AL,DX
OR AL,8 ; en. BB
OUT DX,AL

I hope the above examples are clear enough. I have assembled utilities for enabling/disabling the mentioned "bright bug" affected S3 cards, but this is topic for a new thread.

Thanks for your work on the chipset patcher tool!

EDIT: The correct "bright bug" register is 0x03C5, not 0x03C4.

Last edited by aVd on 2026-05-06, 05:39. Edited 2 times in total.

SvarDOS fan :: artificial "intelligence" bots - not a fan at all :: say NO to systemd :: is freeware a lie, when human freedom is a fundamental lie? :: f00ck €u!

Reply 14 of 16, by Rav

User metadata
Rank Member
Rank
Member
aVd wrote on Yesterday, 04:58:
Hi, @Rav, With all my respect to the retro hardware repair work of @BitsUndBolts, his a.i. based videos are... let's say it this […]
Show full quote
Rav wrote on 2026-05-05, 16:29:

The version I am working on can also talk to PCI adaptors and ISA devices via IO Ports ( It's going to be available soon including support for some S3 cards Pedestal bit fix mentioned here : https://bitsundbolts.com/2026/04/23/fixing-th … l-bit-bios-mod/ Funny enough I noticed that many of the S3 on 86Box have that bit enabled but they don't emulate the feature. ). Just doing some extra polishing and testing before releasing

Hi, @Rav,
With all my respect to the retro hardware repair work of @BitsUndBolts, his a.i. based videos are... let's say it this way - not a good source of reliable information. The last ones of his videos about S3 ViRGE and Trio3D video cards are just somehow working mumbo-jumbo shady exercises based on a.i. slop.

Briefly, here's what I have about so called "S3 BIOS bright bug":

For the older S3 cards based on Trio64V2/DX, ViRGE/DX, ViRGE/GX chips the "pedestal bit" in 0x03C4 register is this one: x x B x x x x x (the sixth bit if we count from the least significant bit starting from one). So, to cure the "bright bug" in the safest way we have to use bitwise operation "AND 0xDF" (oxDF = 1 1 0 1 1 1 1 1). This way we don't change any other already set bit values in the register.

Working assembly code for disabling "bright bug" on S3 Trio64V2/DX, ViRGE/DX, ViRGE/GX
MOV	DX,3C4
MOV AL,8
OUT DX,AL
INC DX
MOV AL,6
OUT DX,AL
DEC DX
MOV AL,1A
OUT DX,AL
INC DX
IN AL,DX
AND AL,DF ; dis. BB
OUT DX,AL

The safest reverse bitwise operation enabling "bright bug" for the same older S3 card is with "OR 0x20" (0x20 = 0 0 1 0 0 0 0 0) applied to the same register 0x03C4.

Working assembly code for enabling "bright bug" on S3 Trio64V2/DX, ViRGE/DX, ViRGE/GX
MOV	DX,3C4
MOV AL,8
OUT DX,AL
INC DX
MOV AL,6
OUT DX,AL
DEC DX
MOV AL,1A
OUT DX,AL
INC DX
IN AL,DX
OR AL,20 ; en. BB
OUT DX,AL

Important note: The above dosn't apply to the very first ViRGE/325 (86C325) chip! Possibly due to different register's settings.

For the newer S3 cards based on ViRGE/GX2, Trio3D and possibly even Savage(4) chips the "pedestal bit" in 0x03C4 register is this one: x x x x B x x x (the fourth bit if we count from the least significant bit starting from one). In this case, to cure the "bright bug" in the safest way, we have to use bitwise operation "AND 0xF7" (oxF7 = 1 1 1 1 0 1 1 1). We don't change any other already set bit values in this register.

Working assembly code for disabling "bright bug" on S3 ViRGE/GX2, Trio3D
MOV	DX,3C4
MOV AL,8
OUT DX,AL
INC DX
MOV AL,6
OUT DX,AL
DEC DX
MOV AL,27
OUT DX,AL
INC DX
IN AL,DX
AND AL,F7 ; dis. BB
OUT DX,AL

The safest reverse bitwise operation enabling "bright bug" for the same newer S3 cards is with "OR 0x08" (0x08 = 0 0 0 0 1 0 0 0).

Working assembly code for enabling "bright bug" on S3 ViRGE/GX2, Trio3D
MOV	DX,3C4
MOV AL,8
OUT DX,AL
INC DX
MOV AL,6
OUT DX,AL
DEC DX
MOV AL,27
OUT DX,AL
INC DX
IN AL,DX
OR AL,8 ; en. BB
OUT DX,AL

I hope the above examples are clear enough. I have assembled utilities for enabling/disabling the mentioned "bright bug" affected S3 cards, but this is topic for a new thread.

Thanks for your work on the chipset patcher tool!

Hi.

Yeah, in my code I only change the one specific bit.
I also did not try to patch it on the original virge.

I am going to add the code for the GX2 too for next update, thanks.

Reply 15 of 16, by aVd

User metadata
Rank Member
Rank
Member

I just tried to briefly explain with tested and working examples, that the "pedestal bit" for S3 Trio64V2/DX, ViRGE/DX, ViRGE/GX chips in register 0x03C5 is one and the same, but differs from the "pedestal bit" for next generation S3 ViRGE/GX2 and Trio3D chips in the same 0x03C5 register. This is not clearly explained in the BuB's videos based on a.i. web searches.

SvarDOS fan :: artificial "intelligence" bots - not a fan at all :: say NO to systemd :: is freeware a lie, when human freedom is a fundamental lie? :: f00ck €u!

Reply 16 of 16, by NeoG_

User metadata
Rank Oldbie
Rank
Oldbie

I have an M1541/M1543 mainboard with a K6-2+, I'm already using CTU to enable write combining, MTRR and ordering - Are there any additional northbridge/southbridge settings accessible with this a[[ that can eek out a bit more CPU efficiency?

98/DOS Rig: BabyAT AladdinV, K6-2+/550, V3 2000, 128MB PC100, 20GB HDD, 128GB SD2IDE, SB Live!, SB16-SCSI, PicoGUS, WP32 McCake, iNFRA CD, ZIP100
XP Rig: Lian Li PC-10 ATX, Gigabyte X38-DQ6, Core2Duo E6850, ATi HD5870, 2GB DDR2, 2TB HDD, X-Fi XtremeGamer