1use crate::debug::M68000Debugger; 2 3pub trait BusInterface { 4 // Addresses are 32-bit internally but the 68000 only has a 24-bit address bus 5 const ADDRESS_MASK: u32 = 0x00FF_FFFF; 6 7 type DebugView<'a>: M68000Debugger 8 where 9 Self: 'a; 10 11 fn read_byte(&mut self, address: u32) -> u8; 12 13 fn read_word(&mut self, address: u32) -> u16; 14 15 fn write_byte(&mut self, address: u32, value: u8); 16 17 fn write_word(&mut self, address: u32, value: u16); 18 19 fn read_long_word(&mut self, address: u32) -> u32 { 20 let high_word = self.read_word(address); 21 let low_word = self.read_word(address.wrapping_add(2)); 22 23 (u32::from(high_word) << 16) | u32::from(low_word) 24 } 25 26 fn write_long_word(&mut self, address: u32, value: u32) { 27 let high_word = (value >> 16) as u16; 28 let low_word = value as u16; 29 30 self.write_word(address, high_word); 31 self.write_word(address.wrapping_add(2), low_word); 32 } 33 34 // Auto-vectored interrupt level; should be between 0 and 7, with 0 indicating no interrupt 35 fn interrupt_level(&self) -> u8; 36 37 fn acknowledge_interrupt(&mut self, interrupt_level: u8); 38 39 fn halt(&self) -> bool; 40 41 fn reset(&self) -> bool; 42 43 fn debug_view(&mut self) -> Option<Self::DebugView<'_>> { 44 None 45 } 46}