Added build type detection, simplified legacy BIOS booting on x86_64

This commit is contained in:
Jozef Nagy 2025-01-25 19:53:01 +01:00
parent 0236209e95
commit 1fc97f9c5f
Signed by untrusted user who does not match committer: crz
GPG key ID: 459A4811CEAC7068
18 changed files with 298 additions and 107 deletions

View file

@ -20,7 +20,8 @@
[bits 16]
[org 0x7c00]
jmp 0x0000:AxBootEntry
_start:
jmp 0x0000:AxBootEntry
times 8-($-$$) db 0
@ -37,40 +38,12 @@ bi_Reserved times 40 db 0
;; without UEFI on x86_64.
;;
%include "boot.inc"
%include "print.inc"
%include "diskutils.inc"
%include "strings.inc"
AxBootEntry:
;;
;; Set 80x50 text mode and clear the screen
;;
mov ax, 0x03
int 0x10
xor bx, bx
mov ax, 0x1112
int 0x10
mov ah, 0
int 0x10
;;
;; Display an error message and halt
;;
mov si, sErrorUnbootable
call PrintString
mov si, sPressToReboot
call PrintString
jmp AxBootHalt
PrintString:
lodsb
or al, al
jz .done
mov ah, 0x0e
mov bx, 0x0007
int 0x10
jmp PrintString
.done:
ret
AxBootHalt:
hlt
jmp AxBootHalt

View file

@ -20,7 +20,9 @@
[bits 16]
[org 0x7c00]
jmp 0x0000:AxBootEntry
_start:
jmp short AxBootEntry
nop
;;
;; BIOS bootloader on x86_64 is just a placeholder
@ -29,40 +31,12 @@ jmp 0x0000:AxBootEntry
;; without UEFI on x86_64.
;;
%include "boot.inc"
%include "print.inc"
%include "diskutils.inc"
%include "strings.inc"
AxBootEntry:
;;
;; Set 80x50 text mode and clear the screen
;;
mov ax, 0x03
int 0x10
xor bx, bx
mov ax, 0x1112
int 0x10
mov ah, 0
int 0x10
;;
;; Display an error message and halt
;;
mov si, sErrorUnbootable
call PrintString
mov si, sPressToReboot
call PrintString
jmp AxBootHalt
PrintString:
lodsb
or al, al
jz .done
mov ah, 0x0e
mov bx, 0x0007
int 0x10
jmp PrintString
.done:
ret
AxBootHalt:
hlt
jmp AxBootHalt

View file

@ -0,0 +1,43 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Module Name: boot.inc ;;
;; Project: AurixOS ;;
;; ;;
;; Copyright (c) 2024-2025 Jozef Nagy ;;
;; ;;
;; This source is subject to the MIT License. ;;
;; See License.txt in the root of this repository. ;;
;; All other rights reserved. ;;
;; ;;
;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ;;
;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ;;
;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ;;
;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ;;
;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ;;
;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ;;
;; SOFTWARE. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AxBootEntry:
;;
;; Set 80x50 text mode and clear the screen
;;
mov ax, 0x03
int 0x10
xor bx, bx
mov ax, 0x1112
int 0x10
mov ah, 0
int 0x10
;; Legacy booting is not ready for release yet
%ifdef BUILD_DEBUG
;;
;; Display an error message and halt
;;
mov si, sErrorUnbootable
call PrintString
mov si, sPressToReboot
call PrintString
jmp AxBootHalt
%endif
jmp AxBootHalt

View file

@ -0,0 +1,42 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Module Name: diskutils.inc ;;
;; Project: AurixOS ;;
;; ;;
;; Copyright (c) 2024-2025 Jozef Nagy ;;
;; ;;
;; This source is subject to the MIT License. ;;
;; See License.txt in the root of this repository. ;;
;; All other rights reserved. ;;
;; ;;
;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ;;
;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ;;
;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ;;
;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ;;
;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ;;
;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ;;
;; SOFTWARE. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; dh = number of sectors to read
;; dl = drive number
;;
;; output: es:bx
LoadDisk:
push dx
mov ah, 0x02
mov al, dh
mov ch, 0x00
mov dh, 0x00
mov cl, 0x02
int 0x13
jc .ReadError
pop dx
cmp dh, al
jne .ReadError
ret
.ReadError:
mov si, sDiskReadError
call PrintString
call AxBootHalt
sDiskReadError: db 'ERROR: Failed to read disk!', 0

View file

@ -0,0 +1,31 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Module Name: print.inc ;;
;; Project: AurixOS ;;
;; ;;
;; Copyright (c) 2024-2025 Jozef Nagy ;;
;; ;;
;; This source is subject to the MIT License. ;;
;; See License.txt in the root of this repository. ;;
;; All other rights reserved. ;;
;; ;;
;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ;;
;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ;;
;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ;;
;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ;;
;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ;;
;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ;;
;; SOFTWARE. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; si = input string
PrintString:
lodsb
or al, al
cmp al, 0
jz .done
mov ah, 0x0e
mov bx, 0x0007
int 0x10
jmp PrintString
.done:
ret