SYS
This commit is contained in:
parent
9d2a26fae3
commit
bc54f34a4d
@ -14,25 +14,50 @@ FILE* NULLABLE(fileFromN)(VM* vm, u32 file_n){
|
||||
return f;
|
||||
}
|
||||
|
||||
/// SYS
|
||||
/// ax - func code
|
||||
i32 SYS_impl(VM* vm){
|
||||
u8 func_code = vm->ax.u8v0;
|
||||
size_t result_code = 0;
|
||||
switch(func_code){
|
||||
// sys_read
|
||||
// bx - file n
|
||||
// cx - buffer ptr
|
||||
// dx - buffer size
|
||||
case 0:;
|
||||
result_code = fread(vm->data + vm->cx.u32v, 1, vm->dx.u32v, fileFromN(vm, vm->bx.u32v));
|
||||
break;
|
||||
i32 SYS_read(VM* vm){
|
||||
const u32 file_n = vm->bx.u32v;
|
||||
u8* const buf = vm->data + vm->cx.u32v;
|
||||
const u32 size = vm->dx.u32v;
|
||||
|
||||
if(buf + size > vm->data + vm->data_size)
|
||||
return 40;
|
||||
|
||||
FILE* f = fileFromN(vm, file_n);
|
||||
return fread(buf, 1, size, f);
|
||||
}
|
||||
|
||||
// sys_write
|
||||
// bx - file n
|
||||
// cx - buffer ptr
|
||||
// dx - buffer size
|
||||
i32 SYS_write(VM* vm){
|
||||
const u32 file_n = vm->bx.u32v;
|
||||
u8* const buf = vm->data + vm->cx.u32v;
|
||||
const u32 size = vm->dx.u32v;
|
||||
|
||||
if(buf + size > vm->data + vm->data_size)
|
||||
return 41;
|
||||
|
||||
FILE* f = fileFromN(vm, file_n);
|
||||
return fwrite(buf, 1, size, f);
|
||||
}
|
||||
|
||||
/// SYS
|
||||
/// before call: ax - func code
|
||||
/// after call: ax - result code
|
||||
i32 SYS_impl(VM* vm){
|
||||
u8 func_code = vm->ax.u8v0;
|
||||
u32 result_code = 0;
|
||||
switch(func_code){
|
||||
case 0:
|
||||
result_code = SYS_read(vm);
|
||||
break;
|
||||
case 1:;
|
||||
result_code = fwrite(vm->data + vm->cx.u32v, 1, vm->dx.u32v, fileFromN(vm, vm->bx.u32v));
|
||||
result_code = SYS_write(vm);
|
||||
break;
|
||||
default:
|
||||
VM_setError(vm, "invalid system call (%x) ", func_code);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user