70 lines
1.2 KiB
NASM
70 lines
1.2 KiB
NASM
; serial terminal - spawn sh.fxf on the serial port
|
|
|
|
; start an instance of sh.fxf
|
|
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 call end_current_task
|
|
mov.8 [shell_task_id], r0
|
|
|
|
event_loop:
|
|
movz.8 r0, [shell_task_id]
|
|
call is_task_id_used
|
|
ifz call end_current_task
|
|
call yield_task
|
|
rjmp event_loop
|
|
|
|
print_str_to_terminal:
|
|
push r0
|
|
push r1
|
|
print_str_to_terminal_loop:
|
|
mov r1, [r0]
|
|
cmp r1, 0
|
|
ifz jmp print_str_to_terminal_out
|
|
out 0, r1
|
|
inc r0
|
|
jmp print_str_to_terminal_loop
|
|
print_str_to_terminal_out:
|
|
pop r1
|
|
pop r0
|
|
ret
|
|
|
|
stream_struct:
|
|
data.8 0x00
|
|
data.16 0x00
|
|
data.32 0x00
|
|
data.8 0x01
|
|
data.32 stream_read
|
|
data.32 stream_write
|
|
|
|
shell_task_id: data.8 0
|
|
sh_fxf_name: data.strz "sh.fxf"
|
|
|
|
stream_read:
|
|
in r0, 0
|
|
ret
|
|
|
|
stream_write:
|
|
push r0
|
|
movz.8 r0, [r0]
|
|
bts r0, 7
|
|
ifnz jmp stream_write_special
|
|
out 0, r0
|
|
pop r0
|
|
ret
|
|
stream_write_special:
|
|
cmp r0, 0x8a
|
|
ifz out 0, ' '
|
|
pop r0
|
|
ret
|
|
|
|
#include "../../../fox32rom/fox32rom.def"
|
|
#include "../../fox32os.def"
|