xen32os/xenrom/main.asm

152 lines
2.9 KiB
NASM

; 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 r31, COLOR_WHITE
mov r2, booting_str
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 10 data.8 10 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"