pub trait Memory {
// Required methods
fn read_u8(&mut self, address: Address) -> u8;
fn write_u8(&mut self, address: Address, data: u8);
// Provided methods
fn read_u16_le(&mut self, address: Address) -> u16 { ... }
fn read_u8_zero_page(&mut self, address: u8) -> u8 { ... }
fn read_u16_le_zero_page(&mut self, address: u8) -> u16 { ... }
fn read_u8_stack(&mut self, stack_pointer: u8) -> u8 { ... }
fn write_u8_zero_page(&mut self, address: u8, data: u8) { ... }
fn write_u8_stack(&mut self, stack_pointer: u8, data: u8) { ... }
}