mirror of
https://github.com/zoriya/ComSquare.git
synced 2025-12-20 14:15:11 +00:00
Creating the structures of the register viewer
This commit is contained in:
@@ -12,6 +12,7 @@
|
|||||||
#include "../Memory/AMemory.hpp"
|
#include "../Memory/AMemory.hpp"
|
||||||
#include "Instruction.hpp"
|
#include "Instruction.hpp"
|
||||||
#include "DMA/DMA.hpp"
|
#include "DMA/DMA.hpp"
|
||||||
|
#include "../Debugger/RegisterViewer.hpp"
|
||||||
|
|
||||||
namespace ComSquare::CPU
|
namespace ComSquare::CPU
|
||||||
{
|
{
|
||||||
@@ -199,6 +200,7 @@ namespace ComSquare::CPU
|
|||||||
//! @brief The cartridge header (stored for interrupt vectors..
|
//! @brief The cartridge header (stored for interrupt vectors..
|
||||||
Cartridge::Header &_cartridgeHeader;
|
Cartridge::Header &_cartridgeHeader;
|
||||||
|
|
||||||
|
//! @brief DMA channels witch are mapped to the bus.
|
||||||
std::array<DMA, 8> _dmaChannels;
|
std::array<DMA, 8> _dmaChannels;
|
||||||
|
|
||||||
//! @brief True if an addressing mode with an iterator (x, y) has crossed the page. (Used because crossing the page boundary take one more cycle to run certain instructions).
|
//! @brief True if an addressing mode with an iterator (x, y) has crossed the page. (Used because crossing the page boundary take one more cycle to run certain instructions).
|
||||||
@@ -768,6 +770,10 @@ namespace ComSquare::CPU
|
|||||||
|
|
||||||
//! @brief Change the memory bus used by the CPU.
|
//! @brief Change the memory bus used by the CPU.
|
||||||
virtual void setMemoryBus(std::shared_ptr<Memory::MemoryBus> bus);
|
virtual void setMemoryBus(std::shared_ptr<Memory::MemoryBus> bus);
|
||||||
|
|
||||||
|
#ifdef DEBUGGER_ENABLED
|
||||||
|
friend Debugger::RegisterViewer;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include "../../Models/Int24.hpp"
|
#include "../../Models/Int24.hpp"
|
||||||
#include "../../Memory/MemoryBus.hpp"
|
#include "../../Memory/MemoryBus.hpp"
|
||||||
|
#include "../../Debugger/RegisterViewer.hpp"
|
||||||
|
|
||||||
namespace ComSquare::CPU
|
namespace ComSquare::CPU
|
||||||
{
|
{
|
||||||
@@ -98,6 +99,10 @@ namespace ComSquare::CPU
|
|||||||
DMA(const DMA &) = default;
|
DMA(const DMA &) = default;
|
||||||
DMA &operator=(const DMA &) = default;
|
DMA &operator=(const DMA &) = default;
|
||||||
~DMA() = default;
|
~DMA() = default;
|
||||||
|
|
||||||
|
#ifdef DEBUGGER_ENABLED
|
||||||
|
friend Debugger::RegisterViewer;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include "RegisterViewer.hpp"
|
#include "RegisterViewer.hpp"
|
||||||
#include "../SNES.hpp"
|
#include "../SNES.hpp"
|
||||||
|
#include "../Utility/Utility.hpp"
|
||||||
|
|
||||||
namespace ComSquare::Debugger
|
namespace ComSquare::Debugger
|
||||||
{
|
{
|
||||||
@@ -17,9 +18,22 @@ namespace ComSquare::Debugger
|
|||||||
this->_window->setAttribute(Qt::WA_DeleteOnClose);
|
this->_window->setAttribute(Qt::WA_DeleteOnClose);
|
||||||
|
|
||||||
this->_ui.setupUi(this->_window);
|
this->_ui.setupUi(this->_window);
|
||||||
|
this->_setupUi();
|
||||||
this->_window->show();
|
this->_window->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RegisterViewer::_setupUi()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 8; i++) {
|
||||||
|
RegistersViewerModel *model = new RegistersViewerModel(this->_snes);
|
||||||
|
model->addRegister(Register(0x420B, "-0", "Enabled", [i](SNES &snes) {
|
||||||
|
return snes.cpu->_dmaChannels[i].enabled;
|
||||||
|
}, nullptr, Boolean));
|
||||||
|
this->_ui.dmaChannel1->setModel(model);
|
||||||
|
this->_models.push_back(model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void RegisterViewer::focus()
|
void RegisterViewer::focus()
|
||||||
{
|
{
|
||||||
this->_window->activateWindow();
|
this->_window->activateWindow();
|
||||||
@@ -29,4 +43,94 @@ namespace ComSquare::Debugger
|
|||||||
{
|
{
|
||||||
this->_snes.disableRegisterDebugging();
|
this->_snes.disableRegisterDebugging();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RegisterViewer::~RegisterViewer()
|
||||||
|
{
|
||||||
|
for (auto &model : this->_models)
|
||||||
|
delete model;
|
||||||
|
}
|
||||||
|
|
||||||
|
Register::Register(uint24_t addr,
|
||||||
|
const std::string &usedBits,
|
||||||
|
const std::string ®Name,
|
||||||
|
const std::function<unsigned int(SNES &)> &getValue,
|
||||||
|
const std::function<void(SNES &, unsigned int)> &setValue,
|
||||||
|
RegisterType regType)
|
||||||
|
: address(addr),
|
||||||
|
bits(usedBits),
|
||||||
|
name(regName),
|
||||||
|
get(getValue),
|
||||||
|
set(setValue),
|
||||||
|
type(regType) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
using namespace ComSquare;
|
||||||
|
using namespace ComSquare::Debugger;
|
||||||
|
|
||||||
|
RegistersViewerModel::RegistersViewerModel(SNES &snes, QObject *parent) : QAbstractTableModel(parent), _snes(snes) { }
|
||||||
|
|
||||||
|
|
||||||
|
void RegistersViewerModel::addRegister(Register reg)
|
||||||
|
{
|
||||||
|
int row = this->_registers.size();
|
||||||
|
this->beginInsertRows(QModelIndex(), row, row);
|
||||||
|
this->_registers.push_back(reg);
|
||||||
|
this->insertRow(row);
|
||||||
|
this->endInsertRows();
|
||||||
|
}
|
||||||
|
|
||||||
|
int RegistersViewerModel::rowCount(const QModelIndex &) const
|
||||||
|
{
|
||||||
|
return this->_registers.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
int RegistersViewerModel::columnCount(const QModelIndex &) const
|
||||||
|
{
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant RegistersViewerModel::data(const QModelIndex &index, int role) const
|
||||||
|
{
|
||||||
|
Register reg = this->_registers[index.row()];
|
||||||
|
|
||||||
|
if (role == Qt::CheckStateRole && reg.type == Boolean && index.column() == 2)
|
||||||
|
return reg.get(this->_snes) ? Qt::Checked : Qt::Unchecked;
|
||||||
|
|
||||||
|
if (role != Qt::DisplayRole)
|
||||||
|
return QVariant();
|
||||||
|
|
||||||
|
switch (index.column()) {
|
||||||
|
case 0:
|
||||||
|
return QString((Utility::to_hex(reg.address) + reg.bits).c_str());
|
||||||
|
case 1:
|
||||||
|
return QString(reg.name.c_str());
|
||||||
|
case 2:
|
||||||
|
switch (reg.type) {
|
||||||
|
case Boolean:
|
||||||
|
return QString(reg.get(this->_snes) ? "True" : "False");
|
||||||
|
case EightBits:
|
||||||
|
return QString(Utility::to_hex(static_cast<uint8_t>(reg.get(this->_snes))).c_str());
|
||||||
|
case SixteenBits:
|
||||||
|
return QString(Utility::to_hex(static_cast<uint16_t>(reg.get(this->_snes))).c_str());
|
||||||
|
case TwentyFourBits:
|
||||||
|
return QString(Utility::to_hex(static_cast<uint24_t>(reg.get(this->_snes))).c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant RegistersViewerModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||||
|
{
|
||||||
|
if (orientation == Qt::Vertical || role != Qt::DisplayRole)
|
||||||
|
return QVariant();
|
||||||
|
switch (section) {
|
||||||
|
case 0:
|
||||||
|
return QString("Address");
|
||||||
|
case 1:
|
||||||
|
return QString("Name");
|
||||||
|
case 2:
|
||||||
|
return QString("Value");
|
||||||
|
default:
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -8,6 +8,41 @@
|
|||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
#include "ClosableWindow.hpp"
|
#include "ClosableWindow.hpp"
|
||||||
#include "../../ui/ui_registersView.h"
|
#include "../../ui/ui_registersView.h"
|
||||||
|
#include "../Models/Int24.hpp"
|
||||||
|
#include "../Memory/MemoryBus.hpp"
|
||||||
|
|
||||||
|
namespace ComSquare::Debugger
|
||||||
|
{
|
||||||
|
struct Register;
|
||||||
|
}
|
||||||
|
|
||||||
|
class RegistersViewerModel : public QAbstractTableModel
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
private:
|
||||||
|
//! @brief The list of registers to display / update.
|
||||||
|
std::vector<ComSquare::Debugger::Register> _registers;
|
||||||
|
//! @brief Reference to the snes to get information from registers.
|
||||||
|
ComSquare::SNES &_snes;
|
||||||
|
public:
|
||||||
|
//! @brief Add a register.
|
||||||
|
void addRegister(ComSquare::Debugger::Register reg);
|
||||||
|
|
||||||
|
RegistersViewerModel(ComSquare::SNES &snes, QObject *parent = nullptr);
|
||||||
|
RegistersViewerModel(const RegistersViewerModel &) = delete;
|
||||||
|
const RegistersViewerModel &operator=(const RegistersViewerModel &) = delete;
|
||||||
|
~RegistersViewerModel() override = default;
|
||||||
|
|
||||||
|
//! @brief The number of row the table has.
|
||||||
|
int rowCount(const QModelIndex &parent) const override;
|
||||||
|
//! @brief The number of column the table has.
|
||||||
|
int columnCount(const QModelIndex &parent) const override;
|
||||||
|
//! @brief Return a data representing the table cell.
|
||||||
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
|
//! @brief Override the headers to use hex values.
|
||||||
|
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
namespace ComSquare
|
namespace ComSquare
|
||||||
{
|
{
|
||||||
@@ -21,9 +56,14 @@ namespace ComSquare
|
|||||||
ClosableWindow<RegisterViewer> *_window;
|
ClosableWindow<RegisterViewer> *_window;
|
||||||
//! @brief A widget that contain the whole UI.
|
//! @brief A widget that contain the whole UI.
|
||||||
Ui::RegistersView _ui;
|
Ui::RegistersView _ui;
|
||||||
|
//! @brief The list of models used by different panels.
|
||||||
|
std::vector<RegistersViewerModel *> _models;
|
||||||
|
|
||||||
//! @brief The snes instance to read/write to DMA channels.
|
//! @brief The snes instance to read/write to DMA channels.
|
||||||
SNES &_snes;
|
SNES &_snes;
|
||||||
|
|
||||||
|
//! @brief Set models to the different tables and initialize them.
|
||||||
|
void _setupUi();
|
||||||
public:
|
public:
|
||||||
//! @brief Called when the window is closed. Turn off the debugger.
|
//! @brief Called when the window is closed. Turn off the debugger.
|
||||||
void disableDebugger();
|
void disableDebugger();
|
||||||
@@ -32,12 +72,47 @@ namespace ComSquare
|
|||||||
RegisterViewer(
|
RegisterViewer(
|
||||||
const RegisterViewer &) = delete;
|
const RegisterViewer &) = delete;
|
||||||
RegisterViewer &operator=(const RegisterViewer &) = delete;
|
RegisterViewer &operator=(const RegisterViewer &) = delete;
|
||||||
~RegisterViewer() =default;
|
~RegisterViewer();
|
||||||
|
|
||||||
//! @brief Focus the debugger's window.
|
//! @brief Focus the debugger's window.
|
||||||
void focus();
|
void focus();
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
//! @brief The types of registers
|
||||||
|
enum RegisterType {
|
||||||
|
//! @brief This type display a checkbox
|
||||||
|
Boolean,
|
||||||
|
//! @brief A 8 bits hexadecimal value.
|
||||||
|
EightBits,
|
||||||
|
//! @brief A 16 bits hexadecimal value.
|
||||||
|
SixteenBits,
|
||||||
|
//! @brief A 24 bits hexadecimal value.
|
||||||
|
TwentyFourBits
|
||||||
|
};
|
||||||
|
|
||||||
|
//! @brief Struct containing information about a register.
|
||||||
|
struct Register {
|
||||||
|
Register(uint24_t addr,
|
||||||
|
const std::string &usedBits,
|
||||||
|
const std::string ®Name,
|
||||||
|
const std::function<unsigned int(SNES &)> &getValue,
|
||||||
|
const std::function<void(SNES &, unsigned int)> &setValue,
|
||||||
|
RegisterType regType);
|
||||||
|
|
||||||
|
//! @brief Where this register is located on the bus.
|
||||||
|
uint24_t address;
|
||||||
|
//! @brief Specify witch bits are concerned if not all bytes are concerned.
|
||||||
|
std::string bits;
|
||||||
|
//! @brief The name of this register.
|
||||||
|
std::string name;
|
||||||
|
//! @brief How to get this value.
|
||||||
|
std::function<unsigned(SNES &)> get;
|
||||||
|
//! @brief How to set this value.
|
||||||
|
std::function<void(SNES &, unsigned)> set;
|
||||||
|
//! @brief How this value should be displayed/asked for input.
|
||||||
|
RegisterType type;
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif //COMSQUARE_REGISTERVIEWER_HPP
|
#endif //COMSQUARE_REGISTERVIEWER_HPP
|
||||||
|
|||||||
@@ -15,16 +15,16 @@
|
|||||||
namespace ComSquare
|
namespace ComSquare
|
||||||
{
|
{
|
||||||
SNES::SNES(const std::string &romPath, Renderer::IRenderer &renderer) :
|
SNES::SNES(const std::string &romPath, Renderer::IRenderer &renderer) :
|
||||||
_bus(std::make_shared<Memory::MemoryBus>()),
|
bus(std::make_shared<Memory::MemoryBus>()),
|
||||||
cartridge(new Cartridge::Cartridge(romPath)),
|
cartridge(new Cartridge::Cartridge(romPath)),
|
||||||
wram(new Ram::Ram(16384, WRam, "WRam")),
|
wram(new Ram::Ram(16384, WRam, "WRam")),
|
||||||
sram(new Ram::Ram(this->cartridge->header.sramSize, SRam, "SRam")),
|
sram(new Ram::Ram(this->cartridge->header.sramSize, SRam, "SRam")),
|
||||||
apuRam(new APU::MemoryMap()),
|
apuRam(new APU::MemoryMap()),
|
||||||
cpu(new CPU::CPU(this->_bus, cartridge->header)),
|
cpu(new CPU::CPU(this->bus, cartridge->header)),
|
||||||
ppu(new PPU::PPU(renderer)),
|
ppu(new PPU::PPU(renderer)),
|
||||||
apu(new APU::APU(this->apuRam))
|
apu(new APU::APU(this->apuRam))
|
||||||
{
|
{
|
||||||
this->_bus->mapComponents(*this);
|
this->bus->mapComponents(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SNES::update()
|
void SNES::update()
|
||||||
@@ -44,7 +44,7 @@ namespace ComSquare
|
|||||||
cpuDebug->pause();
|
cpuDebug->pause();
|
||||||
} else {
|
} else {
|
||||||
this->cpu = std::make_shared<Debugger::CPUDebug>(*this->cpu, *this);
|
this->cpu = std::make_shared<Debugger::CPUDebug>(*this->cpu, *this);
|
||||||
this->_bus->mapComponents(*this);
|
this->bus->mapComponents(*this);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
|
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
|
||||||
@@ -55,7 +55,7 @@ namespace ComSquare
|
|||||||
void SNES::disableCPUDebugging()
|
void SNES::disableCPUDebugging()
|
||||||
{
|
{
|
||||||
this->cpu = std::make_shared<CPU::CPU>(*this->cpu);
|
this->cpu = std::make_shared<CPU::CPU>(*this->cpu);
|
||||||
this->_bus->mapComponents(*this);
|
this->bus->mapComponents(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SNES::enableRamViewer()
|
void SNES::enableRamViewer()
|
||||||
@@ -64,7 +64,7 @@ namespace ComSquare
|
|||||||
if (this->_ramViewer)
|
if (this->_ramViewer)
|
||||||
this->_ramViewer->focus();
|
this->_ramViewer->focus();
|
||||||
else
|
else
|
||||||
this->_ramViewer = std::make_unique<Debugger::MemoryViewer>(*this, *this->_bus);
|
this->_ramViewer = std::make_unique<Debugger::MemoryViewer>(*this, *this->bus);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ namespace ComSquare
|
|||||||
std::static_pointer_cast<Debugger::APUDebug>(this->apu)->focus();
|
std::static_pointer_cast<Debugger::APUDebug>(this->apu)->focus();
|
||||||
else {
|
else {
|
||||||
this->apu = std::make_shared<Debugger::APUDebug>(*this->apu, *this);
|
this->apu = std::make_shared<Debugger::APUDebug>(*this->apu, *this);
|
||||||
this->_bus->mapComponents(*this);
|
this->bus->mapComponents(*this);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
|
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
|
||||||
@@ -109,18 +109,18 @@ namespace ComSquare
|
|||||||
void SNES::disableAPUDebugging()
|
void SNES::disableAPUDebugging()
|
||||||
{
|
{
|
||||||
this->apu = std::make_shared<APU::APU>(*this->apu);
|
this->apu = std::make_shared<APU::APU>(*this->apu);
|
||||||
this->_bus->mapComponents(*this);
|
this->bus->mapComponents(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SNES::enableMemoryBusDebugging()
|
void SNES::enableMemoryBusDebugging()
|
||||||
{
|
{
|
||||||
#ifdef DEBUGGER_ENABLED
|
#ifdef DEBUGGER_ENABLED
|
||||||
if (this->_bus->isDebugger())
|
if (this->bus->isDebugger())
|
||||||
std::static_pointer_cast<Debugger::MemoryBusDebug>(this->_bus)->focus();
|
std::static_pointer_cast<Debugger::MemoryBusDebug>(this->bus)->focus();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this->_bus = std::make_shared<Debugger::MemoryBusDebug>(*this, *this->_bus);
|
this->bus = std::make_shared<Debugger::MemoryBusDebug>(*this, *this->bus);
|
||||||
this->cpu->setMemoryBus(this->_bus);
|
this->cpu->setMemoryBus(this->bus);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
|
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
|
||||||
@@ -130,8 +130,8 @@ namespace ComSquare
|
|||||||
void SNES::disableMemoryBusDebugging()
|
void SNES::disableMemoryBusDebugging()
|
||||||
{
|
{
|
||||||
#ifdef DEBUGGER_ENABLED
|
#ifdef DEBUGGER_ENABLED
|
||||||
this->_bus = std::make_shared<Memory::MemoryBus>(*this->_bus);
|
this->bus = std::make_shared<Memory::MemoryBus>(*this->bus);
|
||||||
this->cpu->setMemoryBus(this->_bus);
|
this->cpu->setMemoryBus(this->bus);
|
||||||
#else
|
#else
|
||||||
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
|
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -35,9 +35,10 @@ namespace ComSquare
|
|||||||
//! @brief The window that allow the user to view registers.
|
//! @brief The window that allow the user to view registers.
|
||||||
std::unique_ptr<Debugger::RegisterViewer> _registerViewer;
|
std::unique_ptr<Debugger::RegisterViewer> _registerViewer;
|
||||||
#endif
|
#endif
|
||||||
//! @brief The memory bus that map addresses to components.
|
|
||||||
std::shared_ptr<Memory::MemoryBus> _bus;
|
|
||||||
public:
|
public:
|
||||||
|
//! @brief The memory bus that map addresses to components.
|
||||||
|
std::shared_ptr<Memory::MemoryBus> bus;
|
||||||
|
|
||||||
//! @brief Cartridge containing instructions (ROM).
|
//! @brief Cartridge containing instructions (ROM).
|
||||||
std::shared_ptr<Cartridge::Cartridge> cartridge;
|
std::shared_ptr<Cartridge::Cartridge> cartridge;
|
||||||
//! @brief Work Ram shared by all the components.
|
//! @brief Work Ram shared by all the components.
|
||||||
|
|||||||
@@ -18,11 +18,11 @@ namespace ComSquare::Utility
|
|||||||
StandardPrefix
|
StandardPrefix
|
||||||
};
|
};
|
||||||
|
|
||||||
std::string to_hex(uint8_t i, HexString prefix = StandardPrefix);
|
std::string to_hex(uint8_t i, HexString prefix = AsmPrefix);
|
||||||
|
|
||||||
std::string to_hex(uint16_t i, HexString prefix = StandardPrefix);
|
std::string to_hex(uint16_t i, HexString prefix = AsmPrefix);
|
||||||
|
|
||||||
std::string to_hex(uint24_t i, HexString prefix = StandardPrefix);
|
std::string to_hex(uint24_t i, HexString prefix = AsmPrefix);
|
||||||
|
|
||||||
std::string to_binary(uint8_t i);
|
std::string to_binary(uint8_t i);
|
||||||
|
|
||||||
|
|||||||
@@ -16,11 +16,12 @@ void usage(char *bin)
|
|||||||
std::cout << "ComSquare:" << std::endl
|
std::cout << "ComSquare:" << std::endl
|
||||||
<< "\tUsage: " << bin << " rom_path [options]" << std::endl
|
<< "\tUsage: " << bin << " rom_path [options]" << std::endl
|
||||||
<< "Options:" << std::endl
|
<< "Options:" << std::endl
|
||||||
<< "\t-c, --cpu: \tEnable the debugger of the CPU." << std::endl
|
<< "\t-c, --cpu: \tEnable the debugger of the CPU." << std::endl
|
||||||
<< "\t-m, --memory: \tEnable the memory viewer panel." << std::endl
|
<< "\t-m, --memory: \tEnable the memory viewer panel." << std::endl
|
||||||
<< "\t-h, --header: \tShow the header of the cartridge." << std::endl
|
<< "\t-h, --header: \tShow the header of the cartridge." << std::endl
|
||||||
<< "\t-b, --bus: \tShow the memory bus's log." << std::endl
|
<< "\t-b, --bus: \tShow the memory bus's log." << std::endl
|
||||||
<< "\t-g, --cgram: \tShow the palette viewer." << std::endl;
|
<< "\t-g, --cgram: \tShow the palette viewer." << std::endl
|
||||||
|
<< "\t-r, --registers: \tShow the registers viewer." << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void parseArguments(int argc, char **argv, SNES &snes)
|
void parseArguments(int argc, char **argv, SNES &snes)
|
||||||
@@ -28,16 +29,17 @@ void parseArguments(int argc, char **argv, SNES &snes)
|
|||||||
while (true) {
|
while (true) {
|
||||||
int option_index = 0;
|
int option_index = 0;
|
||||||
static struct option long_options[] = {
|
static struct option long_options[] = {
|
||||||
{"cpu", no_argument, 0, 'c'},
|
{"cpu", no_argument, 0, 'c'},
|
||||||
{"apu", no_argument, 0, 'a'},
|
{"apu", no_argument, 0, 'a'},
|
||||||
{"memory", no_argument, 0, 'm'},
|
{"memory", no_argument, 0, 'm'},
|
||||||
{"header", no_argument, 0, 'h'},
|
{"header", no_argument, 0, 'h'},
|
||||||
{"bus", no_argument, 0, 'b'},
|
{"bus", no_argument, 0, 'b'},
|
||||||
{"cgram", no_argument, 0, 'g'},
|
{"cgram", no_argument, 0, 'g'},
|
||||||
{0, 0, 0, 0}
|
{"registers", no_argument, 0, 'r'},
|
||||||
|
{0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
int c = getopt_long(argc, argv, "camhbg", long_options, &option_index);
|
int c = getopt_long(argc, argv, "camhbgr", long_options, &option_index);
|
||||||
if (c == -1)
|
if (c == -1)
|
||||||
break;
|
break;
|
||||||
switch (c) {
|
switch (c) {
|
||||||
@@ -62,6 +64,9 @@ void parseArguments(int argc, char **argv, SNES &snes)
|
|||||||
case 'g':
|
case 'g':
|
||||||
snes.enableCgramDebugging();
|
snes.enableCgramDebugging();
|
||||||
break;
|
break;
|
||||||
|
case 'r':
|
||||||
|
snes.enableRegisterDebugging();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -70,7 +75,7 @@ void parseArguments(int argc, char **argv, SNES &snes)
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
if (argc < 2) {
|
if (argc < 2 || !strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) {
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ using namespace ComSquare;
|
|||||||
Test(AddrModeInit, LegitBus)
|
Test(AddrModeInit, LegitBus)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
cr_assert_eq(snes._bus.get(), snes.cpu->_bus.get(), "Warning, the CPU's bus is not the same the SNES's bus. Next tests of the CPU may fail.");
|
cr_assert_eq(snes.bus.get(), snes.cpu->_bus.get(), "Warning, the CPU's bus is not the same the SNES's bus. Next tests of the CPU may fail.");
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(AddrMode, Immediate)
|
Test(AddrMode, Immediate)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ using namespace ComSquare;
|
|||||||
Test(PPU_write, inidisp_data_full_ones)
|
Test(PPU_write, inidisp_data_full_ones)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2100, 0b11111111);
|
snes.bus->write(0x2100, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._inidisp.fblank, true);
|
cr_assert_eq(snes.ppu->_registers._inidisp.fblank, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._inidisp.brightness, 0xF);
|
cr_assert_eq(snes.ppu->_registers._inidisp.brightness, 0xF);
|
||||||
}
|
}
|
||||||
@@ -22,7 +22,7 @@ Test(PPU_write, inidisp_data_full_ones)
|
|||||||
Test(PPU_write, inidisp_data_full_zeros)
|
Test(PPU_write, inidisp_data_full_zeros)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2100, 0b00000000);
|
snes.bus->write(0x2100, 0b00000000);
|
||||||
cr_assert_eq(snes.ppu->_registers._inidisp.fblank, false);
|
cr_assert_eq(snes.ppu->_registers._inidisp.fblank, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._inidisp.brightness, 0x0);
|
cr_assert_eq(snes.ppu->_registers._inidisp.brightness, 0x0);
|
||||||
}
|
}
|
||||||
@@ -30,7 +30,7 @@ Test(PPU_write, inidisp_data_full_zeros)
|
|||||||
Test(PPU_write, inidisp_data_fBlank_on_brghtness_off)
|
Test(PPU_write, inidisp_data_fBlank_on_brghtness_off)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2100, 0b10000000);
|
snes.bus->write(0x2100, 0b10000000);
|
||||||
cr_assert_eq(snes.ppu->_registers._inidisp.fblank, true);
|
cr_assert_eq(snes.ppu->_registers._inidisp.fblank, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._inidisp.brightness, 0x0);
|
cr_assert_eq(snes.ppu->_registers._inidisp.brightness, 0x0);
|
||||||
}
|
}
|
||||||
@@ -38,7 +38,7 @@ Test(PPU_write, inidisp_data_fBlank_on_brghtness_off)
|
|||||||
Test(PPU_write, inidisp_data_fBlank_off_brghtness_max)
|
Test(PPU_write, inidisp_data_fBlank_off_brghtness_max)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2100, 0b00001111);
|
snes.bus->write(0x2100, 0b00001111);
|
||||||
cr_assert_eq(snes.ppu->_registers._inidisp.fblank, false);
|
cr_assert_eq(snes.ppu->_registers._inidisp.fblank, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._inidisp.brightness, 0xF);
|
cr_assert_eq(snes.ppu->_registers._inidisp.brightness, 0xF);
|
||||||
}
|
}
|
||||||
@@ -46,7 +46,7 @@ Test(PPU_write, inidisp_data_fBlank_off_brghtness_max)
|
|||||||
Test(PPU_write, inidisp_data_fBlank_off_brghtness_half)
|
Test(PPU_write, inidisp_data_fBlank_off_brghtness_half)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2100, 0b00000101);
|
snes.bus->write(0x2100, 0b00000101);
|
||||||
cr_assert_eq(snes.ppu->_registers._inidisp.fblank, false);
|
cr_assert_eq(snes.ppu->_registers._inidisp.fblank, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._inidisp.brightness, 0x5);
|
cr_assert_eq(snes.ppu->_registers._inidisp.brightness, 0x5);
|
||||||
}
|
}
|
||||||
@@ -54,7 +54,7 @@ Test(PPU_write, inidisp_data_fBlank_off_brghtness_half)
|
|||||||
Test(PPU_write, obsel_111_object_size_and_all_null)
|
Test(PPU_write, obsel_111_object_size_and_all_null)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2101, 0b11100000);
|
snes.bus->write(0x2101, 0b11100000);
|
||||||
cr_assert_eq(snes.ppu->_registers._obsel.objectSize, 0b111);
|
cr_assert_eq(snes.ppu->_registers._obsel.objectSize, 0b111);
|
||||||
cr_assert_eq(snes.ppu->_registers._obsel.nameSelect, 0b00);
|
cr_assert_eq(snes.ppu->_registers._obsel.nameSelect, 0b00);
|
||||||
cr_assert_eq(snes.ppu->_registers._obsel.nameBaseSelect, 0b000);
|
cr_assert_eq(snes.ppu->_registers._obsel.nameBaseSelect, 0b000);
|
||||||
@@ -63,7 +63,7 @@ Test(PPU_write, obsel_111_object_size_and_all_null)
|
|||||||
Test(PPU_write, obsel_data_full)
|
Test(PPU_write, obsel_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2101, 0b11111111);
|
snes.bus->write(0x2101, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._obsel.objectSize, 0b111);
|
cr_assert_eq(snes.ppu->_registers._obsel.objectSize, 0b111);
|
||||||
cr_assert_eq(snes.ppu->_registers._obsel.nameSelect, 0b11);
|
cr_assert_eq(snes.ppu->_registers._obsel.nameSelect, 0b11);
|
||||||
cr_assert_eq(snes.ppu->_registers._obsel.nameBaseSelect, 0b111);
|
cr_assert_eq(snes.ppu->_registers._obsel.nameBaseSelect, 0b111);
|
||||||
@@ -72,7 +72,7 @@ Test(PPU_write, obsel_data_full)
|
|||||||
Test(PPU_write, obsel_data_full_nameselect)
|
Test(PPU_write, obsel_data_full_nameselect)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2101, 0b00011000);
|
snes.bus->write(0x2101, 0b00011000);
|
||||||
cr_assert_eq(snes.ppu->_registers._obsel.objectSize, 0b000);
|
cr_assert_eq(snes.ppu->_registers._obsel.objectSize, 0b000);
|
||||||
cr_assert_eq(snes.ppu->_registers._obsel.nameSelect, 0b11);
|
cr_assert_eq(snes.ppu->_registers._obsel.nameSelect, 0b11);
|
||||||
cr_assert_eq(snes.ppu->_registers._obsel.nameBaseSelect, 0b000);
|
cr_assert_eq(snes.ppu->_registers._obsel.nameBaseSelect, 0b000);
|
||||||
@@ -81,7 +81,7 @@ Test(PPU_write, obsel_data_full_nameselect)
|
|||||||
Test(PPU_write, obsel_data_full_baseselect)
|
Test(PPU_write, obsel_data_full_baseselect)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2101, 0b00000111);
|
snes.bus->write(0x2101, 0b00000111);
|
||||||
cr_assert_eq(snes.ppu->_registers._obsel.objectSize, 0b000);
|
cr_assert_eq(snes.ppu->_registers._obsel.objectSize, 0b000);
|
||||||
cr_assert_eq(snes.ppu->_registers._obsel.nameSelect, 0b00);
|
cr_assert_eq(snes.ppu->_registers._obsel.nameSelect, 0b00);
|
||||||
cr_assert_eq(snes.ppu->_registers._obsel.nameBaseSelect, 0b111);
|
cr_assert_eq(snes.ppu->_registers._obsel.nameBaseSelect, 0b111);
|
||||||
@@ -90,14 +90,14 @@ Test(PPU_write, obsel_data_full_baseselect)
|
|||||||
Test(PPU_write, oamaddl_data_full)
|
Test(PPU_write, oamaddl_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2102, 0b11111111);
|
snes.bus->write(0x2102, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._oamadd.oamAddress, 0b011111111);
|
cr_assert_eq(snes.ppu->_registers._oamadd.oamAddress, 0b011111111);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(PPU_write, oamaddh_data_full)
|
Test(PPU_write, oamaddh_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2103, 0b11111111);
|
snes.bus->write(0x2103, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._oamadd.objPriorityActivationBit, true);
|
cr_assert_eq(snes.ppu->_registers._oamadd.objPriorityActivationBit, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._oamadd.oamAddress, 0b100000000);
|
cr_assert_eq(snes.ppu->_registers._oamadd.oamAddress, 0b100000000);
|
||||||
}
|
}
|
||||||
@@ -105,8 +105,8 @@ Test(PPU_write, oamaddh_data_full)
|
|||||||
Test(PPU_write, oamaddlh_data_full)
|
Test(PPU_write, oamaddlh_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2102, 0b11111111);
|
snes.bus->write(0x2102, 0b11111111);
|
||||||
snes._bus->write(0x2103, 0b11111111);
|
snes.bus->write(0x2103, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._oamadd.objPriorityActivationBit, true);
|
cr_assert_eq(snes.ppu->_registers._oamadd.objPriorityActivationBit, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._oamadd.oamAddress, 0b111111111);
|
cr_assert_eq(snes.ppu->_registers._oamadd.oamAddress, 0b111111111);
|
||||||
}
|
}
|
||||||
@@ -114,8 +114,8 @@ Test(PPU_write, oamaddlh_data_full)
|
|||||||
Test(PPU_write, oamaddlh_data_full_priorityBit_off)
|
Test(PPU_write, oamaddlh_data_full_priorityBit_off)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2102, 0b11111111);
|
snes.bus->write(0x2102, 0b11111111);
|
||||||
snes._bus->write(0x2103, 0b01111111);
|
snes.bus->write(0x2103, 0b01111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._oamadd.objPriorityActivationBit, false);
|
cr_assert_eq(snes.ppu->_registers._oamadd.objPriorityActivationBit, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._oamadd.oamAddress, 0b111111111);
|
cr_assert_eq(snes.ppu->_registers._oamadd.oamAddress, 0b111111111);
|
||||||
}
|
}
|
||||||
@@ -123,8 +123,8 @@ Test(PPU_write, oamaddlh_data_full_priorityBit_off)
|
|||||||
Test(PPU_write, oamaddlh_oamAdress_11_priorityBit_on)
|
Test(PPU_write, oamaddlh_oamAdress_11_priorityBit_on)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2102, 0b00001011);
|
snes.bus->write(0x2102, 0b00001011);
|
||||||
snes._bus->write(0x2103, 0b10011100);
|
snes.bus->write(0x2103, 0b10011100);
|
||||||
cr_assert_eq(snes.ppu->_registers._oamadd.objPriorityActivationBit, true);
|
cr_assert_eq(snes.ppu->_registers._oamadd.objPriorityActivationBit, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._oamadd.oamAddress, 11);
|
cr_assert_eq(snes.ppu->_registers._oamadd.oamAddress, 11);
|
||||||
}
|
}
|
||||||
@@ -132,7 +132,7 @@ Test(PPU_write, oamaddlh_oamAdress_11_priorityBit_on)
|
|||||||
Test(PPU_write, bgmode_data_full)
|
Test(PPU_write, bgmode_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2105, 0b11111111);
|
snes.bus->write(0x2105, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgmode.bgMode, 7);
|
cr_assert_eq(snes.ppu->_registers._bgmode.bgMode, 7);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgmode.characterSizeBg1, true);
|
cr_assert_eq(snes.ppu->_registers._bgmode.characterSizeBg1, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgmode.characterSizeBg2, true);
|
cr_assert_eq(snes.ppu->_registers._bgmode.characterSizeBg2, true);
|
||||||
@@ -144,7 +144,7 @@ Test(PPU_write, bgmode_data_full)
|
|||||||
Test(PPU_write, bgmode_bgmode_5_and_bg24_on)
|
Test(PPU_write, bgmode_bgmode_5_and_bg24_on)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2105, 0b10100101);
|
snes.bus->write(0x2105, 0b10100101);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgmode.bgMode, 5);
|
cr_assert_eq(snes.ppu->_registers._bgmode.bgMode, 5);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgmode.characterSizeBg1, false);
|
cr_assert_eq(snes.ppu->_registers._bgmode.characterSizeBg1, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgmode.characterSizeBg2, true);
|
cr_assert_eq(snes.ppu->_registers._bgmode.characterSizeBg2, true);
|
||||||
@@ -156,7 +156,7 @@ Test(PPU_write, bgmode_bgmode_5_and_bg24_on)
|
|||||||
Test(PPU_write, mosaic_data_full)
|
Test(PPU_write, mosaic_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2106, 0b11111111);
|
snes.bus->write(0x2106, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg1, true);
|
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg1, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg2, true);
|
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg2, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg3, true);
|
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg3, true);
|
||||||
@@ -167,7 +167,7 @@ Test(PPU_write, mosaic_data_full)
|
|||||||
Test(PPU_write, mosaic_affectbg23_w_1x1_size)
|
Test(PPU_write, mosaic_affectbg23_w_1x1_size)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2106, 0b00000110);
|
snes.bus->write(0x2106, 0b00000110);
|
||||||
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg1, false);
|
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg1, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg2, true);
|
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg2, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg3, true);
|
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg3, true);
|
||||||
@@ -178,7 +178,7 @@ Test(PPU_write, mosaic_affectbg23_w_1x1_size)
|
|||||||
Test(PPU_write, mosaic_affectbg14_w_2x2_size)
|
Test(PPU_write, mosaic_affectbg14_w_2x2_size)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2106, 0b00101001);
|
snes.bus->write(0x2106, 0b00101001);
|
||||||
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg1, true);
|
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg1, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg2, false);
|
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg2, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg3, false);
|
cr_assert_eq(snes.ppu->_registers._mosaic.affectBg3, false);
|
||||||
@@ -189,7 +189,7 @@ Test(PPU_write, mosaic_affectbg14_w_2x2_size)
|
|||||||
Test(PPU_write, bg1sc_data_full)
|
Test(PPU_write, bg1sc_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2107, 0b11111111);
|
snes.bus->write(0x2107, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[0].tilemapAddress, 0b111111);
|
cr_assert_eq(snes.ppu->_registers._bgsc[0].tilemapAddress, 0b111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[0].tilemapHorizontalMirroring, true);
|
cr_assert_eq(snes.ppu->_registers._bgsc[0].tilemapHorizontalMirroring, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[0].tilemapVerticalMirroring, true);
|
cr_assert_eq(snes.ppu->_registers._bgsc[0].tilemapVerticalMirroring, true);
|
||||||
@@ -198,7 +198,7 @@ Test(PPU_write, bg1sc_data_full)
|
|||||||
Test(PPU_write, bg2sc_data_full)
|
Test(PPU_write, bg2sc_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2108, 0b11111111);
|
snes.bus->write(0x2108, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[1].tilemapAddress, 0b111111);
|
cr_assert_eq(snes.ppu->_registers._bgsc[1].tilemapAddress, 0b111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[1].tilemapHorizontalMirroring, true);
|
cr_assert_eq(snes.ppu->_registers._bgsc[1].tilemapHorizontalMirroring, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[1].tilemapVerticalMirroring, true);
|
cr_assert_eq(snes.ppu->_registers._bgsc[1].tilemapVerticalMirroring, true);
|
||||||
@@ -207,7 +207,7 @@ Test(PPU_write, bg2sc_data_full)
|
|||||||
Test(PPU_write, bg3sc_data_full)
|
Test(PPU_write, bg3sc_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2109, 0b11111111);
|
snes.bus->write(0x2109, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[2].tilemapAddress, 0b111111);
|
cr_assert_eq(snes.ppu->_registers._bgsc[2].tilemapAddress, 0b111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[2].tilemapHorizontalMirroring, true);
|
cr_assert_eq(snes.ppu->_registers._bgsc[2].tilemapHorizontalMirroring, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[2].tilemapVerticalMirroring, true);
|
cr_assert_eq(snes.ppu->_registers._bgsc[2].tilemapVerticalMirroring, true);
|
||||||
@@ -216,7 +216,7 @@ Test(PPU_write, bg3sc_data_full)
|
|||||||
Test(PPU_write, bg4sc_data_full)
|
Test(PPU_write, bg4sc_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x210A, 0b11111111);
|
snes.bus->write(0x210A, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapAddress, 0b111111);
|
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapAddress, 0b111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapHorizontalMirroring, true);
|
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapHorizontalMirroring, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapVerticalMirroring, true);
|
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapVerticalMirroring, true);
|
||||||
@@ -225,7 +225,7 @@ Test(PPU_write, bg4sc_data_full)
|
|||||||
Test(PPU_write, bg4sc_data_null)
|
Test(PPU_write, bg4sc_data_null)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x210A, 0b00000000);
|
snes.bus->write(0x210A, 0b00000000);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapAddress, 0);
|
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapAddress, 0);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapHorizontalMirroring, false);
|
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapHorizontalMirroring, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapVerticalMirroring, false);
|
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapVerticalMirroring, false);
|
||||||
@@ -234,7 +234,7 @@ Test(PPU_write, bg4sc_data_null)
|
|||||||
Test(PPU_write, bg4sc_horizontal_off_vertical_on_random_tilemapAdress)
|
Test(PPU_write, bg4sc_horizontal_off_vertical_on_random_tilemapAdress)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x210A, 0b11000110);
|
snes.bus->write(0x210A, 0b11000110);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapAddress, 0b110001);
|
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapAddress, 0b110001);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapHorizontalMirroring, false);
|
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapHorizontalMirroring, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapVerticalMirroring, true);
|
cr_assert_eq(snes.ppu->_registers._bgsc[3].tilemapVerticalMirroring, true);
|
||||||
@@ -243,7 +243,7 @@ Test(PPU_write, bg4sc_horizontal_off_vertical_on_random_tilemapAdress)
|
|||||||
Test(PPU_write, bg12nba_data_full)
|
Test(PPU_write, bg12nba_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x210B, 0b11111111);
|
snes.bus->write(0x210B, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgnba[0].baseAddressBg1a3, 0b1111);
|
cr_assert_eq(snes.ppu->_registers._bgnba[0].baseAddressBg1a3, 0b1111);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgnba[0].baseAddressBg2a4, 0b1111);
|
cr_assert_eq(snes.ppu->_registers._bgnba[0].baseAddressBg2a4, 0b1111);
|
||||||
}
|
}
|
||||||
@@ -251,7 +251,7 @@ Test(PPU_write, bg12nba_data_full)
|
|||||||
Test(PPU_write, bg34nba_data_full)
|
Test(PPU_write, bg34nba_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x210C, 0b11111111);
|
snes.bus->write(0x210C, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgnba[1].baseAddressBg1a3, 0b1111);
|
cr_assert_eq(snes.ppu->_registers._bgnba[1].baseAddressBg1a3, 0b1111);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgnba[1].baseAddressBg2a4, 0b1111);
|
cr_assert_eq(snes.ppu->_registers._bgnba[1].baseAddressBg2a4, 0b1111);
|
||||||
}
|
}
|
||||||
@@ -259,7 +259,7 @@ Test(PPU_write, bg34nba_data_full)
|
|||||||
Test(PPU_write, bg12nba_data_random_data)
|
Test(PPU_write, bg12nba_data_random_data)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x210B, 0b10101010);
|
snes.bus->write(0x210B, 0b10101010);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgnba[0].baseAddressBg1a3, 0b1010);
|
cr_assert_eq(snes.ppu->_registers._bgnba[0].baseAddressBg1a3, 0b1010);
|
||||||
cr_assert_eq(snes.ppu->_registers._bgnba[0].baseAddressBg2a4, 0b1010);
|
cr_assert_eq(snes.ppu->_registers._bgnba[0].baseAddressBg2a4, 0b1010);
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,7 @@ using namespace ComSquare;
|
|||||||
Test(PPU_write_2, vmain_data_full)
|
Test(PPU_write_2, vmain_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2115, 0b11111111);
|
snes.bus->write(0x2115, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmain.incrementMode, true);
|
cr_assert_eq(snes.ppu->_registers._vmain.incrementMode, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmain.addressRemapping, 0b11);
|
cr_assert_eq(snes.ppu->_registers._vmain.addressRemapping, 0b11);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmain.incrementAmount, 0b11);
|
cr_assert_eq(snes.ppu->_registers._vmain.incrementAmount, 0b11);
|
||||||
@@ -23,7 +23,7 @@ Test(PPU_write_2, vmain_data_full)
|
|||||||
Test(PPU_write_2, vmain_incrementmode_off_false_else_full)
|
Test(PPU_write_2, vmain_incrementmode_off_false_else_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2115, 0b01111111);
|
snes.bus->write(0x2115, 0b01111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmain.incrementMode, false);
|
cr_assert_eq(snes.ppu->_registers._vmain.incrementMode, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmain.addressRemapping, 0b11);
|
cr_assert_eq(snes.ppu->_registers._vmain.addressRemapping, 0b11);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmain.incrementAmount, 0b11);
|
cr_assert_eq(snes.ppu->_registers._vmain.incrementAmount, 0b11);
|
||||||
@@ -32,7 +32,7 @@ Test(PPU_write_2, vmain_incrementmode_off_false_else_full)
|
|||||||
Test(PPU_write_2, vmain_addressremaping_null_else_full)
|
Test(PPU_write_2, vmain_addressremaping_null_else_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2115, 0b11110011);
|
snes.bus->write(0x2115, 0b11110011);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmain.incrementMode, true);
|
cr_assert_eq(snes.ppu->_registers._vmain.incrementMode, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmain.addressRemapping, 0b00);
|
cr_assert_eq(snes.ppu->_registers._vmain.addressRemapping, 0b00);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmain.incrementAmount, 0b11);
|
cr_assert_eq(snes.ppu->_registers._vmain.incrementAmount, 0b11);
|
||||||
@@ -41,7 +41,7 @@ Test(PPU_write_2, vmain_addressremaping_null_else_full)
|
|||||||
Test(PPU_write_2, vmain_incrementamount_null_else_full)
|
Test(PPU_write_2, vmain_incrementamount_null_else_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2115, 0b11111100);
|
snes.bus->write(0x2115, 0b11111100);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmain.incrementMode, true);
|
cr_assert_eq(snes.ppu->_registers._vmain.incrementMode, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmain.addressRemapping, 0b11);
|
cr_assert_eq(snes.ppu->_registers._vmain.addressRemapping, 0b11);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmain.incrementAmount, 0b00);
|
cr_assert_eq(snes.ppu->_registers._vmain.incrementAmount, 0b00);
|
||||||
@@ -50,39 +50,39 @@ Test(PPU_write_2, vmain_incrementamount_null_else_full)
|
|||||||
Test(PPU_write_2, vmadd_full_data)
|
Test(PPU_write_2, vmadd_full_data)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2116, 0b11111111);
|
snes.bus->write(0x2116, 0b11111111);
|
||||||
snes._bus->write(0x2117, 0b11111111);
|
snes.bus->write(0x2117, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmadd.vmadd, 0b1111111111111111);
|
cr_assert_eq(snes.ppu->_registers._vmadd.vmadd, 0b1111111111111111);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(PPU_write_2, vmadd_full_high_byte_null)
|
Test(PPU_write_2, vmadd_full_high_byte_null)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2116, 0b11111111);
|
snes.bus->write(0x2116, 0b11111111);
|
||||||
snes._bus->write(0x2117, 0b00000000);
|
snes.bus->write(0x2117, 0b00000000);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmadd.vmadd, 0b0000000011111111);
|
cr_assert_eq(snes.ppu->_registers._vmadd.vmadd, 0b0000000011111111);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(PPU_write_2, vmdata_full_data)
|
Test(PPU_write_2, vmdata_full_data)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2118, 0b11111111);
|
snes.bus->write(0x2118, 0b11111111);
|
||||||
snes._bus->write(0x2119, 0b11111111);
|
snes.bus->write(0x2119, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmdata.vmdata, 0b1111111111111111);
|
cr_assert_eq(snes.ppu->_registers._vmdata.vmdata, 0b1111111111111111);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(PPU_write_2, vmdata_full_high_byte_null)
|
Test(PPU_write_2, vmdata_full_high_byte_null)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2118, 0b11111111);
|
snes.bus->write(0x2118, 0b11111111);
|
||||||
snes._bus->write(0x2119, 0b00000000);
|
snes.bus->write(0x2119, 0b00000000);
|
||||||
cr_assert_eq(snes.ppu->_registers._vmdata.vmdata, 0b0000000011111111);
|
cr_assert_eq(snes.ppu->_registers._vmdata.vmdata, 0b0000000011111111);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(PPU_write_2, cgadd_full_high_byte_null)
|
Test(PPU_write_2, cgadd_full_high_byte_null)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2121, 0b11111111);
|
snes.bus->write(0x2121, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._cgadd, 0b11111111);
|
cr_assert_eq(snes.ppu->_registers._cgadd, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._isLowByte, true);
|
cr_assert_eq(snes.ppu->_registers._isLowByte, true);
|
||||||
}
|
}
|
||||||
@@ -90,12 +90,12 @@ Test(PPU_write_2, cgadd_full_high_byte_null)
|
|||||||
Test(PPU_write_2, cgdata_data_full)
|
Test(PPU_write_2, cgdata_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2121, 0x0);
|
snes.bus->write(0x2121, 0x0);
|
||||||
snes._bus->write(0x2122, 0b11111111);
|
snes.bus->write(0x2122, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._cgdata.cgdatal, 0b11111111);
|
cr_assert_eq(snes.ppu->_registers._cgdata.cgdatal, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._isLowByte, false);
|
cr_assert_eq(snes.ppu->_registers._isLowByte, false);
|
||||||
int address = snes.ppu->_registers._cgadd;
|
int address = snes.ppu->_registers._cgadd;
|
||||||
snes._bus->write(0x2122, 0b11111000);
|
snes.bus->write(0x2122, 0b11111000);
|
||||||
cr_assert_eq(snes.ppu->_registers._cgdata.cgdatah, 0b11111000);
|
cr_assert_eq(snes.ppu->_registers._cgdata.cgdatah, 0b11111000);
|
||||||
cr_assert_eq(snes.ppu->_registers._isLowByte, true);
|
cr_assert_eq(snes.ppu->_registers._isLowByte, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._cgadd, address + 2);
|
cr_assert_eq(snes.ppu->_registers._cgadd, address + 2);
|
||||||
@@ -104,7 +104,7 @@ Test(PPU_write_2, cgdata_data_full)
|
|||||||
Test(PPU_write_2, m7sel_data_full)
|
Test(PPU_write_2, m7sel_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x211A, 0b11111111);
|
snes.bus->write(0x211A, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._m7sel.playingFieldSize, true);
|
cr_assert_eq(snes.ppu->_registers._m7sel.playingFieldSize, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._m7sel.emptySpaceFill, true);
|
cr_assert_eq(snes.ppu->_registers._m7sel.emptySpaceFill, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._m7sel.horizontalMirroring, true);
|
cr_assert_eq(snes.ppu->_registers._m7sel.horizontalMirroring, true);
|
||||||
@@ -114,7 +114,7 @@ Test(PPU_write_2, m7sel_data_full)
|
|||||||
Test(PPU_write_2, m7sel_data_actual)
|
Test(PPU_write_2, m7sel_data_actual)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x211A, 0b01111101);
|
snes.bus->write(0x211A, 0b01111101);
|
||||||
cr_assert_eq(snes.ppu->_registers._m7sel.playingFieldSize, false);
|
cr_assert_eq(snes.ppu->_registers._m7sel.playingFieldSize, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._m7sel.emptySpaceFill, true);
|
cr_assert_eq(snes.ppu->_registers._m7sel.emptySpaceFill, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._m7sel.horizontalMirroring, true);
|
cr_assert_eq(snes.ppu->_registers._m7sel.horizontalMirroring, true);
|
||||||
@@ -124,7 +124,7 @@ Test(PPU_write_2, m7sel_data_actual)
|
|||||||
Test(PPU_write_2, w12sel_data_full)
|
Test(PPU_write_2, w12sel_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2123, 0b11111111);
|
snes.bus->write(0x2123, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._wsel[0].window1InversionForBg1Bg2Obj, true);
|
cr_assert_eq(snes.ppu->_registers._wsel[0].window1InversionForBg1Bg2Obj, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._wsel[0].enableWindow1ForBg1Bg2Obj, true);
|
cr_assert_eq(snes.ppu->_registers._wsel[0].enableWindow1ForBg1Bg2Obj, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._wsel[0].window2InversionForBg1Bg3Obj, true);
|
cr_assert_eq(snes.ppu->_registers._wsel[0].window2InversionForBg1Bg3Obj, true);
|
||||||
@@ -138,7 +138,7 @@ Test(PPU_write_2, w12sel_data_full)
|
|||||||
Test(PPU_write_2, w34sel_data_full)
|
Test(PPU_write_2, w34sel_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2124, 0b10101010);
|
snes.bus->write(0x2124, 0b10101010);
|
||||||
cr_assert_eq(snes.ppu->_registers._wsel[1].window1InversionForBg1Bg2Obj, true);
|
cr_assert_eq(snes.ppu->_registers._wsel[1].window1InversionForBg1Bg2Obj, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._wsel[1].enableWindow1ForBg1Bg2Obj, false);
|
cr_assert_eq(snes.ppu->_registers._wsel[1].enableWindow1ForBg1Bg2Obj, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._wsel[1].window2InversionForBg1Bg3Obj, true);
|
cr_assert_eq(snes.ppu->_registers._wsel[1].window2InversionForBg1Bg3Obj, true);
|
||||||
@@ -152,7 +152,7 @@ Test(PPU_write_2, w34sel_data_full)
|
|||||||
Test(PPU_write_2, wobjsel_data_full)
|
Test(PPU_write_2, wobjsel_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2125, 0b10110001);
|
snes.bus->write(0x2125, 0b10110001);
|
||||||
cr_assert_eq(snes.ppu->_registers._wsel[2].window1InversionForBg1Bg2Obj, true);
|
cr_assert_eq(snes.ppu->_registers._wsel[2].window1InversionForBg1Bg2Obj, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._wsel[2].enableWindow1ForBg1Bg2Obj, false);
|
cr_assert_eq(snes.ppu->_registers._wsel[2].enableWindow1ForBg1Bg2Obj, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._wsel[2].window2InversionForBg1Bg3Obj, true);
|
cr_assert_eq(snes.ppu->_registers._wsel[2].window2InversionForBg1Bg3Obj, true);
|
||||||
@@ -166,7 +166,7 @@ Test(PPU_write_2, wobjsel_data_full)
|
|||||||
Test(PPU_write_2, wbglog_data_full)
|
Test(PPU_write_2, wbglog_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x212A, 0b10110001);
|
snes.bus->write(0x212A, 0b10110001);
|
||||||
cr_assert_eq(snes.ppu->_registers._wbglog.maskLogicBg1, 0b10);
|
cr_assert_eq(snes.ppu->_registers._wbglog.maskLogicBg1, 0b10);
|
||||||
cr_assert_eq(snes.ppu->_registers._wbglog.maskLogicBg2, 0b11);
|
cr_assert_eq(snes.ppu->_registers._wbglog.maskLogicBg2, 0b11);
|
||||||
cr_assert_eq(snes.ppu->_registers._wbglog.maskLogicBg3, 0b00);
|
cr_assert_eq(snes.ppu->_registers._wbglog.maskLogicBg3, 0b00);
|
||||||
@@ -176,7 +176,7 @@ Test(PPU_write_2, wbglog_data_full)
|
|||||||
Test(PPU_write_2, wobjlog_data_full)
|
Test(PPU_write_2, wobjlog_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x212B, 0b10110001);
|
snes.bus->write(0x212B, 0b10110001);
|
||||||
cr_assert_eq(snes.ppu->_registers._wobjlog.maskLogicObj, 0b01);
|
cr_assert_eq(snes.ppu->_registers._wobjlog.maskLogicObj, 0b01);
|
||||||
cr_assert_eq(snes.ppu->_registers._wobjlog.maskLogicColor, 0b00);
|
cr_assert_eq(snes.ppu->_registers._wobjlog.maskLogicColor, 0b00);
|
||||||
}
|
}
|
||||||
@@ -184,7 +184,7 @@ Test(PPU_write_2, wobjlog_data_full)
|
|||||||
Test(PPU_write_2, tm_data_full)
|
Test(PPU_write_2, tm_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x212C, 0b10110001);
|
snes.bus->write(0x212C, 0b10110001);
|
||||||
cr_assert_eq(snes.ppu->_registers._t[0].enableWindowDisplayBg1, true);
|
cr_assert_eq(snes.ppu->_registers._t[0].enableWindowDisplayBg1, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._t[0].enableWindowDisplayBg2, false);
|
cr_assert_eq(snes.ppu->_registers._t[0].enableWindowDisplayBg2, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._t[0].enableWindowDisplayBg3, false);
|
cr_assert_eq(snes.ppu->_registers._t[0].enableWindowDisplayBg3, false);
|
||||||
@@ -195,7 +195,7 @@ Test(PPU_write_2, tm_data_full)
|
|||||||
Test(PPU_write_2, ts_data_full)
|
Test(PPU_write_2, ts_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x212D, 0b10101110);
|
snes.bus->write(0x212D, 0b10101110);
|
||||||
cr_assert_eq(snes.ppu->_registers._t[1].enableWindowDisplayBg1, false);
|
cr_assert_eq(snes.ppu->_registers._t[1].enableWindowDisplayBg1, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._t[1].enableWindowDisplayBg2, true);
|
cr_assert_eq(snes.ppu->_registers._t[1].enableWindowDisplayBg2, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._t[1].enableWindowDisplayBg3, true);
|
cr_assert_eq(snes.ppu->_registers._t[1].enableWindowDisplayBg3, true);
|
||||||
@@ -206,7 +206,7 @@ Test(PPU_write_2, ts_data_full)
|
|||||||
Test(PPU_write_2, tmw_data_full)
|
Test(PPU_write_2, tmw_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x212E, 0b10101110);
|
snes.bus->write(0x212E, 0b10101110);
|
||||||
cr_assert_eq(snes.ppu->_registers._tw[0].enableWindowMaskingBg1, false);
|
cr_assert_eq(snes.ppu->_registers._tw[0].enableWindowMaskingBg1, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._tw[0].enableWindowMaskingBg2, true);
|
cr_assert_eq(snes.ppu->_registers._tw[0].enableWindowMaskingBg2, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._tw[0].enableWindowMaskingBg3, true);
|
cr_assert_eq(snes.ppu->_registers._tw[0].enableWindowMaskingBg3, true);
|
||||||
@@ -217,7 +217,7 @@ Test(PPU_write_2, tmw_data_full)
|
|||||||
Test(PPU_write_2, tsw_data_full)
|
Test(PPU_write_2, tsw_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x212F, 0b10100011);
|
snes.bus->write(0x212F, 0b10100011);
|
||||||
cr_assert_eq(snes.ppu->_registers._tw[1].enableWindowMaskingBg1, true);
|
cr_assert_eq(snes.ppu->_registers._tw[1].enableWindowMaskingBg1, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._tw[1].enableWindowMaskingBg2, true);
|
cr_assert_eq(snes.ppu->_registers._tw[1].enableWindowMaskingBg2, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._tw[1].enableWindowMaskingBg3, false);
|
cr_assert_eq(snes.ppu->_registers._tw[1].enableWindowMaskingBg3, false);
|
||||||
@@ -228,7 +228,7 @@ Test(PPU_write_2, tsw_data_full)
|
|||||||
Test(PPU_write_2, cgwsel_data_full)
|
Test(PPU_write_2, cgwsel_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2130, 0b10111001);
|
snes.bus->write(0x2130, 0b10111001);
|
||||||
cr_assert_eq(snes.ppu->_registers._cgwsel.clipColorToBlackBeforeMath, 0b10);
|
cr_assert_eq(snes.ppu->_registers._cgwsel.clipColorToBlackBeforeMath, 0b10);
|
||||||
cr_assert_eq(snes.ppu->_registers._cgwsel.preventColorMath, 0b11);
|
cr_assert_eq(snes.ppu->_registers._cgwsel.preventColorMath, 0b11);
|
||||||
cr_assert_eq(snes.ppu->_registers._cgwsel.addSubscreen, false);
|
cr_assert_eq(snes.ppu->_registers._cgwsel.addSubscreen, false);
|
||||||
@@ -238,7 +238,7 @@ Test(PPU_write_2, cgwsel_data_full)
|
|||||||
Test(PPU_write_2, cgadsub_data_full)
|
Test(PPU_write_2, cgadsub_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2131, 0b10111001);
|
snes.bus->write(0x2131, 0b10111001);
|
||||||
cr_assert_eq(snes.ppu->_registers._cgadsub.addSubtractSelect, true);
|
cr_assert_eq(snes.ppu->_registers._cgadsub.addSubtractSelect, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._cgadsub.halfColorMath, false);
|
cr_assert_eq(snes.ppu->_registers._cgadsub.halfColorMath, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._cgadsub.enableColorMathBackdrop, true);
|
cr_assert_eq(snes.ppu->_registers._cgadsub.enableColorMathBackdrop, true);
|
||||||
@@ -252,7 +252,7 @@ Test(PPU_write_2, cgadsub_data_full)
|
|||||||
Test(PPU_write_2, coldata_data_full)
|
Test(PPU_write_2, coldata_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2132, 0b10111001);
|
snes.bus->write(0x2132, 0b10111001);
|
||||||
cr_assert_eq(snes.ppu->_registers._coldata.blue, true);
|
cr_assert_eq(snes.ppu->_registers._coldata.blue, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._coldata.green, false);
|
cr_assert_eq(snes.ppu->_registers._coldata.green, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._coldata.red, true);
|
cr_assert_eq(snes.ppu->_registers._coldata.red, true);
|
||||||
@@ -262,7 +262,7 @@ Test(PPU_write_2, coldata_data_full)
|
|||||||
Test(PPU_write_2, setini_data_full)
|
Test(PPU_write_2, setini_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x2133, 0b10111001);
|
snes.bus->write(0x2133, 0b10111001);
|
||||||
cr_assert_eq(snes.ppu->_registers._setini.externalSync, true);
|
cr_assert_eq(snes.ppu->_registers._setini.externalSync, true);
|
||||||
cr_assert_eq(snes.ppu->_registers._setini.mode7ExtBg, false);
|
cr_assert_eq(snes.ppu->_registers._setini.mode7ExtBg, false);
|
||||||
cr_assert_eq(snes.ppu->_registers._setini.enablePseudoHiresMode, true);
|
cr_assert_eq(snes.ppu->_registers._setini.enablePseudoHiresMode, true);
|
||||||
@@ -274,14 +274,14 @@ Test(PPU_write_2, setini_data_full)
|
|||||||
Test(PPU_write_2, m7a_data_full)
|
Test(PPU_write_2, m7a_data_full)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x211B, 0b10111001);
|
snes.bus->write(0x211B, 0b10111001);
|
||||||
cr_assert_eq(snes.ppu->_registers._m7[0].m7l, 0b10111001);
|
cr_assert_eq(snes.ppu->_registers._m7[0].m7l, 0b10111001);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(PPU_write_2, m7c_data_low_and_high_byte)
|
Test(PPU_write_2, m7c_data_low_and_high_byte)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
snes._bus->write(0x211D, 0b10111001);
|
snes.bus->write(0x211D, 0b10111001);
|
||||||
snes._bus->write(0x211D, 0b11111111);
|
snes.bus->write(0x211D, 0b11111111);
|
||||||
cr_assert_eq(snes.ppu->_registers._m7[2].m7, 0b1011100111111111);
|
cr_assert_eq(snes.ppu->_registers._m7[2].m7, 0b1011100111111111);
|
||||||
}
|
}
|
||||||
@@ -29,7 +29,7 @@ Test(BusAccessor, GetWramStart)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
||||||
|
|
||||||
accessor = snes._bus->getAccessor(0x7E0000);
|
accessor = snes.bus->getAccessor(0x7E0000);
|
||||||
cr_assert_eq(accessor.get(), snes.wram.get());
|
cr_assert_eq(accessor.get(), snes.wram.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@ Test(BusAccessor, GetWramEnd)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
||||||
|
|
||||||
accessor = snes._bus->getAccessor(0x7FFFFF);
|
accessor = snes.bus->getAccessor(0x7FFFFF);
|
||||||
cr_assert_eq(accessor.get(), snes.wram.get());
|
cr_assert_eq(accessor.get(), snes.wram.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ Test(BusAccessor, GetWramMirror)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
||||||
|
|
||||||
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes._bus->getAccessor(0x2F11FF));
|
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes.bus->getAccessor(0x2F11FF));
|
||||||
cr_assert_neq(accessor, nullptr);
|
cr_assert_neq(accessor, nullptr);
|
||||||
cr_assert_eq(accessor->_initial.get(), snes.wram.get());
|
cr_assert_eq(accessor->_initial.get(), snes.wram.get());
|
||||||
}
|
}
|
||||||
@@ -57,7 +57,7 @@ Test(BusAccessor, GetWramMirror2)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
||||||
|
|
||||||
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes._bus->getAccessor(0x100000));
|
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes.bus->getAccessor(0x100000));
|
||||||
cr_assert_neq(accessor, nullptr);
|
cr_assert_neq(accessor, nullptr);
|
||||||
cr_assert_eq(accessor->_initial.get(), snes.wram.get());
|
cr_assert_eq(accessor->_initial.get(), snes.wram.get());
|
||||||
}
|
}
|
||||||
@@ -67,7 +67,7 @@ Test(BusAccessor, GetWramMirror3)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
||||||
|
|
||||||
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes._bus->getAccessor(0x1010));
|
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes.bus->getAccessor(0x1010));
|
||||||
cr_assert_neq(accessor, nullptr);
|
cr_assert_neq(accessor, nullptr);
|
||||||
cr_assert_eq(accessor->_initial.get(), snes.wram.get());
|
cr_assert_eq(accessor->_initial.get(), snes.wram.get());
|
||||||
}
|
}
|
||||||
@@ -75,7 +75,7 @@ Test(BusAccessor, GetWramMirror3)
|
|||||||
Test(BusAccessor, GetOpenBus)
|
Test(BusAccessor, GetOpenBus)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::AMemory> accessor = snes._bus->getAccessor(0x897654);
|
std::shared_ptr<Memory::AMemory> accessor = snes.bus->getAccessor(0x897654);
|
||||||
cr_assert_eq(accessor.get(), nullptr);
|
cr_assert_eq(accessor.get(), nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@ Test(BusAccessor, GetSramStart)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
||||||
|
|
||||||
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes._bus->getAccessor(0x700000));
|
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes.bus->getAccessor(0x700000));
|
||||||
cr_assert_eq(accessor->_initial.get(), snes.sram.get());
|
cr_assert_eq(accessor->_initial.get(), snes.sram.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ Test(BusAccessor, GetSramEnd)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
||||||
|
|
||||||
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes._bus->getAccessor(0x7D7FFF));
|
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes.bus->getAccessor(0x7D7FFF));
|
||||||
cr_assert_eq(accessor->_initial.get(), snes.sram.get());
|
cr_assert_eq(accessor->_initial.get(), snes.sram.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ Test(BusAccessor, GetSramMirror)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::ARectangleMemory> accessor = nullptr;
|
std::shared_ptr<Memory::ARectangleMemory> accessor = nullptr;
|
||||||
|
|
||||||
accessor = std::static_pointer_cast<Memory::ARectangleMemory>(snes._bus->getAccessor(0xF00123));
|
accessor = std::static_pointer_cast<Memory::ARectangleMemory>(snes.bus->getAccessor(0xF00123));
|
||||||
cr_assert_eq(accessor.get(), snes.sram.get());
|
cr_assert_eq(accessor.get(), snes.sram.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,7 +111,7 @@ Test(BusAccessor, GetAPUStart)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
||||||
|
|
||||||
accessor = snes._bus->getAccessor(0x002140);
|
accessor = snes.bus->getAccessor(0x002140);
|
||||||
cr_assert_eq(accessor.get(), snes.apu.get());
|
cr_assert_eq(accessor.get(), snes.apu.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,7 +120,7 @@ Test(BusAccessor, GetAPUEnd)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
||||||
|
|
||||||
accessor = snes._bus->getAccessor(0x002143);
|
accessor = snes.bus->getAccessor(0x002143);
|
||||||
cr_assert_eq(accessor.get(), snes.apu.get());
|
cr_assert_eq(accessor.get(), snes.apu.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,7 +129,7 @@ Test(BusAccessor, GetAPUMirror)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::MemoryShadow> accessor = nullptr;
|
std::shared_ptr<Memory::MemoryShadow> accessor = nullptr;
|
||||||
|
|
||||||
accessor = std::static_pointer_cast<Memory::MemoryShadow>(snes._bus->getAccessor(0xAB2143));
|
accessor = std::static_pointer_cast<Memory::MemoryShadow>(snes.bus->getAccessor(0xAB2143));
|
||||||
cr_assert_eq(accessor->_initial.get(), snes.apu.get());
|
cr_assert_eq(accessor->_initial.get(), snes.apu.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,7 +138,7 @@ Test(BusAccessor, GetAPUMirrorFirstHalf)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::MemoryShadow> accessor = nullptr;
|
std::shared_ptr<Memory::MemoryShadow> accessor = nullptr;
|
||||||
|
|
||||||
accessor = std::static_pointer_cast<Memory::MemoryShadow>(snes._bus->getAccessor(0x052143));
|
accessor = std::static_pointer_cast<Memory::MemoryShadow>(snes.bus->getAccessor(0x052143));
|
||||||
cr_assert_eq(accessor->_initial.get(), snes.apu.get());
|
cr_assert_eq(accessor->_initial.get(), snes.apu.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,7 +147,7 @@ Test(BusAccessor, GetCPUStart)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
||||||
|
|
||||||
accessor = snes._bus->getAccessor(0x004200);
|
accessor = snes.bus->getAccessor(0x004200);
|
||||||
cr_assert_eq(accessor.get(), snes.cpu.get());
|
cr_assert_eq(accessor.get(), snes.cpu.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,7 +156,7 @@ Test(BusAccessor, GetCPUEnd)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
||||||
|
|
||||||
accessor = snes._bus->getAccessor(0x00421F);
|
accessor = snes.bus->getAccessor(0x00421F);
|
||||||
cr_assert_eq(accessor.get(), snes.cpu.get());
|
cr_assert_eq(accessor.get(), snes.cpu.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,7 +165,7 @@ Test(BusAccessor, GetPPU1Start)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
||||||
|
|
||||||
accessor = snes._bus->getAccessor(0x00213E);
|
accessor = snes.bus->getAccessor(0x00213E);
|
||||||
cr_assert_eq(accessor.get(), snes.ppu.get());
|
cr_assert_eq(accessor.get(), snes.ppu.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,7 +174,7 @@ Test(BusAccessor, GetPPU1End)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
||||||
|
|
||||||
accessor = snes._bus->getAccessor(0x00213F);
|
accessor = snes.bus->getAccessor(0x00213F);
|
||||||
cr_assert_eq(accessor.get(), snes.ppu.get());
|
cr_assert_eq(accessor.get(), snes.ppu.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,7 +183,7 @@ Test(BusAccessor, GetCPU)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
||||||
|
|
||||||
accessor = snes._bus->getAccessor(0x004212);
|
accessor = snes.bus->getAccessor(0x004212);
|
||||||
cr_assert_eq(accessor.get(), snes.cpu.get());
|
cr_assert_eq(accessor.get(), snes.cpu.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,7 +192,7 @@ Test(BusAccessor, GetPPU1Mirror)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::MemoryShadow> accessor = nullptr;
|
std::shared_ptr<Memory::MemoryShadow> accessor = nullptr;
|
||||||
|
|
||||||
accessor = std::static_pointer_cast<Memory::MemoryShadow>(snes._bus->getAccessor(0x80213F));
|
accessor = std::static_pointer_cast<Memory::MemoryShadow>(snes.bus->getAccessor(0x80213F));
|
||||||
cr_assert_eq(accessor->_initial.get(), snes.ppu.get());
|
cr_assert_eq(accessor->_initial.get(), snes.ppu.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,7 +201,7 @@ Test(BusAccessor, GetCPU2Mirror)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::MemoryShadow> accessor = nullptr;
|
std::shared_ptr<Memory::MemoryShadow> accessor = nullptr;
|
||||||
|
|
||||||
accessor = std::static_pointer_cast<Memory::MemoryShadow>(snes._bus->getAccessor(0x804212));
|
accessor = std::static_pointer_cast<Memory::MemoryShadow>(snes.bus->getAccessor(0x804212));
|
||||||
cr_assert_eq(accessor->_initial.get(), snes.cpu.get());
|
cr_assert_eq(accessor->_initial.get(), snes.cpu.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -210,7 +210,7 @@ Test(BusAccessor, GetRomStart)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
||||||
|
|
||||||
accessor = snes._bus->getAccessor(0x808000);
|
accessor = snes.bus->getAccessor(0x808000);
|
||||||
cr_assert_eq(accessor.get(), snes.cartridge.get());
|
cr_assert_eq(accessor.get(), snes.cartridge.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,7 +219,7 @@ Test(BusAccessor, GetRomEnd)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
std::shared_ptr<Memory::AMemory> accessor = nullptr;
|
||||||
|
|
||||||
accessor = snes._bus->getAccessor(0xFFFFFF);
|
accessor = snes.bus->getAccessor(0xFFFFFF);
|
||||||
cr_assert_eq(accessor.get(), snes.cartridge.get());
|
cr_assert_eq(accessor.get(), snes.cartridge.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,7 +228,7 @@ Test(BusAccessor, GetRomMirror)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
||||||
|
|
||||||
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes._bus->getAccessor(0x694200));
|
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes.bus->getAccessor(0x694200));
|
||||||
cr_assert_eq(accessor->_initial.get(), snes.cartridge.get());
|
cr_assert_eq(accessor->_initial.get(), snes.cartridge.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -237,7 +237,7 @@ Test(BusAccessor, GetRomMirror2)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
||||||
|
|
||||||
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes._bus->getAccessor(0x01FEDC));
|
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes.bus->getAccessor(0x01FEDC));
|
||||||
cr_assert_eq(accessor->_initial.get(), snes.cartridge.get());
|
cr_assert_eq(accessor->_initial.get(), snes.cartridge.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,7 +246,7 @@ Test(BusAccessor, GetRomMirror3)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
||||||
|
|
||||||
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes._bus->getAccessor(0xDE1248));
|
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes.bus->getAccessor(0xDE1248));
|
||||||
cr_assert_eq(accessor->_initial.get(), snes.cartridge.get());
|
cr_assert_eq(accessor->_initial.get(), snes.cartridge.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,7 +255,7 @@ Test(BusAccessor, Get0x0)
|
|||||||
Init()
|
Init()
|
||||||
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
std::shared_ptr<Memory::RectangleShadow> accessor = nullptr;
|
||||||
|
|
||||||
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes._bus->getAccessor(0x0));
|
accessor = std::static_pointer_cast<Memory::RectangleShadow>(snes.bus->getAccessor(0x0));
|
||||||
cr_assert_eq(accessor->_initial.get(), snes.wram.get());
|
cr_assert_eq(accessor->_initial.get(), snes.wram.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -271,7 +271,7 @@ Test(BusRead, Read0x0)
|
|||||||
uint8_t data;
|
uint8_t data;
|
||||||
|
|
||||||
snes.wram->_data[0] = 123;
|
snes.wram->_data[0] = 123;
|
||||||
data = snes._bus->read(0x0);
|
data = snes.bus->read(0x0);
|
||||||
cr_assert_eq(data, 123);
|
cr_assert_eq(data, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -280,8 +280,8 @@ Test(BusRead, ReadOutside, .init = cr_redirect_stdout)
|
|||||||
Init()
|
Init()
|
||||||
uint8_t data;
|
uint8_t data;
|
||||||
|
|
||||||
snes._bus->_openBus = 123;
|
snes.bus->_openBus = 123;
|
||||||
data = snes._bus->read(0x002000);
|
data = snes.bus->read(0x002000);
|
||||||
cr_assert_eq(data, 123);
|
cr_assert_eq(data, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -290,8 +290,8 @@ Test(BusRead, ReadOutside2, .init = cr_redirect_stdout)
|
|||||||
Init()
|
Init()
|
||||||
uint8_t data;
|
uint8_t data;
|
||||||
|
|
||||||
snes._bus->_openBus = 123;
|
snes.bus->_openBus = 123;
|
||||||
data = snes._bus->read(0xBF2FFF);
|
data = snes.bus->read(0xBF2FFF);
|
||||||
cr_assert_eq(data, 123);
|
cr_assert_eq(data, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -300,8 +300,8 @@ Test(BusRead, ReadOutside3, .init = cr_redirect_stdout)
|
|||||||
Init()
|
Init()
|
||||||
uint8_t data;
|
uint8_t data;
|
||||||
|
|
||||||
snes._bus->_openBus = 123;
|
snes.bus->_openBus = 123;
|
||||||
data = snes._bus->read(0x127654);
|
data = snes.bus->read(0x127654);
|
||||||
cr_assert_eq(data, 123);
|
cr_assert_eq(data, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -311,7 +311,7 @@ Test(BusRead, ReadAPU)
|
|||||||
uint8_t data;
|
uint8_t data;
|
||||||
|
|
||||||
snes.apu->_registers.port0 = 123;
|
snes.apu->_registers.port0 = 123;
|
||||||
data = snes._bus->read(0x002140);
|
data = snes.bus->read(0x002140);
|
||||||
cr_assert_eq(data, 123);
|
cr_assert_eq(data, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,7 +321,7 @@ Test(BusRead, ReadROM)
|
|||||||
uint8_t data;
|
uint8_t data;
|
||||||
|
|
||||||
snes.cartridge->_data[5] = 123;
|
snes.cartridge->_data[5] = 123;
|
||||||
data = snes._bus->read(0x808005);
|
data = snes.bus->read(0x808005);
|
||||||
cr_assert_eq(data, 123);
|
cr_assert_eq(data, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -331,7 +331,7 @@ Test(BusRead, ReadROMStart)
|
|||||||
uint8_t data;
|
uint8_t data;
|
||||||
|
|
||||||
snes.cartridge->_data[0] = 123;
|
snes.cartridge->_data[0] = 123;
|
||||||
data = snes._bus->read(0x808000);
|
data = snes.bus->read(0x808000);
|
||||||
cr_assert_eq(data, 123);
|
cr_assert_eq(data, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -341,7 +341,7 @@ Test(BusRead, ReadCPU)
|
|||||||
uint8_t data;
|
uint8_t data;
|
||||||
|
|
||||||
snes.cpu->_internalRegisters.wrio = 123;
|
snes.cpu->_internalRegisters.wrio = 123;
|
||||||
data = snes._bus->read(0x004201);
|
data = snes.bus->read(0x004201);
|
||||||
cr_assert_eq(data, 123);
|
cr_assert_eq(data, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -351,7 +351,7 @@ Test(BusRead, ReadPPU)
|
|||||||
uint8_t data;
|
uint8_t data;
|
||||||
|
|
||||||
snes.ppu->_registers._mpy.mpyl = 123;
|
snes.ppu->_registers._mpy.mpyl = 123;
|
||||||
data = snes._bus->read(0x002134);
|
data = snes.bus->read(0x002134);
|
||||||
cr_assert_eq(data, 123);
|
cr_assert_eq(data, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -361,7 +361,7 @@ Test(BusRead, ReadSRAM)
|
|||||||
uint8_t data;
|
uint8_t data;
|
||||||
|
|
||||||
snes.sram->_data[7] = 123;
|
snes.sram->_data[7] = 123;
|
||||||
data = snes._bus->read(0x700007);
|
data = snes.bus->read(0x700007);
|
||||||
cr_assert_eq(data, 123);
|
cr_assert_eq(data, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -371,7 +371,7 @@ Test(BusRead, ReadWRAM)
|
|||||||
uint8_t data;
|
uint8_t data;
|
||||||
|
|
||||||
snes.wram->_data[3] = 123;
|
snes.wram->_data[3] = 123;
|
||||||
data = snes._bus->read(0x7E0003);
|
data = snes.bus->read(0x7E0003);
|
||||||
cr_assert_eq(data, 123);
|
cr_assert_eq(data, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -381,7 +381,7 @@ Test(BusRead, ReadWRAM2)
|
|||||||
uint8_t data;
|
uint8_t data;
|
||||||
|
|
||||||
snes.wram->_data[0x1010] = 123;
|
snes.wram->_data[0x1010] = 123;
|
||||||
data = snes._bus->read(0x7E1010);
|
data = snes.bus->read(0x7E1010);
|
||||||
cr_assert_eq(data, 123);
|
cr_assert_eq(data, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -392,7 +392,7 @@ Test(BusRead, ReadWRAMMirror)
|
|||||||
uint8_t data;
|
uint8_t data;
|
||||||
|
|
||||||
snes.wram->_data[0x1010] = 123;
|
snes.wram->_data[0x1010] = 123;
|
||||||
data = snes._bus->read(0x1010);
|
data = snes.bus->read(0x1010);
|
||||||
cr_assert_eq(data, 123);
|
cr_assert_eq(data, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -407,7 +407,7 @@ Test(BusWrite, Write0x0)
|
|||||||
Init()
|
Init()
|
||||||
|
|
||||||
try {
|
try {
|
||||||
snes._bus->write(0x0, 123);
|
snes.bus->write(0x0, 123);
|
||||||
} catch (std::exception &ex) {
|
} catch (std::exception &ex) {
|
||||||
std::cout << ex.what() << std::endl;
|
std::cout << ex.what() << std::endl;
|
||||||
}
|
}
|
||||||
@@ -419,7 +419,7 @@ Test(BusWrite, WriteAPU)
|
|||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
|
|
||||||
snes._bus->write(0x002143, 123);
|
snes.bus->write(0x002143, 123);
|
||||||
cr_assert_eq(snes.apu->_registers.port3, 123);
|
cr_assert_eq(snes.apu->_registers.port3, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -427,7 +427,7 @@ Test(BusWrite, WritePPU)
|
|||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
|
|
||||||
snes._bus->write(0x002106, 123);
|
snes.bus->write(0x002106, 123);
|
||||||
cr_assert_eq(snes.ppu->_registers._mosaic.raw, 123);
|
cr_assert_eq(snes.ppu->_registers._mosaic.raw, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -435,7 +435,7 @@ Test(BusWrite, WriteCPU)
|
|||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
|
|
||||||
snes._bus->write(0x00420D, 123);
|
snes.bus->write(0x00420D, 123);
|
||||||
cr_assert_eq(snes.cpu->_internalRegisters.memsel, 123);
|
cr_assert_eq(snes.cpu->_internalRegisters.memsel, 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -443,14 +443,14 @@ Test(BusWrite, WriteROM)
|
|||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
|
|
||||||
cr_assert_throw(snes._bus->write(0x808005, 123), InvalidAction);
|
cr_assert_throw(snes.bus->write(0x808005, 123), InvalidAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
Test(BusWrite, WriteWRAM)
|
Test(BusWrite, WriteWRAM)
|
||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
|
|
||||||
snes._bus->write(0x7E0002, 123);
|
snes.bus->write(0x7E0002, 123);
|
||||||
cr_assert_eq(snes.wram->_data[2], 123);
|
cr_assert_eq(snes.wram->_data[2], 123);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -458,6 +458,6 @@ Test(BusWrite, WriteSRAM)
|
|||||||
{
|
{
|
||||||
Init()
|
Init()
|
||||||
|
|
||||||
snes._bus->write(0x700009, 123);
|
snes.bus->write(0x700009, 123);
|
||||||
cr_assert_eq(snes.sram->_data[9], 123);
|
cr_assert_eq(snes.sram->_data[9], 123);
|
||||||
}
|
}
|
||||||
@@ -59,7 +59,91 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QGridLayout" name="gridLayout_4">
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<layout class="QFormLayout" name="formLayout_3"/>
|
<widget class="QTabWidget" name="tabWidget_2">
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="channel1">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>1</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_5">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QTableView" name="dmaChannel1"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="channel2">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>2</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_6">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QTableView" name="dmaChannel2"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="channel3">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>3</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_7">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QTableView" name="dmaChannel3"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="channel4">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>4</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_8">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QTableView" name="dmaChannel4"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="channel5">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>5</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_9">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QTableView" name="dmaChannel5"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="channel6">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>6</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_10">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QTableView" name="dmaChannel6"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="channel7">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>7</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_11">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QTableView" name="dmaChannel7"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="channel8">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>8</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_12">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QTableView" name="dmaChannel8"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
|||||||
Reference in New Issue
Block a user