1use jgenesis_common::frontend::TimingMode; 2use jgenesis_proc_macros::deserialize_default_on_error; 3use serde::{Deserialize, Serialize}; 4use smsgg_config::{GgAspectRatio, SmsAspectRatio, SmsGgRegion, SmsModel}; 5use std::num::NonZeroU32; 6use std::path::PathBuf; 7use ti_sn76489::Sn76489Version; 8 9#[deserialize_default_on_error] 10#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] 11#[serde(default)] 12pub struct SmsGgAppConfig { 13 pub psg_version: Option<Sn76489Version>, 14 pub remove_sprite_limit: bool, 15 pub sms_aspect_ratio: SmsAspectRatio, 16 pub gg_aspect_ratio: GgAspectRatio, 17 pub forced_region: Option<SmsGgRegion>, 18 pub sms_timing_mode: TimingMode, 19 pub sms_model: SmsModel, 20 pub sms_crop_vertical_border: bool, 21 pub sms_crop_left_border: bool, 22 pub gg_frame_blending: bool, 23 pub gg_use_sms_resolution: bool, 24 pub fm_sound_unit_enabled: bool, 25 pub z80_divider: NonZeroU32, 26 pub allow_opposing_joypad_directions: bool, 27 pub sms_boot_from_bios: bool, 28 pub gg_boot_from_bios: bool, 29 pub sms_bios_path: Option<PathBuf>, 30 pub gg_bios_path: Option<PathBuf>, 31} 32 33impl Default for SmsGgAppConfig { 34 fn default() -> Self { 35 Self { 36 psg_version: None, 37 remove_sprite_limit: false, 38 sms_aspect_ratio: SmsAspectRatio::default(), 39 gg_aspect_ratio: GgAspectRatio::default(), 40 forced_region: None, 41 sms_timing_mode: TimingMode::default(), 42 sms_model: SmsModel::default(), 43 sms_crop_vertical_border: true, 44 sms_crop_left_border: false, 45 gg_frame_blending: false, 46 gg_use_sms_resolution: false, 47 fm_sound_unit_enabled: true, 48 z80_divider: NonZeroU32::new(smsgg_config::NATIVE_Z80_DIVIDER).unwrap(), 49 allow_opposing_joypad_directions: false, 50 sms_boot_from_bios: false, 51 gg_boot_from_bios: false, 52 sms_bios_path: None, 53 gg_bios_path: None, 54 } 55 } 56}