#!/usr/bin/perl -w use strict; my %ints = ( 0x20 => 'int20', 0x09 => 'keyboard_irq', 0x08 => 'timer_irq', 0x01 => 'int20' ); my @idt; my @funcs; my $nextint=0; my $unhandmsg = "*** Unhandled Exception: 0xXX ***"; my $XXlcn = index($unhandmsg,"XX"); foreach my $int (sort { $a <=> $b } keys %ints){ my $n = sprintf("%02X",$int); # print STDERR "$n\n"; my $func = $ints{$int}; for(my $i=$nextint;$i<$int;$i++){ my $n = sprintf("%02X",$i); push @funcs,"unhand${n}:\n\tmov word[unhandmsg + $XXlcn],'$n'\n\tjmp dounhand\n"; push @idt,"\tdw unhand${n}\n\tdw 0x0008\n\tdb 0\n\tdb 0x8E\n\tdw 0\n"; } push @funcs," EXTERN $func int${n}_wrapper: pusha call $func popa iret "; push @idt,"\tdw int${n}_wrapper\n\tdw 0x0008\n\tdb 0\n\tdb 0x8E\n\tdw 0\n"; $nextint = $int + 1; } print <