mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-02-22 06:02:28 +01:00
byuu says: Changelog: - WS: fixed lods, scas instructions - WS: implemented missing GRP4 instructions - WS: fixed transparency for screen one - WSC: added color-mode PPU rendering - WS+WSC: added packed pixel mode support - WS+WSC: added dummy sound register reads/writes - SFC: added threading to SuperDisc (it's hanging for right now; need to clear IRQ on $21e2 writes) SuperDisc Timer and Sound Check were failing before due to not turning off IRQs on $21e4 clear, so I'm happy that's fixed now. Riviera starts now, and displays the first intro screen before crashing. Huge, huge amounts of corrupted graphics, though. This game's really making me work for it :( No color games seem fully playable yet, but a lot of monochrome and color games are now at least showing more intro screen graphics before dying. This build defaults to horizontal orientation, but I left the inputs bound to vertical orientation. Whoops. I still need to implement a screen flip key binding.
83 lines
1.9 KiB
C++
83 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include <emulator/emulator.hpp>
|
|
#include <processor/arm/arm.hpp>
|
|
#include <processor/gsu/gsu.hpp>
|
|
#include <processor/hg51b/hg51b.hpp>
|
|
#include <processor/r65816/r65816.hpp>
|
|
#include <processor/spc700/spc700.hpp>
|
|
#include <processor/upd96050/upd96050.hpp>
|
|
|
|
namespace SuperFamicom {
|
|
namespace Info {
|
|
static const string Name = "bsnes";
|
|
static const uint SerializerVersion = 29;
|
|
}
|
|
}
|
|
|
|
/*
|
|
bsnes - Super Famicom emulator
|
|
author: byuu
|
|
license: GPLv3
|
|
project started: 2004-10-14
|
|
*/
|
|
|
|
#include <libco/libco.h>
|
|
|
|
#if defined(SFC_SUPERGAMEBOY)
|
|
#include <gb/gb.hpp>
|
|
#endif
|
|
|
|
#if defined(PROFILE_PERFORMANCE)
|
|
#include <nall/priority-queue.hpp>
|
|
#endif
|
|
|
|
namespace SuperFamicom {
|
|
struct Thread {
|
|
~Thread() {
|
|
if(thread) co_delete(thread);
|
|
}
|
|
|
|
auto create(auto (*entrypoint)() -> void, uint frequency) -> void {
|
|
if(thread) co_delete(thread);
|
|
thread = co_create(65536 * sizeof(void*), entrypoint);
|
|
this->frequency = frequency;
|
|
clock = 0;
|
|
}
|
|
|
|
auto serialize(serializer& s) -> void {
|
|
s.integer(frequency);
|
|
s.integer(clock);
|
|
}
|
|
|
|
cothread_t thread = nullptr;
|
|
uint frequency = 0;
|
|
int64 clock = 0;
|
|
};
|
|
|
|
#include <sfc/memory/memory.hpp>
|
|
#include <sfc/ppu/counter/counter.hpp>
|
|
|
|
#if defined(PROFILE_ACCURACY)
|
|
#include "profile-accuracy.hpp"
|
|
#elif defined(PROFILE_BALANCED)
|
|
#include "profile-balanced.hpp"
|
|
#elif defined(PROFILE_PERFORMANCE)
|
|
#include "profile-performance.hpp"
|
|
#endif
|
|
|
|
#include <sfc/controller/controller.hpp>
|
|
#include <sfc/system/system.hpp>
|
|
#include <sfc/scheduler/scheduler.hpp>
|
|
#include <sfc/coprocessor/coprocessor.hpp>
|
|
#include <sfc/expansion/expansion.hpp>
|
|
#include <sfc/slot/slot.hpp>
|
|
#include <sfc/cartridge/cartridge.hpp>
|
|
#include <sfc/cheat/cheat.hpp>
|
|
|
|
#include <sfc/memory/memory-inline.hpp>
|
|
#include <sfc/ppu/counter/counter-inline.hpp>
|
|
}
|
|
|
|
#include <sfc/interface/interface.hpp>
|