diff --git a/applications/terminal/main.asm b/applications/terminal/main.asm index ae160a9..e3d77d0 100644 --- a/applications/terminal/main.asm +++ b/applications/terminal/main.asm @@ -17,10 +17,18 @@ call fill_window ; start an instance of sh.fxf - call get_unused_task_id + call get_current_disk_id + mov r1, r0 + mov r0, sh_fxf_name + mov r2, stream_struct + mov r3, 0 + mov r4, 0 + mov r5, 0 + mov r6, 0 + call launch_fxf_from_disk + cmp r0, 0xFFFFFFFF + ifz jmp sh_fxf_missing mov.8 [shell_task_id], r0 - mov r1, stream_struct - call new_shell_task event_loop: mov r0, window_struct @@ -99,9 +107,19 @@ close_window: call end_current_task jmp event_loop_end +sh_fxf_missing: + mov r0, sh_fxf_missing_str + call print_str_to_terminal +sh_fxf_missing_yield_loop: + call yield_task + rjmp sh_fxf_missing_yield_loop + window_title: data.strz "Terminal" window_struct: data.fill 0, 36 +sh_fxf_name: data.strz "sh.fxf" +sh_fxf_missing_str: data.str "sh could not be launched! hanging here" data.8 10 data.8 0 + shell_task_id: data.8 0 stream_struct: @@ -113,7 +131,6 @@ stream_struct: data.32 stream_write_to_terminal #include "stream.asm" - #include "task.asm" #include "text.asm" ; include system defs diff --git a/applications/terminal/task.asm b/applications/terminal/task.asm deleted file mode 100644 index 4d7d608..0000000 --- a/applications/terminal/task.asm +++ /dev/null @@ -1,72 +0,0 @@ -; sh.fxf launching routines - -; start an instance of sh.fxf -; inputs: -; r0: task ID -; r1: pointer to stream struct -; outputs: -; none -new_shell_task: - push r0 - push r1 - - ; open the file - call get_current_disk_id - mov r1, r0 - mov r0, sh_fxf_name - mov r2, sh_fxf_struct - call open - cmp r0, 0 - ifz jmp sh_fxf_missing - - ; allocate memory for the binary - mov r0, sh_fxf_struct - call ryfs_get_size - call allocate_memory - cmp r0, 0 - ifz jmp sh_fxf_missing - mov [sh_fxf_binary_ptr], r0 - - ; read the file into memory - mov r0, sh_fxf_struct - mov r1, [sh_fxf_binary_ptr] - call ryfs_read_whole_file - - ; allocate a 64KiB stack - mov r0, 65536 - call allocate_memory - cmp r0, 0 - ifz jmp sh_fxf_missing - mov [sh_fxf_stack_ptr], r0 - - ; push the stream struct pointer to the shell's stack - add r0, 65532 - pop r1 - mov [r0], r1 - mov r10, r0 - - ; relocate the binary - mov r0, [sh_fxf_binary_ptr] - call parse_fxf_binary - - ; then start the task - mov r1, r0 ; initial instruction pointer - pop r0 ; task ID - mov r2, r10 ; initial stack pointer - mov r3, [sh_fxf_binary_ptr] ; pointer to task code block to free when task ends - mov r4, [sh_fxf_stack_ptr] ; pointer to task stack block to free when task ends - call new_task - ret - -sh_fxf_missing: - mov r0, sh_fxf_missing_str - call print_str_to_terminal -sh_fxf_missing_yield_loop: - call yield_task - rjmp sh_fxf_missing_yield_loop - -sh_fxf_name: data.strz "sh.fxf" -sh_fxf_struct: data.fill 0, 8 -sh_fxf_missing_str: data.str "sh could not be launched! hanging here" data.8 10 data.8 0 -sh_fxf_binary_ptr: data.32 0 -sh_fxf_stack_ptr: data.32 0