Hallo,
Du musst eingach einen freien Interrupt verwenden um dem Kernel Informationen zu übergeben. Bsp.: int 0x33
Du müsstest bei deinen ISRs einen ISR für deinen Systemintrrupt einbauen von dem aus du eine funktion aufrufst mit der du die übergebenen Infos verarbeiten kannst:
Bsp.:
[ASM]
...
extern _system_int
global _dein_int
_dein_int:
cli
call _system_int
sti
iretd
In der Funktion system_int() kannst du dann die von deinem Programm veränderten Register (eax,ebx,ecx,edx) auslesen (mit inline ASM) und die Informationen verarbeiten. In meinem OS habe ich es so gemacht dass ich in eax die INT_Funktion (also was das OS tun soll) schreibe und (ebx,ecx,edx) als Parameter verwende.
[C]
...
void system_int()
{
unsigned long EAX,EBX,ECX,EDX;
// Infos aus Registern holen, und in EAX,EBX,... speichern
if( EAX == 0x01 )
Textausgabe( "Hallo Welt" );
}
So jetzt müsstest du noch ein kleines Programm schreiben das den Systeminterupt aufruft und eax auf 1 setzt ... Dann müsste am Bildschirm der Text "Hallo Welt" zu sehen sein. Hier nochn kleines bsp. wie das Programm aussehen könnte:
[C]
int main()
{
asm( "movl $0x1,%eax" );
asm( "int $0x33" ); // Statt int 33h musst du deinen SYSINTERRUPT angeben
while( 1 );
return;
}
Wenn du das hast erstellst du eine Binary und lädst diese an eine geeignete Speicherstelle in deinmem OS ... anschließend musst du nur noch zu dieser Speicherstelle springen und dein Programm wird ausgeführt ... Hoffe ich konnte dir weiterhelfen ...