Compare commits
8 Commits
cleanup-re
...
e8c4847b12
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e8c4847b12 | ||
|
|
7e4cedcdc0 | ||
|
|
80a5815731 | ||
|
|
3ef8cbbf8c | ||
|
|
95c8480aac | ||
|
|
d504aa2a6d | ||
|
|
288dd537c0 | ||
|
|
4d80e10dbd |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,5 +1,8 @@
|
||||
|
||||
*.o
|
||||
*.iso
|
||||
*.bin
|
||||
gamarjoba_munde/gamarjoba
|
||||
baremetal_gamarjoba/baremetal_gamarjoba
|
||||
keyboard/keyboard_kernel
|
||||
target/
|
||||
|
||||
48
Makefile
48
Makefile
@@ -1,48 +0,0 @@
|
||||
|
||||
|
||||
gamarjoba: gamarjoba.asm
|
||||
nasm -f elf64 -o gamarjoba.o gamarjoba.asm
|
||||
ld -o gamarjoba gamarjoba.o
|
||||
|
||||
run_gamarjoba: gamarjoba
|
||||
./gamarjoba
|
||||
|
||||
baremetal_gamarjoba: baremetal_gamarjoba.asm include.c
|
||||
gcc -m32 -ffreestanding -o include.o -c include.c
|
||||
nasm -f elf32 baremetal_gamarjoba.asm
|
||||
ld -m elf_i386 -nostdlib -T linker.ld baremetal_gamarjoba.o include.o -o baremetal_gamarjoba
|
||||
|
||||
run_baremetal_gamarjoba: baremetal_gamarjoba
|
||||
qemu-system-i386 -kernel baremetal_gamarjoba
|
||||
|
||||
keyboard: keyboard.asm c_keyboard.c keyboard.rs
|
||||
gcc -m32 -ffreestanding -o c_keyboard.o -c c_keyboard.c
|
||||
rustc --emit obj -o rust_keyboard.o --target i686-unknown-linux-gnu keyboard.rs
|
||||
nasm -f elf32 keyboard.asm
|
||||
ld -m elf_i386 -nostdlib -T linker.ld keyboard.o c_keyboard.o rust_keyboard.o -o keyboard
|
||||
|
||||
run_keyboard: keyboard
|
||||
qemu-system-i386 -kernel keyboard
|
||||
|
||||
run_terminal_keyboard: keyboard
|
||||
qemu-system-i386 -display curses -kernel keyboard
|
||||
|
||||
|
||||
lightshow: lightshow.asm lightshow.rs
|
||||
rustc --emit obj -o lightshow_rust.o --target i686-unknown-linux-gnu -g lightshow.rs
|
||||
nasm -f elf32 -g lightshow.asm
|
||||
ld -m elf_i386 -nostdlib -T linker.ld lightshow.o lightshow_rust.o -o lightshow
|
||||
|
||||
run_lightshow: lightshow
|
||||
qemu-system-i386 -kernel lightshow
|
||||
|
||||
debug_lightshow: lightshow
|
||||
qemu-system-i386 -kernel lightshow -gdb tcp::9999 -S
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f *.o
|
||||
rm -f gamarjoba
|
||||
rm -f baremetal_gamarjoba
|
||||
rm -f keyboard
|
||||
rm -f lightshow
|
||||
@@ -9,6 +9,7 @@ This repo contains the following executables:
|
||||
* `baremetal_gamarjoba` - bare-metal x86 program run with QEMU
|
||||
* `keyboard` - reads keycode information from keyboard. Also uses both Rust and C includes.
|
||||
* `lightshow` - NOTE: Broken - an attempt at a substantial #[no_core] rust object file, currently crashes rustc
|
||||
* `rust_kernel` - me following the 2015 version of the Phil Opp rust bare metal tutorial. Kept around for posterity
|
||||
|
||||
# Useful links
|
||||
|
||||
|
||||
6
justfile
6
justfile
@@ -1,6 +1,12 @@
|
||||
default:
|
||||
just --list
|
||||
|
||||
execute_rust_os:
|
||||
#!/usr/bin/env bash
|
||||
cd os-in-rust
|
||||
cargo bootimage
|
||||
qemu-system-x86_64 -drive format=raw,file=target/x86_64_target/debug/bootimage-os-in-rust.bin
|
||||
|
||||
run_gamarjoba: build_gamarjoba
|
||||
./gamarjoba_munde/gamarjoba
|
||||
|
||||
|
||||
6
os-in-rust/.cargo/config.toml
Normal file
6
os-in-rust/.cargo/config.toml
Normal file
@@ -0,0 +1,6 @@
|
||||
[unstable]
|
||||
build-std = ["core", "compiler_builtins"]
|
||||
build-std-features = ["compiler-builtins-mem"]
|
||||
|
||||
[build]
|
||||
target = "x86_64_target.json"
|
||||
16
os-in-rust/Cargo.lock
generated
Normal file
16
os-in-rust/Cargo.lock
generated
Normal file
@@ -0,0 +1,16 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "bootloader"
|
||||
version = "0.9.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a62c8f6168cd106687ee36a2b71a46c4144d73399f72814104d33094b8092fd2"
|
||||
|
||||
[[package]]
|
||||
name = "os-in-rust"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"bootloader",
|
||||
]
|
||||
10
os-in-rust/Cargo.toml
Normal file
10
os-in-rust/Cargo.toml
Normal file
@@ -0,0 +1,10 @@
|
||||
[package]
|
||||
name = "os-in-rust"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
#bootloader = "0.10.12"
|
||||
bootloader = "0.9.8"
|
||||
30
os-in-rust/src/main.rs
Normal file
30
os-in-rust/src/main.rs
Normal file
@@ -0,0 +1,30 @@
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
use core::panic::PanicInfo;
|
||||
|
||||
#[panic_handler]
|
||||
fn panic(_info: &PanicInfo) -> ! {
|
||||
loop {}
|
||||
}
|
||||
|
||||
static GAMARJOBA: &[u8] = b"Gamarjoba, MVNDE!";
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn _start() -> ! {
|
||||
let vga_buffer = 0xb8000 as *mut u8;
|
||||
|
||||
for (i, &byte) in GAMARJOBA.iter().enumerate() {
|
||||
let i = i as isize;
|
||||
unsafe {
|
||||
*vga_buffer.offset(i * 2) = byte;
|
||||
*vga_buffer.offset(i * 2 + 1) = 0xd;
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
loop {}
|
||||
}
|
||||
|
||||
18
os-in-rust/x86_64_target.json
Normal file
18
os-in-rust/x86_64_target.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"llvm-target": "x86_64-unknown-none",
|
||||
"data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128",
|
||||
"arch": "x86_64",
|
||||
"target-endian": "little",
|
||||
"target-pointer-width": "64",
|
||||
"target-c-int-width": "32",
|
||||
"os": "none",
|
||||
"executables": true,
|
||||
|
||||
"linker-flavor": "ld.lld",
|
||||
"linker": "rust-lld",
|
||||
|
||||
"panic-strategy": "abort",
|
||||
"disable-redzone": true,
|
||||
|
||||
"features": "-mmx,-sse,+soft-float"
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
global start
|
||||
|
||||
section .text
|
||||
bits 32
|
||||
start:
|
||||
mov dword [0xb800], 0x2f4b2f4f
|
||||
hlt
|
||||
7
thousand-line-os/Cargo.lock
generated
Normal file
7
thousand-line-os/Cargo.lock
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "thousand-line-os"
|
||||
version = "0.1.0"
|
||||
6
thousand-line-os/Cargo.toml
Normal file
6
thousand-line-os/Cargo.toml
Normal file
@@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "thousand-line-os"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
3
thousand-line-os/README.md
Normal file
3
thousand-line-os/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Thousand Line OS
|
||||
|
||||
Aspirational. Following https://operating-system-in-1000-lines.vercel.app/en/
|
||||
11
thousand-line-os/justfile
Normal file
11
thousand-line-os/justfile
Normal file
@@ -0,0 +1,11 @@
|
||||
_default:
|
||||
@just --list
|
||||
|
||||
|
||||
|
||||
run:
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
QEMU=qemu-system-riscv32
|
||||
# Start QEMU
|
||||
$QEMU -machine virt -bios default -nographic -serial mon:stdio --no-reboot
|
||||
28
thousand-line-os/kernel.ld
Normal file
28
thousand-line-os/kernel.ld
Normal file
@@ -0,0 +1,28 @@
|
||||
ENTRY(boot)
|
||||
|
||||
SECTIONS {
|
||||
. = 0x80200000;
|
||||
|
||||
.text :{
|
||||
KEEP(*(.text.boot));
|
||||
*(.text .text.*);
|
||||
}
|
||||
|
||||
.rodata : ALIGN(4) {
|
||||
*(.rodata .rodata.*);
|
||||
}
|
||||
|
||||
.data : ALIGN(4) {
|
||||
*(.data .data.*);
|
||||
}
|
||||
|
||||
.bss : ALIGN(4) {
|
||||
__bss = .;
|
||||
*(.bss .bss.* .sbss .sbss.*);
|
||||
__bss_end = .;
|
||||
}
|
||||
|
||||
. = ALIGN(4);
|
||||
. += 128 * 1024; /* 128KB */
|
||||
__stack_top = .;
|
||||
}
|
||||
14
thousand-line-os/src/lib.rs
Normal file
14
thousand-line-os/src/lib.rs
Normal file
@@ -0,0 +1,14 @@
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn _start() -> ! {
|
||||
init()
|
||||
}
|
||||
|
||||
fn init() -> ! {
|
||||
loop {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user