VOGONS


Reply 20 of 38, by Oerg866

User metadata
Rank Member
Rank
Member

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.

Reply 21 of 38, by Gmlb256

User metadata
Rank l33t
Rank
l33t
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 | GeForce3 Ti 200 64 MB | Voodoo2 12 MB | SBLive! | AWE64 | SBPro2 | GUS

Reply 22 of 38, by Oerg866

User metadata
Rank Member
Rank
Member

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....

Reply 23 of 38, by Oerg866

User metadata
Rank Member
Rank
Member

v0.04 - Bug fixes!

NEW in this release:

  • Write Ordering parameter (/wo) no longer causes a string parse error.
  • Added /wcdisable parameter to completely disable write combining
  • Fixed crash/freeze when writing a 2nd MTRR (usually when using /vga parameter)
  • Fixed write order misnamed function in K6CPU.ASM (probably caused WO register write to have no effect)
  • Fixed write allocate memory size being off by 4MB
  • Improved command line error display (I really like this one 😜)

Download here:

https://github.com/oerg866/k6init/releases/tag/v0.04

Reply 24 of 38, by Oerg866

User metadata
Rank Member
Rank
Member

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:

  • Some typos and restructuring
  • updated README
  • Fix missing function call that resulted in Write Order Mode not being set.

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)

Reply 25 of 38, by Gmlb256

User metadata
Rank l33t
Rank
l33t

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 | GeForce3 Ti 200 64 MB | Voodoo2 12 MB | SBLive! | AWE64 | SBPro2 | GUS

Reply 27 of 38, by maxtherabbit

User metadata
Rank l33t
Rank
l33t

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

Filename
wdsram.txt
File size
10.39 KiB
Downloads
71 downloads
File license
GPL-2.0-or-later

Reply 29 of 38, by Oerg866

User metadata
Rank Member
Rank
Member

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.

https://github.com/oerg866/k6init/releases/tag/v0.91

Reply 30 of 38, by Gmlb256

User metadata
Rank l33t
Rank
l33t

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 | GeForce3 Ti 200 64 MB | Voodoo2 12 MB | SBLive! | AWE64 | SBPro2 | GUS

Reply 31 of 38, by Oerg866

User metadata
Rank Member
Rank
Member

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
};

Reply 32 of 38, by igna78

User metadata
Rank Member
Rank
Member

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 😀

Reply 33 of 38, by Zerthimon

User metadata
Rank Member
Rank
Member

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.

Reply 34 of 38, by Oerg866

User metadata
Rank Member
Rank
Member

@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?

Reply 35 of 38, by Gmlb256

User metadata
Rank l33t
Rank
l33t

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 | GeForce3 Ti 200 64 MB | Voodoo2 12 MB | SBLive! | AWE64 | SBPro2 | GUS

Reply 37 of 38, by badmojo

User metadata
Rank l33t
Rank
l33t

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.

Reply 38 of 38, by kahuna

User metadata
Rank Newbie
Rank
Newbie

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!