Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
锟斤拷有点烫
cunix
提交
ebb400eb
C
cunix
项目概览
锟斤拷有点烫
/
cunix
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
cunix
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
ebb400eb
编写于
2月 25, 2021
作者:
R
rain
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
0.619s-boot: load 180KB to 0x8000
上级
df0774c3
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
98 addition
and
36 deletion
+98
-36
LINES
LINES
+2
-0
README.md
README.md
+18
-21
boot/x86/boot.asm
boot/x86/boot.asm
+78
-15
未找到文件。
LINES
浏览文件 @
ebb400eb
...
...
@@ -18,3 +18,5 @@
2021-2-23 0.556: 556 lines, 6 files, rain
2021-2-25 0.619: 619 lines, 6 files, rain
README.md
浏览文件 @
ebb400eb
<pre>
Cunix kernel
============
# Versions
`0.362s-boot`
:
&
#9
`Boot`
read
`loader`
from
`boot-device`
, then it jumps to it.
&
#9
Loader doesn't load anything, it just enable long-mode and paging.
&
#9
Loader defines temporary page table at
`0x70000`
(0x0000:0x7000),
&
#9
it uses
`2MB`
page to make 0-12 MB memory to
`0x0000 - 0xc0000`
.
&
nbsp;
`Boot`
read
`loader`
from
`boot-device`
, then it jumps to it.
&
nbsp;
Loader doesn't load anything, it just enable long-mode and paging.
&
nbsp;
Loader defines temporary page table at
`0x70000`
(0x0000:0x7000),
&
nbsp;
it uses
`2MB`
page to make 0-12 MB memory to
`0x0000 - 0xc0000`
.
`0.385s-boot`
:
&
#9
rebuild
`boot`
and
`loader`
.
&
nbsp;
rebuild
`boot`
and
`loader`
.
`0.391s-boot`
:
&
#9
loader
` forgot open A20 line, so `
0.385
` and `
0.362
` just can
&
#9
use 1MB memory like real-mode.
&
nbsp;
loader
` forgot open A20 line, so `
0.385
` and `
0.362
` just can
&
nbsp;
use 1MB memory like real-mode.
`
0.432s-boot
`:
&
#9
make directory `
include/
`, and add segment.inc, but it doesn't work. :-)
&
nbsp;
make directory `
include/
`, and add segment.inc, but it doesn't work. :-)
`
0.451s-boot
`:
&
#9
`
boot
` can load 8 sectors (4KB) of loader (not 1 sector).
&
nbsp;
`
boot
` can load 8 sectors (4KB) of loader (not 1 sector).
`
0.466s-boot
`:
&
#9
rebuild `
boot
`
&
nbsp;
rebuild `
boot
`
`
0.487s-boot
`:
&
#9
`
loader
` let FS can access 4GB memory in real-mode. because
&
#9
`
loader
` loaded GDT and load a data-segment to fs, then disable
&
#9
protect-mode.
&
nbsp;
`
loader
` let FS can access 4GB memory in real-mode. because
&
nbsp;
`
loader
` loaded GDT and load a data-segment to fs, then disable
&
nbsp;
protect-mode.
`
0.484s-boot
`:
&
#9
let `
readdisk.inc
` smaller, but we just can use CHS or LBA, not both.
&
nbsp;
let `
readdisk.inc
` smaller, but we just can use CHS or LBA, not both.
`
0.509s-kernel
`:
&
#9
load kernel to 0x8200-0x9200 for 4KB, kernel.asm display 'K' to screen.
&
nbsp;
load kernel to 0x8200-0x9200 for 4KB, kernel.asm display 'K' to screen.
`
0.556s-int
`:
	init IDT at 0x0000-0x1000, and set all handler at ignore_int, but it do nothing.
</pre>
init IDT at 0x0000-0x1000, and set all handler at ignore_int, but it do nothing.
`
0.619s-boot
`
:
load 180KB of disk, not 4KB.
boot/x86/boot.asm
浏览文件 @
ebb400eb
...
...
@@ -17,6 +17,8 @@
CYLINDERS_NEED
equ
10
org
0x7c00
_start:
...
...
@@ -38,7 +40,7 @@ _start:
mov
si
,
message
call
print
call
load_loader
call
read_it
jmp
0x0000
:
0x8000
...
...
@@ -67,28 +69,89 @@ print:
ret
load_loader:
mov
cl
,
0x02
mov
bx
,
0x8000
read_it:
; segment address of loader+kernel
mov
ax
,
0x0800
mov
es
,
ax
mov
di
,
di
skpanic_message
; cylinder 0
mov
ch
,
0
; header 0
mov
dh
,
0
; start sector 2
mov
cl
,
2
.read_loop:
call
read_sector
jc
panic
; I know it use to save source-address, but there isn't another
; register free.
; read 9 sectors (1 loader, 8 kernel)
add
cl
,
0x01
add
bx
,
0x0200
; error counts
mov
si
,
0
cmp
cl
,
0x0a
je
.ret
.retry:
mov
ah
,
0x02
; one sector
mov
al
,
1
jmp
.read_loop
; offset 0x0000
mov
bx
,
0
.ret:
ret
; boot device
mov
dl
,
[
BI_BOOTDEV
]
; call -> BIOS
int
0x13
; if error
jnc
.cont_read
.error:
add
si
,
1
; we try it for 5 times
mov
di
,
di
skpanic_message
cmp
si
,
5
jae
panic
.reset_disk:
mov
ah
,
0x00
mov
dl
,
[
BI_BOOTDEV
]
int
0x13
; and retry
jmp
.retry
.cont_read:
; add for 0x0020 (not 0x0200)
mov
ax
,
es
add
ax
,
0x0020
mov
es
,
ax
; we've been read one sector
add
cl
,
1
; if read done
SECTORS_1_TRACK
equ
18
cmp
cl
,
SECTORS_1_TRACK
jbe
.read_loop
.update_track:
mov
cl
,
1
add
dh
,
1
HEADS_1_CYLINDER
equ
2
cmp
dh
,
HEADS_1_CYLINDER
jb
.read_loop
.update_head
mov
dh
,
0
add
ch
,
1
cmp
ch
,
CYLINDERS_NEED
jb
.read_loop
ret
panic:
mov
si
,
panic_message
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录