da liegt ja der hund begraben;) meine Routinen dazu sind ja in asm.
Der C(++)-teil sieht dazu so aus:
void restart()
{
cli();
setint(0xD,0,0,0);
setint(0x8,0,0,0);
setint(0x20,0,0,0);
sti();
while(){}
}
das nützt dir nix;) Und wenn du mit asm nicht viel anfangen kannst bringt dir mein setint auch sehr wenig:
_setint:
push ebp
mov ebp,esp
push eax
push edx
push edi
push es
mov ax,IDTData
mov es,ax
mov eax,8
mov edx,[ebp+8]
mul edx
mov edi,eax
mov eax,[ebp+12]
and eax,0x0000FFFF
stosw
mov ax,cs
stosw
xor eax,eax
stosb
mov eax,[ebp+20]
shl eax,5
add eax,10000000b
add eax,[ebp+16]
stosb
mov eax,[ebp+12]
shr eax,16
and eax,0x0000FFFF
stosw
pop es
pop edi
pop edx
pop eax
mov esp,ebp
pop ebp
ret
hier wird davon ausgegangen das ein Datensegment für die IDT vorhanden ist das dann direkt angesprochen werden kann.
Naja versuch was draus zu machen;)