OSDN Git Service

タイマー機能実装開始
authorvosystems <doradora.motochan@gmail.com>
Wed, 15 Oct 2014 13:32:11 +0000 (22:32 +0900)
committervosystems <doradora.motochan@gmail.com>
Wed, 15 Oct 2014 13:32:11 +0000 (22:32 +0900)
Kernel/Interrupt.c
Kernel/Vane.S
Kernel/boot.c
Kernel/scancode.c
include/Interrupt.h~
include/VaneOS.h
include/VaneOS.h~
include/scancode.h

index 1246da6..ac97be5 100644 (file)
@@ -9,24 +9,36 @@
 #include<Interrupt.h>
 #include<scancode.h>
 #include<Message.h>
+#include<timer.h>
 
-static volatile int timer_tick;
+#define UINT_MAX 0x100000000
+
+static volatile unsigned int timer_tick;
 int system_key_code_flag,break_flag;
 unsigned long long input;
 
-struct msg_data keyboard;
-int keybuf[32];
+struct msg_data kernel;
+int kernelbuf[32];
+
+struct timer timer;
 
 void timer_interrupt( void )
 {
        /*count tick*/
        timer_tick++;
+       if(timer->timeout>0)
+       {
+               timer->timeout--;
+               if(timer->timeout==0)
+               {
+                       msg_put(timer->msg,timer->data);
+               }
+       }
 }
 
 void keyboard_interrupt( void )
 {
-       msg_put(&keyboard,readKbdEncBuffer()+buf_separate_keyboard);
-       //sendmsg((int)readKbdEncBuffer(),MSG_NUM_KEYBOARD);
+       msg_put(&kernel,readKbdEncBuffer()+buf_separate_keyboard);
 }
 
 inline void enable()
index f9957f6..990f442 100644 (file)
@@ -3,84 +3,91 @@
 .text
 .intel_syntax noprefix
 
-.global clear_state,asm_move_cursol,hlt,vane_io_cli,vane_io_sti,write_mem8,VESA_640_480_SET,VESA_Check,VESA_Check,scrn320
-.global io_hlt,io_cli,io_sti,io_stihlt,io_in8,io_in16,io_in32,io_out8,io_out16,io_out32,io_load_eflags,io_store_eflags,load_cr0,store_cr0,load_tr
+.global clear_state,asm_move_cursol,write_mem8,VESA_640_480_SET,VESA_Check,VESA_Check,scrn320
+.global io_hlt,io_cli,io_sti,io_stihlt
+.global io_in8,io_in16,io_in32,io_out8,io_out16,io_out32
+.global io_load_eflags,io_store_eflags,load_cr0,store_cr0,load_tr
+.global farjmp
+
+farjmp:
+       JMP FAR [ESP+4]
+       RET
 
 io_hlt:
-               HLT
-               RET
+       HLT
+       RET
 
 io_cli:
-               CLI
-               RET
+       CLI
+       RET
 
 io_sti:
-               STI
-               RET
+       STI
+       RET
 
 io_stihlt:
-               STI
-               HLT
-               RET
+       STI
+       HLT
+       RET
 
 io_in8:
-               MOV             EDX,[ESP+4]
-               MOV             EAX,0
-               IN              AL,DX
-               RET
+       MOV     EDX,[ESP+4]
+       MOV     EAX,0
+       IN      AL,DX
+       RET
 
 io_in16:
-               MOV             EDX,[ESP+4]
-               MOV             EAX,0
-               IN              AX,DX
-               RET
+       MOV     EDX,[ESP+4]
+       MOV     EAX,0
+       IN      AX,DX
+       RET
 
 io_in32:
-               MOV             EDX,[ESP+4]
-               IN              EAX,DX
-               RET
+       MOV     EDX,[ESP+4]
+       IN      EAX,DX
+       RET
 
 io_out8:
-               MOV             EDX,[ESP+4]
-               MOV             AL,[ESP+8]
-               OUT             DX,AL
-               RET
+       MOV     EDX,[ESP+4]
+       MOV     AL,[ESP+8]
+       OUT     DX,AL
+       RET
 
 io_out16:
-               MOV             EDX,[ESP+4]
-               MOV             EAX,[ESP+8]
-               OUT             DX,AX
-               RET
+       MOV     EDX,[ESP+4]
+       MOV     EAX,[ESP+8]
+       OUT     DX,AX
+       RET
 
 io_out32:
-               MOV             EDX,[ESP+4]
-               MOV             EAX,[ESP+8]
-               OUT             DX,EAX
-               RET
+       MOV     EDX,[ESP+4]
+       MOV     EAX,[ESP+8]
+       OUT     DX,EAX
+       RET
 
 io_load_eflags:
-               PUSHFD
-               POP             EAX
-               RET
+       PUSHFD
+       POP     EAX
+       RET
 
 io_store_eflags:
-               MOV             EAX,[ESP+4]
-               PUSH    EAX
-               POPFD
-               RET
+       MOV     EAX,[ESP+4]
+       PUSH EAX
+       POPFD
+       RET
 
 load_cr0:
-               MOV             EAX,CR0
-               RET
+       MOV     EAX,CR0
+       RET
 
 store_cr0:
-               MOV             EAX,[ESP+4]
-               MOV             CR0,EAX
-               RET
+       MOV     EAX,[ESP+4]
+       MOV     CR0,EAX
+       RET
 
 load_tr:
-               LTR             [ESP+4]
-               RET
+       LTR     [ESP+4]
+       RET
 
 
 write_mem8:
@@ -117,10 +124,6 @@ VESA_640_480_SET:
        
        RET
 
-hlt:
-       HLT
-       RET
-
 clear_state:
        jmp 0x08:_flush_seg
        RET
@@ -149,10 +152,3 @@ asm_move_cursol:
        
        RET
 
-vane_io_cli:
-       CLI
-       RET
-
-vane_io_sti:
-       STI
-       RET
index daf0d70..1c7910f 100644 (file)
@@ -103,7 +103,7 @@ void cstart(unsigned long magic, unsigned long addr)
        keyboardEnableKBD();
        printOK("Init Keyboard.....");
        
-       msg_init(&keyboard,32,keybuf);
+       msg_init(&kernel,32,kernelbuf);
        printOK("Init Messaging Buffer.....");
        
        setPitCounter(100,DEF_PIT_COM_COUNTER0,DEF_PIT_COM_MODE_SQUAREWAVE);
@@ -127,14 +127,12 @@ void cstart(unsigned long magic, unsigned long addr)
        
        
        printf("Free Memory = %d MiB\n\n",memman_total(memman)/(1024*1024));
-
+       
        puts("KernelShell/Root/>");
-       int num;
-       char aaa[100]={"ASD"};
        scanf("%s",&cmd);
        printf("%s",cmd);
        
-       while(1)hlt();
+       while(1);
        return;
 }
 
index 75ba0d6..71b2acb 100644 (file)
@@ -7,8 +7,10 @@ int shift_flag;
 
 char Generate_Scancode_To_ASCII_Code(void)
 {
-       if(msg_status(&keyboard)==0)return 0;
-       int scode=msg_get(&keyboard)-buf_separate_keyboard;//getmsg(MSG_NUM_KEYBOARD);
+       if(msg_status(&kernel)==0)return 0;
+       
+       int scode=msg_get(&kernel)-buf_separate_keyboard;//getmsg(MSG_NUM_KEYBOARD);
+       if(256<=scode && scode<512)return 0;
        
        if(scode==SC_LEFT_SHIFT || scode==SC_RIGHT_SHIFT){
                shift_flag=1;
index 26637c0..33080a8 100644 (file)
@@ -5,9 +5,18 @@ extern int timer_tick;
 #ifndef INTERRUPT_H
 #define INTERRUPT_H
 
+struct timer
+{
+       unsigned int count,timeout;
+       struct msg *msg;
+       unsigned int data;
+};
+
 void Timer_Interrupt_asm(void);
 void KeyBoard_Interrupt_asm(void);
 void INTERRUPT_NOTHING(void);
+void out_virtual86mode_interrupt(void);
+void in_virtual86mode_interrupt(void);
 
 void enter_interrupt(void);
 void interrupt_done(void);
index faf5c4e..beb1de2 100644 (file)
@@ -10,9 +10,8 @@
 
 #define local static
 #define DEBUG while(getchar()!='\n')
-void vane_io_cli(void);
-void vane_io_sti(void);
 void write_mem_8(int,int);
+void farjmp(int eip,int cs);
 
 void io_hlt(void);
 void io_cli(void);
index 5282826..faf5c4e 100644 (file)
@@ -9,7 +9,7 @@
 #define VANEOS_H
 
 #define local static
-
+#define DEBUG while(getchar()!='\n')
 void vane_io_cli(void);
 void vane_io_sti(void);
 void write_mem_8(int,int);
index db54d8e..d5764a8 100644 (file)
@@ -7,8 +7,8 @@
 
 char Generate_Scancode_To_ASCII_Code(void);
 
-extern struct msg_data keyboard;
-extern int keybuf[32];
+extern struct msg_data kernel;
+extern int kernelbuf[32];
 
 /*Flag Code*/
 #define BREAK_FLAG 0xf0