From 3870289252766792265cb75bc80c559b196172c8 Mon Sep 17 00:00:00 2001 From: Ry Date: Sun, 2 Apr 2023 13:08:55 -0700 Subject: [PATCH] kernel/vfs: Add :serial named stream --- kernel/vfs/serial.asm | 55 +++++++++++++++++++++++++++++++++++++++++++ kernel/vfs/vfs.asm | 7 ++++++ 2 files changed, 62 insertions(+) create mode 100644 kernel/vfs/serial.asm diff --git a/kernel/vfs/serial.asm b/kernel/vfs/serial.asm new file mode 100644 index 0000000..d1267ce --- /dev/null +++ b/kernel/vfs/serial.asm @@ -0,0 +1,55 @@ +; serial vfs stream routines + +serial_vfs_stream_name: data.strz "serial" + +; open a serial port stream +; inputs: +; r2: file struct: pointer to a blank file struct (stream) +; outputs: +; r0: non-zero +open_stream_serial: + push r2 + + mov.8 [r2], 0 ; write file_reserved_1 + inc r2 + mov.16 [r2], 0 ; write file_reserved_2 + add r2, 2 + mov [r2], 0 ; write file_seek_offset + add r2, 4 + mov.8 [r2], 1 ; write file_system_type + inc r2 + mov [r2], serial_stream_read ; write file_read_call + add r2, 4 + mov [r2], serial_stream_write ; write file_write_call + add r2, 4 + mov [r2], 0 ; write file_size + add r2, 4 + mov [r2], 0 ; write file_reserved_3 + add r2, 4 + mov [r2], 0 ; write file_reserved_4 + add r2, 4 + mov [r2], 0 ; write file_reserved_5 + + pop r2 + mov r0, 1 + ret + +; read a byte from the serial port +; inputs: +; r0: seek offset (unused) +; outputs: +; r0: byte +serial_stream_read: + in r0, 0 + ret + +; write a byte to the serial port +; inputs: +; r0: pointer to source buffer +; r1: seek offset (unused) +; outputs: +; none +serial_stream_write: + movz.8 r1, [r0] + out 0, r1 + ret diff --git a/kernel/vfs/vfs.asm b/kernel/vfs/vfs.asm index e322e92..664c62b 100644 --- a/kernel/vfs/vfs.asm +++ b/kernel/vfs/vfs.asm @@ -50,6 +50,12 @@ open_stream: ifz pop r1 ifz jmp open_stream_fb + ; serial + mov r1, serial_vfs_stream_name + call compare_string + ifz pop r1 + ifz jmp open_stream_serial + pop r1 mov r0, 0 ret @@ -302,3 +308,4 @@ convert_filename_output_string: data.fill 0, 12 ; named streams #include "vfs/fb.asm" + #include "vfs/serial.asm"