Xref: news2.mv.net comp.os.msdos.djgpp:4081 From: snarfy AT goodnet DOT com Newsgroups: comp.os.msdos.djgpp Subject: What does _go32_dpmi_chain_protected_mode_interrupt() really do? Date: 21 May 1996 06:08:30 GMT Organization: GoodNet Lines: 47 Message-ID: <4nrmku$2sm@news1.goodnet.com> NNTP-Posting-Host: goodnet.com To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp I was wondering what _go32_dpmi_chain_protected_mode_interrupt() actually does. I'm trying to write a simple multitasking library that works by allocating each process a stack, then inside the (timer) interrupt pushing the regs onto the stack, switching to the next process's stack, then popping them all off (except for flags, cs, and eip of course). I'm going on the assumption that upon interrupt entry, eflags, cs, and eip have been pushed onto the stack, and everything else is unchanged. Unfortunately it doesn't look like that is so. here's a basic outline: process_struct { int *stack; void (*proc)(void); }; void spawn_proc(void (*proc)(void), int stack_size); malloc a proc malloc a new stack set up the initial stack of this process; (cs, ss, esp, eip, etc...) then I have void interrupt_handler(void) { asm("push all regs, except cs, eip, & eflags (already there) switch stacks pop all regs except cs, eip, & eflags (es, eip, & eflags will get popped of at the iret instruction)"); } I think the main problem is, is that I'm using _go32_dpmi_chain... to install the interrupt handler. I have to call the old interrupt handler though, so I'm stuck, and I'm not sure if _go32_dpmi_chain... leaves all the registers like I excpect them to be after it does all of its nifty wrapper stuff. Thanks again. Josh snarfy AT goodnet DOT com