Subject: Re: memtest86 in bochs
To: David Laight <david@l8s.co.uk>
From: Ben Collver <collver1@comcast.net>
List: port-i386
Date: 01/07/2004 08:36:18
On Mon, Jan 05, 2004 at 10:19:09PM +0000, David Laight wrote:
> What is in the vector table you are setting for real mode?
I'll try to show it here:
> b 0x2604
> c
(0) Breakpoint 6, 0x2604 in ?? ()
Next at t=1702604
(0) [0x00002604] 0010:00002604 (unk. ctxt): lidt DS:[EBX + fffef64c]
> info registers
eax 0x2540 9536
ecx 0x0 0
edx 0x0 0
ebx 0x13110 78096
esp 0x1425c 0x1425c
ebp 0x1c3 0x1c3
esi 0x2000 8192
edi 0x13110 78096
eip 0x2604 0x2604
eflags 0x6 6
cs 0x10 16
ss 0x18 24
ds 0x18 24
es 0x18 24
fs 0x18 24
gs 0x18 24
$ echo "obase=16;$(echo 'ibase=16;180+13110+FFFEF64C'|bc)"|bc
1000028DC
> x/3wx 0x1000028DC
[bochs]:
0xffffffff <bogus+0>: 0x00000000 0x00000000 0x00000000
I believe this corresponds to idt_real: in head.S, and so the the IDT base is
set to 0x0. Dumping 0x0 just shows a long sequence of zero values.
> And is it following the correct procedure for the mode switch?
> I think the code in sys/arch/i386/stand/lib/realtoprot.S (or threabouts)
> is ok
It appears to be correct from my muddy understanding. References:
http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/arch/i386/stand/lib/realprot.S?rev=1.2
http://backyard.homeunix.net:8080/~ben/pkgsrc/memtest86-3.0/head.S
http://backyard.homeunix.net:8080/~ben/pkgsrc/comparison.png
head.S:query_pcbios() and realprot.S:prot_to_real() handle the switch in a
very similar way. memtest86 has extra code before the switch and NetBSD has
an extra test after the switch.
Ben
--
A hacker does for love what others would not do for money.