; Constants const SYS_STACK_START: 0x03fffff0 const BG_FRAMEBUFFER: 0x2000000 const SCREEN_WIDTH: 640 const SCREEN_HEIGHT: 480 const COLOR_WHITE: 0xffffffc0 const COLOR_BLUE: 0xffffff40 const COLOR_ORANGE: 0xff4080ff ; Globals const FRAMENR: 0x00000000 const SHOWING_LOGO: 0x00000004 org 0xf0000000 entry: mcl ; disable MMU mov rsp, SYS_STACK_START ; set stack pointer mov r0, version_str_1 call serial_print mov r0, version_str call serial_print mov r0, version_str_2 call serial_print mov r0, sha_str call serial_print mov r0, version_str_3 call serial_print call show_logo mov r0, BG_FRAMEBUFFER mov r1, 640 ; width mov r2, entry_str mov r3, 20 ; x mov r4, 20 ; y mov r5, 20 ; l mov r6, 620 ; r mov r7, 100000 ; bot mov r30, 16 mov r31, COLOR_WHITE call draw_str_at mov r2, version_str_1 call draw_str_at mov r2, version_str mov r31, COLOR_BLUE call draw_str_at mov r2, version_str_2 mov r31, COLOR_WHITE call draw_str_at mov r2, sha_str mov r31, COLOR_ORANGE call draw_str_at mov r31, COLOR_WHITE mov r2, version_str_3 call draw_str_at mov r31, COLOR_WHITE mov r2, credit_str_1 call draw_str_at mov r31, COLOR_BLUE mov r2, credit_str_2 call draw_str_at mov r31, COLOR_WHITE mov r2, credit_str_3 call draw_str_at mov r31, COLOR_ORANGE mov r2, credit_str_4 call draw_str_at mov r0, booting_str call serial_print halt entry_str: data.str "= " data.8 128 data.str "EN32OS =" data.8 10 data.8 10 data.8 0 ; defines version_str, sha_str #include "data/version.inc" version_str_1: data.str "version " data.8 0 version_str_2: data.str " (commit " data.8 0 version_str_3: data.str ")" data.8 10 data.8 0 credit_str_1: data.str "font by " data.8 0 credit_str_2: data.str "ultlang " data.8 129 data.8 0 credit_str_3: data.str ", os by " data.8 0 credit_str_4: data.str "xenia" data.8 0 booting_str: data.str "booting..." data.8 10 data.8 0 ; input: ; str: &str0 @ r0 ; returns: ; nothing ; clobbers: ; r0 serial_print: cmp.8 [r0], 0 ifz ret out 0x00000000, [r0] inc r0 jmp serial_print ; input: ; n: u64 @ r0 ; returns ; nothing ; clobbers: ; r0 serial_print_num: cmp r0, 0 ifz jmp serial_print_num_zero call serial_print_num_nonzero ret serial_print_num_nonzero: cmp r0, 0 ifz ret push r0 div r0, 10 call serial_print_num_nonzero pop r0 rem r0, 10 add r0, 48 out 0x00000000, r0 ret serial_print_num_zero: mov r0, serial_print_num_str_zero jmp serial_print ; tail call serial_print_num_str_zero: data.str "0" data.8 0 serial_print_nl: out 0x00000000, 10 ret #include "logo.asm" #include "text.asm"