add frame counter at memory location 72

This commit is contained in:
2024-06-16 14:10:18 +02:00
parent b85f96b0bb
commit fb3fd5e8bb
5 changed files with 18 additions and 9 deletions

View File

@@ -3,14 +3,16 @@ include "../include/microw8-api.cwa"
export fn upd() { export fn upd() {
let i: i32; let i: i32;
loop pixels { loop pixels {
let inline t = time() * 63 as f32; let inline t = 16!56;
let lazy x = (i % 320 - 160) as f32; let inline x = (i % 320 - 160) as f32;
let lazy y = (i / 320 - 120) as f32; let inline y = (i #/ 320 - 120) as f32;
let inline d = 40000 as f32 / sqrt(x * x + y * y); let inline d = 0xa000 as f32 / sqrt(x * x + y * y);
let inline u = atan2(x, y) * (512.0 / 3.141); let inline a = atan2(x, y) * 163_f; // (512 / pi)
let inline c = ((i32.trunc_sat_f32_s(d + t * 2 as f32) ^ i32.trunc_sat_f32_s(u + t)) & 255) >> 4; let inline u = i32.trunc_sat_f32_s(a) + t;
let inline v = i32.trunc_sat_f32_s(d) + t * 2;
let inline c = ((v ^ u) #/ 16) % 16;
i?FRAMEBUFFER = c; i?FRAMEBUFFER = c;
branch_if (i := i + 1) < 320*240: pixels; branch_if (i := i + 1) < 320*240: pixels;
} }
} }

View File

@@ -21,7 +21,7 @@ loaded.
00000-00040: user memory 00000-00040: user memory
00040-00044: time since module start in ms 00040-00044: time since module start in ms
00044-0004c: gamepad state 00044-0004c: gamepad state
0004c-00050: reserved 0004c-00050: number of frames since module start
00050-00070: sound data (synced to sound thread) 00050-00070: sound data (synced to sound thread)
00070-00078: reserved 00070-00078: reserved
00078-12c78: frame buffer 00078-12c78: frame buffer

File diff suppressed because one or more lines are too long

View File

@@ -27,6 +27,7 @@ struct UW8Instance {
end_frame: TypedFunc<(), ()>, end_frame: TypedFunc<(), ()>,
update: Option<TypedFunc<(), ()>>, update: Option<TypedFunc<(), ()>>,
start_time: Instant, start_time: Instant,
frame_counter: u32,
watchdog: Arc<Mutex<UW8WatchDog>>, watchdog: Arc<Mutex<UW8WatchDog>>,
sound_tx: Option<mpsc::SyncSender<RegisterUpdate>>, sound_tx: Option<mpsc::SyncSender<RegisterUpdate>>,
} }
@@ -159,6 +160,7 @@ impl super::Runtime for MicroW8 {
end_frame, end_frame,
update, update,
start_time: Instant::now(), start_time: Instant::now(),
frame_counter: 0,
watchdog, watchdog,
sound_tx, sound_tx,
}); });
@@ -191,8 +193,11 @@ impl super::Runtime for MicroW8 {
let mem = instance.memory.data_mut(&mut instance.store); let mem = instance.memory.data_mut(&mut instance.store);
mem[64..68].copy_from_slice(&time.to_le_bytes()); mem[64..68].copy_from_slice(&time.to_le_bytes());
mem[68..72].copy_from_slice(&input.gamepads); mem[68..72].copy_from_slice(&input.gamepads);
mem[72..76].copy_from_slice(&instance.frame_counter.to_le_bytes());
} }
instance.frame_counter = instance.frame_counter.wrapping_add(1);
instance.store.set_epoch_deadline(self.timeout as u64); instance.store.set_epoch_deadline(self.timeout as u64);
if let Some(ref update) = instance.update { if let Some(ref update) = instance.update {
if let Err(err) = update.call(&mut instance.store, ()) { if let Err(err) = update.call(&mut instance.store, ()) {

View File

@@ -240,6 +240,7 @@ export default function MicroW8(screen, config = {}) {
await audioReadyPromise; await audioReadyPromise;
let startTime = Date.now(); let startTime = Date.now();
let frameCounter = 0;
const timePerFrame = 1000 / 60; const timePerFrame = 1000 / 60;
@@ -306,6 +307,7 @@ export default function MicroW8(screen, config = {}) {
let time = Date.now() - startTime; let time = Date.now() - startTime;
u32Mem[16] = time; u32Mem[16] = time;
u32Mem[17] = pad | gamepad; u32Mem[17] = pad | gamepad;
u32Mem[18] = frameCounter++;
if(instance.exports.upd) { if(instance.exports.upd) {
instance.exports.upd(); instance.exports.upd();
} }