diff fe5d1976a0b4376c955ca8423eb9005f5d035403 uncommitted --- a/sys/src/9/pc/archgeneric.c +++ b/sys/src/9/pc/archgeneric.c @@ -18,6 +18,9 @@ void archreset(void) { + ushort ptr[3]; + unsigned cf9; + i8042reset(); /* @@ -32,8 +35,16 @@ */ print("Takes a licking and keeps on ticking...\n"); *(ushort*)KADDR(0x472) = 0x1234; /* BIOS warm-boot flag */ - outb(0xcf9, 0x02); + cf9 = inb(0xcf9) & ~0x06; + outb(0xcf9, cf9 | 2); + microdelay(50); outb(0xcf9, 0x06); + microdelay(50); + + print("And now just pray...\n"); + ptr[0] = ptr[1] = ptr[2] = 0; + lidt(ptr); + *(int *) 0 = 0; print("can't reset\n"); for(;;)