Skip to content
Snippets Groups Projects
macros.rs 2.54 KiB
Newer Older
  • Learn to ignore specific revisions
  • #[cfg(feature = "quirks")]
    #[macro_export]
    macro_rules! vf_reset {
        ($self:expr) => {
            if $self.quirks.vf_reset {
                $self.regs[0xf] = 0;
            }
        };
    }
    
    #[cfg(not(feature = "quirks"))]
    #[macro_export]
    macro_rules! vf_reset {
        ($self:expr) => {
            $self.regs[0xf] = 0;
        };
    }
    
    #[cfg(feature = "quirks")]
    #[macro_export]
    macro_rules! memory {
        ($self:expr) => {
            if $self.quirks.memory {
                $self.i = $self.i.saturating_add(1);
            }
        };
    }
    
    #[cfg(not(feature = "quirks"))]
    #[macro_export]
    macro_rules! memory {
        ($self:expr) => {
            $self.i = $self.i.saturating_add(1);
        };
    }
    
    #[cfg(feature = "quirks")]
    #[macro_export]
    macro_rules! display_blank {
        ( $self:expr ) => {
            if $self.quirks.display_blank && $self.wait_vblank != WaitVblank::Vblank {
                $self.pause_vblank();
                return;
            }
            $self.wait_vblank = WaitVblank::NotWaiting;
        };
    }
    
    #[cfg(not(feature = "quirks"))]
    #[macro_export]
    macro_rules! display_blank {
        ( $self:expr ) => {};
    }
    
    #[cfg(feature = "quirks")]
    #[macro_export]
    macro_rules! display_blank {
        ( $self:expr, $y:expr, $y0:expr, $yf:expr ) => {
            if $self.quirks.clipping {
                $yf = $y0 + $y;
                if $yf >= DISPLAY_HEIGHT {
                    continue;
                }
            } else {
                $yf = ($y0 + $y) % DISPLAY_HEIGHT;
            }
        };
    }
    
    #[cfg(not(feature = "quirks"))]
    #[macro_export]
    macro_rules! clipping {
        ( $self:expr, $y:expr, $y0:expr, $yf:expr ) => {
            $yf = $y0 + $y;
            if $yf >= DISPLAY_HEIGHT {
                continue;
            }
        }
    }
    
    #[cfg(feature = "quirks")]
    #[macro_export]
    macro_rules! shifting {
        ( $self:expr, $x:expr, $y:expr, $shift:tt ) => {
            if $self.quirks.shifting {
                $self.regs[$x] = $self.regs[$x] $shift 1;
            } else {
                $self.regs[$x] = $self.regs[$y] $shift 1;
            }
        }
    }
    
    #[cfg(not(feature = "quirks"))]
    #[macro_export]
    macro_rules! shifting {
        ( $self:expr, $x:expr, $y:expr, $shift:tt ) => {
            $self.regs[$x] = $self.regs[$y] $shift 1;
        }
    }
    
    #[cfg(feature = "quirks")]
    #[macro_export]
    macro_rules! jumping {
        ( $self:expr, $address:expr, $x:expr ) => {
            if $self.quirks.jumping {
                $self.pc = $address + $self.regs[$x] as u16;
            } else {
                $self.pc = $address + $self.regs[0x0] as u16;
            }
        };
    }
    
    #[cfg(not(feature = "quirks"))]
    #[macro_export]
    macro_rules! jumping {
        ( $self:expr, $address:expr, $x:expr ) => {
            $self.pc = $address + $self.regs[0x0] as u16;
        };
    }