70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Rust
		
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Rust
		
	
	
	
| #![no_std]
 | |
| #![no_main]
 | |
| #![feature(asm)]
 | |
| #![feature(const_fn)]
 | |
| #![feature(lang_items)]
 | |
| #![feature(ptr_internals)] // until we mark with PhantomData instead?
 | |
| #![feature(core_intrinsics)]
 | |
| #![doc(html_root_url = "https://docs.metta.systems/")]
 | |
| #![allow(dead_code)]
 | |
| #![allow(unused_assignments)]
 | |
| #![allow(unused_must_use)]
 | |
| 
 | |
| #[cfg(not(any(target_arch = "aarch64", target_arch = "x86_64")))]
 | |
| use architecture_not_supported_sorry;
 | |
| 
 | |
| // use core::intrinsics::abort;
 | |
| 
 | |
| #[macro_use]
 | |
| extern crate bitflags;
 | |
| #[macro_use]
 | |
| extern crate register;
 | |
| extern crate cortex_a;
 | |
| extern crate rlibc;
 | |
| 
 | |
| use core::panic::PanicInfo;
 | |
| #[macro_use]
 | |
| pub mod arch;
 | |
| pub use arch::*;
 | |
| pub mod platform;
 | |
| 
 | |
| use core::fmt::Write;
 | |
| use platform::{
 | |
|     display::{Color, Size2d},
 | |
|     uart::MiniUart,
 | |
|     vc::VC,
 | |
| };
 | |
| 
 | |
| // User-facing kernel parts - syscalls and capability invocations.
 | |
| // pub mod vesper; -- no mod exported, because available through syscall interface
 | |
| 
 | |
| // Actual interfaces to call these syscalls are in vesper-user (similar to libsel4)
 | |
| // pub mod vesper; -- exported from vesper-user
 | |
| 
 | |
| #[panic_handler]
 | |
| fn panic(_info: &PanicInfo) -> ! {
 | |
|     // @todo rect() + drawtext("PANIC")?
 | |
|     endless_sleep()
 | |
| }
 | |
| 
 | |
| // Kernel entry point
 | |
| // arch crate is responsible for calling this
 | |
| pub fn kmain() -> ! {
 | |
|     let mut uart = MiniUart::new();
 | |
|     uart.init();
 | |
|     writeln!(uart, "Hey there, mini uart talking!");
 | |
| 
 | |
|     if let Some(mut display) = VC::init_fb(Size2d { x: 800, y: 600 }, &mut uart) {
 | |
|         display.rect(10, 10, 250, 250, Color::rgb(32, 96, 64).0);
 | |
|         display.draw_text(50, 50, "Hello there!", Color::rgb(128, 192, 255).0);
 | |
|         // display.draw_text(50, 150, core::fmt("Display width {}", display.width), Color::rgb(255,0,0).0);
 | |
| 
 | |
|         display.draw_text(150, 50, "RED", Color::rgb(255, 0, 0).0);
 | |
|         display.draw_text(160, 60, "GREEN", Color::rgb(0, 255, 0).0);
 | |
|         display.draw_text(170, 70, "BLUE", Color::rgb(0, 0, 255).0);
 | |
|     }
 | |
| 
 | |
|     writeln!(uart, "Bye, going to sleep now");
 | |
|     endless_sleep()
 | |
| }
 |