mirror of
https://github.com/FranLMSP/rmg-001.git
synced 2024-11-23 10:12:11 +00:00
fix double speed mode not being triggered
This commit is contained in:
parent
7bfe760a57
commit
76a930385d
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
/target
|
/target
|
||||||
*.log
|
*.log
|
||||||
/ignore
|
/ignore
|
||||||
|
.vscode
|
||||||
|
24
src/bus.rs
24
src/bus.rs
@ -104,7 +104,12 @@ impl Bus {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn read(&self, address: u16) -> u8 {
|
pub fn read(&self, address: u16) -> u8 {
|
||||||
if BANK_ZERO.contains(&address) || BANK_SWITCHABLE.contains(&address) || EXTERNAL_RAM.contains(&address) {
|
if self.cgb_mode && address == PREPARE_SPEED_SWITCH_ADDRESS {
|
||||||
|
let byte = self.data[address as usize];
|
||||||
|
let current_speed = (self.double_speed_mode as u8) << 7;
|
||||||
|
let prepare_speed_switch = self.prepare_double_speed_mode as u8;
|
||||||
|
return (byte & 0b0111_1110) | current_speed | prepare_speed_switch;
|
||||||
|
} else if BANK_ZERO.contains(&address) || BANK_SWITCHABLE.contains(&address) || EXTERNAL_RAM.contains(&address) {
|
||||||
return self.rom.read(address);
|
return self.rom.read(address);
|
||||||
} else if WORK_RAM_1.contains(&address) || WORK_RAM_2.contains(&address) || address == WRAM_BANK_SELECT_ADDRESS {
|
} else if WORK_RAM_1.contains(&address) || WORK_RAM_2.contains(&address) || address == WRAM_BANK_SELECT_ADDRESS {
|
||||||
return self.ram.read(address);
|
return self.ram.read(address);
|
||||||
@ -124,11 +129,6 @@ impl Bus {
|
|||||||
return self.joypad.read(self.data[address as usize]);
|
return self.joypad.read(self.data[address as usize]);
|
||||||
} else if Timer::is_io_register(address) {
|
} else if Timer::is_io_register(address) {
|
||||||
return self.timer.get_register(address);
|
return self.timer.get_register(address);
|
||||||
} else if address == PREPARE_SPEED_SWITCH_ADDRESS && self.cgb_mode {
|
|
||||||
let byte = self.data[address as usize];
|
|
||||||
let current_speed = (self.double_speed_mode as u8) << 7;
|
|
||||||
let prepare_speed_switch = self.prepare_double_speed_mode as u8;
|
|
||||||
return (byte & 0b0111_1110) | current_speed | prepare_speed_switch;
|
|
||||||
}
|
}
|
||||||
self.data[address as usize]
|
self.data[address as usize]
|
||||||
}
|
}
|
||||||
@ -142,7 +142,12 @@ impl Bus {
|
|||||||
// print!("{}", data as char);
|
// print!("{}", data as char);
|
||||||
}
|
}
|
||||||
|
|
||||||
if BANK_ZERO.contains(&address) || BANK_SWITCHABLE.contains(&address) || EXTERNAL_RAM.contains(&address) {
|
if self.cgb_mode && address == PREPARE_SPEED_SWITCH_ADDRESS {
|
||||||
|
let current_byte = self.data[address as usize];
|
||||||
|
self.prepare_double_speed_mode = (data & 1) == 1;
|
||||||
|
// bit 7 is read only on cgb mode
|
||||||
|
self.data[address as usize] = (current_byte & 0b1000_0000) | (data & 0b0111_1111);
|
||||||
|
} else if BANK_ZERO.contains(&address) || BANK_SWITCHABLE.contains(&address) || EXTERNAL_RAM.contains(&address) {
|
||||||
self.rom.write(address, data);
|
self.rom.write(address, data);
|
||||||
} else if address == INTERRUPT_ENABLE_ADDRESS || address == INTERRUPT_FLAG_ADDRESS {
|
} else if address == INTERRUPT_ENABLE_ADDRESS || address == INTERRUPT_FLAG_ADDRESS {
|
||||||
self.interrupts.write(address, data);
|
self.interrupts.write(address, data);
|
||||||
@ -171,11 +176,6 @@ impl Bus {
|
|||||||
self.hdma_transfer(data);
|
self.hdma_transfer(data);
|
||||||
} else if PPU::is_io_register(address) {
|
} else if PPU::is_io_register(address) {
|
||||||
self.ppu.set_register(address, data);
|
self.ppu.set_register(address, data);
|
||||||
} else if address == PREPARE_SPEED_SWITCH_ADDRESS && self.cgb_mode {
|
|
||||||
let current_byte = self.data[address as usize];
|
|
||||||
self.prepare_double_speed_mode = (data & 1) == 1;
|
|
||||||
// bit 7 is read only on cgb mode
|
|
||||||
self.data[address as usize] = (current_byte & 0b1000_0000) | (data & 0b0111_1111);
|
|
||||||
} else {
|
} else {
|
||||||
self.data[address as usize] = data;
|
self.data[address as usize] = data;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user