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}