diff --git a/bsnes/gameboy/cartridge/huc1/huc1.cpp b/bsnes/gameboy/cartridge/huc1/huc1.cpp index 8a5531eb..b8fb1101 100755 --- a/bsnes/gameboy/cartridge/huc1/huc1.cpp +++ b/bsnes/gameboy/cartridge/huc1/huc1.cpp @@ -1,53 +1,54 @@ #ifdef CARTRIDGE_CPP uint8 Cartridge::HuC1::mmio_read(uint16 addr) { - if(within<0x0000, 0x3fff>(addr)) { + if((addr & 0xc000) == 0x0000) { //$0000-3fff return cartridge.rom_read(addr); } - if(within<0x4000, 0x7fff>(addr)) { + if((addr & 0xc000) == 0x4000) { //$4000-7fff return cartridge.rom_read((rom_select << 14) | (addr & 0x3fff)); } - if(within<0xa000, 0xbfff>(addr)) { - if(ram_enable) return cartridge.ram_read((ram_select << 13) | (addr & 0x1fff)); - return 0x00; + if((addr & 0xe000) == 0xa000) { //$a000-bfff + return cartridge.ram_read((ram_select << 13) | (addr & 0x1fff)); } return 0x00; } void Cartridge::HuC1::mmio_write(uint16 addr, uint8 data) { - if(within<0x0000, 0x1fff>(addr)) { - ram_enable = (data & 0x0f) == 0x0a; + if((addr & 0xe000) == 0x0000) { //$0000-1fff + ram_writable = (data & 0x0f) == 0x0a; return; } - if(within<0x2000, 0x3fff>(addr)) { + if((addr & 0xe000) == 0x2000) { //$2000-3fff rom_select = data; + if(rom_select == 0) rom_select = 1; return; } - if(within<0x4000, 0x5fff>(addr)) { + if((addr & 0xe000) == 0x4000) { //$4000-5fff ram_select = data; return; } - if(within<0x6000, 0x7fff>(addr)) { - //unknown purpose + if((addr & 0xe000) == 0x6000) { //$6000-7fff + model = data & 0x01; return; } - if(within<0xa000, 0xbfff>(addr)) { - if(ram_enable) cartridge.ram_write((ram_select << 13) | (addr & 0x1fff), data); - return; + if((addr & 0xe000) == 0xa000) { //$a000-bfff + if(ram_writable == false) return; + return cartridge.ram_write((ram_select << 13) | (addr & 0x1fff), data); } } void Cartridge::HuC1::power() { - ram_enable = false; + ram_writable = false; rom_select = 0x01; ram_select = 0x00; + model = 0; } #endif diff --git a/bsnes/gameboy/cartridge/huc1/huc1.hpp b/bsnes/gameboy/cartridge/huc1/huc1.hpp index f7bcc37d..f0f60d8f 100755 --- a/bsnes/gameboy/cartridge/huc1/huc1.hpp +++ b/bsnes/gameboy/cartridge/huc1/huc1.hpp @@ -1,7 +1,8 @@ struct HuC1 : MMIO { - bool ram_enable; //0000-1fff - uint8 rom_select; //2000-3fff - uint8 ram_select; //4000-5fff + bool ram_writable; //$0000-1fff + uint8 rom_select; //$2000-3fff + uint8 ram_select; //$4000-5fff + bool model; //$6000-7fff uint8 mmio_read(uint16 addr); void mmio_write(uint16 addr, uint8 data); diff --git a/bsnes/gameboy/cartridge/huc3/huc3.cpp b/bsnes/gameboy/cartridge/huc3/huc3.cpp index efaa9af0..c2bdcda4 100755 --- a/bsnes/gameboy/cartridge/huc3/huc3.cpp +++ b/bsnes/gameboy/cartridge/huc3/huc3.cpp @@ -1,15 +1,15 @@ #ifdef CARTRIDGE_CPP uint8 Cartridge::HuC3::mmio_read(uint16 addr) { - if(within<0x0000, 0x3fff>(addr)) { + if((addr & 0xc000) == 0x0000) { //$0000-3fff return cartridge.rom_read(addr); } - if(within<0x4000, 0x7fff>(addr)) { + if((addr & 0xc000) == 0x4000) { //$4000-7fff return cartridge.rom_read((rom_select << 14) | (addr & 0x3fff)); } - if(within<0xa000, 0xbfff>(addr)) { + if((addr & 0xe000) == 0xa000) { //$a000-bfff if(ram_enable) return cartridge.ram_read((ram_select << 13) | (addr & 0x1fff)); return 0x00; } @@ -18,27 +18,27 @@ uint8 Cartridge::HuC3::mmio_read(uint16 addr) { } void Cartridge::HuC3::mmio_write(uint16 addr, uint8 data) { - if(within<0x0000, 0x1fff>(addr)) { + if((addr & 0xe000) == 0x0000) { //$0000-1fff ram_enable = (data & 0x0f) == 0x0a; return; } - if(within<0x2000, 0x3fff>(addr)) { + if((addr & 0xe000) == 0x2000) { //$2000-3fff rom_select = data; return; } - if(within<0x4000, 0x5fff>(addr)) { + if((addr & 0xe000) == 0x4000) { //$4000-5fff ram_select = data; return; } - if(within<0x6000, 0x7fff>(addr)) { + if((addr & 0xe000) == 0x6000) { //$6000-7fff //unknown purpose return; } - if(within<0xa000, 0xbfff>(addr)) { + if((addr & 0xe000) == 0xa000) { //$a000-bfff if(ram_enable) cartridge.ram_write((ram_select << 13) | (addr & 0x1fff), data); return; } diff --git a/bsnes/gameboy/cartridge/huc3/huc3.hpp b/bsnes/gameboy/cartridge/huc3/huc3.hpp index 407d3bd4..61d4aa61 100755 --- a/bsnes/gameboy/cartridge/huc3/huc3.hpp +++ b/bsnes/gameboy/cartridge/huc3/huc3.hpp @@ -1,7 +1,7 @@ struct HuC3 : MMIO { - bool ram_enable; //0000-1fff - uint8 rom_select; //2000-3fff - uint8 ram_select; //4000-5fff + bool ram_enable; //$0000-1fff + uint8 rom_select; //$2000-3fff + uint8 ram_select; //$4000-5fff uint8 mmio_read(uint16 addr); void mmio_write(uint16 addr, uint8 data); diff --git a/bsnes/gameboy/cartridge/mbc0/mbc0.cpp b/bsnes/gameboy/cartridge/mbc0/mbc0.cpp index f3280f31..2312f572 100755 --- a/bsnes/gameboy/cartridge/mbc0/mbc0.cpp +++ b/bsnes/gameboy/cartridge/mbc0/mbc0.cpp @@ -1,11 +1,11 @@ #ifdef CARTRIDGE_CPP uint8 Cartridge::MBC0::mmio_read(uint16 addr) { - if(within<0x0000, 0x7fff>(addr)) { + if((addr & 0x8000) == 0x0000) { //$0000-7fff return cartridge.rom_read(addr); } - if(within<0xa000, 0xbfff>(addr)) { + if((addr & 0xe000) == 0xa000) { //$a000-bfff return cartridge.ram_read(addr & 0x1fff); } @@ -13,7 +13,7 @@ uint8 Cartridge::MBC0::mmio_read(uint16 addr) { } void Cartridge::MBC0::mmio_write(uint16 addr, uint8 data) { - if(within<0xa000, 0xbfff>(addr)) { + if((addr & 0xe000) == 0xa000) { //$a000-bfff cartridge.ram_write(addr & 0x1fff, data); return; } diff --git a/bsnes/gameboy/cartridge/mbc1/mbc1.cpp b/bsnes/gameboy/cartridge/mbc1/mbc1.cpp index d254e7fe..7e15c135 100755 --- a/bsnes/gameboy/cartridge/mbc1/mbc1.cpp +++ b/bsnes/gameboy/cartridge/mbc1/mbc1.cpp @@ -1,11 +1,11 @@ #ifdef CARTRIDGE_CPP uint8 Cartridge::MBC1::mmio_read(uint16 addr) { - if(within<0x0000, 0x3fff>(addr)) { + if((addr & 0xc000) == 0x0000) { //$0000-3fff return cartridge.rom_read(addr); } - if(within<0x4000, 0x7fff>(addr)) { + if((addr & 0xc000) == 0x4000) { //$4000-7fff if(mode_select == 0) { return cartridge.rom_read((ram_select << 19) | (rom_select << 14) | (addr & 0x3fff)); } else { @@ -13,7 +13,7 @@ uint8 Cartridge::MBC1::mmio_read(uint16 addr) { } } - if(within<0xa000, 0xbfff>(addr)) { + if((addr & 0xe000) == 0xa000) { //$a000-bfff if(ram_enable) { if(mode_select == 0) { return cartridge.ram_read(addr & 0x1fff); @@ -28,27 +28,27 @@ uint8 Cartridge::MBC1::mmio_read(uint16 addr) { } void Cartridge::MBC1::mmio_write(uint16 addr, uint8 data) { - if(within<0x0000, 0x1fff>(addr)) { + if((addr & 0xe000) == 0x0000) { //$0000-1fff ram_enable = (data & 0x0f) == 0x0a; return; } - if(within<0x2000, 0x3fff>(addr)) { + if((addr & 0xe000) == 0x2000) { //$2000-3fff rom_select = (data & 0x1f) + ((data & 0x1f) == 0); return; } - if(within<0x4000, 0x5fff>(addr)) { + if((addr & 0xe000) == 0x4000) { //$4000-5fff ram_select = data & 0x03; return; } - if(within<0x6000, 0x7fff>(addr)) { + if((addr & 0xe000) == 0x6000) { //$6000-7fff mode_select = data & 0x01; return; } - if(within<0xa000, 0xbfff>(addr)) { + if((addr & 0xe000) == 0xa000) { //$a000-bfff if(ram_enable) { if(mode_select == 0) { cartridge.ram_write(addr & 0x1fff, data); diff --git a/bsnes/gameboy/cartridge/mbc1/mbc1.hpp b/bsnes/gameboy/cartridge/mbc1/mbc1.hpp index 099cf43d..19f8b75b 100755 --- a/bsnes/gameboy/cartridge/mbc1/mbc1.hpp +++ b/bsnes/gameboy/cartridge/mbc1/mbc1.hpp @@ -1,8 +1,8 @@ struct MBC1 : MMIO { - bool ram_enable; //0000-1fff - uint8 rom_select; //2000-3fff - uint8 ram_select; //4000-5fff - bool mode_select; //6000-7fff + bool ram_enable; //$0000-1fff + uint8 rom_select; //$2000-3fff + uint8 ram_select; //$4000-5fff + bool mode_select; //$6000-7fff uint8 mmio_read(uint16 addr); void mmio_write(uint16 addr, uint8 data); diff --git a/bsnes/gameboy/cartridge/mbc2/mbc2.cpp b/bsnes/gameboy/cartridge/mbc2/mbc2.cpp index d5c9be1a..0e0825f8 100755 --- a/bsnes/gameboy/cartridge/mbc2/mbc2.cpp +++ b/bsnes/gameboy/cartridge/mbc2/mbc2.cpp @@ -1,15 +1,15 @@ #ifdef CARTRIDGE_CPP uint8 Cartridge::MBC2::mmio_read(uint16 addr) { - if(within<0x0000, 0x3fff>(addr)) { + if((addr & 0xc000) == 0x0000) { //$0000-3fff return cartridge.rom_read(addr); } - if(within<0x4000, 0x7fff>(addr)) { + if((addr & 0xc000) == 0x4000) { //$4000-7fff return cartridge.rom_read((rom_select << 14) | (addr & 0x3fff)); } - if(within<0xa000, 0xa1ff>(addr)) { + if((addr & 0xee00) == 0xa000) { //$a000-a1ff if(ram_enable) return cartridge.ram_read(addr & 0x1ff); return 0x00; } @@ -18,17 +18,17 @@ uint8 Cartridge::MBC2::mmio_read(uint16 addr) { } void Cartridge::MBC2::mmio_write(uint16 addr, uint8 data) { - if(within<0x0000, 0x1fff>(addr)) { + if((addr & 0xe000) == 0x0000) { //$0000-1fff if(!(addr & 0x0100)) ram_enable = (data & 0x0f) == 0x0a; return; } - if(within<0x2000, 0x3fff>(addr)) { + if((addr & 0xe000) == 0x2000) { //$2000-3fff if( (addr & 0x0100)) rom_select = (data & 0x0f) + ((data & 0x0f) == 0); return; } - if(within<0xa000, 0xa1ff>(addr)) { + if((addr & 0xee00) == 0xa000) { //$a000-a1ff if(ram_enable) cartridge.ram_write(addr & 0x1ff, data & 0x0f); return; } diff --git a/bsnes/gameboy/cartridge/mbc2/mbc2.hpp b/bsnes/gameboy/cartridge/mbc2/mbc2.hpp index be9b7db6..c22a652a 100755 --- a/bsnes/gameboy/cartridge/mbc2/mbc2.hpp +++ b/bsnes/gameboy/cartridge/mbc2/mbc2.hpp @@ -1,6 +1,6 @@ struct MBC2 : MMIO { - bool ram_enable; //0000-1fff - uint8 rom_select; //2000-3fff + bool ram_enable; //$0000-1fff + uint8 rom_select; //$2000-3fff uint8 mmio_read(uint16 addr); void mmio_write(uint16 addr, uint8 data); diff --git a/bsnes/gameboy/cartridge/mbc3/mbc3.cpp b/bsnes/gameboy/cartridge/mbc3/mbc3.cpp index d04ca8c0..595ac1d9 100755 --- a/bsnes/gameboy/cartridge/mbc3/mbc3.cpp +++ b/bsnes/gameboy/cartridge/mbc3/mbc3.cpp @@ -19,15 +19,15 @@ void Cartridge::MBC3::second() { } uint8 Cartridge::MBC3::mmio_read(uint16 addr) { - if(within<0x0000, 0x3fff>(addr)) { + if((addr & 0xc000) == 0x0000) { //$0000-3fff return cartridge.rom_read(addr); } - if(within<0x4000, 0x7fff>(addr)) { + if((addr & 0xc000) == 0x4000) { //$4000-7fff return cartridge.rom_read((rom_select << 14) | (addr & 0x3fff)); } - if(within<0xa000, 0xbfff>(addr)) { + if((addr & 0xe000) == 0xa000) { //$a000-bfff if(ram_enable) { if(ram_select >= 0x00 && ram_select <= 0x03) { return cartridge.ram_read((ram_select << 13) | (addr & 0x1fff)); @@ -45,22 +45,22 @@ uint8 Cartridge::MBC3::mmio_read(uint16 addr) { } void Cartridge::MBC3::mmio_write(uint16 addr, uint8 data) { - if(within<0x0000, 0x1fff>(addr)) { + if((addr & 0xe000) == 0x0000) { //$0000-1fff ram_enable = (data & 0x0f) == 0x0a; return; } - if(within<0x2000, 0x3fff>(addr)) { + if((addr & 0xe000) == 0x2000) { //$2000-3fff rom_select = (data & 0x7f) + ((data & 0x7f) == 0); return; } - if(within<0x4000, 0x5fff>(addr)) { + if((addr & 0xe000) == 0x4000) { //$4000-5fff ram_select = data; return; } - if(within<0x6000, 0x7fff>(addr)) { + if((addr & 0xe000) == 0x6000) { //$6000-7fff if(rtc_latch == 0 && data == 1) { rtc_latch_second = rtc_second; rtc_latch_minute = rtc_minute; @@ -72,7 +72,7 @@ void Cartridge::MBC3::mmio_write(uint16 addr, uint8 data) { return; } - if(within<0xa000, 0xbfff>(addr)) { + if((addr & 0xe000) == 0xa000) { //$a000-bfff if(ram_enable) { if(ram_select >= 0x00 && ram_select <= 0x03) { cartridge.ram_write((ram_select << 13) | (addr & 0x1fff), data); diff --git a/bsnes/gameboy/cartridge/mbc3/mbc3.hpp b/bsnes/gameboy/cartridge/mbc3/mbc3.hpp index d83ba182..fbd7775d 100755 --- a/bsnes/gameboy/cartridge/mbc3/mbc3.hpp +++ b/bsnes/gameboy/cartridge/mbc3/mbc3.hpp @@ -1,8 +1,8 @@ struct MBC3 : MMIO { - bool ram_enable; //0000-1fff - uint8 rom_select; //2000-3fff - uint8 ram_select; //4000-5fff - bool rtc_latch; //6000-7fff + bool ram_enable; //$0000-1fff + uint8 rom_select; //$2000-3fff + uint8 ram_select; //$4000-5fff + bool rtc_latch; //$6000-7fff bool rtc_halt; unsigned rtc_second; diff --git a/bsnes/gameboy/cartridge/mbc5/mbc5.cpp b/bsnes/gameboy/cartridge/mbc5/mbc5.cpp index 4dc215bb..52f3223b 100755 --- a/bsnes/gameboy/cartridge/mbc5/mbc5.cpp +++ b/bsnes/gameboy/cartridge/mbc5/mbc5.cpp @@ -1,15 +1,15 @@ #ifdef CARTRIDGE_CPP uint8 Cartridge::MBC5::mmio_read(uint16 addr) { - if(within<0x0000, 0x3fff>(addr)) { + if((addr & 0xc000) == 0x0000) { //$0000-3fff return cartridge.rom_read(addr); } - if(within<0x4000, 0x7fff>(addr)) { + if((addr & 0xc000) == 0x4000) { //$4000-7fff return cartridge.rom_read((rom_select << 14) | (addr & 0x3fff)); } - if(within<0xa000, 0xbfff>(addr)) { + if((addr & 0xe000) == 0xa000) { //$a000-bfff if(ram_enable) return cartridge.ram_read((ram_select << 13) | (addr & 0x1fff)); return 0x00; } @@ -18,27 +18,27 @@ uint8 Cartridge::MBC5::mmio_read(uint16 addr) { } void Cartridge::MBC5::mmio_write(uint16 addr, uint8 data) { - if(within<0x0000, 0x1fff>(addr)) { + if((addr & 0xe000) == 0x0000) { //$0000-1fff ram_enable = (data & 0x0f) == 0x0a; return; } - if(within<0x2000, 0x2fff>(addr)) { + if((addr & 0xf000) == 0x2000) { //$2000-2fff rom_select = (rom_select & 0x0100) | data; return; } - if(within<0x3000, 0x3fff>(addr)) { + if((addr & 0xf000) == 0x3000) { //$3000-3fff rom_select = ((data & 1) << 8) | (rom_select & 0x00ff); return; } - if(within<0x4000, 0x5fff>(addr)) { + if((addr & 0xe000) == 0x4000) { //$4000-5fff ram_select = data & 0x0f; return; } - if(within<0xa000, 0xbfff>(addr)) { + if((addr & 0xe000) == 0xa000) { //$a000-bfff if(ram_enable) cartridge.ram_write((ram_select << 13) | (addr & 0x1fff), data); return; } diff --git a/bsnes/gameboy/cartridge/mbc5/mbc5.hpp b/bsnes/gameboy/cartridge/mbc5/mbc5.hpp index 7d5b0a30..0ec3abb0 100755 --- a/bsnes/gameboy/cartridge/mbc5/mbc5.hpp +++ b/bsnes/gameboy/cartridge/mbc5/mbc5.hpp @@ -1,7 +1,7 @@ struct MBC5 : MMIO { - bool ram_enable; //0000-1fff - uint16 rom_select; //2000-2fff + 3000-3fff - uint8 ram_select; //4000-5fff + bool ram_enable; //$0000-1fff + uint16 rom_select; //$2000-2fff + $3000-3fff + uint8 ram_select; //$4000-5fff uint8 mmio_read(uint16 addr); void mmio_write(uint16 addr, uint8 data); diff --git a/bsnes/gameboy/cartridge/mmm01/mmm01.cpp b/bsnes/gameboy/cartridge/mmm01/mmm01.cpp index 4ad9fae0..b690b8cf 100755 --- a/bsnes/gameboy/cartridge/mmm01/mmm01.cpp +++ b/bsnes/gameboy/cartridge/mmm01/mmm01.cpp @@ -1,19 +1,19 @@ #ifdef CARTRIDGE_CPP uint8 Cartridge::MMM01::mmio_read(uint16 addr) { - if(within<0x0000, 0x7fff>(addr)) { + if((addr & 0x8000) == 0x0000) { //$0000-7fff if(rom_mode == 0) return cartridge.rom_read(addr); } - if(within<0x0000, 0x3fff>(addr)) { + if((addr & 0xc000) == 0x0000) { //$0000-3fff return cartridge.rom_read(0x8000 + (rom_base << 14) + (addr & 0x3fff)); } - if(within<0x4000, 0x7fff>(addr)) { + if((addr & 0xc000) == 0x4000) { //$4000-7fff return cartridge.rom_read(0x8000 + (rom_base << 14) + (rom_select << 14) + (addr & 0x3fff)); } - if(within<0xa000, 0xbfff>(addr)) { + if((addr & 0xe000) == 0xa000) { //$a000-bfff if(ram_enable) return cartridge.ram_read((ram_select << 13) + (addr & 0x1fff)); return 0x00; } @@ -22,7 +22,7 @@ uint8 Cartridge::MMM01::mmio_read(uint16 addr) { } void Cartridge::MMM01::mmio_write(uint16 addr, uint8 data) { - if(within<0x0000, 0x1fff>(addr)) { + if((addr & 0xe000) == 0x0000) { //$0000-1fff if(rom_mode == 0) { rom_mode = 1; } else { @@ -30,7 +30,7 @@ void Cartridge::MMM01::mmio_write(uint16 addr, uint8 data) { } } - if(within<0x2000, 0x3fff>(addr)) { + if((addr & 0xe000) == 0x2000) { //$2000-3fff if(rom_mode == 0) { rom_base = data & 0x3f; } else { @@ -38,17 +38,17 @@ void Cartridge::MMM01::mmio_write(uint16 addr, uint8 data) { } } - if(within<0x4000, 0x5fff>(addr)) { + if((addr & 0xe000) == 0x4000) { //$4000-5fff if(rom_mode == 1) { ram_select = data; } } - if(within<0x6000, 0x7fff>(addr)) { + if((addr & 0xe000) == 0x6000) { //$6000-7fff //unknown purpose } - if(within<0xa000, 0xbfff>(addr)) { + if((addr & 0xe000) == 0xa000) { //$a000-bfff if(ram_enable) cartridge.ram_write((ram_select << 13) + (addr & 0x1fff), data); } } diff --git a/bsnes/gameboy/cartridge/serialization.cpp b/bsnes/gameboy/cartridge/serialization.cpp index 600d4d02..2f54262a 100755 --- a/bsnes/gameboy/cartridge/serialization.cpp +++ b/bsnes/gameboy/cartridge/serialization.cpp @@ -41,9 +41,10 @@ void Cartridge::serialize(serializer &s) { s.integer(mmm01.rom_select); s.integer(mmm01.ram_select); - s.integer(huc1.ram_enable); + s.integer(huc1.ram_writable); s.integer(huc1.rom_select); s.integer(huc1.ram_select); + s.integer(huc1.model); s.integer(huc3.ram_enable); s.integer(huc3.rom_select); diff --git a/bsnes/gameboy/gameboy.hpp b/bsnes/gameboy/gameboy.hpp index 01893319..b83c2328 100755 --- a/bsnes/gameboy/gameboy.hpp +++ b/bsnes/gameboy/gameboy.hpp @@ -69,12 +69,6 @@ namespace GameBoy { typedef uint_t<30> uint30; typedef uint_t<31> uint31; - template - alwaysinline bool within(uint16 addr) { - static const uint16 mask = ~(hi ^ lo); - return (addr & mask) == lo; - } - struct Processor { cothread_t thread; unsigned frequency; diff --git a/bsnes/gameboy/lcd/cgb.cpp b/bsnes/gameboy/lcd/cgb.cpp index c29230b3..31892ca3 100755 --- a/bsnes/gameboy/lcd/cgb.cpp +++ b/bsnes/gameboy/lcd/cgb.cpp @@ -140,7 +140,7 @@ void LCD::cgb_render_ob() { unsigned n = sprite[s] << 2; unsigned sy = oam[n + 0] - 16; unsigned sx = oam[n + 1] - 8; - unsigned tile = oam[n + 2]; + unsigned tile = oam[n + 2] & ~status.ob_size; unsigned attr = oam[n + 3]; sy = status.ly - sy; diff --git a/bsnes/gameboy/lcd/dmg.cpp b/bsnes/gameboy/lcd/dmg.cpp index d8e6d98e..dae518af 100755 --- a/bsnes/gameboy/lcd/dmg.cpp +++ b/bsnes/gameboy/lcd/dmg.cpp @@ -109,7 +109,7 @@ void LCD::dmg_render_ob() { unsigned n = sprite[s] << 2; unsigned sy = oam[n + 0] - 16; unsigned sx = oam[n + 1] - 8; - unsigned tile = oam[n + 2]; + unsigned tile = oam[n + 2] & ~status.ob_size; unsigned attr = oam[n + 3]; sy = status.ly - sy; diff --git a/bsnes/ui/main.cpp b/bsnes/ui/main.cpp index 76984cf4..e1fca9e7 100755 --- a/bsnes/ui/main.cpp +++ b/bsnes/ui/main.cpp @@ -27,7 +27,7 @@ void Application::run() { } Application::Application(int argc, char **argv) { - title = "bsnes v084.05"; + title = "bsnes v084.06"; application = this; quit = false;