2024-02-07 19:32:27 +01:00
|
|
|
; Constants
|
|
|
|
|
|
|
|
const SYS_STACK_START: 0x03fffff0
|
|
|
|
const BG_FRAMEBUFFER: 0x2000000
|
|
|
|
|
|
|
|
const SCREEN_WIDTH: 640
|
|
|
|
const SCREEN_HEIGHT: 480
|
|
|
|
|
2024-02-07 22:52:21 +01:00
|
|
|
const COLOR_WHITE: 0xffffffc0
|
|
|
|
const COLOR_BLUE: 0xffffff40
|
|
|
|
const COLOR_ORANGE: 0xff4080ff
|
2024-02-07 19:32:27 +01:00
|
|
|
|
|
|
|
; 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
|
|
|
|
|
2024-02-07 22:52:21 +01:00
|
|
|
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, 2
|
|
|
|
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
|
|
|
|
|
|
|
|
|
2024-02-07 19:32:27 +01:00
|
|
|
mov r0, booting_str
|
|
|
|
call serial_print
|
|
|
|
|
|
|
|
halt
|
|
|
|
|
2024-02-07 22:52:21 +01:00
|
|
|
entry_str: data.str "= " data.8 128 data.str "EN32OS =" data.8 10 data.8 0
|
2024-02-07 19:32:27 +01:00
|
|
|
; defines version_str, sha_str
|
|
|
|
#include "data/version.inc"
|
|
|
|
|
2024-02-07 22:52:21 +01:00
|
|
|
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 0
|
|
|
|
credit_str_3: data.str ", os by " data.8 0
|
|
|
|
credit_str_4: data.str "xenia" data.8 0
|
2024-02-07 19:32:27 +01:00
|
|
|
|
|
|
|
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"
|
2024-02-07 22:52:21 +01:00
|
|
|
#include "text.asm"
|
2024-02-07 19:32:27 +01:00
|
|
|
|