マイクロカーネル、プリエンプティブマルチタスクを目指しているOSです。
Révision | 5c46f3e79c4ee5ea076ac0fbe059730e3a9e045f (tree) |
---|---|
l'heure | 2014-10-15 22:32:11 |
Auteur | ![]() |
Commiter | vosystems |
タイマー機能実装開始
@@ -9,24 +9,36 @@ | ||
9 | 9 | #include<Interrupt.h> |
10 | 10 | #include<scancode.h> |
11 | 11 | #include<Message.h> |
12 | +#include<timer.h> | |
12 | 13 | |
13 | -static volatile int timer_tick; | |
14 | +#define UINT_MAX 0x100000000 | |
15 | + | |
16 | +static volatile unsigned int timer_tick; | |
14 | 17 | int system_key_code_flag,break_flag; |
15 | 18 | unsigned long long input; |
16 | 19 | |
17 | -struct msg_data keyboard; | |
18 | -int keybuf[32]; | |
20 | +struct msg_data kernel; | |
21 | +int kernelbuf[32]; | |
22 | + | |
23 | +struct timer timer; | |
19 | 24 | |
20 | 25 | void timer_interrupt( void ) |
21 | 26 | { |
22 | 27 | /*count tick*/ |
23 | 28 | timer_tick++; |
29 | + if(timer->timeout>0) | |
30 | + { | |
31 | + timer->timeout--; | |
32 | + if(timer->timeout==0) | |
33 | + { | |
34 | + msg_put(timer->msg,timer->data); | |
35 | + } | |
36 | + } | |
24 | 37 | } |
25 | 38 | |
26 | 39 | void keyboard_interrupt( void ) |
27 | 40 | { |
28 | - msg_put(&keyboard,readKbdEncBuffer()+buf_separate_keyboard); | |
29 | - //sendmsg((int)readKbdEncBuffer(),MSG_NUM_KEYBOARD); | |
41 | + msg_put(&kernel,readKbdEncBuffer()+buf_separate_keyboard); | |
30 | 42 | } |
31 | 43 | |
32 | 44 | inline void enable() |
@@ -3,84 +3,91 @@ | ||
3 | 3 | .text |
4 | 4 | .intel_syntax noprefix |
5 | 5 | |
6 | -.global clear_state,asm_move_cursol,hlt,vane_io_cli,vane_io_sti,write_mem8,VESA_640_480_SET,VESA_Check,VESA_Check,scrn320 | |
7 | -.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 | |
6 | +.global clear_state,asm_move_cursol,write_mem8,VESA_640_480_SET,VESA_Check,VESA_Check,scrn320 | |
7 | +.global io_hlt,io_cli,io_sti,io_stihlt | |
8 | +.global io_in8,io_in16,io_in32,io_out8,io_out16,io_out32 | |
9 | +.global io_load_eflags,io_store_eflags,load_cr0,store_cr0,load_tr | |
10 | +.global farjmp | |
11 | + | |
12 | +farjmp: | |
13 | + JMP FAR [ESP+4] | |
14 | + RET | |
8 | 15 | |
9 | 16 | io_hlt: |
10 | - HLT | |
11 | - RET | |
17 | + HLT | |
18 | + RET | |
12 | 19 | |
13 | 20 | io_cli: |
14 | - CLI | |
15 | - RET | |
21 | + CLI | |
22 | + RET | |
16 | 23 | |
17 | 24 | io_sti: |
18 | - STI | |
19 | - RET | |
25 | + STI | |
26 | + RET | |
20 | 27 | |
21 | 28 | io_stihlt: |
22 | - STI | |
23 | - HLT | |
24 | - RET | |
29 | + STI | |
30 | + HLT | |
31 | + RET | |
25 | 32 | |
26 | 33 | io_in8: |
27 | - MOV EDX,[ESP+4] | |
28 | - MOV EAX,0 | |
29 | - IN AL,DX | |
30 | - RET | |
34 | + MOV EDX,[ESP+4] | |
35 | + MOV EAX,0 | |
36 | + IN AL,DX | |
37 | + RET | |
31 | 38 | |
32 | 39 | io_in16: |
33 | - MOV EDX,[ESP+4] | |
34 | - MOV EAX,0 | |
35 | - IN AX,DX | |
36 | - RET | |
40 | + MOV EDX,[ESP+4] | |
41 | + MOV EAX,0 | |
42 | + IN AX,DX | |
43 | + RET | |
37 | 44 | |
38 | 45 | io_in32: |
39 | - MOV EDX,[ESP+4] | |
40 | - IN EAX,DX | |
41 | - RET | |
46 | + MOV EDX,[ESP+4] | |
47 | + IN EAX,DX | |
48 | + RET | |
42 | 49 | |
43 | 50 | io_out8: |
44 | - MOV EDX,[ESP+4] | |
45 | - MOV AL,[ESP+8] | |
46 | - OUT DX,AL | |
47 | - RET | |
51 | + MOV EDX,[ESP+4] | |
52 | + MOV AL,[ESP+8] | |
53 | + OUT DX,AL | |
54 | + RET | |
48 | 55 | |
49 | 56 | io_out16: |
50 | - MOV EDX,[ESP+4] | |
51 | - MOV EAX,[ESP+8] | |
52 | - OUT DX,AX | |
53 | - RET | |
57 | + MOV EDX,[ESP+4] | |
58 | + MOV EAX,[ESP+8] | |
59 | + OUT DX,AX | |
60 | + RET | |
54 | 61 | |
55 | 62 | io_out32: |
56 | - MOV EDX,[ESP+4] | |
57 | - MOV EAX,[ESP+8] | |
58 | - OUT DX,EAX | |
59 | - RET | |
63 | + MOV EDX,[ESP+4] | |
64 | + MOV EAX,[ESP+8] | |
65 | + OUT DX,EAX | |
66 | + RET | |
60 | 67 | |
61 | 68 | io_load_eflags: |
62 | - PUSHFD | |
63 | - POP EAX | |
64 | - RET | |
69 | + PUSHFD | |
70 | + POP EAX | |
71 | + RET | |
65 | 72 | |
66 | 73 | io_store_eflags: |
67 | - MOV EAX,[ESP+4] | |
68 | - PUSH EAX | |
69 | - POPFD | |
70 | - RET | |
74 | + MOV EAX,[ESP+4] | |
75 | + PUSH EAX | |
76 | + POPFD | |
77 | + RET | |
71 | 78 | |
72 | 79 | load_cr0: |
73 | - MOV EAX,CR0 | |
74 | - RET | |
80 | + MOV EAX,CR0 | |
81 | + RET | |
75 | 82 | |
76 | 83 | store_cr0: |
77 | - MOV EAX,[ESP+4] | |
78 | - MOV CR0,EAX | |
79 | - RET | |
84 | + MOV EAX,[ESP+4] | |
85 | + MOV CR0,EAX | |
86 | + RET | |
80 | 87 | |
81 | 88 | load_tr: |
82 | - LTR [ESP+4] | |
83 | - RET | |
89 | + LTR [ESP+4] | |
90 | + RET | |
84 | 91 | |
85 | 92 | |
86 | 93 | write_mem8: |
@@ -117,10 +124,6 @@ VESA_640_480_SET: | ||
117 | 124 | |
118 | 125 | RET |
119 | 126 | |
120 | -hlt: | |
121 | - HLT | |
122 | - RET | |
123 | - | |
124 | 127 | clear_state: |
125 | 128 | jmp 0x08:_flush_seg |
126 | 129 | RET |
@@ -149,10 +152,3 @@ asm_move_cursol: | ||
149 | 152 | |
150 | 153 | RET |
151 | 154 | |
152 | -vane_io_cli: | |
153 | - CLI | |
154 | - RET | |
155 | - | |
156 | -vane_io_sti: | |
157 | - STI | |
158 | - RET |
@@ -103,7 +103,7 @@ void cstart(unsigned long magic, unsigned long addr) | ||
103 | 103 | keyboardEnableKBD(); |
104 | 104 | printOK("Init Keyboard....."); |
105 | 105 | |
106 | - msg_init(&keyboard,32,keybuf); | |
106 | + msg_init(&kernel,32,kernelbuf); | |
107 | 107 | printOK("Init Messaging Buffer....."); |
108 | 108 | |
109 | 109 | setPitCounter(100,DEF_PIT_COM_COUNTER0,DEF_PIT_COM_MODE_SQUAREWAVE); |
@@ -127,14 +127,12 @@ void cstart(unsigned long magic, unsigned long addr) | ||
127 | 127 | |
128 | 128 | |
129 | 129 | printf("Free Memory = %d MiB\n\n",memman_total(memman)/(1024*1024)); |
130 | - | |
130 | + | |
131 | 131 | puts("KernelShell/Root/>"); |
132 | - int num; | |
133 | - char aaa[100]={"ASD"}; | |
134 | 132 | scanf("%s",&cmd); |
135 | 133 | printf("%s",cmd); |
136 | 134 | |
137 | - while(1)hlt(); | |
135 | + while(1); | |
138 | 136 | return; |
139 | 137 | } |
140 | 138 |
@@ -7,8 +7,10 @@ int shift_flag; | ||
7 | 7 | |
8 | 8 | char Generate_Scancode_To_ASCII_Code(void) |
9 | 9 | { |
10 | - if(msg_status(&keyboard)==0)return 0; | |
11 | - int scode=msg_get(&keyboard)-buf_separate_keyboard;//getmsg(MSG_NUM_KEYBOARD); | |
10 | + if(msg_status(&kernel)==0)return 0; | |
11 | + | |
12 | + int scode=msg_get(&kernel)-buf_separate_keyboard;//getmsg(MSG_NUM_KEYBOARD); | |
13 | + if(256<=scode && scode<512)return 0; | |
12 | 14 | |
13 | 15 | if(scode==SC_LEFT_SHIFT || scode==SC_RIGHT_SHIFT){ |
14 | 16 | shift_flag=1; |
@@ -5,9 +5,18 @@ extern int timer_tick; | ||
5 | 5 | #ifndef INTERRUPT_H |
6 | 6 | #define INTERRUPT_H |
7 | 7 | |
8 | +struct timer | |
9 | +{ | |
10 | + unsigned int count,timeout; | |
11 | + struct msg *msg; | |
12 | + unsigned int data; | |
13 | +}; | |
14 | + | |
8 | 15 | void Timer_Interrupt_asm(void); |
9 | 16 | void KeyBoard_Interrupt_asm(void); |
10 | 17 | void INTERRUPT_NOTHING(void); |
18 | +void out_virtual86mode_interrupt(void); | |
19 | +void in_virtual86mode_interrupt(void); | |
11 | 20 | |
12 | 21 | void enter_interrupt(void); |
13 | 22 | void interrupt_done(void); |
@@ -10,9 +10,8 @@ | ||
10 | 10 | |
11 | 11 | #define local static |
12 | 12 | #define DEBUG while(getchar()!='\n') |
13 | -void vane_io_cli(void); | |
14 | -void vane_io_sti(void); | |
15 | 13 | void write_mem_8(int,int); |
14 | +void farjmp(int eip,int cs); | |
16 | 15 | |
17 | 16 | void io_hlt(void); |
18 | 17 | void io_cli(void); |
@@ -9,7 +9,7 @@ | ||
9 | 9 | #define VANEOS_H |
10 | 10 | |
11 | 11 | #define local static |
12 | - | |
12 | +#define DEBUG while(getchar()!='\n') | |
13 | 13 | void vane_io_cli(void); |
14 | 14 | void vane_io_sti(void); |
15 | 15 | void write_mem_8(int,int); |
@@ -7,8 +7,8 @@ | ||
7 | 7 | |
8 | 8 | char Generate_Scancode_To_ASCII_Code(void); |
9 | 9 | |
10 | -extern struct msg_data keyboard; | |
11 | -extern int keybuf[32]; | |
10 | +extern struct msg_data kernel; | |
11 | +extern int kernelbuf[32]; | |
12 | 12 | |
13 | 13 | /*Flag Code*/ |
14 | 14 | #define BREAK_FLAG 0xf0 |