#include<KeyBoard.h>
#include<Interrupt.h>
#include<scancode.h>
+//c4000
+#define EFLAGS_VM_CHANGE_86 (0x23000)
static volatile int timer_tick;
int system_key_code_flag,break_flag;
unsigned long long input;
+static int eflags_mem;
+
+void out_virtual86mode(void)
+{
+ io_store_eflags(eflags_mem);
+}
+
+void in_virtual86mode(void)
+{
+ eflags_mem=io_load_eflags();
+ io_store_eflags(eflags_mem | EFLAGS_VM_CHANGE_86);
+}
+
void timer_interrupt( void )
{
/*count tick*/
MEMMAN_C=memory.c
FAT_C=FAT.c
GRAPHIC_C=Graphical.c
+SYSTEM_C=System.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}
+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}
kernel: ${BOOT_OBJ}
${LD} ${TARGET} ${BOOT_OBJ}
.text
.intel_syntax noprefix
-.global clear_state,asm_move_cursol,hlt,vane_io_cli,vane_io_sti,write_mem8,VESA_640_480_SET
+.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
io_hlt:
MOV [ECX],AL
RET
+scrn320:
+ MOV AL,0x13
+ MOV AH,0x00
+ INT 0x10
+
+ RET
+
+VESA_Check:
+ MOV AX,0x9000
+ MOV ES,AX
+ MOV DI,0
+ MOV AX,0x004F
+ INT 0x10
+
+ CMP AX,0x004F
+ MOV EAX,0x01
+ JNE scrn320
+ MOV EAX,0x00
+ RET
+
VESA_640_480_SET:
+
MOV BX,0x4101
MOV AX,0x4F02
INT 0x10
+
RET
hlt:
mbi = (multiboot_info_t *) addr;
- ClearScreen();
+ //ClearScreen();
scan_code=0; break_flag=0; system_key_code_flag=0;
screen=(unsigned short*)0xb8000;//VRam Setting
attr=WHITE;
/*Start Set Main Code*/
- //printf("VOSystems Vane Operating System [Version 0.2(build 300)]\n");
+ printf("VOSystems Vane Operating System [Version 0.2(build 300)]\n");
+ printf("VOSystems Console Host [Version 0.1(build 10)]\n");
/*Setting IDT*/
setupInterruptGate(DEF_IDT_INT_NUM_IRQ1,KeyBoard_Interrupt_asm);//Register Keyboard interrupt handler
idtr.base = ( GATE_DESCRIPTOR *)idt;
load_idt();
- //printOK("Setting IDT.....");
+ printOK("Setting IDT.....");
/*Setting GDT*/
/*set up null descriptor*/
gdtr.base = ( SEGMENT_DESCRIPTOR *)gdt;
load_gdt();
- //printOK("Setting GDT.....");
+ printOK("Setting GDT.....");
initPIC();
- //printOK("Init PIC.....");
+ printOK("Init PIC.....");
initKeyboard();
keyboardEnableKBD();
- //printOK("Init Keyboard.....");
+ printOK("Init Keyboard.....");
setPitCounter(100,DEF_PIT_COM_COUNTER0,DEF_PIT_COM_MODE_SQUAREWAVE);
initPit();
- //printOK("Init PIT.....");
+ printOK("Init PIT.....");
memman_init(memman);
memman_free(memman,0x00001000,0x0009e000);
memman_free(memman,0x00400000,((mbi->mem_lower+mbi->mem_upper)*1024)-0x00400000);
- //printOK("Starting Memory Manager.....");
- /*
- unsigned char* BPB=file_readBPB();
- bpb_data_t* bpb;
- generate_bpb(bpb);
-
- printf("label -> %s\n",bpb->label);
+ printOK("Starting Memory Manager.....");
- int* fat=(int*)memman_alloc_4k(memman,4*2880);
- file_readfat(fat,(unsigned char*)(ADR_DISKIMG+FAT_DISK_PLASE),drv->drive_sectors);
- printOK("Loading FAT File System.....");
- *//*
if(magic!=MULTIBOOT_BOOTLOADER_MAGIC){
printFAIL("Loading Memory Info.....");
puts("KernelShell/Root/>");
scanf("%s",&cmd);
printf("%s",cmd);
- */
- //ClearScreen();
- //ClearScreen_Graphic();
- /*VRAM_ADDR=0xa0000;
- unsigned int vram_addr;
- init_palette();
- for(vram_addr=VRAM_ADDR;vram_addr<=VRAM_ADDR+0xffff;vram_addr++)
- {
- //write_mem8(vram_addr,vram_addr & 0x0f);
- //*vram_addr=(unsigned char)vram_addr & 0x0f;
- Print_Pixcel(vram_addr,vram_addr&0x0f);
- }*/
- init_palette();
- char *p;
- p=(char*)0xa0000;
-
- boxfill8(p,320,COL8_FF0000,20,20,120,120);
- boxfill8(p,320,COL8_00FF00,70,50,170,150);
- boxfill8(p,320,COL8_FF0000,120,80,220,180);
/*
- int i;
- char* p;
-
- init_palette();
+ if(Check_VESA()==0){
+ VESA_640_480_SET();
+ }else{
+ scrn320();
+ }*/
- p=(char*)0xa0000;
- for(i=0;i<=0xaffff;i++)
+ ScreenVGA_Graphic();
+ printf("Successfully\n");
+ getchar();
+ int scrn_addr=vram_start_address;
+ char* p=(char*)scrn_addr;
+ for(p=(char*)scrn_addr;scrn_addr<=0x000affff;scrn_addr++)
{
- p[i]='a';
+ p=(char*)scrn_addr;
+ *p=(char)scrn_addr & 0x0f;
}
- */
+
while(1)hlt();
return;
}
#
-# Vane Operating System Makefile by VOSystems
+# Vane Operating System Makefile by VOSystems
#--------------------------------------------//
-
-TARGET = Kernel.vsb
-
+TARGET = Kernel.vsb
#宣言
-CC = gcc
-RM = /bin/rm
-MV = /bin/mv
-LD = /usr/bin/ld
-LN_S = ln -s
-AR = /usr/bin/ar
-RANLIB = ranlib
-INCLUDES = -I../include
-FLAGS = -m32 -ffreestanding -fno-common -fno-builtin -fomit-frame-pointer -O2 -c
-FLAGSC = -m32 -ffreestanding -fno-common -masm=intel -fno-builtin -fomit-frame-pointer -O2 -c
-LD = ld -melf_i386 -Ttext=0x100000 --oformat elf32-i386 -o
-#LDAPP = ld -melf_i386 -Ttext=0x280000 --oformat elf32-i386 -o
+CC = gcc
+RM = /bin/rm
+MV = /bin/mv
+LD = /usr/bin/ld
+LN_S = ln -s
+AR = /usr/bin/ar
+RANLIB = ranlib
+INCLUDES = -I../include
+FLAGS = -m32 -ffreestanding -fno-common -fno-builtin -fomit-frame-pointer -O2 -c
+FLAGSC = -m32 -ffreestanding -fno-common -masm=intel -fno-builtin -fomit-frame-pointer -O2 -c
+LD = ld -melf_i386 -Ttext=0x100000 --oformat elf32-i386 -o
+#LDAPP = ld -melf_i386 -Ttext=0x280000 --oformat elf32-i386 -o
export
-
#サフィックス
.S.o:
${CC} ${INCLUDES} ${FLAGS} $<
.c.o:
${CC} ${INCLUDES} ${FLAGSC} $<
-
#STDIO_C=stdio.c
BIN=Kernel.vsb
-
-
#処理
copy:
cp /media/DATA/OS/OS/Kernel.vsb /media/VaneOS/Vane/Kernel.vsb
${MAKE} -C Kernel
${MAKE} -C Drivers
@echo "Make is finish successfully!!"
-
clean:
- -${RM} -f *~ *.lo *.o make.log *.bak .a.out .core .*.core
+ -${RM} -f *~ *.lo *.o make.log *.bak .a.out .core .*.core
cd Kernel
- -${RM} -f *~ *.lo *.o make.log *.bak .a.out .core .*.core
+ -${RM} -f *~ *.lo *.o make.log *.bak .a.out .core .*.core
cd ..
cd Drivers
- -${RM} -f *~ *.lo *.o make.log *.bak .a.out .core .*.core
+ -${RM} -f *~ *.lo *.o make.log *.bak .a.out .core .*.core
cd ..
+++ /dev/null
-Vane Operating System
-
-マイクロカーネル、プリエンプティブマルチタスクを目指しているOSです。
-make allをすると、今のところ、実行ファイルのみ、作られますので、
-GRUBなどマルチブート仕様に準拠した、ブートローダーがインストールされている記憶デバイスにコピーしてください。
-
-BIN_HISTORYフォルダには、過去のビルドの結果が置かれています。
-バイナリの名前は作成日となっています。
-
-本ソフトウェア及びソースは、MITライセンスの元で配布されます。
-
-MIT License
-http://opensource.org/licenses/mit-license.php
-
-また、一部ソースコードはGNU GPLが適用されています。
-適用されているソースにはGPLが適用されていると書いて有ります。
-
-Copyright (C) 2013-2014 VOSystems. All rights reserved.
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);
int io_load_eflags(void);
void io_store_eflags(int eflags);
+int Check_VESA(void);
+void ScreenVGA_Graphic(void);
+
+extern int vram_start_address;
+extern char vmode;
+extern short scrnX,scrnY;
+
#define COL8_000000 0
#define COL8_FF0000 1
#define DEF_IDT_FLAGS_DPL_LV2 0x40
#define DEF_IDT_FLAGS_DPL_LV3 0x60
#define DEF_IDT_FLAGS_PRESENT 0x80
+
#define DEF_IDT_INT_NUM_IRQ1 33
#define DEF_IDT_INT_NUM_IRQ0 32
+#define DEF_IDT_INT_NUM_SYSC 0x30
+#define DEF_IDT_INT_NUM_V86I 0x31
+#define DEF_IDT_INT_NUM_V86O 0x32
#define DEF_IDT_INT_SELECTOR 0x08