Merge pull request #15 from neuschaefer/dev

Serial terminal proof-of-concept
This commit is contained in:
Ry 2023-02-02 02:07:43 -08:00 committed by GitHub
commit e83676567e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 69 additions and 4 deletions

View File

@ -23,6 +23,9 @@ base_image/barclock.fxf: applications/barclock/main.asm
base_image/terminal.fxf: applications/terminal/main.asm $(wildcard applications/terminal/*.asm)
$(FOX32ASM) $< $@
base_image/serial.fxf: applications/serial/main.asm $(wildcard applications/terminal/*.asm)
$(FOX32ASM) $< $@
base_image/foxpaint.fxf: applications/foxpaint/main.asm
$(FOX32ASM) $< $@
@ -53,6 +56,7 @@ FILES = \
base_image/sh.fxf \
base_image/barclock.fxf \
base_image/terminal.fxf \
base_image/serial.fxf \
base_image/foxpaint.fxf \
base_image/bg.fxf \
base_image/bg.raw \

View File

@ -0,0 +1,61 @@
; serial terminal - spawn sh.fxf on the serial port
; start an instance of sh.fxf
call get_unused_task_id
mov.8 [shell_task_id], r0
mov r1, stream_struct
call new_shell_task
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
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
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 "../terminal/task.asm"
#include "../../../fox32rom/fox32rom.def"
#include "../../fox32os.def"

View File

@ -21,11 +21,11 @@ shell_task_loop:
shell_task_parse_key:
; first, check if enter, delete, or backspace was pressed
cmp.8 r0, 0x1C ; enter
cmp.8 r0, 0x0a ; enter
ifz jmp shell_key_down_enter
cmp.8 r0, 0x6F ; delete
cmp.8 r0, 0x7f ; delete
ifz jmp shell_key_down_backspace
cmp.8 r0, 0x0E ; backspace
cmp.8 r0, 0x08 ; backspace
ifz jmp shell_key_down_backspace
; then, overwrite the cursor
@ -35,7 +35,6 @@ shell_task_parse_key:
mov r0, r1
; then, add it to the text buffer and print it to the screen
call scancode_to_ascii
call print_character_to_terminal
call shell_push_character

View File

@ -67,6 +67,7 @@ key_down:
ifz push event_loop_end
ifz jmp caps_pressed
call scancode_to_ascii
mov.8 [read_buffer], r0
jmp event_loop_end