Subj : Interrupts To : Vitus Jensen From : Lee Aroner Date : Sat May 26 2001 03:29 am LA>> Not to niggle the point, but of course OS/2 uses interrupts. Each LA>> and every one of those API calls is a wrapper around an interrupt LA>> call. VJ>> Well, to be exact: OS/2 uses callgates to jump into kernel code. VJ>> Callbacks are similar to interrupt gates in that VJ>> they switch priviledge VJ>> levels and have a predefined entry point into the kernel but they VJ>> additionally copy bytes from lower to higher level stacks while VJ>> swichting (byte count defined in the callgate). Something what a VJ>> interrupt gate won't do. VJ>> It is a common design of OSses to do this switching via a software VJ>> interrupt but OS/2 is different. LA> Ah, but are not those callgates accessed through an interrupt? LA> It's irrelevant that it is an invalid interrupt, a spade 's a LA> spade after all... VJ> It's no INT xx instruction but really a call far. You do a > *CALL FAR XXXX:0000*. > The offset doesn't matter (as the callgate defines the > entry point) but the XXXX (selector) points to an entry in > the GDT or LDT (LDT should be possible but I've never seen > a callgate in it in OS/2) which is a callgate (descriptor > type 4). The descriptor defines the destination > (selector:offset) and how many words are copied from the > lower ring stack to the new stack. VJ> You can examine how this works by installing _Theseus_ on > your machine. Debug your program using any debugger which > can display assembler instructions and trace until you find > a "CALL XXX:0000" instruction, write down the XXXX. > Now start Theseus and have a look at the GDT. Lookup XXXX > (ignore bit 0-2), you find a descriptor with /Descriptor > Priviledge Level/ 3 (because it's callable from a ring 3 > application), some offset and a selector which is probably > 0168 (perhaps dependent on OS/2 version). > Lookup 0168 in the GDT, you find the code selector for the > kernel, ring 0, limit FFFFFFFF. VJ> I would like to have an Intel or AMD manual about the i386 > because this stuff IMHO is best explained by the processor > vendor but I have only a bad german short reference. One > of these days I should "lend" one from the library... VJ> Bye, > Vitus VJ> PS: I'm maintaining an OS for embedded systems where we use > an interrupt, a structure pointed to by register XWA and a > software dispatcher. This is probably what you have in > mind. Vitus, thanks for the detailed description, and for setting me straight. I had assumed that OS/2 used the same method of forcing a processor exception to jump to ring zero as MonopolySoft uses, apparently I was wrong. LRA -- SPEED 2.01 #2720: Between two evils, pick the one you never tried before --- Maximus/2 3.01 * Origin: Top Hat 2 BBS (1:343/41) .