fixed read syscall

This commit is contained in:
zongor 2025-09-25 15:27:59 -07:00
parent fe921a1050
commit 3733f432e7
2 changed files with 18 additions and 12 deletions

View File

@ -188,14 +188,18 @@ bool step_vm(VM *vm) {
size_reg = read_u8(vm, code, vm->pc); size_reg = read_u8(vm, code, vm->pc);
vm->pc++; vm->pc++;
path_ptr = frame->registers[path_reg]; /* R0: path pointer */ path_ptr = frame->registers[path_reg]; /* path pointer */
buffer_ptr = frame->registers[buffer_reg]; /* R1: buffer pointer */ size = frame->registers[size_reg]; /* size */
size = frame->registers[size_reg]; /* R2: size */ buffer_ptr = vm->mp;
dev = find_device_by_path(vm, (const char *)&vm->memory[path_ptr + 4]); dev = find_device_by_path(vm, (const char *)&vm->memory[path_ptr + 4]);
if (dev && dev->ops->read) { if (dev && dev->ops->read) {
vm->flag = vm->flag =
dev->ops->read(dev->data, (u8 *)&vm->memory[buffer_ptr], size); dev->ops->read(dev->data, (u8 *)&vm->memory[buffer_ptr + 4], size);
vm->mp += size + 4;
write_u32(vm, memory, buffer_ptr, size);
frame->end = vm->mp;
frame->registers[buffer_reg] = buffer_ptr;
} else { } else {
vm->flag = 0; vm->flag = 0;
} }

View File

@ -14,8 +14,10 @@
(load-immediate $7 &help) (load-immediate $7 &help)
(string-length $8 $7) (string-length $8 $7)
(syscall DEVICE-WRITE $10 $7 $8) (syscall DEVICE-WRITE $10 $7 $8)
;(load-immediate $8 32) (load-immediate $8 32)
;(syscall DEVICE-READ $10 $2 $8) ; FIXME (syscall DEVICE-READ $10 $2 $8)
(push $2)
(call &println)
(nat-to-string $4 $1) (nat-to-string $4 $1)
(push $4) (push $4)
(call &println) (call &println)
@ -34,5 +36,5 @@
(return))) (return)))
(data (data
(label terminal-namespace "/dev/term/0") (label terminal-namespace "/dev/term/0")
(label help "Enter a string:\n") (label help "Enter a string: ")
(label new-line "\n"))) (label new-line "\n")))