OSDev.org https://forum.osdev.org/ |
|
IRQs cause exceptions? https://forum.osdev.org/viewtopic.php?f=1&t=32646 |
Page 1 of 1 |
Author: | thumble [ Fri Dec 22, 2017 11:14 pm ] |
Post subject: | IRQs cause exceptions? |
Once I enable interrupts with sti, I get an exception. Before I enable IRQs, I first remap the PIC to offsets 0x20 on master and 0x28 on slave; here is the remapping code: Code: void irq_remap() { outb(0x20, 0x11); outb(0xA0, 0x11); outb(0x21, 0x20); outb(0xA1, 0x28); outb(0x21, 0x04); outb(0xA1, 0x02); outb(0x21, 0x01); outb(0xA1, 0x01); outb(0x21, 0x0); outb(0xA1, 0x0); } And this is my IRQ-installing code: Code: void install_irqs() { irq_remap(); set_idt_gate(32, (unsigned)irq0, 0x08, 0x8E); set_idt_gate(33, (unsigned)irq1, 0x08, 0x8E); set_idt_gate(34, (unsigned)irq2, 0x08, 0x8E); set_idt_gate(35, (unsigned)irq3, 0x08, 0x8E); set_idt_gate(36, (unsigned)irq4, 0x08, 0x8E); set_idt_gate(37, (unsigned)irq5, 0x08, 0x8E); set_idt_gate(38, (unsigned)irq6, 0x08, 0x8E); set_idt_gate(39, (unsigned)irq7, 0x08, 0x8E); set_idt_gate(40, (unsigned)irq8, 0x08, 0x8E); set_idt_gate(41, (unsigned)irq9, 0x08, 0x8E); set_idt_gate(42, (unsigned)irq10, 0x08, 0x8E); set_idt_gate(43, (unsigned)irq11, 0x08, 0x8E); set_idt_gate(44, (unsigned)irq12, 0x08, 0x8E); set_idt_gate(45, (unsigned)irq13, 0x08, 0x8E); set_idt_gate(46, (unsigned)irq14, 0x08, 0x8E); set_idt_gate(47, (unsigned)irq15, 0x08, 0x8E); } Here is IRQ 0 in assembly: Code: irq0: cli push 0 push 32 jmp stub This jumps to an assembly stub common to each IRQ: Code: stub: pushad mov eax, esp push eax mov eax, handle_irq call eax pop eax popad add esp, 8 iret Which then calls this C handler: Code: void handle_irq(struct regs *r) { void (*handler)(struct regs *r); handler = irq_routines[r->int_no - 32]; if(handler) { handler(r); } if(r->int_no >= 40) { outb(0xA0, 0x20); } outb(0x20, 0x20); } I am somewhat suspicious that the issue is in my register frame, so here it is: Code: struct regs { dword errcode, int_no, ebp, esp, ebx, edx, ecx, eax, esi, edi; }; Does anyone know what may be the issue? Thanks |
Author: | thumble [ Fri Dec 22, 2017 11:22 pm ] |
Post subject: | Re: IRQs cause exceptions? |
Never mind. Really was a problem with my regs structure; forgot that the CPU pushes some things as well (plus my order was reversed) Here it is: Code: struct regs {
dword edi, esi, ebp, esp, ebx, edx, ecx, eax, int_no, errcode, eip, cs, eflags, esp2, ss; }; |
Page 1 of 1 | All times are UTC - 6 hours |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |