diff --git a/LINES b/LINES index b384f384bdc36acb63ff2b86f2fa3b37a6cb8d00..61f948d1882d95a796c66c98a6d0ea9690672d3f 100644 --- a/LINES +++ b/LINES @@ -8,3 +8,5 @@ 2021-2-15 0.451: 451 lines, 4 files, rain +2021-2-15 0.466: 466 lines, 5 files, rain + diff --git a/README.md b/README.md index 3d6748db64e454ef673e56f4be9d6fac74663d85..da87d307ec4767c40f06d9d9414a05fbcd2bb853 100644 --- a/README.md +++ b/README.md @@ -23,4 +23,6 @@ Cunix kernel `0.451s-boot`: `boot` can load 8 sectors (4KB) of loader (not 1 sector). +`0.466s-boot`: + rebuild `boot` diff --git a/boot/x86/boot.asm b/boot/x86/boot.asm index e32a117bcf37a127e174755bcd9932d3eb312431..386a0fb6261988c525afd8e3c9401381575f11c9 100644 --- a/boot/x86/boot.asm +++ b/boot/x86/boot.asm @@ -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 diff --git a/include/arch/x86/readdisk.inc b/include/arch/x86/readdisk.inc new file mode 100644 index 0000000000000000000000000000000000000000..f1c411a0e29c5460f56735682578bdcd627884ae --- /dev/null +++ b/include/arch/x86/readdisk.inc @@ -0,0 +1,62 @@ +; 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 . + + + + +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 + +