librsmsx 0.5.2

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>,
    scale: f32,
}

pub const MSX_W1: u32 = 320;
pub const MSX_W2: u32 = 256;
pub const MSX_H: u32 = 192;

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

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

        let win_w: u32 = (MSX_W2 as f32 * scale * 1.5) as u32;
        let win_h: u32 = (MSX_H as f32 * scale) as u32;

        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,
            scale,
        }
    }
    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()
    }
    pub fn get_scale(&self) -> f32 {
        self.scale
    }
}