chore: remove unnecessary derivations from structs

This commit is contained in:
Rekai Nyangadzayi Musuka 2021-07-27 23:24:10 -05:00
parent d9a3a7b0dd
commit 9d0e099a97
13 changed files with 67 additions and 91 deletions

View File

@ -17,7 +17,7 @@ const AUDIO_BUFFER_LEN: usize = 512;
const CHANNEL_COUNT: usize = 2; const CHANNEL_COUNT: usize = 2;
const SAMPLE_INCREMENT: u64 = SAMPLE_RATE as u64; const SAMPLE_INCREMENT: u64 = SAMPLE_RATE as u64;
#[derive(Default, Debug, Clone)] #[derive(Default, Debug)]
pub struct Apu { pub struct Apu {
ctrl: SoundControl, ctrl: SoundControl,
/// Tone & Sweep /// Tone & Sweep
@ -349,7 +349,7 @@ impl Apu {
} }
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
pub(crate) struct SoundControl { pub(crate) struct SoundControl {
/// 0xFF24 | NR50 - Channel Control /// 0xFF24 | NR50 - Channel Control
channel: ChannelControl, channel: ChannelControl,
@ -394,7 +394,7 @@ impl SoundControl {
} }
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
pub(crate) struct Channel1 { pub(crate) struct Channel1 {
/// 0xFF10 | NR10 - Channel 1 Sweep Register /// 0xFF10 | NR10 - Channel 1 Sweep Register
sweep: Sweep, sweep: Sweep,
@ -557,7 +557,7 @@ impl Channel1 {
} }
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
pub(crate) struct Channel2 { pub(crate) struct Channel2 {
/// 0xFF16 | NR21 - Channel 2 Sound length / Wave Pattern Duty /// 0xFF16 | NR21 - Channel 2 Sound length / Wave Pattern Duty
duty: SoundDuty, duty: SoundDuty,
@ -660,7 +660,7 @@ impl Channel2 {
} }
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
pub(crate) struct Channel3 { pub(crate) struct Channel3 {
/// 0xFF1A | NR30 - Channel 3 Sound on/off /// 0xFF1A | NR30 - Channel 3 Sound on/off
enabled: bool, enabled: bool,
@ -798,7 +798,7 @@ impl Channel3 {
} }
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
pub(crate) struct Channel4 { pub(crate) struct Channel4 {
/// 0xFF20 | NR41 - Channel 4 Sound Length /// 0xFF20 | NR41 - Channel 4 Sound Length
len: u8, len: u8,

View File

@ -16,7 +16,7 @@ impl AudioMPSC {
} }
} }
#[derive(Debug, Clone)] #[derive(Debug)]
pub struct AudioSender<T> { pub struct AudioSender<T> {
inner: Sender<T>, inner: Sender<T>,
} }
@ -64,7 +64,7 @@ impl<T: rodio::Sample> Source for AudioReceiver<T> {
} }
} }
#[derive(Debug, Clone)] #[derive(Debug)]
pub(crate) struct AudioBuffer<T> { pub(crate) struct AudioBuffer<T> {
inner: VecDeque<T>, inner: VecDeque<T>,
} }

View File

@ -11,7 +11,7 @@ use std::{fs::File, io::Read};
const BOOT_ROM_SIZE: usize = 0x100; const BOOT_ROM_SIZE: usize = 0x100;
#[derive(Debug, Clone)] #[derive(Debug)]
pub struct Bus { pub struct Bus {
boot: Option<[u8; BOOT_ROM_SIZE]>, // Boot ROM is 256b long boot: Option<[u8; BOOT_ROM_SIZE]>, // Boot ROM is 256b long
cartridge: Option<Cartridge>, cartridge: Option<Cartridge>,

View File

@ -8,7 +8,7 @@ const RAM_SIZE_ADDRESS: usize = 0x0149;
const ROM_SIZE_ADDRESS: usize = 0x0148; const ROM_SIZE_ADDRESS: usize = 0x0148;
const MBC_TYPE_ADDRESS: usize = 0x0147; const MBC_TYPE_ADDRESS: usize = 0x0147;
#[derive(Debug, Clone, Default)] #[derive(Debug, Default)]
pub(crate) struct Cartridge { pub(crate) struct Cartridge {
memory: Vec<u8>, memory: Vec<u8>,
title: Option<String>, title: Option<String>,
@ -144,7 +144,7 @@ impl BusIo for Cartridge {
} }
} }
#[derive(Debug, Clone)] #[derive(Debug)]
struct Mbc1 { struct Mbc1 {
/// 5-bit number /// 5-bit number
rom_bank: u8, rom_bank: u8,
@ -293,7 +293,7 @@ enum MBC3Device {
RealTimeClock, RealTimeClock,
} }
#[derive(Debug, Clone, Default)] #[derive(Debug, Default)]
struct MBC3 { struct MBC3 {
/// 7-bit Number /// 7-bit Number
rom_bank: u8, rom_bank: u8,
@ -361,7 +361,7 @@ impl MemoryBankController for MBC3 {
} }
} }
#[derive(Debug, Clone, Copy)] #[derive(Debug)]
struct NoMbc {} struct NoMbc {}
impl MemoryBankController for NoMbc { impl MemoryBankController for NoMbc {
@ -374,24 +374,11 @@ impl MemoryBankController for NoMbc {
} }
} }
trait MemoryBankController: CloneMbc { trait MemoryBankController {
fn handle_read(&self, addr: u16) -> MbcResult; fn handle_read(&self, addr: u16) -> MbcResult;
fn handle_write(&mut self, addr: u16, byte: u8); fn handle_write(&mut self, addr: u16, byte: u8);
} }
trait CloneMbc {
fn clone_mbc(&self) -> Box<dyn MemoryBankController>;
}
impl<T> CloneMbc for T
where
T: MemoryBankController + Clone + 'static,
{
fn clone_mbc<'a>(&self) -> Box<dyn MemoryBankController> {
Box::new(self.clone())
}
}
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
enum MbcResult { enum MbcResult {
Address(usize), Address(usize),
@ -485,7 +472,7 @@ impl Default for BankCount {
impl BankCount { impl BankCount {
// https://hacktix.github.io/GBEDG/mbcs/#rom-size // https://hacktix.github.io/GBEDG/mbcs/#rom-size
fn size(self) -> u32 { fn size(&self) -> u32 {
use BankCount::*; use BankCount::*;
match self { match self {
@ -533,12 +520,6 @@ impl std::fmt::Debug for Box<dyn MemoryBankController> {
} }
} }
impl std::clone::Clone for Box<dyn MemoryBankController> {
fn clone(&self) -> Self {
self.clone_mbc()
}
}
impl Default for Box<dyn MemoryBankController> { impl Default for Box<dyn MemoryBankController> {
fn default() -> Self { fn default() -> Self {
Box::new(Mbc1::default()) Box::new(Mbc1::default())

View File

@ -8,7 +8,7 @@ use crate::timer::Timer;
use bitfield::bitfield; use bitfield::bitfield;
use std::fmt::{Display, Formatter, Result as FmtResult}; use std::fmt::{Display, Formatter, Result as FmtResult};
#[derive(Debug, Clone, Default)] #[derive(Debug, Default)]
pub struct Cpu { pub struct Cpu {
pub bus: Bus, pub bus: Bus,
reg: Registers, reg: Registers,
@ -45,8 +45,8 @@ impl Cpu {
}) })
} }
pub(crate) fn ime(&self) -> ImeState { pub(crate) fn ime(&self) -> &ImeState {
self.ime &self.ime
} }
pub(crate) fn set_ime(&mut self, state: ImeState) { pub(crate) fn set_ime(&mut self, state: ImeState) {
@ -61,8 +61,8 @@ impl Cpu {
self.halted = None; self.halted = None;
} }
pub(crate) fn halted(&self) -> Option<HaltState> { pub(crate) fn halted(&self) -> Option<&HaltState> {
self.halted self.halted.as_ref()
} }
fn inc_pc(&mut self) { fn inc_pc(&mut self) {
@ -267,7 +267,7 @@ impl Cpu {
} }
} }
#[derive(Debug, Copy, Clone)] #[derive(Debug, Clone, Copy)]
enum State { enum State {
Execute, Execute,
// Halt, // Halt,
@ -400,7 +400,7 @@ impl Cpu {
} }
} }
#[derive(Debug, Copy, Clone)] #[derive(Debug, Clone, Copy)]
pub(crate) enum Register { pub(crate) enum Register {
A, A,
B, B,
@ -412,7 +412,7 @@ pub(crate) enum Register {
Flag, Flag,
} }
#[derive(Debug, Copy, Clone)] #[derive(Debug, Clone, Copy)]
pub(crate) enum RegisterPair { pub(crate) enum RegisterPair {
AF, AF,
BC, BC,
@ -422,7 +422,7 @@ pub(crate) enum RegisterPair {
PC, PC,
} }
#[derive(Debug, Copy, Clone, Default)] #[derive(Debug, Default)]
struct Registers { struct Registers {
a: u8, a: u8,
b: u8, b: u8,

View File

@ -2,7 +2,7 @@ use crate::bus::BusIo;
use crate::cpu::{Cpu, Flags, HaltState, ImeState, Register, RegisterPair}; use crate::cpu::{Cpu, Flags, HaltState, ImeState, Register, RegisterPair};
use std::{convert::TryFrom, fmt::Debug}; use std::{convert::TryFrom, fmt::Debug};
#[derive(Copy, Clone)] #[derive(Clone, Copy)]
#[allow(clippy::upper_case_acronyms)] #[allow(clippy::upper_case_acronyms)]
pub(crate) enum Instruction { pub(crate) enum Instruction {
NOP, NOP,
@ -51,26 +51,26 @@ pub(crate) enum Instruction {
SET(u8, InstrRegister), SET(u8, InstrRegister),
} }
#[derive(Copy, Clone)] #[derive(Clone, Copy)]
pub(crate) enum JPTarget { pub(crate) enum JPTarget {
RegisterPair(RegisterPair), RegisterPair(RegisterPair),
ImmediateWord(u16), ImmediateWord(u16),
} }
#[derive(Copy, Clone)] #[derive(Clone, Copy)]
pub(crate) enum Registers { pub(crate) enum Registers {
Byte(InstrRegister), Byte(InstrRegister),
Word(RegisterPair), Word(RegisterPair),
} }
#[derive(Copy, Clone)] #[derive(Clone, Copy)]
pub(crate) enum MATHTarget { pub(crate) enum MATHTarget {
Register(InstrRegister), Register(InstrRegister),
RegisterPair(RegisterPair), RegisterPair(RegisterPair),
ImmediateByte(u8), ImmediateByte(u8),
} }
#[derive(Copy, Clone)] #[derive(Clone, Copy)]
pub(crate) enum LDTarget { pub(crate) enum LDTarget {
IndirectC, IndirectC,
Register(InstrRegister), Register(InstrRegister),
@ -82,7 +82,7 @@ pub(crate) enum LDTarget {
ByteAtAddressWithOffset(u8), ByteAtAddressWithOffset(u8),
} }
#[derive(Copy, Clone)] #[derive(Clone, Copy)]
pub(crate) enum InstrRegisterPair { pub(crate) enum InstrRegisterPair {
AF, AF,
BC, BC,
@ -94,7 +94,7 @@ pub(crate) enum InstrRegisterPair {
DecrementHL, DecrementHL,
} }
#[derive(Copy, Clone)] #[derive(Clone, Copy)]
pub(crate) enum InstrRegister { pub(crate) enum InstrRegister {
A, A,
B, B,
@ -106,7 +106,7 @@ pub(crate) enum InstrRegister {
IndirectHL, // (HL) IndirectHL, // (HL)
} }
#[derive(Copy, Clone)] #[derive(Clone, Copy)]
pub(crate) enum JumpCondition { pub(crate) enum JumpCondition {
NotZero, NotZero,
Zero, Zero,
@ -115,7 +115,7 @@ pub(crate) enum JumpCondition {
Always, Always,
} }
#[derive(Debug, Copy, Clone)] #[derive(Debug)]
struct Table; struct Table;
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Default)] #[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Default)]

View File

@ -1,6 +1,6 @@
use bitfield::bitfield; use bitfield::bitfield;
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
pub(crate) struct Interrupt { pub(crate) struct Interrupt {
pub(crate) flag: InterruptFlag, pub(crate) flag: InterruptFlag,
pub(crate) enable: InterruptEnable, pub(crate) enable: InterruptEnable,

View File

@ -1,7 +1,7 @@
use gilrs::{Button, Event as GamepadEvent, EventType as GamepadEventType}; use gilrs::{Button, Event as GamepadEvent, EventType as GamepadEventType};
use winit_input_helper::WinitInputHelper; use winit_input_helper::WinitInputHelper;
#[derive(Debug, Clone, Copy)] #[derive(Debug)]
pub struct Joypad { pub struct Joypad {
/// 0xFF00 | P1/JOYP - Player 1 Joypad /// 0xFF00 | P1/JOYP - Player 1 Joypad
pub(crate) p1: u8, pub(crate) p1: u8,
@ -48,7 +48,7 @@ impl Joypad {
} }
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
struct JoypadState { struct JoypadState {
// Direction Row // Direction Row
dpad_down: ButtonEvent, dpad_down: ButtonEvent,

View File

@ -33,7 +33,7 @@ const LIGHT_GRAY: [u8; 4] = 0xAEBA89FFu32.to_be_bytes();
const DARK_GRAY: [u8; 4] = 0x5E6745FFu32.to_be_bytes(); const DARK_GRAY: [u8; 4] = 0x5E6745FFu32.to_be_bytes();
const BLACK: [u8; 4] = 0x202020FFu32.to_be_bytes(); const BLACK: [u8; 4] = 0x202020FFu32.to_be_bytes();
#[derive(Debug, Clone)] #[derive(Debug)]
pub struct Ppu { pub struct Ppu {
pub(crate) int: Interrupt, pub(crate) int: Interrupt,
/// 0xFF40 | LCDC - LCD Control /// 0xFF40 | LCDC - LCD Control
@ -489,7 +489,7 @@ impl Default for Ppu {
} }
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
pub(crate) struct Interrupt { pub(crate) struct Interrupt {
_vblank: bool, _vblank: bool,
_lcd_stat: bool, _lcd_stat: bool,
@ -513,7 +513,7 @@ impl Interrupt {
} }
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
pub(crate) struct ScreenPosition { pub(crate) struct ScreenPosition {
/// 0xFF42 | SCY - Scroll Y /// 0xFF42 | SCY - Scroll Y
pub(crate) scroll_y: u8, pub(crate) scroll_y: u8,
@ -529,7 +529,7 @@ pub(crate) struct ScreenPosition {
pub(crate) window_x: u8, pub(crate) window_x: u8,
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
pub(crate) struct Monochrome { pub(crate) struct Monochrome {
/// 0xFF47 | BGP - Background Palette Data /// 0xFF47 | BGP - Background Palette Data
pub(crate) bg_palette: BackgroundPalette, pub(crate) bg_palette: BackgroundPalette,
@ -539,7 +539,7 @@ pub(crate) struct Monochrome {
pub(crate) obj_palette_1: ObjectPalette, pub(crate) obj_palette_1: ObjectPalette,
} }
#[derive(Debug, Clone)] #[derive(Debug)]
pub(crate) struct ObjectAttributeTable { pub(crate) struct ObjectAttributeTable {
buf: Box<[u8; OAM_SIZE]>, buf: Box<[u8; OAM_SIZE]>,
} }
@ -606,7 +606,7 @@ impl<'a> From<&'a [u8; 4]> for ObjectAttribute {
} }
} }
#[derive(Debug, Clone, Copy)] #[derive(Debug)]
struct ObjectBuffer { struct ObjectBuffer {
buf: [Option<ObjectAttribute>; OBJECT_LIMIT], buf: [Option<ObjectAttribute>; OBJECT_LIMIT],
len: usize, len: usize,
@ -674,7 +674,7 @@ impl Default for ObjectBuffer {
} }
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
struct PixelFetcher { struct PixelFetcher {
x_pos: u8, x_pos: u8,
back: BackgroundFetcher, back: BackgroundFetcher,
@ -793,7 +793,7 @@ trait Fetcher {
fn hblank_reset(&mut self); fn hblank_reset(&mut self);
} }
#[derive(Debug, Clone, Copy)] #[derive(Debug)]
struct BackgroundFetcher { struct BackgroundFetcher {
state: FetcherState, state: FetcherState,
tile: TileBuilder, tile: TileBuilder,
@ -859,7 +859,7 @@ impl Default for BackgroundFetcher {
} }
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
struct ObjectFetcher { struct ObjectFetcher {
state: FetcherState, state: FetcherState,
tile: TileBuilder, tile: TileBuilder,
@ -881,7 +881,7 @@ impl Fetcher for ObjectFetcher {
} }
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
struct WindowLineCounter { struct WindowLineCounter {
count: u8, count: u8,
} }
@ -918,12 +918,12 @@ impl Default for FetcherState {
} }
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
struct BgPixelProperty { struct BgPixelProperty {
shade_id: u8, shade_id: u8,
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
struct ObjPixelProperty { struct ObjPixelProperty {
shade_id: u8, shade_id: u8,
palette_kind: ObjectPaletteKind, palette_kind: ObjectPaletteKind,
@ -932,7 +932,7 @@ struct ObjPixelProperty {
// FIXME: Fifo Registers have a known size. Are heap allocations // FIXME: Fifo Registers have a known size. Are heap allocations
// really necessary here? // really necessary here?
#[derive(Debug, Clone)] #[derive(Debug)]
struct PixelFifo { struct PixelFifo {
back: VecDeque<BgPixelProperty>, back: VecDeque<BgPixelProperty>,
obj: VecDeque<ObjPixelProperty>, obj: VecDeque<ObjPixelProperty>,
@ -963,7 +963,7 @@ impl Default for PixelFifo {
} }
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
struct TileBuilder { struct TileBuilder {
id: Option<u8>, id: Option<u8>,
low: Option<u8>, low: Option<u8>,
@ -988,7 +988,7 @@ impl TileBuilder {
} }
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
struct OamScanState { struct OamScanState {
count: u8, count: u8,
mode: OamScanMode, mode: OamScanMode,
@ -1009,8 +1009,8 @@ impl OamScanState {
self.count self.count
} }
fn mode(&self) -> OamScanMode { fn mode(&self) -> &OamScanMode {
self.mode &self.mode
} }
fn next(&mut self) { fn next(&mut self) {
@ -1035,7 +1035,7 @@ impl Default for OamScanMode {
} }
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
struct WindowStatus { struct WindowStatus {
/// This will be true if WY == LY at any point in the frame thus far /// This will be true if WY == LY at any point in the frame thus far
coincidence: bool, coincidence: bool,

View File

@ -1,6 +1,6 @@
use crate::instruction::Cycle; use crate::instruction::Cycle;
#[derive(Debug, Default, Clone)] #[derive(Debug, Default)]
pub(crate) struct DirectMemoryAccess { pub(crate) struct DirectMemoryAccess {
pub(crate) state: DmaState, pub(crate) state: DmaState,
cycle: Cycle, cycle: Cycle,
@ -28,7 +28,7 @@ impl DirectMemoryAccess {
let src_addr = self let src_addr = self
.start .start
.addr .0
.as_mut() .as_mut()
.expect("Source Address present during DMA Transfer"); .expect("Source Address present during DMA Transfer");
@ -58,7 +58,7 @@ impl DirectMemoryAccess {
fn reset(&mut self) { fn reset(&mut self) {
self.cycle = Cycle::new(0); self.cycle = Cycle::new(0);
self.state = DmaState::Disabled; self.state = DmaState::Disabled;
self.start.addr = None; self.start.0 = None;
} }
} }
@ -75,26 +75,21 @@ impl Default for DmaState {
} }
} }
#[derive(Debug, Default, Clone, Copy)] #[derive(Debug, Clone, Copy, Default)]
pub(crate) struct DmaAddress { pub(crate) struct DmaAddress(Option<u16>);
/// The current *source* address of the DMA Transfer
///
/// NB: Will be None if no DMA Transfer is in progress
addr: Option<u16>,
}
impl DmaAddress { impl DmaAddress {
pub(crate) fn update(&mut self, byte: u8, state: &mut DmaState) { pub(crate) fn update(&mut self, byte: u8, state: &mut DmaState) {
let start = (byte as u16) << 8; let start = (byte as u16) << 8;
self.addr = Some(start); self.0 = Some(start);
*state = DmaState::Pending; *state = DmaState::Pending;
} }
} }
impl From<DmaAddress> for u8 { impl From<DmaAddress> for u8 {
fn from(ctrl: DmaAddress) -> Self { fn from(ctrl: DmaAddress) -> Self {
match ctrl.addr { match ctrl.0 {
Some(addr) => (addr >> 8) as u8, Some(addr) => (addr >> 8) as u8,
None => 0xFF, // TODO: What garbage value should be here? None => 0xFF, // TODO: What garbage value should be here?
} }

View File

@ -1,6 +1,6 @@
use bitfield::bitfield; use bitfield::bitfield;
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Default)]
pub(crate) struct Serial { pub(crate) struct Serial {
/// 0xFF01 | SB - Serial Transfer Data /// 0xFF01 | SB - Serial Transfer Data
pub(crate) next: u8, pub(crate) next: u8,

View File

@ -1,6 +1,6 @@
use bitfield::bitfield; use bitfield::bitfield;
#[derive(Debug, Clone, Copy)] #[derive(Debug)]
pub(crate) struct Timer { pub(crate) struct Timer {
/// 0xFF07 | TAC - Timer Control /// 0xFF07 | TAC - Timer Control
pub(crate) ctrl: TimerControl, pub(crate) ctrl: TimerControl,

View File

@ -5,7 +5,7 @@ const VARIABLE_WORK_RAM_SIZE: usize = WORK_RAM_SIZE;
const WORK_RAM_START_ADDRESS: usize = 0xC000; const WORK_RAM_START_ADDRESS: usize = 0xC000;
const VARIABLE_WORK_RAM_START_ADDRESS: usize = 0xD000; const VARIABLE_WORK_RAM_START_ADDRESS: usize = 0xD000;
#[derive(Debug, Clone)] #[derive(Debug)]
pub(crate) struct WorkRam { pub(crate) struct WorkRam {
bank: Box<[u8; WORK_RAM_SIZE]>, bank: Box<[u8; WORK_RAM_SIZE]>,
} }
@ -39,7 +39,7 @@ enum BankNumber {
Seven = 7, Seven = 7,
} }
#[derive(Debug, Clone)] #[derive(Debug)]
pub(crate) struct VariableWorkRam { pub(crate) struct VariableWorkRam {
current: BankNumber, current: BankNumber,
bank_n: Box<[[u8; VARIABLE_WORK_RAM_SIZE]; 7]>, // 4K for Variable amount of Banks (Banks 1 -> 7) in Game Boy Colour bank_n: Box<[[u8; VARIABLE_WORK_RAM_SIZE]; 7]>, // 4K for Variable amount of Banks (Banks 1 -> 7) in Game Boy Colour
@ -59,8 +59,8 @@ impl VariableWorkRam {
self.current = bank; self.current = bank;
} }
fn get_current_bank(&self) -> BankNumber { fn get_current_bank(&self) -> &BankNumber {
self.current &self.current
} }
} }