librsmsx 0.3.13

a MSX emulator written in rust, a port from gomsx
Documentation
use sdl3::{render::Canvas, video::Window, EventPump, Sdl};

pub struct BaseSystem {
    sdl_context: Sdl,
    canvas: Canvas<Window>,
}

pub const MSX_W1: u32 = 320;
pub const MSX_W2: u32 = 256;
pub const MSX_H: u32 = 192;
pub const SCALE: f32 = 2.0;
pub const WIN_W: u32 = (MSX_W2 as f32 * SCALE * 1.5) as u32;
pub const WIN_H: u32 = (MSX_H as f32 * SCALE) as u32;

impl Default for BaseSystem {
    fn default() -> Self {
        Self::new()
    }
}

impl BaseSystem {
    pub fn new() -> Self {
        let sdl_context = sdl3::init().unwrap();
        let video_subsystem = sdl_context.video().unwrap();

        let window = video_subsystem
            .window("rust-sdl3 msx demo", WIN_W, WIN_H)
            .position_centered()
            .build()
            .map_err(|e| e.to_string())
            .unwrap();

        let canvas = window.into_canvas();
        Self {
            sdl_context,
            canvas,
        }
    }
    pub fn get_sdl_context(&mut self) -> &mut Sdl {
        &mut self.sdl_context
    }
    pub fn get_canvas(&mut self) -> &mut Canvas<Window> {
        &mut self.canvas
    }
    pub fn create_event_pump(&self) -> EventPump {
        self.sdl_context.event_pump().unwrap()
    }
}