chip_eight/emulator/
quirks.rs1#[derive(Debug, Clone)]
3pub enum SuperChipBehaviour {
4 Modern,
5 Legacy,
6}
7
8#[derive(Debug, Clone)]
10pub enum QuirksMode {
11 Chip8,
12 SuperChip(SuperChipBehaviour),
13}
14
15#[derive(Debug, Clone)]
17pub struct QuirksFields {
18 pub vf_reset: bool,
19 pub memory: bool,
20 pub disp_wait: bool,
24 pub clipping: bool,
25 pub shifting: bool,
26 pub jumping: bool,
27}
28
29impl From<QuirksMode> for QuirksFields {
30 fn from(value: QuirksMode) -> Self {
31 match value {
32 QuirksMode::Chip8 => QuirksFields {
33 vf_reset: true,
34 memory: true,
35 disp_wait: true,
36 clipping: true,
37 shifting: false,
38 jumping: false,
39 },
40 QuirksMode::SuperChip(super_chip_behaviour) => match super_chip_behaviour {
41 SuperChipBehaviour::Modern => QuirksFields {
42 vf_reset: false,
43 memory: false,
44 disp_wait: true,
45 clipping: true,
46 shifting: true,
47 jumping: true,
48 },
49 SuperChipBehaviour::Legacy => QuirksFields {
50 vf_reset: false,
51 memory: false,
52 disp_wait: false,
53 clipping: true,
54 shifting: true,
55 jumping: true,
56 },
57 },
58 }
59 }
60}