nes.rsannotatednes.rssource48 lines · 1.5 KB · raw
1use jgenesis_common::frontend::TimingMode;
2use jgenesis_proc_macros::deserialize_default_on_error;
3use nes_config::{NesAspectRatio, NesAudioResampler, NesPalette, Overscan};
4use serde::{Deserialize, Serialize};
5
6#[deserialize_default_on_error]
7#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
8#[serde(default)]
9pub struct NesAppConfig {
10    pub forced_timing_mode: Option<TimingMode>,
11    pub aspect_ratio: NesAspectRatio,
12    pub ntsc_crop_vertical_overscan: bool,
13    pub overscan: Overscan,
14    pub remove_sprite_limit: bool,
15    pub pal_black_border: bool,
16    pub silence_ultrasonic_triangle_output: bool,
17    pub audio_resampler: NesAudioResampler,
18    pub audio_60hz_hack: bool,
19    pub allow_opposing_joypad_directions: bool,
20    pub dma_dummy_joy_reads: bool,
21    pub palette: NesPalette,
22}
23
24impl NesAppConfig {
25    #[must_use]
26    pub fn overscan(&self) -> Overscan {
27        self.overscan
28    }
29}
30
31impl Default for NesAppConfig {
32    fn default() -> Self {
33        Self {
34            forced_timing_mode: None,
35            aspect_ratio: NesAspectRatio::default(),
36            ntsc_crop_vertical_overscan: true,
37            overscan: Overscan::default(),
38            remove_sprite_limit: false,
39            pal_black_border: false,
40            silence_ultrasonic_triangle_output: false,
41            audio_resampler: NesAudioResampler::default(),
42            audio_60hz_hack: false,
43            allow_opposing_joypad_directions: false,
44            dma_dummy_joy_reads: true,
45            palette: NesPalette::default(),
46        }
47    }
48}