From: vosystems Date: Sun, 12 Oct 2014 14:59:43 +0000 (+0900) Subject: QEMU用グラフィックモードの切り替え関数を作成 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=bf9d1bd9cf6724c5dd244a15059a80a812c8cf04;p=vaneos%2Fvaneosmain.git QEMU用グラフィックモードの切り替え関数を作成 --- diff --git a/Kernel/Interrupt.c b/Kernel/Interrupt.c index 0640973..138542b 100644 --- a/Kernel/Interrupt.c +++ b/Kernel/Interrupt.c @@ -8,11 +8,26 @@ #include #include #include +//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*/ diff --git a/Kernel/Kernel.vsb b/Kernel/Kernel.vsb index 77aa6bb..64abe27 100755 Binary files a/Kernel/Kernel.vsb and b/Kernel/Kernel.vsb differ diff --git a/Kernel/Makefile b/Kernel/Makefile index 67cfa6f..71fda79 100644 --- a/Kernel/Makefile +++ b/Kernel/Makefile @@ -34,9 +34,10 @@ SCANCODE_C=scancode.c 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} diff --git a/Kernel/Vane.S b/Kernel/Vane.S index 47a254c..f9957f6 100644 --- a/Kernel/Vane.S +++ b/Kernel/Vane.S @@ -3,7 +3,7 @@ .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: @@ -89,10 +89,32 @@ write_mem8: 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: diff --git a/Kernel/boot.c b/Kernel/boot.c index c616e82..9bacc81 100644 --- a/Kernel/boot.c +++ b/Kernel/boot.c @@ -51,13 +51,14 @@ void cstart(unsigned long magic, unsigned long addr) 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 @@ -66,7 +67,7 @@ void cstart(unsigned long magic, unsigned long addr) idtr.base = ( GATE_DESCRIPTOR *)idt; load_idt(); - //printOK("Setting IDT....."); + printOK("Setting IDT....."); /*Setting GDT*/ /*set up null descriptor*/ @@ -93,34 +94,24 @@ void cstart(unsigned long magic, unsigned long addr) 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....."); @@ -136,38 +127,25 @@ void cstart(unsigned long magic, unsigned long addr) 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; } diff --git a/Makefile b/Makefile index bb0b748..11f772e 100644 --- a/Makefile +++ b/Makefile @@ -1,34 +1,28 @@ # -# 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 @@ -36,12 +30,11 @@ all: ${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 .. diff --git a/README b/README deleted file mode 100644 index 557cd10..0000000 --- a/README +++ /dev/null @@ -1,18 +0,0 @@ -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. diff --git a/include/Interrupt.h b/include/Interrupt.h index 26637c0..c12eaba 100644 --- a/include/Interrupt.h +++ b/include/Interrupt.h @@ -8,6 +8,8 @@ extern int timer_tick; 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); diff --git a/include/VaneOS.h b/include/VaneOS.h index 6feceba..4a6ace9 100644 --- a/include/VaneOS.h +++ b/include/VaneOS.h @@ -21,6 +21,13 @@ void io_out8(int port, int data); 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 @@ -172,8 +179,12 @@ typedef struct #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