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

View file

@ -1,69 +0,0 @@
/*********************************************************************************/
/* Module Name: boot.S */
/* 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. */
/*********************************************************************************/
.section ".text.boot"
.global _start
_start:
//
// hello, am i on the main core?
//
mrs x1, mpidr_el1
and x1, x1, #3
cbz x1, 2f
//
// no? alright then, sorry for interrupting. *leaves*
//
1:
wfe
b 1b
//
// ok cool now execute this huge pile of horrible code
// thanks :>
//
2:
//
// let the stack live below our code
//
ldr x1, =_start
mov sp, x1
//
// no junk allowed in .bss!
//
ldr x1, =__bss_start
ldr w2, =__bss_size
3: cbz w2, 4f
str xzr, [x1], #8
sub w2, w2, #1
cbnz w2, 3b
4:
bl menu_main
//
// crazy? i was crazy once.
// they locked me in a room. a rubber room. a rubber room with rats.
// and rats make me crazy.
// (bootloader returned, just halt the whole thing)
//
b 1b

View file

@ -54,4 +54,4 @@ SECTIONS
}
}
/*__bss_size = (__bss_end - __bss_start) >> 3;*/
__bss_size = (__bss_end - __bss_start) >> 3;

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