1use jgenesis_proc_macros::deserialize_default_on_error; 2use pce_config::{PceAspectRatio, PceAudioResampler, PceInputDevice, PcePaletteType, PceRegion}; 3use serde::{Deserialize, Serialize}; 4use std::num::NonZeroU64; 5 6#[deserialize_default_on_error] 7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] 8#[serde(default)] 9pub struct PcEngineAppConfig { 10 pub region: PceRegion, 11 pub cpu_fast_clock_divider: NonZeroU64, 12 pub aspect_ratio: PceAspectRatio, 13 pub palette: PcePaletteType, 14 pub crop_overscan: bool, 15 pub remove_sprite_limits: bool, 16 pub audio_resampler: PceAudioResampler, 17 pub input_device: PceInputDevice, 18 pub turbo_tap_connected: [bool; pce_config::TURBO_TAP_GAMEPADS as usize], 19 pub allow_opposing_joypad_directions: bool, 20 pub allow_simultaneous_run_select: bool, 21} 22 23impl Default for PcEngineAppConfig { 24 fn default() -> Self { 25 Self { 26 region: PceRegion::default(), 27 cpu_fast_clock_divider: NonZeroU64::new(pce_config::NATIVE_FAST_CPU_DIVIDER).unwrap(), 28 aspect_ratio: PceAspectRatio::default(), 29 palette: PcePaletteType::default(), 30 crop_overscan: true, 31 remove_sprite_limits: false, 32 audio_resampler: PceAudioResampler::default(), 33 input_device: PceInputDevice::default(), 34 turbo_tap_connected: [true, true, false, false, false], 35 allow_opposing_joypad_directions: false, 36 allow_simultaneous_run_select: false, 37 } 38 } 39}