VOGONS


First post, by Rav

User metadata
Rank Member
Rank
Member

Hi there.

I began a project to document what register do what on Ali M1429/G chipset in hope to make an utility to allow setting the different parameters missing in many board BIOS (like the Acer one, having no option to adjust memory or cache setting whatsoever).

Here the initial topic on where I wanted to overclock the CPU until I ended up wanting to just fix the board issue by bypassing the very limited BIOS : Overclocking a TI486DX2

I already found a register that did allow me to improve memory performance but it's kind of time consuming to poke random register and bench to see if that did something plus I don't even know what actually changed for that improvement.
Final plan is to have a dos utility that allow changing the different chipset parameters, mainly for memory and cache performance.

So I need peoples willing to help me by changing options in there bios (one at a time) and dumping all chipset register every single time to see what changed.
To dump register, you need the following program

Filename
1429DUMP.zip
File size
388 Bytes
Downloads
40 downloads
File comment
Register dumper
File license
Fair use/fair dealing exception

Dump by executing that way "1429dump > xxx.txt" (replace xxx with index number(details lower))
So here is the procedure:

1 - boot the computer, go in bios save the settings (without changing a thing). Dump registers
2 - reboot, go in bios, change a thing but reverting it back, save again. Dump registers (to see if we have some register that change for no apparent reasons)
3 - reboot, go in bios, change **one** thing, save, Dump registers
goto 3

Each dump should be named the same, 0.txt, 00.txt (first two dumps to detect register that can change for "no reasons"), 1.txt, 2.txt, 3.txt...

For fields that have many option, like wait states/timing, could set the lowest one, dump register, set the higher bootable one right after, dump registers...

With that I would need an index file in that format:

[Motherboard brand - model - M1429/M1429G]
0 - initial boot
00 - change nothing, save again (to detect if some registers change for fun)
1 - enabled bank interleave
2 - setting worst timing
3 - setting best timing
4 - changed is bus divider...
etc etc, one option at a time

Note that you don't revert back to older option when you change a different option. Or if you do, please inscribe it into the index file.

The more option tested/dumped the better, don't bother with IDE stuff, that require messing with a different port that i'm not dumping.

Once you're done dumping, zip the index.txt along with all the xxx.txt file you created and send it to me or attach it to this thread.

Last edited by Rav on 2023-04-04, 17:18. Edited 3 times in total.

Reply 1 of 14, by mkarcher

User metadata
Rank l33t
Rank
l33t

I downloaded the Award BIOS 2.0 for the A-Trend 1762 from The Retro Web, I will try to dump the setup table from it, which should directly yield a mapping of CMOS options to chipset bits.

Reply 2 of 14, by Rav

User metadata
Rank Member
Rank
Member
mkarcher wrote on 2023-04-04, 16:45:

I downloaded the Award BIOS 2.0 for the A-Trend 1762 from The Retro Web, I will try to dump the setup table from it, which should directly yield a mapping of CMOS options to chipset bits.

Great, that should speed the thing up if that work!
Thanks

Reply 3 of 14, by mkarcher

User metadata
Rank l33t
Rank
l33t
Rav wrote on 2023-04-04, 17:06:
mkarcher wrote on 2023-04-04, 16:45:

I downloaded the Award BIOS 2.0 for the A-Trend 1762 from The Retro Web, I will try to dump the setup table from it, which should directly yield a mapping of CMOS options to chipset bits.

Great, that should speed the thing up if that work!
Thanks

I found the following settings:

12
10: Hidden refresh (Disabled, Enabled)
16
03: DRAM read timing (slow, normal, fast, fastest)
0c: DRAM write timing (slow, normal, fast, fastest)
17
03: Cycle Check point (resvd, Fast, Normal, Slow)
30: HITMJ sampling time (2t, 3t, 4t, 5t)
19
20: Cache write timing (0WS, 1WS)
40: Cache read timing (0WS, 1WS)
1A
C0: RAS-to-CAS delay (2t, 4t, 6t, resvd)
1E
04: VESA L2 Cache Write (normal, long)
08: VESA L2 Cache Read (normal, long)
10: VESA master cycle ADSJ (normal, delay)
20
07: AT Bus clock select (7.19MHz, CLK2/4, CLK2/5, CLK2/6, CLK2/8, CLK2/10, CLK2/12, resvd)
70: Polling clock select (14.318MHz, CLK2, CLK2/2, CLK2/3, CLK2/4, 28.636, resvd, resvd)
22
01: IO Recovery (Disabled, Enabled)
02: Onboard IO Recovery (Disabled, Enabled)
04: ISA write cycle (0WS, 1WS)
25:
03: 16 Bit ISA I/O command (0WS, 1WS, 2WS, 3WS)
0C: 16 Bit ISA memory command (0WS, 1WS, 2WS, 3WS)
30: slow refresh (Disable, 30us, 60us, 120us)
C0: 32 Bit ISA wait time (2t, 4t, 6t, 8t)
27:
01: Local ready syn mode (SYN, BYPASS)
02: Internal ADS delay (Disabled, Enabled)
30: LDEVJ Check Point Delay (disable, 1 CKL2, 2 CLK2, 3 CLK2)

Autoconfig
FSB = CLK2 (for 486, so actually CLK2 is not CLK2 but CLK)
FSB 16/0F 17/03 19/60 20/77 27/30
16-25 05 01 00 00 20
33 05 01 40 01 30
40 05 01 60 02 30
50 05 01 60 03 30
25 (DX2) 05 01 00 00 20
33 (DX2) 05 01 40 01 30
40 (DX2) 05 01 60 02 30
25 (DX4) 05 01 00 00 20
33 (DX4) 05 01 40 01 30
FSB = CLK2/2 (for 386)
FSB 16/0F 17/03 19/60 20/77 27/30
16-25 05 01 00 03 20
33 05 01 40 04 30
40 05 01 60 05 30
50 05 01 60 00 30
25 (DX2) 05 01 00 03 20
33 (DX2) 05 01 40 04 30
40 (DX2) 05 01 60 05 30
25 (DX4) 05 01 00 03 20
33 (DX4) 05 01 40 04 30

How to read the register map: The heading is the chipset register index. The indented number is the bitmap for the setting, the possible choices are listed comma-separated in parenthesis.

Auto config tables specify register and affected bits in the header, and the value for those bits in the body of the table.

I don't know how to interpret your finding that register 1D has a lot of effect, and not seeing register 1D in the chipset configuration table at all, OTOH you also reported that your BIOS doesn't update that register.

Last edited by mkarcher on 2023-04-04, 18:04. Edited 1 time in total.

Reply 4 of 14, by Rav

User metadata
Rank Member
Rank
Member
mkarcher wrote on 2023-04-04, 17:55:
I found the following settings: […]
Show full quote
Rav wrote on 2023-04-04, 17:06:
mkarcher wrote on 2023-04-04, 16:45:

I downloaded the Award BIOS 2.0 for the A-Trend 1762 from The Retro Web, I will try to dump the setup table from it, which should directly yield a mapping of CMOS options to chipset bits.

Great, that should speed the thing up if that work!
Thanks

I found the following settings:

12
10: Hidden refresh (Disabled, Enabled)
16
03: DRAM read timing (slow, normal, fast, fastest)
0c: DRAM write timing (slow, normal, fast, fastest)
17
03: Cycle Check point (resvd, Fast, Normal, Slow)
30: HITMJ sampling time (2t, 3t, 4t, 5t)
19
20: Cache write timing (0WS, 1WS)
40: Cache read timing (0WS, 1WS)
1A
C0: RAS-to-CAS delay (2t, 4t, 6t, resvd)
1E
04: VESA L2 Cache Write (normal, long)
08: VESA L2 Cache Read (normal, long)
10: VESA master cycle ADSJ (normal, delay)
20
07: AT Bus clock select (7.19MHz, CLK2/4, CLK2/5, CLK2/6, CLK2/8, CLK2/10, CLK2/12, resvd)
70: Polling clock select (14.318MHz, CLK2, CLK2/2, CLK2/3, CLK2/4, 28.636, resvd, resvd)
22
01: IO Recovery (Disabled, Enabled)
02: Onboard IO Recovery (Disabled, Enabled)
04: ISA write cycle (0WS, 1WS)
25:
03: 16 Bit ISA I/O command (0WS, 1WS, 2WS, 3WS)
0C: 16 Bit ISA memory command (0WS, 1WS, 2WS, 3WS)
30: slow refresh (Disable, 30us, 60us, 120us)
C0: 32 Bit ISA wait time (2t, 4t, 6t, 8t)
27:
01: Local ready syn mode (SYN, BYPASS)
02: Internal ADS delay (Disabled, Enabled)
30: LDEVJ Check Point Delay (disable, 1 CKL2, 2 CLK2, 3 CLK2)

Autoconfig
FSB = CLK2 (for 486, so actually CLK2 is not CLK2 but CLK)
FSB 16/0F 17/03 19/60 20/77 27/30
16-25 05 01 00 00 20
33 05 01 40 01 30
40 05 01 60 02 30
50 05 01 60 03 30
25 (DX2) 05 01 00 00 20
33 (DX2) 05 01 40 01 30
40 (DX2) 05 01 60 02 30
25 (DX4) 05 01 00 00 20
33 (DX4) 05 01 40 01 30
FSB = CLK2/2 (for 386)
FSB 16/0F 17/03 19/60 20/77 27/30
16-25 05 01 00 03 20
33 05 01 40 04 30
40 05 01 60 05 30
50 05 01 60 00 30
25 (DX2) 05 01 00 03 20
33 (DX2) 05 01 40 04 30
40 (DX2) 05 01 60 05 30
25 (DX4) 05 01 00 03 20
33 (DX4) 05 01 40 04 30

How to read the register map: The heading is the chipset register index. The indented number is the bitmap for the setting, the possible choices are listed comma-separated in parenthesis.

That's a good start, THANKS !

So no mention of register 1D (The one I used to get performance improvement so far), interesting.
And that answer my question about register 20!

Reply 5 of 14, by Rav

User metadata
Rank Member
Rank
Member

So far I did many tests.

Register 0x1D, At the end I ended up not using it. While it increase the memory performance, mainly with a 33Mhz bus, the other changes like the dram timing from register 16 do not change anything. Like it ignore it...
Getting rid of the 1D register modification allowed a better improvement while patching the other register.

Register 20, bitmask 07 seam to be **upside down** . Higher number seam to give a lower multiplier, not the other way around. (my board set it to 0x24 for 33, and 0x22 for 40 and 50)
I'm going to post screenphotos of (before) and (after) for comparison of what I was able to achieve so far.

Reply 6 of 14, by Rav

User metadata
Rank Member
Rank
Member

Here 33Mhz.
As we see, the ram read/write is now as fast as the L2 cache read. While move still very low

Stock

IMG_20230403_085255979.jpg
Filename
IMG_20230403_085255979.jpg
File size
405.85 KiB
Views
761 views
File license
CC-BY-4.0

After registers patch

IMG_20230404_124422125.jpg
Filename
IMG_20230404_124422125.jpg
File size
406.97 KiB
Views
761 views
File license
CC-BY-4.0

Reply 7 of 14, by Rav

User metadata
Rank Member
Rank
Member

Here 40Mhz, There are improvement but there is still something to fix somewhere (the memory subsystem seam to be just plain slower).
At least now the memory stuff are "about equal" as "stock 33".

Stock

IMG_20230403_102748864.jpg
Filename
IMG_20230403_102748864.jpg
File size
438.74 KiB
Views
752 views
File license
CC-BY-4.0

Patched

IMG_20230404_151431409.jpg
Filename
IMG_20230404_151431409.jpg
File size
365.87 KiB
Views
752 views
File license
CC-BY-4.0

Reply 8 of 14, by Rav

User metadata
Rank Member
Rank
Member

Here 50:
The memory stuff seam to be a little faster than optimized 33 (I suspect that the divider that apply a big malus on the performance is the same on 40 and 50 mhz bus so what I lost between 33 and 40, I got it back between 40 and 50. Minus the L2, don't work at 50fsb.

Stock

IMG_20230403_103625735.jpg
Filename
IMG_20230403_103625735.jpg
File size
405.67 KiB
Views
749 views
File license
CC-BY-4.0

Patched

IMG_20230404_154220256.jpg
Filename
IMG_20230404_154220256.jpg
File size
387.42 KiB
Views
749 views
File license
CC-BY-4.0

Reply 10 of 14, by Rav

User metadata
Rank Member
Rank
Member
mkarcher wrote on 2023-04-04, 17:55:
I found the following settings: […]
Show full quote
Rav wrote on 2023-04-04, 17:06:
mkarcher wrote on 2023-04-04, 16:45:

I downloaded the Award BIOS 2.0 for the A-Trend 1762 from The Retro Web, I will try to dump the setup table from it, which should directly yield a mapping of CMOS options to chipset bits.

Great, that should speed the thing up if that work!
Thanks

I found the following settings:

12
10: Hidden refresh (Disabled, Enabled)
16
03: DRAM read timing (slow, normal, fast, fastest)
0c: DRAM write timing (slow, normal, fast, fastest)
17
03: Cycle Check point (resvd, Fast, Normal, Slow)
30: HITMJ sampling time (2t, 3t, 4t, 5t)
19
20: Cache write timing (0WS, 1WS)
40: Cache read timing (0WS, 1WS)
1A
C0: RAS-to-CAS delay (2t, 4t, 6t, resvd)
1E
04: VESA L2 Cache Write (normal, long)
08: VESA L2 Cache Read (normal, long)
10: VESA master cycle ADSJ (normal, delay)
20
07: AT Bus clock select (7.19MHz, CLK2/4, CLK2/5, CLK2/6, CLK2/8, CLK2/10, CLK2/12, resvd)
70: Polling clock select (14.318MHz, CLK2, CLK2/2, CLK2/3, CLK2/4, 28.636, resvd, resvd)
22
01: IO Recovery (Disabled, Enabled)
02: Onboard IO Recovery (Disabled, Enabled)
04: ISA write cycle (0WS, 1WS)
25:
03: 16 Bit ISA I/O command (0WS, 1WS, 2WS, 3WS)
0C: 16 Bit ISA memory command (0WS, 1WS, 2WS, 3WS)
30: slow refresh (Disable, 30us, 60us, 120us)
C0: 32 Bit ISA wait time (2t, 4t, 6t, 8t)
27:
01: Local ready syn mode (SYN, BYPASS)
02: Internal ADS delay (Disabled, Enabled)
30: LDEVJ Check Point Delay (disable, 1 CKL2, 2 CLK2, 3 CLK2)

Autoconfig
FSB = CLK2 (for 486, so actually CLK2 is not CLK2 but CLK)
FSB 16/0F 17/03 19/60 20/77 27/30
16-25 05 01 00 00 20
33 05 01 40 01 30
40 05 01 60 02 30
50 05 01 60 03 30
25 (DX2) 05 01 00 00 20
33 (DX2) 05 01 40 01 30
40 (DX2) 05 01 60 02 30
25 (DX4) 05 01 00 00 20
33 (DX4) 05 01 40 01 30
FSB = CLK2/2 (for 386)
FSB 16/0F 17/03 19/60 20/77 27/30
16-25 05 01 00 03 20
33 05 01 40 04 30
40 05 01 60 05 30
50 05 01 60 00 30
25 (DX2) 05 01 00 03 20
33 (DX2) 05 01 40 04 30
40 (DX2) 05 01 60 05 30
25 (DX4) 05 01 00 03 20
33 (DX4) 05 01 40 04 30

How to read the register map: The heading is the chipset register index. The indented number is the bitmap for the setting, the possible choices are listed comma-separated in parenthesis.

Auto config tables specify register and affected bits in the header, and the value for those bits in the body of the table.

I don't know how to interpret your finding that register 1D has a lot of effect, and not seeing register 1D in the chipset configuration table at all, OTOH you also reported that your BIOS doesn't update that register.

Could you point me to the proper tool to extract that?
I am looking for the cache configuration for WT/WB

I did download the same BIOS (atc 1762) and where only able to open it with modbin. There I can clearly see that in the setup it does have WT/WB configurations for internal and external caches. But I don't see any way to extract the setup table from there. I also tried with a few CBROM version without any success.

I also tried with some other ALI1429G board with AMI Bioses, with many amibcp version, all I get is "header not found"

Reply 11 of 14, by mkarcher

User metadata
Rank l33t
Rank
l33t
Rav wrote on 2023-09-20, 17:46:
Could you point me to the proper tool to extract that? I am looking for the cache configuration for WT/WB […]
Show full quote

Could you point me to the proper tool to extract that?
I am looking for the cache configuration for WT/WB

I did download the same BIOS (atc 1762) and where only able to open it with modbin. There I can clearly see that in the setup it does have WT/WB configurations for internal and external caches. But I don't see any way to extract the setup table from there. I also tried with a few CBROM version without any success.

I also tried with some other ALI1429G board with AMI Bioses, with many amibcp version, all I get is "header not found"

I loaded the BIOS into a disassembler (IDA in this case), and used my knowledge about Award data structures to manually derive the table. I didn't use any kind of automated tool for that.

Reply 12 of 14, by jakethompson1

User metadata
Rank Oldbie
Rank
Oldbie
mkarcher wrote on 2023-09-20, 21:32:
Rav wrote on 2023-09-20, 17:46:
Could you point me to the proper tool to extract that? I am looking for the cache configuration for WT/WB […]
Show full quote

Could you point me to the proper tool to extract that?
I am looking for the cache configuration for WT/WB

I did download the same BIOS (atc 1762) and where only able to open it with modbin. There I can clearly see that in the setup it does have WT/WB configurations for internal and external caches. But I don't see any way to extract the setup table from there. I also tried with a few CBROM version without any success.

I also tried with some other ALI1429G board with AMI Bioses, with many amibcp version, all I get is "header not found"

I loaded the BIOS into a disassembler (IDA in this case), and used my knowledge about Award data structures to manually derive the table. I didn't use any kind of automated tool for that.

Does Award have a predictable format with regard to mapping CMOS registers to chipset registers? I have looked at much more AMI HiFlex than Award, and as far as I can tell, there is no pattern. There are stubs of code that will read from selected CMOS registers and program the chipset, and most of the time it looks like they picked a CMOS register number somewhat close to the chipset register number, but that's not always possible and they will sometimes reuse some of the bits for some other meaning.

Reply 13 of 14, by Rav

User metadata
Rank Member
Rank
Member

I managed to read the table.
Now I understand why it was missing these 3 options in mkarcher dump:
Internal cache WB/WT
External cache WB/WT
Shadow Bios Cacheable

The only 3 missing for that specific table.
They point to register FF... or FFFF? actually because it have an extra byte stuffed between the "register" and "bit" then one bit 01, then 04 and 08.
Register FF, I don't know if it's the real deal or it's "FF" because there fake menu, But FFh do read 00000101. I assume bit 04 is 0 because my board is configured for 486 (not WB 486).. I could set it back to Cyrix 5x86 tomorrow and see if it's switched to a 1.... But ctcm detect WB so at that point i'm not sure what to think..

I can't modify these, they are read only.

Edit : 08, 04, 01 would make it 0000xy0z, not 00000xyz.

Reply 14 of 14, by Rav

User metadata
Rank Member
Rank
Member

I did poke in the register 19 (the same that have the cache timings) as it would be logical that the WT/WB setting would be there

Here is what I found so far

19:
01 - System crash with some garbage on the screen
02 - System crash when I exit ctchip
04 - Do nothing apparent, no crash, no difference in cache behavior
08 - System crash instantly
10 - Do nothing apparent, no crash, no difference in cache behavior
20 - Write cache timing 0ws/1ws
40 - Read cache timing 0ws/1ws
80 - System crash instantly

I assume some of these could be cache on/off and maybe there is the WT/WB config too.
But maybe it's just not possible to switch from WB to WT once the system is booted. I assume that if it's set to WB and you switch it to WT or turn the cache off, the chipset might be too stupid to check the dirtiness in the tag and so you end up with uncommitted write and crashs.

Maybe I could try to do ton of memory allocation / writing / reading... before updating the register... So I could trash the cache with useless data before so there is less chance that something important get forgotten there.