diff --git a/.gitmodules b/.gitmodules index e80bdc2..ab70aa3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "extern/QuickNES_Core"] - path = extern/QuickNES_Core + path = source/quickNES/QuickNES_Core url = https://github.com/libretro/QuickNES_Core.git diff --git a/extern/hqn/hqn.h b/extern/hqn/hqn.h index 5eae988..2e40ee8 100644 --- a/extern/hqn/hqn.h +++ b/extern/hqn/hqn.h @@ -1,7 +1,7 @@ #ifndef __HQN_H__ #define __HQN_H__ -#include +#include #include #include @@ -46,6 +46,8 @@ public: HQNState(); ~HQNState(); + void setEmulatorPointer(void* const emuPtr) { m_emu = (Nes_Emu*)emuPtr; } + /* The joypad data for the two joypads available to an NES. This is directly available because I'm lazy. @@ -148,7 +150,7 @@ void printUsage(const char *filename); } // end namespace hqn // Copied from bizinterface.cpp in BizHawk/quicknes -inline void saveBlit(const Nes_Emu *e, int32_t *dest, const int32_t *colors, int cropleft, int croptop, int cropright, int cropbottom) +inline void saveBlit(const void *ePtr, int32_t *dest, const int32_t *colors, int cropleft, int croptop, int cropright, int cropbottom) { // what is the point of the 256 color bitmap and the dynamic color allocation to it? // why not just render directly to a 512 color bitmap with static palette positions? @@ -172,10 +174,11 @@ inline void saveBlit(const Nes_Emu *e, int32_t *dest, const int32_t *colors, int // } // } + const Nes_Emu *e = (Nes_Emu*) ePtr; const unsigned char *in_pixels = e->frame().pixels; if (in_pixels == NULL) return; int32_t *out_pixels = dest; - + for (unsigned h = 0; h < Nes_Emu::image_height; h++, in_pixels += e->frame().pitch, out_pixels += Nes_Emu::image_width) for (unsigned w = 0; w < Nes_Emu::image_width; w++) { diff --git a/meson.build b/meson.build index 61f2d12..e8febf7 100644 --- a/meson.build +++ b/meson.build @@ -9,7 +9,6 @@ pageSize = get_option('CPUFunctionAlignment') # Loading dependencies subdir('source') -subdir('extern') # Common application flags commonCompileArgs = [ '-Wfatal-errors', '-Wall', '-Wno-multichar' ] @@ -27,7 +26,7 @@ quickerNESPlayerSrc = [ executable('player', 'source/player.cpp', cpp_args : [ commonCompileArgs, '-DNCURSES' ], - dependencies : [ quickerNESCoreDependency, quickerNESApplicationDependency, dependency('sdl2'), dependency('SDL2_image') ], + dependencies : [ quickerNESDependency, toolDependency, dependency('sdl2'), dependency('SDL2_image') ], include_directories : include_directories(['source']), link_args : [ '-lncurses' ], sources : quickerNESPlayerSrc @@ -38,7 +37,7 @@ executable('player', quickerNESTester = executable('quickerNESTester', 'source/tester.cpp', cpp_args : [ commonCompileArgs, '-Werror' ], - dependencies : [ quickerNESCoreDependency, quickerNESApplicationDependency ], + dependencies : [ quickerNESDependency, toolDependency ], include_directories : include_directories(['../extern/json']) ) @@ -47,7 +46,7 @@ quickerNESTester = executable('quickerNESTester', quickNESTester = executable('quickNESTester', 'source/tester.cpp', cpp_args : [ commonCompileArgs ], - dependencies : [ quickNESCoreDependency, quickerNESApplicationDependency ], + dependencies : [ quickNESDependency, toolDependency ], include_directories : include_directories(['../extern/json']) ) diff --git a/source/emuInstance.hpp b/source/emuInstance.hpp index ab848e3..8597423 100644 --- a/source/emuInstance.hpp +++ b/source/emuInstance.hpp @@ -1,20 +1,16 @@ #pragma once -#include -#include -#include #include #include "sha1/sha1.hpp" -#ifdef USE_ORIGINAL_QUICKNES - extern void register_misc_mappers(); - extern void register_extra_mappers(); -#endif - #define _LOW_MEM_SIZE 0x800 #define _HIGH_MEM_SIZE 0x2000 #define _NAMETABLES_MEM_SIZE 0x1000 +// Size of image generated in graphics buffer +static const uint16_t image_width = 256; +static const uint16_t image_height = 240; + class EmuInstance { public: @@ -22,117 +18,8 @@ class EmuInstance typedef uint8_t inputType; // Deleting default constructors - EmuInstance() = delete; - EmuInstance(EmuInstance& e) = delete; ~EmuInstance() = default; - EmuInstance(const std::string& romFilePath, const std::string& stateFilePath) - { - // Creating new emulator - _nes = new Nes_Emu; - - // If running the original QuickNES, register extra mappers now - #ifdef USE_ORIGINAL_QUICKNES - register_misc_mappers(); - register_extra_mappers(); - #endif - - // Loading ROM - std::string romData; - bool status = loadStringFromFile(romData, romFilePath.c_str()); - if (status == false) EXIT_WITH_ERROR("Could not find/read state file: %s\n", romFilePath.c_str()); - - // Calculating ROM hash value - _romSHA1String = SHA1::GetHash((uint8_t*)romData.data(), romData.size()); - - // Loading the rom into the emulator - #ifdef USE_ORIGINAL_QUICKNES - Mem_File_Reader romReader(romData.data(), (int)romData.size()); - Auto_File_Reader romFile(romReader); - auto result = _nes->load_ines(romFile); - if (result != 0) EXIT_WITH_ERROR("Could not initialize emulator with rom file: %s\n", romFilePath.c_str()); - #else - auto result = _nes->load_ines((const uint8_t*) romData.data()); - if (result != 0) EXIT_WITH_ERROR("Could not initialize emulator with rom file: %s\n", romFilePath.c_str()); - #endif - - - // Getting state size to use - _stateSize = getStateSizeImpl(); - - // Loading state file, if specified - if (stateFilePath != "") loadStateFile(stateFilePath); - } - - uint8_t* getLowMem() { return _nes->low_mem(); }; - uint8_t* getNametableMem() { return _nes->nametable_mem(); }; - uint8_t* getHighMem() { return _nes->high_mem();}; - const uint8_t* getChrMem() { return _nes->chr_mem();}; - size_t getChrMemSize() { return _nes->chr_size();}; -// uint8_t* getSpriteRAM() { return _nes->spr_mem(); } -// uint16_t getSpriteRAMSize() { return _nes->spr_mem_size(); } - - const std::string getRomSHA1() const { return _romSHA1String; }; - - void loadStateFile(const std::string& stateFilePath) - { - // Loading state data - std::string stateData; - bool status = loadStringFromFile(stateData, stateFilePath.c_str()); - - if (status == false) EXIT_WITH_ERROR("Could not find/read state file: %s\n", stateFilePath.c_str()); - Mem_File_Reader stateReader(stateData.data(), (int)stateData.size()); - Auto_File_Reader stateFile(stateReader); - - // Loading state data into state object - Nes_State state; - state.read(stateFile); - - // Loading state object into the emulator - _nes->load_state(state); - } - - inline size_t getStateSize() const { return _stateSize; } - - inline hash_t getStateHash() - { - MetroHash128 hash; - - uint8_t stateData[_stateSize]; - serializeState(stateData); - - hash.Update(getLowMem(), _LOW_MEM_SIZE); - hash.Update(getHighMem(), _HIGH_MEM_SIZE); - hash.Update(getNametableMem(), _NAMETABLES_MEM_SIZE); - hash.Update(getChrMem(), getChrMemSize()); - - hash_t result; - hash.Finalize(reinterpret_cast(&result)); - return result; - } - - void saveStateFile(const std::string& stateFilePath) const - { - std::string stateData; - stateData.resize(_stateSize); - serializeState((uint8_t*)stateData.data()); - saveStringToFile(stateData, stateFilePath.c_str()); - } - - void serializeState(uint8_t* state) const - { - Mem_Writer w(state, _stateSize, 0); - Auto_File_Writer a(w); - _nes->save_state(a); - } - - void deserializeState(const uint8_t* state) - { - Mem_File_Reader r(state, _stateSize); - Auto_File_Reader a(r); - _nes->load_state(a); - } - // Controller input bits // 0 - A / 1 // 1 - B / 2 @@ -190,55 +77,102 @@ class EmuInstance moveString += "|"; return moveString; } - - void enableRendering() { _doRendering = true; } - void disableRendering() { _doRendering = false; } - - void advanceState(const std::string& move) + + inline void advanceState(const std::string& move) { - if (move.find("r") != std::string::npos) _nes->reset(false); + if (move.find("r") != std::string::npos) doSoftReset(); - advanceState(moveStringToCode(move), 0); + advanceStateImpl(moveStringToCode(move), 0); } - void advanceState(const inputType controller1, const inputType controller2) + inline size_t getStateSize() const { return _stateSize; } + inline std::string getRomSHA1() const { return _romSHA1String; } + + inline hash_t getStateHash() const { - if (_doRendering == true) _nes->emulate_frame(controller1, controller2); - if (_doRendering == false) _nes->emulate_skip_frame(controller1, controller2); + MetroHash128 hash; + + uint8_t stateData[_stateSize]; + serializeState(stateData); + + hash.Update(getLowMem(), _LOW_MEM_SIZE); + hash.Update(getHighMem(), _HIGH_MEM_SIZE); + hash.Update(getNametableMem(), _NAMETABLES_MEM_SIZE); + hash.Update(getChrMem(), getChrMemSize()); + + hash_t result; + hash.Finalize(reinterpret_cast(&result)); + return result; } - Nes_Emu* getInternalEmulator() const { return _nes; } + inline void enableRendering() { _doRendering = true; }; + inline void disableRendering() { _doRendering = false; }; - private: + inline void loadStateFile(const std::string& stateFilePath) + { + std::string stateData; + bool status = loadStringFromFile(stateData, stateFilePath); + if (status == false) EXIT_WITH_ERROR("Could not find/read state file: %s\n", stateFilePath.c_str()); + deserializeState((uint8_t*)stateData.data()); + } + + inline void saveStateFile(const std::string& stateFilePath) const + { + std::string stateData; + stateData.resize(_stateSize); + serializeState((uint8_t*)stateData.data()); + saveStringToFile(stateData, stateFilePath.c_str()); + } + +inline void loadROMFile(const std::string& romFilePath) +{ + // Loading ROM data + bool status = loadStringFromFile(_romData, romFilePath); + if (status == false) EXIT_WITH_ERROR("Could not find/read ROM file: %s\n", romFilePath.c_str()); + + // Calculating ROM hash value + _romSHA1String = SHA1::GetHash((uint8_t*)_romData.data(), _romData.size()); + + // Actually loading rom file + status = loadROMFileImpl(_romData); + if (status == false) EXIT_WITH_ERROR("Could not process ROM file: %s\n", romFilePath.c_str()); + + // Detecting state size + _stateSize = getStateSizeImpl(); +} + + // Virtual functions + + virtual bool loadROMFileImpl(const std::string& romFilePath) = 0; + virtual void advanceStateImpl(const inputType controller1, const inputType controller2) = 0; + virtual uint8_t* getLowMem() const = 0; + virtual uint8_t* getNametableMem() const = 0; + virtual uint8_t* getHighMem() const = 0; + virtual const uint8_t* getChrMem() const = 0; + virtual size_t getChrMemSize() const = 0; + virtual void serializeState(uint8_t* state) const = 0; + virtual void deserializeState(const uint8_t* state) = 0; + virtual size_t getStateSizeImpl() const = 0; + virtual void doSoftReset() = 0; + virtual void doHardReset() = 0; + virtual std::string getCoreName() const = 0; + virtual void* getInternalEmulatorPointer() const = 0; + + protected: + + EmuInstance() = default; + + // Storage for the state + size_t _stateSize; // Flag to determine whether to enable/disable rendering bool _doRendering = true; + + private: - inline size_t getStateSizeImpl() const - { - #ifdef USE_ORIGINAL_QUICKNES - #define _DUMMY_SIZE 65536 - uint8_t data[_DUMMY_SIZE]; - Mem_Writer w(data, _DUMMY_SIZE); - Auto_File_Writer a(w); - _nes->save_state(a); - return w.size(); - #else - // Using dry writer to just obtain the state size - Dry_Writer w; - Auto_File_Writer a(w); - _nes->save_state(a); - return w.size(); - #endif - } - - // Emulator instance - Nes_Emu* _nes; - - // State size for the given rom - size_t _stateSize; + // Storage for the ROM data + std::string _romData; // SHA1 rom hash std::string _romSHA1String; - }; diff --git a/source/meson.build b/source/meson.build index a28ef42..39aa477 100644 --- a/source/meson.build +++ b/source/meson.build @@ -1,9 +1,10 @@ -# Getting core configuration -subdir('core') +# Getting core configurations +subdir('quickNES') +subdir('quickerNES') -# quickerNES Application Configuration +# Tool Configuration - quickerNESApplicationDependency = declare_dependency( + toolDependency = declare_dependency( include_directories : include_directories(['.', '../extern']), sources : [ '../extern/metrohash128/metrohash128.cpp' ] - ) \ No newline at end of file + ) diff --git a/source/playbackInstance.hpp b/source/playbackInstance.hpp index 2ae89a8..95db6ab 100644 --- a/source/playbackInstance.hpp +++ b/source/playbackInstance.hpp @@ -11,6 +11,8 @@ #define _INVERSE_FRAME_RATE 16667 +class Nes_Emu; + struct stepData_t { std::string input; @@ -37,8 +39,11 @@ class PlaybackInstance // Initializes the playback module instance PlaybackInstance(EmuInstance* emu, const std::vector& sequence, const std::string& overlayPath = "") : _emu(emu) { + // Enabling emulation rendering + _emu->enableRendering(); + // Loading Emulator instance HQN - _hqnState.m_emu = _emu->getInternalEmulator(); + _hqnState.setEmulatorPointer(_emu->getInternalEmulatorPointer()); static uint8_t video_buffer[Nes_Emu::image_width * Nes_Emu::image_height]; _hqnState.m_emu->set_pixels(video_buffer, Nes_Emu::image_width+8); @@ -149,7 +154,7 @@ class PlaybackInstance // Since we do not store the blit information (too much memory), we need to load the previous frame and re-run the input // If its the first step, then simply reset - if (stepId == 0) _emu->getInternalEmulator()->reset(); + if (stepId == 0) _emu->doHardReset(); // Else we load the previous frame if (stepId > 0) @@ -161,7 +166,7 @@ class PlaybackInstance // Updating image int32_t curBlit[BLIT_SIZE]; - saveBlit(_emu->getInternalEmulator(), curBlit, hqn::HQNState::NES_VIDEO_PALETTE, 0, 0, 0, 0); + saveBlit(_emu->getInternalEmulatorPointer(), curBlit, hqn::HQNState::NES_VIDEO_PALETTE, 0, 0, 0, 0); _hqnGUI->update_blit(curBlit, _overlayBaseSurface, overlayButtonASurface, overlayButtonBSurface, overlayButtonSelectSurface, overlayButtonStartSurface, overlayButtonLeftSurface, overlayButtonRightSurface, overlayButtonUpSurface, overlayButtonDownSurface); } diff --git a/source/player.cpp b/source/player.cpp index 20493bd..f6ea606 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -4,6 +4,14 @@ #include "emuInstance.hpp" #include "playbackInstance.hpp" +#ifdef _USE_QUICKNES +#include "quickNESInstance.hpp" +#endif + +#ifdef _USE_QUICKERNES +#include "quickerNESInstance.hpp" +#endif + int main(int argc, char *argv[]) { // Parsing command line arguments @@ -71,7 +79,13 @@ int main(int argc, char *argv[]) refreshTerminal(); // Creating emulator instance - auto e = EmuInstance(romFilePath, stateFilePath); + #ifdef _USE_QUICKNES + auto e = QuickNESInstance(); + #endif + + #ifdef _USE_QUICKERNES + auto e = QuickerNESInstance(); + #endif // Creating playback instance auto p = PlaybackInstance(&e, sequence); diff --git a/source/quickNES/Mapper_70.cpp b/source/quickNES/Mapper_70.cpp new file mode 100644 index 0000000..deb364a --- /dev/null +++ b/source/quickNES/Mapper_70.cpp @@ -0,0 +1,80 @@ +/* Copyright notice for this file: + * Copyright (C) 2018 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This mapper was added by retrowertz for Libretro port of QuickNES. + * + * Mapper 180 Crazy Climber + * + */ + +#include "Nes_Mapper.h" + +template < bool _is152 > +class Mapper_74x161x162x32 : public Nes_Mapper { +public: + Mapper_74x161x162x32() + { + register_state( &bank, 1 ); + } + + virtual void reset_state() + { + if ( _is152 == 0 ) + bank = ~0; + } + + virtual void apply_mapping() + { + if ( _is152 ) + write( 0, 0, bank ); + else + { + intercept_writes( 0x6000, 1 ); + write_intercepted( 0, 0x6000, bank ); + } + } + + virtual bool write_intercepted( nes_time_t, nes_addr_t addr, int data ) + { + if ( ( addr != 0x6000 ) || _is152 ) + return false; + + bank = data; + set_prg_bank( 0x8000, bank_32k, ( bank >> 4 ) & 0x03 ); + set_chr_bank( 0x0000, bank_8k, ( ( bank >> 4 ) & 0x04 ) | ( bank & 0x03 ) ); + + return true; + } + + virtual void write( nes_time_t, nes_addr_t addr, int data ) + { + if ( _is152 == 0) return; + + bank = handle_bus_conflict (addr, data ); + set_prg_bank( 0x8000, bank_16k, ( bank >> 4 ) & 0x07 ); + set_chr_bank( 0x0000, bank_8k, bank & 0x0F ); + mirror_single( ( bank >> 7) & 0x01 ); + } + + uint8_t bank; +}; + +void register_mapper_70(); +void register_mapper_70() +{ + register_mapper< Mapper_74x161x162x32 > ( 70 ); +} diff --git a/extern/QuickNES_Core b/source/quickNES/QuickNES_Core similarity index 100% rename from extern/QuickNES_Core rename to source/quickNES/QuickNES_Core diff --git a/extern/meson.build b/source/quickNES/meson.build similarity index 89% rename from extern/meson.build rename to source/quickNES/meson.build index c0a256c..825d176 100644 --- a/extern/meson.build +++ b/source/quickNES/meson.build @@ -1,6 +1,6 @@ # quickNES Core sources -quickNESCoreSrc = [ +quickNESSrc = [ 'QuickNES_Core/nes_emu/abstract_file.cpp', 'QuickNES_Core/nes_emu/apu_state.cpp', 'QuickNES_Core/nes_emu/Blip_Buffer.cpp', @@ -64,13 +64,15 @@ quickNESCoreSrc = [ 'QuickNES_Core/nes_emu/Mapper_TaitoX1005.cpp', 'QuickNES_Core/nes_emu/Mapper_TaitoTC0190.cpp', 'QuickNES_Core/nes_emu/Mapper_Un1rom.cpp', - 'QuickNES_Core/nes_emu/nes_ntsc.cpp' + 'QuickNES_Core/nes_emu/nes_ntsc.cpp', + 'Mapper_70.cpp', + 'quickNESInstance.hpp' ] # quickNES Core Configuration - quickNESCoreDependency = declare_dependency( - compile_args : [ '-DUSE_ORIGINAL_QUICKNES'], - include_directories : include_directories(['QuickNES_Core/nes_emu']), - sources : [ quickNESCoreSrc ] + quickNESDependency = declare_dependency( + compile_args : [ '-D_USE_QUICKNES' ], + include_directories : include_directories(['.', 'QuickNES_Core/nes_emu']), + sources : [ quickNESSrc ] ) \ No newline at end of file diff --git a/source/quickNES/quickNESInstance.hpp b/source/quickNES/quickNESInstance.hpp new file mode 100644 index 0000000..2964874 --- /dev/null +++ b/source/quickNES/quickNESInstance.hpp @@ -0,0 +1,89 @@ +#pragma once + +#include +#include +#include + +#define _DUMMY_SIZE 65536 + +extern void register_misc_mappers(); +extern void register_extra_mappers(); +extern void register_mapper_70(); + +class QuickNESInstance : public EmuInstance +{ + public: + + QuickNESInstance() : EmuInstance() + { + // Creating new emulator + _nes = new Nes_Emu; + + // Setting video buffer + _nes->set_pixels(video_buffer, image_width+8); + + // If running the original QuickNES, register extra mappers now + register_misc_mappers(); + register_extra_mappers(); + register_mapper_70(); + } + + virtual bool loadROMFileImpl(const std::string& romData) override + { + // Loading rom data + Mem_File_Reader romReader(romData.data(), (int)romData.size()); + Auto_File_Reader romFile(romReader); + auto result = _nes->load_ines(romFile); + return result == 0; + } + + uint8_t* getLowMem() const override { return _nes->low_mem(); }; + uint8_t* getNametableMem() const override { return _nes->nametable_mem(); }; + uint8_t* getHighMem() const override { return _nes->high_mem();}; + const uint8_t* getChrMem() const override { return _nes->chr_mem();}; + size_t getChrMemSize() const override { return _nes->chr_size();}; + + void serializeState(uint8_t* state) const override + { + Mem_Writer w(state, _stateSize, 0); + Auto_File_Writer a(w); + _nes->save_state(a); + } + + void deserializeState(const uint8_t* state) override + { + Mem_File_Reader r(state, _stateSize); + Auto_File_Reader a(r); + _nes->load_state(a); + } + + void advanceStateImpl(const inputType controller1, const inputType controller2) override + { + if (_doRendering == true) _nes->emulate_frame(controller1, controller2); + if (_doRendering == false) _nes->emulate_skip_frame(controller1, controller2); + } + + std::string getCoreName() const override { return "QuickNES"; } + void doSoftReset() override { _nes->reset(false); } + void doHardReset() override { _nes->reset(true); } + + void* getInternalEmulatorPointer() const override { return _nes; } + + private: + + inline size_t getStateSizeImpl() const override + { + uint8_t* data = (uint8_t*) malloc (_DUMMY_SIZE); + Mem_Writer w(data, _DUMMY_SIZE); + Auto_File_Writer a(w); + _nes->save_state(a); + free(data); + return w.size(); + } + + // Video buffer + uint8_t video_buffer[image_width * image_height]; + + // Emulator instance + Nes_Emu* _nes; +}; diff --git a/source/core/Blip_Buffer.cpp b/source/quickerNES/Blip_Buffer.cpp similarity index 100% rename from source/core/Blip_Buffer.cpp rename to source/quickerNES/Blip_Buffer.cpp diff --git a/source/core/Blip_Buffer.h b/source/quickerNES/Blip_Buffer.h similarity index 100% rename from source/core/Blip_Buffer.h rename to source/quickerNES/Blip_Buffer.h diff --git a/source/core/Data_Reader.cpp b/source/quickerNES/Data_Reader.cpp similarity index 100% rename from source/core/Data_Reader.cpp rename to source/quickerNES/Data_Reader.cpp diff --git a/source/core/Data_Reader.h b/source/quickerNES/Data_Reader.h similarity index 100% rename from source/core/Data_Reader.h rename to source/quickerNES/Data_Reader.h diff --git a/source/core/Effects_Buffer.cpp b/source/quickerNES/Effects_Buffer.cpp similarity index 100% rename from source/core/Effects_Buffer.cpp rename to source/quickerNES/Effects_Buffer.cpp diff --git a/source/core/Effects_Buffer.h b/source/quickerNES/Effects_Buffer.h similarity index 100% rename from source/core/Effects_Buffer.h rename to source/quickerNES/Effects_Buffer.h diff --git a/source/core/Multi_Buffer.cpp b/source/quickerNES/Multi_Buffer.cpp similarity index 100% rename from source/core/Multi_Buffer.cpp rename to source/quickerNES/Multi_Buffer.cpp diff --git a/source/core/Multi_Buffer.h b/source/quickerNES/Multi_Buffer.h similarity index 100% rename from source/core/Multi_Buffer.h rename to source/quickerNES/Multi_Buffer.h diff --git a/source/core/Nes_Apu.cpp b/source/quickerNES/Nes_Apu.cpp similarity index 100% rename from source/core/Nes_Apu.cpp rename to source/quickerNES/Nes_Apu.cpp diff --git a/source/core/Nes_Apu.h b/source/quickerNES/Nes_Apu.h similarity index 100% rename from source/core/Nes_Apu.h rename to source/quickerNES/Nes_Apu.h diff --git a/source/core/Nes_Buffer.cpp b/source/quickerNES/Nes_Buffer.cpp similarity index 100% rename from source/core/Nes_Buffer.cpp rename to source/quickerNES/Nes_Buffer.cpp diff --git a/source/core/Nes_Buffer.h b/source/quickerNES/Nes_Buffer.h similarity index 100% rename from source/core/Nes_Buffer.h rename to source/quickerNES/Nes_Buffer.h diff --git a/source/core/Nes_Cart.cpp b/source/quickerNES/Nes_Cart.cpp similarity index 100% rename from source/core/Nes_Cart.cpp rename to source/quickerNES/Nes_Cart.cpp diff --git a/source/core/Nes_Cart.h b/source/quickerNES/Nes_Cart.h similarity index 100% rename from source/core/Nes_Cart.h rename to source/quickerNES/Nes_Cart.h diff --git a/source/core/Nes_Core.cpp b/source/quickerNES/Nes_Core.cpp similarity index 100% rename from source/core/Nes_Core.cpp rename to source/quickerNES/Nes_Core.cpp diff --git a/source/core/Nes_Core.h b/source/quickerNES/Nes_Core.h similarity index 100% rename from source/core/Nes_Core.h rename to source/quickerNES/Nes_Core.h diff --git a/source/core/Nes_Cpu.cpp b/source/quickerNES/Nes_Cpu.cpp similarity index 100% rename from source/core/Nes_Cpu.cpp rename to source/quickerNES/Nes_Cpu.cpp diff --git a/source/core/Nes_Cpu.h b/source/quickerNES/Nes_Cpu.h similarity index 100% rename from source/core/Nes_Cpu.h rename to source/quickerNES/Nes_Cpu.h diff --git a/source/core/Nes_Effects_Buffer.cpp b/source/quickerNES/Nes_Effects_Buffer.cpp similarity index 100% rename from source/core/Nes_Effects_Buffer.cpp rename to source/quickerNES/Nes_Effects_Buffer.cpp diff --git a/source/core/Nes_Effects_Buffer.h b/source/quickerNES/Nes_Effects_Buffer.h similarity index 100% rename from source/core/Nes_Effects_Buffer.h rename to source/quickerNES/Nes_Effects_Buffer.h diff --git a/source/core/Nes_Emu.cpp b/source/quickerNES/Nes_Emu.cpp similarity index 100% rename from source/core/Nes_Emu.cpp rename to source/quickerNES/Nes_Emu.cpp diff --git a/source/core/Nes_Emu.h b/source/quickerNES/Nes_Emu.h similarity index 100% rename from source/core/Nes_Emu.h rename to source/quickerNES/Nes_Emu.h diff --git a/source/core/Nes_File.cpp b/source/quickerNES/Nes_File.cpp similarity index 100% rename from source/core/Nes_File.cpp rename to source/quickerNES/Nes_File.cpp diff --git a/source/core/Nes_File.h b/source/quickerNES/Nes_File.h similarity index 100% rename from source/core/Nes_File.h rename to source/quickerNES/Nes_File.h diff --git a/source/core/Nes_Fme7_Apu.cpp b/source/quickerNES/Nes_Fme7_Apu.cpp similarity index 100% rename from source/core/Nes_Fme7_Apu.cpp rename to source/quickerNES/Nes_Fme7_Apu.cpp diff --git a/source/core/Nes_Fme7_Apu.h b/source/quickerNES/Nes_Fme7_Apu.h similarity index 100% rename from source/core/Nes_Fme7_Apu.h rename to source/quickerNES/Nes_Fme7_Apu.h diff --git a/source/core/Nes_Mapper.cpp b/source/quickerNES/Nes_Mapper.cpp similarity index 100% rename from source/core/Nes_Mapper.cpp rename to source/quickerNES/Nes_Mapper.cpp diff --git a/source/core/Nes_Mapper.h b/source/quickerNES/Nes_Mapper.h similarity index 100% rename from source/core/Nes_Mapper.h rename to source/quickerNES/Nes_Mapper.h diff --git a/source/core/Nes_Namco_Apu.cpp b/source/quickerNES/Nes_Namco_Apu.cpp similarity index 100% rename from source/core/Nes_Namco_Apu.cpp rename to source/quickerNES/Nes_Namco_Apu.cpp diff --git a/source/core/Nes_Namco_Apu.h b/source/quickerNES/Nes_Namco_Apu.h similarity index 100% rename from source/core/Nes_Namco_Apu.h rename to source/quickerNES/Nes_Namco_Apu.h diff --git a/source/core/Nes_Oscs.cpp b/source/quickerNES/Nes_Oscs.cpp similarity index 100% rename from source/core/Nes_Oscs.cpp rename to source/quickerNES/Nes_Oscs.cpp diff --git a/source/core/Nes_Oscs.h b/source/quickerNES/Nes_Oscs.h similarity index 100% rename from source/core/Nes_Oscs.h rename to source/quickerNES/Nes_Oscs.h diff --git a/source/core/Nes_Ppu.cpp b/source/quickerNES/Nes_Ppu.cpp similarity index 100% rename from source/core/Nes_Ppu.cpp rename to source/quickerNES/Nes_Ppu.cpp diff --git a/source/core/Nes_Ppu.h b/source/quickerNES/Nes_Ppu.h similarity index 100% rename from source/core/Nes_Ppu.h rename to source/quickerNES/Nes_Ppu.h diff --git a/source/core/Nes_Ppu_Bg.h b/source/quickerNES/Nes_Ppu_Bg.h similarity index 100% rename from source/core/Nes_Ppu_Bg.h rename to source/quickerNES/Nes_Ppu_Bg.h diff --git a/source/core/Nes_Ppu_Impl.cpp b/source/quickerNES/Nes_Ppu_Impl.cpp similarity index 100% rename from source/core/Nes_Ppu_Impl.cpp rename to source/quickerNES/Nes_Ppu_Impl.cpp diff --git a/source/core/Nes_Ppu_Impl.h b/source/quickerNES/Nes_Ppu_Impl.h similarity index 100% rename from source/core/Nes_Ppu_Impl.h rename to source/quickerNES/Nes_Ppu_Impl.h diff --git a/source/core/Nes_Ppu_Rendering.cpp b/source/quickerNES/Nes_Ppu_Rendering.cpp similarity index 100% rename from source/core/Nes_Ppu_Rendering.cpp rename to source/quickerNES/Nes_Ppu_Rendering.cpp diff --git a/source/core/Nes_Ppu_Rendering.h b/source/quickerNES/Nes_Ppu_Rendering.h similarity index 100% rename from source/core/Nes_Ppu_Rendering.h rename to source/quickerNES/Nes_Ppu_Rendering.h diff --git a/source/core/Nes_Ppu_Sprites.h b/source/quickerNES/Nes_Ppu_Sprites.h similarity index 100% rename from source/core/Nes_Ppu_Sprites.h rename to source/quickerNES/Nes_Ppu_Sprites.h diff --git a/source/core/Nes_State.cpp b/source/quickerNES/Nes_State.cpp similarity index 100% rename from source/core/Nes_State.cpp rename to source/quickerNES/Nes_State.cpp diff --git a/source/core/Nes_State.h b/source/quickerNES/Nes_State.h similarity index 100% rename from source/core/Nes_State.h rename to source/quickerNES/Nes_State.h diff --git a/source/core/Nes_Vrc6_Apu.cpp b/source/quickerNES/Nes_Vrc6_Apu.cpp similarity index 100% rename from source/core/Nes_Vrc6_Apu.cpp rename to source/quickerNES/Nes_Vrc6_Apu.cpp diff --git a/source/core/Nes_Vrc6_Apu.h b/source/quickerNES/Nes_Vrc6_Apu.h similarity index 100% rename from source/core/Nes_Vrc6_Apu.h rename to source/quickerNES/Nes_Vrc6_Apu.h diff --git a/source/core/Nes_Vrc7.cpp b/source/quickerNES/Nes_Vrc7.cpp similarity index 100% rename from source/core/Nes_Vrc7.cpp rename to source/quickerNES/Nes_Vrc7.cpp diff --git a/source/core/Nes_Vrc7.h b/source/quickerNES/Nes_Vrc7.h similarity index 100% rename from source/core/Nes_Vrc7.h rename to source/quickerNES/Nes_Vrc7.h diff --git a/source/core/abstract_file.h b/source/quickerNES/abstract_file.h similarity index 100% rename from source/core/abstract_file.h rename to source/quickerNES/abstract_file.h diff --git a/source/core/blargg_common.h b/source/quickerNES/blargg_common.h similarity index 100% rename from source/core/blargg_common.h rename to source/quickerNES/blargg_common.h diff --git a/source/core/blargg_endian.h b/source/quickerNES/blargg_endian.h similarity index 100% rename from source/core/blargg_endian.h rename to source/quickerNES/blargg_endian.h diff --git a/source/core/blargg_source.h b/source/quickerNES/blargg_source.h similarity index 100% rename from source/core/blargg_source.h rename to source/quickerNES/blargg_source.h diff --git a/source/core/emu2413.cpp b/source/quickerNES/emu2413.cpp similarity index 100% rename from source/core/emu2413.cpp rename to source/quickerNES/emu2413.cpp diff --git a/source/core/emu2413.h b/source/quickerNES/emu2413.h similarity index 100% rename from source/core/emu2413.h rename to source/quickerNES/emu2413.h diff --git a/source/core/emu2413_state.cpp b/source/quickerNES/emu2413_state.cpp similarity index 100% rename from source/core/emu2413_state.cpp rename to source/quickerNES/emu2413_state.cpp diff --git a/source/core/emu2413_state.h b/source/quickerNES/emu2413_state.h similarity index 100% rename from source/core/emu2413_state.h rename to source/quickerNES/emu2413_state.h diff --git a/source/core/mappers/mapper000.hpp b/source/quickerNES/mappers/mapper000.hpp similarity index 100% rename from source/core/mappers/mapper000.hpp rename to source/quickerNES/mappers/mapper000.hpp diff --git a/source/core/mappers/mapper001.hpp b/source/quickerNES/mappers/mapper001.hpp similarity index 100% rename from source/core/mappers/mapper001.hpp rename to source/quickerNES/mappers/mapper001.hpp diff --git a/source/core/mappers/mapper002.hpp b/source/quickerNES/mappers/mapper002.hpp similarity index 100% rename from source/core/mappers/mapper002.hpp rename to source/quickerNES/mappers/mapper002.hpp diff --git a/source/core/mappers/mapper003.hpp b/source/quickerNES/mappers/mapper003.hpp similarity index 100% rename from source/core/mappers/mapper003.hpp rename to source/quickerNES/mappers/mapper003.hpp diff --git a/source/core/mappers/mapper004.hpp b/source/quickerNES/mappers/mapper004.hpp similarity index 100% rename from source/core/mappers/mapper004.hpp rename to source/quickerNES/mappers/mapper004.hpp diff --git a/source/core/mappers/mapper005.hpp b/source/quickerNES/mappers/mapper005.hpp similarity index 100% rename from source/core/mappers/mapper005.hpp rename to source/quickerNES/mappers/mapper005.hpp diff --git a/source/core/mappers/mapper007.hpp b/source/quickerNES/mappers/mapper007.hpp similarity index 100% rename from source/core/mappers/mapper007.hpp rename to source/quickerNES/mappers/mapper007.hpp diff --git a/source/core/mappers/mapper009.hpp b/source/quickerNES/mappers/mapper009.hpp similarity index 100% rename from source/core/mappers/mapper009.hpp rename to source/quickerNES/mappers/mapper009.hpp diff --git a/source/core/mappers/mapper010.hpp b/source/quickerNES/mappers/mapper010.hpp similarity index 100% rename from source/core/mappers/mapper010.hpp rename to source/quickerNES/mappers/mapper010.hpp diff --git a/source/core/mappers/mapper011.hpp b/source/quickerNES/mappers/mapper011.hpp similarity index 100% rename from source/core/mappers/mapper011.hpp rename to source/quickerNES/mappers/mapper011.hpp diff --git a/source/core/mappers/mapper015.hpp b/source/quickerNES/mappers/mapper015.hpp similarity index 100% rename from source/core/mappers/mapper015.hpp rename to source/quickerNES/mappers/mapper015.hpp diff --git a/source/core/mappers/mapper019.hpp b/source/quickerNES/mappers/mapper019.hpp similarity index 100% rename from source/core/mappers/mapper019.hpp rename to source/quickerNES/mappers/mapper019.hpp diff --git a/source/core/mappers/mapper021.hpp b/source/quickerNES/mappers/mapper021.hpp similarity index 100% rename from source/core/mappers/mapper021.hpp rename to source/quickerNES/mappers/mapper021.hpp diff --git a/source/core/mappers/mapper022.hpp b/source/quickerNES/mappers/mapper022.hpp similarity index 100% rename from source/core/mappers/mapper022.hpp rename to source/quickerNES/mappers/mapper022.hpp diff --git a/source/core/mappers/mapper023.hpp b/source/quickerNES/mappers/mapper023.hpp similarity index 100% rename from source/core/mappers/mapper023.hpp rename to source/quickerNES/mappers/mapper023.hpp diff --git a/source/core/mappers/mapper024.hpp b/source/quickerNES/mappers/mapper024.hpp similarity index 100% rename from source/core/mappers/mapper024.hpp rename to source/quickerNES/mappers/mapper024.hpp diff --git a/source/core/mappers/mapper025.hpp b/source/quickerNES/mappers/mapper025.hpp similarity index 100% rename from source/core/mappers/mapper025.hpp rename to source/quickerNES/mappers/mapper025.hpp diff --git a/source/core/mappers/mapper026.hpp b/source/quickerNES/mappers/mapper026.hpp similarity index 100% rename from source/core/mappers/mapper026.hpp rename to source/quickerNES/mappers/mapper026.hpp diff --git a/source/core/mappers/mapper030.hpp b/source/quickerNES/mappers/mapper030.hpp similarity index 100% rename from source/core/mappers/mapper030.hpp rename to source/quickerNES/mappers/mapper030.hpp diff --git a/source/core/mappers/mapper032.hpp b/source/quickerNES/mappers/mapper032.hpp similarity index 100% rename from source/core/mappers/mapper032.hpp rename to source/quickerNES/mappers/mapper032.hpp diff --git a/source/core/mappers/mapper033.hpp b/source/quickerNES/mappers/mapper033.hpp similarity index 100% rename from source/core/mappers/mapper033.hpp rename to source/quickerNES/mappers/mapper033.hpp diff --git a/source/core/mappers/mapper034.hpp b/source/quickerNES/mappers/mapper034.hpp similarity index 100% rename from source/core/mappers/mapper034.hpp rename to source/quickerNES/mappers/mapper034.hpp diff --git a/source/core/mappers/mapper060.hpp b/source/quickerNES/mappers/mapper060.hpp similarity index 100% rename from source/core/mappers/mapper060.hpp rename to source/quickerNES/mappers/mapper060.hpp diff --git a/source/core/mappers/mapper066.hpp b/source/quickerNES/mappers/mapper066.hpp similarity index 100% rename from source/core/mappers/mapper066.hpp rename to source/quickerNES/mappers/mapper066.hpp diff --git a/source/core/mappers/mapper069.hpp b/source/quickerNES/mappers/mapper069.hpp similarity index 100% rename from source/core/mappers/mapper069.hpp rename to source/quickerNES/mappers/mapper069.hpp diff --git a/source/core/mappers/mapper070.hpp b/source/quickerNES/mappers/mapper070.hpp similarity index 100% rename from source/core/mappers/mapper070.hpp rename to source/quickerNES/mappers/mapper070.hpp diff --git a/source/core/mappers/mapper071.hpp b/source/quickerNES/mappers/mapper071.hpp similarity index 100% rename from source/core/mappers/mapper071.hpp rename to source/quickerNES/mappers/mapper071.hpp diff --git a/source/core/mappers/mapper073.hpp b/source/quickerNES/mappers/mapper073.hpp similarity index 100% rename from source/core/mappers/mapper073.hpp rename to source/quickerNES/mappers/mapper073.hpp diff --git a/source/core/mappers/mapper075.hpp b/source/quickerNES/mappers/mapper075.hpp similarity index 100% rename from source/core/mappers/mapper075.hpp rename to source/quickerNES/mappers/mapper075.hpp diff --git a/source/core/mappers/mapper078.hpp b/source/quickerNES/mappers/mapper078.hpp similarity index 100% rename from source/core/mappers/mapper078.hpp rename to source/quickerNES/mappers/mapper078.hpp diff --git a/source/core/mappers/mapper079.hpp b/source/quickerNES/mappers/mapper079.hpp similarity index 100% rename from source/core/mappers/mapper079.hpp rename to source/quickerNES/mappers/mapper079.hpp diff --git a/source/core/mappers/mapper085.hpp b/source/quickerNES/mappers/mapper085.hpp similarity index 100% rename from source/core/mappers/mapper085.hpp rename to source/quickerNES/mappers/mapper085.hpp diff --git a/source/core/mappers/mapper086.hpp b/source/quickerNES/mappers/mapper086.hpp similarity index 100% rename from source/core/mappers/mapper086.hpp rename to source/quickerNES/mappers/mapper086.hpp diff --git a/source/core/mappers/mapper087.hpp b/source/quickerNES/mappers/mapper087.hpp similarity index 100% rename from source/core/mappers/mapper087.hpp rename to source/quickerNES/mappers/mapper087.hpp diff --git a/source/core/mappers/mapper088.hpp b/source/quickerNES/mappers/mapper088.hpp similarity index 100% rename from source/core/mappers/mapper088.hpp rename to source/quickerNES/mappers/mapper088.hpp diff --git a/source/core/mappers/mapper089.hpp b/source/quickerNES/mappers/mapper089.hpp similarity index 100% rename from source/core/mappers/mapper089.hpp rename to source/quickerNES/mappers/mapper089.hpp diff --git a/source/core/mappers/mapper093.hpp b/source/quickerNES/mappers/mapper093.hpp similarity index 100% rename from source/core/mappers/mapper093.hpp rename to source/quickerNES/mappers/mapper093.hpp diff --git a/source/core/mappers/mapper094.hpp b/source/quickerNES/mappers/mapper094.hpp similarity index 100% rename from source/core/mappers/mapper094.hpp rename to source/quickerNES/mappers/mapper094.hpp diff --git a/source/core/mappers/mapper097.hpp b/source/quickerNES/mappers/mapper097.hpp similarity index 100% rename from source/core/mappers/mapper097.hpp rename to source/quickerNES/mappers/mapper097.hpp diff --git a/source/core/mappers/mapper113.hpp b/source/quickerNES/mappers/mapper113.hpp similarity index 100% rename from source/core/mappers/mapper113.hpp rename to source/quickerNES/mappers/mapper113.hpp diff --git a/source/core/mappers/mapper140.hpp b/source/quickerNES/mappers/mapper140.hpp similarity index 100% rename from source/core/mappers/mapper140.hpp rename to source/quickerNES/mappers/mapper140.hpp diff --git a/source/core/mappers/mapper152.hpp b/source/quickerNES/mappers/mapper152.hpp similarity index 100% rename from source/core/mappers/mapper152.hpp rename to source/quickerNES/mappers/mapper152.hpp diff --git a/source/core/mappers/mapper154.hpp b/source/quickerNES/mappers/mapper154.hpp similarity index 100% rename from source/core/mappers/mapper154.hpp rename to source/quickerNES/mappers/mapper154.hpp diff --git a/source/core/mappers/mapper156.hpp b/source/quickerNES/mappers/mapper156.hpp similarity index 100% rename from source/core/mappers/mapper156.hpp rename to source/quickerNES/mappers/mapper156.hpp diff --git a/source/core/mappers/mapper180.hpp b/source/quickerNES/mappers/mapper180.hpp similarity index 100% rename from source/core/mappers/mapper180.hpp rename to source/quickerNES/mappers/mapper180.hpp diff --git a/source/core/mappers/mapper184.hpp b/source/quickerNES/mappers/mapper184.hpp similarity index 100% rename from source/core/mappers/mapper184.hpp rename to source/quickerNES/mappers/mapper184.hpp diff --git a/source/core/mappers/mapper190.hpp b/source/quickerNES/mappers/mapper190.hpp similarity index 100% rename from source/core/mappers/mapper190.hpp rename to source/quickerNES/mappers/mapper190.hpp diff --git a/source/core/mappers/mapper193.hpp b/source/quickerNES/mappers/mapper193.hpp similarity index 100% rename from source/core/mappers/mapper193.hpp rename to source/quickerNES/mappers/mapper193.hpp diff --git a/source/core/mappers/mapper206.hpp b/source/quickerNES/mappers/mapper206.hpp similarity index 100% rename from source/core/mappers/mapper206.hpp rename to source/quickerNES/mappers/mapper206.hpp diff --git a/source/core/mappers/mapper207.hpp b/source/quickerNES/mappers/mapper207.hpp similarity index 100% rename from source/core/mappers/mapper207.hpp rename to source/quickerNES/mappers/mapper207.hpp diff --git a/source/core/mappers/mapper232.hpp b/source/quickerNES/mappers/mapper232.hpp similarity index 100% rename from source/core/mappers/mapper232.hpp rename to source/quickerNES/mappers/mapper232.hpp diff --git a/source/core/mappers/mapper240.hpp b/source/quickerNES/mappers/mapper240.hpp similarity index 100% rename from source/core/mappers/mapper240.hpp rename to source/quickerNES/mappers/mapper240.hpp diff --git a/source/core/mappers/mapper241.hpp b/source/quickerNES/mappers/mapper241.hpp similarity index 100% rename from source/core/mappers/mapper241.hpp rename to source/quickerNES/mappers/mapper241.hpp diff --git a/source/core/mappers/mapper244.hpp b/source/quickerNES/mappers/mapper244.hpp similarity index 100% rename from source/core/mappers/mapper244.hpp rename to source/quickerNES/mappers/mapper244.hpp diff --git a/source/core/mappers/mapper246.hpp b/source/quickerNES/mappers/mapper246.hpp similarity index 100% rename from source/core/mappers/mapper246.hpp rename to source/quickerNES/mappers/mapper246.hpp diff --git a/source/core/meson.build b/source/quickerNES/meson.build similarity index 73% rename from source/core/meson.build rename to source/quickerNES/meson.build index e8eed15..38b1ac2 100644 --- a/source/core/meson.build +++ b/source/quickerNES/meson.build @@ -1,6 +1,6 @@ # quickerNES Core sources -quickerNESCoreSrc = [ +quickerNESSrc = [ 'Nes_Apu.cpp', 'Nes_File.cpp', 'Nes_Oscs.cpp', @@ -27,12 +27,13 @@ quickerNESCoreSrc = [ 'Nes_Mapper.cpp', 'Nes_Core.cpp', 'Nes_Cpu.cpp', + 'quickerNESInstance.hpp' ] # quickerNES Core Configuration - quickerNESCoreDependency = declare_dependency( - compile_args : [ '-D_PAGE_SIZE="' + pageSize.to_string() + '"'], + quickerNESDependency = declare_dependency( + compile_args : [ '-D_USE_QUICKERNES', '-D_PAGE_SIZE="' + pageSize.to_string() + '"'], include_directories : include_directories(['.']), - sources : [ quickerNESCoreSrc ] + sources : [ quickerNESSrc ] ) \ No newline at end of file diff --git a/source/core/nes_cpu_io.h b/source/quickerNES/nes_cpu_io.h similarity index 100% rename from source/core/nes_cpu_io.h rename to source/quickerNES/nes_cpu_io.h diff --git a/source/core/nes_data.h b/source/quickerNES/nes_data.h similarity index 100% rename from source/core/nes_data.h rename to source/quickerNES/nes_data.h diff --git a/source/core/nes_ntsc.cpp b/source/quickerNES/nes_ntsc.cpp similarity index 100% rename from source/core/nes_ntsc.cpp rename to source/quickerNES/nes_ntsc.cpp diff --git a/source/core/nes_ntsc.h b/source/quickerNES/nes_ntsc.h similarity index 100% rename from source/core/nes_ntsc.h rename to source/quickerNES/nes_ntsc.h diff --git a/source/core/nes_ntsc_config.h b/source/quickerNES/nes_ntsc_config.h similarity index 100% rename from source/core/nes_ntsc_config.h rename to source/quickerNES/nes_ntsc_config.h diff --git a/source/core/nes_ntsc_impl.h b/source/quickerNES/nes_ntsc_impl.h similarity index 100% rename from source/core/nes_ntsc_impl.h rename to source/quickerNES/nes_ntsc_impl.h diff --git a/source/core/nes_util.cpp b/source/quickerNES/nes_util.cpp similarity index 100% rename from source/core/nes_util.cpp rename to source/quickerNES/nes_util.cpp diff --git a/source/core/nes_util.h b/source/quickerNES/nes_util.h similarity index 100% rename from source/core/nes_util.h rename to source/quickerNES/nes_util.h diff --git a/source/quickerNES/quickerNESInstance.hpp b/source/quickerNES/quickerNESInstance.hpp new file mode 100644 index 0000000..df3b914 --- /dev/null +++ b/source/quickerNES/quickerNESInstance.hpp @@ -0,0 +1,79 @@ +#pragma once + +#include +#include +#include + +class QuickerNESInstance : public EmuInstance +{ + public: + + QuickerNESInstance() : EmuInstance() + { + // Creating new emulator + _nes = new Nes_Emu; + + // Setting video buffer + _nes->set_pixels(video_buffer, image_width+8); + } + + ~QuickerNESInstance() = default; + + virtual bool loadROMFileImpl(const std::string& romData) override + { + // Loading rom data + Mem_File_Reader romReader(romData.data(), (int)romData.size()); + Auto_File_Reader romFile(romReader); + auto result = _nes->load_ines(romFile); + return result == 0; + } + + uint8_t* getLowMem() const override { return _nes->low_mem(); }; + uint8_t* getNametableMem() const override { return _nes->nametable_mem(); }; + uint8_t* getHighMem() const override { return _nes->high_mem();}; + const uint8_t* getChrMem() const override { return _nes->chr_mem();}; + size_t getChrMemSize() const override { return _nes->chr_size();}; + + void serializeState(uint8_t* state) const + { + Mem_Writer w(state, _stateSize, 0); + Auto_File_Writer a(w); + _nes->save_state(a); + } + + void deserializeState(const uint8_t* state) + { + Mem_File_Reader r(state, _stateSize); + Auto_File_Reader a(r); + _nes->load_state(a); + } + + void advanceStateImpl(const inputType controller1, const inputType controller2) override + { + if (_doRendering == true) _nes->emulate_frame(controller1, controller2); + if (_doRendering == false) _nes->emulate_skip_frame(controller1, controller2); + } + + std::string getCoreName() const override { return "QuickerNES"; } + void doSoftReset() override { _nes->reset(false); } + void doHardReset() override { _nes->reset(true); } + + void* getInternalEmulatorPointer() const override { return _nes; } + + private: + + inline size_t getStateSizeImpl() const + { + // Using dry writer to just obtain the state size + Dry_Writer w; + Auto_File_Writer a(w); + _nes->save_state(a); + return w.size(); + } + + // Video buffer + uint8_t video_buffer[image_width * image_height]; + + // Emulator instance + Nes_Emu* _nes; +}; diff --git a/source/tester.cpp b/source/tester.cpp index ccdf779..a779feb 100644 --- a/source/tester.cpp +++ b/source/tester.cpp @@ -4,7 +4,14 @@ #include "sha1/sha1.hpp" #include "utils.hpp" #include "nlohmann/json.hpp" -#include "emuInstance.hpp" + +#ifdef _USE_QUICKNES +#include "quickNESInstance.hpp" +#endif + +#ifdef _USE_QUICKERNES +#include "quickerNESInstance.hpp" +#endif int main(int argc, char *argv[]) { @@ -24,7 +31,7 @@ int main(int argc, char *argv[]) // Loading script file std::string scriptJsonRaw; - if (loadStringFromFile(scriptJsonRaw, scriptFilePath.c_str()) == false) EXIT_WITH_ERROR("Could not find/read script file: %s\n", scriptFilePath.c_str()); + if (loadStringFromFile(scriptJsonRaw, scriptFilePath) == false) EXIT_WITH_ERROR("Could not find/read script file: %s\n", scriptFilePath.c_str()); // Parsing script const auto scriptJson = nlohmann::json::parse(scriptJsonRaw); @@ -55,7 +62,19 @@ int main(int argc, char *argv[]) std::string expectedROMSHA1 = scriptJson["Expected ROM SHA1"].get(); // Creating emulator instance - auto e = EmuInstance(romFilePath, initialStateFilePath); + #ifdef _USE_QUICKNES + auto e = QuickNESInstance(); + #endif + + #ifdef _USE_QUICKERNES + auto e = QuickerNESInstance(); + #endif + + // Loading ROM File + e.loadROMFile(romFilePath); + + // If an initial state is provided, load it now + if (initialStateFilePath != "") e.loadStateFile(initialStateFilePath); // Disable rendering e.disableRendering(); @@ -94,17 +113,13 @@ int main(int argc, char *argv[]) // Getting sequence lenght const auto sequenceLength = sequence.size(); - // Getting emulation core - #ifdef USE_ORIGINAL_QUICKNES - std::string emulationCore = "QuickNES"; - #else - std::string emulationCore = "QuickerNES"; - #endif + // Getting emulation core name + std::string emulationCoreName = e.getCoreName(); // Printing test information printf("[] -----------------------------------------\n"); printf("[] Running Script: '%s'\n", scriptFilePath.c_str()); - printf("[] Emulation Core: '%s'\n", emulationCore.c_str()); + printf("[] Emulation Core: '%s'\n", emulationCoreName.c_str()); printf("[] ROM File: '%s'\n", romFilePath.c_str()); printf("[] ROM SHA1: '%s'\n", romSHA1.c_str()); printf("[] Verification State File: '%s'\n", verificationStateFilePath.c_str()); @@ -118,7 +133,7 @@ int main(int argc, char *argv[]) // Actually running the sequence auto t0 = std::chrono::high_resolution_clock::now(); - for (const auto& input : sequence) e.advanceState(input); + for (const std::string& input : sequence) e.advanceState(input); auto tf = std::chrono::high_resolution_clock::now(); // Calculating running time diff --git a/source/utils.hpp b/source/utils.hpp index 009aebc..c17046d 100644 --- a/source/utils.hpp +++ b/source/utils.hpp @@ -2,7 +2,6 @@ #include #include -#include #include #include #include @@ -149,7 +148,7 @@ inline void exitWithError [[noreturn]] (const char *fileName, const int lineNum } // Loads a string from a given file -inline bool loadStringFromFile(std::string &dst, std::string path) +inline bool loadStringFromFile(std::string &dst, const std::string path) { std::ifstream fi(path); diff --git a/tests/games/run_benchmark.sh b/tests/games/run_benchmark.sh index f8b00bb..e197363 100755 --- a/tests/games/run_benchmark.sh +++ b/tests/games/run_benchmark.sh @@ -1,70 +1,27 @@ -gitBranch=`git branch --show-current` -gitCommit=`git rev-parse HEAD` +#!/bin/bash -echo "Git revision: ${gitBranch}:${gitCommit}" +# Finding all test scripts +testScriptList=`find . -type f -name *.test` -echo "Getting system information" -lscpu -lsmem -echo "Running Tests sequentially..." +# Iterating over the scripts +for script in ${testScriptList}; do + + # Getting base folder + folder=`dirname ${script}` -pushd arkanoid -tester warps.test -tester warpless.test -popd + # Getting filename + fileName=`basename ${script}` + + # Going to folder + pushd ${folder} -pushd ninjaGaiden2 -tester pacifist.test -tester anyPercent.test -popd + # Running script on quickerNES + quickerNESTester ${fileName} -pushd superOffroad -tester anyPercent.test -popd + # Running script on quickerNES + quickNESTester ${fileName} -pushd nigelMansell -tester anyPercent.test -popd + # Coming back + popd +done -pushd castlevania1 -tester pacifist.test -tester anyPercent.test -popd - -pushd saintSeiyaKanketsuHen -tester anyPercent.test -popd - -pushd tennis -tester anyPercent.test -popd - -pushd superMarioBros -tester warps.test -tester warpless.test -popd - -pushd ninjaGaiden -tester pacifist.test -tester anyPercent.test -popd - -pushd ironSword -tester anyPercent.test -popd - -pushd saintSeiyaOugonDensetsu -tester anyPercent.test -popd - -pushd princeOfPersia -tester lvl7.test -popd - -pushd solarJetman -tester anyPercent.test -popd - -pushd galaga -tester anyPercent.test -popd