Page 1 of 1

IDT

Posted: Fri Dec 20, 2002 3:19 pm
by eL JeDi
[attachment deleted by admin]

Re:IDT

Posted: Fri Dec 20, 2002 3:41 pm
by K.J.
I suggest that you create small asm ISRs that call C functions as needed.

Remember to save(via push) and before you iret(pop) any registers that you modify at all including eax, ebx, etc.

K.J.

Re:IDT

Posted: Fri Dec 20, 2002 3:43 pm
by eL JeDi
Hi KJ,

Have you got any code that i can see? I will try this now.

Thanks

Re:IDT

Posted: Fri Dec 20, 2002 3:49 pm
by Ozguxxx
Hi, I've just looked at the source code but (If I am not wrong) I could not see where interrupts are set after ints are remapped, I don't know id this is causing problem but in your init_pic function you should enable interrupts... (Am I wrong?) Also Do you have to send disable interrupts to both PICs? I think one is master and one is slave so only disabling master solves disabling both... I might be wrong about this. But a good question, isnt it? Good luck...

Re:IDT

Posted: Fri Dec 20, 2002 3:52 pm
by K.J.
Sure...

[tt]
_int60:
   cli
   push eax
   push ebx
   push ecx
   push edx
   push ebp
   push edi
   push esi
   push es
   push ds
   push fs
   push gs

   mov eax, 0
   mov gs, eax
   mov fs, eax
   mov eax, _LINEAR_DATA_SEL
   mov es, eax
   mov ds, eax

   extern _c_int60
   call _c_int60

   pop gs
   pop fs
   pop ds
   pop es
   pop esi
   pop edi
   pop ebp
   pop edx
   pop ecx
   pop ebx
   pop eax
   sti
   iretd

void c_int60()
{
//do whatever
};
[/tt]

Hope that helps,
K.J.

Re:IDT

Posted: Fri Dec 20, 2002 5:53 pm
by eL JeDi
Here I am again.

I've tried the ISR, but it doesn't works.

the asm file:

global irq1
extern key_press

irq1:
cli
pusha
call key_press
popa
sti
iretd

the C file:

extern void irq1();

void key_press(void)
{
   printf("IRQ1_WORKS!\n");
   outportb(0x20, 0x20);

}
void start()
{
   dir_reg idt;

   int ai;

   textmode();
   ClrScr();
   Ini_pic();
   asm("sti");
   printf("Booting a my OS\n");

   idt.limit=8*256-1;
   idt.base=0x00000600;

   set_idt(&idt);
   set_irq(1,irq1);

   asm("hlt");

}

the rest of the C file is the same..

K.J. I've tried the one that you have posted too, with the same results.

Ozguxxx sorry, but I'm afraid i dont understand you.

Thanks once again.

Re:IDT

Posted: Fri Dec 20, 2002 7:20 pm
by Ozguxxx
Hi. I have a suggestion (only suggestion :) ): It would be easier to write all stuff in asm first. I mean KJ's first code which has an assembly stub calling a C function is (I think) the best way to get things work for beginning.
I want to ask a question: Which #ed isr routine are you trying to handle for getting keyboard keys?
BTW your ints.h file is fairly complicated for me... :o

Re:IDT

Posted: Sat Dec 21, 2002 9:42 am
by eL JeDi
Hi,

I've tried this too, without any result.

The function that the IRQ1 should call is Key_press(); a simple printf function that show on the screen "Key Press".

Has anyone a complete working code about the IDT??? can you post it please??. I think it has to be something simple.. but I don't know what.

I spended so meny weeks with this.. and i'm becoming crazy.

Re:IDT

Posted: Sun Dec 22, 2002 2:23 am
by K.J.
I'm working on an interrupts tutorial ATM. I'll email you the "beta" of it ASAP.

I have complete, working IDT code, but I do some stuff that most people think is weird in it so that I get it where I want and just how I want. Email me if you want it though.

K.J.

Re:IDT

Posted: Sun Dec 22, 2002 2:48 pm
by eL JeDi
Hi KJ

I send you an email. I want de beta version and the code.
Thanks for all.