CDL: add CARTROM logging for many more cases, including superfx (should fix #1597)

This commit is contained in:
zeromus 2020-01-19 17:52:52 -05:00
parent c7dbed306a
commit fd960e03fe
7 changed files with 49 additions and 12 deletions

View File

@ -11,11 +11,16 @@ void HitachiDSP::bus_write(unsigned addr, uint8 data) {
uint8 HitachiDSP::rom_read(unsigned addr) {
if(co_active() == cpu.thread) {
if(state == State::Idle) return cartridge.rom.read(addr);
if(state == State::Idle)
{
cdlInfo.set(eCDLog_AddrType_CARTROM, addr);
return cartridge.rom.read(addr);
}
if((addr & 0x40ffe0) == 0x00ffe0) return regs.vector[addr & 0x1f];
return cpu.regs.mdr;
}
if(co_active() == hitachidsp.thread) {
cdlInfo.set(eCDLog_AddrType_CARTROM, addr);
return cartridge.rom.read(addr);
}
return cpu.regs.mdr;

View File

@ -129,7 +129,9 @@ uint8 SA1::mmc_read(unsigned addr) {
}
static auto read = [](unsigned addr) {
return cartridge.rom.read(bus.mirror(addr, cartridge.rom.size()));
auto myaddr = bus.mirror(addr, cartridge.rom.size());
cdlInfo.set(eCDLog_AddrType_CARTROM, myaddr);
return cartridge.rom.read(myaddr);
};
if((addr & 0xe08000) == 0x008000) { //$00-1f:8000-ffff

View File

@ -84,7 +84,9 @@ void SDD1::mmio_write(unsigned addr, uint8 data) {
}
uint8 SDD1::rom_read(unsigned addr) {
return cartridge.rom.read(mmc[(addr >> 20) & 3] + (addr & 0x0fffff));
auto myaddr = mmc[(addr >> 20) & 3] + (addr & 0x0fffff);
cdlInfo.set(eCDLog_AddrType_CARTROM, myaddr);
return cartridge.rom.read(myaddr);
}
//SDD1::mcu_read() is mapped to $c0-ff:0000-ffff
@ -132,7 +134,9 @@ uint8 SDD1::mcu_read(unsigned addr) {
} //S-DD1 decompressor enabled
//S-DD1 decompression mode inactive; return ROM data
return cartridge.rom.read(mmc[(addr >> 20) & 3] + (addr & 0x0fffff));
auto myaddr = mmc[(addr >> 20) & 3] + (addr & 0x0fffff);
cdlInfo.set(eCDLog_AddrType_CARTROM, myaddr);
return cartridge.rom.read(myaddr);
}
void SDD1::mcu_write(unsigned addr, uint8 data) {

View File

@ -26,7 +26,9 @@ void SPC7110::Decomp::write(uint8 data) {
uint8 SPC7110::Decomp::dataread() {
unsigned size = cartridge.rom.size() - spc7110.data_rom_offset;
while(decomp_offset >= size) decomp_offset -= size;
return cartridge.rom.read(spc7110.data_rom_offset + decomp_offset++);
auto myaddr = spc7110.data_rom_offset + decomp_offset++;
cdlInfo.set(eCDLog_AddrType_CARTROM, myaddr);
return cartridge.rom.read(myaddr);
}
void SPC7110::Decomp::init(unsigned mode, unsigned offset, unsigned index) {

View File

@ -238,7 +238,9 @@ uint8 SPC7110::mmio_read(unsigned addr) {
set_data_adjust(adjust + 1);
}
uint8 data = cartridge.rom.read(datarom_addr(adjustaddr));
auto myaddr = datarom_addr(adjustaddr);
cdlInfo.set(eCDLog_AddrType_CARTROM, myaddr);
uint8 data = cartridge.rom.read(myaddr);
if(!(r4818 & 2)) {
unsigned increment = (r4818 & 1) ? data_increment() : 1;
if(r4818 & 4) increment = (int16)increment; //16-bit sign extend
@ -267,7 +269,9 @@ uint8 SPC7110::mmio_read(unsigned addr) {
unsigned adjust = data_adjust();
if(r4818 & 8) adjust = (int16)adjust; //16-bit sign extend
uint8 data = cartridge.rom.read(datarom_addr(addr + adjust));
auto myaddr = datarom_addr(addr + adjust);
cdlInfo.set(eCDLog_AddrType_CARTROM, myaddr);
uint8 data = cartridge.rom.read(myaddr);
if((r4818 & 0x60) == 0x60) {
if((r4818 & 16) == 0) {
set_data_pointer(addr + adjust);
@ -357,6 +361,12 @@ void SPC7110::mmio_write(unsigned addr, uint8 data) {
unsigned index = (r4804 << 2);
unsigned length = (r4809 + (r480a << 8));
unsigned addr = datarom_addr(table + index);
cdlInfo.set(eCDLog_AddrType_CARTROM, addr + 0);
cdlInfo.set(eCDLog_AddrType_CARTROM, addr + 1);
cdlInfo.set(eCDLog_AddrType_CARTROM, addr + 2);
cdlInfo.set(eCDLog_AddrType_CARTROM, addr + 3);
unsigned mode = (cartridge.rom.read(addr + 0));
unsigned offset = (cartridge.rom.read(addr + 1) << 16)
+ (cartridge.rom.read(addr + 2) << 8)
@ -650,9 +660,18 @@ void SPC7110::initialize()
//============
uint8 SPC7110::mcu_read(unsigned addr) {
if(addr <= 0xdfffff) return cartridge.rom.read(dx_offset + (addr & 0x0fffff));
if(addr <= 0xefffff) return cartridge.rom.read(ex_offset + (addr & 0x0fffff));
if(addr <= 0xffffff) return cartridge.rom.read(fx_offset + (addr & 0x0fffff));
if(addr <= 0xdfffff) {
cdlInfo.set(eCDLog_AddrType_CARTROM, dx_offset + (addr & 0x0fffff));
return cartridge.rom.read(dx_offset + (addr & 0x0fffff));
}
if(addr <= 0xefffff) {
cdlInfo.set(eCDLog_AddrType_CARTROM, ex_offset + (addr & 0x0fffff));
return cartridge.rom.read(ex_offset + (addr & 0x0fffff));
}
if(addr <= 0xffffff) {
cdlInfo.set(eCDLog_AddrType_CARTROM, fx_offset + (addr & 0x0fffff));
return cartridge.rom.read(fx_offset + (addr & 0x0fffff));
}
return cpu.regs.mdr;
}

View File

@ -14,6 +14,7 @@ uint8 SuperFX::ROM::read(unsigned addr) {
};
return data[addr & 15];
}
cdlInfo.set(eCDLog_AddrType_CARTROM, addr);
return cartridge.rom.read(addr);
}

View File

@ -6,7 +6,9 @@ uint8 SuperFX::bus_read(unsigned addr) {
add_clocks(6);
synchronize_cpu();
}
return cartridge.rom.read((((addr & 0x3f0000) >> 1) | (addr & 0x7fff)) & rom_mask);
auto myaddr = (((addr & 0x3f0000) >> 1) | (addr & 0x7fff)) & rom_mask;
cdlInfo.set(eCDLog_AddrType_CARTROM, addr);
return cartridge.rom.read(myaddr);
}
if((addr & 0xe00000) == 0x400000) { //$40-5f:0000-ffff
@ -14,7 +16,9 @@ uint8 SuperFX::bus_read(unsigned addr) {
add_clocks(6);
synchronize_cpu();
}
return cartridge.rom.read(addr & rom_mask);
auto myaddr = addr & rom_mask;
cdlInfo.set(eCDLog_AddrType_CARTROM, myaddr);
return cartridge.rom.read(myaddr);
}
if((addr & 0xe00000) == 0x600000) { //$60-7f:0000-ffff