VOGONS


Reply 20 of 36, by Oerg866

User metadata
Rank Newbie
Rank
Newbie

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 36, by Gmlb256

User metadata
Rank Oldbie
Rank
Oldbie
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.

Reply 22 of 36, by Oerg866

User metadata
Rank Newbie
Rank
Newbie

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 36, by Oerg866

User metadata
Rank Newbie
Rank
Newbie

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 36, by Oerg866

User metadata
Rank Newbie
Rank
Newbie

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 36, by Gmlb256

User metadata
Rank Oldbie
Rank
Oldbie

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.

Reply 27 of 36, 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
30 downloads
File license
GPL-2.0-or-later

Reply 29 of 36, by Oerg866

User metadata
Rank Newbie
Rank
Newbie

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 36, by Gmlb256

User metadata
Rank Oldbie
Rank
Oldbie

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.

Reply 31 of 36, by Oerg866

User metadata
Rank Newbie
Rank
Newbie

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 36, 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 34 of 36, by Oerg866

User metadata
Rank Newbie
Rank
Newbie

@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 36, by Gmlb256

User metadata
Rank Oldbie
Rank
Oldbie

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.