keyboard input is working for cpu window again

This commit is contained in:
2022-07-09 13:18:51 +02:00
parent f559c5b7d4
commit eb724e8785
4 changed files with 35 additions and 15 deletions

View File

@@ -35,7 +35,7 @@ fn main() -> Result<()> {
println!(); println!();
println!("Usage:"); println!("Usage:");
#[cfg(any(feature = "native", feature = "browser"))] #[cfg(any(feature = "native", feature = "browser"))]
println!(" uw8 run [-t/--timeout <frames>] [--b/--browser] [-w/--watch] [-p/--pack] [-u/--uncompressed] [-l/--level] [-o/--output <out-file>] <file>"); println!(" uw8 run [-t/--timeout <frames>] [--no-gpu] [--b/--browser] [-w/--watch] [-p/--pack] [-u/--uncompressed] [-l/--level] [-o/--output <out-file>] <file>");
println!(" uw8 pack [-u/--uncompressed] [-l/--level] <in-file> <out-file>"); println!(" uw8 pack [-u/--uncompressed] [-l/--level] <in-file> <out-file>");
println!(" uw8 unpack <in-file> <out-file>"); println!(" uw8 unpack <in-file> <out-file>");
println!(" uw8 compile [-d/--debug] <in-file> <out-file>"); println!(" uw8 compile [-d/--debug] <in-file> <out-file>");
@@ -54,6 +54,8 @@ fn run(mut args: Arguments) -> Result<()> {
let watch_mode = args.contains(["-w", "--watch"]); let watch_mode = args.contains(["-w", "--watch"]);
#[allow(unused)] #[allow(unused)]
let timeout: Option<u32> = args.opt_value_from_str(["-t", "--timeout"])?; let timeout: Option<u32> = args.opt_value_from_str(["-t", "--timeout"])?;
#[allow(unused)]
let gpu = !args.contains("--no-gpu");
let mut config = Config::default(); let mut config = Config::default();
if args.contains(["-p", "--pack"]) { if args.contains(["-p", "--pack"]) {
@@ -93,7 +95,7 @@ fn run(mut args: Arguments) -> Result<()> {
unimplemented!(); unimplemented!();
#[cfg(feature = "native")] #[cfg(feature = "native")]
{ {
let mut microw8 = MicroW8::new(timeout)?; let mut microw8 = MicroW8::new(timeout, gpu)?;
if disable_audio { if disable_audio {
microw8.disable_audio(); microw8.disable_audio();
} }

View File

@@ -48,7 +48,7 @@ struct UW8WatchDog {
} }
impl MicroW8 { impl MicroW8 {
pub fn new(timeout: Option<u32>) -> Result<MicroW8> { pub fn new(timeout: Option<u32>, gpu: bool) -> Result<MicroW8> {
let mut config = wasmtime::Config::new(); let mut config = wasmtime::Config::new();
config.cranelift_opt_level(wasmtime::OptLevel::Speed); config.cranelift_opt_level(wasmtime::OptLevel::Speed);
if timeout.is_some() { if timeout.is_some() {
@@ -68,7 +68,7 @@ impl MicroW8 {
timeout: timeout.unwrap_or(0), timeout: timeout.unwrap_or(0),
}; };
uw8_window::run(move |framebuffer, gamepad, reset| { uw8_window::run(gpu, move |framebuffer, gamepad, reset| {
while let Ok(instance) = to_ui_rx.try_recv() { while let Ok(instance) = to_ui_rx.try_recv() {
state.instance = instance; state.instance = instance;
} }
@@ -245,10 +245,10 @@ impl State {
let mut sound_regs = [0u8; 32]; let mut sound_regs = [0u8; 32];
sound_regs.copy_from_slice(&memory[80..112]); sound_regs.copy_from_slice(&memory[80..112]);
if let Some(ref sound_tx) = instance.sound_tx { if let Some(ref sound_tx) = instance.sound_tx {
sound_tx.send(RegisterUpdate { let _ = sound_tx.send(RegisterUpdate {
time, time,
data: sound_regs, data: sound_regs,
})?; });
} }
let framebuffer_mem = &memory[120..(120 + 320 * 240)]; let framebuffer_mem = &memory[120..(120 + 320 * 240)];

View File

@@ -35,12 +35,25 @@ pub fn run(mut update: Box<dyn FnMut(&mut dyn Framebuffer, u32, bool) -> Instant
if let Some(sleep) = next_frame.checked_duration_since(Instant::now()) { if let Some(sleep) = next_frame.checked_duration_since(Instant::now()) {
std::thread::sleep(sleep); std::thread::sleep(sleep);
} }
let mut gamepad = 0;
for key in window.get_keys() {
if let Some(index) = GAMEPAD_KEYS
.iter()
.enumerate()
.find(|(_, &k)| k == key)
.map(|(i, _)| i)
{
gamepad |= 1 << index;
}
}
next_frame = update( next_frame = update(
&mut CpuFramebuffer { &mut CpuFramebuffer {
buffer: &mut buffer, buffer: &mut buffer,
}, },
0, gamepad,
false, window.is_key_pressed(Key::R, minifb::KeyRepeat::No),
); );
window.update_with_buffer(&buffer, 320, 240).unwrap(); window.update_with_buffer(&buffer, 320, 240).unwrap();
} }

View File

@@ -3,7 +3,11 @@ use std::time::Instant;
mod cpu; mod cpu;
mod gpu; mod gpu;
pub fn run<F: 'static + FnMut(&mut dyn Framebuffer, u32, bool) -> Instant>(update: F) -> ! { pub fn run<F: 'static + FnMut(&mut dyn Framebuffer, u32, bool) -> Instant>(
gpu: bool,
update: F,
) -> ! {
if gpu {
match gpu::Window::new() { match gpu::Window::new() {
Ok(window) => window.run(Box::new(update)), Ok(window) => window.run(Box::new(update)),
Err(err) => eprintln!( Err(err) => eprintln!(
@@ -11,6 +15,7 @@ pub fn run<F: 'static + FnMut(&mut dyn Framebuffer, u32, bool) -> Instant>(updat
err err
), ),
} }
}
cpu::run(Box::new(update)); cpu::run(Box::new(update));
} }