1#[cfg(feature = "quirks")]
2#[macro_export]
3macro_rules! vf_reset {
4 ($self:expr) => {
5 if $self.quirks.vf_reset {
6 $self.regs[0xf] = 0;
7 }
8 };
9}
10
11#[cfg(not(feature = "quirks"))]
12#[macro_export]
13macro_rules! vf_reset {
14 ($self:expr) => {
15 $self.regs[0xf] = 0;
16 };
17}
18
19#[cfg(feature = "quirks")]
20#[macro_export]
21macro_rules! memory {
22 ($self:expr) => {
23 if $self.quirks.memory {
24 $self.i = $self.i.saturating_add(1);
25 }
26 };
27}
28
29#[cfg(not(feature = "quirks"))]
30#[macro_export]
31macro_rules! memory {
32 ($self:expr) => {
33 $self.i = $self.i.saturating_add(1);
34 };
35}
36
37#[cfg(feature = "quirks")]
38#[macro_export]
39macro_rules! display_blank {
40 ( $self:expr ) => {
41 if $self.quirks.display_blank && $self.wait_vblank != WaitVblank::Vblank {
42 $self.pause_vblank();
43 return;
44 }
45 $self.wait_vblank = WaitVblank::NotWaiting;
46 };
47}
48
49#[cfg(not(feature = "quirks"))]
50#[macro_export]
51macro_rules! display_blank {
52 ( $self:expr ) => {};
53}
54
55#[cfg(feature = "quirks")]
56#[macro_export]
57macro_rules! clipping {
58 ( $self:expr, $y:expr, $y0:expr, $yf:expr ) => {
59 if $self.quirks.clipping {
60 $yf = $y0 + $y;
61 if $yf >= DISPLAY_HEIGHT {
62 continue;
63 }
64 } else {
65 $yf = ($y0 + $y) % DISPLAY_HEIGHT;
66 }
67 };
68}
69
70#[cfg(not(feature = "quirks"))]
71#[macro_export]
72macro_rules! clipping {
73 ( $self:expr, $y:expr, $y0:expr, $yf:expr ) => {
74 $yf = $y0 + $y;
75 if $yf >= DISPLAY_HEIGHT {
76 continue;
77 }
78 };
79}
80
81#[cfg(feature = "quirks")]
82#[macro_export]
83macro_rules! shifting {
84 ( $self:expr, $x:expr, $y:expr, $shift:tt ) => {
85 if $self.quirks.shifting {
86 $self.regs[$x] = $self.regs[$x] $shift 1;
87 } else {
88 $self.regs[$x] = $self.regs[$y] $shift 1;
89 }
90 }
91}
92
93#[cfg(not(feature = "quirks"))]
94#[macro_export]
95macro_rules! shifting {
96 ( $self:expr, $x:expr, $y:expr, $shift:tt ) => {
97 $self.regs[$x] = $self.regs[$y] $shift 1;
98 }
99}
100
101#[cfg(feature = "quirks")]
102#[macro_export]
103macro_rules! jumping {
104 ( $self:expr, $address:expr, $x:expr ) => {
105 if $self.quirks.jumping {
106 $self.pc = $address + $self.regs[$x] as u16;
107 } else {
108 $self.pc = $address + $self.regs[0x0] as u16;
109 }
110 };
111}
112
113#[cfg(not(feature = "quirks"))]
114#[macro_export]
115macro_rules! jumping {
116 ( $self:expr, $address:expr, $x:expr ) => {
117 $self.pc = $address + $self.regs[0x0] as u16;
118 };
119}