From 5bcd6d2c2d5209568941e93f2a2c2ca673944876 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Sat, 3 Oct 2015 17:36:03 +0200 Subject: [PATCH] Improve `Hello World!` code Avoid special core features and complicated iterator chaining to make the code simpler overall. --- src/lib.rs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 676ce844..bbf11c0a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,27 +13,26 @@ // limitations under the License. #![feature(no_std, lang_items)] -#![feature(core_slice_ext, core_str_ext, core_intrinsics)] #![no_std] extern crate rlibc; -use core::intrinsics::offset; - #[no_mangle] pub extern fn rust_main() { // ATTENTION: we have a very small stack and no guard page - let x = ["Hello", " ", "World", "!"]; - let screen_pointer = 0xb8000 as *const u16; - for (byte, i) in x.iter().flat_map(|s| s.bytes()).zip(0..) { - let c = 0x1f00 | (byte as u16); - unsafe { - let screen_char = offset(screen_pointer, i) as *mut u16; - *screen_char = c - } + let hello = b"Hello World!"; + let color_byte = 0x1f; // white foreground, blue background + + let mut hello_colored = [color_byte; 24]; + for (i, char_byte) in hello.into_iter().enumerate() { + hello_colored[i*2] = *char_byte; } + // write `Hello World!` to the center of the VGA text buffer + let buffer_ptr = (0xb8000 + 1988) as *mut _; + unsafe { *buffer_ptr = hello_colored }; + loop{} }