OSDN Git Service

QEMU用グラフィックモードの切り替え関数を作成
authorvosystems <doradora.motochan@gmail.com>
Sun, 12 Oct 2014 14:59:43 +0000 (23:59 +0900)
committervosystems <doradora.motochan@gmail.com>
Sun, 12 Oct 2014 14:59:43 +0000 (23:59 +0900)
Kernel/Interrupt.c
Kernel/Kernel.vsb
Kernel/Makefile
Kernel/Vane.S
Kernel/boot.c
Makefile
README [deleted file]
include/Interrupt.h
include/VaneOS.h

index 0640973..138542b 100644 (file)
@@ -8,11 +8,26 @@
 #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*/
index 77aa6bb..64abe27 100755 (executable)
Binary files a/Kernel/Kernel.vsb and b/Kernel/Kernel.vsb differ
index 67cfa6f..71fda79 100644 (file)
@@ -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}
index 47a254c..f9957f6 100644 (file)
@@ -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:
index c616e82..9bacc81 100644 (file)
@@ -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;
 }
index bb0b748..11f772e 100644 (file)
--- 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 (file)
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.
index 26637c0..c12eaba 100644 (file)
@@ -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);
index 6feceba..4a6ace9 100644 (file)
@@ -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