Neue Infos:
Ich habe ein kleines Tool geschrieben welches den entsprechenden BIOS-Call den k6dos.sys zur Speichererkennung verwendet mal ausführt und die Ergebnisse der CPU-Register auf den Bildschirm schreibt.
Infos zum Call
Int15h / AX=e801h findet ihr hier:
http://www.uruk.org/orig-grub/mem64mb.html#int15e801
Meine Beispielimplementierung:
Code: Alles auswählen
/*
* Memory detect tool v1.0
* -- Put some entertaining description here, if i am not too lazy --
*
*/
#include <stdio.h>
#include <i86.h>
void check_e801(union REGS* regs)
{
(*regs).x.ax = 0xe801;
(*regs).x.bx = 0;
(*regs).x.cx = 0;
(*regs).x.dx = 0;
(*regs).x.cflag = 0;
int86(0x15, regs, regs);
}
void check_88h(union REGS* regs)
{
(*regs).h.ah = 0x88;
(*regs).x.ax = 0;
(*regs).x.cflag = 0;
int86(0x15, regs, regs);
}
int main(int argc,char **argv)
{
union REGS regs;
union REGS regs2;
printf("Memory detect tool v1.0\n");
printf("Checking e801h call...");
check_e801(®s);
if (regs.x.cflag != 0)
printf(" error. :-(");
printf("\nAX: %x\nBX: %x\nCX: %x\nDX: %x\n", regs.x.ax, regs.x.bx, regs.x.cx, regs.x.dx);
printf("\nChecking 88h call...");
check_88h(®s2);
if (regs2.x.cflag != 0)
printf(" error. :-(");
printf("\nAX: %x\n", regs2.x.ax);
return 0;
}
Kompiliert habe ich das ganze mit dem Watcom 16-bit C++-Compiler für DOS (v. 9.5b).
Fazit:
Das aktuellste BIOS (
lt. Phil) vom Board
DFI K6XV3+/66 Rev.B quittiert den Call e801h mit Carry-Flag != 0 und AX=8601, d.h. er wird nicht unterstützt. Genau deswegen kann k6dos.sys Write Combining nicht aktivieren. Das Board
ASUS TX97-XE hingegen liefert hier brauchbare Werte - hier funktionert k6dos.sys erwartungsgemäß korrekt.
Anscheinend ist es nicht gesichert, dass alle BIOSse diese Calls korrekt umsetzen. DOSBox scheint sie z.B. auch nicht zu emulieren. Meine Empfehlung ist deshalb,
k6dos.sys nicht zu verwenden, da die Methode zur Erkennung des Hauptspeichers nicht gut umgesetzt ist. Es müssten hier mehrere BIOS-Calls ausgeführt werden, inbesondere auch
e820h um eine vernünftige Aussage über Größe des Hauptspeichers treffen zu können. So macht es z.B. der Bootmanager
GRUB. Hier gibt's eine Art Fallback. e820h -> e801h -> 88h
Gruß
locutus