mirror of https://github.com/bsnes-emu/bsnes.git
Update to v071 release.
byuu says (since v070): - fixed a regression in the accuracy/compatibility CPU core with IRQ masking; fixes World Heroes 2 - fixed OAM address reset on $2100 writes for performance PPU core; fixes Mahjongg 2 and others - DSP-1 always returns high 8-bits of status register; fixes Ace wo Nerae! freeze [Jonas Quinn] - performance core can now take advantage of serial support - pixel shaders now use a unified XML format; in the future they will support multi-pass shaders and textures - major code restructuring - first public release of phoenix GUI port - mightymo's cheat code pack is now an external file for the phoenix port - phoenix port stores cheat codes in XML format as well, unifying all file formats to the same markup language
This commit is contained in:
parent
4016ae1d43
commit
6c3aec7dc9
|
@ -1,6 +1,6 @@
|
||||||
include nall/Makefile
|
include nall/Makefile
|
||||||
snes := snes
|
snes := snes
|
||||||
profile := performance
|
profile := accuracy
|
||||||
ui := ui-phoenix
|
ui := ui-phoenix
|
||||||
|
|
||||||
# compiler
|
# compiler
|
||||||
|
|
|
@ -75,7 +75,7 @@ void PPU::render_line_mode7(uint8 pri0_pos, uint8 pri1_pos) {
|
||||||
palette = memory::vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1];
|
palette = memory::vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1];
|
||||||
} break;
|
} break;
|
||||||
case 2: { //palette color 0 outside of screen area
|
case 2: { //palette color 0 outside of screen area
|
||||||
if(px < 0 || px > 1023 || py < 0 || py > 1023) {
|
if((px | py) & ~1023) {
|
||||||
palette = 0;
|
palette = 0;
|
||||||
} else {
|
} else {
|
||||||
px &= 1023;
|
px &= 1023;
|
||||||
|
@ -87,7 +87,7 @@ void PPU::render_line_mode7(uint8 pri0_pos, uint8 pri1_pos) {
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case 3: { //character 0 repetition outside of screen area
|
case 3: { //character 0 repetition outside of screen area
|
||||||
if(px < 0 || px > 1023 || py < 0 || py > 1023) {
|
if((px | py) & ~1023) {
|
||||||
tile = 0;
|
tile = 0;
|
||||||
} else {
|
} else {
|
||||||
px &= 1023;
|
px &= 1023;
|
||||||
|
|
|
@ -49,7 +49,7 @@ void PPU::Background::render_mode7() {
|
||||||
}
|
}
|
||||||
|
|
||||||
case 2: {
|
case 2: {
|
||||||
if(px < 0 || px > 1023 || py < 0 || py > 1023) {
|
if((px | py) & ~1023) {
|
||||||
palette = 0;
|
palette = 0;
|
||||||
} else {
|
} else {
|
||||||
px &= 1023;
|
px &= 1023;
|
||||||
|
@ -63,7 +63,7 @@ void PPU::Background::render_mode7() {
|
||||||
}
|
}
|
||||||
|
|
||||||
case 3: {
|
case 3: {
|
||||||
if(px < 0 || px > 1023 || py < 0 || py > 1023) {
|
if((px | py) & ~1023) {
|
||||||
tile = 0;
|
tile = 0;
|
||||||
} else {
|
} else {
|
||||||
px &= 1023;
|
px &= 1023;
|
||||||
|
|
|
@ -283,7 +283,7 @@ void PPU::mmio_write(unsigned addr, uint8 data) {
|
||||||
|
|
||||||
switch(addr & 0xffff) {
|
switch(addr & 0xffff) {
|
||||||
case 0x2100: { //INIDISP
|
case 0x2100: { //INIDISP
|
||||||
if(regs.display_disable && vcounter() == display.height) oam.address_reset();
|
if(regs.display_disable && cpu.vcounter() == display.height) oam.address_reset();
|
||||||
regs.display_disable = data & 0x80;
|
regs.display_disable = data & 0x80;
|
||||||
regs.display_brightness = data & 0x0f;
|
regs.display_brightness = data & 0x0f;
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -38,7 +38,7 @@ unsigned snes_library_revision_major(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned snes_library_revision_minor(void) {
|
unsigned snes_library_revision_minor(void) {
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void snes_set_video_refresh(snes_video_refresh_t video_refresh) {
|
void snes_set_video_refresh(snes_video_refresh_t video_refresh) {
|
||||||
|
@ -61,6 +61,10 @@ void snes_set_controller_port_device(bool port, unsigned device) {
|
||||||
SNES::input.port_set_device(port, (SNES::Input::Device)device);
|
SNES::input.port_set_device(port, (SNES::Input::Device)device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void snes_set_cartridge_basename(const char *basename) {
|
||||||
|
SNES::cartridge.basename = basename;
|
||||||
|
}
|
||||||
|
|
||||||
void snes_init(void) {
|
void snes_init(void) {
|
||||||
SNES::system.init(&interface);
|
SNES::system.init(&interface);
|
||||||
SNES::input.port_set_device(0, SNES::Input::Device::Joypad);
|
SNES::input.port_set_device(0, SNES::Input::Device::Joypad);
|
||||||
|
|
|
@ -74,6 +74,7 @@ void snes_set_input_poll(snes_input_poll_t);
|
||||||
void snes_set_input_state(snes_input_state_t);
|
void snes_set_input_state(snes_input_state_t);
|
||||||
|
|
||||||
void snes_set_controller_port_device(bool port, unsigned device);
|
void snes_set_controller_port_device(bool port, unsigned device);
|
||||||
|
void snes_set_cartridge_basename(const char *basename);
|
||||||
|
|
||||||
void snes_init(void);
|
void snes_init(void);
|
||||||
void snes_term(void);
|
void snes_term(void);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
namespace SNES {
|
namespace SNES {
|
||||||
namespace Info {
|
namespace Info {
|
||||||
static const char Name[] = "bsnes";
|
static const char Name[] = "bsnes";
|
||||||
static const char Version[] = "070.17";
|
static const char Version[] = "071";
|
||||||
static const unsigned SerializerVersion = 14;
|
static const unsigned SerializerVersion = 14;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,54 @@
|
||||||
void InputMapper::poll_hotkeys(unsigned scancode, int16_t value) {
|
void InputMapper::poll_hotkeys(unsigned scancode, int16_t value) {
|
||||||
if(value == 0) return;
|
//internal state
|
||||||
|
static unsigned activeSlot = 1;
|
||||||
|
static bool videoSync = false;
|
||||||
|
static bool audioSync = false;
|
||||||
|
|
||||||
|
if(value) {
|
||||||
|
//key pressed
|
||||||
if(scancode == keyboard(0)[Keyboard::Escape]) input.unacquire();
|
if(scancode == keyboard(0)[Keyboard::Escape]) input.unacquire();
|
||||||
if(mainWindow.focused() == false) return;
|
if(mainWindow.focused() == false) return;
|
||||||
|
|
||||||
|
//save states
|
||||||
|
if(scancode == keyboard(0)[Keyboard::F5]) {
|
||||||
|
utility.saveState(activeSlot);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(scancode == keyboard(0)[Keyboard::F7]) {
|
||||||
|
utility.loadState(activeSlot);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(scancode == keyboard(0)[Keyboard::F6]) {
|
||||||
|
activeSlot = (activeSlot == 1 ? 5 : activeSlot - 1);
|
||||||
|
utility.showMessage({ "Slot ", activeSlot, " selected" });
|
||||||
|
}
|
||||||
|
|
||||||
|
if(scancode == keyboard(0)[Keyboard::F8]) {
|
||||||
|
activeSlot = (activeSlot == 5 ? 1 : activeSlot + 1);
|
||||||
|
utility.showMessage({ "Slot ", activeSlot, " selected" });
|
||||||
|
}
|
||||||
|
|
||||||
|
//fast forward
|
||||||
|
if(scancode == keyboard(0)[Keyboard::Tilde]) {
|
||||||
|
videoSync = config.video.synchronize;
|
||||||
|
audioSync = config.audio.synchronize;
|
||||||
|
video.set(Video::Synchronize, config.video.synchronize = false);
|
||||||
|
audio.set(Audio::Synchronize, config.audio.synchronize = false);
|
||||||
|
#if defined(PROFILE_COMPATIBILITY) || defined(PROFILE_PERFORMANCE)
|
||||||
|
SNES::ppu.set_frameskip(9);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//key released
|
||||||
|
if(mainWindow.focused() == false) return;
|
||||||
|
|
||||||
|
//fast forward
|
||||||
|
if(scancode == keyboard(0)[Keyboard::Tilde]) {
|
||||||
|
video.set(Video::Synchronize, config.video.synchronize = videoSync);
|
||||||
|
audio.set(Audio::Synchronize, config.audio.synchronize = audioSync);
|
||||||
|
#if defined(PROFILE_COMPATIBILITY) || defined(PROFILE_PERFORMANCE)
|
||||||
|
SNES::ppu.set_frameskip(0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue