#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()
.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:
RET
-hlt:
- HLT
- RET
-
clear_state:
jmp 0x08:_flush_seg
RET
RET
-vane_io_cli:
- CLI
- RET
-
-vane_io_sti:
- STI
- RET
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);
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;
}
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;
#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);
#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);
#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);
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