Reply 20 of 36, 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.
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.
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.
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.
I can do this! I'll try to make that work during this weekend. Sorry for the slow answer 😁