78 lines
1.8 KiB
NASM
78 lines
1.8 KiB
NASM
; launcher
|
|
|
|
entry:
|
|
; disable all overlays except the mouse cursor
|
|
mov r31, 0x1E
|
|
mov r0, 0x80000300
|
|
disable_all_overlays_loop:
|
|
out r0, 0
|
|
inc r0
|
|
loop disable_all_overlays_loop
|
|
|
|
; set up the menu bar
|
|
call enable_menu_bar
|
|
call clear_menu_bar
|
|
mov r0, menu_items_root
|
|
mov r1, 0xFFFFFFFF
|
|
call draw_menu_bar_root_items
|
|
|
|
; open the wallpaper file and draw it
|
|
mov r0, wallpaper_file_name
|
|
mov r1, 0
|
|
mov r2, wallpaper_file_struct
|
|
call ryfs_open
|
|
cmp r0, 0
|
|
ifz jmp skip_wallpaper
|
|
|
|
; read the wallpaper file directly into the background framebuffer
|
|
mov r0, 1228800 ; 640x480x4
|
|
mov r1, wallpaper_file_struct
|
|
mov r2, 0x02000000
|
|
call ryfs_read
|
|
skip_wallpaper:
|
|
; build a list of FXF files and add them to the menu
|
|
call get_fxf_files
|
|
call add_fxf_files_to_launcher_menu
|
|
|
|
event_loop:
|
|
call get_next_event
|
|
|
|
; did the user click the menu bar?
|
|
cmp r0, EVENT_TYPE_MENU_BAR_CLICK
|
|
ifz mov r0, menu_items_root
|
|
ifz call menu_bar_click_event
|
|
|
|
; is the user in a menu?
|
|
cmp r0, EVENT_TYPE_MENU_UPDATE
|
|
ifz call menu_update_event
|
|
|
|
; did the user click a menu item?
|
|
cmp r0, EVENT_TYPE_MENU_CLICK
|
|
ifz call menu_click_event
|
|
|
|
call yield_task
|
|
jmp event_loop
|
|
|
|
allocate_error:
|
|
mov r0, allocate_error_str
|
|
mov r1, 16
|
|
mov r2, 32
|
|
mov r3, 0xFFFFFFFF
|
|
mov r4, 0xFF000000
|
|
call draw_str_to_background
|
|
hang:
|
|
rjmp hang
|
|
allocate_error_str: data.str "error while allocating memory" data.8 0
|
|
|
|
wallpaper_file_name: data.str "wallpaprraw"
|
|
wallpaper_file_struct: data.32 0 data.32 0
|
|
|
|
#include "about.asm"
|
|
#include "file.asm"
|
|
#include "launch.asm"
|
|
#include "menu.asm"
|
|
|
|
; include system defs
|
|
#include "../../fox32rom/fox32rom.def"
|
|
#include "../fox32os.def"
|