fixed read syscall
This commit is contained in:
parent
fe921a1050
commit
3733f432e7
22
src/vm/vm.c
22
src/vm/vm.c
|
@ -7,17 +7,17 @@
|
|||
do { \
|
||||
i32 cond; \
|
||||
u32 mask, target; \
|
||||
u8 src1, src2; \
|
||||
u8 src1, src2; \
|
||||
type value; \
|
||||
type value2; \
|
||||
target = read_u32(vm, code, vm->pc); \
|
||||
vm->pc+=4; \
|
||||
vm->pc += 4; \
|
||||
src1 = read_u8(vm, code, vm->pc); \
|
||||
vm->pc++; \
|
||||
src2 = read_u8(vm, code, vm->pc); \
|
||||
vm->pc++; \
|
||||
value = (type)frame->registers[src1]; \
|
||||
value2 = (type)frame->registers[src2]; \
|
||||
value = (type)frame->registers[src1]; \
|
||||
value2 = (type)frame->registers[src2]; \
|
||||
cond = !!(value op value2); \
|
||||
mask = -(u32)cond; \
|
||||
vm->pc = (target & mask) | (vm->pc & ~mask); \
|
||||
|
@ -33,7 +33,7 @@
|
|||
src2 = read_u8(vm, code, vm->pc); \
|
||||
vm->pc++; \
|
||||
frame->registers[dest] = \
|
||||
(type)frame->registers[src1] op (type)frame->registers[src2]; \
|
||||
(type)frame->registers[src1] op(type) frame->registers[src2]; \
|
||||
return true; \
|
||||
} while (0)
|
||||
|
||||
|
@ -188,14 +188,18 @@ bool step_vm(VM *vm) {
|
|||
size_reg = read_u8(vm, code, vm->pc);
|
||||
vm->pc++;
|
||||
|
||||
path_ptr = frame->registers[path_reg]; /* R0: path pointer */
|
||||
buffer_ptr = frame->registers[buffer_reg]; /* R1: buffer pointer */
|
||||
size = frame->registers[size_reg]; /* R2: size */
|
||||
path_ptr = frame->registers[path_reg]; /* path pointer */
|
||||
size = frame->registers[size_reg]; /* size */
|
||||
buffer_ptr = vm->mp;
|
||||
|
||||
dev = find_device_by_path(vm, (const char *)&vm->memory[path_ptr + 4]);
|
||||
if (dev && dev->ops->read) {
|
||||
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 {
|
||||
vm->flag = 0;
|
||||
}
|
||||
|
|
|
@ -14,8 +14,10 @@
|
|||
(load-immediate $7 &help)
|
||||
(string-length $8 $7)
|
||||
(syscall DEVICE-WRITE $10 $7 $8)
|
||||
;(load-immediate $8 32)
|
||||
;(syscall DEVICE-READ $10 $2 $8) ; FIXME
|
||||
(load-immediate $8 32)
|
||||
(syscall DEVICE-READ $10 $2 $8)
|
||||
(push $2)
|
||||
(call &println)
|
||||
(nat-to-string $4 $1)
|
||||
(push $4)
|
||||
(call &println)
|
||||
|
@ -34,5 +36,5 @@
|
|||
(return)))
|
||||
(data
|
||||
(label terminal-namespace "/dev/term/0")
|
||||
(label help "Enter a string:\n")
|
||||
(label help "Enter a string: ")
|
||||
(label new-line "\n")))
|
||||
|
|
Loading…
Reference in New Issue