mirror of
https://github.com/ringtailsoftware/uvm32.git
synced 2026-06-05 22:43:39 +00:00
Add UVM32_SYSCALL_RAND to get a "true" random number from the host, as I want to play zigtris and not have it be the same every time.
This commit is contained in:
parent
3d83844d5c
commit
d780c4e69d
6 changed files with 18 additions and 1 deletions
|
|
@ -50,6 +50,7 @@ static uint32_t syscall(uint32_t id, uint32_t param1, uint32_t param2) {
|
|||
#define printbuf(x, y) syscall_cast(UVM32_SYSCALL_PRINTBUF, x, y)
|
||||
#define render(x, y) syscall_cast(UVM32_SYSCALL_RENDER, x, y)
|
||||
#define getkey() syscall_cast(UVM32_SYSCALL_GETKEY, 0, 0)
|
||||
#define rand() syscall_cast(UVM32_SYSCALL_RAND, 0, 0)
|
||||
|
||||
extern char _estack;
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ export fn main() void {
|
|||
var gameRunning = true;
|
||||
var lastUpdate:u32 = 0;
|
||||
|
||||
zigtris.gamesetup(console, uvm.millis()) catch |err| {
|
||||
zigtris.gamesetup(console, uvm.rand()) catch |err| {
|
||||
_ = console.print("err {any}\n", .{err}) catch 0;
|
||||
_ = console.flush() catch 0;
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -27,6 +27,10 @@ pub inline fn millis() u32 {
|
|||
return syscall(uvm32.UVM32_SYSCALL_MILLIS, 0, 0);
|
||||
}
|
||||
|
||||
pub inline fn rand() u32 {
|
||||
return syscall(uvm32.UVM32_SYSCALL_RAND, 0, 0);
|
||||
}
|
||||
|
||||
// dupeZ would be better, but want to avoid using an allocator
|
||||
// this is of course, unsafe...
|
||||
var termination_buf:[128]u8 = undefined;
|
||||
|
|
|
|||
|
|
@ -14,4 +14,6 @@
|
|||
#define UVM32_SYSCALL_GETKEY 0x00000009
|
||||
#define UVM32_SYSCALL_RENDERAUDIO 0x0000000A
|
||||
#define UVM32_SYSCALL_CANRENDERAUDIO 0x0000000B
|
||||
#define UVM32_SYSCALL_RAND 0x0000000C
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -241,6 +241,8 @@ int main(int argc, char *argv[]) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
srand(clock());
|
||||
|
||||
uvm32_init(vmst);
|
||||
|
||||
if (!uvm32_load(vmst, rom, romlen)) {
|
||||
|
|
@ -374,6 +376,9 @@ int main(int argc, char *argv[]) {
|
|||
case UVM32_SYSCALL_MILLIS: {
|
||||
uvm32_arg_setval(vmst, &evt, RET, SDL_GetTicks());
|
||||
} break;
|
||||
case UVM32_SYSCALL_RAND:
|
||||
uvm32_arg_setval(&vmst, &evt, RET, rand());
|
||||
break;
|
||||
case UVM32_SYSCALL_GETC: {
|
||||
uvm32_arg_setval(vmst, &evt, RET, 0xFFFFFFFF);
|
||||
} break;
|
||||
|
|
|
|||
|
|
@ -190,6 +190,8 @@ int main(int argc, char *argv[]) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
srand(clock());
|
||||
|
||||
uvm32_init(&vmst);
|
||||
|
||||
if (!uvm32_load(&vmst, rom, romlen)) {
|
||||
|
|
@ -264,6 +266,9 @@ int main(int argc, char *argv[]) {
|
|||
case UVM32_SYSCALL_PRINTHEX:
|
||||
printf("%08x", uvm32_arg_getval(&vmst, &evt, ARG0));
|
||||
break;
|
||||
case UVM32_SYSCALL_RAND:
|
||||
uvm32_arg_setval(&vmst, &evt, RET, rand());
|
||||
break;
|
||||
case UVM32_SYSCALL_MILLIS: {
|
||||
clock_t now = clock() / (CLOCKS_PER_SEC / 1000);
|
||||
uvm32_arg_setval(&vmst, &evt, RET, now - start_time);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue