Reply 20 of 53, by Oerg866
Could someone check if it's actually possible to use write combining with this region in the first place? I cannot do this without the machine freezing instantly. But I kept it in because a friend suggested it.
Could someone check if it's actually possible to use write combining with this region in the first place? I cannot do this without the machine freezing instantly. But I kept it in because a friend suggested it.
Oerg866 wrote on 2021-08-28, 16:30:Could someone check if it's actually possible to use write combining with this region in the first place? I cannot do this without the machine freezing instantly. But I kept it in because a friend suggested it.
The A0000 range?
I could do it with K6WCX using the following parameter:
K6WCX A0000 1 E0000000 64
The number that comes after each address are the amount of 128KB blocks.
Also tested with K6INIT the VGA write combine without any issues.
VIA C3 Nehemiah 1.2A @ 1.46 GHz | ASUS P2-99 | 256 MB PC133 SDRAM | GeForce2 GTS 32 MB | Voodoo2 12 MB | SBLive! | AWE64 | SBPro2 | GUS
Ah, I see what's happening - I cannot set both MTRRs, then my machine freezes (no idea why, the code seems fine?)
If I just set VGA write combine it does work.
It also gives about 8 FPS increase (124 to 131) in PCPBENCH (with /VGAMODE parameter) 😀
Soooo, now to figure out why MTRR1 freezes....
v0.04 - Bug fixes!
NEW in this release:
Download here:
v0.90 - Fixes, set Multiplier for K6-2+/K6-III+
This version allows you to set the multiplier for the K6-2+/K6-III+ CPU.
Other changes:
Download here:
https://github.com/oerg866/k6init/releases/tag/v0.90
(Apologies for the spam, soon the frequent updates should stop as the thing matures xD)
Did some further testing with K6INIT and the performance is now exactly the same when using both K6DOS.SYS and K6WCX for setting write ordering and combining respectively.
One feedback here about the program: Why it is a TSR?
Although the memory consumed is insignificant (960 bytes), I don't see anything needed to be stored for later use. The configuration can be read from the CPU registers.
VIA C3 Nehemiah 1.2A @ 1.46 GHz | ASUS P2-99 | 256 MB PC133 SDRAM | GeForce2 GTS 32 MB | Voodoo2 12 MB | SBLive! | AWE64 | SBPro2 | GUS
I actually have no idea, maybe I'm misusing the framework. I will investigate. Thanks for the testing ♥
What you want to do is get dos to run the init code and then "fail" to load the driver (since your program really isnt a driver at all)
You do this by returning 0 units and a driver size of 0 in the interrupt routine for the first call to your driver, the init function. Here is a very basic example in assembly if that helps you
Thanks a ton 😁 I will look into it tonight if I find the time
Well that was surprisingly simple. This ExitKeepC stuff is really only meant to be called for staying resident, which I probably would have known if I owned the book. I've based all of this of the floppy disk that came with the book, so.. Meh 😜
Anyway, this is v0.91 which fixes that.
Thanks for the fix!
In addition to this I have tested setting the multiplier with K6INIT (using a K6-2+/450) and it works except for the x2.5 multiplier as the K6plus doesn't support that one. This program is making DOS related utilities seem obsolete in comparison. 😀
That ExitKeepC routine seemed obvious with how it was named.
VIA C3 Nehemiah 1.2A @ 1.46 GHz | ASUS P2-99 | 256 MB PC133 SDRAM | GeForce2 GTS 32 MB | Voodoo2 12 MB | SBLive! | AWE64 | SBPro2 | GUS
Hi thanks for the nice words 😁
The 2.5x multiplier should not even be possible to set, the program should give you an invalid multiplier message 😮
static const unsigned short k6_multiplierValues[] = {
BADMUL, BADMUL, // 0.0x, 0.5x (both invalid)
BADMUL, BADMUL, // 1.0x, 1.5x (both invalid)
0x0004, BADMUL, // 2.0x, 2.5x (2.5x = invalid)
0x0005, 0x0007, // 3.0x, 3.5x
0x0002, 0x0000, // 4.0x, 4.5x
0x0001, 0x0003, // 5.0x, 5.5x
0x0006 // 6.0x
};
Congratulations, exceptional work 😀
I am grateful to all of you who have inventiveness and ability to make these fantastic programs and then generously share with the whole community 😀
Hi!
I'm getting "ERROR OBTAINING SYSTEM MEMORY INFORMATION" when running K6INIT v0.91 in dos 6.22 on FIC VA-503A (MVP3) with K6-III 400MHz.
@Zerthimon:
Thank you for the report. It seems that the BIOS call to read the memory size failed. There are several different methods to do this, some not quite trivial, I use a relatively easy and as far as I understood it quite well supported method...
I might need to investigate that using 86Box or something. What "brand" of BIOS does the FIC use?
Hello again.
Have a new feedback after using K6INIT for months. Could you add a command line switch to set a MTRR as uncacheable like CTU in Windows? I was playing with write combining with a Voodoo2 card to improve performance when it s being used and mapping the entire region causes the computer to occasionally freeze. The workaround was to set a very small region as uncacheable with the secondary MTRR.
I got the idea when looking around the Glide source code in sezero's repository, where in glide2x/cvg/init/sst1init.c there is a function called sst1InitCaching with a version for AMD K6-2/III(+) CPUs called sst1InitCachingAMD that appears to be unused as I don't see it being called anywhere.
VIA C3 Nehemiah 1.2A @ 1.46 GHz | ASUS P2-99 | 256 MB PC133 SDRAM | GeForce2 GTS 32 MB | Voodoo2 12 MB | SBLive! | AWE64 | SBPro2 | GUS
I can do this! I'll try to make that work during this weekend. Sorry for the slow answer 😁
This is great thanks OP, I'm testing this out and am getting some speed improvements compared to the previous optimisation tool I was using with my K6-2+.
My only suggestion would be to include a command line param that lets you turn off the output, it's very verbose!
Life? Don't talk to me about life.
I just discovered this great tool, amazing work!
I have a K6-III+, I'm running DOS 7.1 and using UMBPCI. I'm loading it just by typing k6init at the prompt, it detects everything automatically.
These are the results, all of them with Quake 1.06 running timedemo demo3 at 640x480 :
- Before running k6init and hence without enabling any kind of write combining, I get 26.3 fps
- Using k6wcx I get 33.2 fps
- Finally, with k6init it goes up to 36.1 fps and 37 fps on demo1.
Edited to add that I just tried loading k6init.exe on the config.sys, putting it in the very first line before the EMS memory manager (EMM386 or QEMM8, tested both) I've got 36.8 fps on demo3, and 37.6 fps on demo1.
Also, happy to report that setting the CPU multiplier also work perfectly fine.
Be free!
Zerthimon wrote on 2021-10-25, 20:38:Hi!
I'm getting "ERROR OBTAINING SYSTEM MEMORY INFORMATION" when running K6INIT v0.91 in dos 6.22 on FIC VA-503A (MVP3) with K6-III 400MHz.
Better late than never, thanks to 86Box I've discovered that the FIC VA-503A BIOS does not support the INT15/E801 method of obtaining the available system memory, but it does support the E820 one, and I've now learned how to use it.
The next version of K6INIT will therefore run on that board. It will be released in a few days, hopefully...