diff --git a/README.md b/README.md index 03a6301..ff3fbf5 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ syntaxe supplémentaire supportée: ## Features rajouter --features=[liste séparé par des virgules] - div_mul: Support des instruction de multiplication / division -- rgba: Écran au format RGBA plutot que 0BGR +- rgba: Écran au format RGBA plutot que 0BGR (alpha ignoré mais stocké) - rich_keyboard: rajoute trois champs de mmio pour le clavier. Voir MMIO - debug: repl similaire a la version python du simulateur - futex: accélère le programme. ne marche pas sur les macs. actif par default, utiliser --no-default-features pour le desactiver @@ -44,7 +44,7 @@ call 0 termine l'exécution du simulateur proprement ## mmio: - 0x01000000 à 0x0112c000 : Écran en lecture/écriture. un pixel par 32bits, de gauche a droite puis de bas en haut. Format de pixel en 0BGR, 4 bits par couleur. -Passage au format RGBA (a pour alpha) avec la feature rgba +Passage au format RGBA (alpha ignoré, mais stocké) avec la feature rgba - 0x01200000 : Clavier (scancode) (lecture seule) - 0x01200004 : Horloge (millisecondes écoulé depuis le début de la simulation, wrappe tout les 49 jours) (lecture seule) - 0x01200008 : Boutons de la souris (OR des boutons préssés) Gauche = 1, Droit=2, Clic Molette = 3, Autres non testé (lecture seule) diff --git a/simu/src/main.rs b/simu/src/main.rs index 3cbd095..b6f4c0c 100644 --- a/simu/src/main.rs +++ b/simu/src/main.rs @@ -16,7 +16,8 @@ use std::sync::{ use std::thread::scope; use std::time::{Duration, Instant}; -use pixels::{Error, Pixels, SurfaceTexture}; +use pixels::wgpu::{BlendState, Color}; +use pixels::{Error, Pixels, PixelsBuilder, SurfaceTexture}; use winit::application::ApplicationHandler; use winit::dpi::LogicalSize; use winit::event::WindowEvent; @@ -58,8 +59,7 @@ impl<'a> ApplicationHandler for App<'a> { Window::default_attributes() .with_title("bisare screen") .with_min_inner_size(size) - .with_maximized(true) - .with_transparent(true), + .with_maximized(true), ) .unwrap(), ) @@ -67,7 +67,11 @@ impl<'a> ApplicationHandler for App<'a> { self.w = Some(window.clone()); let size = window.inner_size(); let surface_texture = SurfaceTexture::new(size.width, size.height, window); - self.pixels = Some(Pixels::new(WIDTH, HEIGHT, surface_texture).unwrap()); + let pix = PixelsBuilder::new(WIDTH, HEIGHT, surface_texture) + .clear_color(Color::BLACK) + .blend_state(BlendState::REPLACE).build() ; + + self.pixels = Some(pix.unwrap()); } fn window_event( @@ -208,14 +212,10 @@ impl<'a> ApplicationHandler for App<'a> { for (addr, ubgr) in cpu::SHARED.screen_buf.iter().enumerate() { let raw = ubgr.load(std::sync::atomic::Ordering::Relaxed); #[cfg(not(feature = "rgba"))] - let rgba = [raw as u8, (raw >> 8) as u8, (raw >> 16) as u8, 0xff]; + let rgba: [u8;4] = raw.to_le_bytes(); #[cfg(feature = "rgba")] - let rgba = [ - (raw >> 24) as u8, - (raw >> 16) as u8, - (raw >> 8) as u8, - raw as u8, - ]; + let rgba = + raw.to_be_bytes(); for i in 0..4 { screen[addr * 4 + i] = rgba[i]; }