提交 d611a60e 编写于 作者: R rain

0.466s-boot: rebuild boot

上级 3ecc3a74
......@@ -8,3 +8,5 @@
2021-2-15 0.451: 451 lines, 4 files, rain
2021-2-15 0.466: 466 lines, 5 files, rain
......@@ -23,4 +23,6 @@ Cunix kernel
`0.451s-boot`:
&#9`boot` can load 8 sectors (4KB) of loader (not 1 sector).
`0.466s-boot`:
&#9rebuild `boot`
</pre>
......@@ -17,38 +17,38 @@
BI_BOOTDEV equ 0x7e00
org 0x7c00
_start:
xor ax, ax
xor ax, ax
mov ds, ax
mov es, ax
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0x7c00
mov ss, ax
mov sp, 0x7c00
; display message: `Cunix is booting...`
; display message: `Cunix is booting...`
; boot device driver number is in DL (by BIOS-19)
mov [BI_BOOTDEV], dl
; boot device driver number is in DL (by BIOS-19)
mov [BI_BOOTDEV], dl
mov si, message
call print
mov si, message
call print
call load_loader
call load_loader
jmp 0x0000:0x8000
jmp 0x0000:0x8000
message: db "Cunix is booting...", 0x0d, 0x0a, 0x00
diskpanic_message: db "read disk failed", 0x0d, 0x0a, 0x00
panic_message: db "panic: ", 0x00
%include "arch/x86/readdisk.inc"
print:
; SI: message address
mov al, [si]
......@@ -71,12 +71,11 @@ load_loader:
mov cl, 0x02
mov bx, 0x8000
.read_loop:
call read_sector_chs
mov di, diskpanic_message
jc .try_lba
.read_loop:
call read_sector
jc panic
; read 8 sectors
add cl, 0x02
......@@ -91,52 +90,6 @@ load_loader:
ret
.try_lba:
call read_sector_lba
jc panic
add cl, 0x02
add bx, 0x0200
cmp cl, 0x0a
je .ret
jmp .read_loop
read_sector_chs:
mov ax, 0x0201
xor ch, ch
; CL is argument `start sector`
xor dh, dh
mov dl ,[BI_BOOTDEV]
int 0x13
ret
read_sector_lba:
push dword 0x00000000
; ECX is argument `LBA address`
push dword ecx
push word es
push word bx
; 1 sector
push word 0x0001
push word 0x0010
mov ah, 0x42
mov dl, [BI_BOOTDEV]
mov si, sp
int 0x13
add sp, 0x10
ret
panic:
mov si, panic_message
call print
......
; Copyright (C) 2021 Rain
; This file is part of Cunix.
; Cunix is free software: you can redistribute it and/or modify
; it under the terms of the GNU General Public Licene and published by
; the Free Software Foundation, either version 3 of the License, or
; (at your option) any later version.
; Cunix is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
; You should have recceived a copy of the GNU General Public License
; along with Cunix. If not, see <https://www.gnu.org/licenses/>.
BI_BOOTDEV equ 0x7e00
read_sector:
; CH is sector number
call read_sector_chs
jc .try_lba
ret
.try_lba:
call read_sector_lba
ret
read_sector_chs:
mov ax, 0x0201
xor ch, ch
xor dh, dh
mov dl, [BI_BOOTDEV]
int 0x13
ret
read_sector_lba:
push dword 0x00000000
push dword ecx
push word es
push word bx
push word 0x0001
push word 0x0010
mov ah, 0x42
mov dl, [BI_BOOTDEV]
int 0x13
add sp, 0x10
ret
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册