mirror of https://github.com/bsnes-emu/bsnes.git
v108.6
* fix IRQ regression in Power Rangers: Fighting Edition
This commit is contained in:
parent
bad27bb8f3
commit
5757949023
17
LICENSE.txt
17
LICENSE.txt
|
@ -1,10 +1,9 @@
|
|||
----------------------------------------------------------------------
|
||||
bsnes - Suite of videogame console emulators
|
||||
icarus - Game library importer for higan
|
||||
bsnes - Super Nintendo emulator
|
||||
|
||||
Copyright © 2004-2019 byuu
|
||||
Copyright © 2004-2019 byuu
|
||||
|
||||
https://byuu.org/
|
||||
https://byuu.org
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -21,12 +20,12 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|||
----------------------------------------------------------------------
|
||||
|
||||
----------------------------------------------------------------------
|
||||
hiro - User interface toolkit
|
||||
libco - C cooperative threading library
|
||||
nall - C++ template library
|
||||
ruby - Hardware abstraction layer
|
||||
libco - C cooperative threading library
|
||||
nall - C++ template library
|
||||
ruby - Hardware abstraction library
|
||||
hiro - User interface library
|
||||
|
||||
Copyright © 2006-2019 byuu
|
||||
Copyright © 2006-2019 byuu
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for
|
||||
any purpose with or without fee is hereby granted, provided that the
|
||||
|
|
|
@ -31,7 +31,7 @@ using namespace nall;
|
|||
|
||||
namespace Emulator {
|
||||
static const string Name = "bsnes";
|
||||
static const string Version = "108.5";
|
||||
static const string Version = "108.6";
|
||||
static const string Author = "byuu";
|
||||
static const string License = "GPLv3";
|
||||
static const string Website = "https://byuu.org";
|
||||
|
|
|
@ -1,14 +1,12 @@
|
|||
auto CPU::idle() -> void {
|
||||
status.irqLock = false;
|
||||
status.clockCount = 6;
|
||||
dmaEdge();
|
||||
step<6,0>();
|
||||
status.irqLock = 0;
|
||||
aluEdge();
|
||||
}
|
||||
|
||||
auto CPU::read(uint address) -> uint8 {
|
||||
status.irqLock = false;
|
||||
|
||||
if(address & 0x408000) {
|
||||
if(address & 0x800000 && io.fastROM) {
|
||||
status.clockCount = 6;
|
||||
|
@ -38,6 +36,7 @@ auto CPU::read(uint address) -> uint8 {
|
|||
step<8,1>();
|
||||
}
|
||||
|
||||
status.irqLock = 0;
|
||||
auto data = bus.read(address, r.mdr);
|
||||
step<4,0>();
|
||||
aluEdge();
|
||||
|
@ -47,7 +46,6 @@ auto CPU::read(uint address) -> uint8 {
|
|||
}
|
||||
|
||||
auto CPU::write(uint address, uint8 data) -> void {
|
||||
status.irqLock = false;
|
||||
aluEdge();
|
||||
|
||||
if(address & 0x408000) {
|
||||
|
@ -79,6 +77,7 @@ auto CPU::write(uint address, uint8 data) -> void {
|
|||
step<12,1>();
|
||||
}
|
||||
|
||||
status.irqLock = 0;
|
||||
bus.write(address, r.mdr = data);
|
||||
}
|
||||
|
||||
|
|
|
@ -43,8 +43,8 @@ auto PPU::Line::renderMode7(PPU::IO::Background& self, uint source) -> void {
|
|||
bool outOfBounds = (pixelX | pixelY) & ~1023;
|
||||
uint15 tileAddress = tileY * 128 + tileX;
|
||||
uint15 paletteAddress = ((pixelY & 7) << 3) + (pixelX & 7);
|
||||
uint8_t tile = io.mode7.repeat == 3 && outOfBounds ? 0 : ppu.vram[tileAddress] >> 0;
|
||||
uint8_t palette = io.mode7.repeat == 2 && outOfBounds ? 0 : ppu.vram[paletteAddress + (tile << 6)] >> 8;
|
||||
uint8 tile = io.mode7.repeat == 3 && outOfBounds ? 0 : ppu.vram[tileAddress] >> 0;
|
||||
uint8 palette = io.mode7.repeat == 2 && outOfBounds ? 0 : ppu.vram[tile << 6 | paletteAddress] >> 8;
|
||||
|
||||
uint priority;
|
||||
if(source == Source::BG1) {
|
||||
|
|
|
@ -140,7 +140,7 @@ auto PPU::power(bool reset) -> void {
|
|||
|
||||
//$2102 OAMADDL
|
||||
//$2103 OAMADDH
|
||||
io.oamBaseAddress = random();
|
||||
io.oamBaseAddress = random() & ~1;
|
||||
io.oamAddress = random();
|
||||
io.oamPriority = random();
|
||||
|
||||
|
|
|
@ -28,16 +28,16 @@ private:
|
|||
alwaysinline auto addressVRAM() const -> uint16;
|
||||
alwaysinline auto readVRAM() -> uint16;
|
||||
alwaysinline auto writeVRAM(bool byte, uint8 data) -> void;
|
||||
alwaysinline auto readOAM(uint10 addr) -> uint8;
|
||||
alwaysinline auto writeOAM(uint10 addr, uint8 data) -> void;
|
||||
alwaysinline auto readCGRAM(bool byte, uint8 addr) -> uint8;
|
||||
alwaysinline auto writeCGRAM(uint8 addr, uint15 data) -> void;
|
||||
auto readIO(uint addr, uint8 data) -> uint8;
|
||||
auto writeIO(uint addr, uint8 data) -> void;
|
||||
alwaysinline auto readOAM(uint10 address) -> uint8;
|
||||
alwaysinline auto writeOAM(uint10 address, uint8 data) -> void;
|
||||
alwaysinline auto readCGRAM(bool byte, uint8 address) -> uint8;
|
||||
alwaysinline auto writeCGRAM(uint8 address, uint15 data) -> void;
|
||||
auto readIO(uint address, uint8 data) -> uint8;
|
||||
auto writeIO(uint address, uint8 data) -> void;
|
||||
auto updateVideoMode() -> void;
|
||||
|
||||
struct VRAM {
|
||||
auto& operator[](uint addr) { return data[addr & mask]; }
|
||||
auto& operator[](uint address) { return data[address & mask]; }
|
||||
uint16 data[64 * 1024];
|
||||
uint16 mask = 0x7fff;
|
||||
} vram;
|
||||
|
|
Loading…
Reference in New Issue