Switching to FAT32 and GRUB2
This commit is contained in:
parent
84f641aae2
commit
8361819802
|
@ -0,0 +1,9 @@
|
|||
#ifndef _grub_h_
|
||||
#define _grub_h_
|
||||
#include "type.h"
|
||||
typedef struct
|
||||
{
|
||||
UINT32 type;
|
||||
UINT32 size;
|
||||
} MULTIBOOT_TAG, *PMULTIBOOT_TAG;
|
||||
#endif
|
|
@ -0,0 +1,11 @@
|
|||
#include "grub.h"
|
||||
#include "type.h"
|
||||
#define HKAPI32 __cdecl
|
||||
#define HKAPI64
|
||||
extern PBYTE _KERNEL_STACK;
|
||||
extern void printf(char* dst);
|
||||
void HKAPI32 HkKernelEntry(PMULTIBOOT_TAG multiboot_info)
|
||||
{
|
||||
char[] str = "Kernel is here";
|
||||
printf(&str[0]);
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
sudo umount /mnt
|
||||
sudo losetup -d /dev/loop0
|
||||
sudo losetup -d /dev/loop1
|
||||
sudo rm HOS.img
|
||||
sudo dd if=/dev/zero of=HOS.img bs=512 count=131072
|
||||
echo "n
|
||||
p
|
||||
1
|
||||
2048
|
||||
|
||||
a
|
||||
1
|
||||
w
|
||||
" | sudo fdisk HOS.img
|
||||
sudo losetup /dev/loop0 HOS.img -o 1048576
|
||||
sudo losetup /dev/loop1 HOS.img
|
||||
sudo mkdosfs -F32 /dev/loop0
|
||||
sudo mount /dev/loop0 /mnt
|
||||
sudo grub-install --root-directory=/mnt --no-floppy /dev/loop1
|
||||
sudo umount /mnt
|
||||
sudo losetup -d /dev/loop0
|
||||
sudo losetup -d /dev/loop1
|
||||
echo "p
|
||||
" | sudo fdisk HOS.img
|
|
@ -0,0 +1,130 @@
|
|||
org 0x01000000
|
||||
|
||||
global _KERNEL_STACK ; stack of kernel
|
||||
;EXTERN
|
||||
extern _HkSystemInit
|
||||
;void HkSystemInit(PMULTIBOOT_INFO info)
|
||||
GRUB_LOADED_FLAG equ 0x36d76289
|
||||
GRUB_MAGIC_NUMBER equ 0xE85250D6
|
||||
GRUB_ARCHITECTURE equ 0x0
|
||||
GRUB_CHECK_SUM equ -(GRUB_FLAGS + GRUB_MAGIC_NUMBER + GRUB_HEADER_LENGTH)
|
||||
GRUB_HEADER_LENGTH equ (GRUB_HEADER_END - GRUB_HEADER_START)
|
||||
GRUB_HEADER_START:
|
||||
dd GRUB_MAGIC_NUMBER
|
||||
dd GRUB_ARCHITECTURE
|
||||
dd GRUB_HEADER_LENGTH
|
||||
dd GRUB_CHECK_SUM
|
||||
;===================
|
||||
;Address_tag
|
||||
GRUB_LOAD_BASE equ 0x01000000 ;1MB
|
||||
GRUB_ADDRESS_TAG_SIZE equ GRUB_ADDRESS_TAG_END - GRUB_HEADER_START
|
||||
GRUB_ADDRESS_TAG_START:
|
||||
dw 0x2 ;type=2
|
||||
dw 0x0 ;flag=0
|
||||
dd GRUB_ADDRESS_TAG_SIZE; size
|
||||
dd 0; Since at the beginning of the file
|
||||
dd GRUB_LOAD_BASE
|
||||
dd 0 ;load end
|
||||
dd 0 ;bss
|
||||
GRUB_ADDRESS_TAG_END:
|
||||
;====================
|
||||
;Entry_tag
|
||||
GRUB_ENTRY_TAG_SIZE equ GRUB_ENTRY_TAG_END - GRUB_ENTRY_TAG_START
|
||||
GRUB_ENTRY_TAG_START:
|
||||
dw 0x3; type=3
|
||||
dw 0x0; flag=0
|
||||
dd GRUB_ENTRY_TAG_SIZE
|
||||
dd GRUB_ENTRY
|
||||
GRUB_ENTRY_TAG_END:
|
||||
;====================
|
||||
;End_tag
|
||||
dw 0x0
|
||||
dw 0x0
|
||||
dd 8
|
||||
;====================
|
||||
GRUB_HEADER_END:
|
||||
|
||||
%include "pm.inc"
|
||||
|
||||
;GDT to load
|
||||
GDT_DUMMY:
|
||||
;GDT
|
||||
DESC_VOID: Descriptor 0,0,0
|
||||
DESC_GRAPH: Descriptor 0b8000h,0xffff,DA_DRW | DA_DPL3
|
||||
DESC_FLAT_C: Descriptor 0,0xfffff,DA_CR | DA_32 | DA_LIMIT_4K
|
||||
DESC_FLAT_RW: Descriptor 0,0xfffff,DA_DRW | DA_32 | DA_LIMIT_4K
|
||||
GDT_END:
|
||||
|
||||
GDT_LENGTH equ GDT_END - GDT_DUMMY - 1
|
||||
;GDT PTR
|
||||
GDT_PTR:
|
||||
dw GDT_LENGTH
|
||||
dd GDT_DUMMY
|
||||
|
||||
;SELECTORS
|
||||
SLCT_CODE_0 equ DESC_FLAT_C - DESC_VOID
|
||||
SLCT_GRAPH_0 equ DESC_GRAPH - DESC_VOID
|
||||
SLCT_DATA_0 equ DESC_FLAT_RW - DESC_VOID
|
||||
|
||||
;stack
|
||||
times 1024 db 0
|
||||
_KERNEL_STACK:
|
||||
|
||||
GRUB_ENTRY:
|
||||
cli
|
||||
|
||||
cmp eax,GRUB_LOADED_FLAG
|
||||
je LOADED_BY_GRUB
|
||||
hlt
|
||||
LOADED_BY_GRUB:
|
||||
|
||||
mov eax,_KERNEL_STACK
|
||||
mov esp,eax
|
||||
|
||||
push dword 0
|
||||
popfd
|
||||
|
||||
lgdt [GDT_PTR]
|
||||
jmp SLCT_CODE_0:Reload_CS
|
||||
Reload_CS:
|
||||
mov ax,cs
|
||||
mov ss,ax
|
||||
mov ax,SLCT_DATA_0
|
||||
mov ds,ax
|
||||
mov es,ax
|
||||
mov fs,ax
|
||||
mov ax,SLCT_GRAPH_0
|
||||
mov gs,ax
|
||||
|
||||
push ebx
|
||||
call _HkSystemInit
|
||||
|
||||
_printf:
|
||||
;void printf(char* str)
|
||||
;EAX,ECX,EDX
|
||||
push ebp
|
||||
mov ebp,esp
|
||||
push edi
|
||||
push esi
|
||||
|
||||
mov edi,dword [ss:ebp+8]
|
||||
xor esi,esi
|
||||
xor ecx,ecx
|
||||
|
||||
.begin:
|
||||
mov al,byte [ds:edi]
|
||||
cmp al,0 ;0 ended
|
||||
je .end
|
||||
mov byte [es:esi],al
|
||||
inc esi
|
||||
mov byte [es:esi],0xFF
|
||||
inc edi
|
||||
inc esi
|
||||
.end:
|
||||
jmp .end
|
||||
|
||||
pop esi
|
||||
pop edi
|
||||
mov esp,ebp
|
||||
pop ebp
|
||||
|
|
@ -0,0 +1,324 @@
|
|||
|
||||
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
; pm.inc
|
||||
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
; Forrest Yu, 2005
|
||||
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
|
||||
; 描述符图示
|
||||
|
||||
; 图示一
|
||||
;
|
||||
; ------ ┏━━┳━━┓高地址
|
||||
; ┃ 7 ┃ 段 ┃
|
||||
; ┣━━┫ ┃
|
||||
; 基
|
||||
; 字节 7 ┆ ┆ ┆
|
||||
; 址
|
||||
; ┣━━┫ ② ┃
|
||||
; ┃ 0 ┃ ┃
|
||||
; ------ ┣━━╋━━┫
|
||||
; ┃ 7 ┃ G ┃
|
||||
; ┣━━╉──┨
|
||||
; ┃ 6 ┃ D ┃
|
||||
; ┣━━╉──┨
|
||||
; ┃ 5 ┃ 0 ┃
|
||||
; ┣━━╉──┨
|
||||
; ┃ 4 ┃ AVL┃
|
||||
; 字节 6 ┣━━╉──┨
|
||||
; ┃ 3 ┃ ┃
|
||||
; ┣━━┫ 段 ┃
|
||||
; ┃ 2 ┃ 界 ┃
|
||||
; ┣━━┫ 限 ┃
|
||||
; ┃ 1 ┃ ┃
|
||||
; ┣━━┫ ② ┃
|
||||
; ┃ 0 ┃ ┃
|
||||
; ------ ┣━━╋━━┫
|
||||
; ┃ 7 ┃ P ┃
|
||||
; ┣━━╉──┨
|
||||
; ┃ 6 ┃ ┃
|
||||
; ┣━━┫ DPL┃
|
||||
; ┃ 5 ┃ ┃
|
||||
; ┣━━╉──┨
|
||||
; ┃ 4 ┃ S ┃
|
||||
; 字节 5 ┣━━╉──┨
|
||||
; ┃ 3 ┃ ┃
|
||||
; ┣━━┫ T ┃
|
||||
; ┃ 2 ┃ Y ┃
|
||||
; ┣━━┫ P ┃
|
||||
; ┃ 1 ┃ E ┃
|
||||
; ┣━━┫ ┃
|
||||
; ┃ 0 ┃ ┃
|
||||
; ------ ┣━━╋━━┫
|
||||
; ┃ 23 ┃ ┃
|
||||
; ┣━━┫ ┃
|
||||
; ┃ 22 ┃ ┃
|
||||
; ┣━━┫ 段 ┃
|
||||
;
|
||||
; 字节 ┆ ┆ 基 ┆
|
||||
; 2, 3, 4
|
||||
; ┣━━┫ 址 ┃
|
||||
; ┃ 1 ┃ ① ┃
|
||||
; ┣━━┫ ┃
|
||||
; ┃ 0 ┃ ┃
|
||||
; ------ ┣━━╋━━┫
|
||||
; ┃ 15 ┃ ┃
|
||||
; ┣━━┫ ┃
|
||||
; ┃ 14 ┃ ┃
|
||||
; ┣━━┫ 段 ┃
|
||||
;
|
||||
; 字节 0,1┆ ┆ 界 ┆
|
||||
;
|
||||
; ┣━━┫ 限 ┃
|
||||
; ┃ 1 ┃ ① ┃
|
||||
; ┣━━┫ ┃
|
||||
; ┃ 0 ┃ ┃
|
||||
; ------ ┗━━┻━━┛低地址
|
||||
;
|
||||
|
||||
|
||||
; 图示二
|
||||
|
||||
; 高地址………………………………………………………………………低地址
|
||||
|
||||
; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|
||||
; |7654321076543210765432107654321076543210765432107654321076543210| <- 共 8 字节
|
||||
; |--------========--------========--------========--------========|
|
||||
; ┏━━━┳━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓
|
||||
; ┃31..24┃ (见下图) ┃ 段基址(23..0) ┃ 段界限(15..0)┃
|
||||
; ┃ ┃ ┃ ┃ ┃
|
||||
; ┃ 基址2┃③│②│ ①┃基址1b│ 基址1a ┃ 段界限1 ┃
|
||||
; ┣━━━╋━━━┳━━━╋━━━━━━━━━━━╋━━━━━━━┫
|
||||
; ┃ %6 ┃ %5 ┃ %4 ┃ %3 ┃ %2 ┃ %1 ┃
|
||||
; ┗━━━┻━━━┻━━━┻━━━┻━━━━━━━┻━━━━━━━┛
|
||||
; │ \_________
|
||||
; │ \__________________
|
||||
; │ \________________________________________________
|
||||
; │ \
|
||||
; ┏━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┓
|
||||
; ┃ 7 ┃ 6 ┃ 5 ┃ 4 ┃ 3 ┃ 2 ┃ 1 ┃ 0 ┃ 7 ┃ 6 ┃ 5 ┃ 4 ┃ 3 ┃ 2 ┃ 1 ┃ 0 ┃
|
||||
; ┣━━╋━━╋━━╋━━╋━━┻━━┻━━┻━━╋━━╋━━┻━━╋━━╋━━┻━━┻━━┻━━┫
|
||||
; ┃ G ┃ D ┃ 0 ┃ AVL┃ 段界限 2 (19..16) ┃ P ┃ DPL ┃ S ┃ TYPE ┃
|
||||
; ┣━━┻━━┻━━┻━━╋━━━━━━━━━━━╋━━┻━━━━━┻━━┻━━━━━━━━━━━┫
|
||||
; ┃ ③: 属性 2 ┃ ②: 段界限 2 ┃ ①: 属性1 ┃
|
||||
; ┗━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━┛
|
||||
; 高地址 低地址
|
||||
;
|
||||
;
|
||||
|
||||
; 说明:
|
||||
;
|
||||
; (1) P: 存在(Present)位。
|
||||
; P=1 表示描述符对地址转换是有效的,或者说该描述符所描述的段存在,即在内存中;
|
||||
; P=0 表示描述符对地址转换无效,即该段不存在。使用该描述符进行内存访问时会引起异常。
|
||||
;
|
||||
; (2) DPL: 表示描述符特权级(Descriptor Privilege level),共2位。它规定了所描述段的特权级,用于特权检查,以决定对该段能否访问。
|
||||
;
|
||||
; (3) S: 说明描述符的类型。
|
||||
; 对于存储段描述符而言,S=1,以区别与系统段描述符和门描述符(S=0)。
|
||||
;
|
||||
; (4) TYPE: 说明存储段描述符所描述的存储段的具体属性。
|
||||
;
|
||||
;
|
||||
; 数据段类型 类型值 说明
|
||||
; ----------------------------------
|
||||
; 0 只读
|
||||
; 1 只读、已访问
|
||||
; 2 读/写
|
||||
; 3 读/写、已访问
|
||||
; 4 只读、向下扩展
|
||||
; 5 只读、向下扩展、已访问
|
||||
; 6 读/写、向下扩展
|
||||
; 7 读/写、向下扩展、已访问
|
||||
;
|
||||
;
|
||||
; 类型值 说明
|
||||
; 代码段类型 ----------------------------------
|
||||
; 8 只执行
|
||||
; 9 只执行、已访问
|
||||
; A 执行/读
|
||||
; B 执行/读、已访问
|
||||
; C 只执行、一致码段
|
||||
; D 只执行、一致码段、已访问
|
||||
; E 执行/读、一致码段
|
||||
; F 执行/读、一致码段、已访问
|
||||
;
|
||||
;
|
||||
; 系统段类型 类型编码 说明
|
||||
; ----------------------------------
|
||||
; 0 <未定义>
|
||||
; 1 可用286TSS
|
||||
; 2 LDT
|
||||
; 3 忙的286TSS
|
||||
; 4 286调用门
|
||||
; 5 任务门
|
||||
; 6 286中断门
|
||||
; 7 286陷阱门
|
||||
; 8 未定义
|
||||
; 9 可用386TSS
|
||||
; A <未定义>
|
||||
; B 忙的386TSS
|
||||
; C 386调用门
|
||||
; D <未定义>
|
||||
; E 386中断门
|
||||
; F 386陷阱门
|
||||
;
|
||||
; (5) G: 段界限粒度(Granularity)位。
|
||||
; G=0 表示界限粒度为字节;
|
||||
; G=1 表示界限粒度为4K 字节。
|
||||
; 注意,界限粒度只对段界限有效,对段基地址无效,段基地址总是以字节为单位。
|
||||
;
|
||||
; (6) D: D位是一个很特殊的位,在描述可执行段、向下扩展数据段或由SS寄存器寻址的段(通常是堆栈段)的三种描述符中的意义各不相同。
|
||||
; ⑴ 在描述可执行段的描述符中,D位决定了指令使用的地址及操作数所默认的大小。
|
||||
; ① D=1表示默认情况下指令使用32位地址及32位或8位操作数,这样的代码段也称为32位代码段;
|
||||
; ② D=0 表示默认情况下,使用16位地址及16位或8位操作数,这样的代码段也称为16位代码段,它与80286兼容。可以使用地址大小前缀和操作数大小前缀分别改变默认的地址或操作数的大小。
|
||||
; ⑵ 在向下扩展数据段的描述符中,D位决定段的上部边界。
|
||||
; ① D=1表示段的上部界限为4G;
|
||||
; ② D=0表示段的上部界限为64K,这是为了与80286兼容。
|
||||
; ⑶ 在描述由SS寄存器寻址的段描述符中,D位决定隐式的堆栈访问指令(如PUSH和POP指令)使用何种堆栈指针寄存器。
|
||||
; ① D=1表示使用32位堆栈指针寄存器ESP;
|
||||
; ② D=0表示使用16位堆栈指针寄存器SP,这与80286兼容。
|
||||
;
|
||||
; (7) AVL: 软件可利用位。80386对该位的使用未左规定,Intel公司也保证今后开发生产的处理器只要与80386兼容,就不会对该位的使用做任何定义或规定。
|
||||
;
|
||||
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; 描述符类型值说明
|
||||
; 其中:
|
||||
; DA_ : Descriptor Attribute
|
||||
; D : 数据段
|
||||
; C : 代码段
|
||||
; S : 系统段
|
||||
; R : 只读
|
||||
; RW : 读写
|
||||
; A : 已访问
|
||||
; 其它 : 可按照字面意思理解
|
||||
;----------------------------------------------------------------------------
|
||||
DA_32 EQU 4000h ; 32 位段
|
||||
DA_LIMIT_4K EQU 8000h ; 段界限粒度为 4K 字节
|
||||
|
||||
DA_DPL0 EQU 00h ; DPL = 0
|
||||
DA_DPL1 EQU 20h ; DPL = 1
|
||||
DA_DPL2 EQU 40h ; DPL = 2
|
||||
DA_DPL3 EQU 60h ; DPL = 3
|
||||
;----------------------------------------------------------------------------
|
||||
; 存储段描述符类型值说明
|
||||
;----------------------------------------------------------------------------
|
||||
DA_DR EQU 90h ; 存在的只读数据段类型值
|
||||
DA_DRW EQU 92h ; 存在的可读写数据段属性值
|
||||
DA_DRWA EQU 93h ; 存在的已访问可读写数据段类型值
|
||||
DA_C EQU 98h ; 存在的只执行代码段属性值
|
||||
DA_CR EQU 9Ah ; 存在的可执行可读代码段属性值
|
||||
DA_CCO EQU 9Ch ; 存在的只执行一致代码段属性值
|
||||
DA_CCOR EQU 9Eh ; 存在的可执行可读一致代码段属性值
|
||||
;----------------------------------------------------------------------------
|
||||
; 系统段描述符类型值说明
|
||||
;----------------------------------------------------------------------------
|
||||
DA_LDT EQU 82h ; 局部描述符表段类型值
|
||||
DA_TaskGate EQU 85h ; 任务门类型值
|
||||
DA_386TSS EQU 89h ; 可用 386 任务状态段类型值
|
||||
DA_386CGate EQU 8Ch ; 386 调用门类型值
|
||||
DA_386IGate EQU 8Eh ; 386 中断门类型值
|
||||
DA_386TGate EQU 8Fh ; 386 陷阱门类型值
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
|
||||
; 选择子图示:
|
||||
; ┏━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┓
|
||||
; ┃ 15 ┃ 14 ┃ 13 ┃ 12 ┃ 11 ┃ 10 ┃ 9 ┃ 8 ┃ 7 ┃ 6 ┃ 5 ┃ 4 ┃ 3 ┃ 2 ┃ 1 ┃ 0 ┃
|
||||
; ┣━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━╋━━╋━━┻━━┫
|
||||
; ┃ 描述符索引 ┃ TI ┃ RPL ┃
|
||||
; ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━┻━━━━━┛
|
||||
;
|
||||
; RPL(Requested Privilege Level): 请求特权级,用于特权检查。
|
||||
;
|
||||
; TI(Table Indicator): 引用描述符表指示位
|
||||
; TI=0 指示从全局描述符表GDT中读取描述符;
|
||||
; TI=1 指示从局部描述符表LDT中读取描述符。
|
||||
;
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; 选择子类型值说明
|
||||
; 其中:
|
||||
; SA_ : Selector Attribute
|
||||
|
||||
SA_RPL0 EQU 0 ; ┓
|
||||
SA_RPL1 EQU 1 ; ┣ RPL
|
||||
SA_RPL2 EQU 2 ; ┃
|
||||
SA_RPL3 EQU 3 ; ┛
|
||||
|
||||
SA_TIG EQU 0 ; ┓TI
|
||||
SA_TIL EQU 4 ; ┛
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; 分页机制使用的常量说明
|
||||
;----------------------------------------------------------------------------
|
||||
PG_P EQU 1 ; 页存在属性位
|
||||
PG_RWR EQU 0 ; R/W 属性位值, 读/执行
|
||||
PG_RWW EQU 2 ; R/W 属性位值, 读/写/执行
|
||||
PG_USS EQU 0 ; U/S 属性位值, 系统级
|
||||
PG_USU EQU 4 ; U/S 属性位值, 用户级
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
; =========================================
|
||||
; FLAGS - Intel 8086 Family Flags Register
|
||||
; =========================================
|
||||
;
|
||||
; |11|10|F|E|D|C|B|A|9|8|7|6|5|4|3|2|1|0|
|
||||
; | | | | | | | | | | | | | | | | | '--- CF……Carry Flag
|
||||
; | | | | | | | | | | | | | | | | '--- 1
|
||||
; | | | | | | | | | | | | | | | '--- PF……Parity Flag
|
||||
; | | | | | | | | | | | | | | '--- 0
|
||||
; | | | | | | | | | | | | | '--- AF……Auxiliary Flag
|
||||
; | | | | | | | | | | | | '--- 0
|
||||
; | | | | | | | | | | | '--- ZF……Zero Flag
|
||||
; | | | | | | | | | | '--- SF……Sign Flag
|
||||
; | | | | | | | | | '--- TF……Trap Flag (Single Step)
|
||||
; | | | | | | | | '--- IF……Interrupt Flag
|
||||
; | | | | | | | '--- DF……Direction Flag
|
||||
; | | | | | | '--- OF……Overflow flag
|
||||
; | | | | '----- IOPL……I/O Privilege Level (286+ only)
|
||||
; | | | '----- NT……Nested Task Flag (286+ only)
|
||||
; | | '----- 0
|
||||
; | '----- RF……Resume Flag (386+ only)
|
||||
; '------ VM……Virtual Mode Flag (386+ only)
|
||||
;
|
||||
; 注: see PUSHF POPF STI CLI STD CLD
|
||||
;
|
||||
|
||||
|
||||
; 宏 ------------------------------------------------------------------------------------------------------
|
||||
;
|
||||
; 描述符
|
||||
; usage: Descriptor Base, Limit, Attr
|
||||
; Base: dd
|
||||
; Limit: dd (low 20 bits available)
|
||||
; Attr: dw (lower 4 bits of higher byte are always 0)
|
||||
%macro Descriptor 3
|
||||
dw %2 & 0FFFFh ; 段界限 1 (2 字节)
|
||||
dw %1 & 0FFFFh ; 段基址 1 (2 字节)
|
||||
db (%1 >> 16) & 0FFh ; 段基址 2 (1 字节)
|
||||
dw ((%2 >> 8) & 0F00h) | (%3 & 0F0FFh) ; 属性 1 + 段界限 2 + 属性 2 (2 字节)
|
||||
db (%1 >> 24) & 0FFh ; 段基址 3 (1 字节)
|
||||
%endmacro ; 共 8 字节
|
||||
;
|
||||
; 门
|
||||
; usage: Gate Selector, Offset, DCount, Attr
|
||||
; Selector: dw
|
||||
; Offset: dd
|
||||
; DCount: db
|
||||
; Attr: db
|
||||
%macro Gate 4
|
||||
dw (%2 & 0FFFFh) ; 偏移 1 (2 字节)
|
||||
dw %1 ; 选择子 (2 字节)
|
||||
dw (%3 & 1Fh) | ((%4 << 8) & 0FF00h) ; 属性 (2 字节)
|
||||
dw ((%2 >> 16) & 0FFFFh) ; 偏移 2 (2 字节)
|
||||
%endmacro ; 共 8 字节
|
||||
; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
@ -0,0 +1,8 @@
|
|||
#ifndef _type_h_
|
||||
#define _type_h_
|
||||
typedef unsigned int UINT32, *PUINT32
|
||||
typedef unsigned short UINT16, *PUINT16
|
||||
typedef unsigned long UINT64, *PUINT64
|
||||
typedef unsigned char BYTE, *PBYTE
|
||||
typedef BYTE CHAR, *PCHAR
|
||||
#endif
|
73
bochsout.txt
73
bochsout.txt
|
@ -1,73 +0,0 @@
|
|||
00000000000i[ ] Bochs x86 Emulator 2.6.6
|
||||
00000000000i[ ] Built from SVN snapshot on June 15, 2014
|
||||
00000000000i[ ] Compiled on Jun 15 2014 at 08:54:27
|
||||
00000000000i[ ] System configuration
|
||||
00000000000i[ ] processors: 1 (cores=1, HT threads=1)
|
||||
00000000000i[ ] A20 line support: yes
|
||||
00000000000i[ ] load configurable MSRs from file "msrs.def"
|
||||
00000000000i[ ] IPS is set to 50000000
|
||||
00000000000i[ ] CPU configuration
|
||||
00000000000i[ ] SMP support: no
|
||||
00000000000i[ ] Using pre-defined CPU configuration: core2_penryn_t9600
|
||||
00000000000i[ ] Optimization configuration
|
||||
00000000000i[ ] RepeatSpeedups support: yes
|
||||
00000000000i[ ] Fast function calls: yes
|
||||
00000000000i[ ] Handlers Chaining speedups: yes
|
||||
00000000000i[ ] Devices configuration
|
||||
00000000000i[ ] NE2000 support: yes
|
||||
00000000000i[ ] PCI support: yes, enabled=no
|
||||
00000000000i[ ] SB16 support: yes
|
||||
00000000000i[ ] USB support: yes
|
||||
00000000000i[ ] VGA extension support: vbe cirrus voodoo
|
||||
00000000000i[MEM0 ] allocated memory at 09CB0020. after alignment, vector=09CB1000
|
||||
00000000000i[MEM0 ] 64.00MB
|
||||
00000000000i[MEM0 ] mem block size = 0x00100000, blocks=64
|
||||
00000000000i[MEM0 ] rom at 0xfffe0000/131072 ('C:\Program Files (x86)\Bochs-2.6.6/BIOS-bochs-latest')
|
||||
00000000000i[SNDLOW] Sound lowlevel module 'win' initialized
|
||||
00000000000i[PLUGIN] init_dev of 'cmos' plugin device by virtual method
|
||||
00000000000i[CMOS ] Using local time for initial clock
|
||||
00000000000i[CMOS ] Setting initial clock to: Mon Jun 30 12:12:18 2014 (time0=1404155538)
|
||||
00000000000i[PLUGIN] init_dev of 'dma' plugin device by virtual method
|
||||
00000000000i[DMA ] channel 4 used by cascade
|
||||
00000000000i[PLUGIN] init_dev of 'pic' plugin device by virtual method
|
||||
00000000000i[PLUGIN] init_dev of 'pit' plugin device by virtual method
|
||||
00000000000i[PLUGIN] init_dev of 'vga' plugin device by virtual method
|
||||
00000000000i[MEM0 ] Register memory access handlers: 0x0000000a0000 - 0x0000000bffff
|
||||
00000000000i[VGA ] interval=200000
|
||||
00000000000i[MEM0 ] Register memory access handlers: 0x0000e0000000 - 0x0000e0ffffff
|
||||
00000000000i[BXVGA ] VBE Bochs Display Extension Enabled
|
||||
00000000000i[MEM0 ] rom at 0xc0000/41472 ('C:\Program Files (x86)\Bochs-2.6.6/VGABIOS-lgpl-latest')
|
||||
00000000000i[PLUGIN] init_dev of 'floppy' plugin device by virtual method
|
||||
00000000000i[DMA ] channel 2 used by Floppy Drive
|
||||
00000000000i[FLOPPY] fd0: 'a.img' ro=0, h=2,t=80,spt=18
|
||||
00000000000i[PLUGIN] init_dev of 'ioapic' plugin device by virtual method
|
||||
00000000000i[IOAPIC] initializing I/O APIC
|
||||
00000000000i[MEM0 ] Register memory access handlers: 0x0000fec00000 - 0x0000fec00fff
|
||||
00000000000i[IOAPIC] IOAPIC enabled (base address = 0xfec00000)
|
||||
00000000000i[PLUGIN] init_dev of 'keyboard' plugin device by virtual method
|
||||
00000000000i[KBD ] will paste characters every 400 keyboard ticks
|
||||
00000000000i[PLUGIN] init_dev of 'unmapped' plugin device by virtual method
|
||||
00000000000i[PLUGIN] init_dev of 'biosdev' plugin device by virtual method
|
||||
00000000000i[PLUGIN] init_dev of 'speaker' plugin device by virtual method
|
||||
00000000000i[PCSPK ] Using lowlevel sound support for output
|
||||
00000000000i[PLUGIN] init_dev of 'extfpuirq' plugin device by virtual method
|
||||
00000000000i[PLUGIN] init_dev of 'parallel' plugin device by virtual method
|
||||
00000000000i[PAR ] parallel ports disabled
|
||||
00000000000i[PLUGIN] init_dev of 'serial' plugin device by virtual method
|
||||
00000000000i[SER ] serial ports disabled
|
||||
00000000000i[PLUGIN] init_dev of 'gameport' plugin device by virtual method
|
||||
00000000000i[PLUGIN] register state of 'cmos' plugin device by virtual method
|
||||
00000000000i[PLUGIN] register state of 'dma' plugin device by virtual method
|
||||
00000000000i[PLUGIN] register state of 'pic' plugin device by virtual method
|
||||
00000000000i[PLUGIN] register state of 'pit' plugin device by virtual method
|
||||
00000000000i[PLUGIN] register state of 'vga' plugin device by virtual method
|
||||
00000000000i[PLUGIN] register state of 'floppy' plugin device by virtual method
|
||||
00000000000i[PLUGIN] register state of 'unmapped' plugin device by virtual method
|
||||
00000000000i[PLUGIN] register state of 'biosdev' plugin device by virtual method
|
||||
00000000000i[PLUGIN] register state of 'speaker' plugin device by virtual method
|
||||
00000000000i[PLUGIN] register state of 'extfpuirq' plugin device by virtual method
|
||||
00000000000i[PLUGIN] register state of 'gameport' plugin device by virtual method
|
||||
00000000000i[PLUGIN] register state of 'ioapic' plugin device by virtual method
|
||||
00000000000i[PLUGIN] register state of 'keyboard' plugin device by virtual method
|
||||
00000000000p[ ] >>PANIC<< unknown log function module 'pci'
|
||||
00000000000i[SIM ] quit_sim called with exit code 1
|
42
bochsrc.bxrc
42
bochsrc.bxrc
|
@ -1,12 +1,48 @@
|
|||
# configuration file generated by Bochs
|
||||
plugin_ctrl: unmapped=1, biosdev=1, speaker=1, extfpuirq=1, parallel=1, serial=1, gameport=1
|
||||
config_interface: win32config
|
||||
display_library: win32
|
||||
memory: host=64, guest=64
|
||||
romimage: file="C:\Program Files (x86)\Bochs-2.6.6/BIOS-bochs-latest"
|
||||
vgaromimage: file="C:\Program Files (x86)\Bochs-2.6.6/VGABIOS-lgpl-latest"
|
||||
boot: floppy
|
||||
floppya: type=1_44, 1_44="a.img", status=inserted, write_protected=0
|
||||
boot: disk
|
||||
floppy_bootsig_check: disabled=0
|
||||
# no floppya
|
||||
# no floppyb
|
||||
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
|
||||
ata0-master: type=disk, path="C:\Users\Oscar\Documents\HOS\kernel-HOS.img", mode=flat, cylinders=99, heads=4, spt=32, model="Generic 1234", biosdetect=auto, translation=auto
|
||||
ata0-slave: type=none
|
||||
ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
|
||||
ata1-master: type=none
|
||||
ata1-slave: type=none
|
||||
ata2: enabled=0
|
||||
ata3: enabled=0
|
||||
pci: enabled=1, chipset=i440fx
|
||||
vga: extension=vbe, update_freq=5
|
||||
cpu: count=1, ips=4000000, model=bx_generic, reset_on_triple_fault=1, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0
|
||||
cpuid: level=6, stepping=3, model=3, family=6, vendor_string="GenuineIntel", brand_string=" Intel(R) Pentium(R) 4 CPU "
|
||||
cpuid: mmx=1, apic=xapic, simd=sse2, sse4a=0, misaligned_sse=0, sep=1, movbe=0, adx=0
|
||||
cpuid: aes=0, sha=0, xsave=0, xsaveopt=0, x86_64=1, 1g_pages=0, pcid=0, fsgsbase=0
|
||||
cpuid: smep=0, smap=0, mwait=1, vmx=1
|
||||
print_timestamps: enabled=0
|
||||
port_e9_hack: enabled=0
|
||||
private_colormap: enabled=0
|
||||
clock: sync=none, time0=local, rtc_sync=0
|
||||
# no cmosimage
|
||||
# no loader
|
||||
log: -
|
||||
logprefix: %t%e%d
|
||||
debug: action=ignore, pci=report
|
||||
info: action=report
|
||||
error: action=report
|
||||
panic: action=ask
|
||||
keyboard: type=mf, serial_delay=250, paste_delay=100000, user_shortcut=none
|
||||
keyboard: type=mf, serial_delay=250, paste_delay=100000, user_shortcut=none
|
||||
mouse: type=ps2, enabled=0, toggle=ctrl+mbutton
|
||||
sound: driver="default", waveout=none, wavein=none
|
||||
speaker: enabled=1, mode=sound
|
||||
parport1: enabled=1, file=none
|
||||
parport2: enabled=0
|
||||
com1: enabled=1, mode=null
|
||||
com2: enabled=0
|
||||
com3: enabled=0
|
||||
com4: enabled=0
|
||||
|
|
BIN
kernel.bin
BIN
kernel.bin
Binary file not shown.
BIN
loader.bin
BIN
loader.bin
Binary file not shown.
Loading…
Reference in New Issue