First post, by Oerg866
Prologue
We all know PCChips for their bad motherboard designs. Their cheesy Super7/Slot1/370 AT boards with funny relabelled chipsets like BXCel, BXPro, BX2000 to make you think you're actually buying something good.
We all read the famous VOGONS thread "PCChips M747: The Bane of my Existence" and had a good laugh.
But... what if I told you that specifically the PCChips M747 is not as bad as people make it out to be?
What if I told you that you can make it match an I440BX?
What if I told you that... it's actually.... good?
After all, the M747 had all the potential to be an amazing budget motherboard. There's only one tiny little problem.
A little thing that f*cked it all up.
The BIOS.
It's HORRID. It's awful. There is no two ways about it. Be glad the IDE auto detection works reasonably. It configures the chipset in just about the worst way possible.
Base System Setup
So let's start from scratch and take some components to build our base system.
Let's pick the basics: A Pentium III 550MHz (Katmai) and 128 MB of random, reasonably fast SDRAM.
While the chipset has an AGP bus, the motherboard lacks an AGP slot and instead allocates it to a SiS 6326 chip on the motherboard. So instead we'll use a GeForce FX 5500 PCI.
But wait. The M747 does not have 3.3V on the PCI bus and your FX5500 may not have a regulator to convert 5V like some other cards do. There's solutions for this and I won't go into details here. My solution was to use an ATX power supply and route the 3.3V there with a small perfboard with big rails and a big cap.
Now here's the first BS moment - The M747 does not have the facilities to disable the inbuilt SiS 6326. Even though the system will boot from your PCI graphics card and it will operate normally, it is *always* active as a second card. This can cause lots of problems, and will waste precious system resources.
The chip has a datasheet available, but from my tests there is no easy way to actually disable it so we'll have to get a bit hacky. The only way I found was to remove the bus clock from the chip (Pin 185). Thankfully the clock is supplied via a bridge resistor, R23, that we can just remove.
No more AGP device! Wohoo!
So anyway, installing Windows 98 is relatively hassle free. There's plenty of extra stuff and fluff you can install, such as AGP GART driver (unnecessary since we do not have an AGP device) and many different versions of the SiS IDE driver. Some more, some less broken. I say: Avoid it like the plague. Trust me.
I chose to use a Promise SATA150TX + SSD for my hard disk needs anyway, because I am impatient and because I like large HDDs. But the CD-ROMs are connected to the onboard IDE.
Load any old defaults, detect your IDE devices, etc., standard stuff. I don't need the second COM nor the LPT, so I disable them both, which gives me extra IRQs.
IMPORTANT: Set the FSB to 100 MHz in the CPU PLUG AND PLAY SETUP menu.
Base performance & Comparison with I440BX (ASUS P3B-F)
First of all, I decided to assess the performance of the board under stock settings to see where we stand, and to do this I ran the same benchmarks on a comparable system using the performant I440BX chipset, and one of the fastest ones at that - the ASUS P3B-F.
I benchmarked both systems with the same CPU, RAM, GPU, PCI SATA Controller and SSD, using Windows 98SE with the same GPU drivers.
The benchmarks performed were SiSoft Sandra 99 RAM Benchmark, 3DMark 2001SE and Unreal Timedemo.
Listen. I knew the performance of the M747 was supposed to be less than stellar. But I did not expect *this*.
Let's start with the P3B-F's numbers:
- 2810 3D Marks
- 280 MB/s Read (matched its prediction almost exactly!)
- 41.5 FPS
... Here's the M747. Buckle up, everyone.
- 2100 3D Marks
- 110 MB/s Read (?!?!?)
- 23.4 FPS
Wow. F*ck me sideways.
Fixing the war crimes of the BIOS
Based on the initial performance number I drew two conclusions:
1. The reputation of this board is absolutely justified
2. This just CANNOT be right.
So I decided to investigate the configuration of the chipset which is initially performed by the BIOS.
WPCREDIT was a popular tool to edit PCI configuration registers. It is useful for us here, but it needs a PCR file which contains information what he bits in each register do exactly, for the device you wish to edit.
In our case, the PCI configuration space of the first function device has a lot of registers that seem like they can have *very* heavy performance impacts. So I read the datasheet and decided to make my own PCR file. It is attached to this post below.
Here are the crimes committed by the BIOS that I've found.
- 0x50 Host Interface Control I
These bits are all not set by default. PCI and Memory performance are sped up by setting these.[50:3] =CPU-to-MEM/PCI-to-MEM Concurrency Enable
[50:2] =CPU-to-PCI/PCI-to-Master Concurrency Enable
[50:1] =CPU Pipeline Function
[50:0] =PCI33/66 Master Memory Access Concurrency Enable
- 0x51 Host to <xxx> Timing Control
These bits are all not set by default. PCI and memory performance are sped up by setting these.[51:2] =SDRAM Pipelined Read 0=1 WS 1=0WS
[51:1] =PCI Cycle 0=1 Clock 1=No Delay
[51:0] =Memory Lead-Off 0=9T 1=8T
- 0x52 DRAM MISC Control I
By default, this is bit is set. Yes, you read correctly. It leaves the RAM controller in TEST mode. This causes a 10% performance drop. Set it to 0.[52:7] =DRAM Controller TEST MODE0=Normal 1=TEST
By default, this bit is not set. Set to 1 for a very slight performance boost.[52:2] =SDR Refresh -> Other Row 0=Staggered 1=Simul.
- 0x53 DRAM Timing Control
These are set to 2 (01) by default. Set to '00' for better performance.[53:7..6] =DRAM Perf. Waitstates 00=1 01=2 10=4 11=8
This is set to 01 by default. This option can be set in the bios too. Set to 12 ('11') to reduce impact of DRAM refresh cycles while system is being taxed.[53:2..1] =Refresh Queue Depth 00=0 01=4 10=8 11=12
- 0x54 DRAM RAS#/CAS# Timing Control
Set to 4T ('00') for maximum throughput.[54:7..6] =RAS Pulse Width 00=4T 01=5T 10=6T 11=7T
Set to 2T ('00') for maximum throughput.[54:5..4] =RAS Precharge Time 00=2T 01=3T 10=4T 11=5T
Set to 2T ('00') for maximum throughput.[54:3..2] =RAS to CAS Delay 00=2T 01=3T 10=4T 11=5T
- 0x55 DRAM MISC Control 2
Set to 0 by default. Set to 1 for maximum throughput.[55:4] =SDR RAS Precharge Optmz. 0=Disable 1=Enable
- 0x57 SDRAM Control
Here is some added BS. The bit is always set to 1, meaning the RAM ALWAYS runs at CL3, regardless of BIOS settings. DO NOT SET THIS BIT OUTRIGHT. See below for CAS Latency timing optimization.[57:4] =CAS Latency Setting 0=2T 1=3T
Set to 0 by default. Set to 1 for maximum throughput.[57:3] =SDRAM Burst Write Timing 0=X-2-2-2 1=X-1-1-1
Set to 0 by default. Set to 1 for maximum throughput.[57:2] =Precharge Command Timing 0=1WS 1=0WS
- 0x5A Memory Buffer Strength and Current Rating
These are all set to 0 by default except for bit 3. I set them all to 1 to make sure CL2 would theoretically be as stable as possible. I have no idea if I have to do that. Any engineers in the chat?[5A:7] =RAS5..0/CS5..0 Drv Str. 0=8mA 1=12mA
[5A:6] =CAS7..0 / DQM7..0 Drv S. 0=8mA 1=16mA
[5A:5] =CKE Drive Strength 0=12mA 1=16mA
[5A:4] =MA13..2 Drive Strength 0=12mA 1=16mA
[5A:3] =MA1..0 Drive Strength 0=12mA 1=16mA
[5A:2] =RAMWA Drive Strength 0=12mA 1=16mA
[5A:1] =RAMWB Drive Strength 0=12mA 1=16mA
[5A:0] =SRAS/SCAS Drive Strength 0=12mA 1=16mA
- 0x80 Target Bridge to DRAM Characteristics
This is set to 0 by default. Set to 1 to improve PCI and RAM performance slightly. It allows CPU to access the memory while PCI devices are accessing each other, instead of being blocked.[80:1] =CPU->DRAM/PCI->PCI Concr.0=Disable 1=Enable
- 0x82 PCI33 Target Bridge Bus Characteristics
These are all set to 0 by default. Set to 1 to improve PCI performance slightly.[82:7] =PCI Master Write Perf. Improvement
[82:6] =PCI33/66 Master WriteCyclAfter Read
[82:5] =PCI33 Mem Read Line/MultiPrefetch Enable
[82:4] =PCI33 Memory Read CommandPrefetch Enable
This is set to 32Clk (11) by default. Set to 0 (00) to improve PCI performance slightly.[82:3..2] =PCI33 Initial Latency 00=0 01=16 10=24 11=32Clk
- 0x83 CPU to PCI33 Characteristics
These seem to have different values depending on ... things? I set these to 1, 1, 0, 1.[83:3] =CPU Involved Arbitration on PCI
[83:2] =Non-Post Cycle Retry Behavior Control
[83:1] =Memory Burst Cycle Enable
[83:0] =Memory Post Write Enable
Forcing the RAM to run at CL2
So as mentioned earlier, the RAM *always* runs at CL3, regardless what you set in the BIOS.
The register 0x57 DRAM Control has the relevant bits for this. Here's the full description:
[57:7] =Send Precharge Command
[57:6] =Send Mode Reg. Set Comm.
[57:5] =Send Refresh Command
[57:4] =CAS Latency Setting 0=2T 1=3T
[57:3] =SDRAM Burst Write Timing 0=X-2-2-2 1=X-1-1-1
[57:2] =Precharge Command Timing 0=1WS 1=0WS
[57:1] =SDRAM Multi Bank Function0=Disable 1=Enable
[57:0] =Send Nop Command
But setting bit 4 to '1' outright crashes the machine. What's wrong? Well it turns out that this is a very manual process on this chipset.
You must send a precharge command (Bit 7 set) with the ORIGINAL BITS set, then send the Mode Register Set command with the new values, i.e. CL bit set to 0 for CL2. That way the memory will be correctly switched over to CL2.
So for me the sequence which includes the original values for all the bits, and the new optimized ones, is as follows:
Write 0x57 Value 0x92
Write 0x57 Value 0x4e
Now the memory is correctly switched to CL2 and the system keeps running!
Initial benchmark results
So, where do we stand performance-wise after all of this? With so many bits bobbing, we must have reached unprecedented performance realms, right?
Well, for this particular board ,yes. At this stage, the benchmark results are as follows:
- 2690 3D Marks (+590 3D Marks)
- 170MB/s Read (+60 MB/s)
- 37.6 FPS (+14.2 FPS)
Wow. We're only a few FPS short of the BX and 3DMark is looking better too! But as usual with the cheaper chipsets, the RAM throughput is severely lacking, being outperformed even by the MVP3 on the AMD K6. This is a real shame and probably the reason why the numbers are so tragic.
But the gaming performance at least now seems to be somewhat up to snuff. So This is where I *thought* my journey would end.
more on that later...
Making the settings permanent
I didn't want to use WPCRSET to make the changes permanent. It's an extra device driver and I would also like to get the extra performance in DOS. So I decided to write my own tool to make these settings permanent. Here it is: http://github.com/oerg866/pciedit.
It is a tool that lets you manipulate PCI Configuration Registers of any PCI device in the system in pure DOS. Mind you - Windows 98 is generous with its low-level hardware access. So it actually runs there too. But don't get too jiggy with it 😁
The relevant files are attached to this post below.
Long story short: Get PCIEDIT.EXE and REGS.TXT and add it to the AUTOEXEC.BAT file:
C:\PCIEDIT\PCIEDIT.EXE 1039 5600 C:\PCIEDIT\REGS.TXT
Non-Working Ultra DMA
Another thing these cheap chipsets were infamous for was the absolute lottery with Ultra DMA support. I escaped this problem on the hard disk side of things with the PCI SATA controller. But being impatient when installing things, I would like it to work on the DVD drive.
The official drivers are quite buggy, and they take *ages* (10+ seconds) to initialize. Additionally this driver removes the DMA checkbox in the Windows device manager, so you don't actually know if the device is running in DMA mode or not. So I refuse to use it. The integrated driver should really be fine anyway.
But it isn't. I activate the DMA checkbox for my DVD drive. Windows takes a while to initialize, and eventually does come up - but the DMA checkbox simply is unchecked again and the drive is running in PIO mode (verified with NERO CDSpeed).
*all* of my UDMA capable optical drives showed this symptom.
So - back to the SiS 5600 datasheet.
The chipset's second function device (function 01h) is the IDE controller, Vendor 1039, Device 5513.
It has several registers related to the IDE channels, in particular these:
Register 41h IDE Primary Channel/Master Drive Data Active Time Control
Register 43h IDE Primary Channel/Slave Drive Data Active Time Control
Register 45h IDE Secondary Channel/Master Drive Data Active Time Control
Register 47h IDE Secondary Channel/Slave Drive Data Active Time Control
The register layout shows that there is the following bit:
BIT ACCESS DESCRIPTION
7 R/W Ultra DMA Mode Control 0: Disable 1: Enable
This was a really simple process so I have no real explanation for why this matters, but I will just assume another PCChips BIOS fail.
These were *all* set to 0.
My DVD drive resides on the Primary Master IDE port, so I set register 0x41 to 0x83 . (0x03 was the previous value, 0x80 adds the Ultra DMA enable bit) using the aforementioned tool PCIEDIT during boot, after setting the DMA checkmark in Windows.
And hey, now the DMA checkmark stays set and Nero CDSpeed absolutely confirms that the drive is running in DMA mode.
Another success 😀
The register tweaks for the primary master drive are included in the file attached to this post, UDMA.TXT.
Add this to your autoexec file:
C:\PCIEDIT\PCIEDIT.EXE 1039 5513 C:\PCIEDIT\UDMA.TXT
SoundPRO aka. CM8330 SPDIF / Digital CD-Audio
The SoundPRO was often disregarded as a terrible sound chip back in the day. Mostly because it was labelled as PCI, but turned out to be a relabelled C-Media chip with lackluster vendor support. C-Media abandoned their VxD drivers fairly early and pushed the bloated, slow WDM drivers on everyone, further worsening the situaiton.
But with the VxD driver and from whast we know now, this is a really great chip. It's ISA , meaning it's really very compatible for DOS. It emulates the SB16 and does so very well, meaning it's really very compatible for DOS. It has a great MPU401 implementation, meaning it's really very compatible for DOS. It has a great DOS config and mixer tool, meaning it's really very compatible for DOS. And it has a "genuine / ripped off" OPL3 implementation inside which means it's really very compatible for DOS. So around these streets, we love this sound chip!
Mind you, the sound quality on this particular board. Especially not with my MacGyver setup:
Anyway, the Motherboard *does* provide headers for SPDIF IN and OUT. However the manual does not specify the pinout. So here it is:
SoundPRO aka. CM8330 Digital CD Mixer Hack on Windows
I'd like to use the digital CD input here, but there is a slight problem in Windows. The "Digital CD" checkmark in the Mixer does not actually affect anything. CD audio is not playing.
I thought I was doing something wrong, but I investigated further and downloaded the original application software. I bundled the drivers & application software here:
https://cdn.discordapp.com/attachments/104148 … bf355f23f36d8ef&
The software package provides a classic Audio Rack style software environment. How wonderfully retro 😁
Interestingly, when I played a CD in this application the CD audio was working, as was the DIG CD button in that mixer component. The switch in the window mixer still remained nonfunctional. This is strange.
I launched the rack and then played the CD in the Windows CD player. The audio was working, but when I closed the Rack the sound disappeared again?!?!?!?
I then launched the mixer separately (all the components can be launched separately), and as soon as I launched it, the sound came back. But interestingly in this method, when I closed the mixer, the sound remained on. But I didn't want the sreen to be clogged up when windows boots by putting the mixer in autostart outright!
So I decided to write a little piece of code:
CreateProcessA(NULL, "CMMIXER.EXE", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
while(FindWindowA(NULL, "Mixer Ver1.7a") == NULL)
Sleep(1);
TerminateProcess(pi.hProcess, 0);
The resulting CMIFIX.EXE needs to be put into C:\Program Files\Audio Applications\Rack, next to CMMIXER.EXE. Put a shortcut to CMIFIX in the Startup folder in the start menu.
And that works perfectly! 😀 Full C file and compiled CMIFIX.EXE are attached to the post.
Above and beyond...
So I mentioned earlier that I want to get the absolute maximum of performance out of this machine. And I was going to attempt everything to achieve this.
Let's have a look at the registers again.
Many of the bits are marked as "reserved" . Being the naive boi I just decided to set them all, one after another.
Actually only one of them was really problematic, causing a crash outside of windows (Register 0x50, bit 5).
And *WOAH*, did that pay off! In particular some bits cause the RAM performance to absolutely skyrocket:
0x50 Bits 7, 6, 4 (Bit 4 in particular caused massive gains)
0x53 Bits 5, 4, 3 (significant gains too)
FINAL BENCHMARK RESULTS
- SiSoft Sandra 99 RAM Read: 214MB/s (+114 MB/s!!!)
- 3DMark 2001 SE: 2877 3D Marks (+777 3D Marks!!!)
- Unreal Timedemo: 43.8 FPS (+20.4 FPS!!!)
Conclusion & Links
I have learned to love this quirky motherboard. It is so rewarding when you spend a lot of time optimizing something and the results speak such a definitive language.
I built a proper machine with this, and I named it "The Golden Turd".
PCChips M747 V1.3 @ The Retro Web (BIOS & Manual)
PCChips M747 V1.5 @ The Retro Web (BIOS & Manual)
SiS 5600 @ The Retro Web (Datasheet)
PCIEDIT Git Repository
PCIEDIT.EXE, REGS.TXT, UDMA.TXT and 10395600.PCR can be found in the zip file attached to this post.