Working pre-handlers
This commit is contained in:
parent
8221396eff
commit
757b9d7222
@ -30,5 +30,11 @@ void handler(int num)
|
|||||||
//asm volatile ("\t movl %%eax,%0" : "=r"(syscall));
|
//asm volatile ("\t movl %%eax,%0" : "=r"(syscall));
|
||||||
|
|
||||||
module_call(console, message,
|
module_call(console, message,
|
||||||
'+', "spawning the 'system' server\n");
|
'+', "youhou, interruption %d\n", num);
|
||||||
|
}
|
||||||
|
|
||||||
|
void handler_err(int err, int num)
|
||||||
|
{
|
||||||
|
module_call(console, message,
|
||||||
|
'!', "youhou, interruption d'erreur %d\n", num);
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
45
kaneton/machine/architecture/ia32/educational/idt_wrappers.S.sh
Executable file
45
kaneton/machine/architecture/ia32/educational/idt_wrappers.S.sh
Executable file
@ -0,0 +1,45 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ -n "$1" ]
|
||||||
|
then
|
||||||
|
FILEOUT=$1
|
||||||
|
else
|
||||||
|
FILEOUT=${0:0:$(($#0 - 3))}
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ".section .text" > $FILEOUT
|
||||||
|
echo " .align 4" >> $FILEOUT
|
||||||
|
echo "" >> $FILEOUT
|
||||||
|
|
||||||
|
for i in `seq 0 255`
|
||||||
|
do
|
||||||
|
echo " .global idt_wrapper_$i" >> $FILEOUT
|
||||||
|
echo "idt_wrapper_$i:" >> $FILEOUT
|
||||||
|
echo " cli" >> $FILEOUT
|
||||||
|
echo " pusha" >> $FILEOUT
|
||||||
|
echo " push %ds" >> $FILEOUT
|
||||||
|
echo " push %es" >> $FILEOUT
|
||||||
|
echo " push %fs" >> $FILEOUT
|
||||||
|
echo " push %gs" >> $FILEOUT
|
||||||
|
echo " push %ss" >> $FILEOUT
|
||||||
|
echo " push \$$i" >> $FILEOUT
|
||||||
|
|
||||||
|
if [ $i -eq 8 ] || ( [ $i -ge 10 ] && [ $i -lt 15 ])
|
||||||
|
then
|
||||||
|
echo " push \$0" >> $FILEOUT
|
||||||
|
echo " call handler_err" >> $FILEOUT
|
||||||
|
echo " pop %ebx" >> $FILEOUT
|
||||||
|
else
|
||||||
|
echo " call handler" >> $FILEOUT
|
||||||
|
fi
|
||||||
|
echo " pop %ebx" >> $FILEOUT
|
||||||
|
echo " pop %ss" >> $FILEOUT
|
||||||
|
echo " pop %gs" >> $FILEOUT
|
||||||
|
echo " pop %fs" >> $FILEOUT
|
||||||
|
echo " pop %es" >> $FILEOUT
|
||||||
|
echo " pop %ds" >> $FILEOUT
|
||||||
|
echo " popa" >> $FILEOUT
|
||||||
|
echo " sti" >> $FILEOUT
|
||||||
|
echo " iret" >> $FILEOUT
|
||||||
|
echo "" >> $FILEOUT
|
||||||
|
done
|
@ -55,6 +55,8 @@
|
|||||||
|
|
||||||
void handler(int num);
|
void handler(int num);
|
||||||
|
|
||||||
|
void handler_err(int err, int num);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* eop
|
* eop
|
||||||
|
@ -173,6 +173,14 @@ t_error architecture_idt_insert(t_uint16 index,
|
|||||||
t_paddr offset,
|
t_paddr offset,
|
||||||
t_flags flags);
|
t_flags flags);
|
||||||
|
|
||||||
|
t_error architecture_idt_reserve(t_paddr base,
|
||||||
|
t_flags flags,
|
||||||
|
t_uint16* index);
|
||||||
|
|
||||||
|
t_error architecture_idt_delete(t_uint16 index);
|
||||||
|
|
||||||
|
t_error architecture_idt_build(void);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* eop
|
* eop
|
||||||
|
@ -37,8 +37,8 @@ d_event glue_event_dispatch =
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
glue_event_enable,
|
||||||
NULL,
|
glue_event_disable,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
glue_event_initialize,
|
glue_event_initialize,
|
||||||
@ -51,6 +51,20 @@ d_event glue_event_dispatch =
|
|||||||
* ---------- functions -------------------------------------------------------
|
* ---------- functions -------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
t_error glue_event_enable(void)
|
||||||
|
{
|
||||||
|
ARCHITECTURE_STI();
|
||||||
|
|
||||||
|
MACHINE_LEAVE();
|
||||||
|
}
|
||||||
|
|
||||||
|
t_error glue_event_disable(void)
|
||||||
|
{
|
||||||
|
ARCHITECTURE_CLI();
|
||||||
|
|
||||||
|
MACHINE_LEAVE();
|
||||||
|
}
|
||||||
|
|
||||||
t_error glue_event_initialize(void)
|
t_error glue_event_initialize(void)
|
||||||
{
|
{
|
||||||
t_uint16 i;
|
t_uint16 i;
|
||||||
|
@ -75,6 +75,10 @@
|
|||||||
* ../event.c
|
* ../event.c
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
t_error glue_event_enable(void);
|
||||||
|
|
||||||
|
t_error glue_event_disable(void);
|
||||||
|
|
||||||
t_error glue_event_initialize(void);
|
t_error glue_event_initialize(void);
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user