mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-02-24 07:02:27 +01:00
byuu says: Changelog: - processor/gsu: minor code cleanup - processor/hg51b: renamed reg(Read,Write) to register(Read,Write) - processor/lr35902: minor code cleanup - processor/spc700: completed code cleanup (sans disassembler) - no longer uses internal global state inside instructions - processor/spc700: will no longer hang the emulator if stuck in a WAI (SLEEP) or STP (STOP) instruction - processor/spc700: fixed bug in handling of OR1 and AND1 instructions - processor/z80: minor code cleanup - sfc/dsp: revert to initializing registers to 0x00; save for ENDX=random(), FLG=0xe0 [Jonas Quinn] Major testing of the SNES game library would be appreciated, now that its CPU cores have all been revised. We know the DSP registers read back as randomized data ... mostly, but there are apparently internal latches, which we can't emulate with the current DSP design. So until we know which registers have separate internal state that actually *is* initialized, I'm going to play it safe and not break more games. Thanks again to Jonas Quinn for the continued research into this issue. EDIT: that said ... `MD works if((ENDX&0x30) > 0)` is only a 3:4 chance that the game will work. That seems pretty unlikely that the odds of it working are that low, given hardware testing by others in the past :/ I thought if worked if `PITCH != 0` before, which would have been way more likely. The two remaining CPU cores that need major cleanup efforts are the LR35902 and ARM cores. Both are very large, complicated, annoying cores that will probably be better off as full rewrites from scratch. I don't think I want to delay v103 in trying to accomplish that, however. So I think it'll be best to focus on allowing the Mega Drive core to not lock when processors are frozen waiting on a response from other processors during a save state operation. Then we should be good for a new release.
86 lines
2.7 KiB
C++
86 lines
2.7 KiB
C++
#pragma once
|
|
|
|
namespace Processor {
|
|
|
|
struct GSU {
|
|
#include "registers.hpp"
|
|
|
|
virtual auto step(uint clocks) -> void = 0;
|
|
|
|
virtual auto stop() -> void = 0;
|
|
virtual auto color(uint8 source) -> uint8 = 0;
|
|
virtual auto plot(uint8 x, uint8 y) -> void = 0;
|
|
virtual auto rpix(uint8 x, uint8 y) -> uint8 = 0;
|
|
|
|
virtual auto pipe() -> uint8 = 0;
|
|
virtual auto syncROMBuffer() -> void = 0;
|
|
virtual auto readROMBuffer() -> uint8 = 0;
|
|
virtual auto syncRAMBuffer() -> void = 0;
|
|
virtual auto readRAMBuffer(uint16 addr) -> uint8 = 0;
|
|
virtual auto writeRAMBuffer(uint16 addr, uint8 data) -> void = 0;
|
|
virtual auto flushCache() -> void = 0;
|
|
|
|
virtual auto read(uint24 addr, uint8 data = 0x00) -> uint8 = 0;
|
|
virtual auto write(uint24 addr, uint8 data) -> void = 0;
|
|
|
|
//gsu.cpp
|
|
auto power() -> void;
|
|
|
|
//instructions.cpp
|
|
auto instructionADD_ADC(uint n) -> void;
|
|
auto instructionALT1() -> void;
|
|
auto instructionALT2() -> void;
|
|
auto instructionALT3() -> void;
|
|
auto instructionAND_BIC(uint n) -> void;
|
|
auto instructionASR_DIV2() -> void;
|
|
auto instructionBranch(bool c) -> void;
|
|
auto instructionCACHE() -> void;
|
|
auto instructionCOLOR_CMODE() -> void;
|
|
auto instructionDEC(uint n) -> void;
|
|
auto instructionFMULT_LMULT() -> void;
|
|
auto instructionFROM_MOVES(uint n) -> void;
|
|
auto instructionGETB() -> void;
|
|
auto instructionGETC_RAMB_ROMB() -> void;
|
|
auto instructionHIB() -> void;
|
|
auto instructionIBT_LMS_SMS(uint n) -> void;
|
|
auto instructionINC(uint n) -> void;
|
|
auto instructionIWT_LM_SM(uint n) -> void;
|
|
auto instructionJMP_LJMP(uint n) -> void;
|
|
auto instructionLINK(uint n) -> void;
|
|
auto instructionLoad(uint n) -> void;
|
|
auto instructionLOB() -> void;
|
|
auto instructionLOOP() -> void;
|
|
auto instructionLSR() -> void;
|
|
auto instructionMERGE() -> void;
|
|
auto instructionMULT_UMULT(uint n) -> void;
|
|
auto instructionNOP() -> void;
|
|
auto instructionNOT() -> void;
|
|
auto instructionOR_XOR(uint n) -> void;
|
|
auto instructionPLOT_RPIX() -> void;
|
|
auto instructionROL() -> void;
|
|
auto instructionROR() -> void;
|
|
auto instructionSBK() -> void;
|
|
auto instructionSEX() -> void;
|
|
auto instructionStore(uint n) -> void;
|
|
auto instructionSTOP() -> void;
|
|
auto instructionSUB_SBC_CMP(uint n) -> void;
|
|
auto instructionSWAP() -> void;
|
|
auto instructionTO_MOVE(uint n) -> void;
|
|
auto instructionWITH(uint n) -> void;
|
|
|
|
//switch.cpp
|
|
auto instruction(uint8 opcode) -> void;
|
|
|
|
//serialization.cpp
|
|
auto serialize(serializer&) -> void;
|
|
|
|
//disassembler.cpp
|
|
auto disassembleOpcode(char* output) -> void;
|
|
auto disassembleALT0(char* output) -> void;
|
|
auto disassembleALT1(char* output) -> void;
|
|
auto disassembleALT2(char* output) -> void;
|
|
auto disassembleALT3(char* output) -> void;
|
|
};
|
|
|
|
}
|