So...
ich habe mir das mal angeschaut. Es ist vielleicht so, dass ich C/C++ verwende, aber Basic verstehe ich auch, zumindest ein wenig...
Dabei ist mir aufgefallen, dass du die IDT zwar lädst (mittels LoadIDT(...)) allerdings rufst du "IDTInit()" nicht auf (zumindest habe ich dies nirgends gesehen).
Des Weiteren rufst du in der Datei FROSTmain.bas "int 0" auf. Der Interrupt 0 so wie du ihn aufrufst, muss allerdings erst zugeordnet werden, denn die Interrupts 0 bis 31 sind reserviert und können nur vom Prozessor generiert werden.
Was ich an deiner Stelle auch noch machen würde, was ich nirgends entdeckt habe, ist die komplette IDT-Struktur auf 0 zu setzen, also z.B. so
memset(&idt, sizeof(struct idt_entry) * 256); /* Hierbei handelt es sich um C-Code */
Dies ist, was mir so aufgefallen ist. Kann auch sein, dass ich was übersehen habe oder mich irgendwo geirrt habe.
Was aus den Log-Files hervorgeht, ist halt, dass dem Interrupt 0, den man aufrufen kann, nix zugeordnet ist. Des Weiteren wird dann ein "General Protection Fault"-Interrupt generiert, der allerdings auch nicht gehandelt wird, weshalb es wieder zu einem Fehler kommt.
Gruß Christian
PS: Ich hoffe, das war einigermaßen verständlich.
PPS: Nach einem vom Prozessor generierten Interrupt sollte man das System unter Umständen mit einer Endlosschleife anhalten, da man nicht weiß, was danach passiert...
*EDIT*
Wenn ich jetzt nicht ganz falsch liege, sollte wenn du "int 0" ausführen möchtest, der IDT-Eintrag 48 mit einer Funktion verknüpft werden, denn 0 - 31 (einschließlich 31) werden vom Prozessor generiert und dann 32 - 47 (auch wieder einschließlich 47) werden von den IRQs belegt.