Improve DMA & MBC5
This commit is contained in:
parent
2bbcba2152
commit
55373a6948
@ -397,19 +397,21 @@ impl Interconnect {
|
|||||||
let mut dst: u16 = ((self.vram_dma_destination_high as u16) << 8)
|
let mut dst: u16 = ((self.vram_dma_destination_high as u16) << 8)
|
||||||
| self.vram_dma_destination_low as u16;
|
| self.vram_dma_destination_low as u16;
|
||||||
|
|
||||||
|
dst &= 0b0001_1111_1111_0000;
|
||||||
dst += 0x8000;
|
dst += 0x8000;
|
||||||
println!(
|
println!(
|
||||||
"VRAM DMA transfer from {:04X} to {:04X}; {:02X}",
|
"VRAM DMA transfer from {:04X} to {:04X}; {:02X}",
|
||||||
src, dst, val
|
src, dst, val
|
||||||
);
|
);
|
||||||
let len: u16 = ((val & 0x7F) + 1) as u16 * 0x10 - 1;
|
let len: u16 = ((val & 0x7F) + 1) as u16 * 0x10;
|
||||||
|
let mode = val & 0x80 != 0;
|
||||||
for i in 0..len {
|
for i in 0..len {
|
||||||
let v = self.read_byte(src.wrapping_add(i));
|
let v = self.read_byte(src.wrapping_add(i));
|
||||||
self.write_byte(dst.wrapping_add(i), v);
|
self.write_byte(dst.wrapping_add(i), v);
|
||||||
}
|
}
|
||||||
|
|
||||||
// DMA done
|
// DMA done
|
||||||
self.vram_dma_length = val | 0x80;
|
self.vram_dma_length = 0xFF; // val | 0x80;
|
||||||
}
|
}
|
||||||
0xFF56 => {
|
0xFF56 => {
|
||||||
self.infrared_com_port = val;
|
self.infrared_com_port = val;
|
||||||
|
|||||||
@ -67,10 +67,13 @@ impl MBC for MBC5 {
|
|||||||
|
|
||||||
fn write_byte(&mut self, addr: u16, val: u8) {
|
fn write_byte(&mut self, addr: u16, val: u8) {
|
||||||
match addr {
|
match addr {
|
||||||
0x0000..=0x1FFF => match val {
|
0x0000..=0x1FFF => match (val & 0x0F) {
|
||||||
0x0A => self.ram_rtc_enabled = true,
|
0x0A => self.ram_rtc_enabled = true,
|
||||||
0x00 => self.ram_rtc_enabled = false,
|
0x00 => self.ram_rtc_enabled = false,
|
||||||
_ => println!("MBC5: Unknown MBC value {:02X} for {:04X}", val, addr),
|
_ => {
|
||||||
|
println!("MBC5: Unknown MBC value {:02X} for {:04X}", val, addr);
|
||||||
|
self.ram_rtc_enabled = false;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
// Lower part rom bank select
|
// Lower part rom bank select
|
||||||
0x2000..=0x2FFF => self.rom_bank_no = (self.rom_bank_no & (!0xFF)) | u16::from(val),
|
0x2000..=0x2FFF => self.rom_bank_no = (self.rom_bank_no & (!0xFF)) | u16::from(val),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user