Clean slate

This commit is contained in:
vanten-s 2024-03-25 23:24:27 +01:00
parent c32493cdf2
commit 61ec7bb47b
Signed by: vanten-s
GPG key ID: DE3060396884D3F2
27 changed files with 0 additions and 2098646 deletions

1078
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,14 +0,0 @@
[package]
name = "os"
version = "0.1.0"
[build-dependencies]
bootloader = "0.11"
kernel = { path = "kernel", artifact = "bin", target = "x86_64-unknown-none" }
[dependencies]
# used for UEFI booting in QEMU
ovmf-prebuilt = "0.1.0-alpha.1"
[workspace]
members = ["kernel"]

View file

@ -1,36 +0,0 @@
https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf
CURRENT PAGE: 46
Name:
Obsidian Starlight OS
Compile Assembly:
cd "\Users\05wse01\Desktop\OST OS"
C:\Users\05wse01\AppData\Local\bin\NASM\nasm.exe boot_sect.asm -f bin -o boot_sect.bin
NOTE: The boot_sect.bin date wont change in the process... To clear out some confusions
Create VirtualBox disk:
Open admin cmd
cd "\Program Files\Oracle\VirtualBox"
VBoxManage.exe convertfromraw "C:\Users\05wse01\Desktop\OST OS\target" "C:\Users\05wse01\Desktop\OST OS\output.vdi" --format VDI
NOTE: Target has to be larger than 1mb (check file size in explorer)
AND: The file has to be a multiply of 512
AND: You need to set the the file as an available virtual disk in the VirtualBox interface (how?.. IDK)
Qemu emulator:
cd "C:\Program Files\qemu"
qemu-system-x86_64w.exe "C:\Users\05wse01\Desktop\OST OS\boot_sect.bin"
Compile C:
gcc -ffreestanding -c basic.c -o basic.o
ld -o basic.bin -Ttext 0x0 --oformat binary basic.o
ndisasm -b 32 basic.bin > basic.dis
Clean out rows with:
0000 add [eax],al

View file

@ -1,4 +0,0 @@
int my_function () {
int my_var = 0xbaba ;
return my_var ;
}

File diff suppressed because it is too large Load diff

View file

@ -1,15 +0,0 @@
[ org 0x7c00 ]
mov ebx, RANDOM_MSG,
call printLn
mov dx, 0x1fb6 ; store the value to print in dx
call print_hex ; call the function
%include "./print/print.asm"
%include "./print/print_hex.asm"
RANDOM_MSG: db 'Will this work?',0
times 510-($-$$) db 0 ; Pad the boot sector out with zeros
dw 0xaa55

View file

View file

@ -1,42 +0,0 @@
[ org 0x7c00 ] ; Tells the assemble to start inside the boot location
mov [BOOT_DRIVE], dl
mov bp, 0x8000
mov sp, bp
mov ebx, BOOTING_MSG
mov edx, 2
call print
mov bx, 0x9000
mov dh, 5
mov dl, [BOOT_DRIVE]
call disk_load
mov dx, [0x9000]
call print_hex
mov dx, [0x9000 + 512]
call print_hex
jmp $
; Imports print
%include "./x16/print/print.asm"
%include "./x16/print/print_hex.asm"
%include "./x16/disk/disk_load.asm"
BOOT_DRIVE: db 0
BOOTING_MSG: db 'Booting Obsidian Starlight OS (OST OS)',0
RANDOM_MSG: db 'Ya like jazz?',0
times 510-($-$$) db 0 ; Pad the boot sector out with zeros
dw 0xaa55
times 256 dw 0xdada
times 256 dw 0xface
times 2097152 db 0 ; Only for VirtualBox

View file

@ -1,33 +0,0 @@
[org 0x7c00]
mov bp, 0x9000
mov sp, bp
mov bx, MSG_REAL_MODE
call writeLn
call switch_to_pm
jmp $
%include "./x16/print/print.asm"
%include "./x32/init/gdt.asm"
%include "./x32/print/print_string_pm.asm"
%include "./x32/init/switch_to_pm.asm"
[bits 32]
BEGIN_PM:
mov ebx, MSG_PROT_MODE
call print_string_pm
jmp $
MSG_REAL_MODE: db "Starting OST OS in 16-bit Real Mode", 0
MSG_PROT_MODE: db "Successfully landed Obsidian Starlight in 32-bit Protected Mode", 0
times 510-($-$$) db 0
dw 0xaa55
;times 2097152 db 0 ; Only for VirtualBox

View file

@ -1,24 +0,0 @@
disk_load:
push dx
mov ah, 0x02
mov al, dh
mov ch, 0x00
mov dh, 0x00
mov cl, 0x02
int 0x13
jc disk_error
pop dx
cmp dh, al
jne disk_error
ret
disk_error:
mov ebx, DISK_ERROR_MSG
call writeLn
jmp $
DISK_ERROR_MSG: db "Disk read error!", 0

View file

@ -1,33 +0,0 @@
[ org 0x7c00 ]
write:
mov edx, 0
jmp print
writeLn:
mov edx, 1
print:
mov ah, 0x0e
print_loop:
mov al, [ ebx ]
cmp al, 0
je finish
int 0x10
add ebx, 0x01
call print_loop
finish:
cmp edx, 0
jle end
new_line:
mov al, 13
int 0x10
mov al, 10
int 0x10
dec edx
end:
ret

View file

@ -1,25 +0,0 @@
print_hex:
mov cx, 4
mov di, HEX_OUT + 6
convert_loop:
mov ax, dx
and ax, 0x000F
add al, '0'
cmp al, '9'
jbe not_hex_letter
add al, 7
not_hex_letter:
dec di
mov [di], al
shr dx, 4
loop convert_loop
mov bx, HEX_OUT
call writeLn
ret
HEX_OUT: db '0x0000', 0

View file

@ -1,34 +0,0 @@
; GDT
gdt_start:
gdt_null:
dd 0x0
dd 0x0
gdt_code:
dw 0xffff
dw 0x0
db 0x0
db 10011010b
db 11001111b
db 0x0
gdt_data:
dw 0xffff
dw 0x0
db 0x0
db 10010010b
db 11001111b
db 0x0
gdt_end:
gdt_descriptor:
dw gdt_end - gdt_start - 1
dd gdt_start
CODE_SEG equ gdt_code - gdt_start
DATA_SEG equ gdt_data - gdt_start

View file

@ -1,26 +0,0 @@
[bits 16]
switch_to_pm:
cli
lgdt [gdt_descriptor]
mov eax, cr0
or eax, 0x1
mov cr0, eax
jmp CODE_SEG:init_pm
[bits 32]
init_pm:
mov ax, DATA_SEG
mov ds, ax
mov ss, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ebp, 0x90000
mov esp, ebp
call BEGIN_PM

View file

@ -1,24 +0,0 @@
[bits 32]
; Define some constants
VIDEO_MEMORY equ 0xb8000
WHITE_ON_BLACK equ 0x0f
; prints a null - terminated string pointed to by EDX
print_string_pm:
pusha
mov edx, VIDEO_MEMORY ; Set edx to the start of vid mem.
print_string_pm_loop:
mov al, [ ebx ] ; Store the char at EBX in AL
mov ah, WHITE_ON_BLACK ; Store the attributes in AH
cmp al, 0 ; if ( al == 0) , at end of string , so
je print_string_pm_done ; jump to done
mov [ edx ], ax ; Store char and attributes at current
; character cell.
add ebx, 1 ; Increment EBX to the next char in string.
add edx, 2 ; Move to next character cell in vid mem.
jmp print_string_pm_loop ; loop around to print the next char.
print_string_pm_done:
popa
ret ; Return from the function

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,21 +0,0 @@
use std::path::PathBuf;
fn main() {
// set by cargo, build scripts should use this directory for output files
let out_dir = PathBuf::from(std::env::var_os("OUT_DIR").unwrap());
// set by cargo's artifact dependency feature, see
// https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#artifact-dependencies
let kernel = PathBuf::from(std::env::var_os("CARGO_BIN_FILE_KERNEL_kernel").unwrap());
// create an UEFI disk image (optional)
let uefi_path = out_dir.join("uefi.img");
bootloader::UefiBoot::new(&kernel).create_disk_image(&uefi_path).unwrap();
// create a BIOS disk image
let bios_path = out_dir.join("bios.img");
bootloader::BiosBoot::new(&kernel).create_disk_image(&bios_path).unwrap();
// pass the disk image paths as env variables to the `main.rs`
println!("cargo:rustc-env=UEFI_PATH={}", uefi_path.display());
println!("cargo:rustc-env=BIOS_PATH={}", bios_path.display());
}

16
kernel/Cargo.lock generated
View file

@ -1,16 +0,0 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "bootloader_api"
version = "0.11.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a35ba5100c2431e20b924c8103c2cf8adb919ed9880f625e8770c3cb9d1b06aa"
[[package]]
name = "geos"
version = "0.1.0"
dependencies = [
"bootloader_api",
]

View file

@ -1,15 +0,0 @@
[package]
name = "kernel"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
bootloader_api = "0.11.7"
[profile.dev]
panic = "abort"
[profile.release]
panic = "abort"

View file

@ -1,26 +0,0 @@
#![no_std]
#![no_main]
use core::panic::PanicInfo;
static HELLO: &[u8] = b"Hello World!";
bootloader_api::entry_point!(kernel_main);
fn kernel_main(boot_info: &'static mut bootloader_api::BootInfo) -> ! {
let vga_buffer = 0xb8000 as *mut u8;
for (i, &byte) in HELLO.iter().enumerate() {
unsafe {
*vga_buffer.offset(i as isize * 2) = byte;
*vga_buffer.offset(i as isize * 2 + 1) = 0xb;
}
}
loop {}
}
#[panic_handler]
fn handler(_info: &PanicInfo) -> ! {
loop {}
}

View file

@ -1,20 +0,0 @@
fn main() {
// read env variables that were set in build script
let uefi_path = env!("UEFI_PATH");
let bios_path = env!("BIOS_PATH");
// choose whether to start the UEFI or BIOS image
let uefi = false;
println!("{}", bios_path);
let mut cmd = std::process::Command::new("qemu-system-x86_64");
if uefi {
cmd.arg("-bios").arg(ovmf_prebuilt::ovmf_pure_efi());
cmd.arg("-drive").arg(format!("format=raw,file={uefi_path}"));
} else {
cmd.arg("-drive").arg(format!("format=raw,file={bios_path}"));
}
let mut child = cmd.spawn().unwrap();
child.wait().unwrap();
}