struct msg_data kernel;
int kernelbuf[32];
-struct timer timer;
-
void timer_interrupt( void )
{
/*count tick*/
timer_tick++;
- if(timer->timeout>0)
+
+ if(timer.next>timer.count)
+ {
+ return;
+ }
+ int i;
+ for(i=0;i<timer.using;i++)
{
- timer->timeout--;
- if(timer->timeout==0)
+ if(timer.timers[i]->timeout>timer.count)
{
- msg_put(timer->msg,timer->data);
+ break;
}
+ timer.timers[i]->flags=TIMER_FLAGS_ALLOC;
+ msg_put(timer.timers[i]->msg,timer.timers[i]->data);
+ }
+ int j;
+ timer.using-=i;
+ for(j=0;j<timer.using;j++)
+ {
+ timer.timers[j]=timer.timers[j+i];
+ }
+ if(timer.using>0){
+ timer.next=timer.timers[0]->timeout;
+ }else{
+ timer.next=0xffffffff;
}
+ return;
}
void keyboard_interrupt( void )
GRAPHIC_C=Graphical.c
SYSTEM_C=System.c
MESSAGE_C=Message.c
+TIMER_C=timer.c
#オブジェクト
-BOOT_OBJ=${BOOT_S:.S=.o} ${BOOT_C:.c=.o} ${VANE_S:.S=.o} ${KEYBOARD_C:.c=.o} ${STDIO_C:.c=.o} ${GDT_IDT_C:.c=.o} ${INTERRUPT_C:.c=.o} ${STRING_C:.c=.o} ${ASM_INTERRUPT_S:.S=.o} ${SCANCODE_C:.c=.o} ${MEMMAN_C:.c=.o} ${FAT_C:.c=.o} ${GRAPHIC_C:.c=.o} ${SYSTEM_C:.c=.o} ${MESSAGE_C:.c=.o}
+BOOT_OBJ=${BOOT_S:.S=.o} ${BOOT_C:.c=.o} ${VANE_S:.S=.o} ${KEYBOARD_C:.c=.o} ${STDIO_C:.c=.o} ${GDT_IDT_C:.c=.o} ${INTERRUPT_C:.c=.o} ${STRING_C:.c=.o} ${ASM_INTERRUPT_S:.S=.o} ${SCANCODE_C:.c=.o} ${MEMMAN_C:.c=.o} ${FAT_C:.c=.o} ${GRAPHIC_C:.c=.o} ${SYSTEM_C:.c=.o} ${MESSAGE_C:.c=.o} ${TIMER_C:.c=.o}
kernel: ${BOOT_OBJ}
${LD} ${TARGET} ${BOOT_OBJ}
#include<memory.h>
#include<Graphic.h>
#include<Message.h>
+#include<timer.h>
/*PROTOTYPE*/
void outPortByte( unsigned short address, unsigned char value );
/* set counter0 100Hz */
/* --------------------------------------------------------------------- */
setPitCounter( 100, DEF_PIT_COM_COUNTER0, DEF_PIT_COM_MODE_SQUAREWAVE );
+ timer.count=0;
+ int i;
+ for(i=0;i<MAX_TIMER;i++)
+ {
+ timer.timers[i]->flags=0;
+ }
}
extern unsigned long long input;
/*PROTOTYPE*/
-void outPortByte( unsigned short address, unsigned char value );
-unsigned char inPortByte( unsigned short address );
unsigned char readKbdCtrlStatus(void);
STATUS writeKbdCtrlCommand(unsigned char command);
unsigned char readKbdEncBuffer(void);