yay
So... I was accidentally on the right track when I asked about the xtal 🤣
Well maybe it helped indirectly by making me wonder what's that OSC pin... 😁
Apparently most Sound Blasters don't use that as they have their own crystal oscillator, but AWE64 does need it. I guess it was some cost-saving measure.
Chkcpuwrote on 2026-05-31, 19:47:Thanks for reporting your test values.
So a 2.2V setting was not among them, but you found a nice 2.04V setting for a K6-2+! :) […] Show full quote
Thanks for reporting your test values.
So a 2.2V setting was not among them, but you found a nice 2.04V setting for a K6-2+! 😀
I’m sorry to hear the board won’t boot. The CMOS backup battery inside the DALLAS or BENCHMARQ RTC chip is probably dead. This sometimes causes a board to stall early during the Power-On-Self-Test.
Do you have a POST analyzer card to see where the boot process hangs?
Cheers, Jan
Ok, I got the board working again. It must have been the RTC, because it posts now with the external battery hooked up. I continued testing. Here are more results (minus what is already documented in the manual):
(Previously tested)
JV4-5 OPEN JV6-7 CLOSED 1.93v
JV4-5 OPEN JV6-7-8 CLOSED 1.73v
JV4-5 OPEN JV7-8 CLOSED 2.04v
JV4-5 OPEN JV6-8 CLOSED 1.95v
(More tests)
JV4-5 OPEN JV6-7-8 OPEN 4.05V
JV5 CLOSED JV6-7-8 OPEN 3.60V
JV4 CLOSED JV6-7-8 OPEN 3.51V
So at this point it seems pretty clear that everything open gives you the highest voltage (I didn't want to push the P166MMX I had in there too much with further high voltage tests) then JV 5 drops the voltage by a certain factor, JV4 by a little more, probably JV4 and 5 both closed is going to bring it down even further, and the JV 8, 7, and 6 drop the voltage further incrementally more in that order, with combinations being additive.
So then just to be clear, even though I can derive the 2.2v for my K6-2, you would advise against running it on this motherboard, due to the heat issues on the voltage regulator? Bigger heatsink on it or active cooling probably wouldn't make a difference?
So then just to be clear, even though I can derive the 2.2v for my K6-2, you would advise against running it on this motherboard, due to the heat issues on the voltage regulator? Bigger heatsink on it or active cooling probably wouldn't make a difference?
Thanks for all Vcore test details! Now you have a lot of values to choose from. 😀
About the useability of the 2.2V setting for a K6-2, this depends a lot on the Power transistor that regulates the Vcore, and how it is cooled. Can you tell us the part number of transistor you did the voltage measurements on and also look at the other power transistor next to it?
This may help answering your question.
Note that under load the Pentium-MMX 233 can draw up to 6 Amps at 2.8V, but the K6-2/400 consumes up 11 Amps at 2.2V. The regulator transistor must be rated to handle this current, otherwise it will quickly fail.
Then there is the amount of heat that is generated and needs to be removed by the heatsink. On these boards, the power transistor that regulates the Vcore is usually supplied by the 5V rail from the PSU.
For the 2.8V Pentium-MMX the voltage has to be lowered by 2.2V, so at 6 Amps this will cause 13.2W of power to be generated in the regulator transistor.
For the 2.2V K6-2/400, this will amount to 2.8V times 11 Amps is 30.8W!
I hope this illustrates my concern for the linear regulator on this board. 😉
But if the regulator can take the current, a bigger heatsink and active cooling could make a difference.
And if going by the datasheet, where you calculate the maximum allowable thermal resistance of a heatsink, since the C/W goes into the negatives for the 30.8W of the K6-2, I'm guessing the answer is no, don't try it.
During POST, just after the BIOS has measured the CPU speed, there is a routine that determines the bus_speed (FSB). This bus_speed value is then used to program the chipset’s DRAM and L2 cache timing registers for optimum performance and stability.
The BIOS calcutates the bus_speed by dividing the CPU speed by the multiplier of the CPU. As shown above, the multiplier is stored in CMOS 3Fh bits 7,6 during CPU detection. These 2 bits can have 4 possible combinations:
The attachment Multi x4 bits defenition.png is no longer available
The 4th combination (both bits set) is not used in the original BIOS and can be used to indicate the x4 multiplier. For this to work, the code that divides the CPU speed by the multiplier has to be patched:
The attachment Multiplier x4 patch1.png is no longer available
At the start of this code fragment, the measured CPU speed is present in the BL register, and the variable at [BP+3Fh] holds a copy of CMOS register 3Fh. The CPU speed value is then placed in the AX register and the BL register is used to store the multiplier. In the original code this is done by checking bits 7 and 6 of [BP+3Fh] separately.
The patched code handles these bits together and performs some binary arithmetic to arrive at the correct x2, x3, or x4 multiplier value in BL. The DIV BL instruction at the end of this code fragment performs the actual AX/BL division and places the resulting bus_speed value in AL for further processing.
For the hexeditor, here are the 18 bytes long hex signatures of this x4 multiplier patch:
The attachment Multi x4 patch bytes.png is no longer available
If you had to make changes in the F-segment, remember to correct the last byte of the BIOS to make the checksum good again. 😉
In the next part of this Am5x86 patch story, I will focus on the 1995 uncompressed Award BIOS.
But after some debugging, it turns out the bits get mangled some how. When the CPU support table is read, the 3F value is correctly read with bits 6 and 7 set, but by the time the speed is being calculated, bit 6 in BP+3Fh gets cleared. Do you know anything about this phenomenon?
But after some debugging, it turns out the bits get mangled some how. When the CPU support table is read, the 3F value is correctly read with bits 6 and 7 set, but by the time the speed is being calculated, bit 6 in BP+3Fh gets cleared. Do you know anything about this phenomenon?
Thanks
Eric
Hello Eric,
Thanks for your report.
I haven’t noticed this Award 1994/1995 BIOS behavior before, so I will investigate where and why the SY-025JKL G3 BIOS manipulates this bit 6 in the BP+3Fh variable.
I also like to know if this is an isolated case, so I will be checking other Award v4.50g BIOSes as well.
In the mean time, there is an alternate solution for the SY-025JKL boards. I have an up-to-date SiS471G BIOS from a Gemlight board and carefully adapted it for these Soyo boards, including the default chipset register programming from the original REV .G2. BIOS.
This 11/28/95 Rev J.1 BIOS is millennium compliant, supports HDD's up to 8GB, and supports all enhanced Intel/AMD/Cyrix 486/5x86 CPU's including L1 cache WB and x4 multiplier modes.
You can download this SY-25JKL_J1 BIOS from this thread: Re: Fixing up an broken 486 I got from a local radio.
The only limitation of this BIOS is that it support only one IDE channel, just like the original G2 BIOS. The G3 is probably the only 025JKL BIOS revision that supports 2 IDE channels.
I will report back when I’ve completed my G3 BIOS investigation.
Cheers, Jan
Oh, ha! That's a very neat coincidence. I'll test this and report back. Thank you very much!
My investigation of leaked AWARD bios source shows that "canonically", bit 5 is supposed to be used to indicate a 4x multiplier. Upon further digging, this is how I implemented it in my ABIT PW4 mod BIOS, thus proving that I have stumbled on this problem before and I remember nothing at all. Early onset Alzheimer's, perhaps 😀
The IDE limitation is not an issue for me. I will be using it with an Adaptec VLB SCSI controller 😀
Chkcpuwrote on 2026-07-31, 10:01:In the mean time, there is an alternate solution for the SY-025JKL boards. I have an up-to-date SiS471G BIOS from a Gemlight boa […] Show full quote
In the mean time, there is an alternate solution for the SY-025JKL boards. I have an up-to-date SiS471G BIOS from a Gemlight board and carefully adapted it for these Soyo boards, including the default chipset register programming from the original REV .G2. BIOS.
This 11/28/95 Rev J.1 BIOS is millennium compliant, supports HDD's up to 8GB, and supports all enhanced Intel/AMD/Cyrix 486/5x86 CPU's including L1 cache WB and x4 multiplier modes.
You can download this SY-25JKL_J1 BIOS from this thread: Re: Fixing up an broken 486 I got from a local radio.
Hello,
i can confirm that this BIOS works on this board, and it indeed runs the 5x86 at 160mhz successfully.
A mod I wish to do later is persuade this BIOS to accept PS/2 mice by backporting the IRQ12 handler, like I did for the PW4.
Chkcpuwrote on 2026-07-31, 10:01:In the mean time, there is an alternate solution for the SY-025JKL boards. I have an up-to-date SiS471G BIOS from a Gemlight boa […] Show full quote
In the mean time, there is an alternate solution for the SY-025JKL boards. I have an up-to-date SiS471G BIOS from a Gemlight board and carefully adapted it for these Soyo boards, including the default chipset register programming from the original REV .G2. BIOS.
This 11/28/95 Rev J.1 BIOS is millennium compliant, supports HDD's up to 8GB, and supports all enhanced Intel/AMD/Cyrix 486/5x86 CPU's including L1 cache WB and x4 multiplier modes.
You can download this SY-25JKL_J1 BIOS from this thread: Re: Fixing up an broken 486 I got from a local radio.
Hello,
i can confirm that this BIOS works on this board, and it indeed runs the 5x86 at 160mhz successfully.
A mod I wish to do later is persuade this BIOS to accept PS/2 mice by backporting the IRQ12 handler, like I did for the PW4.
Hello Eric,
Thanks for reporting back on the 25JKL_J1 BIOS. Nice that it even works at 4x40MHz! 😊
My investigation of leaked AWARD bios source shows that "canonically", bit 5 is supposed to be used to indicate a 4x multiplier. Upon further digging, this is how I implemented it in my ABIT PW4 mod BIOS, thus proving that I have stumbled on this problem before.
Looking at the Award v4.50G (1994/1995) BIOSes for socket 3, I see that Award started to use CMOS_3F for additional CPU data in 1994. The CMOS_3F bit definitions I’ve found are:
Bit 7 = clock tripling CPU
Bit 6 = clock doubling CPU
Bit 5 = reserved
Bit 4 = Green CPU (in late 1993/early 1994 BIOS versions, this is bit 5)
Bits 3-0 are reserved. However I've seen bits 0,1,2 beying used for error reporting.
When Award started to use CPUID in early 1995, bit 3 was defined as “CPU in L1 cache Write-Back mode”, and when Cx5x86/Am5x86 support was added in the second half of 1995, bit 5 was defined to indicate a clock quadrupling CPU. So your use of bit 5 for x4 mode in the PW4 mod was spot on!
The reason I didn’t use bit 5 to indicate x4 mode in my patch is because bit 5 was formally used to indicate Green CPUs with SMI support in early socket 3 BIOSes. By using the combination of bits 6 and 7 instead off bit 5, I could make a patch that worked on all 1994/1995 Award BIOS socket 3 versions.
Chkcpuwrote on 2026-07-31, 10:01:Thanks for your report.
I haven’t noticed this Award 1994/1995 BIOS behavior before, so I will investigate where and why the SY- […] Show full quote
Thanks for your report.
I haven’t noticed this Award 1994/1995 BIOS behavior before, so I will investigate where and why the SY-025JKL G3 BIOS manipulates this bit 6 in the BP+3Fh variable.
I also like to know if this is an isolated case, so I will be checking other Award v4.50g BIOSes as well.
In the mean time, there is an alternate solution for the SY-025JKL boards. I have an up-to-date SiS471G BIOS from a Gemlight board and carefully adapted it for these Soyo boards, including the default chipset register programming from the original REV .G2. BIOS.
This 11/28/95 Rev J.1 BIOS is millennium compliant, supports HDD's up to 8GB, and supports all enhanced Intel/AMD/Cyrix 486/5x86 CPU's including L1 cache WB and x4 multiplier modes.
You can download this SY-25JKL_J1 BIOS from this thread: Re: Fixing up an broken 486 I got from a local radio.
The only limitation of this BIOS is that it support only one IDE channel, just like the original G2 BIOS. The G3 is probably the only 025JKL BIOS revision that supports 2 IDE channels.
I will report back when I’ve completed my G3 BIOS investigation.
Cheers, Jan
Since this came up in the thread - I wanted to say that I recently flashed this 1995 revision of the BIOS on my 486 that uses a Soyo 025-N2, and it will often hang after counting the memory. With the G2 BIOS - either original or modbinned - I could press escape during the memory test, and the boot process would continue.
With this one, it will usually hang and timeout with what I think is an HDD controller failure after pressing or not pressing esc - I only let it sit for a long time just once, so I am not 100% sure of the eventual error message.
I can still press del to enter the BIOS, exit without saving changes, and it may continue. Sometimes it takes three or more tries.
As far as I can tell, I haven't experienced issues with the system after getting past this roadblock. The boot process fades the energy star logo and continues. Games and software have run fine over the last couple of weeks.
If it is IDE controller-related, I am using a Promise EIDE 4030 Plus VLB caching controller. I dunno if this is some sort of race condition behind the scenes or what.
CkRtechwrote on 2026-08-01, 20:15:Since this came up in the thread - I wanted to say that I recently flashed this 1995 revision of the BIOS on my 486 that uses a […] Show full quote
Chkcpuwrote on 2026-07-31, 10:01:Thanks for your report.
I haven’t noticed this Award 1994/1995 BIOS behavior before, so I will investigate where and why the SY- […] Show full quote
Thanks for your report.
I haven’t noticed this Award 1994/1995 BIOS behavior before, so I will investigate where and why the SY-025JKL G3 BIOS manipulates this bit 6 in the BP+3Fh variable.
I also like to know if this is an isolated case, so I will be checking other Award v4.50g BIOSes as well.
In the mean time, there is an alternate solution for the SY-025JKL boards. I have an up-to-date SiS471G BIOS from a Gemlight board and carefully adapted it for these Soyo boards, including the default chipset register programming from the original REV .G2. BIOS.
This 11/28/95 Rev J.1 BIOS is millennium compliant, supports HDD's up to 8GB, and supports all enhanced Intel/AMD/Cyrix 486/5x86 CPU's including L1 cache WB and x4 multiplier modes.
You can download this SY-25JKL_J1 BIOS from this thread: Re: Fixing up an broken 486 I got from a local radio.
The only limitation of this BIOS is that it support only one IDE channel, just like the original G2 BIOS. The G3 is probably the only 025JKL BIOS revision that supports 2 IDE channels.
I will report back when I’ve completed my G3 BIOS investigation.
Cheers, Jan
Since this came up in the thread - I wanted to say that I recently flashed this 1995 revision of the BIOS on my 486 that uses a Soyo 025-N2, and it will often hang after counting the memory. With the G2 BIOS - either original or modbinned - I could press escape during the memory test, and the boot process would continue.
With this one, it will usually hang and timeout with what I think is an HDD controller failure after pressing or not pressing esc - I only let it sit for a long time just once, so I am not 100% sure of the eventual error message.
I can still press del to enter the BIOS, exit without saving changes, and it may continue. Sometimes it takes three or more tries.
As far as I can tell, I haven't experienced issues with the system after getting past this roadblock. The boot process fades the energy star logo and continues. Games and software have run fine over the last couple of weeks.
If it is IDE controller-related, I am using a Promise EIDE 4030 Plus VLB caching controller. I dunno if this is some sort of race condition behind the scenes or what.
Hi CkRtech,
This halt during POST just after the memory test is usually not a hang, but a delay while the BIOS is re-testing peripherals that produced an error on the first try. When it gives up, a message on the screen should indicate the faulty component.
If the fault is not preventing the BIOS from continuing POST, pressing F1 will continue the boot process.
The 25JKL-J1 BIOS was tested successfully on a SY-025N2 board, but that was with a dumb IDE-controller. Assuming your POST error is about the Harddisk, the 11/1995 J1 BIOS may cause this delay by being more thorough in testing the attached drives.
Now with your Promise EIDE4030plus caching controller, with its own BIOS and drive detection, it gets more complicated. But using conventional harddisks for drive 1 and 2 on the primary IDE channel, the J1 BIOS should be fine when setting these drives manually at CHS 1023/16/63/Normal (No LBA) in the STANDARD CMOS SETUP menu. (I assume the drives are larger than 528MB, otherwise use the lower Cylinders value of the drive.)
If this doesn’t help, you may need to play with the settings in the Promise Cache Setup Utility. Try if the Disk I/O Handler mode setting on Fast instead of Turbo helps. Also try the Cache Mode on Fast instead of Turbo.
The J1 BIOS has vastly improved CPU support, including L1 cache Write-Back support for any CPU that supports it.
Which CPU are you running now and how is it detected by the J1 BIOS? It is possible that the 4030plus Turbo settings are incompatible with the improved CPU support by the J1 BIOS.
AWARDs PS/2 mouse implementation is around 900 bytes in total (sans size optimization, of which there are potentially a *LOT*), which is exceedingly difficult to fit into a prebuilt 64KB ROM. Do you have any good info on how/where to find safe code caves?
For now I'm overwriting all of the "Uninitialized" memory ('Award Software, inc. Award Software, inc. Award Software, inc. Award Software, inc.') and the useless copyright markers scattered throughout...
AWARDs PS/2 mouse implementation is around 900 bytes in total (sans size optimization, of which there are potentially a *LOT*), which is exceedingly difficult to fit into a prebuilt 64KB ROM. Do you have any good info on how/where to find safe code caves?
For now I'm overwriting all of the "Uninitialized" memory ('Award Software, inc. Award Software, inc. Award Software, inc. Award Software, inc.') and the useless copyright markers scattered throughout...
Hi Eric,
The uncompressed 64KB Award BIOS is indeed a fully packed piece of code and data. Apart from the spaces you mentioned, I see only one additional block for you purpose.
A Harddisk related chunk of data in the Bootblock is the Harddisk Information Table for all predefined Harddisk types. This table always starts at offset E401h and contains up to 47 entries of 16 bytes. This fixed data is only read by the BIOS and never written to. So this block could give you 752 bytes of uninterrupted space when only User definable Harddisk data is used.
Note that when using unused areas containing 'Award Software, inc.’ strings in the Bootblock, steer clear of the area where the BIOS stores the (User) Harddisk parameter tables in Shadow RAM.
In the 64KB Award BIOS they usually start at offset F019h. These tables are 16 bytes long for each supported IDE Harddisk, so they occupy 64 bytes when the BIOS supports both the primary and secondary IDE channel.
Oh Hmmm yes I suppose nobody will miss the presets for archaic hard disk types. I'll expand my tooling to find this block automatically and then see where I stand space wise.
Chkcpuwrote on 2026-07-31, 10:01:In the mean time, there is an alternate solution for the SY-025JKL boards. I have an up-to-date SiS471G BIOS from a Gemlight boa […] Show full quote
In the mean time, there is an alternate solution for the SY-025JKL boards. I have an up-to-date SiS471G BIOS from a Gemlight board and carefully adapted it for these Soyo boards, including the default chipset register programming from the original REV .G2. BIOS.
This 11/28/95 Rev J.1 BIOS is millennium compliant, supports HDD's up to 8GB, and supports all enhanced Intel/AMD/Cyrix 486/5x86 CPU's including L1 cache WB and x4 multiplier modes.
You can download this SY-25JKL_J1 BIOS from this thread: Re: Fixing up an broken 486 I got from a local radio.
Hello,
i can confirm that this BIOS works on this board, and it indeed runs the 5x86 at 160mhz successfully.
A mod I wish to do later is persuade this BIOS to accept PS/2 mice by backporting the IRQ12 handler, like I did for the PW4.
I just noticed that, unlike the G3 BIOS, the 25JKL-J1 BIOS has an IRQ12 handler at offset D530h. It ends with an iret instruction at D5E9h, so it is only 186 bytes (0BAh) long and I’ve no idea if it covers PS/2 mice support.
IRQ12 handler at 0D530h
Function SetupMouse at 08170h, including the IRQ12 handler setup.
Int15h handler at 0d900h including the mouse check at 0d911h
This 64KB BIOS is PS/2 capable! how cool is that 😀
This will help in debugging this automated patching method i'm attempting on the original SOYO BIOS for sure.
EDIT: Wait! It is not! the BiosSupportedFeatures byte at FFEC is set to 01! It needs to be changed to 81 to enable mouse support. But then it should just work 😀 I'll test this when I get the time
EDIT2: I can confirm that once that change is made and the checksum is patched, the BIOS works perfectly fine with PS/2 mice.
My patched one does not, and I don't know why, as SoftICE never breaks on the Int15h handler and it's kind of testing my patience 😀 But one thing at a time. If anything, this will be useful for many other BIOSes.
EDIT3: Oh, 86Box broke hardware breakpoints between 5.3 and 6.0, how fun. We march on 😀
There is no table modification necessary in this BIOS, but the check above has to be extended to handle the 5x86.
This is an ammendment to the original function which also checks the IDs of the 5x86 CPUs.
Then I had to find a code cave to put this ammended function in and define CPU_5X86_STRING_TABLE_INDEX with an index in the CPU support table that points to an "Unknown" string or something like that.
1 ORG 0h 2AMDCheck5x86: 3 ; Previous condition holds true, so in case we land here from there 4 ; skip our ammended checks 5 jz short AMDCheck5x86_Exit 6 7 cmp ax, 04E0h 8 jnz short AMDCheck5x86_Exit 9 jmp short AMDCheck5x86_SetID 10 cmp ax, 04F0h 11 jnz short AMDCheck5x86_Exit 12AMDCheck5x86_SetID: 13 mov dh, 038h ; <- 3F flags, writeback + smi (is that last one correct even? no clue) 14 mov dl, ((CPU_5X86_STRING_TABLE_INDEX * 2) OR 081h) ; <-- put back the cache and coprocessor bits 15 16AMDCheck5x86_Exit: 17 call CMOS_ApplyCPUFeatureBits 18 retn
I gave this part of the code a name for my script tooling:
1CalculateBusSpeed_o866: 2 xor bh, bh 3 mov ax, bx 4 5 ; Is this quadruple clock? 6 test byte ptr [bp+3Fh], 20h 7 jz short NotX4 8 mov bl, 4 9 FAR_JMP 0F000h, orig_DoCalc 10NotX4: 11 FAR_JMP 0F000h, orig_NotX4
This is put right after the other patch code we had. Not sure if far jumps are necessary, but the original is a far function that ends with a retf. God knows where that ends up, so best to play it safe.
And of course, override the start of that function
The attachment Screenshot 2026-08-09 072802.png is no longer available
I'll clean this up a little and put it on my github later.
In case it wasn't clear, the labels are all auto-generated by IDAPython scripts (that you can also find on my github - but beware they're messy and out of date), which is a big help. As are the code cave address, but in this post I've manually inserted them for clarity...
I’ve completed the disassembly of the SY-025JKL/025MNP Rev G3 BIOS and found the place where the CMOS_3Fh bit 6 for the multiplier is mangled.
I was about to write a reply but saw you already beat me to it. 😉
This 03/1995 BIOS is one of the last Award socket 3 BIOSes that still uses the 1994 style code for CPU detection, before Award started to use tables with CPUID values. So this G3 BIOS mainly depends on the reset ID for CPU detection.
But in this BIOS, the function that detects the P24D via hardcoded CPUID instructions is expanded to support the Enhanded Am486DX2/DX4 and several UMC 486 models. This is the function you referenced as sub_F830B. I call this function “Check_CPUID”. 😉
Before December 1994, the only supported Am486DX4 was the NV8T model without CPUID and the reset ID of a 486DX2. Because the Am486DX2-80 was the fastest DX2 model, the 1994 Award BIOS detected an Am486DX4 by its clock speed. If this speed was > 90MHz, it must be an Am486DX4-100. This logic did not interfere with the Intel DX4 detection because the iDX4 has a different reset ID.
Now that the G3 BIOS has support for the Enhanced Am486DX4 SV8B via CPUID, the writers of this G3 BIOS tried another logic to distinguish the Am486DX4 NV8T from the SV8B.
Near the end of sub_F830B, at loc_F840E, the BIOS checks if the CPU is an iDX4 (sub_F842F) and if it supports SMI (sub_F845B) . When it finds a DX4 without SMI, it must be an Am486DX4 NV8T. The BIOS then loads DX with 803Fh and applies these CPUFeaturesBits, effectively setting the BIOS_up_ID to 3Fh and multiplier bits to x3 to indicate an Am486DX4.
When using my Reset table patch from earlier in this thread, the Am5x86 is portrayed as an iDX4 with an x4 multiplier. Although the Am5x86 has SMI and the corresponding CMOS_3F bit 4 is set, the sub_F830B function resets this bit at the beginning via a call to F844C and sets it again only when a matching CPUID is found. The above new Am486DX4 detection is now in the way because the SMI bit is not set again for the Am5x86, effectively reducing this CPU to an Am486DX with a x3 multiplier.
The solution is simple, just replace the call at BIOS_F:841B with 3 NOP instructions. This will restore the Am5x86 to a x4 multiplier, albeit without enhanced PM.
Your solution of adding the Am5x86 to the “Check_CPUID” (sub_F830B) function is certainly more elegant! 😀
Some remarks about your patch:
1) By using CMOS_3F bit 5 for a clock quadrupling CPU, the bit definitions are now:
Bit 7 = clock tripling CPU
Bit 6 = clock doubling CPU
Bit 5 = clock quadrupling CPU
Bit 4 = Green CPU (=SMI support)
Bit 3 = L1 cache WB Enabled CPU
Bits 2-0 are reserved. However I've seen bits 0,1,2 being used for error reporting.
Note the function of bit 3. When the Am5x86 reports a 04Exh signature, it is in Write-Through mode and bit 3 must not be set. Set bit 3 only if a 04Fxh signature, indication L1 cache WB mode, is found.
2) The old > 90MHz Am86DX4 detection logic is still present in the G3 BIOS (offset 20D9h and further), so you can overwrite the code at F840E-F841D and use it for the Am5x86 detection.
In my next reply, I will send you my disassembly listing and some further info about this G3 BIOS. Hopefully this will be useful.