mirror of
https://github.com/koute/pinky.git
synced 2024-06-01 02:48:08 -04:00
Extern the generic mapper
This commit is contained in:
parent
4aa2e0bed8
commit
43f68f0b3b
|
@ -250,7 +250,7 @@ impl GenericMapper {
|
|||
},
|
||||
Mirroring::FourScreen => {
|
||||
self.extend_empty( 4 * 1024 );
|
||||
self.set_ppu_4k_bank( bank::PPU_4K::Ox2000, offset );
|
||||
self.set_four_screen_mirroring( offset );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -399,6 +399,12 @@ impl GenericMapper {
|
|||
self.set_ppu_4k_bank( bank::PPU_4K::Ox1000, internal_address );
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn set_ppu_8k_bank( &mut self, internal_address: u32 ) {
|
||||
self.set_ppu_4k_bank( bank::PPU_4K::Ox0000, internal_address );
|
||||
self.set_ppu_4k_bank( bank::PPU_4K::Ox1000, internal_address + 0x1000 );
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn set_horizontal_mirroring( &mut self, internal_address: u32 ) {
|
||||
self.set_ppu_1k_bank( bank::PPU_1K::Ox2000, internal_address );
|
||||
|
@ -431,6 +437,16 @@ impl GenericMapper {
|
|||
self.set_ppu_1k_bank( bank::PPU_1K::Ox2C00, internal_address + 0x0400 );
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn set_four_screen_mirroring( &mut self, internal_address: u32 ) {
|
||||
if internal_address + 4 * 1024 > self.memory.len() as u32 {
|
||||
let extra_space = internal_address + 4 * 1024 - self.memory.len() as u32;
|
||||
self.extend_empty( extra_space );
|
||||
}
|
||||
|
||||
self.set_ppu_4k_bank( bank::PPU_4K::Ox2000, internal_address );
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn peek_cpu_memory_space( &self, address: u16 ) -> u8 {
|
||||
let actual_address = self.translate_cpu_address( address );
|
||||
|
@ -525,7 +541,8 @@ pub struct BankedGenericMapper {
|
|||
internal_background_tilemaps_offset: u32,
|
||||
|
||||
rom_size: u32,
|
||||
video_rom_size: u32
|
||||
video_rom_size: u32,
|
||||
default_mirroring: Mirroring
|
||||
}
|
||||
|
||||
impl BankedGenericMapper {
|
||||
|
@ -538,7 +555,8 @@ impl BankedGenericMapper {
|
|||
internal_background_tilemaps_offset: 0,
|
||||
|
||||
rom_size: 0,
|
||||
video_rom_size: 0
|
||||
video_rom_size: 0,
|
||||
default_mirroring: Mirroring::Horizontal
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -551,6 +569,7 @@ impl BankedGenericMapper {
|
|||
|
||||
mapper.rom_size = mapper.internal_video_rom_offset - mapper.internal_rom_bank_offset;
|
||||
mapper.video_rom_size = mapper.internal_background_tilemaps_offset - mapper.internal_video_rom_offset;
|
||||
mapper.default_mirroring = rom.mirroring;
|
||||
|
||||
assert!( mapper.rom_size > 0 );
|
||||
assert!( mapper.video_rom_size > 0 );
|
||||
|
@ -588,6 +607,11 @@ impl BankedGenericMapper {
|
|||
(self.video_rom_size / (4 * 1024)) as u8
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn video_rom_8k_bank_count( &self ) -> u8 {
|
||||
(self.video_rom_size / (8 * 1024)) as u8
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn set_cpu_lower_16k_bank_to_bank( &mut self, bank: u8 ) {
|
||||
let bank = wraparound( self.rom_16k_bank_count(), bank ) as u32;
|
||||
|
@ -612,6 +636,12 @@ impl BankedGenericMapper {
|
|||
self.inner.set_ppu_upper_4k_bank( self.internal_video_rom_offset + bank * 4 * 1024 );
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn set_ppu_8k_bank_to_bank( &mut self, bank: u8 ) {
|
||||
let bank = wraparound( self.video_rom_8k_bank_count(), bank ) as u32;
|
||||
self.inner.set_ppu_8k_bank( self.internal_video_rom_offset + bank * 8 * 1024 );
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn set_horizontal_mirroring( &mut self ) {
|
||||
self.inner.set_horizontal_mirroring( self.internal_background_tilemaps_offset );
|
||||
|
@ -632,6 +662,20 @@ impl BankedGenericMapper {
|
|||
self.inner.set_only_upper_bank_mirroring( self.internal_background_tilemaps_offset );
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn set_four_screen_mirroring( &mut self ) {
|
||||
self.inner.set_four_screen_mirroring( self.internal_background_tilemaps_offset );
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn set_default_mirroring( &mut self ) {
|
||||
match self.default_mirroring {
|
||||
Mirroring::Horizontal => self.set_horizontal_mirroring(),
|
||||
Mirroring::Vertical => self.set_vertical_mirroring(),
|
||||
Mirroring::FourScreen => self.set_four_screen_mirroring()
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn set_cpu_8k_writable( &mut self, bank: bank::CPU_8K, is_writable: bool ) {
|
||||
self.inner.set_cpu_8k_writable( bank, is_writable );
|
||||
|
|
Loading…
Reference in a new issue