diff --git a/bsnes.exe b/bsnes.exe index ce48e896..04ead070 100644 Binary files a/bsnes.exe and b/bsnes.exe differ diff --git a/src/Makefile b/src/Makefile index 8a82a32c..be4298dd 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,17 +1,12 @@ include lib/nall/Makefile - ui := ui_qt -qtlibs := $(strip QtCore QtGui $(if $(findstring osx,$(platform)),QtOpenGL)) -include lib/nall/qt/Makefile -################ -### compiler ### -################ - -c := $(compiler) --std=gnu99 -cpp := $(subst cc,++,$(compiler)) -std=gnu++0x -flags := -O3 -fomit-frame-pointer -Ilib -link := +# compiler +c := $(compiler) --std=gnu99 +cpp := $(subst cc,++,$(compiler)) -std=gnu++0x +flags := -O3 -fomit-frame-pointer -I. -Ilib +link := +objects := # profile-guided instrumentation: # flags += -fprofile-generate @@ -20,75 +15,20 @@ link := # profile-guided optimization: # flags += -fprofile-use -################ -### platform ### -################ - +# platform ifeq ($(platform),x) link += -s -ldl -lX11 -lXext - - ruby := video.glx video.xv video.qtraster video.sdl - ruby += audio.alsa audio.openal audio.oss audio.pulseaudio audio.pulseaudiosimple audio.ao - ruby += input.sdl input.x - - link += $(if $(findstring audio.openal,$(ruby)),-lopenal) else ifeq ($(platform),osx) - ruby := video.qtopengl video.qtraster - ruby += audio.openal - ruby += input.carbon - - link += $(if $(findstring audio.openal,$(ruby)),-framework OpenAL) else ifeq ($(platform),win) link += -mwindows -mthreads # link += -mconsole -mthreads link += -s -luuid -lkernel32 -luser32 -lgdi32 -lshell32 link += -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc - - ruby := video.direct3d video.wgl video.directdraw video.gdi video.qtraster - ruby += audio.directsound - ruby += input.rawinput input.directinput - - link += $(if $(findstring audio.openal,$(ruby)),-lopenal32) else unknown_platform: help; endif -############ -### ruby ### -############ - -rubyflags := $(if $(finstring .sdl,$(ruby)),`sdl-config --cflags`) -rubyflags += $(if $(findstring .qt,$(ruby)),$(qtinc)) - -link += $(if $(findstring .sdl,$(ruby)),`sdl-config --libs`) -link += $(if $(findstring video.direct3d,$(ruby)),-ld3d9) -link += $(if $(findstring video.directdraw,$(ruby)),-lddraw) -link += $(if $(findstring video.glx,$(ruby)),-lGL) -link += $(if $(findstring video.wgl,$(ruby)),-lopengl32) -link += $(if $(findstring video.xv,$(ruby)),-lXv) -link += $(if $(findstring audio.alsa,$(ruby)),-lasound) -link += $(if $(findstring audio.ao,$(ruby)),-lao) -link += $(if $(findstring audio.directsound,$(ruby)),-ldsound) -link += $(if $(findstring audio.pulseaudio,$(ruby)),-lpulse) -link += $(if $(findstring audio.pulseaudiosimple,$(ruby)),-lpulse-simple) -link += $(if $(findstring input.directinput,$(ruby)),-ldinput8 -ldxguid) -link += $(if $(findstring input.rawinput,$(ruby)),-ldinput8 -ldxguid) - -############### -### objects ### -############### - -objects := libco ruby -objects += system cartridge cheat -objects += memory smemory cpu cpucore scpu smp smpcore ssmp dsp sdsp ppu bppu -objects += supergameboy superfx sa1 -objects += bsx srtc sdd1 spc7110 cx4 dsp1 dsp2 dsp3 dsp4 obc1 st0010 st0011 st0018 -objects += msu1 - -###################### -### implicit rules ### -###################### - +# implicit rules compile = \ $(strip \ $(if $(filter %.c,$<), \ @@ -103,95 +43,12 @@ compile = \ all: build; +include snes/Makefile include $(ui)/Makefile + objects := $(patsubst %,obj/%.o,$(objects)) -rubydef := $(foreach c,$(subst .,_,$(call strupper,$(ruby))),-D$c) - -################# -### libraries ### -################# - -obj/ruby.o: lib/ruby/ruby.cpp $(call rwildcard,lib/ruby/*) - $(call compile,$(rubydef) $(rubyflags)) -obj/libco.o: lib/libco/libco.c lib/libco/* - -################# -### utilities ### -################# - -obj/cartridge.o: cartridge/cartridge.cpp cartridge/* -obj/cheat.o : cheat/cheat.cpp cheat/* - -############## -### memory ### -############## - -obj/memory.o : memory/memory.cpp memory/* -obj/smemory.o: memory/smemory/smemory.cpp $(call rwildcard,memory/smemory/) - -########### -### cpu ### -########### - -obj/cpu.o : cpu/cpu.cpp cpu/* -obj/cpucore.o: cpu/core/core.cpp $(call rwildcard,cpu/core/) -obj/scpu.o : cpu/scpu/scpu.cpp $(call rwildcard,cpu/scpu/) - -########### -### smp ### -########### - -obj/smp.o : smp/smp.cpp smp/* -obj/smpcore.o: smp/core/core.cpp $(call rwildcard,smp/core/) -obj/ssmp.o : smp/ssmp/ssmp.cpp $(call rwildcard,smp/ssmp/) - -########### -### dsp ### -########### - -obj/dsp.o : dsp/dsp.cpp dsp/* -obj/adsp.o: dsp/adsp/adsp.cpp dsp/adsp/* -obj/sdsp.o: dsp/sdsp/sdsp.cpp dsp/sdsp/* - -########### -### ppu ### -########### - -obj/ppu.o : ppu/ppu.cpp ppu/* -obj/bppu.o: ppu/bppu/bppu.cpp $(call rwildcard,ppu/bppu/) - -############## -### system ### -############## - -obj/system.o: system/system.cpp $(call rwildcard,system/) - -##################### -### special chips ### -##################### - -obj/supergameboy.o: chip/supergameboy/supergameboy.cpp $(call rwildcard,chip/supergameboy/) -obj/superfx.o : chip/superfx/superfx.cpp $(call rwildcard,chip/superfx/) -obj/sa1.o : chip/sa1/sa1.cpp $(call rwildcard,chip/sa1/) -obj/bsx.o : chip/bsx/bsx.cpp chip/bsx/* -obj/srtc.o : chip/srtc/srtc.cpp chip/srtc/* -obj/sdd1.o : chip/sdd1/sdd1.cpp chip/sdd1/* -obj/spc7110.o : chip/spc7110/spc7110.cpp chip/spc7110/* -obj/cx4.o : chip/cx4/cx4.cpp chip/cx4/* -obj/dsp1.o : chip/dsp1/dsp1.cpp chip/dsp1/* -obj/dsp2.o : chip/dsp2/dsp2.cpp chip/dsp2/* -obj/dsp3.o : chip/dsp3/dsp3.cpp chip/dsp3/* -obj/dsp4.o : chip/dsp4/dsp4.cpp chip/dsp4/* -obj/obc1.o : chip/obc1/obc1.cpp chip/obc1/* -obj/st0010.o : chip/st0010/st0010.cpp chip/st0010/* -obj/st0011.o : chip/st0011/st0011.cpp chip/st0011/* -obj/st0018.o : chip/st0018/st0018.cpp chip/st0018/* -obj/msu1.o : chip/msu1/msu1.cpp chip/msu1/* - -############### -### targets ### -############### +# targets build: ui_build $(objects) ifeq ($(platform),osx) test -d ../bsnes.app || mkdir -p ../bsnes.app/Contents/MacOS @@ -201,20 +58,30 @@ else endif install: +ifeq ($(platform),x) install -D -m 755 ../bsnes $(DESTDIR)$(prefix)/bin/bsnes install -D -m 644 data/bsnes.png $(DESTDIR)$(prefix)/share/pixmaps/bsnes.png install -D -m 644 data/bsnes.desktop $(DESTDIR)$(prefix)/share/applications/bsnes.desktop +endif uninstall: +ifeq ($(platform),x) rm $(DESTDIR)$(prefix)/bin/bsnes rm $(DESTDIR)$(prefix)/share/pixmaps/bsnes.png rm $(DESTDIR)$(prefix)/share/applications/bsnes.desktop +endif clean: ui_clean -@$(call delete,obj/*.o) + -@$(call delete,obj/*.a) + -@$(call delete,obj/*.so) + -@$(call delete,obj/*.dylib) + -@$(call delete,obj/*.dll) -@$(call delete,*.res) -@$(call delete,*.pgd) -@$(call delete,*.pgc) -@$(call delete,*.ilk) -@$(call delete,*.pdb) -@$(call delete,*.manifest) + +help:; diff --git a/src/base.hpp b/src/base.hpp deleted file mode 100644 index 1938b041..00000000 --- a/src/base.hpp +++ /dev/null @@ -1,38 +0,0 @@ -static const char bsnesVersion[] = "063.02"; -static const char bsnesTitle[] = "bsnes"; -static const unsigned bsnesSerializerVersion = 9; - -//S-DSP can be encapsulated into a state machine using #define magic -//this avoids ~2.048m co_switch() calls per second (~5% speedup) -#define DSP_STATE_MACHINE - -//game genie + pro action replay code support (~2% speed hit) -#define CHEAT_SYSTEM - -//enable debugging extensions (~15% speed hit) -//#define DEBUGGER - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -using namespace nall; - -#include "interface.hpp" diff --git a/src/chip/chip.hpp b/src/chip/chip.hpp deleted file mode 100644 index aa4b9095..00000000 --- a/src/chip/chip.hpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "supergameboy/supergameboy.hpp" -#include "superfx/superfx.hpp" -#include "sa1/sa1.hpp" -#include "bsx/bsx.hpp" -#include "srtc/srtc.hpp" -#include "sdd1/sdd1.hpp" -#include "spc7110/spc7110.hpp" -#include "cx4/cx4.hpp" -#include "dsp1/dsp1.hpp" -#include "dsp2/dsp2.hpp" -#include "dsp3/dsp3.hpp" -#include "dsp4/dsp4.hpp" -#include "obc1/obc1.hpp" -#include "st0010/st0010.hpp" -#include "st0011/st0011.hpp" -#include "st0018/st0018.hpp" -#include "msu1/msu1.hpp" diff --git a/src/dsp/adsp/adsp.hpp b/src/dsp/adsp/adsp.hpp deleted file mode 100644 index 18d1f91b..00000000 --- a/src/dsp/adsp/adsp.hpp +++ /dev/null @@ -1,174 +0,0 @@ -class aDSP : public DSP { -private: -uint8 dspram[128]; -uint8 *spcram; - -uint32 dsp_counter; - -enum { BRR_END = 1, BRR_LOOP = 2 }; - -uint8 readb (uint16 addr); -uint16 readw (uint16 addr); -void writeb(uint16 addr, uint8 data); -void writew(uint16 addr, uint16 data); - -public: -static const uint16 rate_table[32]; -static const int16 gaussian_table[512]; - -enum EnvelopeStates { - ATTACK, - DECAY, - SUSTAIN, - RELEASE, - SILENCE -}; - -enum EnvelopeModes { - DIRECT, - LINEAR_DEC, - EXP_DEC, - LINEAR_INC, - BENT_INC, - - FAST_ATTACK, - RELEASE_DEC -}; - -private: -struct Status { -//$0c,$1c - int8 MVOLL, MVOLR; -//$2c,$3c - int8 EVOLL, EVOLR; -//$4c,$5c - uint8 KON, KOFF; -//$6c - uint8 FLG; -//$7c - uint8 ENDX; -//$0d - int8 EFB; -//$2d,$3d,$4d - uint8 PMON, NON, EON; -//$5d - uint8 DIR; -//$6d,$7d - uint8 ESA, EDL; - -//$xf - int8 FIR[8]; - -//internal variables - uint8 kon, esa; - - int16 noise_ctr, noise_rate; - uint16 noise_sample; - - uint16 echo_index, echo_length; - int16 fir_buffer[2][8]; - uint8 fir_buffer_index; - -//functions - bool soft_reset() { return !!(FLG & 0x80); } - bool mute() { return !!(FLG & 0x40); } - bool echo_write() { return !(FLG & 0x20); } -} status; - -struct Voice { -//$x0-$x1 - int8 VOLL, VOLR; -//$x2-$x3 - int16 PITCH; -//$x4 - uint8 SRCN; -//$x5-$x7 - uint8 ADSR1, ADSR2, GAIN; -//$x8-$x9 - uint8 ENVX, OUTX; - -//internal variables - int16 pitch_ctr; - - int8 brr_index; - uint16 brr_ptr; - uint8 brr_header; - bool brr_looped; - - int16 brr_data[4]; - uint8 brr_data_index; - - int16 envx; - uint16 env_ctr, env_rate, env_sustain; - enum EnvelopeStates env_state; - enum EnvelopeModes env_mode; - - int16 outx; - -//functions - int16 pitch_rate() { return PITCH & 0x3fff; } - - uint8 brr_header_shift() { return brr_header >> 4; } - uint8 brr_header_filter() { return (brr_header >> 2) & 3; } - uint8 brr_header_flags() { return brr_header & 3; } - - bool ADSR_enabled() { return !!(ADSR1 & 0x80); } - uint8 ADSR_decay() { return (ADSR1 >> 4) & 7; } - uint8 ADSR_attack() { return ADSR1 & 15; } - uint8 ADSR_sus_level() { return ADSR2 >> 5; } - uint8 ADSR_sus_rate() { return ADSR2 & 31; } - - void AdjustEnvelope() { - if(env_state == SILENCE) { - env_mode = DIRECT; - env_rate = 0; - envx = 0; - } else if(env_state == RELEASE) { - env_mode = RELEASE_DEC; - env_rate = 0x7800; - } else if(ADSR_enabled()) { - switch(env_state) { - case ATTACK: - env_rate = rate_table[(ADSR_attack() << 1) + 1]; - env_mode = (env_rate == 0x7800) ? FAST_ATTACK : LINEAR_INC; - break; - case DECAY: - env_rate = rate_table[(ADSR_decay() << 1) + 0x10]; - env_mode = EXP_DEC; - break; - case SUSTAIN: - env_rate = rate_table[ADSR_sus_rate()]; - env_mode = (env_rate == 0) ? DIRECT : EXP_DEC; - break; - } - } else if(GAIN & 0x80) { - switch(GAIN & 0x60) { - case 0x00: env_mode = LINEAR_DEC; break; - case 0x20: env_mode = EXP_DEC; break; - case 0x40: env_mode = LINEAR_INC; break; - case 0x60: env_mode = BENT_INC; break; - } - env_rate = rate_table[GAIN & 0x1f]; - } else { - env_mode = DIRECT; - env_rate = 0; - envx = (GAIN & 0x7f) << 4; - } - } -} voice[8]; - -public: - void enter(); - void run(); - - uint8 read (uint8 addr); - void write(uint8 addr, uint8 data); - - void power(); - void reset(); - - aDSP(); - ~aDSP(); -}; - -extern aDSP dsp; diff --git a/src/interface.hpp b/src/interface.hpp deleted file mode 100644 index 669e713a..00000000 --- a/src/interface.hpp +++ /dev/null @@ -1,53 +0,0 @@ -#ifdef DEBUGGER - #define debugvirtual virtual -#else - #define debugvirtual -#endif - -namespace SNES { - typedef int8_t int8; - typedef int16_t int16; - typedef int32_t int32; - typedef int64_t int64; - typedef uint8_t uint8; - typedef uint16_t uint16; - typedef uint32_t uint32; - typedef uint64_t uint64; - - struct ChipDebugger { - virtual bool property(unsigned id, string &name, string &value) = 0; - }; - - #include "memory/memory.hpp" - #include "memory/smemory/smemory.hpp" - - #include "ppu/ppu.hpp" - #include "ppu/bppu/bppu.hpp" - - #include "cpu/cpu.hpp" - #include "cpu/core/core.hpp" - #include "cpu/scpu/scpu.hpp" - - #include "smp/smp.hpp" - #include "smp/core/core.hpp" - #include "smp/ssmp/ssmp.hpp" - - #include "dsp/dsp.hpp" - #include "dsp/sdsp/sdsp.hpp" - - #include "system/system.hpp" - #include "chip/chip.hpp" - #include "cartridge/cartridge.hpp" - #include "cheat/cheat.hpp" - - #include "memory/memory-inline.hpp" - #include "ppu/ppu-inline.hpp" - #include "cheat/cheat-inline.hpp" -} - -namespace nall { - template<> struct has_size { enum { value = true }; }; - template<> struct has_size { enum { value = true }; }; -} - -#undef debugvirtual diff --git a/src/snes/Makefile b/src/snes/Makefile new file mode 100644 index 00000000..a96fe5cd --- /dev/null +++ b/src/snes/Makefile @@ -0,0 +1,87 @@ +snes_objects := libco +snes_objects += snes-system +snes_objects += snes-cartridge snes-cheat +snes_objects += snes-cpu snes-cpucore snes-scpu +snes_objects += snes-smp snes-smpcore snes-ssmp +snes_objects += snes-dsp snes-sdsp snes-adsp +snes_objects += snes-ppu snes-bppu +snes_objects += snes-memory snes-smemory +snes_objects += snes-supergameboy snes-superfx snes-sa1 +snes_objects += snes-bsx snes-srtc snes-sdd1 snes-spc7110 +snes_objects += snes-cx4 snes-dsp1 snes-dsp2 snes-dsp3 snes-dsp4 +snes_objects += snes-obc1 snes-st0010 snes-st0011 snes-st0018 snes-msu1 +objects += $(snes_objects) + +# libco +obj/libco.o: lib/libco/libco.c lib/libco/* + +# system +obj/snes-system.o: snes/system/system.cpp $(call rwildcard,snes/system/) + +# cpu +obj/snes-cpu.o : snes/cpu/cpu.cpp snes/cpu/* +obj/snes-cpucore.o: snes/cpu/core/core.cpp $(call rwildcard,snes/cpu/core/) +obj/snes-scpu.o : snes/cpu/scpu/scpu.cpp $(call rwildcard,snes/cpu/scpu/) + +# smp +obj/snes-smp.o : snes/smp/smp.cpp snes/smp/* +obj/snes-smpcore.o: snes/smp/core/core.cpp $(call rwildcard,snes/smp/core/) +obj/snes-ssmp.o : snes/smp/ssmp/ssmp.cpp $(call rwildcard,snes/smp/ssmp/) + +# dsp +obj/snes-dsp.o : snes/dsp/dsp.cpp snes/dsp/* +obj/snes-sdsp.o: snes/dsp/sdsp/sdsp.cpp snes/dsp/sdsp/* +obj/snes-adsp.o: snes/dsp/adsp/adsp.cpp snes/dsp/adsp/* + +# ppu +obj/snes-ppu.o : snes/ppu/ppu.cpp snes/ppu/* +obj/snes-bppu.o: snes/ppu/bppu/bppu.cpp $(call rwildcard,snes/ppu/bppu/) + +# utilities +obj/snes-cartridge.o: snes/cartridge/cartridge.cpp snes/cartridge/* +obj/snes-cheat.o : snes/cheat/cheat.cpp snes/cheat/* + +# memory +obj/snes-memory.o : snes/memory/memory.cpp snes/memory/* +obj/snes-smemory.o: snes/memory/smemory/smemory.cpp $(call rwildcard,snes/memory/smemory/) + +# special chips +obj/snes-supergameboy.o: snes/chip/supergameboy/supergameboy.cpp $(call rwildcard,snes/chip/supergameboy/) +obj/snes-superfx.o : snes/chip/superfx/superfx.cpp $(call rwildcard,snes/chip/superfx/) +obj/snes-sa1.o : snes/chip/sa1/sa1.cpp $(call rwildcard,snes/chip/sa1/) +obj/snes-bsx.o : snes/chip/bsx/bsx.cpp snes/chip/bsx/* +obj/snes-srtc.o : snes/chip/srtc/srtc.cpp snes/chip/srtc/* +obj/snes-sdd1.o : snes/chip/sdd1/sdd1.cpp snes/chip/sdd1/* +obj/snes-spc7110.o : snes/chip/spc7110/spc7110.cpp snes/chip/spc7110/* +obj/snes-cx4.o : snes/chip/cx4/cx4.cpp snes/chip/cx4/* +obj/snes-dsp1.o : snes/chip/dsp1/dsp1.cpp snes/chip/dsp1/* +obj/snes-dsp2.o : snes/chip/dsp2/dsp2.cpp snes/chip/dsp2/* +obj/snes-dsp3.o : snes/chip/dsp3/dsp3.cpp snes/chip/dsp3/* +obj/snes-dsp4.o : snes/chip/dsp4/dsp4.cpp snes/chip/dsp4/* +obj/snes-obc1.o : snes/chip/obc1/obc1.cpp snes/chip/obc1/* +obj/snes-st0010.o : snes/chip/st0010/st0010.cpp snes/chip/st0010/* +obj/snes-st0011.o : snes/chip/st0011/st0011.cpp snes/chip/st0011/* +obj/snes-st0018.o : snes/chip/st0018/st0018.cpp snes/chip/st0018/* +obj/snes-msu1.o : snes/chip/msu1/msu1.cpp snes/chip/msu1/* + +# library +snes_objects := $(patsubst %,obj/%.o,$(snes_objects)) +library: $(snes_objects) +ifeq ($(platform),x) + ar rcs obj/libsnes.a $(snes_objects) + $(cpp) -o obj/libsnes.so -shared -Wl,-soname,libsnes.so.1 $(snes_objects) +else ifeq ($(platform),osx) + ar rcs obj/libsnes.a $(snes_objects) + $(cpp) -o obj/libsnes.dylib -shared -dynamiclib $(snes_objects) +else ifeq ($(platform),win) + $(cpp) -o obj/snes.dll -shared -Wl,--out-implib,libsnes.a $(snes_objects) +endif + +install-library: +ifeq ($(platform),x) + install -D -m 755 obj/libsnes.a $(DESTDIR)$(prefix)/lib + install -D -m 755 obj/libsnes.so $(DESTDIR)$(prefix)/lib + ldconfig -n $(DESTDIR)$(prefix)/lib +else ifeq ($(platform),osx) + cp obj/libsnes.dylib /usr/local/lib/libsnes.dylib +endif diff --git a/src/system/audio/audio.cpp b/src/snes/audio/audio.cpp similarity index 100% rename from src/system/audio/audio.cpp rename to src/snes/audio/audio.cpp diff --git a/src/system/audio/audio.hpp b/src/snes/audio/audio.hpp similarity index 100% rename from src/system/audio/audio.hpp rename to src/snes/audio/audio.hpp diff --git a/src/cartridge/cartridge.cpp b/src/snes/cartridge/cartridge.cpp similarity index 99% rename from src/cartridge/cartridge.cpp rename to src/snes/cartridge/cartridge.cpp index a424afad..f3f58bd9 100644 --- a/src/cartridge/cartridge.cpp +++ b/src/snes/cartridge/cartridge.cpp @@ -1,4 +1,5 @@ -#include <../base.hpp> +#include + #include #include diff --git a/src/cartridge/cartridge.hpp b/src/snes/cartridge/cartridge.hpp similarity index 100% rename from src/cartridge/cartridge.hpp rename to src/snes/cartridge/cartridge.hpp diff --git a/src/cartridge/serialization.cpp b/src/snes/cartridge/serialization.cpp similarity index 100% rename from src/cartridge/serialization.cpp rename to src/snes/cartridge/serialization.cpp diff --git a/src/cartridge/xml.cpp b/src/snes/cartridge/xml.cpp similarity index 100% rename from src/cartridge/xml.cpp rename to src/snes/cartridge/xml.cpp diff --git a/src/cheat/cheat-inline.hpp b/src/snes/cheat/cheat-inline.hpp similarity index 100% rename from src/cheat/cheat-inline.hpp rename to src/snes/cheat/cheat-inline.hpp diff --git a/src/cheat/cheat.cpp b/src/snes/cheat/cheat.cpp similarity index 99% rename from src/cheat/cheat.cpp rename to src/snes/cheat/cheat.cpp index 1b25f597..65e99f8f 100644 --- a/src/cheat/cheat.cpp +++ b/src/snes/cheat/cheat.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define CHEAT_CPP namespace SNES { diff --git a/src/cheat/cheat.hpp b/src/snes/cheat/cheat.hpp similarity index 100% rename from src/cheat/cheat.hpp rename to src/snes/cheat/cheat.hpp diff --git a/src/chip/bsx/bsx.cpp b/src/snes/chip/bsx/bsx.cpp similarity index 81% rename from src/chip/bsx/bsx.cpp rename to src/snes/chip/bsx/bsx.cpp index 723911c7..01518a13 100644 --- a/src/chip/bsx/bsx.cpp +++ b/src/snes/chip/bsx/bsx.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define BSX_CPP namespace SNES { @@ -6,5 +6,5 @@ namespace SNES { #include "bsx_base.cpp" #include "bsx_cart.cpp" #include "bsx_flash.cpp" -}; +}; diff --git a/src/chip/bsx/bsx.hpp b/src/snes/chip/bsx/bsx.hpp similarity index 100% rename from src/chip/bsx/bsx.hpp rename to src/snes/chip/bsx/bsx.hpp diff --git a/src/chip/bsx/bsx_base.cpp b/src/snes/chip/bsx/bsx_base.cpp similarity index 100% rename from src/chip/bsx/bsx_base.cpp rename to src/snes/chip/bsx/bsx_base.cpp diff --git a/src/chip/bsx/bsx_cart.cpp b/src/snes/chip/bsx/bsx_cart.cpp similarity index 100% rename from src/chip/bsx/bsx_cart.cpp rename to src/snes/chip/bsx/bsx_cart.cpp diff --git a/src/chip/bsx/bsx_flash.cpp b/src/snes/chip/bsx/bsx_flash.cpp similarity index 100% rename from src/chip/bsx/bsx_flash.cpp rename to src/snes/chip/bsx/bsx_flash.cpp diff --git a/src/snes/chip/chip.hpp b/src/snes/chip/chip.hpp new file mode 100644 index 00000000..ee65bf43 --- /dev/null +++ b/src/snes/chip/chip.hpp @@ -0,0 +1,17 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/src/chip/cx4/cx4.cpp b/src/snes/chip/cx4/cx4.cpp similarity index 99% rename from src/chip/cx4/cx4.cpp rename to src/snes/chip/cx4/cx4.cpp index 1ea422b7..787378ba 100644 --- a/src/chip/cx4/cx4.cpp +++ b/src/snes/chip/cx4/cx4.cpp @@ -4,7 +4,7 @@ //Used in Rockman X2/X3 (Megaman X2/X3) //Portions (c) anomie, Overload, zsKnight, Nach, byuu -#include <../base.hpp> +#include #define CX4_CPP namespace SNES { diff --git a/src/chip/cx4/cx4.hpp b/src/snes/chip/cx4/cx4.hpp similarity index 100% rename from src/chip/cx4/cx4.hpp rename to src/snes/chip/cx4/cx4.hpp diff --git a/src/chip/cx4/data.cpp b/src/snes/chip/cx4/data.cpp similarity index 100% rename from src/chip/cx4/data.cpp rename to src/snes/chip/cx4/data.cpp diff --git a/src/chip/cx4/functions.cpp b/src/snes/chip/cx4/functions.cpp similarity index 100% rename from src/chip/cx4/functions.cpp rename to src/snes/chip/cx4/functions.cpp diff --git a/src/chip/cx4/oam.cpp b/src/snes/chip/cx4/oam.cpp similarity index 100% rename from src/chip/cx4/oam.cpp rename to src/snes/chip/cx4/oam.cpp diff --git a/src/chip/cx4/opcodes.cpp b/src/snes/chip/cx4/opcodes.cpp similarity index 100% rename from src/chip/cx4/opcodes.cpp rename to src/snes/chip/cx4/opcodes.cpp diff --git a/src/chip/cx4/serialization.cpp b/src/snes/chip/cx4/serialization.cpp similarity index 100% rename from src/chip/cx4/serialization.cpp rename to src/snes/chip/cx4/serialization.cpp diff --git a/src/chip/dsp1/dsp1.cpp b/src/snes/chip/dsp1/dsp1.cpp similarity index 95% rename from src/chip/dsp1/dsp1.cpp rename to src/snes/chip/dsp1/dsp1.cpp index 00d2d684..3e8679cc 100644 --- a/src/chip/dsp1/dsp1.cpp +++ b/src/snes/chip/dsp1/dsp1.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define DSP1_CPP namespace SNES { diff --git a/src/chip/dsp1/dsp1.hpp b/src/snes/chip/dsp1/dsp1.hpp similarity index 100% rename from src/chip/dsp1/dsp1.hpp rename to src/snes/chip/dsp1/dsp1.hpp diff --git a/src/chip/dsp1/dsp1emu.cpp b/src/snes/chip/dsp1/dsp1emu.cpp similarity index 100% rename from src/chip/dsp1/dsp1emu.cpp rename to src/snes/chip/dsp1/dsp1emu.cpp diff --git a/src/chip/dsp1/dsp1emu.hpp b/src/snes/chip/dsp1/dsp1emu.hpp similarity index 100% rename from src/chip/dsp1/dsp1emu.hpp rename to src/snes/chip/dsp1/dsp1emu.hpp diff --git a/src/chip/dsp1/serialization.cpp b/src/snes/chip/dsp1/serialization.cpp similarity index 100% rename from src/chip/dsp1/serialization.cpp rename to src/snes/chip/dsp1/serialization.cpp diff --git a/src/chip/dsp2/dsp2.cpp b/src/snes/chip/dsp2/dsp2.cpp similarity index 99% rename from src/chip/dsp2/dsp2.cpp rename to src/snes/chip/dsp2/dsp2.cpp index bf64f2b5..2a8ba14d 100644 --- a/src/chip/dsp2/dsp2.cpp +++ b/src/snes/chip/dsp2/dsp2.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define DSP2_CPP namespace SNES { diff --git a/src/chip/dsp2/dsp2.hpp b/src/snes/chip/dsp2/dsp2.hpp similarity index 100% rename from src/chip/dsp2/dsp2.hpp rename to src/snes/chip/dsp2/dsp2.hpp diff --git a/src/chip/dsp2/opcodes.cpp b/src/snes/chip/dsp2/opcodes.cpp similarity index 100% rename from src/chip/dsp2/opcodes.cpp rename to src/snes/chip/dsp2/opcodes.cpp diff --git a/src/chip/dsp2/serialization.cpp b/src/snes/chip/dsp2/serialization.cpp similarity index 100% rename from src/chip/dsp2/serialization.cpp rename to src/snes/chip/dsp2/serialization.cpp diff --git a/src/chip/dsp3/dsp3.cpp b/src/snes/chip/dsp3/dsp3.cpp similarity index 95% rename from src/chip/dsp3/dsp3.cpp rename to src/snes/chip/dsp3/dsp3.cpp index a337cf9e..0ec3c32c 100644 --- a/src/chip/dsp3/dsp3.cpp +++ b/src/snes/chip/dsp3/dsp3.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define DSP3_CPP namespace SNES { @@ -37,4 +37,4 @@ void DSP3::write(unsigned addr, uint8 data) { DSP3i::DSP3SetByte(); } -}; +} diff --git a/src/chip/dsp3/dsp3.hpp b/src/snes/chip/dsp3/dsp3.hpp similarity index 100% rename from src/chip/dsp3/dsp3.hpp rename to src/snes/chip/dsp3/dsp3.hpp diff --git a/src/chip/dsp3/dsp3emu.c b/src/snes/chip/dsp3/dsp3emu.c similarity index 100% rename from src/chip/dsp3/dsp3emu.c rename to src/snes/chip/dsp3/dsp3emu.c diff --git a/src/chip/dsp4/dsp4.cpp b/src/snes/chip/dsp4/dsp4.cpp similarity index 97% rename from src/chip/dsp4/dsp4.cpp rename to src/snes/chip/dsp4/dsp4.cpp index bb24f839..84635eca 100644 --- a/src/chip/dsp4/dsp4.cpp +++ b/src/snes/chip/dsp4/dsp4.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define DSP4_CPP namespace SNES { @@ -57,4 +57,4 @@ void DSP4::write(unsigned addr, uint8 data) { } } -}; +} diff --git a/src/chip/dsp4/dsp4.hpp b/src/snes/chip/dsp4/dsp4.hpp similarity index 100% rename from src/chip/dsp4/dsp4.hpp rename to src/snes/chip/dsp4/dsp4.hpp diff --git a/src/chip/dsp4/dsp4emu.c b/src/snes/chip/dsp4/dsp4emu.c similarity index 100% rename from src/chip/dsp4/dsp4emu.c rename to src/snes/chip/dsp4/dsp4emu.c diff --git a/src/chip/dsp4/dsp4emu.h b/src/snes/chip/dsp4/dsp4emu.h similarity index 100% rename from src/chip/dsp4/dsp4emu.h rename to src/snes/chip/dsp4/dsp4emu.h diff --git a/src/chip/msu1/msu1.cpp b/src/snes/chip/msu1/msu1.cpp similarity index 99% rename from src/chip/msu1/msu1.cpp rename to src/snes/chip/msu1/msu1.cpp index dcc95ac2..a220e3d8 100644 --- a/src/chip/msu1/msu1.cpp +++ b/src/snes/chip/msu1/msu1.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define MSU1_CPP namespace SNES { diff --git a/src/chip/msu1/msu1.hpp b/src/snes/chip/msu1/msu1.hpp similarity index 100% rename from src/chip/msu1/msu1.hpp rename to src/snes/chip/msu1/msu1.hpp diff --git a/src/chip/msu1/serialization.cpp b/src/snes/chip/msu1/serialization.cpp similarity index 100% rename from src/chip/msu1/serialization.cpp rename to src/snes/chip/msu1/serialization.cpp diff --git a/src/chip/obc1/obc1.cpp b/src/snes/chip/obc1/obc1.cpp similarity index 98% rename from src/chip/obc1/obc1.cpp rename to src/snes/chip/obc1/obc1.cpp index ff53be61..52770941 100644 --- a/src/chip/obc1/obc1.cpp +++ b/src/snes/chip/obc1/obc1.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define OBC1_CPP namespace SNES { @@ -79,4 +79,4 @@ void OBC1::ram_write(unsigned addr, uint8 data) { OBC1::OBC1() {} OBC1::~OBC1() {} -}; +} diff --git a/src/chip/obc1/obc1.hpp b/src/snes/chip/obc1/obc1.hpp similarity index 100% rename from src/chip/obc1/obc1.hpp rename to src/snes/chip/obc1/obc1.hpp diff --git a/src/chip/obc1/serialization.cpp b/src/snes/chip/obc1/serialization.cpp similarity index 100% rename from src/chip/obc1/serialization.cpp rename to src/snes/chip/obc1/serialization.cpp diff --git a/src/chip/sa1/bus/bus.cpp b/src/snes/chip/sa1/bus/bus.cpp similarity index 100% rename from src/chip/sa1/bus/bus.cpp rename to src/snes/chip/sa1/bus/bus.cpp diff --git a/src/chip/sa1/bus/bus.hpp b/src/snes/chip/sa1/bus/bus.hpp similarity index 100% rename from src/chip/sa1/bus/bus.hpp rename to src/snes/chip/sa1/bus/bus.hpp diff --git a/src/chip/sa1/dma/dma.cpp b/src/snes/chip/sa1/dma/dma.cpp similarity index 100% rename from src/chip/sa1/dma/dma.cpp rename to src/snes/chip/sa1/dma/dma.cpp diff --git a/src/chip/sa1/dma/dma.hpp b/src/snes/chip/sa1/dma/dma.hpp similarity index 100% rename from src/chip/sa1/dma/dma.hpp rename to src/snes/chip/sa1/dma/dma.hpp diff --git a/src/chip/sa1/memory/memory.cpp b/src/snes/chip/sa1/memory/memory.cpp similarity index 100% rename from src/chip/sa1/memory/memory.cpp rename to src/snes/chip/sa1/memory/memory.cpp diff --git a/src/chip/sa1/memory/memory.hpp b/src/snes/chip/sa1/memory/memory.hpp similarity index 100% rename from src/chip/sa1/memory/memory.hpp rename to src/snes/chip/sa1/memory/memory.hpp diff --git a/src/chip/sa1/mmio/mmio.cpp b/src/snes/chip/sa1/mmio/mmio.cpp similarity index 100% rename from src/chip/sa1/mmio/mmio.cpp rename to src/snes/chip/sa1/mmio/mmio.cpp diff --git a/src/chip/sa1/mmio/mmio.hpp b/src/snes/chip/sa1/mmio/mmio.hpp similarity index 100% rename from src/chip/sa1/mmio/mmio.hpp rename to src/snes/chip/sa1/mmio/mmio.hpp diff --git a/src/chip/sa1/sa1.cpp b/src/snes/chip/sa1/sa1.cpp similarity index 99% rename from src/chip/sa1/sa1.cpp rename to src/snes/chip/sa1/sa1.cpp index e9321e9d..cdb76b47 100644 --- a/src/chip/sa1/sa1.cpp +++ b/src/snes/chip/sa1/sa1.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define SA1_CPP namespace SNES { @@ -323,4 +323,4 @@ void SA1::reset() { SA1::SA1() { } -}; +} diff --git a/src/chip/sa1/sa1.hpp b/src/snes/chip/sa1/sa1.hpp similarity index 100% rename from src/chip/sa1/sa1.hpp rename to src/snes/chip/sa1/sa1.hpp diff --git a/src/chip/sa1/serialization.cpp b/src/snes/chip/sa1/serialization.cpp similarity index 100% rename from src/chip/sa1/serialization.cpp rename to src/snes/chip/sa1/serialization.cpp diff --git a/src/chip/sdd1/sdd1.cpp b/src/snes/chip/sdd1/sdd1.cpp similarity index 99% rename from src/chip/sdd1/sdd1.cpp rename to src/snes/chip/sdd1/sdd1.cpp index e3f48943..6a798547 100644 --- a/src/chip/sdd1/sdd1.cpp +++ b/src/snes/chip/sdd1/sdd1.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define SDD1_CPP namespace SNES { @@ -151,4 +151,4 @@ SDD1::SDD1() { SDD1::~SDD1() { } -}; +} diff --git a/src/chip/sdd1/sdd1.hpp b/src/snes/chip/sdd1/sdd1.hpp similarity index 100% rename from src/chip/sdd1/sdd1.hpp rename to src/snes/chip/sdd1/sdd1.hpp diff --git a/src/chip/sdd1/sdd1emu.cpp b/src/snes/chip/sdd1/sdd1emu.cpp similarity index 100% rename from src/chip/sdd1/sdd1emu.cpp rename to src/snes/chip/sdd1/sdd1emu.cpp diff --git a/src/chip/sdd1/sdd1emu.hpp b/src/snes/chip/sdd1/sdd1emu.hpp similarity index 100% rename from src/chip/sdd1/sdd1emu.hpp rename to src/snes/chip/sdd1/sdd1emu.hpp diff --git a/src/chip/sdd1/serialization.cpp b/src/snes/chip/sdd1/serialization.cpp similarity index 100% rename from src/chip/sdd1/serialization.cpp rename to src/snes/chip/sdd1/serialization.cpp diff --git a/src/chip/spc7110/decomp.cpp b/src/snes/chip/spc7110/decomp.cpp similarity index 100% rename from src/chip/spc7110/decomp.cpp rename to src/snes/chip/spc7110/decomp.cpp diff --git a/src/chip/spc7110/decomp.hpp b/src/snes/chip/spc7110/decomp.hpp similarity index 100% rename from src/chip/spc7110/decomp.hpp rename to src/snes/chip/spc7110/decomp.hpp diff --git a/src/chip/spc7110/serialization.cpp b/src/snes/chip/spc7110/serialization.cpp similarity index 100% rename from src/chip/spc7110/serialization.cpp rename to src/snes/chip/spc7110/serialization.cpp diff --git a/src/chip/spc7110/spc7110.cpp b/src/snes/chip/spc7110/spc7110.cpp similarity index 99% rename from src/chip/spc7110/spc7110.cpp rename to src/snes/chip/spc7110/spc7110.cpp index 54935077..172731e2 100644 --- a/src/chip/spc7110/spc7110.cpp +++ b/src/snes/chip/spc7110/spc7110.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define SPC7110_CPP namespace SNES { @@ -679,4 +679,4 @@ void SPC7110RAM::write(unsigned addr, uint8 data) { if(spc7110.r4830 & 0x80) memory::cartram.write(addr & 0x1fff, data); } -}; +} diff --git a/src/chip/spc7110/spc7110.hpp b/src/snes/chip/spc7110/spc7110.hpp similarity index 100% rename from src/chip/spc7110/spc7110.hpp rename to src/snes/chip/spc7110/spc7110.hpp diff --git a/src/chip/srtc/serialization.cpp b/src/snes/chip/srtc/serialization.cpp similarity index 100% rename from src/chip/srtc/serialization.cpp rename to src/snes/chip/srtc/serialization.cpp diff --git a/src/chip/srtc/srtc.cpp b/src/snes/chip/srtc/srtc.cpp similarity index 99% rename from src/chip/srtc/srtc.cpp rename to src/snes/chip/srtc/srtc.cpp index fe4668f4..8c8e08e1 100644 --- a/src/chip/srtc/srtc.cpp +++ b/src/snes/chip/srtc/srtc.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define SRTC_CPP namespace SNES { @@ -228,4 +228,4 @@ void SRTC::mmio_write(unsigned addr, uint8 data) { SRTC::SRTC() { } -}; +} diff --git a/src/chip/srtc/srtc.hpp b/src/snes/chip/srtc/srtc.hpp similarity index 100% rename from src/chip/srtc/srtc.hpp rename to src/snes/chip/srtc/srtc.hpp diff --git a/src/chip/st0010/data.hpp b/src/snes/chip/st0010/data.hpp similarity index 100% rename from src/chip/st0010/data.hpp rename to src/snes/chip/st0010/data.hpp diff --git a/src/chip/st0010/opcodes.cpp b/src/snes/chip/st0010/opcodes.cpp similarity index 100% rename from src/chip/st0010/opcodes.cpp rename to src/snes/chip/st0010/opcodes.cpp diff --git a/src/chip/st0010/serialization.cpp b/src/snes/chip/st0010/serialization.cpp similarity index 100% rename from src/chip/st0010/serialization.cpp rename to src/snes/chip/st0010/serialization.cpp diff --git a/src/chip/st0010/st0010.cpp b/src/snes/chip/st0010/st0010.cpp similarity index 98% rename from src/chip/st0010/st0010.cpp rename to src/snes/chip/st0010/st0010.cpp index 4519886b..5331af65 100644 --- a/src/chip/st0010/st0010.cpp +++ b/src/snes/chip/st0010/st0010.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define ST0010_CPP namespace SNES { @@ -90,4 +90,4 @@ void ST0010::write(unsigned addr, uint8 data) { } } -}; +} diff --git a/src/chip/st0010/st0010.hpp b/src/snes/chip/st0010/st0010.hpp similarity index 100% rename from src/chip/st0010/st0010.hpp rename to src/snes/chip/st0010/st0010.hpp diff --git a/src/chip/st0011/st0011.cpp b/src/snes/chip/st0011/st0011.cpp similarity index 85% rename from src/chip/st0011/st0011.cpp rename to src/snes/chip/st0011/st0011.cpp index 8a83d82f..646e3424 100644 --- a/src/chip/st0011/st0011.cpp +++ b/src/snes/chip/st0011/st0011.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define ST0011_CPP namespace SNES { @@ -17,4 +17,4 @@ void ST0011::power() { void ST0011::reset() { } -}; +} diff --git a/src/chip/st0011/st0011.hpp b/src/snes/chip/st0011/st0011.hpp similarity index 100% rename from src/chip/st0011/st0011.hpp rename to src/snes/chip/st0011/st0011.hpp diff --git a/src/chip/st0018/st0018.cpp b/src/snes/chip/st0018/st0018.cpp similarity index 98% rename from src/chip/st0018/st0018.cpp rename to src/snes/chip/st0018/st0018.cpp index 9ce7872c..367f09ab 100644 --- a/src/chip/st0018/st0018.cpp +++ b/src/snes/chip/st0018/st0018.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define ST0018_CPP namespace SNES { @@ -120,4 +120,4 @@ void ST0018::op_query_chip() { regs.r3800 = 0x00; } -}; +} diff --git a/src/chip/st0018/st0018.hpp b/src/snes/chip/st0018/st0018.hpp similarity index 100% rename from src/chip/st0018/st0018.hpp rename to src/snes/chip/st0018/st0018.hpp diff --git a/src/chip/superfx/bus/bus.cpp b/src/snes/chip/superfx/bus/bus.cpp similarity index 100% rename from src/chip/superfx/bus/bus.cpp rename to src/snes/chip/superfx/bus/bus.cpp diff --git a/src/chip/superfx/bus/bus.hpp b/src/snes/chip/superfx/bus/bus.hpp similarity index 100% rename from src/chip/superfx/bus/bus.hpp rename to src/snes/chip/superfx/bus/bus.hpp diff --git a/src/chip/superfx/core/core.cpp b/src/snes/chip/superfx/core/core.cpp similarity index 100% rename from src/chip/superfx/core/core.cpp rename to src/snes/chip/superfx/core/core.cpp diff --git a/src/chip/superfx/core/core.hpp b/src/snes/chip/superfx/core/core.hpp similarity index 100% rename from src/chip/superfx/core/core.hpp rename to src/snes/chip/superfx/core/core.hpp diff --git a/src/chip/superfx/core/opcode_table.cpp b/src/snes/chip/superfx/core/opcode_table.cpp similarity index 100% rename from src/chip/superfx/core/opcode_table.cpp rename to src/snes/chip/superfx/core/opcode_table.cpp diff --git a/src/chip/superfx/core/opcodes.cpp b/src/snes/chip/superfx/core/opcodes.cpp similarity index 100% rename from src/chip/superfx/core/opcodes.cpp rename to src/snes/chip/superfx/core/opcodes.cpp diff --git a/src/chip/superfx/core/registers.hpp b/src/snes/chip/superfx/core/registers.hpp similarity index 100% rename from src/chip/superfx/core/registers.hpp rename to src/snes/chip/superfx/core/registers.hpp diff --git a/src/chip/superfx/disasm/disasm.cpp b/src/snes/chip/superfx/disasm/disasm.cpp similarity index 100% rename from src/chip/superfx/disasm/disasm.cpp rename to src/snes/chip/superfx/disasm/disasm.cpp diff --git a/src/chip/superfx/disasm/disasm.hpp b/src/snes/chip/superfx/disasm/disasm.hpp similarity index 100% rename from src/chip/superfx/disasm/disasm.hpp rename to src/snes/chip/superfx/disasm/disasm.hpp diff --git a/src/chip/superfx/memory/memory.cpp b/src/snes/chip/superfx/memory/memory.cpp similarity index 100% rename from src/chip/superfx/memory/memory.cpp rename to src/snes/chip/superfx/memory/memory.cpp diff --git a/src/chip/superfx/memory/memory.hpp b/src/snes/chip/superfx/memory/memory.hpp similarity index 100% rename from src/chip/superfx/memory/memory.hpp rename to src/snes/chip/superfx/memory/memory.hpp diff --git a/src/chip/superfx/mmio/mmio.cpp b/src/snes/chip/superfx/mmio/mmio.cpp similarity index 100% rename from src/chip/superfx/mmio/mmio.cpp rename to src/snes/chip/superfx/mmio/mmio.cpp diff --git a/src/chip/superfx/mmio/mmio.hpp b/src/snes/chip/superfx/mmio/mmio.hpp similarity index 100% rename from src/chip/superfx/mmio/mmio.hpp rename to src/snes/chip/superfx/mmio/mmio.hpp diff --git a/src/chip/superfx/serialization.cpp b/src/snes/chip/superfx/serialization.cpp similarity index 100% rename from src/chip/superfx/serialization.cpp rename to src/snes/chip/superfx/serialization.cpp diff --git a/src/chip/superfx/superfx.cpp b/src/snes/chip/superfx/superfx.cpp similarity index 98% rename from src/chip/superfx/superfx.cpp rename to src/snes/chip/superfx/superfx.cpp index 7971fcee..4ffad73c 100644 --- a/src/chip/superfx/superfx.cpp +++ b/src/snes/chip/superfx/superfx.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define SUPERFX_CPP namespace SNES { diff --git a/src/chip/superfx/superfx.hpp b/src/snes/chip/superfx/superfx.hpp similarity index 100% rename from src/chip/superfx/superfx.hpp rename to src/snes/chip/superfx/superfx.hpp diff --git a/src/chip/superfx/timing/timing.cpp b/src/snes/chip/superfx/timing/timing.cpp similarity index 100% rename from src/chip/superfx/timing/timing.cpp rename to src/snes/chip/superfx/timing/timing.cpp diff --git a/src/chip/superfx/timing/timing.hpp b/src/snes/chip/superfx/timing/timing.hpp similarity index 100% rename from src/chip/superfx/timing/timing.hpp rename to src/snes/chip/superfx/timing/timing.hpp diff --git a/src/chip/supergameboy/serialization.cpp b/src/snes/chip/supergameboy/serialization.cpp similarity index 100% rename from src/chip/supergameboy/serialization.cpp rename to src/snes/chip/supergameboy/serialization.cpp diff --git a/src/chip/supergameboy/supergameboy.cpp b/src/snes/chip/supergameboy/supergameboy.cpp similarity index 99% rename from src/chip/supergameboy/supergameboy.cpp rename to src/snes/chip/supergameboy/supergameboy.cpp index 19eba1f3..c855c875 100644 --- a/src/chip/supergameboy/supergameboy.cpp +++ b/src/snes/chip/supergameboy/supergameboy.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define SUPERGAMEBOY_CPP namespace SNES { diff --git a/src/chip/supergameboy/supergameboy.hpp b/src/snes/chip/supergameboy/supergameboy.hpp similarity index 100% rename from src/chip/supergameboy/supergameboy.hpp rename to src/snes/chip/supergameboy/supergameboy.hpp diff --git a/src/system/config/config.cpp b/src/snes/config/config.cpp similarity index 100% rename from src/system/config/config.cpp rename to src/snes/config/config.cpp diff --git a/src/system/config/config.hpp b/src/snes/config/config.hpp similarity index 100% rename from src/system/config/config.hpp rename to src/snes/config/config.hpp diff --git a/src/cpu/core/algorithms.cpp b/src/snes/cpu/core/algorithms.cpp similarity index 100% rename from src/cpu/core/algorithms.cpp rename to src/snes/cpu/core/algorithms.cpp diff --git a/src/cpu/core/core.cpp b/src/snes/cpu/core/core.cpp similarity index 98% rename from src/cpu/core/core.cpp rename to src/snes/cpu/core/core.cpp index d38cbae2..bce1ca29 100644 --- a/src/cpu/core/core.cpp +++ b/src/snes/cpu/core/core.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define CPUCORE_CPP namespace SNES { @@ -71,4 +71,4 @@ CPUcore::CPUcore() { initialize_opcode_table(); } -}; +} diff --git a/src/cpu/core/core.hpp b/src/snes/cpu/core/core.hpp similarity index 100% rename from src/cpu/core/core.hpp rename to src/snes/cpu/core/core.hpp diff --git a/src/cpu/core/disassembler/disassembler.cpp b/src/snes/cpu/core/disassembler/disassembler.cpp similarity index 100% rename from src/cpu/core/disassembler/disassembler.cpp rename to src/snes/cpu/core/disassembler/disassembler.cpp diff --git a/src/cpu/core/disassembler/disassembler.hpp b/src/snes/cpu/core/disassembler/disassembler.hpp similarity index 100% rename from src/cpu/core/disassembler/disassembler.hpp rename to src/snes/cpu/core/disassembler/disassembler.hpp diff --git a/src/cpu/core/memory.hpp b/src/snes/cpu/core/memory.hpp similarity index 100% rename from src/cpu/core/memory.hpp rename to src/snes/cpu/core/memory.hpp diff --git a/src/cpu/core/opcode_misc.cpp b/src/snes/cpu/core/opcode_misc.cpp similarity index 100% rename from src/cpu/core/opcode_misc.cpp rename to src/snes/cpu/core/opcode_misc.cpp diff --git a/src/cpu/core/opcode_pc.cpp b/src/snes/cpu/core/opcode_pc.cpp similarity index 100% rename from src/cpu/core/opcode_pc.cpp rename to src/snes/cpu/core/opcode_pc.cpp diff --git a/src/cpu/core/opcode_read.cpp b/src/snes/cpu/core/opcode_read.cpp similarity index 100% rename from src/cpu/core/opcode_read.cpp rename to src/snes/cpu/core/opcode_read.cpp diff --git a/src/cpu/core/opcode_rmw.cpp b/src/snes/cpu/core/opcode_rmw.cpp similarity index 100% rename from src/cpu/core/opcode_rmw.cpp rename to src/snes/cpu/core/opcode_rmw.cpp diff --git a/src/cpu/core/opcode_write.cpp b/src/snes/cpu/core/opcode_write.cpp similarity index 100% rename from src/cpu/core/opcode_write.cpp rename to src/snes/cpu/core/opcode_write.cpp diff --git a/src/cpu/core/registers.hpp b/src/snes/cpu/core/registers.hpp similarity index 100% rename from src/cpu/core/registers.hpp rename to src/snes/cpu/core/registers.hpp diff --git a/src/cpu/core/serialization.cpp b/src/snes/cpu/core/serialization.cpp similarity index 100% rename from src/cpu/core/serialization.cpp rename to src/snes/cpu/core/serialization.cpp diff --git a/src/cpu/core/table.cpp b/src/snes/cpu/core/table.cpp similarity index 100% rename from src/cpu/core/table.cpp rename to src/snes/cpu/core/table.cpp diff --git a/src/cpu/cpu-debugger.cpp b/src/snes/cpu/cpu-debugger.cpp similarity index 100% rename from src/cpu/cpu-debugger.cpp rename to src/snes/cpu/cpu-debugger.cpp diff --git a/src/cpu/cpu-debugger.hpp b/src/snes/cpu/cpu-debugger.hpp similarity index 100% rename from src/cpu/cpu-debugger.hpp rename to src/snes/cpu/cpu-debugger.hpp diff --git a/src/cpu/cpu.cpp b/src/snes/cpu/cpu.cpp similarity index 92% rename from src/cpu/cpu.cpp rename to src/snes/cpu/cpu.cpp index df02d313..4323a66b 100644 --- a/src/cpu/cpu.cpp +++ b/src/snes/cpu/cpu.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define CPU_CPP namespace SNES { @@ -26,4 +26,4 @@ CPU::CPU() { CPU::~CPU() { } -}; +} diff --git a/src/cpu/cpu.hpp b/src/snes/cpu/cpu.hpp similarity index 100% rename from src/cpu/cpu.hpp rename to src/snes/cpu/cpu.hpp diff --git a/src/cpu/scpu/debugger/debugger.cpp b/src/snes/cpu/scpu/debugger/debugger.cpp similarity index 100% rename from src/cpu/scpu/debugger/debugger.cpp rename to src/snes/cpu/scpu/debugger/debugger.cpp diff --git a/src/cpu/scpu/debugger/debugger.hpp b/src/snes/cpu/scpu/debugger/debugger.hpp similarity index 100% rename from src/cpu/scpu/debugger/debugger.hpp rename to src/snes/cpu/scpu/debugger/debugger.hpp diff --git a/src/cpu/scpu/dma/dma.cpp b/src/snes/cpu/scpu/dma/dma.cpp similarity index 100% rename from src/cpu/scpu/dma/dma.cpp rename to src/snes/cpu/scpu/dma/dma.cpp diff --git a/src/cpu/scpu/dma/dma.hpp b/src/snes/cpu/scpu/dma/dma.hpp similarity index 100% rename from src/cpu/scpu/dma/dma.hpp rename to src/snes/cpu/scpu/dma/dma.hpp diff --git a/src/cpu/scpu/memory/memory.cpp b/src/snes/cpu/scpu/memory/memory.cpp similarity index 100% rename from src/cpu/scpu/memory/memory.cpp rename to src/snes/cpu/scpu/memory/memory.cpp diff --git a/src/cpu/scpu/memory/memory.hpp b/src/snes/cpu/scpu/memory/memory.hpp similarity index 100% rename from src/cpu/scpu/memory/memory.hpp rename to src/snes/cpu/scpu/memory/memory.hpp diff --git a/src/cpu/scpu/mmio/mmio.cpp b/src/snes/cpu/scpu/mmio/mmio.cpp similarity index 100% rename from src/cpu/scpu/mmio/mmio.cpp rename to src/snes/cpu/scpu/mmio/mmio.cpp diff --git a/src/cpu/scpu/mmio/mmio.hpp b/src/snes/cpu/scpu/mmio/mmio.hpp similarity index 100% rename from src/cpu/scpu/mmio/mmio.hpp rename to src/snes/cpu/scpu/mmio/mmio.hpp diff --git a/src/cpu/scpu/scpu.cpp b/src/snes/cpu/scpu/scpu.cpp similarity index 98% rename from src/cpu/scpu/scpu.cpp rename to src/snes/cpu/scpu/scpu.cpp index 6dddc340..22d58477 100644 --- a/src/cpu/scpu/scpu.cpp +++ b/src/snes/cpu/scpu/scpu.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define SCPU_CPP namespace SNES { @@ -110,4 +110,4 @@ sCPU::sCPU() : event(512, bind(&sCPU::queue_event, this)) { sCPU::~sCPU() { } -}; +} diff --git a/src/cpu/scpu/scpu.hpp b/src/snes/cpu/scpu/scpu.hpp similarity index 100% rename from src/cpu/scpu/scpu.hpp rename to src/snes/cpu/scpu/scpu.hpp diff --git a/src/cpu/scpu/serialization.cpp b/src/snes/cpu/scpu/serialization.cpp similarity index 100% rename from src/cpu/scpu/serialization.cpp rename to src/snes/cpu/scpu/serialization.cpp diff --git a/src/cpu/scpu/timing/event.cpp b/src/snes/cpu/scpu/timing/event.cpp similarity index 100% rename from src/cpu/scpu/timing/event.cpp rename to src/snes/cpu/scpu/timing/event.cpp diff --git a/src/cpu/scpu/timing/irq.cpp b/src/snes/cpu/scpu/timing/irq.cpp similarity index 100% rename from src/cpu/scpu/timing/irq.cpp rename to src/snes/cpu/scpu/timing/irq.cpp diff --git a/src/cpu/scpu/timing/joypad.cpp b/src/snes/cpu/scpu/timing/joypad.cpp similarity index 100% rename from src/cpu/scpu/timing/joypad.cpp rename to src/snes/cpu/scpu/timing/joypad.cpp diff --git a/src/cpu/scpu/timing/timing.cpp b/src/snes/cpu/scpu/timing/timing.cpp similarity index 100% rename from src/cpu/scpu/timing/timing.cpp rename to src/snes/cpu/scpu/timing/timing.cpp diff --git a/src/cpu/scpu/timing/timing.hpp b/src/snes/cpu/scpu/timing/timing.hpp similarity index 100% rename from src/cpu/scpu/timing/timing.hpp rename to src/snes/cpu/scpu/timing/timing.hpp diff --git a/src/system/debugger/debugger.cpp b/src/snes/debugger/debugger.cpp similarity index 100% rename from src/system/debugger/debugger.cpp rename to src/snes/debugger/debugger.cpp diff --git a/src/system/debugger/debugger.hpp b/src/snes/debugger/debugger.hpp similarity index 100% rename from src/system/debugger/debugger.hpp rename to src/snes/debugger/debugger.hpp diff --git a/src/dsp/adsp/adsp.cpp b/src/snes/dsp/adsp/adsp.cpp similarity index 98% rename from src/dsp/adsp/adsp.cpp rename to src/snes/dsp/adsp/adsp.cpp index dd893590..890c68ae 100644 --- a/src/dsp/adsp/adsp.cpp +++ b/src/snes/dsp/adsp/adsp.cpp @@ -1,15 +1,17 @@ -#include <../base.hpp> +#include #define ADSP_CPP namespace SNES { -aDSP dsp; +//aDSP dsp; -#include "adsp_tables.cpp" +#include "tables.cpp" -void aDSP::enter() { loop: +void aDSP::enter() { + #if !defined(DSP_STATE_MACHINE) + while(true) + #endif run(); - goto loop; } uint8 aDSP::readb(uint16 addr) { @@ -187,7 +189,7 @@ int n = addr & 15; } void aDSP::power() { - spcram = r_smp->get_spcram_handle(); + spcram = memory::apuram.data(); memset(dspram, 0x00, 128); for(int v = 0; v < 8; v++) { @@ -271,7 +273,7 @@ int32 fir_samplel, fir_sampler; pmon = status.PMON & ~status.NON & ~1; if((dsp_counter++ & 1) == 0) { - for(uint v = 0; v < 8; v++) { + for(unsigned v = 0; v < 8; v++) { if(status.soft_reset()) { if(voice[v].env_state != SILENCE) { voice[v].env_state = SILENCE; @@ -592,4 +594,4 @@ int32 fir_samplel, fir_sampler; aDSP::aDSP() {} aDSP::~aDSP() {} -}; +} diff --git a/src/snes/dsp/adsp/adsp.hpp b/src/snes/dsp/adsp/adsp.hpp new file mode 100644 index 00000000..01d72def --- /dev/null +++ b/src/snes/dsp/adsp/adsp.hpp @@ -0,0 +1,174 @@ +class aDSP : public DSP { +private: + uint8 dspram[128]; + uint8 *spcram; + + uint32 dsp_counter; + + enum { BRR_END = 1, BRR_LOOP = 2 }; + + uint8 readb (uint16 addr); + uint16 readw (uint16 addr); + void writeb(uint16 addr, uint8 data); + void writew(uint16 addr, uint16 data); + +public: + static const uint16 rate_table[32]; + static const int16 gaussian_table[512]; + + enum EnvelopeStates { + ATTACK, + DECAY, + SUSTAIN, + RELEASE, + SILENCE + }; + + enum EnvelopeModes { + DIRECT, + LINEAR_DEC, + EXP_DEC, + LINEAR_INC, + BENT_INC, + + FAST_ATTACK, + RELEASE_DEC + }; + +private: + struct Status { + //$0c,$1c + int8 MVOLL, MVOLR; + //$2c,$3c + int8 EVOLL, EVOLR; + //$4c,$5c + uint8 KON, KOFF; + //$6c + uint8 FLG; + //$7c + uint8 ENDX; + //$0d + int8 EFB; + //$2d,$3d,$4d + uint8 PMON, NON, EON; + //$5d + uint8 DIR; + //$6d,$7d + uint8 ESA, EDL; + + //$xf + int8 FIR[8]; + + //internal variables + uint8 kon, esa; + + int16 noise_ctr, noise_rate; + uint16 noise_sample; + + uint16 echo_index, echo_length; + int16 fir_buffer[2][8]; + uint8 fir_buffer_index; + + //functions + bool soft_reset() { return !!(FLG & 0x80); } + bool mute() { return !!(FLG & 0x40); } + bool echo_write() { return !(FLG & 0x20); } + } status; + + struct Voice { + //$x0-$x1 + int8 VOLL, VOLR; + //$x2-$x3 + int16 PITCH; + //$x4 + uint8 SRCN; + //$x5-$x7 + uint8 ADSR1, ADSR2, GAIN; + //$x8-$x9 + uint8 ENVX, OUTX; + + //internal variables + int16 pitch_ctr; + + int8 brr_index; + uint16 brr_ptr; + uint8 brr_header; + bool brr_looped; + + int16 brr_data[4]; + uint8 brr_data_index; + + int16 envx; + uint16 env_ctr, env_rate, env_sustain; + enum EnvelopeStates env_state; + enum EnvelopeModes env_mode; + + int16 outx; + + //functions + int16 pitch_rate() { return PITCH & 0x3fff; } + + uint8 brr_header_shift() { return brr_header >> 4; } + uint8 brr_header_filter() { return (brr_header >> 2) & 3; } + uint8 brr_header_flags() { return brr_header & 3; } + + bool ADSR_enabled() { return !!(ADSR1 & 0x80); } + uint8 ADSR_decay() { return (ADSR1 >> 4) & 7; } + uint8 ADSR_attack() { return ADSR1 & 15; } + uint8 ADSR_sus_level() { return ADSR2 >> 5; } + uint8 ADSR_sus_rate() { return ADSR2 & 31; } + + void AdjustEnvelope() { + if(env_state == SILENCE) { + env_mode = DIRECT; + env_rate = 0; + envx = 0; + } else if(env_state == RELEASE) { + env_mode = RELEASE_DEC; + env_rate = 0x7800; + } else if(ADSR_enabled()) { + switch(env_state) { + case ATTACK: + env_rate = rate_table[(ADSR_attack() << 1) + 1]; + env_mode = (env_rate == 0x7800) ? FAST_ATTACK : LINEAR_INC; + break; + case DECAY: + env_rate = rate_table[(ADSR_decay() << 1) + 0x10]; + env_mode = EXP_DEC; + break; + case SUSTAIN: + env_rate = rate_table[ADSR_sus_rate()]; + env_mode = (env_rate == 0) ? DIRECT : EXP_DEC; + break; + } + } else if(GAIN & 0x80) { + switch(GAIN & 0x60) { + case 0x00: env_mode = LINEAR_DEC; break; + case 0x20: env_mode = EXP_DEC; break; + case 0x40: env_mode = LINEAR_INC; break; + case 0x60: env_mode = BENT_INC; break; + } + env_rate = rate_table[GAIN & 0x1f]; + } else { + env_mode = DIRECT; + env_rate = 0; + envx = (GAIN & 0x7f) << 4; + } + } + } voice[8]; + +public: + void enter(); + void run(); + + uint8 read (uint8 addr); + void write(uint8 addr, uint8 data); + + void power(); + void reset(); + + aDSP(); + ~aDSP(); +}; + +//extern aDSP dsp; diff --git a/src/dsp/adsp/adsp_tables.cpp b/src/snes/dsp/adsp/tables.cpp similarity index 100% rename from src/dsp/adsp/adsp_tables.cpp rename to src/snes/dsp/adsp/tables.cpp diff --git a/src/dsp/dsp-debugger.cpp b/src/snes/dsp/dsp-debugger.cpp similarity index 100% rename from src/dsp/dsp-debugger.cpp rename to src/snes/dsp/dsp-debugger.cpp diff --git a/src/dsp/dsp-debugger.hpp b/src/snes/dsp/dsp-debugger.hpp similarity index 100% rename from src/dsp/dsp-debugger.hpp rename to src/snes/dsp/dsp-debugger.hpp diff --git a/src/dsp/dsp.cpp b/src/snes/dsp/dsp.cpp similarity index 79% rename from src/dsp/dsp.cpp rename to src/snes/dsp/dsp.cpp index ccb2d7c5..1a5d0930 100644 --- a/src/dsp/dsp.cpp +++ b/src/snes/dsp/dsp.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define DSP_CPP namespace SNES { diff --git a/src/dsp/dsp.hpp b/src/snes/dsp/dsp.hpp similarity index 100% rename from src/dsp/dsp.hpp rename to src/snes/dsp/dsp.hpp diff --git a/src/dsp/sdsp/brr.cpp b/src/snes/dsp/sdsp/brr.cpp similarity index 100% rename from src/dsp/sdsp/brr.cpp rename to src/snes/dsp/sdsp/brr.cpp diff --git a/src/dsp/sdsp/counter.cpp b/src/snes/dsp/sdsp/counter.cpp similarity index 100% rename from src/dsp/sdsp/counter.cpp rename to src/snes/dsp/sdsp/counter.cpp diff --git a/src/dsp/sdsp/debugger/debugger.cpp b/src/snes/dsp/sdsp/debugger/debugger.cpp similarity index 100% rename from src/dsp/sdsp/debugger/debugger.cpp rename to src/snes/dsp/sdsp/debugger/debugger.cpp diff --git a/src/dsp/sdsp/debugger/debugger.hpp b/src/snes/dsp/sdsp/debugger/debugger.hpp similarity index 100% rename from src/dsp/sdsp/debugger/debugger.hpp rename to src/snes/dsp/sdsp/debugger/debugger.hpp diff --git a/src/dsp/sdsp/echo.cpp b/src/snes/dsp/sdsp/echo.cpp similarity index 100% rename from src/dsp/sdsp/echo.cpp rename to src/snes/dsp/sdsp/echo.cpp diff --git a/src/dsp/sdsp/envelope.cpp b/src/snes/dsp/sdsp/envelope.cpp similarity index 100% rename from src/dsp/sdsp/envelope.cpp rename to src/snes/dsp/sdsp/envelope.cpp diff --git a/src/dsp/sdsp/gaussian.cpp b/src/snes/dsp/sdsp/gaussian.cpp similarity index 100% rename from src/dsp/sdsp/gaussian.cpp rename to src/snes/dsp/sdsp/gaussian.cpp diff --git a/src/dsp/sdsp/misc.cpp b/src/snes/dsp/sdsp/misc.cpp similarity index 100% rename from src/dsp/sdsp/misc.cpp rename to src/snes/dsp/sdsp/misc.cpp diff --git a/src/dsp/sdsp/sdsp.cpp b/src/snes/dsp/sdsp/sdsp.cpp similarity index 99% rename from src/dsp/sdsp/sdsp.cpp rename to src/snes/dsp/sdsp/sdsp.cpp index 707f4b5a..239315b3 100644 --- a/src/dsp/sdsp/sdsp.cpp +++ b/src/snes/dsp/sdsp/sdsp.cpp @@ -2,7 +2,7 @@ //note: this is basically a C++ cothreaded implementation of Shay Green's (blargg's) S-DSP emulator. //the actual algorithms, timing information, tables, variable names, etc were all from him. -#include <../base.hpp> +#include #define SDSP_CPP namespace SNES { @@ -335,4 +335,4 @@ sDSP::sDSP() { sDSP::~sDSP() { } -}; +} diff --git a/src/dsp/sdsp/sdsp.hpp b/src/snes/dsp/sdsp/sdsp.hpp similarity index 73% rename from src/dsp/sdsp/sdsp.hpp rename to src/snes/dsp/sdsp/sdsp.hpp index 252dabc0..6b2e8088 100644 --- a/src/dsp/sdsp/sdsp.hpp +++ b/src/snes/dsp/sdsp/sdsp.hpp @@ -25,7 +25,7 @@ protected: r_efb = 0x0d, r_pmon = 0x2d, r_non = 0x3d, r_eon = 0x4d, r_dir = 0x5d, r_esa = 0x6d, - r_edl = 0x7d, r_fir = 0x0f, //8 coefficients at 0x0f, 0x1f, ... 0x7f + r_edl = 0x7d, r_fir = 0x0f, //8 coefficients at 0x0f, 0x1f, ... 0x7f }; //voice registers @@ -49,15 +49,15 @@ protected: struct state_t { uint8 regs[128]; - modulo_array echo_hist[2]; //echo history keeps most recent 8 samples + modulo_array echo_hist[2]; //echo history keeps most recent 8 samples int echo_hist_pos; - bool every_other_sample; //toggles every sample - int kon; //KON value when last checked + bool every_other_sample; //toggles every sample + int kon; //KON value when last checked int noise; int counter; - int echo_offset; //offset from ESA in echo buffer - int echo_length; //number of bytes that echo_offset will stop at + int echo_offset; //offset from ESA in echo buffer + int echo_length; //number of bytes that echo_offset will stop at //hidden registers also written to when main register is written to int new_kon; @@ -98,18 +98,18 @@ protected: //voice state struct voice_t { - modulo_array buffer; //decoded samples - int buf_pos; //place in buffer where next samples will be decoded - int interp_pos; //relative fractional position in sample (0x1000 = 1.0) - int brr_addr; //address of current BRR block - int brr_offset; //current decoding offset in BRR block - int vbit; //bitmask for voice: 0x01 for voice 0, 0x02 for voice 1, etc - int vidx; //voice channel register index: 0x00 for voice 0, 0x10 for voice 1, etc - int kon_delay; //KON delay/current setup phase + modulo_array buffer; //decoded samples + int buf_pos; //place in buffer where next samples will be decoded + int interp_pos; //relative fractional position in sample (0x1000 = 1.0) + int brr_addr; //address of current BRR block + int brr_offset; //current decoding offset in BRR block + int vbit; //bitmask for voice: 0x01 for voice 0, 0x02 for voice 1, etc + int vidx; //voice channel register index: 0x00 for voice 0, 0x10 for voice 1, etc + int kon_delay; //KON delay/current setup phase int env_mode; - int env; //current envelope level + int env; //current envelope level int t_envx_out; - int hidden_env; //used by GAIN mode 7, very obscure quirk + int hidden_env; //used by GAIN mode 7, very obscure quirk } voice[8]; //gaussian @@ -117,7 +117,7 @@ protected: int gaussian_interpolate(const voice_t &v); //counter - enum { counter_range = 2048 * 5 * 3 }; //30720 (0x7800) + enum { counter_range = 2048 * 5 * 3 }; //30720 (0x7800) static const uint16 counter_rate[32]; static const uint16 counter_offset[32]; void counter_tick(); diff --git a/src/dsp/sdsp/serialization.cpp b/src/snes/dsp/sdsp/serialization.cpp similarity index 100% rename from src/dsp/sdsp/serialization.cpp rename to src/snes/dsp/sdsp/serialization.cpp diff --git a/src/dsp/sdsp/voice.cpp b/src/snes/dsp/sdsp/voice.cpp similarity index 100% rename from src/dsp/sdsp/voice.cpp rename to src/snes/dsp/sdsp/voice.cpp diff --git a/src/system/input/input.cpp b/src/snes/input/input.cpp similarity index 100% rename from src/system/input/input.cpp rename to src/snes/input/input.cpp diff --git a/src/system/input/input.hpp b/src/snes/input/input.hpp similarity index 100% rename from src/system/input/input.hpp rename to src/snes/input/input.hpp diff --git a/src/system/interface/interface.hpp b/src/snes/interface/interface.hpp similarity index 100% rename from src/system/interface/interface.hpp rename to src/snes/interface/interface.hpp diff --git a/src/snes/libsnes/libsnes.cpp b/src/snes/libsnes/libsnes.cpp new file mode 100644 index 00000000..2b3e488f --- /dev/null +++ b/src/snes/libsnes/libsnes.cpp @@ -0,0 +1,138 @@ +#include "libsnes.hpp" +#include + +struct context_t { + snes_video_refresh_t video_refresh; + snes_audio_sample_t audio_sample; + snes_input_poll_t input_poll; + snes_input_state_t input_state; + + string xml_cartridge; + string xml_bsx_cartridge; + string xml_sufami_turbo_cartridge_a; + string xml_sufami_turbo_cartridge_b; + string xml_game_boy_cartridge; +}; + +static context_t context = { 0, 0, 0, 0 }; + +struct Interface : public SNES::Interface { + void video_refresh(uint16_t *data, unsigned pitch, unsigned *line, unsigned width, unsigned height) { + return context.video_refresh(data, pitch, line, width, height); + } + + void audio_sample(uint16_t left, uint16_t right) { + return context.audio_sample(left, right); + } + + void input_poll() { + return context.input_poll(); + } + + int16_t input_poll(bool port, SNES::Input::Device device, unsigned index, unsigned id) { + return context.input_state(port, (unsigned)device, index, id); + } +}; + +static Interface interface; + +unsigned snes_library_revision() { + return 0; +} + +void snes_init() { + SNES::system.init(&interface); + SNES::input.port_set_device(0, SNES::Input::Device::Joypad); + SNES::input.port_set_device(1, SNES::Input::Device::Joypad); +} + +void snes_term() { + SNES::system.term(); +} + +bool snes_load() { + lstring list = { context.xml_cartridge }; + SNES::cartridge.load(SNES::Cartridge::Mode::Normal, list); + SNES::system.power(); + return true; +} + +void snes_unload() { + SNES::cartridge.unload(); +} + +void snes_run() { + SNES::system.run(); +} + +void snes_load_cartridge( + const char *xml, + uint8_t *rom_data, unsigned rom_size, + uint8_t *ram_data, unsigned ram_size, + uint8_t *rtc_data, unsigned rtc_size +) { + context.xml_cartridge = xml; + SNES::memory::cartrom.map(rom_data, rom_size); + SNES::memory::cartram.map(ram_data, ram_size); + SNES::memory::cartrtc.map(rtc_data, rtc_size); +} + +void snes_load_bsx_cartridge( + const char *xml, + uint8_t *flash_data, unsigned flash_size, + uint8_t *ram_data, unsigned ram_size, + uint8_t *pram_data, unsigned pram_size +) { + context.xml_bsx_cartridge = xml; + SNES::memory::bsxflash.map(flash_data, flash_size); + SNES::memory::bsxram.map(ram_data, ram_size); + SNES::memory::bsxpram.map(pram_data, pram_size); +} + +void snes_load_sufami_turbo_cartridge_a( + const char *xml, + uint8_t *rom_data, unsigned rom_size, + uint8_t *ram_data, unsigned ram_size +) { + context.xml_sufami_turbo_cartridge_a = xml; + SNES::memory::stArom.map(rom_data, rom_size); + SNES::memory::stAram.map(ram_data, ram_size); +} + +void snes_load_sufami_turbo_cartridge_b( + const char *xml, + uint8_t *rom_data, unsigned rom_size, + uint8_t *ram_data, unsigned ram_size +) { + context.xml_sufami_turbo_cartridge_b = xml; + SNES::memory::stBrom.map(rom_data, rom_size); + SNES::memory::stBram.map(ram_data, ram_size); +} + +void snes_load_game_boy_cartridge( + const char *xml, + uint8_t *rom_data, unsigned rom_size, + uint8_t *ram_data, unsigned ram_size, + uint8_t *rtc_data, unsigned rtc_size +) { + context.xml_game_boy_cartridge = xml; + SNES::memory::gbrom.map(rom_data, rom_size); + SNES::memory::gbram.map(ram_data, ram_size); + SNES::memory::gbrtc.map(rtc_data, rtc_size); +} + +void snes_set_video_refresh(snes_video_refresh_t video_refresh) { + context.video_refresh = video_refresh; +} + +void snes_set_audio_sample(snes_audio_sample_t audio_sample) { + context.audio_sample = audio_sample; +} + +void snes_set_input_poll(snes_input_poll_t input_poll) { + context.input_poll = input_poll; +} + +void snes_set_input_state(snes_input_state_t input_state) { + context.input_state = input_state; +} diff --git a/src/snes/libsnes/libsnes.hpp b/src/snes/libsnes/libsnes.hpp new file mode 100644 index 00000000..c6921c4d --- /dev/null +++ b/src/snes/libsnes/libsnes.hpp @@ -0,0 +1,51 @@ +#include + +extern "C" unsigned snes_library_revision(); +extern "C" void snes_init(); +extern "C" void snes_term(); +extern "C" bool snes_load(); +extern "C" void snes_unload(); +extern "C" void snes_run(); + +extern "C" void snes_load_cartridge( + const char *xml, + uint8_t *rom_data, unsigned rom_size, + uint8_t *ram_data, unsigned ram_size, + uint8_t *rtc_data, unsigned rtc_size +); + +extern "C" void snes_load_bsx_cartridge( + const char *xml, + uint8_t *flash_data, unsigned flash_size, + uint8_t *ram_data, unsigned ram_size, + uint8_t *pram_data, unsigned pram_size +); + +extern "C" void snes_load_sufami_turbo_cartridge_a( + const char *xml, + uint8_t *rom_data, unsigned rom_size, + uint8_t *ram_data, unsigned ram_size +); + +extern "C" void snes_load_sufami_turbo_cartridge_b( + const char *xml, + uint8_t *rom_data, unsigned rom_size, + uint8_t *ram_data, unsigned ram_size +); + +extern "C" void snes_load_game_boy_cartridge( + const char *xml, + uint8_t *rom_data, unsigned rom_size, + uint8_t *ram_data, unsigned ram_size, + uint8_t *rtc_data, unsigned rtc_size +); + +typedef void (*snes_video_refresh_t)(uint16_t *data, unsigned pitch, unsigned *line, unsigned width, unsigned height); +typedef void (*snes_audio_sample_t)(uint16_t left, uint16_t right); +typedef void (*snes_input_poll_t)(); +typedef int16_t (*snes_input_state_t)(bool port, unsigned device, unsigned index, unsigned id); + +extern "C" void snes_set_video_refresh(snes_video_refresh_t); +extern "C" void snes_set_audio_sample(snes_audio_sample_t); +extern "C" void snes_set_input_poll(snes_input_poll_t); +extern "C" void snes_set_input_state(snes_input_state_t); diff --git a/src/memory/memory-inline.hpp b/src/snes/memory/memory-inline.hpp similarity index 100% rename from src/memory/memory-inline.hpp rename to src/snes/memory/memory-inline.hpp diff --git a/src/memory/memory.cpp b/src/snes/memory/memory.cpp similarity index 99% rename from src/memory/memory.cpp rename to src/snes/memory/memory.cpp index f01eff25..f8d7b7b9 100644 --- a/src/memory/memory.cpp +++ b/src/snes/memory/memory.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define MEMORY_CPP namespace SNES { @@ -109,4 +109,4 @@ void Bus::map( } } -}; +} diff --git a/src/memory/memory.hpp b/src/snes/memory/memory.hpp similarity index 100% rename from src/memory/memory.hpp rename to src/snes/memory/memory.hpp diff --git a/src/memory/smemory/serialization.cpp b/src/snes/memory/smemory/serialization.cpp similarity index 100% rename from src/memory/smemory/serialization.cpp rename to src/snes/memory/smemory/serialization.cpp diff --git a/src/memory/smemory/smemory.cpp b/src/snes/memory/smemory/smemory.cpp similarity index 97% rename from src/memory/smemory/smemory.cpp rename to src/snes/memory/smemory/smemory.cpp index 01679a0f..7835e652 100644 --- a/src/memory/smemory/smemory.cpp +++ b/src/snes/memory/smemory/smemory.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define SMEMORY_CPP namespace SNES { @@ -55,4 +55,4 @@ sBus::sBus() { sBus::~sBus() { } -}; +} diff --git a/src/memory/smemory/smemory.hpp b/src/snes/memory/smemory/smemory.hpp similarity index 100% rename from src/memory/smemory/smemory.hpp rename to src/snes/memory/smemory/smemory.hpp diff --git a/src/ppu/bppu/bppu.cpp b/src/snes/ppu/bppu/bppu.cpp similarity index 99% rename from src/ppu/bppu/bppu.cpp rename to src/snes/ppu/bppu/bppu.cpp index 3ca0ef2e..df876c81 100644 --- a/src/ppu/bppu/bppu.cpp +++ b/src/snes/ppu/bppu/bppu.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define BPPU_CPP namespace SNES { @@ -375,4 +375,4 @@ bPPU::~bPPU() { free_tiledata_cache(); } -}; +} diff --git a/src/ppu/bppu/bppu.hpp b/src/snes/ppu/bppu/bppu.hpp similarity index 100% rename from src/ppu/bppu/bppu.hpp rename to src/snes/ppu/bppu/bppu.hpp diff --git a/src/ppu/bppu/debugger/debugger.cpp b/src/snes/ppu/bppu/debugger/debugger.cpp similarity index 100% rename from src/ppu/bppu/debugger/debugger.cpp rename to src/snes/ppu/bppu/debugger/debugger.cpp diff --git a/src/ppu/bppu/debugger/debugger.hpp b/src/snes/ppu/bppu/debugger/debugger.hpp similarity index 100% rename from src/ppu/bppu/debugger/debugger.hpp rename to src/snes/ppu/bppu/debugger/debugger.hpp diff --git a/src/ppu/bppu/debugger/render.cpp b/src/snes/ppu/bppu/debugger/render.cpp similarity index 100% rename from src/ppu/bppu/debugger/render.cpp rename to src/snes/ppu/bppu/debugger/render.cpp diff --git a/src/ppu/bppu/memory/memory.cpp b/src/snes/ppu/bppu/memory/memory.cpp similarity index 98% rename from src/ppu/bppu/memory/memory.cpp rename to src/snes/ppu/bppu/memory/memory.cpp index 4ed8ca3f..05db8534 100644 --- a/src/ppu/bppu/memory/memory.cpp +++ b/src/snes/ppu/bppu/memory/memory.cpp @@ -137,7 +137,7 @@ uint8 bPPU::cgram_mmio_read(uint16 addr) { addr &= 0x01ff; uint8 data; - if(regs.display_disabled == true) { + if(1 || regs.display_disabled == true) { data = memory::cgram[addr]; } else { uint16 v = cpu.vcounter(); @@ -157,7 +157,7 @@ void bPPU::cgram_mmio_write(uint16 addr, uint8 data) { addr &= 0x01ff; if(addr & 1) data &= 0x7f; - if(regs.display_disabled == true) { + if(1 || regs.display_disabled == true) { memory::cgram[addr] = data; } else { uint16 v = cpu.vcounter(); diff --git a/src/ppu/bppu/memory/memory.hpp b/src/snes/ppu/bppu/memory/memory.hpp similarity index 100% rename from src/ppu/bppu/memory/memory.hpp rename to src/snes/ppu/bppu/memory/memory.hpp diff --git a/src/ppu/bppu/mmio/mmio.cpp b/src/snes/ppu/bppu/mmio/mmio.cpp similarity index 100% rename from src/ppu/bppu/mmio/mmio.cpp rename to src/snes/ppu/bppu/mmio/mmio.cpp diff --git a/src/ppu/bppu/mmio/mmio.hpp b/src/snes/ppu/bppu/mmio/mmio.hpp similarity index 100% rename from src/ppu/bppu/mmio/mmio.hpp rename to src/snes/ppu/bppu/mmio/mmio.hpp diff --git a/src/ppu/bppu/render/addsub.cpp b/src/snes/ppu/bppu/render/addsub.cpp similarity index 100% rename from src/ppu/bppu/render/addsub.cpp rename to src/snes/ppu/bppu/render/addsub.cpp diff --git a/src/ppu/bppu/render/bg.cpp b/src/snes/ppu/bppu/render/bg.cpp similarity index 100% rename from src/ppu/bppu/render/bg.cpp rename to src/snes/ppu/bppu/render/bg.cpp diff --git a/src/ppu/bppu/render/cache.cpp b/src/snes/ppu/bppu/render/cache.cpp similarity index 100% rename from src/ppu/bppu/render/cache.cpp rename to src/snes/ppu/bppu/render/cache.cpp diff --git a/src/ppu/bppu/render/line.cpp b/src/snes/ppu/bppu/render/line.cpp similarity index 100% rename from src/ppu/bppu/render/line.cpp rename to src/snes/ppu/bppu/render/line.cpp diff --git a/src/ppu/bppu/render/mode7.cpp b/src/snes/ppu/bppu/render/mode7.cpp similarity index 100% rename from src/ppu/bppu/render/mode7.cpp rename to src/snes/ppu/bppu/render/mode7.cpp diff --git a/src/ppu/bppu/render/oam.cpp b/src/snes/ppu/bppu/render/oam.cpp similarity index 100% rename from src/ppu/bppu/render/oam.cpp rename to src/snes/ppu/bppu/render/oam.cpp diff --git a/src/ppu/bppu/render/render.cpp b/src/snes/ppu/bppu/render/render.cpp similarity index 100% rename from src/ppu/bppu/render/render.cpp rename to src/snes/ppu/bppu/render/render.cpp diff --git a/src/ppu/bppu/render/render.hpp b/src/snes/ppu/bppu/render/render.hpp similarity index 100% rename from src/ppu/bppu/render/render.hpp rename to src/snes/ppu/bppu/render/render.hpp diff --git a/src/ppu/bppu/render/windows.cpp b/src/snes/ppu/bppu/render/windows.cpp similarity index 100% rename from src/ppu/bppu/render/windows.cpp rename to src/snes/ppu/bppu/render/windows.cpp diff --git a/src/ppu/bppu/serialization.cpp b/src/snes/ppu/bppu/serialization.cpp similarity index 100% rename from src/ppu/bppu/serialization.cpp rename to src/snes/ppu/bppu/serialization.cpp diff --git a/src/ppu/ppu-debugger.cpp b/src/snes/ppu/ppu-debugger.cpp similarity index 100% rename from src/ppu/ppu-debugger.cpp rename to src/snes/ppu/ppu-debugger.cpp diff --git a/src/ppu/ppu-debugger.hpp b/src/snes/ppu/ppu-debugger.hpp similarity index 100% rename from src/ppu/ppu-debugger.hpp rename to src/snes/ppu/ppu-debugger.hpp diff --git a/src/ppu/ppu-inline.hpp b/src/snes/ppu/ppu-inline.hpp similarity index 100% rename from src/ppu/ppu-inline.hpp rename to src/snes/ppu/ppu-inline.hpp diff --git a/src/ppu/ppu.cpp b/src/snes/ppu/ppu.cpp similarity index 97% rename from src/ppu/ppu.cpp rename to src/snes/ppu/ppu.cpp index 9790628d..4fa9e6d5 100644 --- a/src/ppu/ppu.cpp +++ b/src/snes/ppu/ppu.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define PPU_CPP namespace SNES { diff --git a/src/ppu/ppu.hpp b/src/snes/ppu/ppu.hpp similarity index 100% rename from src/ppu/ppu.hpp rename to src/snes/ppu/ppu.hpp diff --git a/src/ppu/serialization.cpp b/src/snes/ppu/serialization.cpp similarity index 100% rename from src/ppu/serialization.cpp rename to src/snes/ppu/serialization.cpp diff --git a/src/system/scheduler/scheduler.cpp b/src/snes/scheduler/scheduler.cpp similarity index 100% rename from src/system/scheduler/scheduler.cpp rename to src/snes/scheduler/scheduler.cpp diff --git a/src/system/scheduler/scheduler.hpp b/src/snes/scheduler/scheduler.hpp similarity index 100% rename from src/system/scheduler/scheduler.hpp rename to src/snes/scheduler/scheduler.hpp diff --git a/src/smp/core/algorithms.cpp b/src/snes/smp/core/algorithms.cpp similarity index 100% rename from src/smp/core/algorithms.cpp rename to src/snes/smp/core/algorithms.cpp diff --git a/src/smp/core/core.cpp b/src/snes/smp/core/core.cpp similarity index 94% rename from src/smp/core/core.cpp rename to src/snes/smp/core/core.cpp index fe6b1f52..51fa453e 100644 --- a/src/smp/core/core.cpp +++ b/src/snes/smp/core/core.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define SMPCORE_CPP namespace SNES { @@ -28,4 +28,4 @@ SMPcore::SMPcore() { initialize_opcode_table(); } -}; +} diff --git a/src/smp/core/core.hpp b/src/snes/smp/core/core.hpp similarity index 100% rename from src/smp/core/core.hpp rename to src/snes/smp/core/core.hpp diff --git a/src/smp/core/disassembler/disassembler.cpp b/src/snes/smp/core/disassembler/disassembler.cpp similarity index 100% rename from src/smp/core/disassembler/disassembler.cpp rename to src/snes/smp/core/disassembler/disassembler.cpp diff --git a/src/smp/core/disassembler/disassembler.hpp b/src/snes/smp/core/disassembler/disassembler.hpp similarity index 100% rename from src/smp/core/disassembler/disassembler.hpp rename to src/snes/smp/core/disassembler/disassembler.hpp diff --git a/src/smp/core/memory.hpp b/src/snes/smp/core/memory.hpp similarity index 100% rename from src/smp/core/memory.hpp rename to src/snes/smp/core/memory.hpp diff --git a/src/smp/core/opcode_misc.cpp b/src/snes/smp/core/opcode_misc.cpp similarity index 100% rename from src/smp/core/opcode_misc.cpp rename to src/snes/smp/core/opcode_misc.cpp diff --git a/src/smp/core/opcode_mov.cpp b/src/snes/smp/core/opcode_mov.cpp similarity index 100% rename from src/smp/core/opcode_mov.cpp rename to src/snes/smp/core/opcode_mov.cpp diff --git a/src/smp/core/opcode_pc.cpp b/src/snes/smp/core/opcode_pc.cpp similarity index 100% rename from src/smp/core/opcode_pc.cpp rename to src/snes/smp/core/opcode_pc.cpp diff --git a/src/smp/core/opcode_read.cpp b/src/snes/smp/core/opcode_read.cpp similarity index 100% rename from src/smp/core/opcode_read.cpp rename to src/snes/smp/core/opcode_read.cpp diff --git a/src/smp/core/opcode_rmw.cpp b/src/snes/smp/core/opcode_rmw.cpp similarity index 100% rename from src/smp/core/opcode_rmw.cpp rename to src/snes/smp/core/opcode_rmw.cpp diff --git a/src/smp/core/registers.hpp b/src/snes/smp/core/registers.hpp similarity index 100% rename from src/smp/core/registers.hpp rename to src/snes/smp/core/registers.hpp diff --git a/src/smp/core/serialization.cpp b/src/snes/smp/core/serialization.cpp similarity index 100% rename from src/smp/core/serialization.cpp rename to src/snes/smp/core/serialization.cpp diff --git a/src/smp/core/table.cpp b/src/snes/smp/core/table.cpp similarity index 100% rename from src/smp/core/table.cpp rename to src/snes/smp/core/table.cpp diff --git a/src/smp/smp-debugger.cpp b/src/snes/smp/smp-debugger.cpp similarity index 100% rename from src/smp/smp-debugger.cpp rename to src/snes/smp/smp-debugger.cpp diff --git a/src/smp/smp-debugger.hpp b/src/snes/smp/smp-debugger.hpp similarity index 100% rename from src/smp/smp-debugger.hpp rename to src/snes/smp/smp-debugger.hpp diff --git a/src/smp/smp.cpp b/src/snes/smp/smp.cpp similarity index 98% rename from src/smp/smp.cpp rename to src/snes/smp/smp.cpp index dda432fa..d1146008 100644 --- a/src/smp/smp.cpp +++ b/src/snes/smp/smp.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define SMP_CPP namespace SNES { @@ -48,4 +48,4 @@ const uint8 SMP::iplrom[64] = { /*fffe*/ 0xc0, 0xff //reset vector location ($ffc0) }; -}; +} diff --git a/src/smp/smp.hpp b/src/snes/smp/smp.hpp similarity index 100% rename from src/smp/smp.hpp rename to src/snes/smp/smp.hpp diff --git a/src/smp/ssmp/debugger/debugger.cpp b/src/snes/smp/ssmp/debugger/debugger.cpp similarity index 100% rename from src/smp/ssmp/debugger/debugger.cpp rename to src/snes/smp/ssmp/debugger/debugger.cpp diff --git a/src/smp/ssmp/debugger/debugger.hpp b/src/snes/smp/ssmp/debugger/debugger.hpp similarity index 100% rename from src/smp/ssmp/debugger/debugger.hpp rename to src/snes/smp/ssmp/debugger/debugger.hpp diff --git a/src/smp/ssmp/memory/memory.cpp b/src/snes/smp/ssmp/memory/memory.cpp similarity index 100% rename from src/smp/ssmp/memory/memory.cpp rename to src/snes/smp/ssmp/memory/memory.cpp diff --git a/src/smp/ssmp/memory/memory.hpp b/src/snes/smp/ssmp/memory/memory.hpp similarity index 100% rename from src/smp/ssmp/memory/memory.hpp rename to src/snes/smp/ssmp/memory/memory.hpp diff --git a/src/smp/ssmp/serialization.cpp b/src/snes/smp/ssmp/serialization.cpp similarity index 100% rename from src/smp/ssmp/serialization.cpp rename to src/snes/smp/ssmp/serialization.cpp diff --git a/src/smp/ssmp/ssmp.cpp b/src/snes/smp/ssmp/ssmp.cpp similarity index 98% rename from src/smp/ssmp/ssmp.cpp rename to src/snes/smp/ssmp/ssmp.cpp index 8fb6c243..f30b0660 100644 --- a/src/smp/ssmp/ssmp.cpp +++ b/src/snes/smp/ssmp/ssmp.cpp @@ -1,4 +1,4 @@ -#include <../base.hpp> +#include #define SSMP_CPP namespace SNES { @@ -102,4 +102,4 @@ sSMP::sSMP() { sSMP::~sSMP() { } -}; +} diff --git a/src/smp/ssmp/ssmp.hpp b/src/snes/smp/ssmp/ssmp.hpp similarity index 100% rename from src/smp/ssmp/ssmp.hpp rename to src/snes/smp/ssmp/ssmp.hpp diff --git a/src/smp/ssmp/timing/timing.cpp b/src/snes/smp/ssmp/timing/timing.cpp similarity index 100% rename from src/smp/ssmp/timing/timing.cpp rename to src/snes/smp/ssmp/timing/timing.cpp diff --git a/src/smp/ssmp/timing/timing.hpp b/src/snes/smp/ssmp/timing/timing.hpp similarity index 100% rename from src/smp/ssmp/timing/timing.hpp rename to src/snes/smp/ssmp/timing/timing.hpp diff --git a/src/snes/snes.hpp b/src/snes/snes.hpp new file mode 100644 index 00000000..1f190e8e --- /dev/null +++ b/src/snes/snes.hpp @@ -0,0 +1,91 @@ +static const char bsnesVersion[] = "063.03"; +static const char bsnesTitle[] = "bsnes"; +static const unsigned bsnesSerializerVersion = 9; + +//S-DSP can be encapsulated into a state machine using #define magic +//this avoids ~2.048m co_switch() calls per second (~5% speedup) +#define DSP_STATE_MACHINE + +//game genie + pro action replay code support (~2% speed hit) +#define CHEAT_SYSTEM + +//enable debugging extensions (~15% speed hit) +//#define DEBUGGER + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace nall; + +#ifdef DEBUGGER + #define debugvirtual virtual +#else + #define debugvirtual +#endif + +namespace SNES { + typedef int8_t int8; + typedef int16_t int16; + typedef int32_t int32; + typedef int64_t int64; + typedef uint8_t uint8; + typedef uint16_t uint16; + typedef uint32_t uint32; + typedef uint64_t uint64; + + struct ChipDebugger { + virtual bool property(unsigned id, string &name, string &value) = 0; + }; + + #include + #include + + #include + #include + + #include + #include + #include + + #include + #include + #include + + #include + #include + #include + + #include + #include + #include + #include + + #include + #include + #include +} + +namespace nall { + template<> struct has_size { enum { value = true }; }; + template<> struct has_size { enum { value = true }; }; +} + +#undef debugvirtual diff --git a/src/system/serialization.cpp b/src/snes/system/serialization.cpp similarity index 100% rename from src/system/serialization.cpp rename to src/snes/system/serialization.cpp diff --git a/src/system/system.cpp b/src/snes/system/system.cpp similarity index 96% rename from src/system/system.cpp rename to src/snes/system/system.cpp index d6f99685..e6dd965d 100644 --- a/src/system/system.cpp +++ b/src/snes/system/system.cpp @@ -1,18 +1,19 @@ -#include <../base.hpp> +#include #define SYSTEM_CPP namespace SNES { System system; -#include "config/config.cpp" -#include "debugger/debugger.cpp" -#include "serialization.cpp" -#include "scheduler/scheduler.cpp" +#include +#include +#include -#include "video/video.cpp" -#include "audio/audio.cpp" -#include "input/input.cpp" +#include +#include +#include + +#include "serialization.cpp" void System::coprocessor_enter() { if(cartridge.mode() == Cartridge::Mode::SuperGameBoy) supergameboy.enter(); diff --git a/src/system/system.hpp b/src/snes/system/system.hpp similarity index 80% rename from src/system/system.hpp rename to src/snes/system/system.hpp index fd03f870..2e0aa86f 100644 --- a/src/system/system.hpp +++ b/src/snes/system/system.hpp @@ -45,13 +45,13 @@ private: friend void threadentry_cop(); }; -#include "video/video.hpp" -#include "audio/audio.hpp" -#include "input/input.hpp" +#include +#include +#include -#include "config/config.hpp" -#include "debugger/debugger.hpp" -#include "interface/interface.hpp" -#include "scheduler/scheduler.hpp" +#include +#include +#include +#include extern System system; diff --git a/src/system/video/video.cpp b/src/snes/video/video.cpp similarity index 100% rename from src/system/video/video.cpp rename to src/snes/video/video.cpp diff --git a/src/system/video/video.hpp b/src/snes/video/video.hpp similarity index 100% rename from src/system/video/video.hpp rename to src/snes/video/video.hpp diff --git a/src/ui_qt/Makefile b/src/ui_qt/Makefile index 14cfdb83..5ff89e3b 100644 --- a/src/ui_qt/Makefile +++ b/src/ui_qt/Makefile @@ -1,5 +1,9 @@ -objects := ui-main ui-base ui-cartridge ui-debugger ui-input ui-movie ui-settings ui-state ui-tools $(objects) -objects += $(if $(call streq,$(platform),win),resource) +qtlibs := $(strip QtCore QtGui $(if $(findstring osx,$(platform)),QtOpenGL)) +include lib/nall/qt/Makefile + +ui_objects := ui-main ui-base ui-cartridge ui-debugger ui-input ui-movie ui-settings ui-state ui-tools +ui_objects += ruby +ui_objects += $(if $(call streq,$(platform),win),resource) link += $(qtlib) headers := $(call rwildcard,$(ui)/,%.hpp) @@ -7,9 +11,51 @@ moc_headers := $(call rwildcard,lib/nall/qt/,%.moc.hpp) $(call rwildcard,$(ui)/, moc_objects := $(foreach f,$(moc_headers),obj/$(notdir $(patsubst %.moc.hpp,%.moc,$f))) qt_compile = $(call compile,-Iobj $(qtinc)) -############# -### rules ### -############# +# platform +ifeq ($(platform),x) + ruby := video.glx video.xv video.qtraster video.sdl + ruby += audio.alsa audio.openal audio.oss audio.pulseaudio audio.pulseaudiosimple audio.ao + ruby += input.sdl input.x + + link += $(if $(findstring audio.openal,$(ruby)),-lopenal) +else ifeq ($(platform),osx) + ruby := video.qtopengl video.qtraster + ruby += audio.openal + ruby += input.carbon + + link += $(if $(findstring audio.openal,$(ruby)),-framework OpenAL) +else ifeq ($(platform),win) + ruby := video.direct3d video.wgl video.directdraw video.gdi video.qtraster + ruby += audio.directsound + ruby += input.rawinput input.directinput + + link += $(if $(findstring audio.openal,$(ruby)),-lopenal32) +else + unknown_platform: help; +endif + +# ruby +rubyflags := $(if $(finstring .sdl,$(ruby)),`sdl-config --cflags`) +rubyflags += $(if $(findstring .qt,$(ruby)),$(qtinc)) + +link += $(if $(findstring .sdl,$(ruby)),`sdl-config --libs`) +link += $(if $(findstring video.direct3d,$(ruby)),-ld3d9) +link += $(if $(findstring video.directdraw,$(ruby)),-lddraw) +link += $(if $(findstring video.glx,$(ruby)),-lGL) +link += $(if $(findstring video.wgl,$(ruby)),-lopengl32) +link += $(if $(findstring video.xv,$(ruby)),-lXv) +link += $(if $(findstring audio.alsa,$(ruby)),-lasound) +link += $(if $(findstring audio.ao,$(ruby)),-lao) +link += $(if $(findstring audio.directsound,$(ruby)),-ldsound) +link += $(if $(findstring audio.pulseaudio,$(ruby)),-lpulse) +link += $(if $(findstring audio.pulseaudiosimple,$(ruby)),-lpulse-simple) +link += $(if $(findstring input.directinput,$(ruby)),-ldinput8 -ldxguid) +link += $(if $(findstring input.rawinput,$(ruby)),-ldinput8 -ldxguid) + +rubydef := $(foreach c,$(subst .,_,$(call strupper,$(ruby))),-D$c) + +# rules +objects := $(ui_objects) $(objects) # automatically run moc on all .moc.hpp (MOC header) files %.moc: $<; $(moc) -i $< -o $@ @@ -32,16 +78,16 @@ obj/ui-settings.o: $(ui)/settings/settings.cpp $(headers) $(wildcard $(ui)/setti obj/ui-state.o: $(ui)/state/state.cpp $(headers) $(wildcard $(ui)/state/*.cpp); $(qt_compile) obj/ui-tools.o: $(ui)/tools/tools.cpp $(headers) $(wildcard $(ui)/tools/*.cpp); $(qt_compile) +obj/ruby.o: lib/ruby/ruby.cpp $(call rwildcard,lib/ruby/*) + $(call compile,$(rubydef) $(rubyflags)) + obj/resource.rcc: $(ui)/resource/resource.qrc data/* $(rcc) $(ui)/resource/resource.qrc -o obj/resource.rcc obj/resource.o: $(ui)/resource/resource.rc windres $(ui)/resource/resource.rc obj/resource.o -############### -### targets ### -############### - +# targets ui_build: obj/resource.rcc $(moc_objects); ui_clean: -@$(call delete,obj/*.rcc) diff --git a/src/ui_qt/ui-base.hpp b/src/ui_qt/ui-base.hpp index 6d02aa56..338fbfb8 100644 --- a/src/ui_qt/ui-base.hpp +++ b/src/ui_qt/ui-base.hpp @@ -9,7 +9,7 @@ //Q_IMPORT_PLUGIN(QJpegPlugin) //Q_IMPORT_PLUGIN(QMngPlugin) -#include <../base.hpp> +#include #include #include diff --git a/src/ui_sdl/Makefile b/src/ui_sdl/Makefile new file mode 100644 index 00000000..9c208169 --- /dev/null +++ b/src/ui_sdl/Makefile @@ -0,0 +1,9 @@ +objects := ui-main libsnes $(objects) +link += `sdl-config --libs` + +obj/ui-main.o: $(ui)/main.cpp + $(call compile,`sdl-config --cflags`) +obj/libsnes.o: snes/libsnes/libsnes.cpp snes/libsnes/* + +ui_build:; +ui_clean:; diff --git a/src/ui_sdl/main.cpp b/src/ui_sdl/main.cpp new file mode 100644 index 00000000..a90ec05c --- /dev/null +++ b/src/ui_sdl/main.cpp @@ -0,0 +1,111 @@ +#include +#include "SDL.h" + +SDL_Surface *screen, *backbuffer; + +void video_refresh(uint16_t *data, unsigned pitch, unsigned *line, unsigned width, unsigned height) { + if(SDL_MUSTLOCK(screen)) SDL_LockSurface(screen); + if(SDL_MUSTLOCK(backbuffer)) SDL_LockSurface(backbuffer); + + unsigned outputPitch = backbuffer->pitch; + uint16_t *outputData = (uint16_t*)backbuffer->pixels; + + for(unsigned y = 0; y < height; y++) { + uint16_t *src = (uint16_t*)((uint8_t*)data + y * pitch); + uint16_t *dst = (uint16_t*)((uint8_t*)outputData + y * outputPitch); + memcpy(dst, src, width * sizeof(uint16_t)); + } + + if(SDL_MUSTLOCK(backbuffer)) SDL_UnlockSurface(backbuffer); + if(SDL_MUSTLOCK(screen)) SDL_UnlockSurface(screen); + + SDL_Rect rect; + rect.x = 0; + rect.y = 0; + rect.w = 256; + rect.h = 224; + SDL_BlitSurface(backbuffer, &rect, screen, &rect); + SDL_UpdateRect(screen, 0, 0, 256, 224); +} + +void audio_sample(uint16_t l_sample, uint16_t r_sample) { +} + +void input_poll() { +} + +int16_t input_state(bool port, unsigned device, unsigned index, unsigned id) { + uint8_t *state = SDL_GetKeyState(0); + + if(port == 0) { + //B, Y, Select, Start, Up, Down, Left, Right, A, X, L, R + if(id == 0) return state[SDLK_z]; + if(id == 1) return state[SDLK_a]; + if(id == 2) return state[SDLK_RSHIFT]; + if(id == 3) return state[SDLK_RETURN]; + if(id == 4) return state[SDLK_UP]; + if(id == 5) return state[SDLK_DOWN]; + if(id == 6) return state[SDLK_LEFT]; + if(id == 7) return state[SDLK_RIGHT]; + if(id == 8) return state[SDLK_x]; + if(id == 9) return state[SDLK_s]; + if(id == 10) return state[SDLK_d]; + if(id == 11) return state[SDLK_c]; + } + + return 0; +} + +int main(int argc, char *argv[]) { + const char *filename = "/media/sdb1/root/snes_roms/zelda_us.sfc"; + const char *xml = + "" + "" + " The Legend of Zelda - A Link to the Past" + " SHVC-1A3M-30" + " " + " " + " " + " " + " " + " " + " " + " " + ""; + + atexit(SDL_Quit); + SDL_Init(SDL_INIT_VIDEO); + screen = SDL_SetVideoMode(256, 224, 16, SDL_HWSURFACE); + backbuffer = SDL_CreateRGBSurface(SDL_HWSURFACE, 256, 224, 16, 0x001f, 0x03e0, 0x7c00, 0x0000); + SDL_WM_SetCaption("bsnes/SDL", 0); + + snes_set_video_refresh(video_refresh); + snes_set_audio_sample(audio_sample); + snes_set_input_poll(input_poll); + snes_set_input_state(input_state); + snes_init(); + + FILE *fp = fopen(filename, "rb"); + fseek(fp, 0, SEEK_END); + unsigned rom_size = ftell(fp); + rewind(fp); + uint8_t *rom_data = new uint8_t[rom_size]; + rom_size = fread(rom_data, 1, rom_size, fp); + fclose(fp); + unsigned ram_size = 0x2000; + uint8_t *ram_data = new uint8_t[ram_size](); + + snes_load_cartridge(xml, rom_data, rom_size, ram_data, ram_size, 0, 0); + snes_load(); + + while(true) { + SDL_Event event; + SDL_PollEvent(&event); + if(event.type == SDL_QUIT) break; + snes_run(); + } + + snes_unload(); + snes_term(); + return 0; +}