From a7ef10322eeb2b8658517c414f3dd02f79522ba2 Mon Sep 17 00:00:00 2001 From: nattthebear Date: Sat, 10 Jun 2017 07:57:43 -0400 Subject: [PATCH] snes: move files to waterbox area --- {libsnes => waterbox/libsnes}/0.87 | 0 waterbox/libsnes/Makefile | 90 ++ .../libsnes}/bsnes/base/base.cpp | 0 .../libsnes}/bsnes/base/base.hpp | 0 .../libsnes}/bsnes/gameboy/apu/apu.cpp | 0 .../libsnes}/bsnes/gameboy/apu/apu.hpp | 0 .../bsnes/gameboy/apu/master/master.cpp | 0 .../bsnes/gameboy/apu/master/master.hpp | 0 .../bsnes/gameboy/apu/noise/noise.cpp | 0 .../bsnes/gameboy/apu/noise/noise.hpp | 0 .../bsnes/gameboy/apu/serialization.cpp | 0 .../bsnes/gameboy/apu/square1/square1.cpp | 0 .../bsnes/gameboy/apu/square1/square1.hpp | 0 .../bsnes/gameboy/apu/square2/square2.cpp | 0 .../bsnes/gameboy/apu/square2/square2.hpp | 0 .../libsnes}/bsnes/gameboy/apu/wave/wave.cpp | 0 .../libsnes}/bsnes/gameboy/apu/wave/wave.hpp | 0 .../bsnes/gameboy/cartridge/cartridge.cpp | 0 .../bsnes/gameboy/cartridge/cartridge.hpp | 0 .../bsnes/gameboy/cartridge/huc1/huc1.cpp | 0 .../bsnes/gameboy/cartridge/huc1/huc1.hpp | 0 .../bsnes/gameboy/cartridge/huc3/huc3.cpp | 0 .../bsnes/gameboy/cartridge/huc3/huc3.hpp | 0 .../bsnes/gameboy/cartridge/mbc0/mbc0.cpp | 0 .../bsnes/gameboy/cartridge/mbc0/mbc0.hpp | 0 .../bsnes/gameboy/cartridge/mbc1/mbc1.cpp | 0 .../bsnes/gameboy/cartridge/mbc1/mbc1.hpp | 0 .../bsnes/gameboy/cartridge/mbc2/mbc2.cpp | 0 .../bsnes/gameboy/cartridge/mbc2/mbc2.hpp | 0 .../bsnes/gameboy/cartridge/mbc3/mbc3.cpp | 0 .../bsnes/gameboy/cartridge/mbc3/mbc3.hpp | 0 .../bsnes/gameboy/cartridge/mbc5/mbc5.cpp | 0 .../bsnes/gameboy/cartridge/mbc5/mbc5.hpp | 0 .../bsnes/gameboy/cartridge/mmm01/mmm01.cpp | 0 .../bsnes/gameboy/cartridge/mmm01/mmm01.hpp | 0 .../bsnes/gameboy/cartridge/serialization.cpp | 0 .../libsnes}/bsnes/gameboy/cheat/cheat.cpp | 0 .../libsnes}/bsnes/gameboy/cheat/cheat.hpp | 0 .../libsnes}/bsnes/gameboy/cpu/core/core.cpp | 0 .../libsnes}/bsnes/gameboy/cpu/core/core.hpp | 292 ++-- .../bsnes/gameboy/cpu/core/disassembler.cpp | 0 .../bsnes/gameboy/cpu/core/registers.hpp | 0 .../libsnes}/bsnes/gameboy/cpu/core/table.cpp | 0 .../libsnes}/bsnes/gameboy/cpu/cpu.cpp | 0 .../libsnes}/bsnes/gameboy/cpu/cpu.hpp | 0 .../libsnes}/bsnes/gameboy/cpu/mmio/mmio.cpp | 0 .../libsnes}/bsnes/gameboy/cpu/mmio/mmio.hpp | 0 .../bsnes/gameboy/cpu/serialization.cpp | 0 .../bsnes/gameboy/cpu/timing/opcode.cpp | 0 .../bsnes/gameboy/cpu/timing/timing.cpp | 192 +-- .../bsnes/gameboy/cpu/timing/timing.hpp | 0 .../libsnes}/bsnes/gameboy/gameboy.hpp | 0 .../bsnes/gameboy/interface/interface.cpp | 0 .../bsnes/gameboy/interface/interface.hpp | 0 .../libsnes}/bsnes/gameboy/lcd/cgb.cpp | 0 .../libsnes}/bsnes/gameboy/lcd/dmg.cpp | 0 .../libsnes}/bsnes/gameboy/lcd/lcd.cpp | 0 .../libsnes}/bsnes/gameboy/lcd/lcd.hpp | 0 .../libsnes}/bsnes/gameboy/lcd/mmio/mmio.cpp | 0 .../libsnes}/bsnes/gameboy/lcd/mmio/mmio.hpp | 0 .../bsnes/gameboy/lcd/serialization.cpp | 0 .../libsnes}/bsnes/gameboy/memory/memory.cpp | 0 .../libsnes}/bsnes/gameboy/memory/memory.hpp | 0 .../bsnes/gameboy/scheduler/scheduler.cpp | 0 .../bsnes/gameboy/scheduler/scheduler.hpp | 0 .../bsnes/gameboy/system/bootrom-cgb.cpp | 0 .../bsnes/gameboy/system/bootrom-dmg.cpp | 0 .../bsnes/gameboy/system/bootrom-sgb.cpp | 0 .../bsnes/gameboy/system/serialization.cpp | 0 .../libsnes}/bsnes/gameboy/system/system.cpp | 0 .../libsnes}/bsnes/gameboy/system/system.hpp | 0 .../libsnes}/bsnes/gameboy/video/video.cpp | 0 .../libsnes}/bsnes/gameboy/video/video.hpp | 0 .../libsnes}/bsnes/nall/algorithm.hpp | 0 .../libsnes}/bsnes/nall/any.hpp | 0 .../libsnes}/bsnes/nall/array.hpp | 0 .../libsnes}/bsnes/nall/atoi.hpp | 0 .../libsnes}/bsnes/nall/base64.hpp | 0 .../libsnes}/bsnes/nall/bit.hpp | 0 .../libsnes}/bsnes/nall/bmp.hpp | 0 .../libsnes}/bsnes/nall/bps/delta.hpp | 0 .../libsnes}/bsnes/nall/bps/linear.hpp | 0 .../libsnes}/bsnes/nall/bps/metadata.hpp | 0 .../libsnes}/bsnes/nall/bps/patch.hpp | 0 .../libsnes}/bsnes/nall/compositor.hpp | 0 .../libsnes}/bsnes/nall/config.hpp | 0 .../libsnes}/bsnes/nall/crc32.hpp | 0 .../libsnes}/bsnes/nall/directory.hpp | 0 .../libsnes}/bsnes/nall/dl.hpp | 0 .../libsnes}/bsnes/nall/dsp.hpp | 0 .../libsnes}/bsnes/nall/dsp/buffer.hpp | 0 .../libsnes}/bsnes/nall/dsp/core.hpp | 0 .../bsnes/nall/dsp/resample/average.hpp | 0 .../bsnes/nall/dsp/resample/cosine.hpp | 0 .../bsnes/nall/dsp/resample/cubic.hpp | 0 .../bsnes/nall/dsp/resample/hermite.hpp | 0 .../bsnes/nall/dsp/resample/lib/sinc.hpp | 0 .../bsnes/nall/dsp/resample/linear.hpp | 0 .../bsnes/nall/dsp/resample/nearest.hpp | 0 .../libsnes}/bsnes/nall/dsp/resample/sinc.hpp | 0 .../libsnes}/bsnes/nall/dsp/settings.hpp | 0 .../libsnes}/bsnes/nall/endian.hpp | 0 .../libsnes}/bsnes/nall/file.hpp | 0 .../libsnes}/bsnes/nall/filemap.hpp | 0 .../libsnes}/bsnes/nall/function.hpp | 0 .../libsnes}/bsnes/nall/gameboy/cartridge.hpp | 0 .../libsnes}/bsnes/nall/gzip.hpp | 0 .../libsnes}/bsnes/nall/http.hpp | 0 .../libsnes}/bsnes/nall/image.hpp | 0 .../libsnes}/bsnes/nall/inflate.hpp | 0 .../libsnes}/bsnes/nall/input.hpp | 0 .../libsnes}/bsnes/nall/interpolation.hpp | 0 .../libsnes}/bsnes/nall/intrinsics.hpp | 0 .../libsnes}/bsnes/nall/ips.hpp | 0 .../libsnes}/bsnes/nall/lzss.hpp | 0 .../libsnes}/bsnes/nall/map.hpp | 0 .../libsnes}/bsnes/nall/moduloarray.hpp | 0 .../libsnes}/bsnes/nall/mosaic.hpp | 0 .../libsnes}/bsnes/nall/mosaic/bitstream.hpp | 0 .../libsnes}/bsnes/nall/mosaic/context.hpp | 0 .../libsnes}/bsnes/nall/mosaic/parser.hpp | 0 .../libsnes}/bsnes/nall/platform.hpp | 0 .../libsnes}/bsnes/nall/png.hpp | 0 .../libsnes}/bsnes/nall/priorityqueue.hpp | 0 .../libsnes}/bsnes/nall/property.hpp | 0 .../libsnes}/bsnes/nall/public_cast.hpp | 0 .../libsnes}/bsnes/nall/random.hpp | 0 .../libsnes}/bsnes/nall/reference_array.hpp | 0 .../libsnes}/bsnes/nall/serial.hpp | 0 .../libsnes}/bsnes/nall/serializer.hpp | 0 .../libsnes}/bsnes/nall/sha256.hpp | 0 .../libsnes}/bsnes/nall/snes/cartridge.hpp | 0 .../libsnes}/bsnes/nall/snes/cpu.hpp | 0 .../libsnes}/bsnes/nall/snes/smp.hpp | 0 .../libsnes}/bsnes/nall/snes/usart.hpp | 0 .../libsnes}/bsnes/nall/sort.hpp | 0 .../libsnes}/bsnes/nall/stdint.hpp | 0 .../libsnes}/bsnes/nall/stream.hpp | 0 .../libsnes}/bsnes/nall/stream/auto.hpp | 0 .../libsnes}/bsnes/nall/stream/file.hpp | 0 .../libsnes}/bsnes/nall/stream/gzip.hpp | 0 .../libsnes}/bsnes/nall/stream/http.hpp | 0 .../libsnes}/bsnes/nall/stream/memory.hpp | 0 .../libsnes}/bsnes/nall/stream/mmap.hpp | 0 .../libsnes}/bsnes/nall/stream/stream.hpp | 0 .../libsnes}/bsnes/nall/stream/zip.hpp | 0 .../libsnes}/bsnes/nall/string.hpp | 0 .../libsnes}/bsnes/nall/string/base.hpp | 0 .../libsnes}/bsnes/nall/string/bml.hpp | 0 .../libsnes}/bsnes/nall/string/bsv.hpp | 0 .../libsnes}/bsnes/nall/string/cast.hpp | 0 .../libsnes}/bsnes/nall/string/compare.hpp | 0 .../libsnes}/bsnes/nall/string/convert.hpp | 0 .../libsnes}/bsnes/nall/string/core.hpp | 0 .../libsnes}/bsnes/nall/string/cstring.hpp | 0 .../libsnes}/bsnes/nall/string/filename.hpp | 0 .../bsnes/nall/string/math-fixed-point.hpp | 0 .../bsnes/nall/string/math-floating-point.hpp | 0 .../libsnes}/bsnes/nall/string/platform.hpp | 0 .../libsnes}/bsnes/nall/string/replace.hpp | 0 .../libsnes}/bsnes/nall/string/split.hpp | 0 .../libsnes}/bsnes/nall/string/strm.hpp | 0 .../libsnes}/bsnes/nall/string/strpos.hpp | 0 .../libsnes}/bsnes/nall/string/trim.hpp | 0 .../libsnes}/bsnes/nall/string/utf8.hpp | 0 .../libsnes}/bsnes/nall/string/utility.hpp | 0 .../libsnes}/bsnes/nall/string/variadic.hpp | 0 .../libsnes}/bsnes/nall/string/wildcard.hpp | 0 .../libsnes}/bsnes/nall/string/wrapper.hpp | 0 .../libsnes}/bsnes/nall/string/xml-legacy.hpp | 0 .../libsnes}/bsnes/nall/string/xml.hpp | 0 .../libsnes}/bsnes/nall/type_traits.hpp | 0 .../libsnes}/bsnes/nall/ups.hpp | 0 .../libsnes}/bsnes/nall/utility.hpp | 0 .../libsnes}/bsnes/nall/varint.hpp | 0 .../libsnes}/bsnes/nall/vector.hpp | 0 .../libsnes}/bsnes/nall/windows/detour.hpp | 0 .../libsnes}/bsnes/nall/windows/launcher.hpp | 0 .../libsnes}/bsnes/nall/windows/utf8.hpp | 0 .../libsnes}/bsnes/nall/xorg/guard.hpp | 0 .../libsnes}/bsnes/nall/xorg/xorg.hpp | 0 .../libsnes}/bsnes/nall/zip.hpp | 0 .../libsnes}/bsnes/snes/alt/cpu/cpu.cpp | 0 .../libsnes}/bsnes/snes/alt/cpu/cpu.hpp | 0 .../libsnes}/bsnes/snes/alt/cpu/dma.cpp | 0 .../libsnes}/bsnes/snes/alt/cpu/memory.cpp | 0 .../libsnes}/bsnes/snes/alt/cpu/mmio.cpp | 0 .../bsnes/snes/alt/cpu/serialization.cpp | 0 .../libsnes}/bsnes/snes/alt/cpu/timing.cpp | 0 .../libsnes}/bsnes/snes/alt/dsp/SPC_DSP.cpp | 0 .../libsnes}/bsnes/snes/alt/dsp/SPC_DSP.h | 0 .../bsnes/snes/alt/dsp/blargg_common.h | 0 .../bsnes/snes/alt/dsp/blargg_config.h | 0 .../bsnes/snes/alt/dsp/blargg_endian.h | 0 .../bsnes/snes/alt/dsp/blargg_source.h | 0 .../libsnes}/bsnes/snes/alt/dsp/dsp.cpp | 0 .../libsnes}/bsnes/snes/alt/dsp/dsp.hpp | 0 .../bsnes/snes/alt/dsp/serialization.cpp | 0 .../alt/ppu-compatibility/memory/memory.cpp | 0 .../alt/ppu-compatibility/memory/memory.hpp | 0 .../snes/alt/ppu-compatibility/mmio/mmio.cpp | 0 .../snes/alt/ppu-compatibility/mmio/mmio.hpp | 0 .../bsnes/snes/alt/ppu-compatibility/ppu.cpp | 0 .../bsnes/snes/alt/ppu-compatibility/ppu.hpp | 156 +- .../alt/ppu-compatibility/render/addsub.cpp | 0 .../snes/alt/ppu-compatibility/render/bg.cpp | 0 .../alt/ppu-compatibility/render/cache.cpp | 0 .../alt/ppu-compatibility/render/line.cpp | 0 .../alt/ppu-compatibility/render/mode7.cpp | 0 .../snes/alt/ppu-compatibility/render/oam.cpp | 0 .../alt/ppu-compatibility/render/render.cpp | 0 .../alt/ppu-compatibility/render/render.hpp | 0 .../alt/ppu-compatibility/render/windows.cpp | 0 .../alt/ppu-compatibility/serialization.cpp | 416 +++--- .../ppu-performance/background/background.cpp | 0 .../ppu-performance/background/background.hpp | 0 .../alt/ppu-performance/background/mode7.cpp | 0 .../snes/alt/ppu-performance/cache/cache.cpp | 0 .../snes/alt/ppu-performance/cache/cache.hpp | 0 .../snes/alt/ppu-performance/mmio/mmio.cpp | 0 .../snes/alt/ppu-performance/mmio/mmio.hpp | 0 .../bsnes/snes/alt/ppu-performance/ppu.cpp | 0 .../bsnes/snes/alt/ppu-performance/ppu.hpp | 0 .../alt/ppu-performance/screen/screen.cpp | 0 .../alt/ppu-performance/screen/screen.hpp | 0 .../alt/ppu-performance/serialization.cpp | 0 .../alt/ppu-performance/sprite/sprite.cpp | 0 .../alt/ppu-performance/sprite/sprite.hpp | 0 .../alt/ppu-performance/window/window.cpp | 0 .../alt/ppu-performance/window/window.hpp | 0 .../bsnes/snes/alt/smp/algorithms.cpp | 0 .../libsnes}/bsnes/snes/alt/smp/core.cpp | 0 .../libsnes}/bsnes/snes/alt/smp/core/cc.sh | 0 .../bsnes/snes/alt/smp/core/generate.cpp | 0 .../bsnes/snes/alt/smp/core/op_misc.b | 326 ++--- .../bsnes/snes/alt/smp/core/op_misc.cpp | 0 .../libsnes}/bsnes/snes/alt/smp/core/op_mov.b | 434 +++--- .../bsnes/snes/alt/smp/core/op_mov.cpp | 0 .../libsnes}/bsnes/snes/alt/smp/core/op_pc.b | 358 ++--- .../bsnes/snes/alt/smp/core/op_pc.cpp | 0 .../bsnes/snes/alt/smp/core/op_read.b | 410 +++--- .../bsnes/snes/alt/smp/core/op_read.cpp | 0 .../libsnes}/bsnes/snes/alt/smp/core/op_rmw.b | 148 +- .../bsnes/snes/alt/smp/core/op_rmw.cpp | 0 .../bsnes/snes/alt/smp/core/opcycle_misc.cpp | 0 .../bsnes/snes/alt/smp/core/opcycle_mov.cpp | 0 .../bsnes/snes/alt/smp/core/opcycle_pc.cpp | 0 .../bsnes/snes/alt/smp/core/opcycle_read.cpp | 0 .../bsnes/snes/alt/smp/core/opcycle_rmw.cpp | 0 .../bsnes/snes/alt/smp/disassembler.cpp | 0 .../libsnes}/bsnes/snes/alt/smp/iplrom.cpp | 0 .../libsnes}/bsnes/snes/alt/smp/memory.cpp | 0 .../libsnes}/bsnes/snes/alt/smp/smp.cpp | 0 .../libsnes}/bsnes/snes/alt/smp/smp.hpp | 0 .../libsnes}/bsnes/snes/alt/smp/timing.cpp | 0 .../bsnes/snes/cartridge/cartridge.cpp | 0 .../bsnes/snes/cartridge/cartridge.hpp | 0 .../libsnes}/bsnes/snes/cartridge/markup.cpp | 0 .../bsnes/snes/cartridge/serialization.cpp | 0 .../libsnes}/bsnes/snes/cheat/cheat.cpp | 0 .../libsnes}/bsnes/snes/cheat/cheat.hpp | 0 .../bsnes/snes/chip/armdsp/armdsp.cpp | 0 .../bsnes/snes/chip/armdsp/armdsp.hpp | 0 .../bsnes/snes/chip/armdsp/disassembler.cpp | 0 .../bsnes/snes/chip/armdsp/memory.cpp | 0 .../bsnes/snes/chip/armdsp/opcodes.cpp | 0 .../bsnes/snes/chip/armdsp/registers.hpp | 0 .../bsnes/snes/chip/armdsp/serialization.cpp | 0 .../libsnes}/bsnes/snes/chip/bsx/bsx.cpp | 0 .../libsnes}/bsnes/snes/chip/bsx/bsx.hpp | 0 .../snes/chip/bsx/cartridge/cartridge.cpp | 0 .../snes/chip/bsx/cartridge/cartridge.hpp | 0 .../bsnes/snes/chip/bsx/flash/flash.cpp | 0 .../bsnes/snes/chip/bsx/flash/flash.hpp | 0 .../snes/chip/bsx/satellaview/satellaview.cpp | 14 +- .../snes/chip/bsx/satellaview/satellaview.hpp | 0 .../libsnes}/bsnes/snes/chip/chip.hpp | 0 .../bsnes/snes/chip/hitachidsp/hitachidsp.cpp | 164 +-- .../bsnes/snes/chip/hitachidsp/hitachidsp.hpp | 0 .../bsnes/snes/chip/hitachidsp/memory.cpp | 0 .../bsnes/snes/chip/hitachidsp/opcodes.cpp | 0 .../bsnes/snes/chip/hitachidsp/registers.cpp | 0 .../bsnes/snes/chip/hitachidsp/registers.hpp | 0 .../snes/chip/hitachidsp/serialization.cpp | 0 .../libsnes}/bsnes/snes/chip/icd2/icd2.cpp | 0 .../libsnes}/bsnes/snes/chip/icd2/icd2.hpp | 0 .../snes/chip/icd2/interface/interface.cpp | 0 .../snes/chip/icd2/interface/interface.hpp | 0 .../bsnes/snes/chip/icd2/mmio/mmio.cpp | 0 .../bsnes/snes/chip/icd2/mmio/mmio.hpp | 0 .../bsnes/snes/chip/icd2/serialization.cpp | 0 .../libsnes}/bsnes/snes/chip/link/link.cpp | 0 .../libsnes}/bsnes/snes/chip/link/link.hpp | 0 .../libsnes}/bsnes/snes/chip/msu1/msu1.cpp | 0 .../libsnes}/bsnes/snes/chip/msu1/msu1.hpp | 0 .../bsnes/snes/chip/msu1/serialization.cpp | 0 .../bsnes/snes/chip/necdsp/disassembler.cpp | 0 .../bsnes/snes/chip/necdsp/memory.cpp | 0 .../bsnes/snes/chip/necdsp/necdsp.cpp | 0 .../bsnes/snes/chip/necdsp/necdsp.hpp | 0 .../bsnes/snes/chip/necdsp/registers.hpp | 0 .../bsnes/snes/chip/necdsp/serialization.cpp | 0 .../libsnes}/bsnes/snes/chip/nss/nss.cpp | 0 .../libsnes}/bsnes/snes/chip/nss/nss.hpp | 0 .../libsnes}/bsnes/snes/chip/obc1/obc1.cpp | 0 .../libsnes}/bsnes/snes/chip/obc1/obc1.hpp | 0 .../bsnes/snes/chip/obc1/serialization.cpp | 0 .../libsnes}/bsnes/snes/chip/sa1/bus/bus.cpp | 0 .../libsnes}/bsnes/snes/chip/sa1/bus/bus.hpp | 0 .../libsnes}/bsnes/snes/chip/sa1/dma/dma.cpp | 0 .../libsnes}/bsnes/snes/chip/sa1/dma/dma.hpp | 0 .../bsnes/snes/chip/sa1/memory/memory.cpp | 0 .../bsnes/snes/chip/sa1/memory/memory.hpp | 0 .../bsnes/snes/chip/sa1/mmio/mmio.cpp | 0 .../bsnes/snes/chip/sa1/mmio/mmio.hpp | 0 .../libsnes}/bsnes/snes/chip/sa1/sa1.cpp | 0 .../libsnes}/bsnes/snes/chip/sa1/sa1.hpp | 0 .../bsnes/snes/chip/sa1/serialization.cpp | 0 .../libsnes}/bsnes/snes/chip/sdd1/decomp.cpp | 0 .../libsnes}/bsnes/snes/chip/sdd1/decomp.hpp | 0 .../libsnes}/bsnes/snes/chip/sdd1/sdd1.cpp | 0 .../libsnes}/bsnes/snes/chip/sdd1/sdd1.hpp | 0 .../bsnes/snes/chip/sdd1/serialization.cpp | 0 .../bsnes/snes/chip/spc7110/decomp.cpp | 0 .../bsnes/snes/chip/spc7110/decomp.hpp | 0 .../bsnes/snes/chip/spc7110/serialization.cpp | 0 .../bsnes/snes/chip/spc7110/spc7110.cpp | 14 +- .../bsnes/snes/chip/spc7110/spc7110.hpp | 0 .../bsnes/snes/chip/srtc/serialization.cpp | 0 .../libsnes}/bsnes/snes/chip/srtc/srtc.cpp | 14 +- .../libsnes}/bsnes/snes/chip/srtc/srtc.hpp | 0 .../snes/chip/sufamiturbo/serialization.cpp | 0 .../snes/chip/sufamiturbo/sufamiturbo.cpp | 0 .../snes/chip/sufamiturbo/sufamiturbo.hpp | 0 .../bsnes/snes/chip/superfx/bus/bus.cpp | 0 .../bsnes/snes/chip/superfx/bus/bus.hpp | 0 .../bsnes/snes/chip/superfx/core/core.cpp | 0 .../bsnes/snes/chip/superfx/core/core.hpp | 0 .../snes/chip/superfx/core/opcode_table.cpp | 0 .../bsnes/snes/chip/superfx/core/opcodes.cpp | 0 .../snes/chip/superfx/core/registers.hpp | 0 .../bsnes/snes/chip/superfx/disasm/disasm.cpp | 0 .../bsnes/snes/chip/superfx/disasm/disasm.hpp | 0 .../bsnes/snes/chip/superfx/memory/memory.cpp | 0 .../bsnes/snes/chip/superfx/memory/memory.hpp | 0 .../bsnes/snes/chip/superfx/mmio/mmio.cpp | 0 .../bsnes/snes/chip/superfx/mmio/mmio.hpp | 0 .../bsnes/snes/chip/superfx/serialization.cpp | 0 .../bsnes/snes/chip/superfx/superfx.cpp | 0 .../bsnes/snes/chip/superfx/superfx.hpp | 0 .../bsnes/snes/chip/superfx/timing/timing.cpp | 0 .../bsnes/snes/chip/superfx/timing/timing.hpp | 0 .../libsnes}/bsnes/snes/config/config.cpp | 0 .../libsnes}/bsnes/snes/config/config.hpp | 0 .../bsnes/snes/controller/controller.cpp | 32 +- .../bsnes/snes/controller/controller.hpp | 28 +- .../bsnes/snes/controller/gamepad/gamepad.cpp | 38 +- .../bsnes/snes/controller/gamepad/gamepad.hpp | 14 +- .../snes/controller/justifier/justifier.cpp | 84 +- .../snes/controller/justifier/justifier.hpp | 14 +- .../bsnes/snes/controller/mouse/mouse.cpp | 80 +- .../bsnes/snes/controller/mouse/mouse.hpp | 20 +- .../snes/controller/multitap/multitap.cpp | 52 +- .../snes/controller/multitap/multitap.hpp | 18 +- .../snes/controller/superscope/superscope.cpp | 74 +- .../snes/controller/superscope/superscope.hpp | 14 +- .../bsnes/snes/controller/usart/usart.cpp | 0 .../bsnes/snes/controller/usart/usart.hpp | 0 .../bsnes/snes/cpu/core/algorithms.cpp | 0 .../libsnes}/bsnes/snes/cpu/core/core.cpp | 0 .../libsnes}/bsnes/snes/cpu/core/core.hpp | 0 .../cpu/core/disassembler/disassembler.cpp | 0 .../cpu/core/disassembler/disassembler.hpp | 0 .../libsnes}/bsnes/snes/cpu/core/memory.hpp | 0 .../bsnes/snes/cpu/core/opcode_misc.cpp | 0 .../bsnes/snes/cpu/core/opcode_pc.cpp | 0 .../bsnes/snes/cpu/core/opcode_read.cpp | 0 .../bsnes/snes/cpu/core/opcode_rmw.cpp | 0 .../bsnes/snes/cpu/core/opcode_write.cpp | 0 .../bsnes/snes/cpu/core/registers.hpp | 0 .../bsnes/snes/cpu/core/serialization.cpp | 0 .../libsnes}/bsnes/snes/cpu/core/table.cpp | 0 .../libsnes}/bsnes/snes/cpu/cpu.cpp | 360 ++--- .../libsnes}/bsnes/snes/cpu/cpu.hpp | 0 .../libsnes}/bsnes/snes/cpu/dma/dma.cpp | 0 .../libsnes}/bsnes/snes/cpu/dma/dma.hpp | 0 .../libsnes}/bsnes/snes/cpu/memory/memory.cpp | 0 .../libsnes}/bsnes/snes/cpu/memory/memory.hpp | 0 .../libsnes}/bsnes/snes/cpu/mmio/mmio.cpp | 0 .../libsnes}/bsnes/snes/cpu/mmio/mmio.hpp | 0 .../libsnes}/bsnes/snes/cpu/serialization.cpp | 0 .../libsnes}/bsnes/snes/cpu/timing/irq.cpp | 0 .../libsnes}/bsnes/snes/cpu/timing/joypad.cpp | 0 .../libsnes}/bsnes/snes/cpu/timing/timing.cpp | 0 .../libsnes}/bsnes/snes/cpu/timing/timing.hpp | 0 .../libsnes}/bsnes/snes/dsp/brr.cpp | 0 .../libsnes}/bsnes/snes/dsp/counter.cpp | 0 .../libsnes}/bsnes/snes/dsp/dsp.cpp | 0 .../libsnes}/bsnes/snes/dsp/dsp.hpp | 0 .../libsnes}/bsnes/snes/dsp/echo.cpp | 0 .../libsnes}/bsnes/snes/dsp/envelope.cpp | 0 .../libsnes}/bsnes/snes/dsp/gaussian.cpp | 0 .../libsnes}/bsnes/snes/dsp/misc.cpp | 0 .../libsnes}/bsnes/snes/dsp/serialization.cpp | 0 .../libsnes}/bsnes/snes/dsp/voice.cpp | 0 .../bsnes/snes/interface/interface.cpp | 38 +- .../bsnes/snes/interface/interface.hpp | 16 +- .../bsnes/snes/memory/memory-inline.hpp | 0 .../libsnes}/bsnes/snes/memory/memory.cpp | 0 .../libsnes}/bsnes/snes/memory/memory.hpp | 0 .../bsnes/snes/ppu/background/background.cpp | 0 .../bsnes/snes/ppu/background/background.hpp | 0 .../bsnes/snes/ppu/background/mode7.cpp | 0 .../bsnes/snes/ppu/counter/counter-inline.hpp | 0 .../bsnes/snes/ppu/counter/counter.hpp | 0 .../libsnes}/bsnes/snes/ppu/mmio/mmio.cpp | 0 .../libsnes}/bsnes/snes/ppu/mmio/mmio.hpp | 0 .../libsnes}/bsnes/snes/ppu/ppu.cpp | 0 .../libsnes}/bsnes/snes/ppu/ppu.hpp | 0 .../libsnes}/bsnes/snes/ppu/screen/screen.cpp | 0 .../libsnes}/bsnes/snes/ppu/screen/screen.hpp | 0 .../libsnes}/bsnes/snes/ppu/serialization.cpp | 0 .../libsnes}/bsnes/snes/ppu/sprite/list.cpp | 0 .../libsnes}/bsnes/snes/ppu/sprite/sprite.cpp | 0 .../libsnes}/bsnes/snes/ppu/sprite/sprite.hpp | 0 .../libsnes}/bsnes/snes/ppu/window/window.cpp | 0 .../libsnes}/bsnes/snes/ppu/window/window.hpp | 0 .../libsnes}/bsnes/snes/profile-accuracy.hpp | 0 .../bsnes/snes/profile-compatibility.hpp | 0 .../bsnes/snes/profile-performance.hpp | 0 .../libsnes}/bsnes/snes/random/random.cpp | 0 .../libsnes}/bsnes/snes/random/random.hpp | 0 .../bsnes/snes/scheduler/scheduler.cpp | 0 .../bsnes/snes/scheduler/scheduler.hpp | 0 .../bsnes/snes/smp/core/algorithms.cpp | 0 .../libsnes}/bsnes/snes/smp/core/core.cpp | 544 +++---- .../libsnes}/bsnes/snes/smp/core/core.hpp | 192 +-- .../bsnes/snes/smp/core/disassembler.cpp | 0 .../libsnes}/bsnes/snes/smp/core/memory.hpp | 2 +- .../libsnes}/bsnes/snes/smp/core/opcodes.cpp | 0 .../bsnes/snes/smp/core/registers.hpp | 0 .../bsnes/snes/smp/core/serialization.cpp | 54 +- .../libsnes}/bsnes/snes/smp/iplrom.cpp | 0 .../libsnes}/bsnes/snes/smp/memory/memory.cpp | 0 .../libsnes}/bsnes/snes/smp/memory/memory.hpp | 0 .../libsnes}/bsnes/snes/smp/serialization.cpp | 0 .../libsnes}/bsnes/snes/smp/smp.cpp | 0 .../libsnes}/bsnes/snes/smp/smp.hpp | 124 +- .../libsnes}/bsnes/snes/smp/timing/timing.cpp | 124 +- .../libsnes}/bsnes/snes/smp/timing/timing.hpp | 0 .../libsnes}/bsnes/snes/snes.hpp | 0 .../libsnes}/bsnes/snes/system/audio.cpp | 0 .../libsnes}/bsnes/snes/system/audio.hpp | 0 .../libsnes}/bsnes/snes/system/input.cpp | 44 +- .../libsnes}/bsnes/snes/system/input.hpp | 14 +- .../bsnes/snes/system/serialization.cpp | 82 +- .../libsnes}/bsnes/snes/system/system.cpp | 14 +- .../libsnes}/bsnes/snes/system/system.hpp | 0 .../libsnes}/bsnes/snes/system/video.cpp | 0 .../libsnes}/bsnes/snes/system/video.hpp | 0 .../libsnes}/bsnes/target-libsnes/libsnes.cpp | 14 +- .../libsnes}/bsnes/target-libsnes/libsnes.hpp | 0 .../bsnes/target-libsnes/libsnes_pwrap.cpp | 1270 ++++++++--------- .../libsnes}/libco_debugging/build.sh | 2 +- .../libsnes}/libco_debugging/libco.h | 0 .../libco_debugging/libco_win32threads.c | 276 ++-- .../libsnes}/libco_debugging/makefile | 4 +- ...01-Don-t-use-time-in-emulating-chips.patch | 168 +-- ...ve-controller-state-when-savestating.patch | 692 ++++----- ...ontend-to-control-random-number-seed.patch | 106 +- .../0004-Fix-mouse-polling.patch | 120 +- 471 files changed, 3923 insertions(+), 3833 deletions(-) rename {libsnes => waterbox/libsnes}/0.87 (100%) create mode 100644 waterbox/libsnes/Makefile rename {libsnes => waterbox/libsnes}/bsnes/base/base.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/base/base.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/apu/apu.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/apu/apu.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/apu/master/master.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/apu/master/master.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/apu/noise/noise.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/apu/noise/noise.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/apu/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/apu/square1/square1.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/apu/square1/square1.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/apu/square2/square2.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/apu/square2/square2.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/apu/wave/wave.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/apu/wave/wave.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/cartridge.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/cartridge.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/huc1/huc1.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/huc1/huc1.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/huc3/huc3.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/huc3/huc3.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/mbc0/mbc0.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/mbc0/mbc0.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/mbc1/mbc1.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/mbc1/mbc1.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/mbc2/mbc2.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/mbc2/mbc2.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/mbc3/mbc3.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/mbc3/mbc3.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/mbc5/mbc5.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/mbc5/mbc5.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/mmm01/mmm01.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/mmm01/mmm01.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cartridge/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cheat/cheat.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cheat/cheat.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cpu/core/core.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cpu/core/core.hpp (95%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cpu/core/disassembler.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cpu/core/registers.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cpu/core/table.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cpu/cpu.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cpu/cpu.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cpu/mmio/mmio.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cpu/mmio/mmio.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cpu/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cpu/timing/opcode.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cpu/timing/timing.cpp (95%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/cpu/timing/timing.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/gameboy.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/interface/interface.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/interface/interface.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/lcd/cgb.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/lcd/dmg.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/lcd/lcd.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/lcd/lcd.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/lcd/mmio/mmio.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/lcd/mmio/mmio.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/lcd/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/memory/memory.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/memory/memory.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/scheduler/scheduler.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/scheduler/scheduler.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/system/bootrom-cgb.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/system/bootrom-dmg.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/system/bootrom-sgb.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/system/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/system/system.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/system/system.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/video/video.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/gameboy/video/video.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/algorithm.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/any.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/array.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/atoi.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/base64.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/bit.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/bmp.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/bps/delta.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/bps/linear.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/bps/metadata.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/bps/patch.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/compositor.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/config.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/crc32.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/directory.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/dl.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/dsp.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/dsp/buffer.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/dsp/core.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/dsp/resample/average.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/dsp/resample/cosine.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/dsp/resample/cubic.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/dsp/resample/hermite.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/dsp/resample/lib/sinc.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/dsp/resample/linear.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/dsp/resample/nearest.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/dsp/resample/sinc.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/dsp/settings.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/endian.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/file.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/filemap.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/function.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/gameboy/cartridge.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/gzip.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/http.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/image.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/inflate.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/input.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/interpolation.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/intrinsics.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/ips.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/lzss.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/map.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/moduloarray.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/mosaic.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/mosaic/bitstream.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/mosaic/context.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/mosaic/parser.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/platform.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/png.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/priorityqueue.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/property.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/public_cast.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/random.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/reference_array.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/serial.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/serializer.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/sha256.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/snes/cartridge.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/snes/cpu.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/snes/smp.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/snes/usart.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/sort.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/stdint.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/stream.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/stream/auto.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/stream/file.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/stream/gzip.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/stream/http.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/stream/memory.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/stream/mmap.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/stream/stream.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/stream/zip.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/base.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/bml.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/bsv.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/cast.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/compare.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/convert.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/core.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/cstring.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/filename.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/math-fixed-point.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/math-floating-point.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/platform.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/replace.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/split.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/strm.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/strpos.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/trim.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/utf8.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/utility.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/variadic.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/wildcard.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/wrapper.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/xml-legacy.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/string/xml.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/type_traits.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/ups.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/utility.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/varint.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/vector.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/windows/detour.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/windows/launcher.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/windows/utf8.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/xorg/guard.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/xorg/xorg.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/nall/zip.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/cpu/cpu.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/cpu/cpu.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/cpu/dma.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/cpu/memory.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/cpu/mmio.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/cpu/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/cpu/timing.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/dsp/SPC_DSP.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/dsp/SPC_DSP.h (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/dsp/blargg_common.h (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/dsp/blargg_config.h (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/dsp/blargg_endian.h (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/dsp/blargg_source.h (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/dsp/dsp.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/dsp/dsp.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/dsp/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/memory/memory.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/memory/memory.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/mmio/mmio.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/mmio/mmio.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/ppu.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/ppu.hpp (95%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/render/addsub.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/render/bg.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/render/cache.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/render/line.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/render/mode7.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/render/oam.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/render/render.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/render/render.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/render/windows.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-compatibility/serialization.cpp (96%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/background/background.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/background/background.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/background/mode7.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/cache/cache.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/cache/cache.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/mmio/mmio.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/mmio/mmio.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/ppu.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/ppu.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/screen/screen.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/screen/screen.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/sprite/sprite.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/sprite/sprite.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/window/window.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/ppu-performance/window/window.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/algorithms.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/cc.sh (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/generate.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/op_misc.b (94%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/op_misc.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/op_mov.b (94%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/op_mov.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/op_pc.b (94%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/op_pc.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/op_read.b (95%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/op_read.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/op_rmw.b (94%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/op_rmw.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/opcycle_misc.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/opcycle_mov.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/opcycle_pc.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/opcycle_read.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/core/opcycle_rmw.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/disassembler.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/iplrom.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/memory.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/smp.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/smp.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/alt/smp/timing.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cartridge/cartridge.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cartridge/cartridge.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cartridge/markup.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cartridge/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cheat/cheat.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cheat/cheat.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/armdsp/armdsp.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/armdsp/armdsp.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/armdsp/disassembler.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/armdsp/memory.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/armdsp/opcodes.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/armdsp/registers.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/armdsp/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/bsx/bsx.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/bsx/bsx.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/bsx/cartridge/cartridge.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/bsx/cartridge/cartridge.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/bsx/flash/flash.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/bsx/flash/flash.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/bsx/satellaview/satellaview.cpp (99%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/bsx/satellaview/satellaview.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/chip.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/hitachidsp/hitachidsp.cpp (95%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/hitachidsp/hitachidsp.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/hitachidsp/memory.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/hitachidsp/opcodes.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/hitachidsp/registers.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/hitachidsp/registers.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/hitachidsp/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/icd2/icd2.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/icd2/icd2.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/icd2/interface/interface.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/icd2/interface/interface.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/icd2/mmio/mmio.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/icd2/mmio/mmio.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/icd2/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/link/link.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/link/link.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/msu1/msu1.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/msu1/msu1.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/msu1/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/necdsp/disassembler.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/necdsp/memory.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/necdsp/necdsp.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/necdsp/necdsp.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/necdsp/registers.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/necdsp/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/nss/nss.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/nss/nss.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/obc1/obc1.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/obc1/obc1.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/obc1/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sa1/bus/bus.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sa1/bus/bus.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sa1/dma/dma.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sa1/dma/dma.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sa1/memory/memory.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sa1/memory/memory.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sa1/mmio/mmio.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sa1/mmio/mmio.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sa1/sa1.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sa1/sa1.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sa1/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sdd1/decomp.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sdd1/decomp.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sdd1/sdd1.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sdd1/sdd1.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sdd1/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/spc7110/decomp.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/spc7110/decomp.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/spc7110/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/spc7110/spc7110.cpp (99%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/spc7110/spc7110.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/srtc/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/srtc/srtc.cpp (99%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/srtc/srtc.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sufamiturbo/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sufamiturbo/sufamiturbo.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/sufamiturbo/sufamiturbo.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/bus/bus.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/bus/bus.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/core/core.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/core/core.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/core/opcode_table.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/core/opcodes.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/core/registers.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/disasm/disasm.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/disasm/disasm.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/memory/memory.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/memory/memory.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/mmio/mmio.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/mmio/mmio.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/superfx.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/superfx.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/timing/timing.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/chip/superfx/timing/timing.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/config/config.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/config/config.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/controller/controller.cpp (98%) rename {libsnes => waterbox/libsnes}/bsnes/snes/controller/controller.hpp (98%) rename {libsnes => waterbox/libsnes}/bsnes/snes/controller/gamepad/gamepad.cpp (97%) rename {libsnes => waterbox/libsnes}/bsnes/snes/controller/gamepad/gamepad.hpp (96%) rename {libsnes => waterbox/libsnes}/bsnes/snes/controller/justifier/justifier.cpp (99%) rename {libsnes => waterbox/libsnes}/bsnes/snes/controller/justifier/justifier.hpp (98%) rename {libsnes => waterbox/libsnes}/bsnes/snes/controller/mouse/mouse.cpp (98%) rename {libsnes => waterbox/libsnes}/bsnes/snes/controller/mouse/mouse.hpp (95%) rename {libsnes => waterbox/libsnes}/bsnes/snes/controller/multitap/multitap.cpp (98%) rename {libsnes => waterbox/libsnes}/bsnes/snes/controller/multitap/multitap.hpp (96%) rename {libsnes => waterbox/libsnes}/bsnes/snes/controller/superscope/superscope.cpp (99%) rename {libsnes => waterbox/libsnes}/bsnes/snes/controller/superscope/superscope.hpp (98%) rename {libsnes => waterbox/libsnes}/bsnes/snes/controller/usart/usart.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/controller/usart/usart.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/core/algorithms.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/core/core.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/core/core.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/core/disassembler/disassembler.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/core/disassembler/disassembler.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/core/memory.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/core/opcode_misc.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/core/opcode_pc.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/core/opcode_read.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/core/opcode_rmw.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/core/opcode_write.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/core/registers.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/core/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/core/table.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/cpu.cpp (96%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/cpu.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/dma/dma.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/dma/dma.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/memory/memory.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/memory/memory.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/mmio/mmio.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/mmio/mmio.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/timing/irq.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/timing/joypad.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/timing/timing.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/cpu/timing/timing.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/dsp/brr.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/dsp/counter.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/dsp/dsp.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/dsp/dsp.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/dsp/echo.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/dsp/envelope.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/dsp/gaussian.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/dsp/misc.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/dsp/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/dsp/voice.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/interface/interface.cpp (97%) rename {libsnes => waterbox/libsnes}/bsnes/snes/interface/interface.hpp (99%) rename {libsnes => waterbox/libsnes}/bsnes/snes/memory/memory-inline.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/memory/memory.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/memory/memory.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/background/background.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/background/background.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/background/mode7.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/counter/counter-inline.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/counter/counter.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/mmio/mmio.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/mmio/mmio.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/ppu.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/ppu.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/screen/screen.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/screen/screen.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/sprite/list.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/sprite/sprite.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/sprite/sprite.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/window/window.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/ppu/window/window.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/profile-accuracy.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/profile-compatibility.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/profile-performance.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/random/random.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/random/random.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/scheduler/scheduler.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/scheduler/scheduler.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/core/algorithms.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/core/core.cpp (97%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/core/core.hpp (96%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/core/disassembler.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/core/memory.hpp (99%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/core/opcodes.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/core/registers.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/core/serialization.cpp (94%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/iplrom.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/memory/memory.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/memory/memory.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/serialization.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/smp.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/smp.hpp (94%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/timing/timing.cpp (96%) rename {libsnes => waterbox/libsnes}/bsnes/snes/smp/timing/timing.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/snes.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/system/audio.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/system/audio.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/system/input.cpp (98%) rename {libsnes => waterbox/libsnes}/bsnes/snes/system/input.hpp (99%) rename {libsnes => waterbox/libsnes}/bsnes/snes/system/serialization.cpp (98%) rename {libsnes => waterbox/libsnes}/bsnes/snes/system/system.cpp (99%) rename {libsnes => waterbox/libsnes}/bsnes/snes/system/system.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/system/video.cpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/snes/system/video.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/target-libsnes/libsnes.cpp (99%) rename {libsnes => waterbox/libsnes}/bsnes/target-libsnes/libsnes.hpp (100%) rename {libsnes => waterbox/libsnes}/bsnes/target-libsnes/libsnes_pwrap.cpp (96%) rename {libsnes => waterbox/libsnes}/libco_debugging/build.sh (94%) rename {libsnes => waterbox/libsnes}/libco_debugging/libco.h (100%) rename {libsnes => waterbox/libsnes}/libco_debugging/libco_win32threads.c (97%) rename {libsnes => waterbox/libsnes}/libco_debugging/makefile (97%) rename {libsnes => waterbox/libsnes}/lsnes_patches/0001-Don-t-use-time-in-emulating-chips.patch (97%) rename {libsnes => waterbox/libsnes}/lsnes_patches/0002-Save-controller-state-when-savestating.patch (97%) rename {libsnes => waterbox/libsnes}/lsnes_patches/0003-Allow-frontend-to-control-random-number-seed.patch (96%) rename {libsnes => waterbox/libsnes}/lsnes_patches/0004-Fix-mouse-polling.patch (97%) diff --git a/libsnes/0.87 b/waterbox/libsnes/0.87 similarity index 100% rename from libsnes/0.87 rename to waterbox/libsnes/0.87 diff --git a/waterbox/libsnes/Makefile b/waterbox/libsnes/Makefile new file mode 100644 index 0000000000..7958a74f03 --- /dev/null +++ b/waterbox/libsnes/Makefile @@ -0,0 +1,90 @@ +CC = x86_64-nt64-midipix-g++ + + # -Werror=pointer-to-int-cast -Werror=int-to-pointer-cast + #-std=c99 -fomit-frame-pointer -fvisibility=hidden + #-DPROFILE_PERFORMANCE +CCFLAGS:= -DHOOKS -DBIZHAWK -DPROFILE_COMPATIBILITY -DGAMEBOY \ + -Werror=pointer-to-int-cast -Werror=int-to-pointer-cast \ + -I../emulibc -I../libco \ + -Wall -Werror=implicit-function-declaration \ + -fno-exceptions -fno-rtti -fvisibility=hidden \ + -std=c++0x \ + -O0 -g + +TARGET = libsnes.wbx + +LDFLAGS = -Wl,--dynamicbase,--export-all-symbols + +ROOT_DIR:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) +SRCS:= \ +# $(ROOT_DIR)/bsnes/snes/alt/cpu/cpu.cpp \ #perf only +# $(ROOT_DIR)/bsnes/snes/alt/ppu-performance/ppu.cpp \ #perf only +# $(ROOT_DIR)/bsnes/snes/alt/smp/smp.cpp \ # perf only + $(ROOT_DIR)/bsnes/snes/alt/ppu-compatibility/ppu.cpp \ #compat only + $(ROOT_DIR)/bsnes/base/base.cpp \ + $(ROOT_DIR)/bsnes/gameboy/apu/apu.cpp \ + $(ROOT_DIR)/bsnes/gameboy/cartridge/cartridge.cpp \ + $(ROOT_DIR)/bsnes/gameboy/cheat/cheat.cpp \ + $(ROOT_DIR)/bsnes/gameboy/cpu/cpu.cpp \ + $(ROOT_DIR)/bsnes/gameboy/interface/interface.cpp \ + $(ROOT_DIR)/bsnes/gameboy/lcd/lcd.cpp \ + $(ROOT_DIR)/bsnes/gameboy/memory/memory.cpp \ + $(ROOT_DIR)/bsnes/gameboy/scheduler/scheduler.cpp \ + $(ROOT_DIR)/bsnes/gameboy/system/system.cpp \ + $(ROOT_DIR)/bsnes/gameboy/video/video.cpp \ + $(ROOT_DIR)/bsnes/snes/cartridge/cartridge.cpp \ + $(ROOT_DIR)/bsnes/snes/cheat/cheat.cpp \ + $(ROOT_DIR)/bsnes/snes/chip/armdsp/armdsp.cpp \ + $(ROOT_DIR)/bsnes/snes/chip/bsx/bsx.cpp \ + $(ROOT_DIR)/bsnes/snes/chip/hitachidsp/hitachidsp.cpp \ + $(ROOT_DIR)/bsnes/snes/chip/icd2/icd2.cpp \ + $(ROOT_DIR)/bsnes/snes/chip/link/link.cpp \ + $(ROOT_DIR)/bsnes/snes/chip/msu1/msu1.cpp \ + $(ROOT_DIR)/bsnes/snes/chip/necdsp/necdsp.cpp \ + $(ROOT_DIR)/bsnes/snes/chip/nss/nss.cpp \ + $(ROOT_DIR)/bsnes/snes/chip/obc1/obc1.cpp \ + $(ROOT_DIR)/bsnes/snes/chip/sa1/sa1.cpp \ + $(ROOT_DIR)/bsnes/snes/chip/sdd1/sdd1.cpp \ + $(ROOT_DIR)/bsnes/snes/chip/spc7110/spc7110.cpp \ + $(ROOT_DIR)/bsnes/snes/chip/srtc/srtc.cpp \ + $(ROOT_DIR)/bsnes/snes/chip/sufamiturbo/sufamiturbo.cpp \ + $(ROOT_DIR)/bsnes/snes/chip/superfx/superfx.cpp \ + $(ROOT_DIR)/bsnes/snes/config/config.cpp \ + $(ROOT_DIR)/bsnes/snes/controller/controller.cpp \ + $(ROOT_DIR)/bsnes/snes/cpu/core/core.cpp \ + $(ROOT_DIR)/bsnes/snes/interface/interface.cpp \ + $(ROOT_DIR)/bsnes/snes/memory/memory.cpp \ + $(ROOT_DIR)/bsnes/snes/smp/core/core.cpp \ + $(ROOT_DIR)/bsnes/snes/system/system.cpp \ + $(ROOT_DIR)/bsnes/target-libsnes/libsnes.cpp \ + $(ROOT_DIR)/bsnes/target-libsnes/libsnes_pwrap.cpp + +OBJ_DIR:=$(ROOT_DIR)/obj + +_OBJS:=$(SRCS:.cpp=.o) +OBJS:=$(patsubst $(ROOT_DIR)%,$(OBJ_DIR)%,$(_OBJS)) + +$(OBJ_DIR)/%.o: $(ROOT_DIR)/%.cpp + @mkdir -p $(@D) + @$(CC) -c -o $@ $< $(CCFLAGS) + +all: $(TARGET) + +.PHONY: clean all + +$(TARGET).in: $(OBJS) + @$(CC) -o $@ $(LDFLAGS) $(CCFLAGS) $(OBJS) ../emulibc/libemuhost.so ../libco/libco.so + +$(TARGET): $(TARGET).in +# strip $< -o $@ -R /4 -R /14 -R /29 -R /41 -R /55 -R /67 -R /78 -R /89 -R /104 + cp $< $@ + +clean: + rm -rf $(OBJ_DIR) + rm -f $(TARGET).in + rm -f $(TARGET) + +print-%: + @echo $* = $($*) +#install: +# $(CP) $(TARGET) $(DEST_$(ARCH)) diff --git a/libsnes/bsnes/base/base.cpp b/waterbox/libsnes/bsnes/base/base.cpp similarity index 100% rename from libsnes/bsnes/base/base.cpp rename to waterbox/libsnes/bsnes/base/base.cpp diff --git a/libsnes/bsnes/base/base.hpp b/waterbox/libsnes/bsnes/base/base.hpp similarity index 100% rename from libsnes/bsnes/base/base.hpp rename to waterbox/libsnes/bsnes/base/base.hpp diff --git a/libsnes/bsnes/gameboy/apu/apu.cpp b/waterbox/libsnes/bsnes/gameboy/apu/apu.cpp similarity index 100% rename from libsnes/bsnes/gameboy/apu/apu.cpp rename to waterbox/libsnes/bsnes/gameboy/apu/apu.cpp diff --git a/libsnes/bsnes/gameboy/apu/apu.hpp b/waterbox/libsnes/bsnes/gameboy/apu/apu.hpp similarity index 100% rename from libsnes/bsnes/gameboy/apu/apu.hpp rename to waterbox/libsnes/bsnes/gameboy/apu/apu.hpp diff --git a/libsnes/bsnes/gameboy/apu/master/master.cpp b/waterbox/libsnes/bsnes/gameboy/apu/master/master.cpp similarity index 100% rename from libsnes/bsnes/gameboy/apu/master/master.cpp rename to waterbox/libsnes/bsnes/gameboy/apu/master/master.cpp diff --git a/libsnes/bsnes/gameboy/apu/master/master.hpp b/waterbox/libsnes/bsnes/gameboy/apu/master/master.hpp similarity index 100% rename from libsnes/bsnes/gameboy/apu/master/master.hpp rename to waterbox/libsnes/bsnes/gameboy/apu/master/master.hpp diff --git a/libsnes/bsnes/gameboy/apu/noise/noise.cpp b/waterbox/libsnes/bsnes/gameboy/apu/noise/noise.cpp similarity index 100% rename from libsnes/bsnes/gameboy/apu/noise/noise.cpp rename to waterbox/libsnes/bsnes/gameboy/apu/noise/noise.cpp diff --git a/libsnes/bsnes/gameboy/apu/noise/noise.hpp b/waterbox/libsnes/bsnes/gameboy/apu/noise/noise.hpp similarity index 100% rename from libsnes/bsnes/gameboy/apu/noise/noise.hpp rename to waterbox/libsnes/bsnes/gameboy/apu/noise/noise.hpp diff --git a/libsnes/bsnes/gameboy/apu/serialization.cpp b/waterbox/libsnes/bsnes/gameboy/apu/serialization.cpp similarity index 100% rename from libsnes/bsnes/gameboy/apu/serialization.cpp rename to waterbox/libsnes/bsnes/gameboy/apu/serialization.cpp diff --git a/libsnes/bsnes/gameboy/apu/square1/square1.cpp b/waterbox/libsnes/bsnes/gameboy/apu/square1/square1.cpp similarity index 100% rename from libsnes/bsnes/gameboy/apu/square1/square1.cpp rename to waterbox/libsnes/bsnes/gameboy/apu/square1/square1.cpp diff --git a/libsnes/bsnes/gameboy/apu/square1/square1.hpp b/waterbox/libsnes/bsnes/gameboy/apu/square1/square1.hpp similarity index 100% rename from libsnes/bsnes/gameboy/apu/square1/square1.hpp rename to waterbox/libsnes/bsnes/gameboy/apu/square1/square1.hpp diff --git a/libsnes/bsnes/gameboy/apu/square2/square2.cpp b/waterbox/libsnes/bsnes/gameboy/apu/square2/square2.cpp similarity index 100% rename from libsnes/bsnes/gameboy/apu/square2/square2.cpp rename to waterbox/libsnes/bsnes/gameboy/apu/square2/square2.cpp diff --git a/libsnes/bsnes/gameboy/apu/square2/square2.hpp b/waterbox/libsnes/bsnes/gameboy/apu/square2/square2.hpp similarity index 100% rename from libsnes/bsnes/gameboy/apu/square2/square2.hpp rename to waterbox/libsnes/bsnes/gameboy/apu/square2/square2.hpp diff --git a/libsnes/bsnes/gameboy/apu/wave/wave.cpp b/waterbox/libsnes/bsnes/gameboy/apu/wave/wave.cpp similarity index 100% rename from libsnes/bsnes/gameboy/apu/wave/wave.cpp rename to waterbox/libsnes/bsnes/gameboy/apu/wave/wave.cpp diff --git a/libsnes/bsnes/gameboy/apu/wave/wave.hpp b/waterbox/libsnes/bsnes/gameboy/apu/wave/wave.hpp similarity index 100% rename from libsnes/bsnes/gameboy/apu/wave/wave.hpp rename to waterbox/libsnes/bsnes/gameboy/apu/wave/wave.hpp diff --git a/libsnes/bsnes/gameboy/cartridge/cartridge.cpp b/waterbox/libsnes/bsnes/gameboy/cartridge/cartridge.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/cartridge.cpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/cartridge.cpp diff --git a/libsnes/bsnes/gameboy/cartridge/cartridge.hpp b/waterbox/libsnes/bsnes/gameboy/cartridge/cartridge.hpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/cartridge.hpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/cartridge.hpp diff --git a/libsnes/bsnes/gameboy/cartridge/huc1/huc1.cpp b/waterbox/libsnes/bsnes/gameboy/cartridge/huc1/huc1.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/huc1/huc1.cpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/huc1/huc1.cpp diff --git a/libsnes/bsnes/gameboy/cartridge/huc1/huc1.hpp b/waterbox/libsnes/bsnes/gameboy/cartridge/huc1/huc1.hpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/huc1/huc1.hpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/huc1/huc1.hpp diff --git a/libsnes/bsnes/gameboy/cartridge/huc3/huc3.cpp b/waterbox/libsnes/bsnes/gameboy/cartridge/huc3/huc3.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/huc3/huc3.cpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/huc3/huc3.cpp diff --git a/libsnes/bsnes/gameboy/cartridge/huc3/huc3.hpp b/waterbox/libsnes/bsnes/gameboy/cartridge/huc3/huc3.hpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/huc3/huc3.hpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/huc3/huc3.hpp diff --git a/libsnes/bsnes/gameboy/cartridge/mbc0/mbc0.cpp b/waterbox/libsnes/bsnes/gameboy/cartridge/mbc0/mbc0.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/mbc0/mbc0.cpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/mbc0/mbc0.cpp diff --git a/libsnes/bsnes/gameboy/cartridge/mbc0/mbc0.hpp b/waterbox/libsnes/bsnes/gameboy/cartridge/mbc0/mbc0.hpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/mbc0/mbc0.hpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/mbc0/mbc0.hpp diff --git a/libsnes/bsnes/gameboy/cartridge/mbc1/mbc1.cpp b/waterbox/libsnes/bsnes/gameboy/cartridge/mbc1/mbc1.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/mbc1/mbc1.cpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/mbc1/mbc1.cpp diff --git a/libsnes/bsnes/gameboy/cartridge/mbc1/mbc1.hpp b/waterbox/libsnes/bsnes/gameboy/cartridge/mbc1/mbc1.hpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/mbc1/mbc1.hpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/mbc1/mbc1.hpp diff --git a/libsnes/bsnes/gameboy/cartridge/mbc2/mbc2.cpp b/waterbox/libsnes/bsnes/gameboy/cartridge/mbc2/mbc2.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/mbc2/mbc2.cpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/mbc2/mbc2.cpp diff --git a/libsnes/bsnes/gameboy/cartridge/mbc2/mbc2.hpp b/waterbox/libsnes/bsnes/gameboy/cartridge/mbc2/mbc2.hpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/mbc2/mbc2.hpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/mbc2/mbc2.hpp diff --git a/libsnes/bsnes/gameboy/cartridge/mbc3/mbc3.cpp b/waterbox/libsnes/bsnes/gameboy/cartridge/mbc3/mbc3.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/mbc3/mbc3.cpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/mbc3/mbc3.cpp diff --git a/libsnes/bsnes/gameboy/cartridge/mbc3/mbc3.hpp b/waterbox/libsnes/bsnes/gameboy/cartridge/mbc3/mbc3.hpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/mbc3/mbc3.hpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/mbc3/mbc3.hpp diff --git a/libsnes/bsnes/gameboy/cartridge/mbc5/mbc5.cpp b/waterbox/libsnes/bsnes/gameboy/cartridge/mbc5/mbc5.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/mbc5/mbc5.cpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/mbc5/mbc5.cpp diff --git a/libsnes/bsnes/gameboy/cartridge/mbc5/mbc5.hpp b/waterbox/libsnes/bsnes/gameboy/cartridge/mbc5/mbc5.hpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/mbc5/mbc5.hpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/mbc5/mbc5.hpp diff --git a/libsnes/bsnes/gameboy/cartridge/mmm01/mmm01.cpp b/waterbox/libsnes/bsnes/gameboy/cartridge/mmm01/mmm01.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/mmm01/mmm01.cpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/mmm01/mmm01.cpp diff --git a/libsnes/bsnes/gameboy/cartridge/mmm01/mmm01.hpp b/waterbox/libsnes/bsnes/gameboy/cartridge/mmm01/mmm01.hpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/mmm01/mmm01.hpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/mmm01/mmm01.hpp diff --git a/libsnes/bsnes/gameboy/cartridge/serialization.cpp b/waterbox/libsnes/bsnes/gameboy/cartridge/serialization.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cartridge/serialization.cpp rename to waterbox/libsnes/bsnes/gameboy/cartridge/serialization.cpp diff --git a/libsnes/bsnes/gameboy/cheat/cheat.cpp b/waterbox/libsnes/bsnes/gameboy/cheat/cheat.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cheat/cheat.cpp rename to waterbox/libsnes/bsnes/gameboy/cheat/cheat.cpp diff --git a/libsnes/bsnes/gameboy/cheat/cheat.hpp b/waterbox/libsnes/bsnes/gameboy/cheat/cheat.hpp similarity index 100% rename from libsnes/bsnes/gameboy/cheat/cheat.hpp rename to waterbox/libsnes/bsnes/gameboy/cheat/cheat.hpp diff --git a/libsnes/bsnes/gameboy/cpu/core/core.cpp b/waterbox/libsnes/bsnes/gameboy/cpu/core/core.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cpu/core/core.cpp rename to waterbox/libsnes/bsnes/gameboy/cpu/core/core.cpp diff --git a/libsnes/bsnes/gameboy/cpu/core/core.hpp b/waterbox/libsnes/bsnes/gameboy/cpu/core/core.hpp similarity index 95% rename from libsnes/bsnes/gameboy/cpu/core/core.hpp rename to waterbox/libsnes/bsnes/gameboy/cpu/core/core.hpp index 5d94892cb5..f239f2ff04 100644 --- a/libsnes/bsnes/gameboy/cpu/core/core.hpp +++ b/waterbox/libsnes/bsnes/gameboy/cpu/core/core.hpp @@ -1,146 +1,146 @@ -#include "registers.hpp" -void (CPU::*opcode_table[256])(); -void (CPU::*opcode_table_cb[256])(); -void initialize_opcode_table(); - -void op_xx(); -void op_cb(); -uint8 op_fetch(); - -//8-bit load commands -template void op_ld_r_r(); -template void op_ld_r_n(); -template void op_ld_r_hl(); -template void op_ld_hl_r(); -void op_ld_hl_n(); -template void op_ld_a_rr(); -void op_ld_a_nn(); -template void op_ld_rr_a(); -void op_ld_nn_a(); -void op_ld_a_ffn(); -void op_ld_ffn_a(); -void op_ld_a_ffc(); -void op_ld_ffc_a(); -void op_ldi_hl_a(); -void op_ldi_a_hl(); -void op_ldd_hl_a(); -void op_ldd_a_hl(); - -//16-bit load commands -template void op_ld_rr_nn(); -void op_ld_nn_sp(); -void op_ld_sp_hl(); -template void op_push_rr(); -template void op_pop_rr(); - -//8-bit arithmetic commands -void opi_add_a(uint8 x); -template void op_add_a_r(); -void op_add_a_n(); -void op_add_a_hl(); - -void opi_adc_a(uint8 x); -template void op_adc_a_r(); -void op_adc_a_n(); -void op_adc_a_hl(); - -void opi_sub_a(uint8 x); -template void op_sub_a_r(); -void op_sub_a_n(); -void op_sub_a_hl(); - -void opi_sbc_a(uint8 x); -template void op_sbc_a_r(); -void op_sbc_a_n(); -void op_sbc_a_hl(); - -void opi_and_a(uint8 x); -template void op_and_a_r(); -void op_and_a_n(); -void op_and_a_hl(); - -void opi_xor_a(uint8 x); -template void op_xor_a_r(); -void op_xor_a_n(); -void op_xor_a_hl(); - -void opi_or_a(uint8 x); -template void op_or_a_r(); -void op_or_a_n(); -void op_or_a_hl(); - -void opi_cp_a(uint8 x); -template void op_cp_a_r(); -void op_cp_a_n(); -void op_cp_a_hl(); - -template void op_inc_r(); -void op_inc_hl(); -template void op_dec_r(); -void op_dec_hl(); -void op_daa(); -void op_cpl(); - -//16-bit arithmetic commands -template void op_add_hl_rr(); -template void op_inc_rr(); -template void op_dec_rr(); -void op_add_sp_n(); -void op_ld_hl_sp_n(); - -//rotate/shift commands -void op_rlca(); -void op_rla(); -void op_rrca(); -void op_rra(); -template void op_rlc_r(); -void op_rlc_hl(); -template void op_rl_r(); -void op_rl_hl(); -template void op_rrc_r(); -void op_rrc_hl(); -template void op_rr_r(); -void op_rr_hl(); -template void op_sla_r(); -void op_sla_hl(); -template void op_swap_r(); -void op_swap_hl(); -template void op_sra_r(); -void op_sra_hl(); -template void op_srl_r(); -void op_srl_hl(); - -//single-bit commands -template void op_bit_n_r(); -template void op_bit_n_hl(); -template void op_set_n_r(); -template void op_set_n_hl(); -template void op_res_n_r(); -template void op_res_n_hl(); - -//control commands -void op_ccf(); -void op_scf(); -void op_nop(); -void op_halt(); -void op_stop(); -void op_di(); -void op_ei(); - -//jump commands -void op_jp_nn(); -void op_jp_hl(); -template void op_jp_f_nn(); -void op_jr_n(); -template void op_jr_f_n(); -void op_call_nn(); -template void op_call_f_nn(); -void op_ret(); -template void op_ret_f(); -void op_reti(); -template void op_rst_n(); - -//disassembler.cpp -string disassemble(uint16 pc); -string disassemble_opcode(uint16 pc); -string disassemble_opcode_cb(uint16 pc); +#include "registers.hpp" +void (CPU::*opcode_table[256])(); +void (CPU::*opcode_table_cb[256])(); +void initialize_opcode_table(); + +void op_xx(); +void op_cb(); +uint8 op_fetch(); + +//8-bit load commands +template void op_ld_r_r(); +template void op_ld_r_n(); +template void op_ld_r_hl(); +template void op_ld_hl_r(); +void op_ld_hl_n(); +template void op_ld_a_rr(); +void op_ld_a_nn(); +template void op_ld_rr_a(); +void op_ld_nn_a(); +void op_ld_a_ffn(); +void op_ld_ffn_a(); +void op_ld_a_ffc(); +void op_ld_ffc_a(); +void op_ldi_hl_a(); +void op_ldi_a_hl(); +void op_ldd_hl_a(); +void op_ldd_a_hl(); + +//16-bit load commands +template void op_ld_rr_nn(); +void op_ld_nn_sp(); +void op_ld_sp_hl(); +template void op_push_rr(); +template void op_pop_rr(); + +//8-bit arithmetic commands +void opi_add_a(uint8 x); +template void op_add_a_r(); +void op_add_a_n(); +void op_add_a_hl(); + +void opi_adc_a(uint8 x); +template void op_adc_a_r(); +void op_adc_a_n(); +void op_adc_a_hl(); + +void opi_sub_a(uint8 x); +template void op_sub_a_r(); +void op_sub_a_n(); +void op_sub_a_hl(); + +void opi_sbc_a(uint8 x); +template void op_sbc_a_r(); +void op_sbc_a_n(); +void op_sbc_a_hl(); + +void opi_and_a(uint8 x); +template void op_and_a_r(); +void op_and_a_n(); +void op_and_a_hl(); + +void opi_xor_a(uint8 x); +template void op_xor_a_r(); +void op_xor_a_n(); +void op_xor_a_hl(); + +void opi_or_a(uint8 x); +template void op_or_a_r(); +void op_or_a_n(); +void op_or_a_hl(); + +void opi_cp_a(uint8 x); +template void op_cp_a_r(); +void op_cp_a_n(); +void op_cp_a_hl(); + +template void op_inc_r(); +void op_inc_hl(); +template void op_dec_r(); +void op_dec_hl(); +void op_daa(); +void op_cpl(); + +//16-bit arithmetic commands +template void op_add_hl_rr(); +template void op_inc_rr(); +template void op_dec_rr(); +void op_add_sp_n(); +void op_ld_hl_sp_n(); + +//rotate/shift commands +void op_rlca(); +void op_rla(); +void op_rrca(); +void op_rra(); +template void op_rlc_r(); +void op_rlc_hl(); +template void op_rl_r(); +void op_rl_hl(); +template void op_rrc_r(); +void op_rrc_hl(); +template void op_rr_r(); +void op_rr_hl(); +template void op_sla_r(); +void op_sla_hl(); +template void op_swap_r(); +void op_swap_hl(); +template void op_sra_r(); +void op_sra_hl(); +template void op_srl_r(); +void op_srl_hl(); + +//single-bit commands +template void op_bit_n_r(); +template void op_bit_n_hl(); +template void op_set_n_r(); +template void op_set_n_hl(); +template void op_res_n_r(); +template void op_res_n_hl(); + +//control commands +void op_ccf(); +void op_scf(); +void op_nop(); +void op_halt(); +void op_stop(); +void op_di(); +void op_ei(); + +//jump commands +void op_jp_nn(); +void op_jp_hl(); +template void op_jp_f_nn(); +void op_jr_n(); +template void op_jr_f_n(); +void op_call_nn(); +template void op_call_f_nn(); +void op_ret(); +template void op_ret_f(); +void op_reti(); +template void op_rst_n(); + +//disassembler.cpp +string disassemble(uint16 pc); +string disassemble_opcode(uint16 pc); +string disassemble_opcode_cb(uint16 pc); diff --git a/libsnes/bsnes/gameboy/cpu/core/disassembler.cpp b/waterbox/libsnes/bsnes/gameboy/cpu/core/disassembler.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cpu/core/disassembler.cpp rename to waterbox/libsnes/bsnes/gameboy/cpu/core/disassembler.cpp diff --git a/libsnes/bsnes/gameboy/cpu/core/registers.hpp b/waterbox/libsnes/bsnes/gameboy/cpu/core/registers.hpp similarity index 100% rename from libsnes/bsnes/gameboy/cpu/core/registers.hpp rename to waterbox/libsnes/bsnes/gameboy/cpu/core/registers.hpp diff --git a/libsnes/bsnes/gameboy/cpu/core/table.cpp b/waterbox/libsnes/bsnes/gameboy/cpu/core/table.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cpu/core/table.cpp rename to waterbox/libsnes/bsnes/gameboy/cpu/core/table.cpp diff --git a/libsnes/bsnes/gameboy/cpu/cpu.cpp b/waterbox/libsnes/bsnes/gameboy/cpu/cpu.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cpu/cpu.cpp rename to waterbox/libsnes/bsnes/gameboy/cpu/cpu.cpp diff --git a/libsnes/bsnes/gameboy/cpu/cpu.hpp b/waterbox/libsnes/bsnes/gameboy/cpu/cpu.hpp similarity index 100% rename from libsnes/bsnes/gameboy/cpu/cpu.hpp rename to waterbox/libsnes/bsnes/gameboy/cpu/cpu.hpp diff --git a/libsnes/bsnes/gameboy/cpu/mmio/mmio.cpp b/waterbox/libsnes/bsnes/gameboy/cpu/mmio/mmio.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cpu/mmio/mmio.cpp rename to waterbox/libsnes/bsnes/gameboy/cpu/mmio/mmio.cpp diff --git a/libsnes/bsnes/gameboy/cpu/mmio/mmio.hpp b/waterbox/libsnes/bsnes/gameboy/cpu/mmio/mmio.hpp similarity index 100% rename from libsnes/bsnes/gameboy/cpu/mmio/mmio.hpp rename to waterbox/libsnes/bsnes/gameboy/cpu/mmio/mmio.hpp diff --git a/libsnes/bsnes/gameboy/cpu/serialization.cpp b/waterbox/libsnes/bsnes/gameboy/cpu/serialization.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cpu/serialization.cpp rename to waterbox/libsnes/bsnes/gameboy/cpu/serialization.cpp diff --git a/libsnes/bsnes/gameboy/cpu/timing/opcode.cpp b/waterbox/libsnes/bsnes/gameboy/cpu/timing/opcode.cpp similarity index 100% rename from libsnes/bsnes/gameboy/cpu/timing/opcode.cpp rename to waterbox/libsnes/bsnes/gameboy/cpu/timing/opcode.cpp diff --git a/libsnes/bsnes/gameboy/cpu/timing/timing.cpp b/waterbox/libsnes/bsnes/gameboy/cpu/timing/timing.cpp similarity index 95% rename from libsnes/bsnes/gameboy/cpu/timing/timing.cpp rename to waterbox/libsnes/bsnes/gameboy/cpu/timing/timing.cpp index fc03b16f62..2fcec3d1e4 100644 --- a/libsnes/bsnes/gameboy/cpu/timing/timing.cpp +++ b/waterbox/libsnes/bsnes/gameboy/cpu/timing/timing.cpp @@ -1,96 +1,96 @@ -//70224 clocks/frame -// 456 clocks/scanline -// 154 scanlines/frame - -#ifdef CPU_CPP - -#include "opcode.cpp" - -void CPU::add_clocks(unsigned clocks) { - system.clocks_executed += clocks; - - auto flags = cdlInfo.currFlags; - - if(system.sgb()) scheduler.exit(Scheduler::ExitReason::StepEvent); - cdlInfo.currFlags = flags; - - status.clock += clocks; - if(status.clock >= 4 * 1024 * 1024) { - status.clock -= 4 * 1024 * 1024; - cartridge.mbc3.second(); - } - - //4MHz / N(hz) - 1 = mask - if((status.clock & 15) == 0) timer_262144hz(); - if((status.clock & 63) == 0) timer_65536hz(); - if((status.clock & 255) == 0) timer_16384hz(); - if((status.clock & 511) == 0) timer_8192hz(); - if((status.clock & 1023) == 0) timer_4096hz(); - - lcd.clock -= clocks * lcd.frequency; - if(lcd.clock <= 0) co_switch(scheduler.active_thread = lcd.thread); - cdlInfo.currFlags = flags; - - apu.clock -= clocks * apu.frequency; - if(apu.clock <= 0) co_switch(scheduler.active_thread = apu.thread); - cdlInfo.currFlags = flags; -} - -void CPU::timer_262144hz() { - if(status.timer_enable && status.timer_clock == 1) { - if(++status.tima == 0) { - status.tima = status.tma; - interrupt_raise(Interrupt::Timer); - } - } -} - -void CPU::timer_65536hz() { - if(status.timer_enable && status.timer_clock == 2) { - if(++status.tima == 0) { - status.tima = status.tma; - interrupt_raise(Interrupt::Timer); - } - } -} - -void CPU::timer_16384hz() { - if(status.timer_enable && status.timer_clock == 3) { - if(++status.tima == 0) { - status.tima = status.tma; - interrupt_raise(Interrupt::Timer); - } - } - - status.div++; -} - -void CPU::timer_8192hz() { - if(status.serial_transfer && status.serial_clock) { - if(--status.serial_bits == 0) { - status.serial_transfer = 0; - interrupt_raise(Interrupt::Serial); - } - } -} - -void CPU::timer_4096hz() { - if(status.timer_enable && status.timer_clock == 0) { - if(++status.tima == 0) { - status.tima = status.tma; - interrupt_raise(Interrupt::Timer); - } - } -} - -void CPU::hblank() { - if(status.dma_mode == 1 && status.dma_length) { - for(unsigned n = 0; n < 16; n++) { - bus.write(status.dma_target++, bus.read(status.dma_source++)); - add_clocks(4); - } - status.dma_length -= 16; - } -} - -#endif +//70224 clocks/frame +// 456 clocks/scanline +// 154 scanlines/frame + +#ifdef CPU_CPP + +#include "opcode.cpp" + +void CPU::add_clocks(unsigned clocks) { + system.clocks_executed += clocks; + + auto flags = cdlInfo.currFlags; + + if(system.sgb()) scheduler.exit(Scheduler::ExitReason::StepEvent); + cdlInfo.currFlags = flags; + + status.clock += clocks; + if(status.clock >= 4 * 1024 * 1024) { + status.clock -= 4 * 1024 * 1024; + cartridge.mbc3.second(); + } + + //4MHz / N(hz) - 1 = mask + if((status.clock & 15) == 0) timer_262144hz(); + if((status.clock & 63) == 0) timer_65536hz(); + if((status.clock & 255) == 0) timer_16384hz(); + if((status.clock & 511) == 0) timer_8192hz(); + if((status.clock & 1023) == 0) timer_4096hz(); + + lcd.clock -= clocks * lcd.frequency; + if(lcd.clock <= 0) co_switch(scheduler.active_thread = lcd.thread); + cdlInfo.currFlags = flags; + + apu.clock -= clocks * apu.frequency; + if(apu.clock <= 0) co_switch(scheduler.active_thread = apu.thread); + cdlInfo.currFlags = flags; +} + +void CPU::timer_262144hz() { + if(status.timer_enable && status.timer_clock == 1) { + if(++status.tima == 0) { + status.tima = status.tma; + interrupt_raise(Interrupt::Timer); + } + } +} + +void CPU::timer_65536hz() { + if(status.timer_enable && status.timer_clock == 2) { + if(++status.tima == 0) { + status.tima = status.tma; + interrupt_raise(Interrupt::Timer); + } + } +} + +void CPU::timer_16384hz() { + if(status.timer_enable && status.timer_clock == 3) { + if(++status.tima == 0) { + status.tima = status.tma; + interrupt_raise(Interrupt::Timer); + } + } + + status.div++; +} + +void CPU::timer_8192hz() { + if(status.serial_transfer && status.serial_clock) { + if(--status.serial_bits == 0) { + status.serial_transfer = 0; + interrupt_raise(Interrupt::Serial); + } + } +} + +void CPU::timer_4096hz() { + if(status.timer_enable && status.timer_clock == 0) { + if(++status.tima == 0) { + status.tima = status.tma; + interrupt_raise(Interrupt::Timer); + } + } +} + +void CPU::hblank() { + if(status.dma_mode == 1 && status.dma_length) { + for(unsigned n = 0; n < 16; n++) { + bus.write(status.dma_target++, bus.read(status.dma_source++)); + add_clocks(4); + } + status.dma_length -= 16; + } +} + +#endif diff --git a/libsnes/bsnes/gameboy/cpu/timing/timing.hpp b/waterbox/libsnes/bsnes/gameboy/cpu/timing/timing.hpp similarity index 100% rename from libsnes/bsnes/gameboy/cpu/timing/timing.hpp rename to waterbox/libsnes/bsnes/gameboy/cpu/timing/timing.hpp diff --git a/libsnes/bsnes/gameboy/gameboy.hpp b/waterbox/libsnes/bsnes/gameboy/gameboy.hpp similarity index 100% rename from libsnes/bsnes/gameboy/gameboy.hpp rename to waterbox/libsnes/bsnes/gameboy/gameboy.hpp diff --git a/libsnes/bsnes/gameboy/interface/interface.cpp b/waterbox/libsnes/bsnes/gameboy/interface/interface.cpp similarity index 100% rename from libsnes/bsnes/gameboy/interface/interface.cpp rename to waterbox/libsnes/bsnes/gameboy/interface/interface.cpp diff --git a/libsnes/bsnes/gameboy/interface/interface.hpp b/waterbox/libsnes/bsnes/gameboy/interface/interface.hpp similarity index 100% rename from libsnes/bsnes/gameboy/interface/interface.hpp rename to waterbox/libsnes/bsnes/gameboy/interface/interface.hpp diff --git a/libsnes/bsnes/gameboy/lcd/cgb.cpp b/waterbox/libsnes/bsnes/gameboy/lcd/cgb.cpp similarity index 100% rename from libsnes/bsnes/gameboy/lcd/cgb.cpp rename to waterbox/libsnes/bsnes/gameboy/lcd/cgb.cpp diff --git a/libsnes/bsnes/gameboy/lcd/dmg.cpp b/waterbox/libsnes/bsnes/gameboy/lcd/dmg.cpp similarity index 100% rename from libsnes/bsnes/gameboy/lcd/dmg.cpp rename to waterbox/libsnes/bsnes/gameboy/lcd/dmg.cpp diff --git a/libsnes/bsnes/gameboy/lcd/lcd.cpp b/waterbox/libsnes/bsnes/gameboy/lcd/lcd.cpp similarity index 100% rename from libsnes/bsnes/gameboy/lcd/lcd.cpp rename to waterbox/libsnes/bsnes/gameboy/lcd/lcd.cpp diff --git a/libsnes/bsnes/gameboy/lcd/lcd.hpp b/waterbox/libsnes/bsnes/gameboy/lcd/lcd.hpp similarity index 100% rename from libsnes/bsnes/gameboy/lcd/lcd.hpp rename to waterbox/libsnes/bsnes/gameboy/lcd/lcd.hpp diff --git a/libsnes/bsnes/gameboy/lcd/mmio/mmio.cpp b/waterbox/libsnes/bsnes/gameboy/lcd/mmio/mmio.cpp similarity index 100% rename from libsnes/bsnes/gameboy/lcd/mmio/mmio.cpp rename to waterbox/libsnes/bsnes/gameboy/lcd/mmio/mmio.cpp diff --git a/libsnes/bsnes/gameboy/lcd/mmio/mmio.hpp b/waterbox/libsnes/bsnes/gameboy/lcd/mmio/mmio.hpp similarity index 100% rename from libsnes/bsnes/gameboy/lcd/mmio/mmio.hpp rename to waterbox/libsnes/bsnes/gameboy/lcd/mmio/mmio.hpp diff --git a/libsnes/bsnes/gameboy/lcd/serialization.cpp b/waterbox/libsnes/bsnes/gameboy/lcd/serialization.cpp similarity index 100% rename from libsnes/bsnes/gameboy/lcd/serialization.cpp rename to waterbox/libsnes/bsnes/gameboy/lcd/serialization.cpp diff --git a/libsnes/bsnes/gameboy/memory/memory.cpp b/waterbox/libsnes/bsnes/gameboy/memory/memory.cpp similarity index 100% rename from libsnes/bsnes/gameboy/memory/memory.cpp rename to waterbox/libsnes/bsnes/gameboy/memory/memory.cpp diff --git a/libsnes/bsnes/gameboy/memory/memory.hpp b/waterbox/libsnes/bsnes/gameboy/memory/memory.hpp similarity index 100% rename from libsnes/bsnes/gameboy/memory/memory.hpp rename to waterbox/libsnes/bsnes/gameboy/memory/memory.hpp diff --git a/libsnes/bsnes/gameboy/scheduler/scheduler.cpp b/waterbox/libsnes/bsnes/gameboy/scheduler/scheduler.cpp similarity index 100% rename from libsnes/bsnes/gameboy/scheduler/scheduler.cpp rename to waterbox/libsnes/bsnes/gameboy/scheduler/scheduler.cpp diff --git a/libsnes/bsnes/gameboy/scheduler/scheduler.hpp b/waterbox/libsnes/bsnes/gameboy/scheduler/scheduler.hpp similarity index 100% rename from libsnes/bsnes/gameboy/scheduler/scheduler.hpp rename to waterbox/libsnes/bsnes/gameboy/scheduler/scheduler.hpp diff --git a/libsnes/bsnes/gameboy/system/bootrom-cgb.cpp b/waterbox/libsnes/bsnes/gameboy/system/bootrom-cgb.cpp similarity index 100% rename from libsnes/bsnes/gameboy/system/bootrom-cgb.cpp rename to waterbox/libsnes/bsnes/gameboy/system/bootrom-cgb.cpp diff --git a/libsnes/bsnes/gameboy/system/bootrom-dmg.cpp b/waterbox/libsnes/bsnes/gameboy/system/bootrom-dmg.cpp similarity index 100% rename from libsnes/bsnes/gameboy/system/bootrom-dmg.cpp rename to waterbox/libsnes/bsnes/gameboy/system/bootrom-dmg.cpp diff --git a/libsnes/bsnes/gameboy/system/bootrom-sgb.cpp b/waterbox/libsnes/bsnes/gameboy/system/bootrom-sgb.cpp similarity index 100% rename from libsnes/bsnes/gameboy/system/bootrom-sgb.cpp rename to waterbox/libsnes/bsnes/gameboy/system/bootrom-sgb.cpp diff --git a/libsnes/bsnes/gameboy/system/serialization.cpp b/waterbox/libsnes/bsnes/gameboy/system/serialization.cpp similarity index 100% rename from libsnes/bsnes/gameboy/system/serialization.cpp rename to waterbox/libsnes/bsnes/gameboy/system/serialization.cpp diff --git a/libsnes/bsnes/gameboy/system/system.cpp b/waterbox/libsnes/bsnes/gameboy/system/system.cpp similarity index 100% rename from libsnes/bsnes/gameboy/system/system.cpp rename to waterbox/libsnes/bsnes/gameboy/system/system.cpp diff --git a/libsnes/bsnes/gameboy/system/system.hpp b/waterbox/libsnes/bsnes/gameboy/system/system.hpp similarity index 100% rename from libsnes/bsnes/gameboy/system/system.hpp rename to waterbox/libsnes/bsnes/gameboy/system/system.hpp diff --git a/libsnes/bsnes/gameboy/video/video.cpp b/waterbox/libsnes/bsnes/gameboy/video/video.cpp similarity index 100% rename from libsnes/bsnes/gameboy/video/video.cpp rename to waterbox/libsnes/bsnes/gameboy/video/video.cpp diff --git a/libsnes/bsnes/gameboy/video/video.hpp b/waterbox/libsnes/bsnes/gameboy/video/video.hpp similarity index 100% rename from libsnes/bsnes/gameboy/video/video.hpp rename to waterbox/libsnes/bsnes/gameboy/video/video.hpp diff --git a/libsnes/bsnes/nall/algorithm.hpp b/waterbox/libsnes/bsnes/nall/algorithm.hpp similarity index 100% rename from libsnes/bsnes/nall/algorithm.hpp rename to waterbox/libsnes/bsnes/nall/algorithm.hpp diff --git a/libsnes/bsnes/nall/any.hpp b/waterbox/libsnes/bsnes/nall/any.hpp similarity index 100% rename from libsnes/bsnes/nall/any.hpp rename to waterbox/libsnes/bsnes/nall/any.hpp diff --git a/libsnes/bsnes/nall/array.hpp b/waterbox/libsnes/bsnes/nall/array.hpp similarity index 100% rename from libsnes/bsnes/nall/array.hpp rename to waterbox/libsnes/bsnes/nall/array.hpp diff --git a/libsnes/bsnes/nall/atoi.hpp b/waterbox/libsnes/bsnes/nall/atoi.hpp similarity index 100% rename from libsnes/bsnes/nall/atoi.hpp rename to waterbox/libsnes/bsnes/nall/atoi.hpp diff --git a/libsnes/bsnes/nall/base64.hpp b/waterbox/libsnes/bsnes/nall/base64.hpp similarity index 100% rename from libsnes/bsnes/nall/base64.hpp rename to waterbox/libsnes/bsnes/nall/base64.hpp diff --git a/libsnes/bsnes/nall/bit.hpp b/waterbox/libsnes/bsnes/nall/bit.hpp similarity index 100% rename from libsnes/bsnes/nall/bit.hpp rename to waterbox/libsnes/bsnes/nall/bit.hpp diff --git a/libsnes/bsnes/nall/bmp.hpp b/waterbox/libsnes/bsnes/nall/bmp.hpp similarity index 100% rename from libsnes/bsnes/nall/bmp.hpp rename to waterbox/libsnes/bsnes/nall/bmp.hpp diff --git a/libsnes/bsnes/nall/bps/delta.hpp b/waterbox/libsnes/bsnes/nall/bps/delta.hpp similarity index 100% rename from libsnes/bsnes/nall/bps/delta.hpp rename to waterbox/libsnes/bsnes/nall/bps/delta.hpp diff --git a/libsnes/bsnes/nall/bps/linear.hpp b/waterbox/libsnes/bsnes/nall/bps/linear.hpp similarity index 100% rename from libsnes/bsnes/nall/bps/linear.hpp rename to waterbox/libsnes/bsnes/nall/bps/linear.hpp diff --git a/libsnes/bsnes/nall/bps/metadata.hpp b/waterbox/libsnes/bsnes/nall/bps/metadata.hpp similarity index 100% rename from libsnes/bsnes/nall/bps/metadata.hpp rename to waterbox/libsnes/bsnes/nall/bps/metadata.hpp diff --git a/libsnes/bsnes/nall/bps/patch.hpp b/waterbox/libsnes/bsnes/nall/bps/patch.hpp similarity index 100% rename from libsnes/bsnes/nall/bps/patch.hpp rename to waterbox/libsnes/bsnes/nall/bps/patch.hpp diff --git a/libsnes/bsnes/nall/compositor.hpp b/waterbox/libsnes/bsnes/nall/compositor.hpp similarity index 100% rename from libsnes/bsnes/nall/compositor.hpp rename to waterbox/libsnes/bsnes/nall/compositor.hpp diff --git a/libsnes/bsnes/nall/config.hpp b/waterbox/libsnes/bsnes/nall/config.hpp similarity index 100% rename from libsnes/bsnes/nall/config.hpp rename to waterbox/libsnes/bsnes/nall/config.hpp diff --git a/libsnes/bsnes/nall/crc32.hpp b/waterbox/libsnes/bsnes/nall/crc32.hpp similarity index 100% rename from libsnes/bsnes/nall/crc32.hpp rename to waterbox/libsnes/bsnes/nall/crc32.hpp diff --git a/libsnes/bsnes/nall/directory.hpp b/waterbox/libsnes/bsnes/nall/directory.hpp similarity index 100% rename from libsnes/bsnes/nall/directory.hpp rename to waterbox/libsnes/bsnes/nall/directory.hpp diff --git a/libsnes/bsnes/nall/dl.hpp b/waterbox/libsnes/bsnes/nall/dl.hpp similarity index 100% rename from libsnes/bsnes/nall/dl.hpp rename to waterbox/libsnes/bsnes/nall/dl.hpp diff --git a/libsnes/bsnes/nall/dsp.hpp b/waterbox/libsnes/bsnes/nall/dsp.hpp similarity index 100% rename from libsnes/bsnes/nall/dsp.hpp rename to waterbox/libsnes/bsnes/nall/dsp.hpp diff --git a/libsnes/bsnes/nall/dsp/buffer.hpp b/waterbox/libsnes/bsnes/nall/dsp/buffer.hpp similarity index 100% rename from libsnes/bsnes/nall/dsp/buffer.hpp rename to waterbox/libsnes/bsnes/nall/dsp/buffer.hpp diff --git a/libsnes/bsnes/nall/dsp/core.hpp b/waterbox/libsnes/bsnes/nall/dsp/core.hpp similarity index 100% rename from libsnes/bsnes/nall/dsp/core.hpp rename to waterbox/libsnes/bsnes/nall/dsp/core.hpp diff --git a/libsnes/bsnes/nall/dsp/resample/average.hpp b/waterbox/libsnes/bsnes/nall/dsp/resample/average.hpp similarity index 100% rename from libsnes/bsnes/nall/dsp/resample/average.hpp rename to waterbox/libsnes/bsnes/nall/dsp/resample/average.hpp diff --git a/libsnes/bsnes/nall/dsp/resample/cosine.hpp b/waterbox/libsnes/bsnes/nall/dsp/resample/cosine.hpp similarity index 100% rename from libsnes/bsnes/nall/dsp/resample/cosine.hpp rename to waterbox/libsnes/bsnes/nall/dsp/resample/cosine.hpp diff --git a/libsnes/bsnes/nall/dsp/resample/cubic.hpp b/waterbox/libsnes/bsnes/nall/dsp/resample/cubic.hpp similarity index 100% rename from libsnes/bsnes/nall/dsp/resample/cubic.hpp rename to waterbox/libsnes/bsnes/nall/dsp/resample/cubic.hpp diff --git a/libsnes/bsnes/nall/dsp/resample/hermite.hpp b/waterbox/libsnes/bsnes/nall/dsp/resample/hermite.hpp similarity index 100% rename from libsnes/bsnes/nall/dsp/resample/hermite.hpp rename to waterbox/libsnes/bsnes/nall/dsp/resample/hermite.hpp diff --git a/libsnes/bsnes/nall/dsp/resample/lib/sinc.hpp b/waterbox/libsnes/bsnes/nall/dsp/resample/lib/sinc.hpp similarity index 100% rename from libsnes/bsnes/nall/dsp/resample/lib/sinc.hpp rename to waterbox/libsnes/bsnes/nall/dsp/resample/lib/sinc.hpp diff --git a/libsnes/bsnes/nall/dsp/resample/linear.hpp b/waterbox/libsnes/bsnes/nall/dsp/resample/linear.hpp similarity index 100% rename from libsnes/bsnes/nall/dsp/resample/linear.hpp rename to waterbox/libsnes/bsnes/nall/dsp/resample/linear.hpp diff --git a/libsnes/bsnes/nall/dsp/resample/nearest.hpp b/waterbox/libsnes/bsnes/nall/dsp/resample/nearest.hpp similarity index 100% rename from libsnes/bsnes/nall/dsp/resample/nearest.hpp rename to waterbox/libsnes/bsnes/nall/dsp/resample/nearest.hpp diff --git a/libsnes/bsnes/nall/dsp/resample/sinc.hpp b/waterbox/libsnes/bsnes/nall/dsp/resample/sinc.hpp similarity index 100% rename from libsnes/bsnes/nall/dsp/resample/sinc.hpp rename to waterbox/libsnes/bsnes/nall/dsp/resample/sinc.hpp diff --git a/libsnes/bsnes/nall/dsp/settings.hpp b/waterbox/libsnes/bsnes/nall/dsp/settings.hpp similarity index 100% rename from libsnes/bsnes/nall/dsp/settings.hpp rename to waterbox/libsnes/bsnes/nall/dsp/settings.hpp diff --git a/libsnes/bsnes/nall/endian.hpp b/waterbox/libsnes/bsnes/nall/endian.hpp similarity index 100% rename from libsnes/bsnes/nall/endian.hpp rename to waterbox/libsnes/bsnes/nall/endian.hpp diff --git a/libsnes/bsnes/nall/file.hpp b/waterbox/libsnes/bsnes/nall/file.hpp similarity index 100% rename from libsnes/bsnes/nall/file.hpp rename to waterbox/libsnes/bsnes/nall/file.hpp diff --git a/libsnes/bsnes/nall/filemap.hpp b/waterbox/libsnes/bsnes/nall/filemap.hpp similarity index 100% rename from libsnes/bsnes/nall/filemap.hpp rename to waterbox/libsnes/bsnes/nall/filemap.hpp diff --git a/libsnes/bsnes/nall/function.hpp b/waterbox/libsnes/bsnes/nall/function.hpp similarity index 100% rename from libsnes/bsnes/nall/function.hpp rename to waterbox/libsnes/bsnes/nall/function.hpp diff --git a/libsnes/bsnes/nall/gameboy/cartridge.hpp b/waterbox/libsnes/bsnes/nall/gameboy/cartridge.hpp similarity index 100% rename from libsnes/bsnes/nall/gameboy/cartridge.hpp rename to waterbox/libsnes/bsnes/nall/gameboy/cartridge.hpp diff --git a/libsnes/bsnes/nall/gzip.hpp b/waterbox/libsnes/bsnes/nall/gzip.hpp similarity index 100% rename from libsnes/bsnes/nall/gzip.hpp rename to waterbox/libsnes/bsnes/nall/gzip.hpp diff --git a/libsnes/bsnes/nall/http.hpp b/waterbox/libsnes/bsnes/nall/http.hpp similarity index 100% rename from libsnes/bsnes/nall/http.hpp rename to waterbox/libsnes/bsnes/nall/http.hpp diff --git a/libsnes/bsnes/nall/image.hpp b/waterbox/libsnes/bsnes/nall/image.hpp similarity index 100% rename from libsnes/bsnes/nall/image.hpp rename to waterbox/libsnes/bsnes/nall/image.hpp diff --git a/libsnes/bsnes/nall/inflate.hpp b/waterbox/libsnes/bsnes/nall/inflate.hpp similarity index 100% rename from libsnes/bsnes/nall/inflate.hpp rename to waterbox/libsnes/bsnes/nall/inflate.hpp diff --git a/libsnes/bsnes/nall/input.hpp b/waterbox/libsnes/bsnes/nall/input.hpp similarity index 100% rename from libsnes/bsnes/nall/input.hpp rename to waterbox/libsnes/bsnes/nall/input.hpp diff --git a/libsnes/bsnes/nall/interpolation.hpp b/waterbox/libsnes/bsnes/nall/interpolation.hpp similarity index 100% rename from libsnes/bsnes/nall/interpolation.hpp rename to waterbox/libsnes/bsnes/nall/interpolation.hpp diff --git a/libsnes/bsnes/nall/intrinsics.hpp b/waterbox/libsnes/bsnes/nall/intrinsics.hpp similarity index 100% rename from libsnes/bsnes/nall/intrinsics.hpp rename to waterbox/libsnes/bsnes/nall/intrinsics.hpp diff --git a/libsnes/bsnes/nall/ips.hpp b/waterbox/libsnes/bsnes/nall/ips.hpp similarity index 100% rename from libsnes/bsnes/nall/ips.hpp rename to waterbox/libsnes/bsnes/nall/ips.hpp diff --git a/libsnes/bsnes/nall/lzss.hpp b/waterbox/libsnes/bsnes/nall/lzss.hpp similarity index 100% rename from libsnes/bsnes/nall/lzss.hpp rename to waterbox/libsnes/bsnes/nall/lzss.hpp diff --git a/libsnes/bsnes/nall/map.hpp b/waterbox/libsnes/bsnes/nall/map.hpp similarity index 100% rename from libsnes/bsnes/nall/map.hpp rename to waterbox/libsnes/bsnes/nall/map.hpp diff --git a/libsnes/bsnes/nall/moduloarray.hpp b/waterbox/libsnes/bsnes/nall/moduloarray.hpp similarity index 100% rename from libsnes/bsnes/nall/moduloarray.hpp rename to waterbox/libsnes/bsnes/nall/moduloarray.hpp diff --git a/libsnes/bsnes/nall/mosaic.hpp b/waterbox/libsnes/bsnes/nall/mosaic.hpp similarity index 100% rename from libsnes/bsnes/nall/mosaic.hpp rename to waterbox/libsnes/bsnes/nall/mosaic.hpp diff --git a/libsnes/bsnes/nall/mosaic/bitstream.hpp b/waterbox/libsnes/bsnes/nall/mosaic/bitstream.hpp similarity index 100% rename from libsnes/bsnes/nall/mosaic/bitstream.hpp rename to waterbox/libsnes/bsnes/nall/mosaic/bitstream.hpp diff --git a/libsnes/bsnes/nall/mosaic/context.hpp b/waterbox/libsnes/bsnes/nall/mosaic/context.hpp similarity index 100% rename from libsnes/bsnes/nall/mosaic/context.hpp rename to waterbox/libsnes/bsnes/nall/mosaic/context.hpp diff --git a/libsnes/bsnes/nall/mosaic/parser.hpp b/waterbox/libsnes/bsnes/nall/mosaic/parser.hpp similarity index 100% rename from libsnes/bsnes/nall/mosaic/parser.hpp rename to waterbox/libsnes/bsnes/nall/mosaic/parser.hpp diff --git a/libsnes/bsnes/nall/platform.hpp b/waterbox/libsnes/bsnes/nall/platform.hpp similarity index 100% rename from libsnes/bsnes/nall/platform.hpp rename to waterbox/libsnes/bsnes/nall/platform.hpp diff --git a/libsnes/bsnes/nall/png.hpp b/waterbox/libsnes/bsnes/nall/png.hpp similarity index 100% rename from libsnes/bsnes/nall/png.hpp rename to waterbox/libsnes/bsnes/nall/png.hpp diff --git a/libsnes/bsnes/nall/priorityqueue.hpp b/waterbox/libsnes/bsnes/nall/priorityqueue.hpp similarity index 100% rename from libsnes/bsnes/nall/priorityqueue.hpp rename to waterbox/libsnes/bsnes/nall/priorityqueue.hpp diff --git a/libsnes/bsnes/nall/property.hpp b/waterbox/libsnes/bsnes/nall/property.hpp similarity index 100% rename from libsnes/bsnes/nall/property.hpp rename to waterbox/libsnes/bsnes/nall/property.hpp diff --git a/libsnes/bsnes/nall/public_cast.hpp b/waterbox/libsnes/bsnes/nall/public_cast.hpp similarity index 100% rename from libsnes/bsnes/nall/public_cast.hpp rename to waterbox/libsnes/bsnes/nall/public_cast.hpp diff --git a/libsnes/bsnes/nall/random.hpp b/waterbox/libsnes/bsnes/nall/random.hpp similarity index 100% rename from libsnes/bsnes/nall/random.hpp rename to waterbox/libsnes/bsnes/nall/random.hpp diff --git a/libsnes/bsnes/nall/reference_array.hpp b/waterbox/libsnes/bsnes/nall/reference_array.hpp similarity index 100% rename from libsnes/bsnes/nall/reference_array.hpp rename to waterbox/libsnes/bsnes/nall/reference_array.hpp diff --git a/libsnes/bsnes/nall/serial.hpp b/waterbox/libsnes/bsnes/nall/serial.hpp similarity index 100% rename from libsnes/bsnes/nall/serial.hpp rename to waterbox/libsnes/bsnes/nall/serial.hpp diff --git a/libsnes/bsnes/nall/serializer.hpp b/waterbox/libsnes/bsnes/nall/serializer.hpp similarity index 100% rename from libsnes/bsnes/nall/serializer.hpp rename to waterbox/libsnes/bsnes/nall/serializer.hpp diff --git a/libsnes/bsnes/nall/sha256.hpp b/waterbox/libsnes/bsnes/nall/sha256.hpp similarity index 100% rename from libsnes/bsnes/nall/sha256.hpp rename to waterbox/libsnes/bsnes/nall/sha256.hpp diff --git a/libsnes/bsnes/nall/snes/cartridge.hpp b/waterbox/libsnes/bsnes/nall/snes/cartridge.hpp similarity index 100% rename from libsnes/bsnes/nall/snes/cartridge.hpp rename to waterbox/libsnes/bsnes/nall/snes/cartridge.hpp diff --git a/libsnes/bsnes/nall/snes/cpu.hpp b/waterbox/libsnes/bsnes/nall/snes/cpu.hpp similarity index 100% rename from libsnes/bsnes/nall/snes/cpu.hpp rename to waterbox/libsnes/bsnes/nall/snes/cpu.hpp diff --git a/libsnes/bsnes/nall/snes/smp.hpp b/waterbox/libsnes/bsnes/nall/snes/smp.hpp similarity index 100% rename from libsnes/bsnes/nall/snes/smp.hpp rename to waterbox/libsnes/bsnes/nall/snes/smp.hpp diff --git a/libsnes/bsnes/nall/snes/usart.hpp b/waterbox/libsnes/bsnes/nall/snes/usart.hpp similarity index 100% rename from libsnes/bsnes/nall/snes/usart.hpp rename to waterbox/libsnes/bsnes/nall/snes/usart.hpp diff --git a/libsnes/bsnes/nall/sort.hpp b/waterbox/libsnes/bsnes/nall/sort.hpp similarity index 100% rename from libsnes/bsnes/nall/sort.hpp rename to waterbox/libsnes/bsnes/nall/sort.hpp diff --git a/libsnes/bsnes/nall/stdint.hpp b/waterbox/libsnes/bsnes/nall/stdint.hpp similarity index 100% rename from libsnes/bsnes/nall/stdint.hpp rename to waterbox/libsnes/bsnes/nall/stdint.hpp diff --git a/libsnes/bsnes/nall/stream.hpp b/waterbox/libsnes/bsnes/nall/stream.hpp similarity index 100% rename from libsnes/bsnes/nall/stream.hpp rename to waterbox/libsnes/bsnes/nall/stream.hpp diff --git a/libsnes/bsnes/nall/stream/auto.hpp b/waterbox/libsnes/bsnes/nall/stream/auto.hpp similarity index 100% rename from libsnes/bsnes/nall/stream/auto.hpp rename to waterbox/libsnes/bsnes/nall/stream/auto.hpp diff --git a/libsnes/bsnes/nall/stream/file.hpp b/waterbox/libsnes/bsnes/nall/stream/file.hpp similarity index 100% rename from libsnes/bsnes/nall/stream/file.hpp rename to waterbox/libsnes/bsnes/nall/stream/file.hpp diff --git a/libsnes/bsnes/nall/stream/gzip.hpp b/waterbox/libsnes/bsnes/nall/stream/gzip.hpp similarity index 100% rename from libsnes/bsnes/nall/stream/gzip.hpp rename to waterbox/libsnes/bsnes/nall/stream/gzip.hpp diff --git a/libsnes/bsnes/nall/stream/http.hpp b/waterbox/libsnes/bsnes/nall/stream/http.hpp similarity index 100% rename from libsnes/bsnes/nall/stream/http.hpp rename to waterbox/libsnes/bsnes/nall/stream/http.hpp diff --git a/libsnes/bsnes/nall/stream/memory.hpp b/waterbox/libsnes/bsnes/nall/stream/memory.hpp similarity index 100% rename from libsnes/bsnes/nall/stream/memory.hpp rename to waterbox/libsnes/bsnes/nall/stream/memory.hpp diff --git a/libsnes/bsnes/nall/stream/mmap.hpp b/waterbox/libsnes/bsnes/nall/stream/mmap.hpp similarity index 100% rename from libsnes/bsnes/nall/stream/mmap.hpp rename to waterbox/libsnes/bsnes/nall/stream/mmap.hpp diff --git a/libsnes/bsnes/nall/stream/stream.hpp b/waterbox/libsnes/bsnes/nall/stream/stream.hpp similarity index 100% rename from libsnes/bsnes/nall/stream/stream.hpp rename to waterbox/libsnes/bsnes/nall/stream/stream.hpp diff --git a/libsnes/bsnes/nall/stream/zip.hpp b/waterbox/libsnes/bsnes/nall/stream/zip.hpp similarity index 100% rename from libsnes/bsnes/nall/stream/zip.hpp rename to waterbox/libsnes/bsnes/nall/stream/zip.hpp diff --git a/libsnes/bsnes/nall/string.hpp b/waterbox/libsnes/bsnes/nall/string.hpp similarity index 100% rename from libsnes/bsnes/nall/string.hpp rename to waterbox/libsnes/bsnes/nall/string.hpp diff --git a/libsnes/bsnes/nall/string/base.hpp b/waterbox/libsnes/bsnes/nall/string/base.hpp similarity index 100% rename from libsnes/bsnes/nall/string/base.hpp rename to waterbox/libsnes/bsnes/nall/string/base.hpp diff --git a/libsnes/bsnes/nall/string/bml.hpp b/waterbox/libsnes/bsnes/nall/string/bml.hpp similarity index 100% rename from libsnes/bsnes/nall/string/bml.hpp rename to waterbox/libsnes/bsnes/nall/string/bml.hpp diff --git a/libsnes/bsnes/nall/string/bsv.hpp b/waterbox/libsnes/bsnes/nall/string/bsv.hpp similarity index 100% rename from libsnes/bsnes/nall/string/bsv.hpp rename to waterbox/libsnes/bsnes/nall/string/bsv.hpp diff --git a/libsnes/bsnes/nall/string/cast.hpp b/waterbox/libsnes/bsnes/nall/string/cast.hpp similarity index 100% rename from libsnes/bsnes/nall/string/cast.hpp rename to waterbox/libsnes/bsnes/nall/string/cast.hpp diff --git a/libsnes/bsnes/nall/string/compare.hpp b/waterbox/libsnes/bsnes/nall/string/compare.hpp similarity index 100% rename from libsnes/bsnes/nall/string/compare.hpp rename to waterbox/libsnes/bsnes/nall/string/compare.hpp diff --git a/libsnes/bsnes/nall/string/convert.hpp b/waterbox/libsnes/bsnes/nall/string/convert.hpp similarity index 100% rename from libsnes/bsnes/nall/string/convert.hpp rename to waterbox/libsnes/bsnes/nall/string/convert.hpp diff --git a/libsnes/bsnes/nall/string/core.hpp b/waterbox/libsnes/bsnes/nall/string/core.hpp similarity index 100% rename from libsnes/bsnes/nall/string/core.hpp rename to waterbox/libsnes/bsnes/nall/string/core.hpp diff --git a/libsnes/bsnes/nall/string/cstring.hpp b/waterbox/libsnes/bsnes/nall/string/cstring.hpp similarity index 100% rename from libsnes/bsnes/nall/string/cstring.hpp rename to waterbox/libsnes/bsnes/nall/string/cstring.hpp diff --git a/libsnes/bsnes/nall/string/filename.hpp b/waterbox/libsnes/bsnes/nall/string/filename.hpp similarity index 100% rename from libsnes/bsnes/nall/string/filename.hpp rename to waterbox/libsnes/bsnes/nall/string/filename.hpp diff --git a/libsnes/bsnes/nall/string/math-fixed-point.hpp b/waterbox/libsnes/bsnes/nall/string/math-fixed-point.hpp similarity index 100% rename from libsnes/bsnes/nall/string/math-fixed-point.hpp rename to waterbox/libsnes/bsnes/nall/string/math-fixed-point.hpp diff --git a/libsnes/bsnes/nall/string/math-floating-point.hpp b/waterbox/libsnes/bsnes/nall/string/math-floating-point.hpp similarity index 100% rename from libsnes/bsnes/nall/string/math-floating-point.hpp rename to waterbox/libsnes/bsnes/nall/string/math-floating-point.hpp diff --git a/libsnes/bsnes/nall/string/platform.hpp b/waterbox/libsnes/bsnes/nall/string/platform.hpp similarity index 100% rename from libsnes/bsnes/nall/string/platform.hpp rename to waterbox/libsnes/bsnes/nall/string/platform.hpp diff --git a/libsnes/bsnes/nall/string/replace.hpp b/waterbox/libsnes/bsnes/nall/string/replace.hpp similarity index 100% rename from libsnes/bsnes/nall/string/replace.hpp rename to waterbox/libsnes/bsnes/nall/string/replace.hpp diff --git a/libsnes/bsnes/nall/string/split.hpp b/waterbox/libsnes/bsnes/nall/string/split.hpp similarity index 100% rename from libsnes/bsnes/nall/string/split.hpp rename to waterbox/libsnes/bsnes/nall/string/split.hpp diff --git a/libsnes/bsnes/nall/string/strm.hpp b/waterbox/libsnes/bsnes/nall/string/strm.hpp similarity index 100% rename from libsnes/bsnes/nall/string/strm.hpp rename to waterbox/libsnes/bsnes/nall/string/strm.hpp diff --git a/libsnes/bsnes/nall/string/strpos.hpp b/waterbox/libsnes/bsnes/nall/string/strpos.hpp similarity index 100% rename from libsnes/bsnes/nall/string/strpos.hpp rename to waterbox/libsnes/bsnes/nall/string/strpos.hpp diff --git a/libsnes/bsnes/nall/string/trim.hpp b/waterbox/libsnes/bsnes/nall/string/trim.hpp similarity index 100% rename from libsnes/bsnes/nall/string/trim.hpp rename to waterbox/libsnes/bsnes/nall/string/trim.hpp diff --git a/libsnes/bsnes/nall/string/utf8.hpp b/waterbox/libsnes/bsnes/nall/string/utf8.hpp similarity index 100% rename from libsnes/bsnes/nall/string/utf8.hpp rename to waterbox/libsnes/bsnes/nall/string/utf8.hpp diff --git a/libsnes/bsnes/nall/string/utility.hpp b/waterbox/libsnes/bsnes/nall/string/utility.hpp similarity index 100% rename from libsnes/bsnes/nall/string/utility.hpp rename to waterbox/libsnes/bsnes/nall/string/utility.hpp diff --git a/libsnes/bsnes/nall/string/variadic.hpp b/waterbox/libsnes/bsnes/nall/string/variadic.hpp similarity index 100% rename from libsnes/bsnes/nall/string/variadic.hpp rename to waterbox/libsnes/bsnes/nall/string/variadic.hpp diff --git a/libsnes/bsnes/nall/string/wildcard.hpp b/waterbox/libsnes/bsnes/nall/string/wildcard.hpp similarity index 100% rename from libsnes/bsnes/nall/string/wildcard.hpp rename to waterbox/libsnes/bsnes/nall/string/wildcard.hpp diff --git a/libsnes/bsnes/nall/string/wrapper.hpp b/waterbox/libsnes/bsnes/nall/string/wrapper.hpp similarity index 100% rename from libsnes/bsnes/nall/string/wrapper.hpp rename to waterbox/libsnes/bsnes/nall/string/wrapper.hpp diff --git a/libsnes/bsnes/nall/string/xml-legacy.hpp b/waterbox/libsnes/bsnes/nall/string/xml-legacy.hpp similarity index 100% rename from libsnes/bsnes/nall/string/xml-legacy.hpp rename to waterbox/libsnes/bsnes/nall/string/xml-legacy.hpp diff --git a/libsnes/bsnes/nall/string/xml.hpp b/waterbox/libsnes/bsnes/nall/string/xml.hpp similarity index 100% rename from libsnes/bsnes/nall/string/xml.hpp rename to waterbox/libsnes/bsnes/nall/string/xml.hpp diff --git a/libsnes/bsnes/nall/type_traits.hpp b/waterbox/libsnes/bsnes/nall/type_traits.hpp similarity index 100% rename from libsnes/bsnes/nall/type_traits.hpp rename to waterbox/libsnes/bsnes/nall/type_traits.hpp diff --git a/libsnes/bsnes/nall/ups.hpp b/waterbox/libsnes/bsnes/nall/ups.hpp similarity index 100% rename from libsnes/bsnes/nall/ups.hpp rename to waterbox/libsnes/bsnes/nall/ups.hpp diff --git a/libsnes/bsnes/nall/utility.hpp b/waterbox/libsnes/bsnes/nall/utility.hpp similarity index 100% rename from libsnes/bsnes/nall/utility.hpp rename to waterbox/libsnes/bsnes/nall/utility.hpp diff --git a/libsnes/bsnes/nall/varint.hpp b/waterbox/libsnes/bsnes/nall/varint.hpp similarity index 100% rename from libsnes/bsnes/nall/varint.hpp rename to waterbox/libsnes/bsnes/nall/varint.hpp diff --git a/libsnes/bsnes/nall/vector.hpp b/waterbox/libsnes/bsnes/nall/vector.hpp similarity index 100% rename from libsnes/bsnes/nall/vector.hpp rename to waterbox/libsnes/bsnes/nall/vector.hpp diff --git a/libsnes/bsnes/nall/windows/detour.hpp b/waterbox/libsnes/bsnes/nall/windows/detour.hpp similarity index 100% rename from libsnes/bsnes/nall/windows/detour.hpp rename to waterbox/libsnes/bsnes/nall/windows/detour.hpp diff --git a/libsnes/bsnes/nall/windows/launcher.hpp b/waterbox/libsnes/bsnes/nall/windows/launcher.hpp similarity index 100% rename from libsnes/bsnes/nall/windows/launcher.hpp rename to waterbox/libsnes/bsnes/nall/windows/launcher.hpp diff --git a/libsnes/bsnes/nall/windows/utf8.hpp b/waterbox/libsnes/bsnes/nall/windows/utf8.hpp similarity index 100% rename from libsnes/bsnes/nall/windows/utf8.hpp rename to waterbox/libsnes/bsnes/nall/windows/utf8.hpp diff --git a/libsnes/bsnes/nall/xorg/guard.hpp b/waterbox/libsnes/bsnes/nall/xorg/guard.hpp similarity index 100% rename from libsnes/bsnes/nall/xorg/guard.hpp rename to waterbox/libsnes/bsnes/nall/xorg/guard.hpp diff --git a/libsnes/bsnes/nall/xorg/xorg.hpp b/waterbox/libsnes/bsnes/nall/xorg/xorg.hpp similarity index 100% rename from libsnes/bsnes/nall/xorg/xorg.hpp rename to waterbox/libsnes/bsnes/nall/xorg/xorg.hpp diff --git a/libsnes/bsnes/nall/zip.hpp b/waterbox/libsnes/bsnes/nall/zip.hpp similarity index 100% rename from libsnes/bsnes/nall/zip.hpp rename to waterbox/libsnes/bsnes/nall/zip.hpp diff --git a/libsnes/bsnes/snes/alt/cpu/cpu.cpp b/waterbox/libsnes/bsnes/snes/alt/cpu/cpu.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/cpu/cpu.cpp rename to waterbox/libsnes/bsnes/snes/alt/cpu/cpu.cpp diff --git a/libsnes/bsnes/snes/alt/cpu/cpu.hpp b/waterbox/libsnes/bsnes/snes/alt/cpu/cpu.hpp similarity index 100% rename from libsnes/bsnes/snes/alt/cpu/cpu.hpp rename to waterbox/libsnes/bsnes/snes/alt/cpu/cpu.hpp diff --git a/libsnes/bsnes/snes/alt/cpu/dma.cpp b/waterbox/libsnes/bsnes/snes/alt/cpu/dma.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/cpu/dma.cpp rename to waterbox/libsnes/bsnes/snes/alt/cpu/dma.cpp diff --git a/libsnes/bsnes/snes/alt/cpu/memory.cpp b/waterbox/libsnes/bsnes/snes/alt/cpu/memory.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/cpu/memory.cpp rename to waterbox/libsnes/bsnes/snes/alt/cpu/memory.cpp diff --git a/libsnes/bsnes/snes/alt/cpu/mmio.cpp b/waterbox/libsnes/bsnes/snes/alt/cpu/mmio.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/cpu/mmio.cpp rename to waterbox/libsnes/bsnes/snes/alt/cpu/mmio.cpp diff --git a/libsnes/bsnes/snes/alt/cpu/serialization.cpp b/waterbox/libsnes/bsnes/snes/alt/cpu/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/cpu/serialization.cpp rename to waterbox/libsnes/bsnes/snes/alt/cpu/serialization.cpp diff --git a/libsnes/bsnes/snes/alt/cpu/timing.cpp b/waterbox/libsnes/bsnes/snes/alt/cpu/timing.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/cpu/timing.cpp rename to waterbox/libsnes/bsnes/snes/alt/cpu/timing.cpp diff --git a/libsnes/bsnes/snes/alt/dsp/SPC_DSP.cpp b/waterbox/libsnes/bsnes/snes/alt/dsp/SPC_DSP.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/dsp/SPC_DSP.cpp rename to waterbox/libsnes/bsnes/snes/alt/dsp/SPC_DSP.cpp diff --git a/libsnes/bsnes/snes/alt/dsp/SPC_DSP.h b/waterbox/libsnes/bsnes/snes/alt/dsp/SPC_DSP.h similarity index 100% rename from libsnes/bsnes/snes/alt/dsp/SPC_DSP.h rename to waterbox/libsnes/bsnes/snes/alt/dsp/SPC_DSP.h diff --git a/libsnes/bsnes/snes/alt/dsp/blargg_common.h b/waterbox/libsnes/bsnes/snes/alt/dsp/blargg_common.h similarity index 100% rename from libsnes/bsnes/snes/alt/dsp/blargg_common.h rename to waterbox/libsnes/bsnes/snes/alt/dsp/blargg_common.h diff --git a/libsnes/bsnes/snes/alt/dsp/blargg_config.h b/waterbox/libsnes/bsnes/snes/alt/dsp/blargg_config.h similarity index 100% rename from libsnes/bsnes/snes/alt/dsp/blargg_config.h rename to waterbox/libsnes/bsnes/snes/alt/dsp/blargg_config.h diff --git a/libsnes/bsnes/snes/alt/dsp/blargg_endian.h b/waterbox/libsnes/bsnes/snes/alt/dsp/blargg_endian.h similarity index 100% rename from libsnes/bsnes/snes/alt/dsp/blargg_endian.h rename to waterbox/libsnes/bsnes/snes/alt/dsp/blargg_endian.h diff --git a/libsnes/bsnes/snes/alt/dsp/blargg_source.h b/waterbox/libsnes/bsnes/snes/alt/dsp/blargg_source.h similarity index 100% rename from libsnes/bsnes/snes/alt/dsp/blargg_source.h rename to waterbox/libsnes/bsnes/snes/alt/dsp/blargg_source.h diff --git a/libsnes/bsnes/snes/alt/dsp/dsp.cpp b/waterbox/libsnes/bsnes/snes/alt/dsp/dsp.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/dsp/dsp.cpp rename to waterbox/libsnes/bsnes/snes/alt/dsp/dsp.cpp diff --git a/libsnes/bsnes/snes/alt/dsp/dsp.hpp b/waterbox/libsnes/bsnes/snes/alt/dsp/dsp.hpp similarity index 100% rename from libsnes/bsnes/snes/alt/dsp/dsp.hpp rename to waterbox/libsnes/bsnes/snes/alt/dsp/dsp.hpp diff --git a/libsnes/bsnes/snes/alt/dsp/serialization.cpp b/waterbox/libsnes/bsnes/snes/alt/dsp/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/dsp/serialization.cpp rename to waterbox/libsnes/bsnes/snes/alt/dsp/serialization.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/memory/memory.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/memory/memory.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-compatibility/memory/memory.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/memory/memory.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/memory/memory.hpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/memory/memory.hpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-compatibility/memory/memory.hpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/memory/memory.hpp diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/mmio/mmio.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/mmio/mmio.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-compatibility/mmio/mmio.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/mmio/mmio.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/mmio/mmio.hpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/mmio/mmio.hpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-compatibility/mmio/mmio.hpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/mmio/mmio.hpp diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/ppu.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/ppu.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-compatibility/ppu.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/ppu.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/ppu.hpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/ppu.hpp similarity index 95% rename from libsnes/bsnes/snes/alt/ppu-compatibility/ppu.hpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/ppu.hpp index 9cbfbabf12..1120fb6b3e 100644 --- a/libsnes/bsnes/snes/alt/ppu-compatibility/ppu.hpp +++ b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/ppu.hpp @@ -1,78 +1,78 @@ -class PPU : public Processor, public PPUcounter { -public: - uint8* vram; //[128 * 1024] - uint8* oam; //[544] - uint8* cgram; //[512] - - enum : bool { Threaded = true }; - alwaysinline void step(unsigned clocks); - alwaysinline void synchronize_cpu(); - - #include "memory/memory.hpp" - #include "mmio/mmio.hpp" - #include "render/render.hpp" - - uint32 *surface; - uint32 *output; - - uint8 ppu1_version; - uint8 ppu2_version; - - static void Enter(); - void add_clocks(unsigned clocks); - - uint8 region; - unsigned line; - - enum { NTSC = 0, PAL = 1 }; - enum { BG1 = 0, BG2 = 1, BG3 = 2, BG4 = 3, OAM = 4, BACK = 5, COL = 5 }; - enum { SC_32x32 = 0, SC_64x32 = 1, SC_32x64 = 2, SC_64x64 = 3 }; - - struct { - bool interlace; - bool overscan; - } display; - - struct { - //$2101 - uint8 oam_basesize; - uint8 oam_nameselect; - uint16 oam_tdaddr; - - //$210d-$210e - uint16 m7_hofs, m7_vofs; - - //$211b-$2120 - uint16 m7a, m7b, m7c, m7d, m7x, m7y; - } cache; - - alwaysinline bool interlace() const { return display.interlace; } - alwaysinline bool overscan() const { return display.overscan; } - alwaysinline bool hires() const { return (regs.pseudo_hires || regs.bg_mode == 5 || regs.bg_mode == 6); } - - uint16 mosaic_table[16][4096]; - void render_line(); - - void update_oam_status(); - //required functions - void scanline(); - void render_scanline(); - void frame(); - void enter(); - void enable(); - void power(); - void reset(); - - bool layer_enabled[5][4]; - void layer_enable(unsigned layer, unsigned priority, bool enable); - unsigned frameskip; - unsigned framecounter; - void set_frameskip(unsigned frameskip); - - void serialize(serializer&); - void initialize(); - PPU(); - ~PPU(); -}; - -extern PPU ppu; +class PPU : public Processor, public PPUcounter { +public: + uint8* vram; //[128 * 1024] + uint8* oam; //[544] + uint8* cgram; //[512] + + enum : bool { Threaded = true }; + alwaysinline void step(unsigned clocks); + alwaysinline void synchronize_cpu(); + + #include "memory/memory.hpp" + #include "mmio/mmio.hpp" + #include "render/render.hpp" + + uint32 *surface; + uint32 *output; + + uint8 ppu1_version; + uint8 ppu2_version; + + static void Enter(); + void add_clocks(unsigned clocks); + + uint8 region; + unsigned line; + + enum { NTSC = 0, PAL = 1 }; + enum { BG1 = 0, BG2 = 1, BG3 = 2, BG4 = 3, OAM = 4, BACK = 5, COL = 5 }; + enum { SC_32x32 = 0, SC_64x32 = 1, SC_32x64 = 2, SC_64x64 = 3 }; + + struct { + bool interlace; + bool overscan; + } display; + + struct { + //$2101 + uint8 oam_basesize; + uint8 oam_nameselect; + uint16 oam_tdaddr; + + //$210d-$210e + uint16 m7_hofs, m7_vofs; + + //$211b-$2120 + uint16 m7a, m7b, m7c, m7d, m7x, m7y; + } cache; + + alwaysinline bool interlace() const { return display.interlace; } + alwaysinline bool overscan() const { return display.overscan; } + alwaysinline bool hires() const { return (regs.pseudo_hires || regs.bg_mode == 5 || regs.bg_mode == 6); } + + uint16 mosaic_table[16][4096]; + void render_line(); + + void update_oam_status(); + //required functions + void scanline(); + void render_scanline(); + void frame(); + void enter(); + void enable(); + void power(); + void reset(); + + bool layer_enabled[5][4]; + void layer_enable(unsigned layer, unsigned priority, bool enable); + unsigned frameskip; + unsigned framecounter; + void set_frameskip(unsigned frameskip); + + void serialize(serializer&); + void initialize(); + PPU(); + ~PPU(); +}; + +extern PPU ppu; diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/render/addsub.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/addsub.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-compatibility/render/addsub.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/addsub.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/render/bg.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/bg.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-compatibility/render/bg.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/bg.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/render/cache.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/cache.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-compatibility/render/cache.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/cache.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/render/line.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/line.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-compatibility/render/line.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/line.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/render/mode7.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/mode7.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-compatibility/render/mode7.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/mode7.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/render/oam.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/oam.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-compatibility/render/oam.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/oam.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/render/render.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/render.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-compatibility/render/render.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/render.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/render/render.hpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/render.hpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-compatibility/render/render.hpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/render.hpp diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/render/windows.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/windows.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-compatibility/render/windows.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/render/windows.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-compatibility/serialization.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/serialization.cpp similarity index 96% rename from libsnes/bsnes/snes/alt/ppu-compatibility/serialization.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/serialization.cpp index c83896400e..1ab3d5ecec 100644 --- a/libsnes/bsnes/snes/alt/ppu-compatibility/serialization.cpp +++ b/waterbox/libsnes/bsnes/snes/alt/ppu-compatibility/serialization.cpp @@ -1,208 +1,208 @@ -#ifdef PPU_CPP - -void PPUcounter::serialize(serializer &s) { - s.integer(status.interlace); - s.integer(status.field); - s.integer(status.vcounter); - s.integer(status.hcounter); - - s.array(history.field); - s.array(history.vcounter); - s.array(history.hcounter); - s.integer(history.index); -} - -void PPU::serialize(serializer &s) { - Processor::serialize(s); - PPUcounter::serialize(s); - - s.array(vram,128 * 1024); - s.array(oam,544); - s.array(cgram,512); - - s.integer(ppu1_version); - s.integer(ppu2_version); - - s.integer(region); - s.integer(line); - - s.integer(display.interlace); - s.integer(display.overscan); - - s.integer(cache.oam_basesize); - s.integer(cache.oam_nameselect); - s.integer(cache.oam_tdaddr); - - s.integer(regs.ppu1_mdr); - s.integer(regs.ppu2_mdr); - for(unsigned n = 0; n < 4; n++) s.integer(regs.bg_y[n]); - - s.integer(regs.ioamaddr); - s.integer(regs.icgramaddr); - - s.integer(regs.display_disabled); - s.integer(regs.display_brightness); - - s.integer(regs.oam_basesize); - s.integer(regs.oam_nameselect); - s.integer(regs.oam_tdaddr); - - s.integer(regs.oam_baseaddr); - s.integer(regs.oam_addr); - s.integer(regs.oam_priority); - s.integer(regs.oam_firstsprite); - - s.integer(regs.oam_latchdata); - - for(unsigned n = 0; n < 4; n++) s.integer(regs.bg_tilesize[n]); - s.integer(regs.bg3_priority); - s.integer(regs.bg_mode); - - s.integer(regs.mosaic_size); - for(unsigned n = 0; n < 4; n++) s.integer(regs.mosaic_enabled[n]); - s.integer(regs.mosaic_countdown); - - for(unsigned n = 0; n < 4; n++) s.integer(regs.bg_scaddr[n]); - for(unsigned n = 0; n < 4; n++) s.integer(regs.bg_scsize[n]); - - for(unsigned n = 0; n < 4; n++) s.integer(regs.bg_tdaddr[n]); - - s.integer(regs.bg_ofslatch); - s.integer(regs.m7_hofs); - s.integer(regs.m7_vofs); - for(unsigned n = 0; n < 4; n++) s.integer(regs.bg_hofs[n]); - for(unsigned n = 0; n < 4; n++) s.integer(regs.bg_vofs[n]); - - s.integer(regs.vram_incmode); - s.integer(regs.vram_mapping); - s.integer(regs.vram_incsize); - - s.integer(regs.vram_addr); - - s.integer(regs.mode7_repeat); - s.integer(regs.mode7_vflip); - s.integer(regs.mode7_hflip); - - s.integer(regs.m7_latch); - s.integer(regs.m7a); - s.integer(regs.m7b); - s.integer(regs.m7c); - s.integer(regs.m7d); - s.integer(regs.m7x); - s.integer(regs.m7y); - - s.integer(regs.cgram_addr); - - s.integer(regs.cgram_latchdata); - - for(unsigned n = 0; n < 6; n++) s.integer(regs.window1_enabled[n]); - for(unsigned n = 0; n < 6; n++) s.integer(regs.window1_invert [n]); - for(unsigned n = 0; n < 6; n++) s.integer(regs.window2_enabled[n]); - for(unsigned n = 0; n < 6; n++) s.integer(regs.window2_invert [n]); - - s.integer(regs.window1_left); - s.integer(regs.window1_right); - s.integer(regs.window2_left); - s.integer(regs.window2_right); - - for(unsigned n = 0; n < 6; n++) s.integer(regs.window_mask[n]); - for(unsigned n = 0; n < 5; n++) s.integer(regs.bg_enabled[n]); - for(unsigned n = 0; n < 5; n++) s.integer(regs.bgsub_enabled[n]); - for(unsigned n = 0; n < 5; n++) s.integer(regs.window_enabled[n]); - for(unsigned n = 0; n < 5; n++) s.integer(regs.sub_window_enabled[n]); - - s.integer(regs.color_mask); - s.integer(regs.colorsub_mask); - s.integer(regs.addsub_mode); - s.integer(regs.direct_color); - - s.integer(regs.color_mode); - s.integer(regs.color_halve); - for(unsigned n = 0; n < 6; n++) s.integer(regs.color_enabled[n]); - - s.integer(regs.color_r); - s.integer(regs.color_g); - s.integer(regs.color_b); - s.integer(regs.color_rgb); - - s.integer(regs.mode7_extbg); - s.integer(regs.pseudo_hires); - s.integer(regs.overscan); - s.integer(regs.scanlines); - s.integer(regs.oam_interlace); - s.integer(regs.interlace); - - s.integer(regs.hcounter); - s.integer(regs.vcounter); - s.integer(regs.latch_hcounter); - s.integer(regs.latch_vcounter); - s.integer(regs.counters_latched); - - s.integer(regs.vram_readbuffer); - - s.integer(regs.time_over); - s.integer(regs.range_over); - s.integer(regs.oam_itemcount); - s.integer(regs.oam_tilecount); - - for(unsigned n = 0; n < 256; n++) { - s.integer(pixel_cache[n].src_main); - s.integer(pixel_cache[n].src_sub); - s.integer(pixel_cache[n].bg_main); - s.integer(pixel_cache[n].bg_sub); - s.integer(pixel_cache[n].ce_main); - s.integer(pixel_cache[n].ce_sub); - s.integer(pixel_cache[n].pri_main); - s.integer(pixel_cache[n].pri_sub); - } - - //zero TODO - only on load - //better to just take a small speed hit than store all of bg_tiledata[3][] ... - flush_tiledata_cache(); - - for(unsigned n = 0; n < 6; n++) { - s.array(window[n].main, 256); - s.array(window[n].sub, 256); - } - - for(unsigned n = 0; n < 4; n++) { - s.integer(bg_info[n].tw); - s.integer(bg_info[n].th); - s.integer(bg_info[n].mx); - s.integer(bg_info[n].my); - s.integer(bg_info[n].scx); - s.integer(bg_info[n].scy); - } - - for(unsigned n = 0; n < 128; n++) { - s.integer(sprite_list[n].width); - s.integer(sprite_list[n].height); - s.integer(sprite_list[n].x); - s.integer(sprite_list[n].y); - s.integer(sprite_list[n].character); - s.integer(sprite_list[n].use_nameselect); - s.integer(sprite_list[n].vflip); - s.integer(sprite_list[n].hflip); - s.integer(sprite_list[n].palette); - s.integer(sprite_list[n].priority); - s.integer(sprite_list[n].size); - } - s.integer(sprite_list_valid); - s.integer(active_sprite); - - s.array(oam_itemlist, 32); - - for(unsigned n = 0; n < 34; n++) { - s.integer(oam_tilelist[n].x); - s.integer(oam_tilelist[n].y); - s.integer(oam_tilelist[n].pri); - s.integer(oam_tilelist[n].pal); - s.integer(oam_tilelist[n].tile); - s.integer(oam_tilelist[n].hflip); - } - - s.array(oam_line_pal, 256); - s.array(oam_line_pri, 256); -} - -#endif +#ifdef PPU_CPP + +void PPUcounter::serialize(serializer &s) { + s.integer(status.interlace); + s.integer(status.field); + s.integer(status.vcounter); + s.integer(status.hcounter); + + s.array(history.field); + s.array(history.vcounter); + s.array(history.hcounter); + s.integer(history.index); +} + +void PPU::serialize(serializer &s) { + Processor::serialize(s); + PPUcounter::serialize(s); + + s.array(vram,128 * 1024); + s.array(oam,544); + s.array(cgram,512); + + s.integer(ppu1_version); + s.integer(ppu2_version); + + s.integer(region); + s.integer(line); + + s.integer(display.interlace); + s.integer(display.overscan); + + s.integer(cache.oam_basesize); + s.integer(cache.oam_nameselect); + s.integer(cache.oam_tdaddr); + + s.integer(regs.ppu1_mdr); + s.integer(regs.ppu2_mdr); + for(unsigned n = 0; n < 4; n++) s.integer(regs.bg_y[n]); + + s.integer(regs.ioamaddr); + s.integer(regs.icgramaddr); + + s.integer(regs.display_disabled); + s.integer(regs.display_brightness); + + s.integer(regs.oam_basesize); + s.integer(regs.oam_nameselect); + s.integer(regs.oam_tdaddr); + + s.integer(regs.oam_baseaddr); + s.integer(regs.oam_addr); + s.integer(regs.oam_priority); + s.integer(regs.oam_firstsprite); + + s.integer(regs.oam_latchdata); + + for(unsigned n = 0; n < 4; n++) s.integer(regs.bg_tilesize[n]); + s.integer(regs.bg3_priority); + s.integer(regs.bg_mode); + + s.integer(regs.mosaic_size); + for(unsigned n = 0; n < 4; n++) s.integer(regs.mosaic_enabled[n]); + s.integer(regs.mosaic_countdown); + + for(unsigned n = 0; n < 4; n++) s.integer(regs.bg_scaddr[n]); + for(unsigned n = 0; n < 4; n++) s.integer(regs.bg_scsize[n]); + + for(unsigned n = 0; n < 4; n++) s.integer(regs.bg_tdaddr[n]); + + s.integer(regs.bg_ofslatch); + s.integer(regs.m7_hofs); + s.integer(regs.m7_vofs); + for(unsigned n = 0; n < 4; n++) s.integer(regs.bg_hofs[n]); + for(unsigned n = 0; n < 4; n++) s.integer(regs.bg_vofs[n]); + + s.integer(regs.vram_incmode); + s.integer(regs.vram_mapping); + s.integer(regs.vram_incsize); + + s.integer(regs.vram_addr); + + s.integer(regs.mode7_repeat); + s.integer(regs.mode7_vflip); + s.integer(regs.mode7_hflip); + + s.integer(regs.m7_latch); + s.integer(regs.m7a); + s.integer(regs.m7b); + s.integer(regs.m7c); + s.integer(regs.m7d); + s.integer(regs.m7x); + s.integer(regs.m7y); + + s.integer(regs.cgram_addr); + + s.integer(regs.cgram_latchdata); + + for(unsigned n = 0; n < 6; n++) s.integer(regs.window1_enabled[n]); + for(unsigned n = 0; n < 6; n++) s.integer(regs.window1_invert [n]); + for(unsigned n = 0; n < 6; n++) s.integer(regs.window2_enabled[n]); + for(unsigned n = 0; n < 6; n++) s.integer(regs.window2_invert [n]); + + s.integer(regs.window1_left); + s.integer(regs.window1_right); + s.integer(regs.window2_left); + s.integer(regs.window2_right); + + for(unsigned n = 0; n < 6; n++) s.integer(regs.window_mask[n]); + for(unsigned n = 0; n < 5; n++) s.integer(regs.bg_enabled[n]); + for(unsigned n = 0; n < 5; n++) s.integer(regs.bgsub_enabled[n]); + for(unsigned n = 0; n < 5; n++) s.integer(regs.window_enabled[n]); + for(unsigned n = 0; n < 5; n++) s.integer(regs.sub_window_enabled[n]); + + s.integer(regs.color_mask); + s.integer(regs.colorsub_mask); + s.integer(regs.addsub_mode); + s.integer(regs.direct_color); + + s.integer(regs.color_mode); + s.integer(regs.color_halve); + for(unsigned n = 0; n < 6; n++) s.integer(regs.color_enabled[n]); + + s.integer(regs.color_r); + s.integer(regs.color_g); + s.integer(regs.color_b); + s.integer(regs.color_rgb); + + s.integer(regs.mode7_extbg); + s.integer(regs.pseudo_hires); + s.integer(regs.overscan); + s.integer(regs.scanlines); + s.integer(regs.oam_interlace); + s.integer(regs.interlace); + + s.integer(regs.hcounter); + s.integer(regs.vcounter); + s.integer(regs.latch_hcounter); + s.integer(regs.latch_vcounter); + s.integer(regs.counters_latched); + + s.integer(regs.vram_readbuffer); + + s.integer(regs.time_over); + s.integer(regs.range_over); + s.integer(regs.oam_itemcount); + s.integer(regs.oam_tilecount); + + for(unsigned n = 0; n < 256; n++) { + s.integer(pixel_cache[n].src_main); + s.integer(pixel_cache[n].src_sub); + s.integer(pixel_cache[n].bg_main); + s.integer(pixel_cache[n].bg_sub); + s.integer(pixel_cache[n].ce_main); + s.integer(pixel_cache[n].ce_sub); + s.integer(pixel_cache[n].pri_main); + s.integer(pixel_cache[n].pri_sub); + } + + //zero TODO - only on load + //better to just take a small speed hit than store all of bg_tiledata[3][] ... + flush_tiledata_cache(); + + for(unsigned n = 0; n < 6; n++) { + s.array(window[n].main, 256); + s.array(window[n].sub, 256); + } + + for(unsigned n = 0; n < 4; n++) { + s.integer(bg_info[n].tw); + s.integer(bg_info[n].th); + s.integer(bg_info[n].mx); + s.integer(bg_info[n].my); + s.integer(bg_info[n].scx); + s.integer(bg_info[n].scy); + } + + for(unsigned n = 0; n < 128; n++) { + s.integer(sprite_list[n].width); + s.integer(sprite_list[n].height); + s.integer(sprite_list[n].x); + s.integer(sprite_list[n].y); + s.integer(sprite_list[n].character); + s.integer(sprite_list[n].use_nameselect); + s.integer(sprite_list[n].vflip); + s.integer(sprite_list[n].hflip); + s.integer(sprite_list[n].palette); + s.integer(sprite_list[n].priority); + s.integer(sprite_list[n].size); + } + s.integer(sprite_list_valid); + s.integer(active_sprite); + + s.array(oam_itemlist, 32); + + for(unsigned n = 0; n < 34; n++) { + s.integer(oam_tilelist[n].x); + s.integer(oam_tilelist[n].y); + s.integer(oam_tilelist[n].pri); + s.integer(oam_tilelist[n].pal); + s.integer(oam_tilelist[n].tile); + s.integer(oam_tilelist[n].hflip); + } + + s.array(oam_line_pal, 256); + s.array(oam_line_pri, 256); +} + +#endif diff --git a/libsnes/bsnes/snes/alt/ppu-performance/background/background.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/background/background.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/background/background.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/background/background.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-performance/background/background.hpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/background/background.hpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/background/background.hpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/background/background.hpp diff --git a/libsnes/bsnes/snes/alt/ppu-performance/background/mode7.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/background/mode7.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/background/mode7.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/background/mode7.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-performance/cache/cache.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/cache/cache.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/cache/cache.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/cache/cache.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-performance/cache/cache.hpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/cache/cache.hpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/cache/cache.hpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/cache/cache.hpp diff --git a/libsnes/bsnes/snes/alt/ppu-performance/mmio/mmio.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/mmio/mmio.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/mmio/mmio.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/mmio/mmio.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-performance/mmio/mmio.hpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/mmio/mmio.hpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/mmio/mmio.hpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/mmio/mmio.hpp diff --git a/libsnes/bsnes/snes/alt/ppu-performance/ppu.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/ppu.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/ppu.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/ppu.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-performance/ppu.hpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/ppu.hpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/ppu.hpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/ppu.hpp diff --git a/libsnes/bsnes/snes/alt/ppu-performance/screen/screen.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/screen/screen.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/screen/screen.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/screen/screen.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-performance/screen/screen.hpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/screen/screen.hpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/screen/screen.hpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/screen/screen.hpp diff --git a/libsnes/bsnes/snes/alt/ppu-performance/serialization.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/serialization.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/serialization.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-performance/sprite/sprite.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/sprite/sprite.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/sprite/sprite.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/sprite/sprite.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-performance/sprite/sprite.hpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/sprite/sprite.hpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/sprite/sprite.hpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/sprite/sprite.hpp diff --git a/libsnes/bsnes/snes/alt/ppu-performance/window/window.cpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/window/window.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/window/window.cpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/window/window.cpp diff --git a/libsnes/bsnes/snes/alt/ppu-performance/window/window.hpp b/waterbox/libsnes/bsnes/snes/alt/ppu-performance/window/window.hpp similarity index 100% rename from libsnes/bsnes/snes/alt/ppu-performance/window/window.hpp rename to waterbox/libsnes/bsnes/snes/alt/ppu-performance/window/window.hpp diff --git a/libsnes/bsnes/snes/alt/smp/algorithms.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/algorithms.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/algorithms.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/algorithms.cpp diff --git a/libsnes/bsnes/snes/alt/smp/core.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/core.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/core.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/core.cpp diff --git a/libsnes/bsnes/snes/alt/smp/core/cc.sh b/waterbox/libsnes/bsnes/snes/alt/smp/core/cc.sh similarity index 100% rename from libsnes/bsnes/snes/alt/smp/core/cc.sh rename to waterbox/libsnes/bsnes/snes/alt/smp/core/cc.sh diff --git a/libsnes/bsnes/snes/alt/smp/core/generate.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/core/generate.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/core/generate.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/core/generate.cpp diff --git a/libsnes/bsnes/snes/alt/smp/core/op_misc.b b/waterbox/libsnes/bsnes/snes/alt/smp/core/op_misc.b similarity index 94% rename from libsnes/bsnes/snes/alt/smp/core/op_misc.b rename to waterbox/libsnes/bsnes/snes/alt/smp/core/op_misc.b index fb25865000..d38086fdd2 100644 --- a/libsnes/bsnes/snes/alt/smp/core/op_misc.b +++ b/waterbox/libsnes/bsnes/snes/alt/smp/core/op_misc.b @@ -1,163 +1,163 @@ -nop(0x00) { -1:op_io(); -} - -sleep(0xef), -stop(0xff) { -1:op_io(); -2:op_io(); - regs.pc--; -} - -xcn(0x9f) { -1:op_io(); -2:op_io(); -3:op_io(); -4:op_io(); - regs.a = (regs.a >> 4) | (regs.a << 4); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -daa(0xdf) { -1:op_io(); -2:op_io(); - if(regs.p.c || (regs.a) > 0x99) { - regs.a += 0x60; - regs.p.c = 1; - } - if(regs.p.h || (regs.a & 15) > 0x09) { - regs.a += 0x06; - } - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -das(0xbe) { -1:op_io(); -2:op_io(); - if(!regs.p.c || (regs.a) > 0x99) { - regs.a -= 0x60; - regs.p.c = 0; - } - if(!regs.p.h || (regs.a & 15) > 0x09) { - regs.a -= 0x06; - } - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -clrc(0x60, regs.p.c = 0), -clrp(0x20, regs.p.p = 0), -setc(0x80, regs.p.c = 1), -setp(0x40, regs.p.p = 1) { -1:op_io(); - $1; -} - -clrv(0xe0) { -1:op_io(); - regs.p.v = 0; - regs.p.h = 0; -} - -notc(0xed) { -1:op_io(); -2:op_io(); - regs.p.c = !regs.p.c; -} - -ei(0xa0, 1), -di(0xc0, 0) { -1:op_io(); -2:op_io(); - regs.p.i = $1; -} - -set0_dp(0x02, rd |= 0x01), -clr0_dp(0x12, rd &= ~0x01), -set1_dp(0x22, rd |= 0x02), -clr1_dp(0x32, rd &= ~0x02), -set2_dp(0x42, rd |= 0x04), -clr2_dp(0x52, rd &= ~0x04), -set3_dp(0x62, rd |= 0x08), -clr3_dp(0x72, rd &= ~0x08), -set4_dp(0x82, rd |= 0x10), -clr4_dp(0x92, rd &= ~0x10), -set5_dp(0xa2, rd |= 0x20), -clr5_dp(0xb2, rd &= ~0x20), -set6_dp(0xc2, rd |= 0x40), -clr6_dp(0xd2, rd &= ~0x40), -set7_dp(0xe2, rd |= 0x80), -clr7_dp(0xf2, rd &= ~0x80) { -1:dp = op_readpc(); -2:rd = op_readdp(dp); -3:$1; - op_writedp(dp, rd); -} - -push_a(0x2d, a), -push_x(0x4d, x), -push_y(0x6d, y), -push_p(0x0d, p) { -1:op_io(); -2:op_io(); -3:op_writestack(regs.$1); -} - -pop_a(0xae, a), -pop_x(0xce, x), -pop_y(0xee, y), -pop_p(0x8e, p) { -1:op_io(); -2:op_io(); -3:regs.$1 = op_readstack(); -} - -mul_ya(0xcf) { -1:op_io(); -2:op_io(); -3:op_io(); -4:op_io(); -5:op_io(); -6:op_io(); -7:op_io(); -8:op_io(); - ya = regs.y * regs.a; - regs.a = ya; - regs.y = ya >> 8; - //result is set based on y (high-byte) only - regs.p.n = !!(regs.y & 0x80); - regs.p.z = (regs.y == 0); -} - -div_ya_x(0x9e) { -1:op_io(); -2:op_io(); -3:op_io(); -4:op_io(); -5:op_io(); -6:op_io(); -7:op_io(); -8:op_io(); -9:op_io(); -10:op_io(); -11:op_io(); - ya = regs.ya; - //overflow set if quotient >= 256 - regs.p.v = !!(regs.y >= regs.x); - regs.p.h = !!((regs.y & 15) >= (regs.x & 15)); - if(regs.y < (regs.x << 1)) { - //if quotient is <= 511 (will fit into 9-bit result) - regs.a = ya / regs.x; - regs.y = ya % regs.x; - } else { - //otherwise, the quotient won't fit into regs.p.v + regs.a - //this emulates the odd behavior of the S-SMP in this case - regs.a = 255 - (ya - (regs.x << 9)) / (256 - regs.x); - regs.y = regs.x + (ya - (regs.x << 9)) % (256 - regs.x); - } - //result is set based on a (quotient) only - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} +nop(0x00) { +1:op_io(); +} + +sleep(0xef), +stop(0xff) { +1:op_io(); +2:op_io(); + regs.pc--; +} + +xcn(0x9f) { +1:op_io(); +2:op_io(); +3:op_io(); +4:op_io(); + regs.a = (regs.a >> 4) | (regs.a << 4); + regs.p.n = !!(regs.a & 0x80); + regs.p.z = (regs.a == 0); +} + +daa(0xdf) { +1:op_io(); +2:op_io(); + if(regs.p.c || (regs.a) > 0x99) { + regs.a += 0x60; + regs.p.c = 1; + } + if(regs.p.h || (regs.a & 15) > 0x09) { + regs.a += 0x06; + } + regs.p.n = !!(regs.a & 0x80); + regs.p.z = (regs.a == 0); +} + +das(0xbe) { +1:op_io(); +2:op_io(); + if(!regs.p.c || (regs.a) > 0x99) { + regs.a -= 0x60; + regs.p.c = 0; + } + if(!regs.p.h || (regs.a & 15) > 0x09) { + regs.a -= 0x06; + } + regs.p.n = !!(regs.a & 0x80); + regs.p.z = (regs.a == 0); +} + +clrc(0x60, regs.p.c = 0), +clrp(0x20, regs.p.p = 0), +setc(0x80, regs.p.c = 1), +setp(0x40, regs.p.p = 1) { +1:op_io(); + $1; +} + +clrv(0xe0) { +1:op_io(); + regs.p.v = 0; + regs.p.h = 0; +} + +notc(0xed) { +1:op_io(); +2:op_io(); + regs.p.c = !regs.p.c; +} + +ei(0xa0, 1), +di(0xc0, 0) { +1:op_io(); +2:op_io(); + regs.p.i = $1; +} + +set0_dp(0x02, rd |= 0x01), +clr0_dp(0x12, rd &= ~0x01), +set1_dp(0x22, rd |= 0x02), +clr1_dp(0x32, rd &= ~0x02), +set2_dp(0x42, rd |= 0x04), +clr2_dp(0x52, rd &= ~0x04), +set3_dp(0x62, rd |= 0x08), +clr3_dp(0x72, rd &= ~0x08), +set4_dp(0x82, rd |= 0x10), +clr4_dp(0x92, rd &= ~0x10), +set5_dp(0xa2, rd |= 0x20), +clr5_dp(0xb2, rd &= ~0x20), +set6_dp(0xc2, rd |= 0x40), +clr6_dp(0xd2, rd &= ~0x40), +set7_dp(0xe2, rd |= 0x80), +clr7_dp(0xf2, rd &= ~0x80) { +1:dp = op_readpc(); +2:rd = op_readdp(dp); +3:$1; + op_writedp(dp, rd); +} + +push_a(0x2d, a), +push_x(0x4d, x), +push_y(0x6d, y), +push_p(0x0d, p) { +1:op_io(); +2:op_io(); +3:op_writestack(regs.$1); +} + +pop_a(0xae, a), +pop_x(0xce, x), +pop_y(0xee, y), +pop_p(0x8e, p) { +1:op_io(); +2:op_io(); +3:regs.$1 = op_readstack(); +} + +mul_ya(0xcf) { +1:op_io(); +2:op_io(); +3:op_io(); +4:op_io(); +5:op_io(); +6:op_io(); +7:op_io(); +8:op_io(); + ya = regs.y * regs.a; + regs.a = ya; + regs.y = ya >> 8; + //result is set based on y (high-byte) only + regs.p.n = !!(regs.y & 0x80); + regs.p.z = (regs.y == 0); +} + +div_ya_x(0x9e) { +1:op_io(); +2:op_io(); +3:op_io(); +4:op_io(); +5:op_io(); +6:op_io(); +7:op_io(); +8:op_io(); +9:op_io(); +10:op_io(); +11:op_io(); + ya = regs.ya; + //overflow set if quotient >= 256 + regs.p.v = !!(regs.y >= regs.x); + regs.p.h = !!((regs.y & 15) >= (regs.x & 15)); + if(regs.y < (regs.x << 1)) { + //if quotient is <= 511 (will fit into 9-bit result) + regs.a = ya / regs.x; + regs.y = ya % regs.x; + } else { + //otherwise, the quotient won't fit into regs.p.v + regs.a + //this emulates the odd behavior of the S-SMP in this case + regs.a = 255 - (ya - (regs.x << 9)) / (256 - regs.x); + regs.y = regs.x + (ya - (regs.x << 9)) % (256 - regs.x); + } + //result is set based on a (quotient) only + regs.p.n = !!(regs.a & 0x80); + regs.p.z = (regs.a == 0); +} diff --git a/libsnes/bsnes/snes/alt/smp/core/op_misc.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/core/op_misc.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/core/op_misc.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/core/op_misc.cpp diff --git a/libsnes/bsnes/snes/alt/smp/core/op_mov.b b/waterbox/libsnes/bsnes/snes/alt/smp/core/op_mov.b similarity index 94% rename from libsnes/bsnes/snes/alt/smp/core/op_mov.b rename to waterbox/libsnes/bsnes/snes/alt/smp/core/op_mov.b index dee821afad..37b1116b09 100644 --- a/libsnes/bsnes/snes/alt/smp/core/op_mov.b +++ b/waterbox/libsnes/bsnes/snes/alt/smp/core/op_mov.b @@ -1,217 +1,217 @@ -mov_a_x(0x7d, a, x), -mov_a_y(0xdd, a, y), -mov_x_a(0x5d, x, a), -mov_y_a(0xfd, y, a), -mov_x_sp(0x9d, x, sp) { -1:op_io(); - regs.$1 = regs.$2; - regs.p.n = !!(regs.$1 & 0x80); - regs.p.z = (regs.$1 == 0); -} - -mov_sp_x(0xbd, sp, x) { -1:op_io(); - regs.$1 = regs.$2; -} - -mov_a_const(0xe8, a), -mov_x_const(0xcd, x), -mov_y_const(0x8d, y) { -1:regs.$1 = op_readpc(); - regs.p.n = !!(regs.$1 & 0x80); - regs.p.z = (regs.$1 == 0); -} - -mov_a_ix(0xe6) { -1:op_io(); -2:regs.a = op_readdp(regs.x); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -mov_a_ixinc(0xbf) { -1:op_io(); -2:regs.a = op_readdp(regs.x++); -3:op_io(); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -mov_a_dp(0xe4, a), -mov_x_dp(0xf8, x), -mov_y_dp(0xeb, y) { -1:sp = op_readpc(); -2:regs.$1 = op_readdp(sp); - regs.p.n = !!(regs.$1 & 0x80); - regs.p.z = (regs.$1 == 0); -} - -mov_a_dpx(0xf4, a, x), -mov_x_dpy(0xf9, x, y), -mov_y_dpx(0xfb, y, x) { -1:sp = op_readpc(); -2:op_io(); -3:regs.$1 = op_readdp(sp + regs.$2); - regs.p.n = !!(regs.$1 & 0x80); - regs.p.z = (regs.$1 == 0); -} - -mov_a_addr(0xe5, a), -mov_x_addr(0xe9, x), -mov_y_addr(0xec, y) { -1:sp = op_readpc(); -2:sp |= op_readpc() << 8; -3:regs.$1 = op_readaddr(sp); - regs.p.n = !!(regs.$1 & 0x80); - regs.p.z = (regs.$1 == 0); -} - -mov_a_addrx(0xf5, x), -mov_a_addry(0xf6, y) { -1:sp = op_readpc(); -2:sp |= op_readpc() << 8; -3:op_io(); -4:regs.a = op_readaddr(sp + regs.$1); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -mov_a_idpx(0xe7) { -1:dp = op_readpc() + regs.x; -2:op_io(); -3:sp = op_readdp(dp); -4:sp |= op_readdp(dp + 1) << 8; -5:regs.a = op_readaddr(sp); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -mov_a_idpy(0xf7) { -1:dp = op_readpc(); -2:op_io(); -3:sp = op_readdp(dp); -4:sp |= op_readdp(dp + 1) << 8; -5:regs.a = op_readaddr(sp + regs.y); - regs.p.n = !!(regs.a & 0x80); - regs.p.z = (regs.a == 0); -} - -mov_dp_dp(0xfa) { -1:sp = op_readpc(); -2:rd = op_readdp(sp); -3:dp = op_readpc(); -4:op_writedp(dp, rd); -} - -mov_dp_const(0x8f) { -1:rd = op_readpc(); -2:dp = op_readpc(); -3:op_readdp(dp); -4:op_writedp(dp, rd); -} - -mov_ix_a(0xc6) { -1:op_io(); -2:op_readdp(regs.x); -3:op_writedp(regs.x, regs.a); -} - -mov_ixinc_a(0xaf) { -1:op_io(); -2:op_io(); -3:op_writedp(regs.x++, regs.a); -} - -mov_dp_a(0xc4, a), -mov_dp_x(0xd8, x), -mov_dp_y(0xcb, y) { -1:dp = op_readpc(); -2:op_readdp(dp); -3:op_writedp(dp, regs.$1); -} - -mov_dpx_a(0xd4, x, a), -mov_dpy_x(0xd9, y, x), -mov_dpx_y(0xdb, x, y) { -1:dp = op_readpc(); -2:op_io(); - dp += regs.$1; -3:op_readdp(dp); -4:op_writedp(dp, regs.$2); -} - -mov_addr_a(0xc5, a), -mov_addr_x(0xc9, x), -mov_addr_y(0xcc, y) { -1:dp = op_readpc(); -2:dp |= op_readpc() << 8; -3:op_readaddr(dp); -4:op_writeaddr(dp, regs.$1); -} - -mov_addrx_a(0xd5, x), -mov_addry_a(0xd6, y) { -1:dp = op_readpc(); -2:dp |= op_readpc() << 8; -3:op_io(); - dp += regs.$1; -4:op_readaddr(dp); -5:op_writeaddr(dp, regs.a); -} - -mov_idpx_a(0xc7) { -1:sp = op_readpc(); -2:op_io(); - sp += regs.x; -3:dp = op_readdp(sp); -4:dp |= op_readdp(sp + 1) << 8; -5:op_readaddr(dp); -6:op_writeaddr(dp, regs.a); -} - -mov_idpy_a(0xd7) { -1:sp = op_readpc(); -2:dp = op_readdp(sp); -3:dp |= op_readdp(sp + 1) << 8; -4:op_io(); - dp += regs.y; -5:op_readaddr(dp); -6:op_writeaddr(dp, regs.a); -} - -movw_ya_dp(0xba) { -1:sp = op_readpc(); -2:regs.a = op_readdp(sp); -3:op_io(); -4:regs.y = op_readdp(sp + 1); - regs.p.n = !!(regs.ya & 0x8000); - regs.p.z = (regs.ya == 0); -} - -movw_dp_ya(0xda) { -1:dp = op_readpc(); -2:op_readdp(dp); -3:op_writedp(dp, regs.a); -4:op_writedp(dp + 1, regs.y); -} - -mov1_c_bit(0xaa) { -1:sp = op_readpc(); -2:sp |= op_readpc() << 8; -3:bit = sp >> 13; - sp &= 0x1fff; - rd = op_readaddr(sp); - regs.p.c = !!(rd & (1 << bit)); -} - -mov1_bit_c(0xca) { -1:dp = op_readpc(); -2:dp |= op_readpc() << 8; -3:bit = dp >> 13; - dp &= 0x1fff; - rd = op_readaddr(dp); - if(regs.p.c)rd |= (1 << bit); - else rd &= ~(1 << bit); -4:op_io(); -5:op_writeaddr(dp, rd); -} +mov_a_x(0x7d, a, x), +mov_a_y(0xdd, a, y), +mov_x_a(0x5d, x, a), +mov_y_a(0xfd, y, a), +mov_x_sp(0x9d, x, sp) { +1:op_io(); + regs.$1 = regs.$2; + regs.p.n = !!(regs.$1 & 0x80); + regs.p.z = (regs.$1 == 0); +} + +mov_sp_x(0xbd, sp, x) { +1:op_io(); + regs.$1 = regs.$2; +} + +mov_a_const(0xe8, a), +mov_x_const(0xcd, x), +mov_y_const(0x8d, y) { +1:regs.$1 = op_readpc(); + regs.p.n = !!(regs.$1 & 0x80); + regs.p.z = (regs.$1 == 0); +} + +mov_a_ix(0xe6) { +1:op_io(); +2:regs.a = op_readdp(regs.x); + regs.p.n = !!(regs.a & 0x80); + regs.p.z = (regs.a == 0); +} + +mov_a_ixinc(0xbf) { +1:op_io(); +2:regs.a = op_readdp(regs.x++); +3:op_io(); + regs.p.n = !!(regs.a & 0x80); + regs.p.z = (regs.a == 0); +} + +mov_a_dp(0xe4, a), +mov_x_dp(0xf8, x), +mov_y_dp(0xeb, y) { +1:sp = op_readpc(); +2:regs.$1 = op_readdp(sp); + regs.p.n = !!(regs.$1 & 0x80); + regs.p.z = (regs.$1 == 0); +} + +mov_a_dpx(0xf4, a, x), +mov_x_dpy(0xf9, x, y), +mov_y_dpx(0xfb, y, x) { +1:sp = op_readpc(); +2:op_io(); +3:regs.$1 = op_readdp(sp + regs.$2); + regs.p.n = !!(regs.$1 & 0x80); + regs.p.z = (regs.$1 == 0); +} + +mov_a_addr(0xe5, a), +mov_x_addr(0xe9, x), +mov_y_addr(0xec, y) { +1:sp = op_readpc(); +2:sp |= op_readpc() << 8; +3:regs.$1 = op_readaddr(sp); + regs.p.n = !!(regs.$1 & 0x80); + regs.p.z = (regs.$1 == 0); +} + +mov_a_addrx(0xf5, x), +mov_a_addry(0xf6, y) { +1:sp = op_readpc(); +2:sp |= op_readpc() << 8; +3:op_io(); +4:regs.a = op_readaddr(sp + regs.$1); + regs.p.n = !!(regs.a & 0x80); + regs.p.z = (regs.a == 0); +} + +mov_a_idpx(0xe7) { +1:dp = op_readpc() + regs.x; +2:op_io(); +3:sp = op_readdp(dp); +4:sp |= op_readdp(dp + 1) << 8; +5:regs.a = op_readaddr(sp); + regs.p.n = !!(regs.a & 0x80); + regs.p.z = (regs.a == 0); +} + +mov_a_idpy(0xf7) { +1:dp = op_readpc(); +2:op_io(); +3:sp = op_readdp(dp); +4:sp |= op_readdp(dp + 1) << 8; +5:regs.a = op_readaddr(sp + regs.y); + regs.p.n = !!(regs.a & 0x80); + regs.p.z = (regs.a == 0); +} + +mov_dp_dp(0xfa) { +1:sp = op_readpc(); +2:rd = op_readdp(sp); +3:dp = op_readpc(); +4:op_writedp(dp, rd); +} + +mov_dp_const(0x8f) { +1:rd = op_readpc(); +2:dp = op_readpc(); +3:op_readdp(dp); +4:op_writedp(dp, rd); +} + +mov_ix_a(0xc6) { +1:op_io(); +2:op_readdp(regs.x); +3:op_writedp(regs.x, regs.a); +} + +mov_ixinc_a(0xaf) { +1:op_io(); +2:op_io(); +3:op_writedp(regs.x++, regs.a); +} + +mov_dp_a(0xc4, a), +mov_dp_x(0xd8, x), +mov_dp_y(0xcb, y) { +1:dp = op_readpc(); +2:op_readdp(dp); +3:op_writedp(dp, regs.$1); +} + +mov_dpx_a(0xd4, x, a), +mov_dpy_x(0xd9, y, x), +mov_dpx_y(0xdb, x, y) { +1:dp = op_readpc(); +2:op_io(); + dp += regs.$1; +3:op_readdp(dp); +4:op_writedp(dp, regs.$2); +} + +mov_addr_a(0xc5, a), +mov_addr_x(0xc9, x), +mov_addr_y(0xcc, y) { +1:dp = op_readpc(); +2:dp |= op_readpc() << 8; +3:op_readaddr(dp); +4:op_writeaddr(dp, regs.$1); +} + +mov_addrx_a(0xd5, x), +mov_addry_a(0xd6, y) { +1:dp = op_readpc(); +2:dp |= op_readpc() << 8; +3:op_io(); + dp += regs.$1; +4:op_readaddr(dp); +5:op_writeaddr(dp, regs.a); +} + +mov_idpx_a(0xc7) { +1:sp = op_readpc(); +2:op_io(); + sp += regs.x; +3:dp = op_readdp(sp); +4:dp |= op_readdp(sp + 1) << 8; +5:op_readaddr(dp); +6:op_writeaddr(dp, regs.a); +} + +mov_idpy_a(0xd7) { +1:sp = op_readpc(); +2:dp = op_readdp(sp); +3:dp |= op_readdp(sp + 1) << 8; +4:op_io(); + dp += regs.y; +5:op_readaddr(dp); +6:op_writeaddr(dp, regs.a); +} + +movw_ya_dp(0xba) { +1:sp = op_readpc(); +2:regs.a = op_readdp(sp); +3:op_io(); +4:regs.y = op_readdp(sp + 1); + regs.p.n = !!(regs.ya & 0x8000); + regs.p.z = (regs.ya == 0); +} + +movw_dp_ya(0xda) { +1:dp = op_readpc(); +2:op_readdp(dp); +3:op_writedp(dp, regs.a); +4:op_writedp(dp + 1, regs.y); +} + +mov1_c_bit(0xaa) { +1:sp = op_readpc(); +2:sp |= op_readpc() << 8; +3:bit = sp >> 13; + sp &= 0x1fff; + rd = op_readaddr(sp); + regs.p.c = !!(rd & (1 << bit)); +} + +mov1_bit_c(0xca) { +1:dp = op_readpc(); +2:dp |= op_readpc() << 8; +3:bit = dp >> 13; + dp &= 0x1fff; + rd = op_readaddr(dp); + if(regs.p.c)rd |= (1 << bit); + else rd &= ~(1 << bit); +4:op_io(); +5:op_writeaddr(dp, rd); +} diff --git a/libsnes/bsnes/snes/alt/smp/core/op_mov.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/core/op_mov.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/core/op_mov.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/core/op_mov.cpp diff --git a/libsnes/bsnes/snes/alt/smp/core/op_pc.b b/waterbox/libsnes/bsnes/snes/alt/smp/core/op_pc.b similarity index 94% rename from libsnes/bsnes/snes/alt/smp/core/op_pc.b rename to waterbox/libsnes/bsnes/snes/alt/smp/core/op_pc.b index affaf844c5..4339377d84 100644 --- a/libsnes/bsnes/snes/alt/smp/core/op_pc.b +++ b/waterbox/libsnes/bsnes/snes/alt/smp/core/op_pc.b @@ -1,179 +1,179 @@ -bra(0x2f, 0), -beq(0xf0, !regs.p.z), -bne(0xd0, regs.p.z), -bcs(0xb0, !regs.p.c), -bcc(0x90, regs.p.c), -bvs(0x70, !regs.p.v), -bvc(0x50, regs.p.v), -bmi(0x30, !regs.p.n), -bpl(0x10, regs.p.n) { -1:rd = op_readpc(); - if($1)end; -2:op_io(); -3:op_io(); - regs.pc += (int8)rd; -} - -bbs0(0x03, 0x01, !=), -bbc0(0x13, 0x01, ==), -bbs1(0x23, 0x02, !=), -bbc1(0x33, 0x02, ==), -bbs2(0x43, 0x04, !=), -bbc2(0x53, 0x04, ==), -bbs3(0x63, 0x08, !=), -bbc3(0x73, 0x08, ==), -bbs4(0x83, 0x10, !=), -bbc4(0x93, 0x10, ==), -bbs5(0xa3, 0x20, !=), -bbc5(0xb3, 0x20, ==), -bbs6(0xc3, 0x40, !=), -bbc6(0xd3, 0x40, ==), -bbs7(0xe3, 0x80, !=), -bbc7(0xf3, 0x80, ==) { -1:dp = op_readpc(); -2:sp = op_readdp(dp); -3:rd = op_readpc(); -4:op_io(); - if((sp & $1) $2 $1)end; -5:op_io(); -6:op_io(); - regs.pc += (int8)rd; -} - -cbne_dp(0x2e) { -1:dp = op_readpc(); -2:sp = op_readdp(dp); -3:rd = op_readpc(); -4:op_io(); - if(regs.a == sp)end; -5:op_io(); -6:op_io(); - regs.pc += (int8)rd; -} - -cbne_dpx(0xde) { -1:dp = op_readpc(); -2:op_io(); -3:sp = op_readdp(dp + regs.x); -4:rd = op_readpc(); -5:op_io(); - if(regs.a == sp)end; -6:op_io(); -7:op_io(); - regs.pc += (int8)rd; -} - -dbnz_dp(0x6e) { -1:dp = op_readpc(); -2:wr = op_readdp(dp); -3:op_writedp(dp, --wr); -4:rd = op_readpc(); - if(wr == 0x00)end; -5:op_io(); -6:op_io(); - regs.pc += (int8)rd; -} - -dbnz_y(0xfe) { -1:rd = op_readpc(); -2:op_io(); - regs.y--; -3:op_io(); - if(regs.y == 0x00)end; -4:op_io(); -5:op_io(); - regs.pc += (int8)rd; -} - -jmp_addr(0x5f) { -1:rd = op_readpc(); -2:rd |= op_readpc() << 8; - regs.pc = rd; -} - -jmp_iaddrx(0x1f) { -1:dp = op_readpc(); -2:dp |= op_readpc() << 8; -3:op_io(); - dp += regs.x; -4:rd = op_readaddr(dp); -5:rd |= op_readaddr(dp + 1) << 8; - regs.pc = rd; -} - -call(0x3f) { -1:rd = op_readpc(); -2:rd |= op_readpc() << 8; -3:op_io(); -4:op_io(); -5:op_io(); -6:op_writestack(regs.pc >> 8); -7:op_writestack(regs.pc); - regs.pc = rd; -} - -pcall(0x4f) { -1:rd = op_readpc(); -2:op_io(); -3:op_io(); -4:op_writestack(regs.pc >> 8); -5:op_writestack(regs.pc); - regs.pc = 0xff00 | rd; -} - -tcall_0(0x01, 0), -tcall_1(0x11, 1), -tcall_2(0x21, 2), -tcall_3(0x31, 3), -tcall_4(0x41, 4), -tcall_5(0x51, 5), -tcall_6(0x61, 6), -tcall_7(0x71, 7), -tcall_8(0x81, 8), -tcall_9(0x91, 9), -tcall_10(0xa1, 10), -tcall_11(0xb1, 11), -tcall_12(0xc1, 12), -tcall_13(0xd1, 13), -tcall_14(0xe1, 14), -tcall_15(0xf1, 15) { -1:dp = 0xffde - ($1 << 1); - rd = op_readaddr(dp); -2:rd |= op_readaddr(dp + 1) << 8; -3:op_io(); -4:op_io(); -5:op_io(); -6:op_writestack(regs.pc >> 8); -7:op_writestack(regs.pc); - regs.pc = rd; -} - -brk(0x0f) { -1:rd = op_readaddr(0xffde); -2:rd |= op_readaddr(0xffdf) << 8; -3:op_io(); -4:op_io(); -5:op_writestack(regs.pc >> 8); -6:op_writestack(regs.pc); -7:op_writestack(regs.p); - regs.pc = rd; - regs.p.b = 1; - regs.p.i = 0; -} - -ret(0x6f) { -1:rd = op_readstack(); -2:rd |= op_readstack() << 8; -3:op_io(); -4:op_io(); - regs.pc = rd; -} - -reti(0x7f) { -1:regs.p = op_readstack(); -2:rd = op_readstack(); -3:rd |= op_readstack() << 8; -4:op_io(); -5:op_io(); - regs.pc = rd; -} +bra(0x2f, 0), +beq(0xf0, !regs.p.z), +bne(0xd0, regs.p.z), +bcs(0xb0, !regs.p.c), +bcc(0x90, regs.p.c), +bvs(0x70, !regs.p.v), +bvc(0x50, regs.p.v), +bmi(0x30, !regs.p.n), +bpl(0x10, regs.p.n) { +1:rd = op_readpc(); + if($1)end; +2:op_io(); +3:op_io(); + regs.pc += (int8)rd; +} + +bbs0(0x03, 0x01, !=), +bbc0(0x13, 0x01, ==), +bbs1(0x23, 0x02, !=), +bbc1(0x33, 0x02, ==), +bbs2(0x43, 0x04, !=), +bbc2(0x53, 0x04, ==), +bbs3(0x63, 0x08, !=), +bbc3(0x73, 0x08, ==), +bbs4(0x83, 0x10, !=), +bbc4(0x93, 0x10, ==), +bbs5(0xa3, 0x20, !=), +bbc5(0xb3, 0x20, ==), +bbs6(0xc3, 0x40, !=), +bbc6(0xd3, 0x40, ==), +bbs7(0xe3, 0x80, !=), +bbc7(0xf3, 0x80, ==) { +1:dp = op_readpc(); +2:sp = op_readdp(dp); +3:rd = op_readpc(); +4:op_io(); + if((sp & $1) $2 $1)end; +5:op_io(); +6:op_io(); + regs.pc += (int8)rd; +} + +cbne_dp(0x2e) { +1:dp = op_readpc(); +2:sp = op_readdp(dp); +3:rd = op_readpc(); +4:op_io(); + if(regs.a == sp)end; +5:op_io(); +6:op_io(); + regs.pc += (int8)rd; +} + +cbne_dpx(0xde) { +1:dp = op_readpc(); +2:op_io(); +3:sp = op_readdp(dp + regs.x); +4:rd = op_readpc(); +5:op_io(); + if(regs.a == sp)end; +6:op_io(); +7:op_io(); + regs.pc += (int8)rd; +} + +dbnz_dp(0x6e) { +1:dp = op_readpc(); +2:wr = op_readdp(dp); +3:op_writedp(dp, --wr); +4:rd = op_readpc(); + if(wr == 0x00)end; +5:op_io(); +6:op_io(); + regs.pc += (int8)rd; +} + +dbnz_y(0xfe) { +1:rd = op_readpc(); +2:op_io(); + regs.y--; +3:op_io(); + if(regs.y == 0x00)end; +4:op_io(); +5:op_io(); + regs.pc += (int8)rd; +} + +jmp_addr(0x5f) { +1:rd = op_readpc(); +2:rd |= op_readpc() << 8; + regs.pc = rd; +} + +jmp_iaddrx(0x1f) { +1:dp = op_readpc(); +2:dp |= op_readpc() << 8; +3:op_io(); + dp += regs.x; +4:rd = op_readaddr(dp); +5:rd |= op_readaddr(dp + 1) << 8; + regs.pc = rd; +} + +call(0x3f) { +1:rd = op_readpc(); +2:rd |= op_readpc() << 8; +3:op_io(); +4:op_io(); +5:op_io(); +6:op_writestack(regs.pc >> 8); +7:op_writestack(regs.pc); + regs.pc = rd; +} + +pcall(0x4f) { +1:rd = op_readpc(); +2:op_io(); +3:op_io(); +4:op_writestack(regs.pc >> 8); +5:op_writestack(regs.pc); + regs.pc = 0xff00 | rd; +} + +tcall_0(0x01, 0), +tcall_1(0x11, 1), +tcall_2(0x21, 2), +tcall_3(0x31, 3), +tcall_4(0x41, 4), +tcall_5(0x51, 5), +tcall_6(0x61, 6), +tcall_7(0x71, 7), +tcall_8(0x81, 8), +tcall_9(0x91, 9), +tcall_10(0xa1, 10), +tcall_11(0xb1, 11), +tcall_12(0xc1, 12), +tcall_13(0xd1, 13), +tcall_14(0xe1, 14), +tcall_15(0xf1, 15) { +1:dp = 0xffde - ($1 << 1); + rd = op_readaddr(dp); +2:rd |= op_readaddr(dp + 1) << 8; +3:op_io(); +4:op_io(); +5:op_io(); +6:op_writestack(regs.pc >> 8); +7:op_writestack(regs.pc); + regs.pc = rd; +} + +brk(0x0f) { +1:rd = op_readaddr(0xffde); +2:rd |= op_readaddr(0xffdf) << 8; +3:op_io(); +4:op_io(); +5:op_writestack(regs.pc >> 8); +6:op_writestack(regs.pc); +7:op_writestack(regs.p); + regs.pc = rd; + regs.p.b = 1; + regs.p.i = 0; +} + +ret(0x6f) { +1:rd = op_readstack(); +2:rd |= op_readstack() << 8; +3:op_io(); +4:op_io(); + regs.pc = rd; +} + +reti(0x7f) { +1:regs.p = op_readstack(); +2:rd = op_readstack(); +3:rd |= op_readstack() << 8; +4:op_io(); +5:op_io(); + regs.pc = rd; +} diff --git a/libsnes/bsnes/snes/alt/smp/core/op_pc.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/core/op_pc.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/core/op_pc.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/core/op_pc.cpp diff --git a/libsnes/bsnes/snes/alt/smp/core/op_read.b b/waterbox/libsnes/bsnes/snes/alt/smp/core/op_read.b similarity index 95% rename from libsnes/bsnes/snes/alt/smp/core/op_read.b rename to waterbox/libsnes/bsnes/snes/alt/smp/core/op_read.b index fd2f9d8256..d46e1d2f3f 100644 --- a/libsnes/bsnes/snes/alt/smp/core/op_read.b +++ b/waterbox/libsnes/bsnes/snes/alt/smp/core/op_read.b @@ -1,205 +1,205 @@ -adc_a_const(0x88, adc, a), -and_a_const(0x28, and, a), -cmp_a_const(0x68, cmp, a), -cmp_x_const(0xc8, cmp, x), -cmp_y_const(0xad, cmp, y), -eor_a_const(0x48, eor, a), -or_a_const(0x08, or, a), -sbc_a_const(0xa8, sbc, a) { -1:rd = op_readpc(); - regs.$2 = op_$1(regs.$2, rd); -} - -adc_a_ix(0x86, adc), -and_a_ix(0x26, and), -cmp_a_ix(0x66, cmp), -eor_a_ix(0x46, eor), -or_a_ix(0x06, or), -sbc_a_ix(0xa6, sbc) { -1:op_io(); -2:rd = op_readdp(regs.x); - regs.a = op_$1(regs.a, rd); -} - -adc_a_dp(0x84, adc, a), -and_a_dp(0x24, and, a), -cmp_a_dp(0x64, cmp, a), -cmp_x_dp(0x3e, cmp, x), -cmp_y_dp(0x7e, cmp, y), -eor_a_dp(0x44, eor, a), -or_a_dp(0x04, or, a), -sbc_a_dp(0xa4, sbc, a) { -1:dp = op_readpc(); -2:rd = op_readdp(dp); - regs.$2 = op_$1(regs.$2, rd); -} - -adc_a_dpx(0x94, adc), -and_a_dpx(0x34, and), -cmp_a_dpx(0x74, cmp), -eor_a_dpx(0x54, eor), -or_a_dpx(0x14, or), -sbc_a_dpx(0xb4, sbc) { -1:dp = op_readpc(); -2:op_io(); -3:rd = op_readdp(dp + regs.x); - regs.a = op_$1(regs.a, rd); -} - -adc_a_addr(0x85, adc, a), -and_a_addr(0x25, and, a), -cmp_a_addr(0x65, cmp, a), -cmp_x_addr(0x1e, cmp, x), -cmp_y_addr(0x5e, cmp, y), -eor_a_addr(0x45, eor, a), -or_a_addr(0x05, or, a), -sbc_a_addr(0xa5, sbc, a) { -1:dp = op_readpc(); -2:dp |= op_readpc() << 8; -3:rd = op_readaddr(dp); - regs.$2 = op_$1(regs.$2, rd); -} - -adc_a_addrx(0x95, adc, x), -adc_a_addry(0x96, adc, y), -and_a_addrx(0x35, and, x), -and_a_addry(0x36, and, y), -cmp_a_addrx(0x75, cmp, x), -cmp_a_addry(0x76, cmp, y), -eor_a_addrx(0x55, eor, x), -eor_a_addry(0x56, eor, y), -or_a_addrx(0x15, or, x), -or_a_addry(0x16, or, y), -sbc_a_addrx(0xb5, sbc, x), -sbc_a_addry(0xb6, sbc, y) { -1:dp = op_readpc(); -2:dp |= op_readpc() << 8; -3:op_io(); -4:rd = op_readaddr(dp + regs.$2); - regs.a = op_$1(regs.a, rd); -} - -adc_a_idpx(0x87, adc), -and_a_idpx(0x27, and), -cmp_a_idpx(0x67, cmp), -eor_a_idpx(0x47, eor), -or_a_idpx(0x07, or), -sbc_a_idpx(0xa7, sbc) { -1:dp = op_readpc() + regs.x; -2:op_io(); -3:sp = op_readdp(dp); -4:sp |= op_readdp(dp + 1) << 8; -5:rd = op_readaddr(sp); - regs.a = op_$1(regs.a, rd); -} - -adc_a_idpy(0x97, adc), -and_a_idpy(0x37, and), -cmp_a_idpy(0x77, cmp), -eor_a_idpy(0x57, eor), -or_a_idpy(0x17, or), -sbc_a_idpy(0xb7, sbc) { -1:dp = op_readpc(); -2:op_io(); -3:sp = op_readdp(dp); -4:sp |= op_readdp(dp + 1) << 8; -5:rd = op_readaddr(sp + regs.y); - regs.a = op_$1(regs.a, rd); -} - -adc_ix_iy(0x99, adc, 1), -and_ix_iy(0x39, and, 1), -cmp_ix_iy(0x79, cmp, 0), -eor_ix_iy(0x59, eor, 1), -or_ix_iy(0x19, or, 1), -sbc_ix_iy(0xb9, sbc, 1) { -1:op_io(); -2:rd = op_readdp(regs.y); -3:wr = op_readdp(regs.x); - wr = op_$1(wr, rd); -4:($2) ? op_writedp(regs.x, wr) : op_io(); -} - -adc_dp_dp(0x89, adc, 1), -and_dp_dp(0x29, and, 1), -cmp_dp_dp(0x69, cmp, 0), -eor_dp_dp(0x49, eor, 1), -or_dp_dp(0x09, or, 1), -sbc_dp_dp(0xa9, sbc, 1) { -1:sp = op_readpc(); -2:rd = op_readdp(sp); -3:dp = op_readpc(); -4:wr = op_readdp(dp); -5:wr = op_$1(wr, rd); - ($2) ? op_writedp(dp, wr) : op_io(); -} - -adc_dp_const(0x98, adc, 1), -and_dp_const(0x38, and, 1), -cmp_dp_const(0x78, cmp, 0), -eor_dp_const(0x58, eor, 1), -or_dp_const(0x18, or, 1), -sbc_dp_const(0xb8, sbc, 1) { -1:rd = op_readpc(); -2:dp = op_readpc(); -3:wr = op_readdp(dp); -4:wr = op_$1(wr, rd); - ($2) ? op_writedp(dp, wr) : op_io(); -} - -addw_ya_dp(0x7a, addw), -subw_ya_dp(0x9a, subw) { -1:dp = op_readpc(); -2:rd = op_readdp(dp); -3:op_io(); -4:rd |= op_readdp(dp + 1) << 8; - regs.ya = op_$1(regs.ya, rd); -} - -cmpw_ya_dp(0x5a) { -1:dp = op_readpc(); -2:rd = op_readdp(dp); -3:rd |= op_readdp(dp + 1) << 8; - op_cmpw(regs.ya, rd); -} - -and1_bit(0x4a, !!), -and1_notbit(0x6a, !) { -1:dp = op_readpc(); -2:dp |= op_readpc() << 8; -3:bit = dp >> 13; - dp &= 0x1fff; - rd = op_readaddr(dp); - regs.p.c = regs.p.c & $1(rd & (1 << bit)); -} - -eor1_bit(0x8a) { -1:dp = op_readpc(); -2:dp |= op_readpc() << 8; -3:bit = dp >> 13; - dp &= 0x1fff; - rd = op_readaddr(dp); -4:op_io(); - regs.p.c = regs.p.c ^ !!(rd & (1 << bit)); -} - -not1_bit(0xea) { -1:dp = op_readpc(); -2:dp |= op_readpc() << 8; -3:bit = dp >> 13; - dp &= 0x1fff; - rd = op_readaddr(dp); - rd ^= (1 << bit); -4:op_writeaddr(dp, rd); -} - -or1_bit(0x0a, !!), -or1_notbit(0x2a, !) { -1:dp = op_readpc(); -2:dp |= op_readpc() << 8; -3:bit = dp >> 13; - dp &= 0x1fff; - rd = op_readaddr(dp); -4:op_io(); - regs.p.c = regs.p.c | $1(rd & (1 << bit)); -} +adc_a_const(0x88, adc, a), +and_a_const(0x28, and, a), +cmp_a_const(0x68, cmp, a), +cmp_x_const(0xc8, cmp, x), +cmp_y_const(0xad, cmp, y), +eor_a_const(0x48, eor, a), +or_a_const(0x08, or, a), +sbc_a_const(0xa8, sbc, a) { +1:rd = op_readpc(); + regs.$2 = op_$1(regs.$2, rd); +} + +adc_a_ix(0x86, adc), +and_a_ix(0x26, and), +cmp_a_ix(0x66, cmp), +eor_a_ix(0x46, eor), +or_a_ix(0x06, or), +sbc_a_ix(0xa6, sbc) { +1:op_io(); +2:rd = op_readdp(regs.x); + regs.a = op_$1(regs.a, rd); +} + +adc_a_dp(0x84, adc, a), +and_a_dp(0x24, and, a), +cmp_a_dp(0x64, cmp, a), +cmp_x_dp(0x3e, cmp, x), +cmp_y_dp(0x7e, cmp, y), +eor_a_dp(0x44, eor, a), +or_a_dp(0x04, or, a), +sbc_a_dp(0xa4, sbc, a) { +1:dp = op_readpc(); +2:rd = op_readdp(dp); + regs.$2 = op_$1(regs.$2, rd); +} + +adc_a_dpx(0x94, adc), +and_a_dpx(0x34, and), +cmp_a_dpx(0x74, cmp), +eor_a_dpx(0x54, eor), +or_a_dpx(0x14, or), +sbc_a_dpx(0xb4, sbc) { +1:dp = op_readpc(); +2:op_io(); +3:rd = op_readdp(dp + regs.x); + regs.a = op_$1(regs.a, rd); +} + +adc_a_addr(0x85, adc, a), +and_a_addr(0x25, and, a), +cmp_a_addr(0x65, cmp, a), +cmp_x_addr(0x1e, cmp, x), +cmp_y_addr(0x5e, cmp, y), +eor_a_addr(0x45, eor, a), +or_a_addr(0x05, or, a), +sbc_a_addr(0xa5, sbc, a) { +1:dp = op_readpc(); +2:dp |= op_readpc() << 8; +3:rd = op_readaddr(dp); + regs.$2 = op_$1(regs.$2, rd); +} + +adc_a_addrx(0x95, adc, x), +adc_a_addry(0x96, adc, y), +and_a_addrx(0x35, and, x), +and_a_addry(0x36, and, y), +cmp_a_addrx(0x75, cmp, x), +cmp_a_addry(0x76, cmp, y), +eor_a_addrx(0x55, eor, x), +eor_a_addry(0x56, eor, y), +or_a_addrx(0x15, or, x), +or_a_addry(0x16, or, y), +sbc_a_addrx(0xb5, sbc, x), +sbc_a_addry(0xb6, sbc, y) { +1:dp = op_readpc(); +2:dp |= op_readpc() << 8; +3:op_io(); +4:rd = op_readaddr(dp + regs.$2); + regs.a = op_$1(regs.a, rd); +} + +adc_a_idpx(0x87, adc), +and_a_idpx(0x27, and), +cmp_a_idpx(0x67, cmp), +eor_a_idpx(0x47, eor), +or_a_idpx(0x07, or), +sbc_a_idpx(0xa7, sbc) { +1:dp = op_readpc() + regs.x; +2:op_io(); +3:sp = op_readdp(dp); +4:sp |= op_readdp(dp + 1) << 8; +5:rd = op_readaddr(sp); + regs.a = op_$1(regs.a, rd); +} + +adc_a_idpy(0x97, adc), +and_a_idpy(0x37, and), +cmp_a_idpy(0x77, cmp), +eor_a_idpy(0x57, eor), +or_a_idpy(0x17, or), +sbc_a_idpy(0xb7, sbc) { +1:dp = op_readpc(); +2:op_io(); +3:sp = op_readdp(dp); +4:sp |= op_readdp(dp + 1) << 8; +5:rd = op_readaddr(sp + regs.y); + regs.a = op_$1(regs.a, rd); +} + +adc_ix_iy(0x99, adc, 1), +and_ix_iy(0x39, and, 1), +cmp_ix_iy(0x79, cmp, 0), +eor_ix_iy(0x59, eor, 1), +or_ix_iy(0x19, or, 1), +sbc_ix_iy(0xb9, sbc, 1) { +1:op_io(); +2:rd = op_readdp(regs.y); +3:wr = op_readdp(regs.x); + wr = op_$1(wr, rd); +4:($2) ? op_writedp(regs.x, wr) : op_io(); +} + +adc_dp_dp(0x89, adc, 1), +and_dp_dp(0x29, and, 1), +cmp_dp_dp(0x69, cmp, 0), +eor_dp_dp(0x49, eor, 1), +or_dp_dp(0x09, or, 1), +sbc_dp_dp(0xa9, sbc, 1) { +1:sp = op_readpc(); +2:rd = op_readdp(sp); +3:dp = op_readpc(); +4:wr = op_readdp(dp); +5:wr = op_$1(wr, rd); + ($2) ? op_writedp(dp, wr) : op_io(); +} + +adc_dp_const(0x98, adc, 1), +and_dp_const(0x38, and, 1), +cmp_dp_const(0x78, cmp, 0), +eor_dp_const(0x58, eor, 1), +or_dp_const(0x18, or, 1), +sbc_dp_const(0xb8, sbc, 1) { +1:rd = op_readpc(); +2:dp = op_readpc(); +3:wr = op_readdp(dp); +4:wr = op_$1(wr, rd); + ($2) ? op_writedp(dp, wr) : op_io(); +} + +addw_ya_dp(0x7a, addw), +subw_ya_dp(0x9a, subw) { +1:dp = op_readpc(); +2:rd = op_readdp(dp); +3:op_io(); +4:rd |= op_readdp(dp + 1) << 8; + regs.ya = op_$1(regs.ya, rd); +} + +cmpw_ya_dp(0x5a) { +1:dp = op_readpc(); +2:rd = op_readdp(dp); +3:rd |= op_readdp(dp + 1) << 8; + op_cmpw(regs.ya, rd); +} + +and1_bit(0x4a, !!), +and1_notbit(0x6a, !) { +1:dp = op_readpc(); +2:dp |= op_readpc() << 8; +3:bit = dp >> 13; + dp &= 0x1fff; + rd = op_readaddr(dp); + regs.p.c = regs.p.c & $1(rd & (1 << bit)); +} + +eor1_bit(0x8a) { +1:dp = op_readpc(); +2:dp |= op_readpc() << 8; +3:bit = dp >> 13; + dp &= 0x1fff; + rd = op_readaddr(dp); +4:op_io(); + regs.p.c = regs.p.c ^ !!(rd & (1 << bit)); +} + +not1_bit(0xea) { +1:dp = op_readpc(); +2:dp |= op_readpc() << 8; +3:bit = dp >> 13; + dp &= 0x1fff; + rd = op_readaddr(dp); + rd ^= (1 << bit); +4:op_writeaddr(dp, rd); +} + +or1_bit(0x0a, !!), +or1_notbit(0x2a, !) { +1:dp = op_readpc(); +2:dp |= op_readpc() << 8; +3:bit = dp >> 13; + dp &= 0x1fff; + rd = op_readaddr(dp); +4:op_io(); + regs.p.c = regs.p.c | $1(rd & (1 << bit)); +} diff --git a/libsnes/bsnes/snes/alt/smp/core/op_read.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/core/op_read.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/core/op_read.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/core/op_read.cpp diff --git a/libsnes/bsnes/snes/alt/smp/core/op_rmw.b b/waterbox/libsnes/bsnes/snes/alt/smp/core/op_rmw.b similarity index 94% rename from libsnes/bsnes/snes/alt/smp/core/op_rmw.b rename to waterbox/libsnes/bsnes/snes/alt/smp/core/op_rmw.b index 425574e8a7..327082a139 100644 --- a/libsnes/bsnes/snes/alt/smp/core/op_rmw.b +++ b/waterbox/libsnes/bsnes/snes/alt/smp/core/op_rmw.b @@ -1,74 +1,74 @@ -inc_a(0xbc, inc, a), -inc_x(0x3d, inc, x), -inc_y(0xfc, inc, y), -dec_a(0x9c, dec, a), -dec_x(0x1d, dec, x), -dec_y(0xdc, dec, y), -asl_a(0x1c, asl, a), -lsr_a(0x5c, lsr, a), -rol_a(0x3c, rol, a), -ror_a(0x7c, ror, a) { -1:op_io(); - regs.$2 = op_$1(regs.$2); -} - -inc_dp(0xab, inc), -dec_dp(0x8b, dec), -asl_dp(0x0b, asl), -lsr_dp(0x4b, lsr), -rol_dp(0x2b, rol), -ror_dp(0x6b, ror) { -1:dp = op_readpc(); -2:rd = op_readdp(dp); -3:rd = op_$1(rd); - op_writedp(dp, rd); -} - -inc_dpx(0xbb, inc), -dec_dpx(0x9b, dec), -asl_dpx(0x1b, asl), -lsr_dpx(0x5b, lsr), -rol_dpx(0x3b, rol), -ror_dpx(0x7b, ror) { -1:dp = op_readpc(); -2:op_io(); -3:rd = op_readdp(dp + regs.x); -4:rd = op_$1(rd); - op_writedp(dp + regs.x, rd); -} - -inc_addr(0xac, inc), -dec_addr(0x8c, dec), -asl_addr(0x0c, asl), -lsr_addr(0x4c, lsr), -rol_addr(0x2c, rol), -ror_addr(0x6c, ror) { -1:dp = op_readpc(); -2:dp |= op_readpc() << 8; -3:rd = op_readaddr(dp); -4:rd = op_$1(rd); - op_writeaddr(dp, rd); -} - -tset_addr_a(0x0e, |), -tclr_addr_a(0x4e, &~) { -1:dp = op_readpc(); -2:dp |= op_readpc() << 8; -3:rd = op_readaddr(dp); - regs.p.n = !!((regs.a - rd) & 0x80); - regs.p.z = ((regs.a - rd) == 0); -4:op_readaddr(dp); -5:op_writeaddr(dp, rd $1 regs.a); -} - -incw_dp(0x3a, ++), -decw_dp(0x1a, --) { -1:dp = op_readpc(); -2:rd = op_readdp(dp); - rd$1; -3:op_writedp(dp++, rd); -4:rd += op_readdp(dp) << 8; -5:op_writedp(dp, rd >> 8); - regs.p.n = !!(rd & 0x8000); - regs.p.z = (rd == 0); -} +inc_a(0xbc, inc, a), +inc_x(0x3d, inc, x), +inc_y(0xfc, inc, y), +dec_a(0x9c, dec, a), +dec_x(0x1d, dec, x), +dec_y(0xdc, dec, y), +asl_a(0x1c, asl, a), +lsr_a(0x5c, lsr, a), +rol_a(0x3c, rol, a), +ror_a(0x7c, ror, a) { +1:op_io(); + regs.$2 = op_$1(regs.$2); +} + +inc_dp(0xab, inc), +dec_dp(0x8b, dec), +asl_dp(0x0b, asl), +lsr_dp(0x4b, lsr), +rol_dp(0x2b, rol), +ror_dp(0x6b, ror) { +1:dp = op_readpc(); +2:rd = op_readdp(dp); +3:rd = op_$1(rd); + op_writedp(dp, rd); +} + +inc_dpx(0xbb, inc), +dec_dpx(0x9b, dec), +asl_dpx(0x1b, asl), +lsr_dpx(0x5b, lsr), +rol_dpx(0x3b, rol), +ror_dpx(0x7b, ror) { +1:dp = op_readpc(); +2:op_io(); +3:rd = op_readdp(dp + regs.x); +4:rd = op_$1(rd); + op_writedp(dp + regs.x, rd); +} + +inc_addr(0xac, inc), +dec_addr(0x8c, dec), +asl_addr(0x0c, asl), +lsr_addr(0x4c, lsr), +rol_addr(0x2c, rol), +ror_addr(0x6c, ror) { +1:dp = op_readpc(); +2:dp |= op_readpc() << 8; +3:rd = op_readaddr(dp); +4:rd = op_$1(rd); + op_writeaddr(dp, rd); +} + +tset_addr_a(0x0e, |), +tclr_addr_a(0x4e, &~) { +1:dp = op_readpc(); +2:dp |= op_readpc() << 8; +3:rd = op_readaddr(dp); + regs.p.n = !!((regs.a - rd) & 0x80); + regs.p.z = ((regs.a - rd) == 0); +4:op_readaddr(dp); +5:op_writeaddr(dp, rd $1 regs.a); +} + +incw_dp(0x3a, ++), +decw_dp(0x1a, --) { +1:dp = op_readpc(); +2:rd = op_readdp(dp); + rd$1; +3:op_writedp(dp++, rd); +4:rd += op_readdp(dp) << 8; +5:op_writedp(dp, rd >> 8); + regs.p.n = !!(rd & 0x8000); + regs.p.z = (rd == 0); +} diff --git a/libsnes/bsnes/snes/alt/smp/core/op_rmw.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/core/op_rmw.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/core/op_rmw.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/core/op_rmw.cpp diff --git a/libsnes/bsnes/snes/alt/smp/core/opcycle_misc.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/core/opcycle_misc.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/core/opcycle_misc.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/core/opcycle_misc.cpp diff --git a/libsnes/bsnes/snes/alt/smp/core/opcycle_mov.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/core/opcycle_mov.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/core/opcycle_mov.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/core/opcycle_mov.cpp diff --git a/libsnes/bsnes/snes/alt/smp/core/opcycle_pc.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/core/opcycle_pc.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/core/opcycle_pc.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/core/opcycle_pc.cpp diff --git a/libsnes/bsnes/snes/alt/smp/core/opcycle_read.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/core/opcycle_read.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/core/opcycle_read.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/core/opcycle_read.cpp diff --git a/libsnes/bsnes/snes/alt/smp/core/opcycle_rmw.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/core/opcycle_rmw.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/core/opcycle_rmw.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/core/opcycle_rmw.cpp diff --git a/libsnes/bsnes/snes/alt/smp/disassembler.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/disassembler.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/disassembler.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/disassembler.cpp diff --git a/libsnes/bsnes/snes/alt/smp/iplrom.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/iplrom.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/iplrom.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/iplrom.cpp diff --git a/libsnes/bsnes/snes/alt/smp/memory.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/memory.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/memory.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/memory.cpp diff --git a/libsnes/bsnes/snes/alt/smp/smp.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/smp.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/smp.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/smp.cpp diff --git a/libsnes/bsnes/snes/alt/smp/smp.hpp b/waterbox/libsnes/bsnes/snes/alt/smp/smp.hpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/smp.hpp rename to waterbox/libsnes/bsnes/snes/alt/smp/smp.hpp diff --git a/libsnes/bsnes/snes/alt/smp/timing.cpp b/waterbox/libsnes/bsnes/snes/alt/smp/timing.cpp similarity index 100% rename from libsnes/bsnes/snes/alt/smp/timing.cpp rename to waterbox/libsnes/bsnes/snes/alt/smp/timing.cpp diff --git a/libsnes/bsnes/snes/cartridge/cartridge.cpp b/waterbox/libsnes/bsnes/snes/cartridge/cartridge.cpp similarity index 100% rename from libsnes/bsnes/snes/cartridge/cartridge.cpp rename to waterbox/libsnes/bsnes/snes/cartridge/cartridge.cpp diff --git a/libsnes/bsnes/snes/cartridge/cartridge.hpp b/waterbox/libsnes/bsnes/snes/cartridge/cartridge.hpp similarity index 100% rename from libsnes/bsnes/snes/cartridge/cartridge.hpp rename to waterbox/libsnes/bsnes/snes/cartridge/cartridge.hpp diff --git a/libsnes/bsnes/snes/cartridge/markup.cpp b/waterbox/libsnes/bsnes/snes/cartridge/markup.cpp similarity index 100% rename from libsnes/bsnes/snes/cartridge/markup.cpp rename to waterbox/libsnes/bsnes/snes/cartridge/markup.cpp diff --git a/libsnes/bsnes/snes/cartridge/serialization.cpp b/waterbox/libsnes/bsnes/snes/cartridge/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/cartridge/serialization.cpp rename to waterbox/libsnes/bsnes/snes/cartridge/serialization.cpp diff --git a/libsnes/bsnes/snes/cheat/cheat.cpp b/waterbox/libsnes/bsnes/snes/cheat/cheat.cpp similarity index 100% rename from libsnes/bsnes/snes/cheat/cheat.cpp rename to waterbox/libsnes/bsnes/snes/cheat/cheat.cpp diff --git a/libsnes/bsnes/snes/cheat/cheat.hpp b/waterbox/libsnes/bsnes/snes/cheat/cheat.hpp similarity index 100% rename from libsnes/bsnes/snes/cheat/cheat.hpp rename to waterbox/libsnes/bsnes/snes/cheat/cheat.hpp diff --git a/libsnes/bsnes/snes/chip/armdsp/armdsp.cpp b/waterbox/libsnes/bsnes/snes/chip/armdsp/armdsp.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/armdsp/armdsp.cpp rename to waterbox/libsnes/bsnes/snes/chip/armdsp/armdsp.cpp diff --git a/libsnes/bsnes/snes/chip/armdsp/armdsp.hpp b/waterbox/libsnes/bsnes/snes/chip/armdsp/armdsp.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/armdsp/armdsp.hpp rename to waterbox/libsnes/bsnes/snes/chip/armdsp/armdsp.hpp diff --git a/libsnes/bsnes/snes/chip/armdsp/disassembler.cpp b/waterbox/libsnes/bsnes/snes/chip/armdsp/disassembler.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/armdsp/disassembler.cpp rename to waterbox/libsnes/bsnes/snes/chip/armdsp/disassembler.cpp diff --git a/libsnes/bsnes/snes/chip/armdsp/memory.cpp b/waterbox/libsnes/bsnes/snes/chip/armdsp/memory.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/armdsp/memory.cpp rename to waterbox/libsnes/bsnes/snes/chip/armdsp/memory.cpp diff --git a/libsnes/bsnes/snes/chip/armdsp/opcodes.cpp b/waterbox/libsnes/bsnes/snes/chip/armdsp/opcodes.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/armdsp/opcodes.cpp rename to waterbox/libsnes/bsnes/snes/chip/armdsp/opcodes.cpp diff --git a/libsnes/bsnes/snes/chip/armdsp/registers.hpp b/waterbox/libsnes/bsnes/snes/chip/armdsp/registers.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/armdsp/registers.hpp rename to waterbox/libsnes/bsnes/snes/chip/armdsp/registers.hpp diff --git a/libsnes/bsnes/snes/chip/armdsp/serialization.cpp b/waterbox/libsnes/bsnes/snes/chip/armdsp/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/armdsp/serialization.cpp rename to waterbox/libsnes/bsnes/snes/chip/armdsp/serialization.cpp diff --git a/libsnes/bsnes/snes/chip/bsx/bsx.cpp b/waterbox/libsnes/bsnes/snes/chip/bsx/bsx.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/bsx/bsx.cpp rename to waterbox/libsnes/bsnes/snes/chip/bsx/bsx.cpp diff --git a/libsnes/bsnes/snes/chip/bsx/bsx.hpp b/waterbox/libsnes/bsnes/snes/chip/bsx/bsx.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/bsx/bsx.hpp rename to waterbox/libsnes/bsnes/snes/chip/bsx/bsx.hpp diff --git a/libsnes/bsnes/snes/chip/bsx/cartridge/cartridge.cpp b/waterbox/libsnes/bsnes/snes/chip/bsx/cartridge/cartridge.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/bsx/cartridge/cartridge.cpp rename to waterbox/libsnes/bsnes/snes/chip/bsx/cartridge/cartridge.cpp diff --git a/libsnes/bsnes/snes/chip/bsx/cartridge/cartridge.hpp b/waterbox/libsnes/bsnes/snes/chip/bsx/cartridge/cartridge.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/bsx/cartridge/cartridge.hpp rename to waterbox/libsnes/bsnes/snes/chip/bsx/cartridge/cartridge.hpp diff --git a/libsnes/bsnes/snes/chip/bsx/flash/flash.cpp b/waterbox/libsnes/bsnes/snes/chip/bsx/flash/flash.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/bsx/flash/flash.cpp rename to waterbox/libsnes/bsnes/snes/chip/bsx/flash/flash.cpp diff --git a/libsnes/bsnes/snes/chip/bsx/flash/flash.hpp b/waterbox/libsnes/bsnes/snes/chip/bsx/flash/flash.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/bsx/flash/flash.hpp rename to waterbox/libsnes/bsnes/snes/chip/bsx/flash/flash.hpp diff --git a/libsnes/bsnes/snes/chip/bsx/satellaview/satellaview.cpp b/waterbox/libsnes/bsnes/snes/chip/bsx/satellaview/satellaview.cpp similarity index 99% rename from libsnes/bsnes/snes/chip/bsx/satellaview/satellaview.cpp rename to waterbox/libsnes/bsnes/snes/chip/bsx/satellaview/satellaview.cpp index dccfe1c9cf..c52c10aa17 100644 --- a/libsnes/bsnes/snes/chip/bsx/satellaview/satellaview.cpp +++ b/waterbox/libsnes/bsnes/snes/chip/bsx/satellaview/satellaview.cpp @@ -35,13 +35,13 @@ uint8 BSXSatellaview::mmio_read(unsigned addr) { case 0x2192: { unsigned counter = regs.r2192_counter++; if(regs.r2192_counter >= 18) regs.r2192_counter = 0; - - if(counter == 0) { - time_t rawtime; - rawtime = SNES::interface()->currentTime(); - tm *t = localtime(&rawtime); - - regs.r2192_hour = t->tm_hour; + + if(counter == 0) { + time_t rawtime; + rawtime = SNES::interface()->currentTime(); + tm *t = localtime(&rawtime); + + regs.r2192_hour = t->tm_hour; regs.r2192_minute = t->tm_min; regs.r2192_second = t->tm_sec; } diff --git a/libsnes/bsnes/snes/chip/bsx/satellaview/satellaview.hpp b/waterbox/libsnes/bsnes/snes/chip/bsx/satellaview/satellaview.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/bsx/satellaview/satellaview.hpp rename to waterbox/libsnes/bsnes/snes/chip/bsx/satellaview/satellaview.hpp diff --git a/libsnes/bsnes/snes/chip/chip.hpp b/waterbox/libsnes/bsnes/snes/chip/chip.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/chip.hpp rename to waterbox/libsnes/bsnes/snes/chip/chip.hpp diff --git a/libsnes/bsnes/snes/chip/hitachidsp/hitachidsp.cpp b/waterbox/libsnes/bsnes/snes/chip/hitachidsp/hitachidsp.cpp similarity index 95% rename from libsnes/bsnes/snes/chip/hitachidsp/hitachidsp.cpp rename to waterbox/libsnes/bsnes/snes/chip/hitachidsp/hitachidsp.cpp index e1fe56bcf9..d6279c99f8 100644 --- a/libsnes/bsnes/snes/chip/hitachidsp/hitachidsp.cpp +++ b/waterbox/libsnes/bsnes/snes/chip/hitachidsp/hitachidsp.cpp @@ -1,82 +1,82 @@ -#include - -#define HITACHIDSP_CPP -namespace SNES { - -#include "memory.cpp" -#include "opcodes.cpp" -#include "registers.cpp" -#include "serialization.cpp" -HitachiDSP hitachidsp; - -//zero 01-sep-2014 - dont clobber these when reconstructing! -unsigned HitachiDSP::frequency; -uint24 HitachiDSP::dataROM[1024]; - -void HitachiDSP::Enter() { hitachidsp.enter(); } - -void HitachiDSP::enter() { - while(true) { - if(scheduler.sync == Scheduler::SynchronizeMode::All) { - scheduler.exit(Scheduler::ExitReason::SynchronizeEvent); - } - - switch(state) { - case State::Idle: - step(1); - break; - case State::DMA: - for(unsigned n = 0; n < regs.dma_length; n++) { - bus.write(regs.dma_target + n, bus.read(regs.dma_source + n)); - step(2); - } - state = State::Idle; - break; - case State::Execute: - unsigned offset = regs.program_offset + regs.pc * 2; - opcode = bus_read(offset + 0) << 0; - opcode |= bus_read(offset + 1) << 8; - regs.pc = (regs.pc & 0xffff00) | ((regs.pc + 1) & 0x0000ff); - exec(); - step(1); - break; - } - - synchronize_cpu(); - } -} - -void HitachiDSP::init() { -} - -void HitachiDSP::load() { -} - -void HitachiDSP::unload() { -} - -void HitachiDSP::power() { -} - -void HitachiDSP::reset() { - create(HitachiDSP::Enter, frequency); - state = State::Idle; - - regs.n = 0; - regs.z = 0; - regs.c = 0; - - regs.dma_source = 0x000000; - regs.dma_length = 0x0000; - regs.dma_target = 0x000000; - regs.r1f48 = 0x00; - regs.program_offset = 0x000000; - regs.r1f4c = 0x00; - regs.page_number = 0x0000; - regs.program_counter = 0x00; - regs.r1f50 = 0x33; - regs.r1f51 = 0x00; - regs.r1f52 = 0x01; -} - -} +#include + +#define HITACHIDSP_CPP +namespace SNES { + +#include "memory.cpp" +#include "opcodes.cpp" +#include "registers.cpp" +#include "serialization.cpp" +HitachiDSP hitachidsp; + +//zero 01-sep-2014 - dont clobber these when reconstructing! +unsigned HitachiDSP::frequency; +uint24 HitachiDSP::dataROM[1024]; + +void HitachiDSP::Enter() { hitachidsp.enter(); } + +void HitachiDSP::enter() { + while(true) { + if(scheduler.sync == Scheduler::SynchronizeMode::All) { + scheduler.exit(Scheduler::ExitReason::SynchronizeEvent); + } + + switch(state) { + case State::Idle: + step(1); + break; + case State::DMA: + for(unsigned n = 0; n < regs.dma_length; n++) { + bus.write(regs.dma_target + n, bus.read(regs.dma_source + n)); + step(2); + } + state = State::Idle; + break; + case State::Execute: + unsigned offset = regs.program_offset + regs.pc * 2; + opcode = bus_read(offset + 0) << 0; + opcode |= bus_read(offset + 1) << 8; + regs.pc = (regs.pc & 0xffff00) | ((regs.pc + 1) & 0x0000ff); + exec(); + step(1); + break; + } + + synchronize_cpu(); + } +} + +void HitachiDSP::init() { +} + +void HitachiDSP::load() { +} + +void HitachiDSP::unload() { +} + +void HitachiDSP::power() { +} + +void HitachiDSP::reset() { + create(HitachiDSP::Enter, frequency); + state = State::Idle; + + regs.n = 0; + regs.z = 0; + regs.c = 0; + + regs.dma_source = 0x000000; + regs.dma_length = 0x0000; + regs.dma_target = 0x000000; + regs.r1f48 = 0x00; + regs.program_offset = 0x000000; + regs.r1f4c = 0x00; + regs.page_number = 0x0000; + regs.program_counter = 0x00; + regs.r1f50 = 0x33; + regs.r1f51 = 0x00; + regs.r1f52 = 0x01; +} + +} diff --git a/libsnes/bsnes/snes/chip/hitachidsp/hitachidsp.hpp b/waterbox/libsnes/bsnes/snes/chip/hitachidsp/hitachidsp.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/hitachidsp/hitachidsp.hpp rename to waterbox/libsnes/bsnes/snes/chip/hitachidsp/hitachidsp.hpp diff --git a/libsnes/bsnes/snes/chip/hitachidsp/memory.cpp b/waterbox/libsnes/bsnes/snes/chip/hitachidsp/memory.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/hitachidsp/memory.cpp rename to waterbox/libsnes/bsnes/snes/chip/hitachidsp/memory.cpp diff --git a/libsnes/bsnes/snes/chip/hitachidsp/opcodes.cpp b/waterbox/libsnes/bsnes/snes/chip/hitachidsp/opcodes.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/hitachidsp/opcodes.cpp rename to waterbox/libsnes/bsnes/snes/chip/hitachidsp/opcodes.cpp diff --git a/libsnes/bsnes/snes/chip/hitachidsp/registers.cpp b/waterbox/libsnes/bsnes/snes/chip/hitachidsp/registers.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/hitachidsp/registers.cpp rename to waterbox/libsnes/bsnes/snes/chip/hitachidsp/registers.cpp diff --git a/libsnes/bsnes/snes/chip/hitachidsp/registers.hpp b/waterbox/libsnes/bsnes/snes/chip/hitachidsp/registers.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/hitachidsp/registers.hpp rename to waterbox/libsnes/bsnes/snes/chip/hitachidsp/registers.hpp diff --git a/libsnes/bsnes/snes/chip/hitachidsp/serialization.cpp b/waterbox/libsnes/bsnes/snes/chip/hitachidsp/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/hitachidsp/serialization.cpp rename to waterbox/libsnes/bsnes/snes/chip/hitachidsp/serialization.cpp diff --git a/libsnes/bsnes/snes/chip/icd2/icd2.cpp b/waterbox/libsnes/bsnes/snes/chip/icd2/icd2.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/icd2/icd2.cpp rename to waterbox/libsnes/bsnes/snes/chip/icd2/icd2.cpp diff --git a/libsnes/bsnes/snes/chip/icd2/icd2.hpp b/waterbox/libsnes/bsnes/snes/chip/icd2/icd2.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/icd2/icd2.hpp rename to waterbox/libsnes/bsnes/snes/chip/icd2/icd2.hpp diff --git a/libsnes/bsnes/snes/chip/icd2/interface/interface.cpp b/waterbox/libsnes/bsnes/snes/chip/icd2/interface/interface.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/icd2/interface/interface.cpp rename to waterbox/libsnes/bsnes/snes/chip/icd2/interface/interface.cpp diff --git a/libsnes/bsnes/snes/chip/icd2/interface/interface.hpp b/waterbox/libsnes/bsnes/snes/chip/icd2/interface/interface.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/icd2/interface/interface.hpp rename to waterbox/libsnes/bsnes/snes/chip/icd2/interface/interface.hpp diff --git a/libsnes/bsnes/snes/chip/icd2/mmio/mmio.cpp b/waterbox/libsnes/bsnes/snes/chip/icd2/mmio/mmio.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/icd2/mmio/mmio.cpp rename to waterbox/libsnes/bsnes/snes/chip/icd2/mmio/mmio.cpp diff --git a/libsnes/bsnes/snes/chip/icd2/mmio/mmio.hpp b/waterbox/libsnes/bsnes/snes/chip/icd2/mmio/mmio.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/icd2/mmio/mmio.hpp rename to waterbox/libsnes/bsnes/snes/chip/icd2/mmio/mmio.hpp diff --git a/libsnes/bsnes/snes/chip/icd2/serialization.cpp b/waterbox/libsnes/bsnes/snes/chip/icd2/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/icd2/serialization.cpp rename to waterbox/libsnes/bsnes/snes/chip/icd2/serialization.cpp diff --git a/libsnes/bsnes/snes/chip/link/link.cpp b/waterbox/libsnes/bsnes/snes/chip/link/link.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/link/link.cpp rename to waterbox/libsnes/bsnes/snes/chip/link/link.cpp diff --git a/libsnes/bsnes/snes/chip/link/link.hpp b/waterbox/libsnes/bsnes/snes/chip/link/link.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/link/link.hpp rename to waterbox/libsnes/bsnes/snes/chip/link/link.hpp diff --git a/libsnes/bsnes/snes/chip/msu1/msu1.cpp b/waterbox/libsnes/bsnes/snes/chip/msu1/msu1.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/msu1/msu1.cpp rename to waterbox/libsnes/bsnes/snes/chip/msu1/msu1.cpp diff --git a/libsnes/bsnes/snes/chip/msu1/msu1.hpp b/waterbox/libsnes/bsnes/snes/chip/msu1/msu1.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/msu1/msu1.hpp rename to waterbox/libsnes/bsnes/snes/chip/msu1/msu1.hpp diff --git a/libsnes/bsnes/snes/chip/msu1/serialization.cpp b/waterbox/libsnes/bsnes/snes/chip/msu1/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/msu1/serialization.cpp rename to waterbox/libsnes/bsnes/snes/chip/msu1/serialization.cpp diff --git a/libsnes/bsnes/snes/chip/necdsp/disassembler.cpp b/waterbox/libsnes/bsnes/snes/chip/necdsp/disassembler.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/necdsp/disassembler.cpp rename to waterbox/libsnes/bsnes/snes/chip/necdsp/disassembler.cpp diff --git a/libsnes/bsnes/snes/chip/necdsp/memory.cpp b/waterbox/libsnes/bsnes/snes/chip/necdsp/memory.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/necdsp/memory.cpp rename to waterbox/libsnes/bsnes/snes/chip/necdsp/memory.cpp diff --git a/libsnes/bsnes/snes/chip/necdsp/necdsp.cpp b/waterbox/libsnes/bsnes/snes/chip/necdsp/necdsp.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/necdsp/necdsp.cpp rename to waterbox/libsnes/bsnes/snes/chip/necdsp/necdsp.cpp diff --git a/libsnes/bsnes/snes/chip/necdsp/necdsp.hpp b/waterbox/libsnes/bsnes/snes/chip/necdsp/necdsp.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/necdsp/necdsp.hpp rename to waterbox/libsnes/bsnes/snes/chip/necdsp/necdsp.hpp diff --git a/libsnes/bsnes/snes/chip/necdsp/registers.hpp b/waterbox/libsnes/bsnes/snes/chip/necdsp/registers.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/necdsp/registers.hpp rename to waterbox/libsnes/bsnes/snes/chip/necdsp/registers.hpp diff --git a/libsnes/bsnes/snes/chip/necdsp/serialization.cpp b/waterbox/libsnes/bsnes/snes/chip/necdsp/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/necdsp/serialization.cpp rename to waterbox/libsnes/bsnes/snes/chip/necdsp/serialization.cpp diff --git a/libsnes/bsnes/snes/chip/nss/nss.cpp b/waterbox/libsnes/bsnes/snes/chip/nss/nss.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/nss/nss.cpp rename to waterbox/libsnes/bsnes/snes/chip/nss/nss.cpp diff --git a/libsnes/bsnes/snes/chip/nss/nss.hpp b/waterbox/libsnes/bsnes/snes/chip/nss/nss.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/nss/nss.hpp rename to waterbox/libsnes/bsnes/snes/chip/nss/nss.hpp diff --git a/libsnes/bsnes/snes/chip/obc1/obc1.cpp b/waterbox/libsnes/bsnes/snes/chip/obc1/obc1.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/obc1/obc1.cpp rename to waterbox/libsnes/bsnes/snes/chip/obc1/obc1.cpp diff --git a/libsnes/bsnes/snes/chip/obc1/obc1.hpp b/waterbox/libsnes/bsnes/snes/chip/obc1/obc1.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/obc1/obc1.hpp rename to waterbox/libsnes/bsnes/snes/chip/obc1/obc1.hpp diff --git a/libsnes/bsnes/snes/chip/obc1/serialization.cpp b/waterbox/libsnes/bsnes/snes/chip/obc1/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/obc1/serialization.cpp rename to waterbox/libsnes/bsnes/snes/chip/obc1/serialization.cpp diff --git a/libsnes/bsnes/snes/chip/sa1/bus/bus.cpp b/waterbox/libsnes/bsnes/snes/chip/sa1/bus/bus.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/sa1/bus/bus.cpp rename to waterbox/libsnes/bsnes/snes/chip/sa1/bus/bus.cpp diff --git a/libsnes/bsnes/snes/chip/sa1/bus/bus.hpp b/waterbox/libsnes/bsnes/snes/chip/sa1/bus/bus.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/sa1/bus/bus.hpp rename to waterbox/libsnes/bsnes/snes/chip/sa1/bus/bus.hpp diff --git a/libsnes/bsnes/snes/chip/sa1/dma/dma.cpp b/waterbox/libsnes/bsnes/snes/chip/sa1/dma/dma.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/sa1/dma/dma.cpp rename to waterbox/libsnes/bsnes/snes/chip/sa1/dma/dma.cpp diff --git a/libsnes/bsnes/snes/chip/sa1/dma/dma.hpp b/waterbox/libsnes/bsnes/snes/chip/sa1/dma/dma.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/sa1/dma/dma.hpp rename to waterbox/libsnes/bsnes/snes/chip/sa1/dma/dma.hpp diff --git a/libsnes/bsnes/snes/chip/sa1/memory/memory.cpp b/waterbox/libsnes/bsnes/snes/chip/sa1/memory/memory.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/sa1/memory/memory.cpp rename to waterbox/libsnes/bsnes/snes/chip/sa1/memory/memory.cpp diff --git a/libsnes/bsnes/snes/chip/sa1/memory/memory.hpp b/waterbox/libsnes/bsnes/snes/chip/sa1/memory/memory.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/sa1/memory/memory.hpp rename to waterbox/libsnes/bsnes/snes/chip/sa1/memory/memory.hpp diff --git a/libsnes/bsnes/snes/chip/sa1/mmio/mmio.cpp b/waterbox/libsnes/bsnes/snes/chip/sa1/mmio/mmio.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/sa1/mmio/mmio.cpp rename to waterbox/libsnes/bsnes/snes/chip/sa1/mmio/mmio.cpp diff --git a/libsnes/bsnes/snes/chip/sa1/mmio/mmio.hpp b/waterbox/libsnes/bsnes/snes/chip/sa1/mmio/mmio.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/sa1/mmio/mmio.hpp rename to waterbox/libsnes/bsnes/snes/chip/sa1/mmio/mmio.hpp diff --git a/libsnes/bsnes/snes/chip/sa1/sa1.cpp b/waterbox/libsnes/bsnes/snes/chip/sa1/sa1.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/sa1/sa1.cpp rename to waterbox/libsnes/bsnes/snes/chip/sa1/sa1.cpp diff --git a/libsnes/bsnes/snes/chip/sa1/sa1.hpp b/waterbox/libsnes/bsnes/snes/chip/sa1/sa1.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/sa1/sa1.hpp rename to waterbox/libsnes/bsnes/snes/chip/sa1/sa1.hpp diff --git a/libsnes/bsnes/snes/chip/sa1/serialization.cpp b/waterbox/libsnes/bsnes/snes/chip/sa1/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/sa1/serialization.cpp rename to waterbox/libsnes/bsnes/snes/chip/sa1/serialization.cpp diff --git a/libsnes/bsnes/snes/chip/sdd1/decomp.cpp b/waterbox/libsnes/bsnes/snes/chip/sdd1/decomp.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/sdd1/decomp.cpp rename to waterbox/libsnes/bsnes/snes/chip/sdd1/decomp.cpp diff --git a/libsnes/bsnes/snes/chip/sdd1/decomp.hpp b/waterbox/libsnes/bsnes/snes/chip/sdd1/decomp.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/sdd1/decomp.hpp rename to waterbox/libsnes/bsnes/snes/chip/sdd1/decomp.hpp diff --git a/libsnes/bsnes/snes/chip/sdd1/sdd1.cpp b/waterbox/libsnes/bsnes/snes/chip/sdd1/sdd1.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/sdd1/sdd1.cpp rename to waterbox/libsnes/bsnes/snes/chip/sdd1/sdd1.cpp diff --git a/libsnes/bsnes/snes/chip/sdd1/sdd1.hpp b/waterbox/libsnes/bsnes/snes/chip/sdd1/sdd1.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/sdd1/sdd1.hpp rename to waterbox/libsnes/bsnes/snes/chip/sdd1/sdd1.hpp diff --git a/libsnes/bsnes/snes/chip/sdd1/serialization.cpp b/waterbox/libsnes/bsnes/snes/chip/sdd1/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/sdd1/serialization.cpp rename to waterbox/libsnes/bsnes/snes/chip/sdd1/serialization.cpp diff --git a/libsnes/bsnes/snes/chip/spc7110/decomp.cpp b/waterbox/libsnes/bsnes/snes/chip/spc7110/decomp.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/spc7110/decomp.cpp rename to waterbox/libsnes/bsnes/snes/chip/spc7110/decomp.cpp diff --git a/libsnes/bsnes/snes/chip/spc7110/decomp.hpp b/waterbox/libsnes/bsnes/snes/chip/spc7110/decomp.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/spc7110/decomp.hpp rename to waterbox/libsnes/bsnes/snes/chip/spc7110/decomp.hpp diff --git a/libsnes/bsnes/snes/chip/spc7110/serialization.cpp b/waterbox/libsnes/bsnes/snes/chip/spc7110/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/spc7110/serialization.cpp rename to waterbox/libsnes/bsnes/snes/chip/spc7110/serialization.cpp diff --git a/libsnes/bsnes/snes/chip/spc7110/spc7110.cpp b/waterbox/libsnes/bsnes/snes/chip/spc7110/spc7110.cpp similarity index 99% rename from libsnes/bsnes/snes/chip/spc7110/spc7110.cpp rename to waterbox/libsnes/bsnes/snes/chip/spc7110/spc7110.cpp index 5a97ec7594..000ebf1c1a 100644 --- a/libsnes/bsnes/snes/chip/spc7110/spc7110.cpp +++ b/waterbox/libsnes/bsnes/snes/chip/spc7110/spc7110.cpp @@ -98,13 +98,13 @@ unsigned SPC7110::data_adjust() { return r4814 + (r4815 << 8); } unsigned SPC7110::data_increment() { return r4816 + (r4817 << 8); } void SPC7110::set_data_pointer(unsigned addr) { r4811 = addr; r4812 = addr >> 8; r4813 = addr >> 16; } void SPC7110::set_data_adjust(unsigned addr) { r4814 = addr; r4815 = addr >> 8; } - -void SPC7110::update_time(int offset) { - time_t rtc_time = (rtc[16] << 0) | (rtc[17] << 8) | (rtc[18] << 16) | (rtc[19] << 24); - time_t current_time = SNES::interface()->currentTime() - offset; - - //sizeof(time_t) is platform-dependent; though rtc[] needs to be platform-agnostic. - //yet platforms with 32-bit signed time_t will overflow every ~68 years. handle this by + +void SPC7110::update_time(int offset) { + time_t rtc_time = (rtc[16] << 0) | (rtc[17] << 8) | (rtc[18] << 16) | (rtc[19] << 24); + time_t current_time = SNES::interface()->currentTime() - offset; + + //sizeof(time_t) is platform-dependent; though rtc[] needs to be platform-agnostic. + //yet platforms with 32-bit signed time_t will overflow every ~68 years. handle this by //accounting for overflow at the cost of 1-bit precision (to catch underflow). this will allow //rtc[] timestamp to remain valid for up to ~34 years from the last update, even if //time_t overflows. calculation should be valid regardless of number representation, time_t size, diff --git a/libsnes/bsnes/snes/chip/spc7110/spc7110.hpp b/waterbox/libsnes/bsnes/snes/chip/spc7110/spc7110.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/spc7110/spc7110.hpp rename to waterbox/libsnes/bsnes/snes/chip/spc7110/spc7110.hpp diff --git a/libsnes/bsnes/snes/chip/srtc/serialization.cpp b/waterbox/libsnes/bsnes/snes/chip/srtc/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/srtc/serialization.cpp rename to waterbox/libsnes/bsnes/snes/chip/srtc/serialization.cpp diff --git a/libsnes/bsnes/snes/chip/srtc/srtc.cpp b/waterbox/libsnes/bsnes/snes/chip/srtc/srtc.cpp similarity index 99% rename from libsnes/bsnes/snes/chip/srtc/srtc.cpp rename to waterbox/libsnes/bsnes/snes/chip/srtc/srtc.cpp index 947b02abfe..869f043ef2 100644 --- a/libsnes/bsnes/snes/chip/srtc/srtc.cpp +++ b/waterbox/libsnes/bsnes/snes/chip/srtc/srtc.cpp @@ -43,13 +43,13 @@ void SRTC::reset() { rtc_index = -1; update_time(); } - -void SRTC::update_time() { - time_t rtc_time = (rtc[16] << 0) | (rtc[17] << 8) | (rtc[18] << 16) | (rtc[19] << 24); - time_t current_time = SNES::interface()->currentTime(); - - //sizeof(time_t) is platform-dependent; though rtc[] needs to be platform-agnostic. - //yet platforms with 32-bit signed time_t will overflow every ~68 years. handle this by + +void SRTC::update_time() { + time_t rtc_time = (rtc[16] << 0) | (rtc[17] << 8) | (rtc[18] << 16) | (rtc[19] << 24); + time_t current_time = SNES::interface()->currentTime(); + + //sizeof(time_t) is platform-dependent; though rtc[] needs to be platform-agnostic. + //yet platforms with 32-bit signed time_t will overflow every ~68 years. handle this by //accounting for overflow at the cost of 1-bit precision (to catch underflow). this will allow //rtc[] timestamp to remain valid for up to ~34 years from the last update, even if //time_t overflows. calculation should be valid regardless of number representation, time_t size, diff --git a/libsnes/bsnes/snes/chip/srtc/srtc.hpp b/waterbox/libsnes/bsnes/snes/chip/srtc/srtc.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/srtc/srtc.hpp rename to waterbox/libsnes/bsnes/snes/chip/srtc/srtc.hpp diff --git a/libsnes/bsnes/snes/chip/sufamiturbo/serialization.cpp b/waterbox/libsnes/bsnes/snes/chip/sufamiturbo/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/sufamiturbo/serialization.cpp rename to waterbox/libsnes/bsnes/snes/chip/sufamiturbo/serialization.cpp diff --git a/libsnes/bsnes/snes/chip/sufamiturbo/sufamiturbo.cpp b/waterbox/libsnes/bsnes/snes/chip/sufamiturbo/sufamiturbo.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/sufamiturbo/sufamiturbo.cpp rename to waterbox/libsnes/bsnes/snes/chip/sufamiturbo/sufamiturbo.cpp diff --git a/libsnes/bsnes/snes/chip/sufamiturbo/sufamiturbo.hpp b/waterbox/libsnes/bsnes/snes/chip/sufamiturbo/sufamiturbo.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/sufamiturbo/sufamiturbo.hpp rename to waterbox/libsnes/bsnes/snes/chip/sufamiturbo/sufamiturbo.hpp diff --git a/libsnes/bsnes/snes/chip/superfx/bus/bus.cpp b/waterbox/libsnes/bsnes/snes/chip/superfx/bus/bus.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/bus/bus.cpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/bus/bus.cpp diff --git a/libsnes/bsnes/snes/chip/superfx/bus/bus.hpp b/waterbox/libsnes/bsnes/snes/chip/superfx/bus/bus.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/bus/bus.hpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/bus/bus.hpp diff --git a/libsnes/bsnes/snes/chip/superfx/core/core.cpp b/waterbox/libsnes/bsnes/snes/chip/superfx/core/core.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/core/core.cpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/core/core.cpp diff --git a/libsnes/bsnes/snes/chip/superfx/core/core.hpp b/waterbox/libsnes/bsnes/snes/chip/superfx/core/core.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/core/core.hpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/core/core.hpp diff --git a/libsnes/bsnes/snes/chip/superfx/core/opcode_table.cpp b/waterbox/libsnes/bsnes/snes/chip/superfx/core/opcode_table.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/core/opcode_table.cpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/core/opcode_table.cpp diff --git a/libsnes/bsnes/snes/chip/superfx/core/opcodes.cpp b/waterbox/libsnes/bsnes/snes/chip/superfx/core/opcodes.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/core/opcodes.cpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/core/opcodes.cpp diff --git a/libsnes/bsnes/snes/chip/superfx/core/registers.hpp b/waterbox/libsnes/bsnes/snes/chip/superfx/core/registers.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/core/registers.hpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/core/registers.hpp diff --git a/libsnes/bsnes/snes/chip/superfx/disasm/disasm.cpp b/waterbox/libsnes/bsnes/snes/chip/superfx/disasm/disasm.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/disasm/disasm.cpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/disasm/disasm.cpp diff --git a/libsnes/bsnes/snes/chip/superfx/disasm/disasm.hpp b/waterbox/libsnes/bsnes/snes/chip/superfx/disasm/disasm.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/disasm/disasm.hpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/disasm/disasm.hpp diff --git a/libsnes/bsnes/snes/chip/superfx/memory/memory.cpp b/waterbox/libsnes/bsnes/snes/chip/superfx/memory/memory.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/memory/memory.cpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/memory/memory.cpp diff --git a/libsnes/bsnes/snes/chip/superfx/memory/memory.hpp b/waterbox/libsnes/bsnes/snes/chip/superfx/memory/memory.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/memory/memory.hpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/memory/memory.hpp diff --git a/libsnes/bsnes/snes/chip/superfx/mmio/mmio.cpp b/waterbox/libsnes/bsnes/snes/chip/superfx/mmio/mmio.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/mmio/mmio.cpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/mmio/mmio.cpp diff --git a/libsnes/bsnes/snes/chip/superfx/mmio/mmio.hpp b/waterbox/libsnes/bsnes/snes/chip/superfx/mmio/mmio.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/mmio/mmio.hpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/mmio/mmio.hpp diff --git a/libsnes/bsnes/snes/chip/superfx/serialization.cpp b/waterbox/libsnes/bsnes/snes/chip/superfx/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/serialization.cpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/serialization.cpp diff --git a/libsnes/bsnes/snes/chip/superfx/superfx.cpp b/waterbox/libsnes/bsnes/snes/chip/superfx/superfx.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/superfx.cpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/superfx.cpp diff --git a/libsnes/bsnes/snes/chip/superfx/superfx.hpp b/waterbox/libsnes/bsnes/snes/chip/superfx/superfx.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/superfx.hpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/superfx.hpp diff --git a/libsnes/bsnes/snes/chip/superfx/timing/timing.cpp b/waterbox/libsnes/bsnes/snes/chip/superfx/timing/timing.cpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/timing/timing.cpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/timing/timing.cpp diff --git a/libsnes/bsnes/snes/chip/superfx/timing/timing.hpp b/waterbox/libsnes/bsnes/snes/chip/superfx/timing/timing.hpp similarity index 100% rename from libsnes/bsnes/snes/chip/superfx/timing/timing.hpp rename to waterbox/libsnes/bsnes/snes/chip/superfx/timing/timing.hpp diff --git a/libsnes/bsnes/snes/config/config.cpp b/waterbox/libsnes/bsnes/snes/config/config.cpp similarity index 100% rename from libsnes/bsnes/snes/config/config.cpp rename to waterbox/libsnes/bsnes/snes/config/config.cpp diff --git a/libsnes/bsnes/snes/config/config.hpp b/waterbox/libsnes/bsnes/snes/config/config.hpp similarity index 100% rename from libsnes/bsnes/snes/config/config.hpp rename to waterbox/libsnes/bsnes/snes/config/config.hpp diff --git a/libsnes/bsnes/snes/controller/controller.cpp b/waterbox/libsnes/bsnes/snes/controller/controller.cpp similarity index 98% rename from libsnes/bsnes/snes/controller/controller.cpp rename to waterbox/libsnes/bsnes/snes/controller/controller.cpp index 4b3fb800ff..5f37849cd2 100644 --- a/libsnes/bsnes/snes/controller/controller.cpp +++ b/waterbox/libsnes/bsnes/snes/controller/controller.cpp @@ -43,19 +43,19 @@ void Controller::iobit(bool data) { switch(port) { case Controller::Port1: bus.write(0x4201, (cpu.pio() & ~0x40) | (data << 6)); break; case Controller::Port2: bus.write(0x4201, (cpu.pio() & ~0x80) | (data << 7)); break; - } -} - -void Controller::serialize(serializer& s) { - Processor::serialize(s); - //Save a zero block. - unsigned char blockzeroes[SaveSize] = {0}; - s.array(blockzeroes, SaveSize); -} - -Controller::Controller(bool port) : port(port) { - if(!thread) create(Controller::Enter, 1); -} - - -} + } +} + +void Controller::serialize(serializer& s) { + Processor::serialize(s); + //Save a zero block. + unsigned char blockzeroes[SaveSize] = {0}; + s.array(blockzeroes, SaveSize); +} + +Controller::Controller(bool port) : port(port) { + if(!thread) create(Controller::Enter, 1); +} + + +} diff --git a/libsnes/bsnes/snes/controller/controller.hpp b/waterbox/libsnes/bsnes/snes/controller/controller.hpp similarity index 98% rename from libsnes/bsnes/snes/controller/controller.hpp rename to waterbox/libsnes/bsnes/snes/controller/controller.hpp index 9ab4651693..46095a89e9 100644 --- a/libsnes/bsnes/snes/controller/controller.hpp +++ b/waterbox/libsnes/bsnes/snes/controller/controller.hpp @@ -10,20 +10,20 @@ // 5: data2 $4016.d1 read $4017.d1 read // 6: iobit $4201.d6 write; $4213.d6 read $4201.d7 write; $4213.d7 read // 7: gnd - -struct Controller : Processor { - enum : bool { Port1 = 0, Port2 = 1 }; - enum { SaveSize = 16 }; - const bool port; - - static void Enter(); - virtual void enter(); - void step(unsigned clocks); - void synchronize_cpu(); - virtual void serialize(serializer& s); - - bool iobit(); - void iobit(bool data); + +struct Controller : Processor { + enum : bool { Port1 = 0, Port2 = 1 }; + enum { SaveSize = 16 }; + const bool port; + + static void Enter(); + virtual void enter(); + void step(unsigned clocks); + void synchronize_cpu(); + virtual void serialize(serializer& s); + + bool iobit(); + void iobit(bool data); virtual uint2 data() { return 0; } virtual void latch(bool data) {} Controller(bool port); diff --git a/libsnes/bsnes/snes/controller/gamepad/gamepad.cpp b/waterbox/libsnes/bsnes/snes/controller/gamepad/gamepad.cpp similarity index 97% rename from libsnes/bsnes/snes/controller/gamepad/gamepad.cpp rename to waterbox/libsnes/bsnes/snes/controller/gamepad/gamepad.cpp index 957040a3f8..decc74b74d 100644 --- a/libsnes/bsnes/snes/controller/gamepad/gamepad.cpp +++ b/waterbox/libsnes/bsnes/snes/controller/gamepad/gamepad.cpp @@ -10,25 +10,25 @@ uint2 Gamepad::data() { void Gamepad::latch(bool data) { if(latched == data) return; latched = data; - counter = 0; -} - -void Gamepad::serialize(serializer& s) { - Processor::serialize(s); - //Save block. - unsigned char block[Controller::SaveSize] = {0}; - block[0] = latched ? 1 : 0; - block[1] = counter; - s.array(block, Controller::SaveSize); - if(s.mode() == nall::serializer::Load) { - latched = (block[0] != 0); - counter = block[1]; - } -} - -Gamepad::Gamepad(bool port) : Controller(port) { - latched = 0; - counter = 0; + counter = 0; +} + +void Gamepad::serialize(serializer& s) { + Processor::serialize(s); + //Save block. + unsigned char block[Controller::SaveSize] = {0}; + block[0] = latched ? 1 : 0; + block[1] = counter; + s.array(block, Controller::SaveSize); + if(s.mode() == nall::serializer::Load) { + latched = (block[0] != 0); + counter = block[1]; + } +} + +Gamepad::Gamepad(bool port) : Controller(port) { + latched = 0; + counter = 0; } #endif diff --git a/libsnes/bsnes/snes/controller/gamepad/gamepad.hpp b/waterbox/libsnes/bsnes/snes/controller/gamepad/gamepad.hpp similarity index 96% rename from libsnes/bsnes/snes/controller/gamepad/gamepad.hpp rename to waterbox/libsnes/bsnes/snes/controller/gamepad/gamepad.hpp index 86fbabb551..a2392d1ecd 100644 --- a/libsnes/bsnes/snes/controller/gamepad/gamepad.hpp +++ b/waterbox/libsnes/bsnes/snes/controller/gamepad/gamepad.hpp @@ -1,9 +1,9 @@ struct Gamepad : Controller { - uint2 data(); - void latch(bool data); - Gamepad(bool port); - void serialize(serializer& s); -private: - bool latched; - unsigned counter; + uint2 data(); + void latch(bool data); + Gamepad(bool port); + void serialize(serializer& s); +private: + bool latched; + unsigned counter; }; diff --git a/libsnes/bsnes/snes/controller/justifier/justifier.cpp b/waterbox/libsnes/bsnes/snes/controller/justifier/justifier.cpp similarity index 99% rename from libsnes/bsnes/snes/controller/justifier/justifier.cpp rename to waterbox/libsnes/bsnes/snes/controller/justifier/justifier.cpp index 00d661b475..665b5a4985 100644 --- a/libsnes/bsnes/snes/controller/justifier/justifier.cpp +++ b/waterbox/libsnes/bsnes/snes/controller/justifier/justifier.cpp @@ -95,48 +95,48 @@ void Justifier::latch(bool data) { if(latched == data) return; latched = data; counter = 0; - if(latched == 0) active = !active; //toggle between both controllers, even when unchained -} - -void Justifier::serialize(serializer& s) { - Processor::serialize(s); - //Save block. - unsigned char block[Controller::SaveSize] = {0}; - block[0] = latched ? 1 : 0; - block[1] = counter; - block[2] = active ? 1 : 0; - block[3] = player1.trigger ? 1 : 0; - block[4] = player2.trigger ? 1 : 0; - block[5] = player1.start ? 1 : 0; - block[6] = player2.start ? 1 : 0; - block[7] = (unsigned short)player1.x >> 8; - block[8] = (unsigned short)player1.x; - block[9] = (unsigned short)player2.x >> 8; - block[10] = (unsigned short)player2.x; - block[11] = (unsigned short)player1.y >> 8; - block[12] = (unsigned short)player1.y; - block[13] = (unsigned short)player2.y >> 8; - block[14] = (unsigned short)player2.y; - s.array(block, Controller::SaveSize); - if(s.mode() == nall::serializer::Load) { - latched = (block[0] != 0); - counter = block[1]; - active = (block[2] != 0); - player1.trigger = (block[3] != 0); - player2.trigger = (block[4] != 0); - player1.start = (block[5] != 0); - player2.start = (block[6] != 0); - player1.x = (short)(((unsigned short)block[7] << 8) | (unsigned short)block[8]); - player2.x = (short)(((unsigned short)block[9] << 8) | (unsigned short)block[10]); - player1.y = (short)(((unsigned short)block[11] << 8) | (unsigned short)block[12]); - player2.y = (short)(((unsigned short)block[13] << 8) | (unsigned short)block[14]); - } -} - - -Justifier::Justifier(bool port, bool chained) : Controller(port), chained(chained) { - create(Controller::Enter, 21477272); - latched = 0; + if(latched == 0) active = !active; //toggle between both controllers, even when unchained +} + +void Justifier::serialize(serializer& s) { + Processor::serialize(s); + //Save block. + unsigned char block[Controller::SaveSize] = {0}; + block[0] = latched ? 1 : 0; + block[1] = counter; + block[2] = active ? 1 : 0; + block[3] = player1.trigger ? 1 : 0; + block[4] = player2.trigger ? 1 : 0; + block[5] = player1.start ? 1 : 0; + block[6] = player2.start ? 1 : 0; + block[7] = (unsigned short)player1.x >> 8; + block[8] = (unsigned short)player1.x; + block[9] = (unsigned short)player2.x >> 8; + block[10] = (unsigned short)player2.x; + block[11] = (unsigned short)player1.y >> 8; + block[12] = (unsigned short)player1.y; + block[13] = (unsigned short)player2.y >> 8; + block[14] = (unsigned short)player2.y; + s.array(block, Controller::SaveSize); + if(s.mode() == nall::serializer::Load) { + latched = (block[0] != 0); + counter = block[1]; + active = (block[2] != 0); + player1.trigger = (block[3] != 0); + player2.trigger = (block[4] != 0); + player1.start = (block[5] != 0); + player2.start = (block[6] != 0); + player1.x = (short)(((unsigned short)block[7] << 8) | (unsigned short)block[8]); + player2.x = (short)(((unsigned short)block[9] << 8) | (unsigned short)block[10]); + player1.y = (short)(((unsigned short)block[11] << 8) | (unsigned short)block[12]); + player2.y = (short)(((unsigned short)block[13] << 8) | (unsigned short)block[14]); + } +} + + +Justifier::Justifier(bool port, bool chained) : Controller(port), chained(chained) { + create(Controller::Enter, 21477272); + latched = 0; counter = 0; active = 0; diff --git a/libsnes/bsnes/snes/controller/justifier/justifier.hpp b/waterbox/libsnes/bsnes/snes/controller/justifier/justifier.hpp similarity index 98% rename from libsnes/bsnes/snes/controller/justifier/justifier.hpp rename to waterbox/libsnes/bsnes/snes/controller/justifier/justifier.hpp index aeffc1e50b..6b7bba07a1 100644 --- a/libsnes/bsnes/snes/controller/justifier/justifier.hpp +++ b/waterbox/libsnes/bsnes/snes/controller/justifier/justifier.hpp @@ -1,11 +1,11 @@ struct Justifier : Controller { - void enter(); - uint2 data(); - void latch(bool data); - void serialize(serializer& s); - Justifier(bool port, bool chained); - -//private: + void enter(); + uint2 data(); + void latch(bool data); + void serialize(serializer& s); + Justifier(bool port, bool chained); + +//private: const bool chained; //true if the second justifier is attached to the first bool latched; unsigned counter; diff --git a/libsnes/bsnes/snes/controller/mouse/mouse.cpp b/waterbox/libsnes/bsnes/snes/controller/mouse/mouse.cpp similarity index 98% rename from libsnes/bsnes/snes/controller/mouse/mouse.cpp rename to waterbox/libsnes/bsnes/snes/controller/mouse/mouse.cpp index 15f97e3fb6..a0dd45aa5e 100644 --- a/libsnes/bsnes/snes/controller/mouse/mouse.cpp +++ b/waterbox/libsnes/bsnes/snes/controller/mouse/mouse.cpp @@ -1,20 +1,20 @@ #ifdef CONTROLLER_CPP -uint2 Mouse::data() { - if(counter >= 32) return 1; - - if(counter == 0) { - position_x = interface()->inputPoll(port, Input::Device::Mouse, 0, (unsigned)Input::MouseID::X); //-n = left, 0 = center, +n = right - position_y = interface()->inputPoll(port, Input::Device::Mouse, 0, (unsigned)Input::MouseID::Y); //-n = up, 0 = center, +n = down - } - - - bool direction_x = position_x < 0; //0 = right, 1 = left - bool direction_y = position_y < 0; //0 = down, 1 = up - - int position_x_fixed = position_x; - int position_y_fixed = position_y; - +uint2 Mouse::data() { + if(counter >= 32) return 1; + + if(counter == 0) { + position_x = interface()->inputPoll(port, Input::Device::Mouse, 0, (unsigned)Input::MouseID::X); //-n = left, 0 = center, +n = right + position_y = interface()->inputPoll(port, Input::Device::Mouse, 0, (unsigned)Input::MouseID::Y); //-n = up, 0 = center, +n = down + } + + + bool direction_x = position_x < 0; //0 = right, 1 = left + bool direction_y = position_y < 0; //0 = down, 1 = up + + int position_x_fixed = position_x; + int position_y_fixed = position_y; + if(position_x < 0) position_x_fixed = -position_x; //abs(position_x) if(position_y < 0) position_y_fixed = -position_y; //abs(position_y) @@ -65,31 +65,31 @@ uint2 Mouse::data() { void Mouse::latch(bool data) { if(latched == data) return; latched = data; - counter = 0; -} - -void Mouse::serialize(serializer& s) { - Processor::serialize(s); - //Save block. - unsigned char block[Controller::SaveSize] = {0}; - block[0] = latched ? 1 : 0; - block[1] = counter; - block[2] = (unsigned short)position_x >> 8; - block[3] = (unsigned short)position_x; - block[4] = (unsigned short)position_y >> 8; - block[5] = (unsigned short)position_y; - s.array(block, Controller::SaveSize); - if(s.mode() == nall::serializer::Load) { - latched = (block[0] != 0); - counter = block[1]; - position_x = (short)(((unsigned short)block[2] << 8) | (unsigned short)block[3]); - position_y = (short)(((unsigned short)block[4] << 8) | (unsigned short)block[5]); - } -} - -Mouse::Mouse(bool port) : Controller(port) { - latched = 0; - counter = 0; + counter = 0; +} + +void Mouse::serialize(serializer& s) { + Processor::serialize(s); + //Save block. + unsigned char block[Controller::SaveSize] = {0}; + block[0] = latched ? 1 : 0; + block[1] = counter; + block[2] = (unsigned short)position_x >> 8; + block[3] = (unsigned short)position_x; + block[4] = (unsigned short)position_y >> 8; + block[5] = (unsigned short)position_y; + s.array(block, Controller::SaveSize); + if(s.mode() == nall::serializer::Load) { + latched = (block[0] != 0); + counter = block[1]; + position_x = (short)(((unsigned short)block[2] << 8) | (unsigned short)block[3]); + position_y = (short)(((unsigned short)block[4] << 8) | (unsigned short)block[5]); + } +} + +Mouse::Mouse(bool port) : Controller(port) { + latched = 0; + counter = 0; } #endif diff --git a/libsnes/bsnes/snes/controller/mouse/mouse.hpp b/waterbox/libsnes/bsnes/snes/controller/mouse/mouse.hpp similarity index 95% rename from libsnes/bsnes/snes/controller/mouse/mouse.hpp rename to waterbox/libsnes/bsnes/snes/controller/mouse/mouse.hpp index cad1b5569d..6074f342db 100644 --- a/libsnes/bsnes/snes/controller/mouse/mouse.hpp +++ b/waterbox/libsnes/bsnes/snes/controller/mouse/mouse.hpp @@ -1,11 +1,11 @@ struct Mouse : Controller { - uint2 data(); - void latch(bool data); - Mouse(bool port); - void serialize(serializer& s); -private: - bool latched; - unsigned counter; - int position_x; - int position_y; -}; + uint2 data(); + void latch(bool data); + Mouse(bool port); + void serialize(serializer& s); +private: + bool latched; + unsigned counter; + int position_x; + int position_y; +}; diff --git a/libsnes/bsnes/snes/controller/multitap/multitap.cpp b/waterbox/libsnes/bsnes/snes/controller/multitap/multitap.cpp similarity index 98% rename from libsnes/bsnes/snes/controller/multitap/multitap.cpp rename to waterbox/libsnes/bsnes/snes/controller/multitap/multitap.cpp index 0f1e4d995b..d9d974f188 100644 --- a/libsnes/bsnes/snes/controller/multitap/multitap.cpp +++ b/waterbox/libsnes/bsnes/snes/controller/multitap/multitap.cpp @@ -35,32 +35,32 @@ void Multitap::latch(bool data) { latched = data; counter1 = 0; - counter2 = 0; -} - -void Multitap::serialize(serializer& s) { - Processor::serialize(s); - //Save block. - unsigned char block[Controller::SaveSize] = {0}; - block[0] = latched ? 1 : 0; - block[1] = counter1; - block[2] = counter2; - block[3] = connected; - block[4] = toggleConnectedInput; - s.array(block, Controller::SaveSize); - if(s.mode() == nall::serializer::Load) { - latched = (block[0] != 0); - counter1 = block[1]; - counter2 = block[2]; - connected = block[3]; - toggleConnectedInput = block[4]; - } -} - - -Multitap::Multitap(bool port) : Controller(port) { - latched = 0; - counter1 = 0; + counter2 = 0; +} + +void Multitap::serialize(serializer& s) { + Processor::serialize(s); + //Save block. + unsigned char block[Controller::SaveSize] = {0}; + block[0] = latched ? 1 : 0; + block[1] = counter1; + block[2] = counter2; + block[3] = connected; + block[4] = toggleConnectedInput; + s.array(block, Controller::SaveSize); + if(s.mode() == nall::serializer::Load) { + latched = (block[0] != 0); + counter1 = block[1]; + counter2 = block[2]; + connected = block[3]; + toggleConnectedInput = block[4]; + } +} + + +Multitap::Multitap(bool port) : Controller(port) { + latched = 0; + counter1 = 0; counter2 = 0; connected = true; toggleConnectedInput = false; diff --git a/libsnes/bsnes/snes/controller/multitap/multitap.hpp b/waterbox/libsnes/bsnes/snes/controller/multitap/multitap.hpp similarity index 96% rename from libsnes/bsnes/snes/controller/multitap/multitap.hpp rename to waterbox/libsnes/bsnes/snes/controller/multitap/multitap.hpp index 7aee454a89..5a9d1e4814 100644 --- a/libsnes/bsnes/snes/controller/multitap/multitap.hpp +++ b/waterbox/libsnes/bsnes/snes/controller/multitap/multitap.hpp @@ -1,12 +1,12 @@ struct Multitap : Controller { - uint2 data(); - void latch(bool data); - Multitap(bool port); - void serialize(serializer& s); -private: - bool connected; - bool toggleConnectedInput; - bool latched; - unsigned counter1; + uint2 data(); + void latch(bool data); + Multitap(bool port); + void serialize(serializer& s); +private: + bool connected; + bool toggleConnectedInput; + bool latched; + unsigned counter1; unsigned counter2; }; diff --git a/libsnes/bsnes/snes/controller/superscope/superscope.cpp b/waterbox/libsnes/bsnes/snes/controller/superscope/superscope.cpp similarity index 99% rename from libsnes/bsnes/snes/controller/superscope/superscope.cpp rename to waterbox/libsnes/bsnes/snes/controller/superscope/superscope.cpp index ee6a312709..2569032bbc 100644 --- a/libsnes/bsnes/snes/controller/superscope/superscope.cpp +++ b/waterbox/libsnes/bsnes/snes/controller/superscope/superscope.cpp @@ -95,43 +95,43 @@ uint2 SuperScope::data() { void SuperScope::latch(bool data) { if(latched == data) return; latched = data; - counter = 0; -} - -void SuperScope::serialize(serializer& s) { - Processor::serialize(s); - //Save block. - unsigned char block[Controller::SaveSize] = {0}; - block[0] = latched ? 1 : 0; - block[1] = counter; - block[2] = trigger ? 1 : 0; - block[3] = cursor ? 1 : 0; - block[4] = turbo ? 1 : 0; - block[5] = pause ? 1 : 0; - block[6] = offscreen ? 1 : 0; - block[7] = (unsigned short)x >> 8; - block[8] = (unsigned short)x; - block[9] = (unsigned short)y >> 8; - block[10] = (unsigned short)y; - - s.array(block, Controller::SaveSize); - if(s.mode() == nall::serializer::Load) { - latched = (block[0] != 0); - counter = block[1]; - trigger = (block[2] != 0); - cursor = (block[3] != 0); - turbo = (block[4] != 0); - pause = (block[5] != 0); - offscreen = (block[6] != 0); - x = (short)(((unsigned short)block[7] << 8) | (unsigned short)block[8]); - y = (short)(((unsigned short)block[9] << 8) | (unsigned short)block[10]); - } -} - - -SuperScope::SuperScope(bool port) : Controller(port) { - create(Controller::Enter, 21477272); - latched = 0; + counter = 0; +} + +void SuperScope::serialize(serializer& s) { + Processor::serialize(s); + //Save block. + unsigned char block[Controller::SaveSize] = {0}; + block[0] = latched ? 1 : 0; + block[1] = counter; + block[2] = trigger ? 1 : 0; + block[3] = cursor ? 1 : 0; + block[4] = turbo ? 1 : 0; + block[5] = pause ? 1 : 0; + block[6] = offscreen ? 1 : 0; + block[7] = (unsigned short)x >> 8; + block[8] = (unsigned short)x; + block[9] = (unsigned short)y >> 8; + block[10] = (unsigned short)y; + + s.array(block, Controller::SaveSize); + if(s.mode() == nall::serializer::Load) { + latched = (block[0] != 0); + counter = block[1]; + trigger = (block[2] != 0); + cursor = (block[3] != 0); + turbo = (block[4] != 0); + pause = (block[5] != 0); + offscreen = (block[6] != 0); + x = (short)(((unsigned short)block[7] << 8) | (unsigned short)block[8]); + y = (short)(((unsigned short)block[9] << 8) | (unsigned short)block[10]); + } +} + + +SuperScope::SuperScope(bool port) : Controller(port) { + create(Controller::Enter, 21477272); + latched = 0; counter = 0; //center cursor onscreen diff --git a/libsnes/bsnes/snes/controller/superscope/superscope.hpp b/waterbox/libsnes/bsnes/snes/controller/superscope/superscope.hpp similarity index 98% rename from libsnes/bsnes/snes/controller/superscope/superscope.hpp rename to waterbox/libsnes/bsnes/snes/controller/superscope/superscope.hpp index 452bb9d1f5..93509d7945 100644 --- a/libsnes/bsnes/snes/controller/superscope/superscope.hpp +++ b/waterbox/libsnes/bsnes/snes/controller/superscope/superscope.hpp @@ -1,11 +1,11 @@ struct SuperScope : Controller { - void enter(); - uint2 data(); - void latch(bool data); - void serialize(serializer& s); - SuperScope(bool port); - -//private: + void enter(); + uint2 data(); + void latch(bool data); + void serialize(serializer& s); + SuperScope(bool port); + +//private: bool latched; unsigned counter; diff --git a/libsnes/bsnes/snes/controller/usart/usart.cpp b/waterbox/libsnes/bsnes/snes/controller/usart/usart.cpp similarity index 100% rename from libsnes/bsnes/snes/controller/usart/usart.cpp rename to waterbox/libsnes/bsnes/snes/controller/usart/usart.cpp diff --git a/libsnes/bsnes/snes/controller/usart/usart.hpp b/waterbox/libsnes/bsnes/snes/controller/usart/usart.hpp similarity index 100% rename from libsnes/bsnes/snes/controller/usart/usart.hpp rename to waterbox/libsnes/bsnes/snes/controller/usart/usart.hpp diff --git a/libsnes/bsnes/snes/cpu/core/algorithms.cpp b/waterbox/libsnes/bsnes/snes/cpu/core/algorithms.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/core/algorithms.cpp rename to waterbox/libsnes/bsnes/snes/cpu/core/algorithms.cpp diff --git a/libsnes/bsnes/snes/cpu/core/core.cpp b/waterbox/libsnes/bsnes/snes/cpu/core/core.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/core/core.cpp rename to waterbox/libsnes/bsnes/snes/cpu/core/core.cpp diff --git a/libsnes/bsnes/snes/cpu/core/core.hpp b/waterbox/libsnes/bsnes/snes/cpu/core/core.hpp similarity index 100% rename from libsnes/bsnes/snes/cpu/core/core.hpp rename to waterbox/libsnes/bsnes/snes/cpu/core/core.hpp diff --git a/libsnes/bsnes/snes/cpu/core/disassembler/disassembler.cpp b/waterbox/libsnes/bsnes/snes/cpu/core/disassembler/disassembler.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/core/disassembler/disassembler.cpp rename to waterbox/libsnes/bsnes/snes/cpu/core/disassembler/disassembler.cpp diff --git a/libsnes/bsnes/snes/cpu/core/disassembler/disassembler.hpp b/waterbox/libsnes/bsnes/snes/cpu/core/disassembler/disassembler.hpp similarity index 100% rename from libsnes/bsnes/snes/cpu/core/disassembler/disassembler.hpp rename to waterbox/libsnes/bsnes/snes/cpu/core/disassembler/disassembler.hpp diff --git a/libsnes/bsnes/snes/cpu/core/memory.hpp b/waterbox/libsnes/bsnes/snes/cpu/core/memory.hpp similarity index 100% rename from libsnes/bsnes/snes/cpu/core/memory.hpp rename to waterbox/libsnes/bsnes/snes/cpu/core/memory.hpp diff --git a/libsnes/bsnes/snes/cpu/core/opcode_misc.cpp b/waterbox/libsnes/bsnes/snes/cpu/core/opcode_misc.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/core/opcode_misc.cpp rename to waterbox/libsnes/bsnes/snes/cpu/core/opcode_misc.cpp diff --git a/libsnes/bsnes/snes/cpu/core/opcode_pc.cpp b/waterbox/libsnes/bsnes/snes/cpu/core/opcode_pc.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/core/opcode_pc.cpp rename to waterbox/libsnes/bsnes/snes/cpu/core/opcode_pc.cpp diff --git a/libsnes/bsnes/snes/cpu/core/opcode_read.cpp b/waterbox/libsnes/bsnes/snes/cpu/core/opcode_read.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/core/opcode_read.cpp rename to waterbox/libsnes/bsnes/snes/cpu/core/opcode_read.cpp diff --git a/libsnes/bsnes/snes/cpu/core/opcode_rmw.cpp b/waterbox/libsnes/bsnes/snes/cpu/core/opcode_rmw.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/core/opcode_rmw.cpp rename to waterbox/libsnes/bsnes/snes/cpu/core/opcode_rmw.cpp diff --git a/libsnes/bsnes/snes/cpu/core/opcode_write.cpp b/waterbox/libsnes/bsnes/snes/cpu/core/opcode_write.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/core/opcode_write.cpp rename to waterbox/libsnes/bsnes/snes/cpu/core/opcode_write.cpp diff --git a/libsnes/bsnes/snes/cpu/core/registers.hpp b/waterbox/libsnes/bsnes/snes/cpu/core/registers.hpp similarity index 100% rename from libsnes/bsnes/snes/cpu/core/registers.hpp rename to waterbox/libsnes/bsnes/snes/cpu/core/registers.hpp diff --git a/libsnes/bsnes/snes/cpu/core/serialization.cpp b/waterbox/libsnes/bsnes/snes/cpu/core/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/core/serialization.cpp rename to waterbox/libsnes/bsnes/snes/cpu/core/serialization.cpp diff --git a/libsnes/bsnes/snes/cpu/core/table.cpp b/waterbox/libsnes/bsnes/snes/cpu/core/table.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/core/table.cpp rename to waterbox/libsnes/bsnes/snes/cpu/core/table.cpp diff --git a/libsnes/bsnes/snes/cpu/cpu.cpp b/waterbox/libsnes/bsnes/snes/cpu/cpu.cpp similarity index 96% rename from libsnes/bsnes/snes/cpu/cpu.cpp rename to waterbox/libsnes/bsnes/snes/cpu/cpu.cpp index f58a33dd0b..127c31f0b2 100644 --- a/libsnes/bsnes/snes/cpu/cpu.cpp +++ b/waterbox/libsnes/bsnes/snes/cpu/cpu.cpp @@ -1,180 +1,180 @@ -#include - -#define CPU_CPP -namespace SNES { - -CPU cpu; - -#include "serialization.cpp" -#include "dma/dma.cpp" -#include "memory/memory.cpp" -#include "mmio/mmio.cpp" -#include "timing/timing.cpp" - -void CPU::step(unsigned clocks) { - smp.clock -= clocks * (uint64)smp.frequency; - ppu.clock -= clocks; - for(unsigned i = 0; i < coprocessors.size(); i++) { - Processor &chip = *coprocessors[i]; - chip.clock -= clocks * (uint64)chip.frequency; - } - input.port1->clock -= clocks * (uint64)input.port1->frequency; - input.port2->clock -= clocks * (uint64)input.port2->frequency; - synchronize_controllers(); -} - -void CPU::synchronize_smp() { - if(SMP::Threaded == true) { - if(smp.clock < 0) co_switch(smp.thread); - } else { - while(smp.clock < 0) smp.enter(); - } -} - -void CPU::synchronize_ppu() { - if(PPU::Threaded == true) { - if(ppu.clock < 0) co_switch(ppu.thread); - } else { - while(ppu.clock < 0) ppu.enter(); - } -} - -void CPU::synchronize_coprocessors() { - for(unsigned i = 0; i < coprocessors.size(); i++) { - Processor &chip = *coprocessors[i]; - if(chip.clock < 0) co_switch(chip.thread); - } -} - -void CPU::synchronize_controllers() { - if(input.port1->clock < 0) co_switch(input.port1->thread); - if(input.port2->clock < 0) co_switch(input.port2->thread); -} - -void CPU::Enter() { cpu.enter(); } - -void CPU::enter() { - while(true) { - if(scheduler.sync == Scheduler::SynchronizeMode::CPU) { - scheduler.sync = Scheduler::SynchronizeMode::All; - scheduler.exit(Scheduler::ExitReason::SynchronizeEvent); - } - - if(status.interrupt_pending) { - status.interrupt_pending = false; - if(status.nmi_pending) { - status.nmi_pending = false; - regs.vector = (regs.e == false ? 0xffea : 0xfffa); - op_irq(); - debugger.op_nmi(); - } else if(status.irq_pending) { - status.irq_pending = false; - regs.vector = (regs.e == false ? 0xffee : 0xfffe); - op_irq(); - debugger.op_irq(); - } else if(status.reset_pending) { - status.reset_pending = false; - add_clocks(186); - regs.pc.l = bus.read(0xfffc); - regs.pc.h = bus.read(0xfffd); - } - } - - op_step(); - } -} - -void CPU::op_step() { - debugger.op_exec(regs.pc.d); - - if (interface()->wanttrace & TRACE_CPU_MASK) - { - char tmp[512]; - disassemble_opcode(tmp, regs.pc.d); - tmp[511] = 0; - interface()->cpuTrace(TRACE_CPU, tmp); - } - - (this->*opcode_table[op_readpcfirst()])(); -} - -void CPU::enable() { - function read = { &CPU::mmio_read, (CPU*)&cpu }; - function write = { &CPU::mmio_write, (CPU*)&cpu }; - - bus.map(Bus::MapMode::Direct, 0x00, 0x3f, 0x2140, 0x2183, read, write); - bus.map(Bus::MapMode::Direct, 0x80, 0xbf, 0x2140, 0x2183, read, write); - - bus.map(Bus::MapMode::Direct, 0x00, 0x3f, 0x4016, 0x4017, read, write); - bus.map(Bus::MapMode::Direct, 0x80, 0xbf, 0x4016, 0x4017, read, write); - - bus.map(Bus::MapMode::Direct, 0x00, 0x3f, 0x4200, 0x421f, read, write); - bus.map(Bus::MapMode::Direct, 0x80, 0xbf, 0x4200, 0x421f, read, write); - - bus.map(Bus::MapMode::Direct, 0x00, 0x3f, 0x4300, 0x437f, read, write); - bus.map(Bus::MapMode::Direct, 0x80, 0xbf, 0x4300, 0x437f, read, write); - - read = [](unsigned addr) { cdlInfo.set(eCDLog_AddrType_WRAM, addr); return cpu.wram[addr]; }; - write = [](unsigned addr, uint8 data) { cpu.wram[addr] = data; }; - - bus.map(Bus::MapMode::Linear, 0x00, 0x3f, 0x0000, 0x1fff, read, write, 0x000000, 0x002000); - bus.map(Bus::MapMode::Linear, 0x80, 0xbf, 0x0000, 0x1fff, read, write, 0x000000, 0x002000); - bus.map(Bus::MapMode::Linear, 0x7e, 0x7f, 0x0000, 0xffff, read, write); -} - -void CPU::power() { - cpu_version = config.cpu.version; - for(int i=0;i<128*1024;i++) wram[i] = random(config.cpu.wram_init_value); - - regs.a = regs.x = regs.y = 0x0000; - regs.s = 0x01ff; - - mmio_power(); - dma_power(); - timing_power(); - - //zero 01-dec-2012 - //gotta clear these to something, sometime - aa.d = rd.d = sp = dp = 0; -} - -void CPU::reset() { - create(Enter, system.cpu_frequency()); - coprocessors.reset(); - PPUcounter::reset(); - - //note: some registers are not fully reset by SNES - regs.pc = 0x000000; - regs.x.h = 0x00; - regs.y.h = 0x00; - regs.s.h = 0x01; - regs.d = 0x0000; - regs.db = 0x00; - regs.p = 0x34; - regs.e = 1; - regs.mdr = 0x00; - regs.wai = false; - regs.vector = 0xfffc; //reset vector address - update_table(); - - mmio_reset(); - dma_reset(); - timing_reset(); -} - -CPU::CPU() - : wram(nullptr) -{ - PPUcounter::scanline = { &CPU::scanline, this }; -} - -CPU::~CPU() { - interface()->freeSharedMemory(wram); -} - -void CPU::initialize() -{ - wram = (uint8*)interface()->allocSharedMemory("WRAM",128 * 1024); -} - -} +#include + +#define CPU_CPP +namespace SNES { + +CPU cpu; + +#include "serialization.cpp" +#include "dma/dma.cpp" +#include "memory/memory.cpp" +#include "mmio/mmio.cpp" +#include "timing/timing.cpp" + +void CPU::step(unsigned clocks) { + smp.clock -= clocks * (uint64)smp.frequency; + ppu.clock -= clocks; + for(unsigned i = 0; i < coprocessors.size(); i++) { + Processor &chip = *coprocessors[i]; + chip.clock -= clocks * (uint64)chip.frequency; + } + input.port1->clock -= clocks * (uint64)input.port1->frequency; + input.port2->clock -= clocks * (uint64)input.port2->frequency; + synchronize_controllers(); +} + +void CPU::synchronize_smp() { + if(SMP::Threaded == true) { + if(smp.clock < 0) co_switch(smp.thread); + } else { + while(smp.clock < 0) smp.enter(); + } +} + +void CPU::synchronize_ppu() { + if(PPU::Threaded == true) { + if(ppu.clock < 0) co_switch(ppu.thread); + } else { + while(ppu.clock < 0) ppu.enter(); + } +} + +void CPU::synchronize_coprocessors() { + for(unsigned i = 0; i < coprocessors.size(); i++) { + Processor &chip = *coprocessors[i]; + if(chip.clock < 0) co_switch(chip.thread); + } +} + +void CPU::synchronize_controllers() { + if(input.port1->clock < 0) co_switch(input.port1->thread); + if(input.port2->clock < 0) co_switch(input.port2->thread); +} + +void CPU::Enter() { cpu.enter(); } + +void CPU::enter() { + while(true) { + if(scheduler.sync == Scheduler::SynchronizeMode::CPU) { + scheduler.sync = Scheduler::SynchronizeMode::All; + scheduler.exit(Scheduler::ExitReason::SynchronizeEvent); + } + + if(status.interrupt_pending) { + status.interrupt_pending = false; + if(status.nmi_pending) { + status.nmi_pending = false; + regs.vector = (regs.e == false ? 0xffea : 0xfffa); + op_irq(); + debugger.op_nmi(); + } else if(status.irq_pending) { + status.irq_pending = false; + regs.vector = (regs.e == false ? 0xffee : 0xfffe); + op_irq(); + debugger.op_irq(); + } else if(status.reset_pending) { + status.reset_pending = false; + add_clocks(186); + regs.pc.l = bus.read(0xfffc); + regs.pc.h = bus.read(0xfffd); + } + } + + op_step(); + } +} + +void CPU::op_step() { + debugger.op_exec(regs.pc.d); + + if (interface()->wanttrace & TRACE_CPU_MASK) + { + char tmp[512]; + disassemble_opcode(tmp, regs.pc.d); + tmp[511] = 0; + interface()->cpuTrace(TRACE_CPU, tmp); + } + + (this->*opcode_table[op_readpcfirst()])(); +} + +void CPU::enable() { + function read = { &CPU::mmio_read, (CPU*)&cpu }; + function write = { &CPU::mmio_write, (CPU*)&cpu }; + + bus.map(Bus::MapMode::Direct, 0x00, 0x3f, 0x2140, 0x2183, read, write); + bus.map(Bus::MapMode::Direct, 0x80, 0xbf, 0x2140, 0x2183, read, write); + + bus.map(Bus::MapMode::Direct, 0x00, 0x3f, 0x4016, 0x4017, read, write); + bus.map(Bus::MapMode::Direct, 0x80, 0xbf, 0x4016, 0x4017, read, write); + + bus.map(Bus::MapMode::Direct, 0x00, 0x3f, 0x4200, 0x421f, read, write); + bus.map(Bus::MapMode::Direct, 0x80, 0xbf, 0x4200, 0x421f, read, write); + + bus.map(Bus::MapMode::Direct, 0x00, 0x3f, 0x4300, 0x437f, read, write); + bus.map(Bus::MapMode::Direct, 0x80, 0xbf, 0x4300, 0x437f, read, write); + + read = [](unsigned addr) { cdlInfo.set(eCDLog_AddrType_WRAM, addr); return cpu.wram[addr]; }; + write = [](unsigned addr, uint8 data) { cpu.wram[addr] = data; }; + + bus.map(Bus::MapMode::Linear, 0x00, 0x3f, 0x0000, 0x1fff, read, write, 0x000000, 0x002000); + bus.map(Bus::MapMode::Linear, 0x80, 0xbf, 0x0000, 0x1fff, read, write, 0x000000, 0x002000); + bus.map(Bus::MapMode::Linear, 0x7e, 0x7f, 0x0000, 0xffff, read, write); +} + +void CPU::power() { + cpu_version = config.cpu.version; + for(int i=0;i<128*1024;i++) wram[i] = random(config.cpu.wram_init_value); + + regs.a = regs.x = regs.y = 0x0000; + regs.s = 0x01ff; + + mmio_power(); + dma_power(); + timing_power(); + + //zero 01-dec-2012 + //gotta clear these to something, sometime + aa.d = rd.d = sp = dp = 0; +} + +void CPU::reset() { + create(Enter, system.cpu_frequency()); + coprocessors.reset(); + PPUcounter::reset(); + + //note: some registers are not fully reset by SNES + regs.pc = 0x000000; + regs.x.h = 0x00; + regs.y.h = 0x00; + regs.s.h = 0x01; + regs.d = 0x0000; + regs.db = 0x00; + regs.p = 0x34; + regs.e = 1; + regs.mdr = 0x00; + regs.wai = false; + regs.vector = 0xfffc; //reset vector address + update_table(); + + mmio_reset(); + dma_reset(); + timing_reset(); +} + +CPU::CPU() + : wram(nullptr) +{ + PPUcounter::scanline = { &CPU::scanline, this }; +} + +CPU::~CPU() { + interface()->freeSharedMemory(wram); +} + +void CPU::initialize() +{ + wram = (uint8*)interface()->allocSharedMemory("WRAM",128 * 1024); +} + +} diff --git a/libsnes/bsnes/snes/cpu/cpu.hpp b/waterbox/libsnes/bsnes/snes/cpu/cpu.hpp similarity index 100% rename from libsnes/bsnes/snes/cpu/cpu.hpp rename to waterbox/libsnes/bsnes/snes/cpu/cpu.hpp diff --git a/libsnes/bsnes/snes/cpu/dma/dma.cpp b/waterbox/libsnes/bsnes/snes/cpu/dma/dma.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/dma/dma.cpp rename to waterbox/libsnes/bsnes/snes/cpu/dma/dma.cpp diff --git a/libsnes/bsnes/snes/cpu/dma/dma.hpp b/waterbox/libsnes/bsnes/snes/cpu/dma/dma.hpp similarity index 100% rename from libsnes/bsnes/snes/cpu/dma/dma.hpp rename to waterbox/libsnes/bsnes/snes/cpu/dma/dma.hpp diff --git a/libsnes/bsnes/snes/cpu/memory/memory.cpp b/waterbox/libsnes/bsnes/snes/cpu/memory/memory.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/memory/memory.cpp rename to waterbox/libsnes/bsnes/snes/cpu/memory/memory.cpp diff --git a/libsnes/bsnes/snes/cpu/memory/memory.hpp b/waterbox/libsnes/bsnes/snes/cpu/memory/memory.hpp similarity index 100% rename from libsnes/bsnes/snes/cpu/memory/memory.hpp rename to waterbox/libsnes/bsnes/snes/cpu/memory/memory.hpp diff --git a/libsnes/bsnes/snes/cpu/mmio/mmio.cpp b/waterbox/libsnes/bsnes/snes/cpu/mmio/mmio.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/mmio/mmio.cpp rename to waterbox/libsnes/bsnes/snes/cpu/mmio/mmio.cpp diff --git a/libsnes/bsnes/snes/cpu/mmio/mmio.hpp b/waterbox/libsnes/bsnes/snes/cpu/mmio/mmio.hpp similarity index 100% rename from libsnes/bsnes/snes/cpu/mmio/mmio.hpp rename to waterbox/libsnes/bsnes/snes/cpu/mmio/mmio.hpp diff --git a/libsnes/bsnes/snes/cpu/serialization.cpp b/waterbox/libsnes/bsnes/snes/cpu/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/serialization.cpp rename to waterbox/libsnes/bsnes/snes/cpu/serialization.cpp diff --git a/libsnes/bsnes/snes/cpu/timing/irq.cpp b/waterbox/libsnes/bsnes/snes/cpu/timing/irq.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/timing/irq.cpp rename to waterbox/libsnes/bsnes/snes/cpu/timing/irq.cpp diff --git a/libsnes/bsnes/snes/cpu/timing/joypad.cpp b/waterbox/libsnes/bsnes/snes/cpu/timing/joypad.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/timing/joypad.cpp rename to waterbox/libsnes/bsnes/snes/cpu/timing/joypad.cpp diff --git a/libsnes/bsnes/snes/cpu/timing/timing.cpp b/waterbox/libsnes/bsnes/snes/cpu/timing/timing.cpp similarity index 100% rename from libsnes/bsnes/snes/cpu/timing/timing.cpp rename to waterbox/libsnes/bsnes/snes/cpu/timing/timing.cpp diff --git a/libsnes/bsnes/snes/cpu/timing/timing.hpp b/waterbox/libsnes/bsnes/snes/cpu/timing/timing.hpp similarity index 100% rename from libsnes/bsnes/snes/cpu/timing/timing.hpp rename to waterbox/libsnes/bsnes/snes/cpu/timing/timing.hpp diff --git a/libsnes/bsnes/snes/dsp/brr.cpp b/waterbox/libsnes/bsnes/snes/dsp/brr.cpp similarity index 100% rename from libsnes/bsnes/snes/dsp/brr.cpp rename to waterbox/libsnes/bsnes/snes/dsp/brr.cpp diff --git a/libsnes/bsnes/snes/dsp/counter.cpp b/waterbox/libsnes/bsnes/snes/dsp/counter.cpp similarity index 100% rename from libsnes/bsnes/snes/dsp/counter.cpp rename to waterbox/libsnes/bsnes/snes/dsp/counter.cpp diff --git a/libsnes/bsnes/snes/dsp/dsp.cpp b/waterbox/libsnes/bsnes/snes/dsp/dsp.cpp similarity index 100% rename from libsnes/bsnes/snes/dsp/dsp.cpp rename to waterbox/libsnes/bsnes/snes/dsp/dsp.cpp diff --git a/libsnes/bsnes/snes/dsp/dsp.hpp b/waterbox/libsnes/bsnes/snes/dsp/dsp.hpp similarity index 100% rename from libsnes/bsnes/snes/dsp/dsp.hpp rename to waterbox/libsnes/bsnes/snes/dsp/dsp.hpp diff --git a/libsnes/bsnes/snes/dsp/echo.cpp b/waterbox/libsnes/bsnes/snes/dsp/echo.cpp similarity index 100% rename from libsnes/bsnes/snes/dsp/echo.cpp rename to waterbox/libsnes/bsnes/snes/dsp/echo.cpp diff --git a/libsnes/bsnes/snes/dsp/envelope.cpp b/waterbox/libsnes/bsnes/snes/dsp/envelope.cpp similarity index 100% rename from libsnes/bsnes/snes/dsp/envelope.cpp rename to waterbox/libsnes/bsnes/snes/dsp/envelope.cpp diff --git a/libsnes/bsnes/snes/dsp/gaussian.cpp b/waterbox/libsnes/bsnes/snes/dsp/gaussian.cpp similarity index 100% rename from libsnes/bsnes/snes/dsp/gaussian.cpp rename to waterbox/libsnes/bsnes/snes/dsp/gaussian.cpp diff --git a/libsnes/bsnes/snes/dsp/misc.cpp b/waterbox/libsnes/bsnes/snes/dsp/misc.cpp similarity index 100% rename from libsnes/bsnes/snes/dsp/misc.cpp rename to waterbox/libsnes/bsnes/snes/dsp/misc.cpp diff --git a/libsnes/bsnes/snes/dsp/serialization.cpp b/waterbox/libsnes/bsnes/snes/dsp/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/dsp/serialization.cpp rename to waterbox/libsnes/bsnes/snes/dsp/serialization.cpp diff --git a/libsnes/bsnes/snes/dsp/voice.cpp b/waterbox/libsnes/bsnes/snes/dsp/voice.cpp similarity index 100% rename from libsnes/bsnes/snes/dsp/voice.cpp rename to waterbox/libsnes/bsnes/snes/dsp/voice.cpp diff --git a/libsnes/bsnes/snes/interface/interface.cpp b/waterbox/libsnes/bsnes/snes/interface/interface.cpp similarity index 97% rename from libsnes/bsnes/snes/interface/interface.cpp rename to waterbox/libsnes/bsnes/snes/interface/interface.cpp index 03d3e207f3..a117889cae 100644 --- a/libsnes/bsnes/snes/interface/interface.cpp +++ b/waterbox/libsnes/bsnes/snes/interface/interface.cpp @@ -21,25 +21,25 @@ void Interface::inputNotify(int index) { } void Interface::message(const string &text) { - print(text, "\n"); -} - -time_t Interface::currentTime() -{ - return time(0); -} - -time_t Interface::randomSeed() -{ - return time(0); -} - -int Interface::getBackdropColor() -{ - return -1; + print(text, "\n"); +} + +time_t Interface::currentTime() +{ + return time(0); +} + +time_t Interface::randomSeed() +{ + return time(0); +} + +int Interface::getBackdropColor() +{ + return -1; } void Interface::cpuTrace(uint32_t which, const char *msg) { -} - -} +} + +} diff --git a/libsnes/bsnes/snes/interface/interface.hpp b/waterbox/libsnes/bsnes/snes/interface/interface.hpp similarity index 99% rename from libsnes/bsnes/snes/interface/interface.hpp rename to waterbox/libsnes/bsnes/snes/interface/interface.hpp index af94e1955d..f8c152f8c1 100644 --- a/libsnes/bsnes/snes/interface/interface.hpp +++ b/waterbox/libsnes/bsnes/snes/interface/interface.hpp @@ -15,11 +15,11 @@ struct Interface { virtual int16_t inputPoll(bool port, Input::Device device, unsigned index, unsigned id); virtual void inputNotify(int index); - - virtual string path(Cartridge::Slot slot, const string &hint) = 0; - virtual void message(const string &text); - virtual time_t currentTime(); - virtual time_t randomSeed(); + + virtual string path(Cartridge::Slot slot, const string &hint) = 0; + virtual void message(const string &text); + virtual time_t currentTime(); + virtual time_t randomSeed(); //zero 27-sep-2012 virtual void scanlineStart(int line) = 0; @@ -33,6 +33,6 @@ struct Interface { //zero 23-dec-2012 virtual void* allocSharedMemory(const char* memtype, size_t amt, int initialByte = -1) = 0; virtual void freeSharedMemory(void* ptr) = 0; -}; - -Interface *interface(); +}; + +Interface *interface(); diff --git a/libsnes/bsnes/snes/memory/memory-inline.hpp b/waterbox/libsnes/bsnes/snes/memory/memory-inline.hpp similarity index 100% rename from libsnes/bsnes/snes/memory/memory-inline.hpp rename to waterbox/libsnes/bsnes/snes/memory/memory-inline.hpp diff --git a/libsnes/bsnes/snes/memory/memory.cpp b/waterbox/libsnes/bsnes/snes/memory/memory.cpp similarity index 100% rename from libsnes/bsnes/snes/memory/memory.cpp rename to waterbox/libsnes/bsnes/snes/memory/memory.cpp diff --git a/libsnes/bsnes/snes/memory/memory.hpp b/waterbox/libsnes/bsnes/snes/memory/memory.hpp similarity index 100% rename from libsnes/bsnes/snes/memory/memory.hpp rename to waterbox/libsnes/bsnes/snes/memory/memory.hpp diff --git a/libsnes/bsnes/snes/ppu/background/background.cpp b/waterbox/libsnes/bsnes/snes/ppu/background/background.cpp similarity index 100% rename from libsnes/bsnes/snes/ppu/background/background.cpp rename to waterbox/libsnes/bsnes/snes/ppu/background/background.cpp diff --git a/libsnes/bsnes/snes/ppu/background/background.hpp b/waterbox/libsnes/bsnes/snes/ppu/background/background.hpp similarity index 100% rename from libsnes/bsnes/snes/ppu/background/background.hpp rename to waterbox/libsnes/bsnes/snes/ppu/background/background.hpp diff --git a/libsnes/bsnes/snes/ppu/background/mode7.cpp b/waterbox/libsnes/bsnes/snes/ppu/background/mode7.cpp similarity index 100% rename from libsnes/bsnes/snes/ppu/background/mode7.cpp rename to waterbox/libsnes/bsnes/snes/ppu/background/mode7.cpp diff --git a/libsnes/bsnes/snes/ppu/counter/counter-inline.hpp b/waterbox/libsnes/bsnes/snes/ppu/counter/counter-inline.hpp similarity index 100% rename from libsnes/bsnes/snes/ppu/counter/counter-inline.hpp rename to waterbox/libsnes/bsnes/snes/ppu/counter/counter-inline.hpp diff --git a/libsnes/bsnes/snes/ppu/counter/counter.hpp b/waterbox/libsnes/bsnes/snes/ppu/counter/counter.hpp similarity index 100% rename from libsnes/bsnes/snes/ppu/counter/counter.hpp rename to waterbox/libsnes/bsnes/snes/ppu/counter/counter.hpp diff --git a/libsnes/bsnes/snes/ppu/mmio/mmio.cpp b/waterbox/libsnes/bsnes/snes/ppu/mmio/mmio.cpp similarity index 100% rename from libsnes/bsnes/snes/ppu/mmio/mmio.cpp rename to waterbox/libsnes/bsnes/snes/ppu/mmio/mmio.cpp diff --git a/libsnes/bsnes/snes/ppu/mmio/mmio.hpp b/waterbox/libsnes/bsnes/snes/ppu/mmio/mmio.hpp similarity index 100% rename from libsnes/bsnes/snes/ppu/mmio/mmio.hpp rename to waterbox/libsnes/bsnes/snes/ppu/mmio/mmio.hpp diff --git a/libsnes/bsnes/snes/ppu/ppu.cpp b/waterbox/libsnes/bsnes/snes/ppu/ppu.cpp similarity index 100% rename from libsnes/bsnes/snes/ppu/ppu.cpp rename to waterbox/libsnes/bsnes/snes/ppu/ppu.cpp diff --git a/libsnes/bsnes/snes/ppu/ppu.hpp b/waterbox/libsnes/bsnes/snes/ppu/ppu.hpp similarity index 100% rename from libsnes/bsnes/snes/ppu/ppu.hpp rename to waterbox/libsnes/bsnes/snes/ppu/ppu.hpp diff --git a/libsnes/bsnes/snes/ppu/screen/screen.cpp b/waterbox/libsnes/bsnes/snes/ppu/screen/screen.cpp similarity index 100% rename from libsnes/bsnes/snes/ppu/screen/screen.cpp rename to waterbox/libsnes/bsnes/snes/ppu/screen/screen.cpp diff --git a/libsnes/bsnes/snes/ppu/screen/screen.hpp b/waterbox/libsnes/bsnes/snes/ppu/screen/screen.hpp similarity index 100% rename from libsnes/bsnes/snes/ppu/screen/screen.hpp rename to waterbox/libsnes/bsnes/snes/ppu/screen/screen.hpp diff --git a/libsnes/bsnes/snes/ppu/serialization.cpp b/waterbox/libsnes/bsnes/snes/ppu/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/ppu/serialization.cpp rename to waterbox/libsnes/bsnes/snes/ppu/serialization.cpp diff --git a/libsnes/bsnes/snes/ppu/sprite/list.cpp b/waterbox/libsnes/bsnes/snes/ppu/sprite/list.cpp similarity index 100% rename from libsnes/bsnes/snes/ppu/sprite/list.cpp rename to waterbox/libsnes/bsnes/snes/ppu/sprite/list.cpp diff --git a/libsnes/bsnes/snes/ppu/sprite/sprite.cpp b/waterbox/libsnes/bsnes/snes/ppu/sprite/sprite.cpp similarity index 100% rename from libsnes/bsnes/snes/ppu/sprite/sprite.cpp rename to waterbox/libsnes/bsnes/snes/ppu/sprite/sprite.cpp diff --git a/libsnes/bsnes/snes/ppu/sprite/sprite.hpp b/waterbox/libsnes/bsnes/snes/ppu/sprite/sprite.hpp similarity index 100% rename from libsnes/bsnes/snes/ppu/sprite/sprite.hpp rename to waterbox/libsnes/bsnes/snes/ppu/sprite/sprite.hpp diff --git a/libsnes/bsnes/snes/ppu/window/window.cpp b/waterbox/libsnes/bsnes/snes/ppu/window/window.cpp similarity index 100% rename from libsnes/bsnes/snes/ppu/window/window.cpp rename to waterbox/libsnes/bsnes/snes/ppu/window/window.cpp diff --git a/libsnes/bsnes/snes/ppu/window/window.hpp b/waterbox/libsnes/bsnes/snes/ppu/window/window.hpp similarity index 100% rename from libsnes/bsnes/snes/ppu/window/window.hpp rename to waterbox/libsnes/bsnes/snes/ppu/window/window.hpp diff --git a/libsnes/bsnes/snes/profile-accuracy.hpp b/waterbox/libsnes/bsnes/snes/profile-accuracy.hpp similarity index 100% rename from libsnes/bsnes/snes/profile-accuracy.hpp rename to waterbox/libsnes/bsnes/snes/profile-accuracy.hpp diff --git a/libsnes/bsnes/snes/profile-compatibility.hpp b/waterbox/libsnes/bsnes/snes/profile-compatibility.hpp similarity index 100% rename from libsnes/bsnes/snes/profile-compatibility.hpp rename to waterbox/libsnes/bsnes/snes/profile-compatibility.hpp diff --git a/libsnes/bsnes/snes/profile-performance.hpp b/waterbox/libsnes/bsnes/snes/profile-performance.hpp similarity index 100% rename from libsnes/bsnes/snes/profile-performance.hpp rename to waterbox/libsnes/bsnes/snes/profile-performance.hpp diff --git a/libsnes/bsnes/snes/random/random.cpp b/waterbox/libsnes/bsnes/snes/random/random.cpp similarity index 100% rename from libsnes/bsnes/snes/random/random.cpp rename to waterbox/libsnes/bsnes/snes/random/random.cpp diff --git a/libsnes/bsnes/snes/random/random.hpp b/waterbox/libsnes/bsnes/snes/random/random.hpp similarity index 100% rename from libsnes/bsnes/snes/random/random.hpp rename to waterbox/libsnes/bsnes/snes/random/random.hpp diff --git a/libsnes/bsnes/snes/scheduler/scheduler.cpp b/waterbox/libsnes/bsnes/snes/scheduler/scheduler.cpp similarity index 100% rename from libsnes/bsnes/snes/scheduler/scheduler.cpp rename to waterbox/libsnes/bsnes/snes/scheduler/scheduler.cpp diff --git a/libsnes/bsnes/snes/scheduler/scheduler.hpp b/waterbox/libsnes/bsnes/snes/scheduler/scheduler.hpp similarity index 100% rename from libsnes/bsnes/snes/scheduler/scheduler.hpp rename to waterbox/libsnes/bsnes/snes/scheduler/scheduler.hpp diff --git a/libsnes/bsnes/snes/smp/core/algorithms.cpp b/waterbox/libsnes/bsnes/snes/smp/core/algorithms.cpp similarity index 100% rename from libsnes/bsnes/snes/smp/core/algorithms.cpp rename to waterbox/libsnes/bsnes/snes/smp/core/algorithms.cpp diff --git a/libsnes/bsnes/snes/smp/core/core.cpp b/waterbox/libsnes/bsnes/snes/smp/core/core.cpp similarity index 97% rename from libsnes/bsnes/snes/smp/core/core.cpp rename to waterbox/libsnes/bsnes/snes/smp/core/core.cpp index 690612ae00..9c94d00a08 100644 --- a/libsnes/bsnes/snes/smp/core/core.cpp +++ b/waterbox/libsnes/bsnes/snes/smp/core/core.cpp @@ -1,272 +1,272 @@ -#include - -#define SMPCORE_CPP -namespace SNES { - -#include "algorithms.cpp" -#include "opcodes.cpp" -#include "disassembler.cpp" -#include "serialization.cpp" - -void SMPcore::op_step() { - switch(opcode = op_readpc()) { - case 0x00: return op_nop(); - case 0x01: return op_jst(); - case 0x02: return op_set_bit(); - case 0x03: return op_branch_bit(); - case 0x04: return op_read_dp<&SMPcore::op_or>(regs.a); - case 0x05: return op_read_addr<&SMPcore::op_or>(regs.a); - case 0x06: return op_read_ix<&SMPcore::op_or>(); - case 0x07: return op_read_idpx<&SMPcore::op_or>(); - case 0x08: return op_read_const<&SMPcore::op_or>(regs.a); - case 0x09: return op_write_dp_dp<&SMPcore::op_or>(); - case 0x0a: return op_set_addr_bit(); - case 0x0b: return op_adjust_dp<&SMPcore::op_asl>(); - case 0x0c: return op_adjust_addr<&SMPcore::op_asl>(); - case 0x0d: return op_push(regs.p); - case 0x0e: return op_test_addr(1); - case 0x0f: return op_brk(); - case 0x10: return op_branch(regs.p.n == 0); - case 0x11: return op_jst(); - case 0x12: return op_set_bit(); - case 0x13: return op_branch_bit(); - case 0x14: return op_read_dpi<&SMPcore::op_or>(regs.a, regs.x); - case 0x15: return op_read_addri<&SMPcore::op_or>(regs.x); - case 0x16: return op_read_addri<&SMPcore::op_or>(regs.y); - case 0x17: return op_read_idpy<&SMPcore::op_or>(); - case 0x18: return op_write_dp_const<&SMPcore::op_or>(); - case 0x19: return op_write_ix_iy<&SMPcore::op_or>(); - case 0x1a: return op_adjust_dpw(-1); - case 0x1b: return op_adjust_dpx<&SMPcore::op_asl>(); - case 0x1c: return op_adjust<&SMPcore::op_asl>(regs.a); - case 0x1d: return op_adjust<&SMPcore::op_dec>(regs.x); - case 0x1e: return op_read_addr<&SMPcore::op_cmp>(regs.x); - case 0x1f: return op_jmp_iaddrx(); - case 0x20: return op_set_flag(regs.p.p, 0); - case 0x21: return op_jst(); - case 0x22: return op_set_bit(); - case 0x23: return op_branch_bit(); - case 0x24: return op_read_dp<&SMPcore::op_and>(regs.a); - case 0x25: return op_read_addr<&SMPcore::op_and>(regs.a); - case 0x26: return op_read_ix<&SMPcore::op_and>(); - case 0x27: return op_read_idpx<&SMPcore::op_and>(); - case 0x28: return op_read_const<&SMPcore::op_and>(regs.a); - case 0x29: return op_write_dp_dp<&SMPcore::op_and>(); - case 0x2a: return op_set_addr_bit(); - case 0x2b: return op_adjust_dp<&SMPcore::op_rol>(); - case 0x2c: return op_adjust_addr<&SMPcore::op_rol>(); - case 0x2d: return op_push(regs.a); - case 0x2e: return op_bne_dp(); - case 0x2f: return op_branch(true); - case 0x30: return op_branch(regs.p.n == 1); - case 0x31: return op_jst(); - case 0x32: return op_set_bit(); - case 0x33: return op_branch_bit(); - case 0x34: return op_read_dpi<&SMPcore::op_and>(regs.a, regs.x); - case 0x35: return op_read_addri<&SMPcore::op_and>(regs.x); - case 0x36: return op_read_addri<&SMPcore::op_and>(regs.y); - case 0x37: return op_read_idpy<&SMPcore::op_and>(); - case 0x38: return op_write_dp_const<&SMPcore::op_and>(); - case 0x39: return op_write_ix_iy<&SMPcore::op_and>(); - case 0x3a: return op_adjust_dpw(+1); - case 0x3b: return op_adjust_dpx<&SMPcore::op_rol>(); - case 0x3c: return op_adjust<&SMPcore::op_rol>(regs.a); - case 0x3d: return op_adjust<&SMPcore::op_inc>(regs.x); - case 0x3e: return op_read_dp<&SMPcore::op_cmp>(regs.x); - case 0x3f: return op_jsr_addr(); - case 0x40: return op_set_flag(regs.p.p, 1); - case 0x41: return op_jst(); - case 0x42: return op_set_bit(); - case 0x43: return op_branch_bit(); - case 0x44: return op_read_dp<&SMPcore::op_eor>(regs.a); - case 0x45: return op_read_addr<&SMPcore::op_eor>(regs.a); - case 0x46: return op_read_ix<&SMPcore::op_eor>(); - case 0x47: return op_read_idpx<&SMPcore::op_eor>(); - case 0x48: return op_read_const<&SMPcore::op_eor>(regs.a); - case 0x49: return op_write_dp_dp<&SMPcore::op_eor>(); - case 0x4a: return op_set_addr_bit(); - case 0x4b: return op_adjust_dp<&SMPcore::op_lsr>(); - case 0x4c: return op_adjust_addr<&SMPcore::op_lsr>(); - case 0x4d: return op_push(regs.x); - case 0x4e: return op_test_addr(0); - case 0x4f: return op_jsp_dp(); - case 0x50: return op_branch(regs.p.v == 0); - case 0x51: return op_jst(); - case 0x52: return op_set_bit(); - case 0x53: return op_branch_bit(); - case 0x54: return op_read_dpi<&SMPcore::op_eor>(regs.a, regs.x); - case 0x55: return op_read_addri<&SMPcore::op_eor>(regs.x); - case 0x56: return op_read_addri<&SMPcore::op_eor>(regs.y); - case 0x57: return op_read_idpy<&SMPcore::op_eor>(); - case 0x58: return op_write_dp_const<&SMPcore::op_eor>(); - case 0x59: return op_write_ix_iy<&SMPcore::op_eor>(); - case 0x5a: return op_read_dpw<&SMPcore::op_cpw>(); - case 0x5b: return op_adjust_dpx<&SMPcore::op_lsr>(); - case 0x5c: return op_adjust<&SMPcore::op_lsr>(regs.a); - case 0x5d: return op_transfer(regs.a, regs.x); - case 0x5e: return op_read_addr<&SMPcore::op_cmp>(regs.y); - case 0x5f: return op_jmp_addr(); - case 0x60: return op_set_flag(regs.p.c, 0); - case 0x61: return op_jst(); - case 0x62: return op_set_bit(); - case 0x63: return op_branch_bit(); - case 0x64: return op_read_dp<&SMPcore::op_cmp>(regs.a); - case 0x65: return op_read_addr<&SMPcore::op_cmp>(regs.a); - case 0x66: return op_read_ix<&SMPcore::op_cmp>(); - case 0x67: return op_read_idpx<&SMPcore::op_cmp>(); - case 0x68: return op_read_const<&SMPcore::op_cmp>(regs.a); - case 0x69: return op_write_dp_dp<&SMPcore::op_cmp>(); - case 0x6a: return op_set_addr_bit(); - case 0x6b: return op_adjust_dp<&SMPcore::op_ror>(); - case 0x6c: return op_adjust_addr<&SMPcore::op_ror>(); - case 0x6d: return op_push(regs.y); - case 0x6e: return op_bne_dpdec(); - case 0x6f: return op_rts(); - case 0x70: return op_branch(regs.p.v == 1); - case 0x71: return op_jst(); - case 0x72: return op_set_bit(); - case 0x73: return op_branch_bit(); - case 0x74: return op_read_dpi<&SMPcore::op_cmp>(regs.a, regs.x); - case 0x75: return op_read_addri<&SMPcore::op_cmp>(regs.x); - case 0x76: return op_read_addri<&SMPcore::op_cmp>(regs.y); - case 0x77: return op_read_idpy<&SMPcore::op_cmp>(); - case 0x78: return op_write_dp_const<&SMPcore::op_cmp>(); - case 0x79: return op_write_ix_iy<&SMPcore::op_cmp>(); - case 0x7a: return op_read_dpw<&SMPcore::op_adw>(); - case 0x7b: return op_adjust_dpx<&SMPcore::op_ror>(); - case 0x7c: return op_adjust<&SMPcore::op_ror>(regs.a); - case 0x7d: return op_transfer(regs.x, regs.a); - case 0x7e: return op_read_dp<&SMPcore::op_cmp>(regs.y); - case 0x7f: return op_rti(); - case 0x80: return op_set_flag(regs.p.c, 1); - case 0x81: return op_jst(); - case 0x82: return op_set_bit(); - case 0x83: return op_branch_bit(); - case 0x84: return op_read_dp<&SMPcore::op_adc>(regs.a); - case 0x85: return op_read_addr<&SMPcore::op_adc>(regs.a); - case 0x86: return op_read_ix<&SMPcore::op_adc>(); - case 0x87: return op_read_idpx<&SMPcore::op_adc>(); - case 0x88: return op_read_const<&SMPcore::op_adc>(regs.a); - case 0x89: return op_write_dp_dp<&SMPcore::op_adc>(); - case 0x8a: return op_set_addr_bit(); - case 0x8b: return op_adjust_dp<&SMPcore::op_dec>(); - case 0x8c: return op_adjust_addr<&SMPcore::op_dec>(); - case 0x8d: return op_read_const<&SMPcore::op_ld>(regs.y); - case 0x8e: return op_plp(); - case 0x8f: return op_write_dp_const<&SMPcore::op_st>(); - case 0x90: return op_branch(regs.p.c == 0); - case 0x91: return op_jst(); - case 0x92: return op_set_bit(); - case 0x93: return op_branch_bit(); - case 0x94: return op_read_dpi<&SMPcore::op_adc>(regs.a, regs.x); - case 0x95: return op_read_addri<&SMPcore::op_adc>(regs.x); - case 0x96: return op_read_addri<&SMPcore::op_adc>(regs.y); - case 0x97: return op_read_idpy<&SMPcore::op_adc>(); - case 0x98: return op_write_dp_const<&SMPcore::op_adc>(); - case 0x99: return op_write_ix_iy<&SMPcore::op_adc>(); - case 0x9a: return op_read_dpw<&SMPcore::op_sbw>(); - case 0x9b: return op_adjust_dpx<&SMPcore::op_dec>(); - case 0x9c: return op_adjust<&SMPcore::op_dec>(regs.a); - case 0x9d: return op_transfer(regs.s, regs.x); - case 0x9e: return op_div_ya_x(); - case 0x9f: return op_xcn(); - case 0xa0: return op_set_flag(regs.p.i, 1); - case 0xa1: return op_jst(); - case 0xa2: return op_set_bit(); - case 0xa3: return op_branch_bit(); - case 0xa4: return op_read_dp<&SMPcore::op_sbc>(regs.a); - case 0xa5: return op_read_addr<&SMPcore::op_sbc>(regs.a); - case 0xa6: return op_read_ix<&SMPcore::op_sbc>(); - case 0xa7: return op_read_idpx<&SMPcore::op_sbc>(); - case 0xa8: return op_read_const<&SMPcore::op_sbc>(regs.a); - case 0xa9: return op_write_dp_dp<&SMPcore::op_sbc>(); - case 0xaa: return op_set_addr_bit(); - case 0xab: return op_adjust_dp<&SMPcore::op_inc>(); - case 0xac: return op_adjust_addr<&SMPcore::op_inc>(); - case 0xad: return op_read_const<&SMPcore::op_cmp>(regs.y); - case 0xae: return op_pull(regs.a); - case 0xaf: return op_sta_ixinc(); - case 0xb0: return op_branch(regs.p.c == 1); - case 0xb1: return op_jst(); - case 0xb2: return op_set_bit(); - case 0xb3: return op_branch_bit(); - case 0xb4: return op_read_dpi<&SMPcore::op_sbc>(regs.a, regs.x); - case 0xb5: return op_read_addri<&SMPcore::op_sbc>(regs.x); - case 0xb6: return op_read_addri<&SMPcore::op_sbc>(regs.y); - case 0xb7: return op_read_idpy<&SMPcore::op_sbc>(); - case 0xb8: return op_write_dp_const<&SMPcore::op_sbc>(); - case 0xb9: return op_write_ix_iy<&SMPcore::op_sbc>(); - case 0xba: return op_read_dpw<&SMPcore::op_ldw>(); - case 0xbb: return op_adjust_dpx<&SMPcore::op_inc>(); - case 0xbc: return op_adjust<&SMPcore::op_inc>(regs.a); - case 0xbd: return op_transfer(regs.x, regs.s); - case 0xbe: return op_das(); - case 0xbf: return op_lda_ixinc(); - case 0xc0: return op_set_flag(regs.p.i, 0); - case 0xc1: return op_jst(); - case 0xc2: return op_set_bit(); - case 0xc3: return op_branch_bit(); - case 0xc4: return op_write_dp(regs.a); - case 0xc5: return op_write_addr(regs.a); - case 0xc6: return op_sta_ix(); - case 0xc7: return op_sta_idpx(); - case 0xc8: return op_read_const<&SMPcore::op_cmp>(regs.x); - case 0xc9: return op_write_addr(regs.x); - case 0xca: return op_set_addr_bit(); - case 0xcb: return op_write_dp(regs.y); - case 0xcc: return op_write_addr(regs.y); - case 0xcd: return op_read_const<&SMPcore::op_ld>(regs.x); - case 0xce: return op_pull(regs.x); - case 0xcf: return op_mul_ya(); - case 0xd0: return op_branch(regs.p.z == 0); - case 0xd1: return op_jst(); - case 0xd2: return op_set_bit(); - case 0xd3: return op_branch_bit(); - case 0xd4: return op_write_dpi(regs.a, regs.x); - case 0xd5: return op_write_addri(regs.x); - case 0xd6: return op_write_addri(regs.y); - case 0xd7: return op_sta_idpy(); - case 0xd8: return op_write_dp(regs.x); - case 0xd9: return op_write_dpi(regs.x, regs.y); - case 0xda: return op_stw_dp(); - case 0xdb: return op_write_dpi(regs.y, regs.x); - case 0xdc: return op_adjust<&SMPcore::op_dec>(regs.y); - case 0xdd: return op_transfer(regs.y, regs.a); - case 0xde: return op_bne_dpx(); - case 0xdf: return op_daa(); - case 0xe0: return op_clv(); - case 0xe1: return op_jst(); - case 0xe2: return op_set_bit(); - case 0xe3: return op_branch_bit(); - case 0xe4: return op_read_dp<&SMPcore::op_ld>(regs.a); - case 0xe5: return op_read_addr<&SMPcore::op_ld>(regs.a); - case 0xe6: return op_read_ix<&SMPcore::op_ld>(); - case 0xe7: return op_read_idpx<&SMPcore::op_ld>(); - case 0xe8: return op_read_const<&SMPcore::op_ld>(regs.a); - case 0xe9: return op_read_addr<&SMPcore::op_ld>(regs.x); - case 0xea: return op_set_addr_bit(); - case 0xeb: return op_read_dp<&SMPcore::op_ld>(regs.y); - case 0xec: return op_read_addr<&SMPcore::op_ld>(regs.y); - case 0xed: return op_cmc(); - case 0xee: return op_pull(regs.y); - case 0xef: return op_wait(); - case 0xf0: return op_branch(regs.p.z == 1); - case 0xf1: return op_jst(); - case 0xf2: return op_set_bit(); - case 0xf3: return op_branch_bit(); - case 0xf4: return op_read_dpi<&SMPcore::op_ld>(regs.a, regs.x); - case 0xf5: return op_read_addri<&SMPcore::op_ld>(regs.x); - case 0xf6: return op_read_addri<&SMPcore::op_ld>(regs.y); - case 0xf7: return op_read_idpy<&SMPcore::op_ld>(); - case 0xf8: return op_read_dp<&SMPcore::op_ld>(regs.x); - case 0xf9: return op_read_dpi<&SMPcore::op_ld>(regs.x, regs.y); - case 0xfa: return op_write_dp_dp<&SMPcore::op_st>(); - case 0xfb: return op_read_dpi<&SMPcore::op_ld>(regs.y, regs.x); - case 0xfc: return op_adjust<&SMPcore::op_inc>(regs.y); - case 0xfd: return op_transfer(regs.a, regs.y); - case 0xfe: return op_bne_ydec(); - case 0xff: return op_wait(); - } -} - -} +#include + +#define SMPCORE_CPP +namespace SNES { + +#include "algorithms.cpp" +#include "opcodes.cpp" +#include "disassembler.cpp" +#include "serialization.cpp" + +void SMPcore::op_step() { + switch(opcode = op_readpc()) { + case 0x00: return op_nop(); + case 0x01: return op_jst(); + case 0x02: return op_set_bit(); + case 0x03: return op_branch_bit(); + case 0x04: return op_read_dp<&SMPcore::op_or>(regs.a); + case 0x05: return op_read_addr<&SMPcore::op_or>(regs.a); + case 0x06: return op_read_ix<&SMPcore::op_or>(); + case 0x07: return op_read_idpx<&SMPcore::op_or>(); + case 0x08: return op_read_const<&SMPcore::op_or>(regs.a); + case 0x09: return op_write_dp_dp<&SMPcore::op_or>(); + case 0x0a: return op_set_addr_bit(); + case 0x0b: return op_adjust_dp<&SMPcore::op_asl>(); + case 0x0c: return op_adjust_addr<&SMPcore::op_asl>(); + case 0x0d: return op_push(regs.p); + case 0x0e: return op_test_addr(1); + case 0x0f: return op_brk(); + case 0x10: return op_branch(regs.p.n == 0); + case 0x11: return op_jst(); + case 0x12: return op_set_bit(); + case 0x13: return op_branch_bit(); + case 0x14: return op_read_dpi<&SMPcore::op_or>(regs.a, regs.x); + case 0x15: return op_read_addri<&SMPcore::op_or>(regs.x); + case 0x16: return op_read_addri<&SMPcore::op_or>(regs.y); + case 0x17: return op_read_idpy<&SMPcore::op_or>(); + case 0x18: return op_write_dp_const<&SMPcore::op_or>(); + case 0x19: return op_write_ix_iy<&SMPcore::op_or>(); + case 0x1a: return op_adjust_dpw(-1); + case 0x1b: return op_adjust_dpx<&SMPcore::op_asl>(); + case 0x1c: return op_adjust<&SMPcore::op_asl>(regs.a); + case 0x1d: return op_adjust<&SMPcore::op_dec>(regs.x); + case 0x1e: return op_read_addr<&SMPcore::op_cmp>(regs.x); + case 0x1f: return op_jmp_iaddrx(); + case 0x20: return op_set_flag(regs.p.p, 0); + case 0x21: return op_jst(); + case 0x22: return op_set_bit(); + case 0x23: return op_branch_bit(); + case 0x24: return op_read_dp<&SMPcore::op_and>(regs.a); + case 0x25: return op_read_addr<&SMPcore::op_and>(regs.a); + case 0x26: return op_read_ix<&SMPcore::op_and>(); + case 0x27: return op_read_idpx<&SMPcore::op_and>(); + case 0x28: return op_read_const<&SMPcore::op_and>(regs.a); + case 0x29: return op_write_dp_dp<&SMPcore::op_and>(); + case 0x2a: return op_set_addr_bit(); + case 0x2b: return op_adjust_dp<&SMPcore::op_rol>(); + case 0x2c: return op_adjust_addr<&SMPcore::op_rol>(); + case 0x2d: return op_push(regs.a); + case 0x2e: return op_bne_dp(); + case 0x2f: return op_branch(true); + case 0x30: return op_branch(regs.p.n == 1); + case 0x31: return op_jst(); + case 0x32: return op_set_bit(); + case 0x33: return op_branch_bit(); + case 0x34: return op_read_dpi<&SMPcore::op_and>(regs.a, regs.x); + case 0x35: return op_read_addri<&SMPcore::op_and>(regs.x); + case 0x36: return op_read_addri<&SMPcore::op_and>(regs.y); + case 0x37: return op_read_idpy<&SMPcore::op_and>(); + case 0x38: return op_write_dp_const<&SMPcore::op_and>(); + case 0x39: return op_write_ix_iy<&SMPcore::op_and>(); + case 0x3a: return op_adjust_dpw(+1); + case 0x3b: return op_adjust_dpx<&SMPcore::op_rol>(); + case 0x3c: return op_adjust<&SMPcore::op_rol>(regs.a); + case 0x3d: return op_adjust<&SMPcore::op_inc>(regs.x); + case 0x3e: return op_read_dp<&SMPcore::op_cmp>(regs.x); + case 0x3f: return op_jsr_addr(); + case 0x40: return op_set_flag(regs.p.p, 1); + case 0x41: return op_jst(); + case 0x42: return op_set_bit(); + case 0x43: return op_branch_bit(); + case 0x44: return op_read_dp<&SMPcore::op_eor>(regs.a); + case 0x45: return op_read_addr<&SMPcore::op_eor>(regs.a); + case 0x46: return op_read_ix<&SMPcore::op_eor>(); + case 0x47: return op_read_idpx<&SMPcore::op_eor>(); + case 0x48: return op_read_const<&SMPcore::op_eor>(regs.a); + case 0x49: return op_write_dp_dp<&SMPcore::op_eor>(); + case 0x4a: return op_set_addr_bit(); + case 0x4b: return op_adjust_dp<&SMPcore::op_lsr>(); + case 0x4c: return op_adjust_addr<&SMPcore::op_lsr>(); + case 0x4d: return op_push(regs.x); + case 0x4e: return op_test_addr(0); + case 0x4f: return op_jsp_dp(); + case 0x50: return op_branch(regs.p.v == 0); + case 0x51: return op_jst(); + case 0x52: return op_set_bit(); + case 0x53: return op_branch_bit(); + case 0x54: return op_read_dpi<&SMPcore::op_eor>(regs.a, regs.x); + case 0x55: return op_read_addri<&SMPcore::op_eor>(regs.x); + case 0x56: return op_read_addri<&SMPcore::op_eor>(regs.y); + case 0x57: return op_read_idpy<&SMPcore::op_eor>(); + case 0x58: return op_write_dp_const<&SMPcore::op_eor>(); + case 0x59: return op_write_ix_iy<&SMPcore::op_eor>(); + case 0x5a: return op_read_dpw<&SMPcore::op_cpw>(); + case 0x5b: return op_adjust_dpx<&SMPcore::op_lsr>(); + case 0x5c: return op_adjust<&SMPcore::op_lsr>(regs.a); + case 0x5d: return op_transfer(regs.a, regs.x); + case 0x5e: return op_read_addr<&SMPcore::op_cmp>(regs.y); + case 0x5f: return op_jmp_addr(); + case 0x60: return op_set_flag(regs.p.c, 0); + case 0x61: return op_jst(); + case 0x62: return op_set_bit(); + case 0x63: return op_branch_bit(); + case 0x64: return op_read_dp<&SMPcore::op_cmp>(regs.a); + case 0x65: return op_read_addr<&SMPcore::op_cmp>(regs.a); + case 0x66: return op_read_ix<&SMPcore::op_cmp>(); + case 0x67: return op_read_idpx<&SMPcore::op_cmp>(); + case 0x68: return op_read_const<&SMPcore::op_cmp>(regs.a); + case 0x69: return op_write_dp_dp<&SMPcore::op_cmp>(); + case 0x6a: return op_set_addr_bit(); + case 0x6b: return op_adjust_dp<&SMPcore::op_ror>(); + case 0x6c: return op_adjust_addr<&SMPcore::op_ror>(); + case 0x6d: return op_push(regs.y); + case 0x6e: return op_bne_dpdec(); + case 0x6f: return op_rts(); + case 0x70: return op_branch(regs.p.v == 1); + case 0x71: return op_jst(); + case 0x72: return op_set_bit(); + case 0x73: return op_branch_bit(); + case 0x74: return op_read_dpi<&SMPcore::op_cmp>(regs.a, regs.x); + case 0x75: return op_read_addri<&SMPcore::op_cmp>(regs.x); + case 0x76: return op_read_addri<&SMPcore::op_cmp>(regs.y); + case 0x77: return op_read_idpy<&SMPcore::op_cmp>(); + case 0x78: return op_write_dp_const<&SMPcore::op_cmp>(); + case 0x79: return op_write_ix_iy<&SMPcore::op_cmp>(); + case 0x7a: return op_read_dpw<&SMPcore::op_adw>(); + case 0x7b: return op_adjust_dpx<&SMPcore::op_ror>(); + case 0x7c: return op_adjust<&SMPcore::op_ror>(regs.a); + case 0x7d: return op_transfer(regs.x, regs.a); + case 0x7e: return op_read_dp<&SMPcore::op_cmp>(regs.y); + case 0x7f: return op_rti(); + case 0x80: return op_set_flag(regs.p.c, 1); + case 0x81: return op_jst(); + case 0x82: return op_set_bit(); + case 0x83: return op_branch_bit(); + case 0x84: return op_read_dp<&SMPcore::op_adc>(regs.a); + case 0x85: return op_read_addr<&SMPcore::op_adc>(regs.a); + case 0x86: return op_read_ix<&SMPcore::op_adc>(); + case 0x87: return op_read_idpx<&SMPcore::op_adc>(); + case 0x88: return op_read_const<&SMPcore::op_adc>(regs.a); + case 0x89: return op_write_dp_dp<&SMPcore::op_adc>(); + case 0x8a: return op_set_addr_bit(); + case 0x8b: return op_adjust_dp<&SMPcore::op_dec>(); + case 0x8c: return op_adjust_addr<&SMPcore::op_dec>(); + case 0x8d: return op_read_const<&SMPcore::op_ld>(regs.y); + case 0x8e: return op_plp(); + case 0x8f: return op_write_dp_const<&SMPcore::op_st>(); + case 0x90: return op_branch(regs.p.c == 0); + case 0x91: return op_jst(); + case 0x92: return op_set_bit(); + case 0x93: return op_branch_bit(); + case 0x94: return op_read_dpi<&SMPcore::op_adc>(regs.a, regs.x); + case 0x95: return op_read_addri<&SMPcore::op_adc>(regs.x); + case 0x96: return op_read_addri<&SMPcore::op_adc>(regs.y); + case 0x97: return op_read_idpy<&SMPcore::op_adc>(); + case 0x98: return op_write_dp_const<&SMPcore::op_adc>(); + case 0x99: return op_write_ix_iy<&SMPcore::op_adc>(); + case 0x9a: return op_read_dpw<&SMPcore::op_sbw>(); + case 0x9b: return op_adjust_dpx<&SMPcore::op_dec>(); + case 0x9c: return op_adjust<&SMPcore::op_dec>(regs.a); + case 0x9d: return op_transfer(regs.s, regs.x); + case 0x9e: return op_div_ya_x(); + case 0x9f: return op_xcn(); + case 0xa0: return op_set_flag(regs.p.i, 1); + case 0xa1: return op_jst(); + case 0xa2: return op_set_bit(); + case 0xa3: return op_branch_bit(); + case 0xa4: return op_read_dp<&SMPcore::op_sbc>(regs.a); + case 0xa5: return op_read_addr<&SMPcore::op_sbc>(regs.a); + case 0xa6: return op_read_ix<&SMPcore::op_sbc>(); + case 0xa7: return op_read_idpx<&SMPcore::op_sbc>(); + case 0xa8: return op_read_const<&SMPcore::op_sbc>(regs.a); + case 0xa9: return op_write_dp_dp<&SMPcore::op_sbc>(); + case 0xaa: return op_set_addr_bit(); + case 0xab: return op_adjust_dp<&SMPcore::op_inc>(); + case 0xac: return op_adjust_addr<&SMPcore::op_inc>(); + case 0xad: return op_read_const<&SMPcore::op_cmp>(regs.y); + case 0xae: return op_pull(regs.a); + case 0xaf: return op_sta_ixinc(); + case 0xb0: return op_branch(regs.p.c == 1); + case 0xb1: return op_jst(); + case 0xb2: return op_set_bit(); + case 0xb3: return op_branch_bit(); + case 0xb4: return op_read_dpi<&SMPcore::op_sbc>(regs.a, regs.x); + case 0xb5: return op_read_addri<&SMPcore::op_sbc>(regs.x); + case 0xb6: return op_read_addri<&SMPcore::op_sbc>(regs.y); + case 0xb7: return op_read_idpy<&SMPcore::op_sbc>(); + case 0xb8: return op_write_dp_const<&SMPcore::op_sbc>(); + case 0xb9: return op_write_ix_iy<&SMPcore::op_sbc>(); + case 0xba: return op_read_dpw<&SMPcore::op_ldw>(); + case 0xbb: return op_adjust_dpx<&SMPcore::op_inc>(); + case 0xbc: return op_adjust<&SMPcore::op_inc>(regs.a); + case 0xbd: return op_transfer(regs.x, regs.s); + case 0xbe: return op_das(); + case 0xbf: return op_lda_ixinc(); + case 0xc0: return op_set_flag(regs.p.i, 0); + case 0xc1: return op_jst(); + case 0xc2: return op_set_bit(); + case 0xc3: return op_branch_bit(); + case 0xc4: return op_write_dp(regs.a); + case 0xc5: return op_write_addr(regs.a); + case 0xc6: return op_sta_ix(); + case 0xc7: return op_sta_idpx(); + case 0xc8: return op_read_const<&SMPcore::op_cmp>(regs.x); + case 0xc9: return op_write_addr(regs.x); + case 0xca: return op_set_addr_bit(); + case 0xcb: return op_write_dp(regs.y); + case 0xcc: return op_write_addr(regs.y); + case 0xcd: return op_read_const<&SMPcore::op_ld>(regs.x); + case 0xce: return op_pull(regs.x); + case 0xcf: return op_mul_ya(); + case 0xd0: return op_branch(regs.p.z == 0); + case 0xd1: return op_jst(); + case 0xd2: return op_set_bit(); + case 0xd3: return op_branch_bit(); + case 0xd4: return op_write_dpi(regs.a, regs.x); + case 0xd5: return op_write_addri(regs.x); + case 0xd6: return op_write_addri(regs.y); + case 0xd7: return op_sta_idpy(); + case 0xd8: return op_write_dp(regs.x); + case 0xd9: return op_write_dpi(regs.x, regs.y); + case 0xda: return op_stw_dp(); + case 0xdb: return op_write_dpi(regs.y, regs.x); + case 0xdc: return op_adjust<&SMPcore::op_dec>(regs.y); + case 0xdd: return op_transfer(regs.y, regs.a); + case 0xde: return op_bne_dpx(); + case 0xdf: return op_daa(); + case 0xe0: return op_clv(); + case 0xe1: return op_jst(); + case 0xe2: return op_set_bit(); + case 0xe3: return op_branch_bit(); + case 0xe4: return op_read_dp<&SMPcore::op_ld>(regs.a); + case 0xe5: return op_read_addr<&SMPcore::op_ld>(regs.a); + case 0xe6: return op_read_ix<&SMPcore::op_ld>(); + case 0xe7: return op_read_idpx<&SMPcore::op_ld>(); + case 0xe8: return op_read_const<&SMPcore::op_ld>(regs.a); + case 0xe9: return op_read_addr<&SMPcore::op_ld>(regs.x); + case 0xea: return op_set_addr_bit(); + case 0xeb: return op_read_dp<&SMPcore::op_ld>(regs.y); + case 0xec: return op_read_addr<&SMPcore::op_ld>(regs.y); + case 0xed: return op_cmc(); + case 0xee: return op_pull(regs.y); + case 0xef: return op_wait(); + case 0xf0: return op_branch(regs.p.z == 1); + case 0xf1: return op_jst(); + case 0xf2: return op_set_bit(); + case 0xf3: return op_branch_bit(); + case 0xf4: return op_read_dpi<&SMPcore::op_ld>(regs.a, regs.x); + case 0xf5: return op_read_addri<&SMPcore::op_ld>(regs.x); + case 0xf6: return op_read_addri<&SMPcore::op_ld>(regs.y); + case 0xf7: return op_read_idpy<&SMPcore::op_ld>(); + case 0xf8: return op_read_dp<&SMPcore::op_ld>(regs.x); + case 0xf9: return op_read_dpi<&SMPcore::op_ld>(regs.x, regs.y); + case 0xfa: return op_write_dp_dp<&SMPcore::op_st>(); + case 0xfb: return op_read_dpi<&SMPcore::op_ld>(regs.y, regs.x); + case 0xfc: return op_adjust<&SMPcore::op_inc>(regs.y); + case 0xfd: return op_transfer(regs.a, regs.y); + case 0xfe: return op_bne_ydec(); + case 0xff: return op_wait(); + } +} + +} diff --git a/libsnes/bsnes/snes/smp/core/core.hpp b/waterbox/libsnes/bsnes/snes/smp/core/core.hpp similarity index 96% rename from libsnes/bsnes/snes/smp/core/core.hpp rename to waterbox/libsnes/bsnes/snes/smp/core/core.hpp index 3c0532b36a..7e927bac6e 100644 --- a/libsnes/bsnes/snes/smp/core/core.hpp +++ b/waterbox/libsnes/bsnes/snes/smp/core/core.hpp @@ -1,96 +1,96 @@ -struct SMPcore { - virtual void op_io() = 0; - virtual uint8 op_read(uint16 addr, eCDLog_Flags flags = eCDLog_Flags_CPUData) = 0; - virtual void op_write(uint16 addr, uint8 data) = 0; - void op_step(); - - #include "registers.hpp" - #include "memory.hpp" - - regs_t regs; - word_t dp, sp, rd, wr, bit, ya; - uint8 opcode; - - void core_serialize(serializer&); - string disassemble_opcode(uint16 addr); - -protected: - uint8 op_adc(uint8, uint8); - uint8 op_and(uint8, uint8); - uint8 op_asl(uint8); - uint8 op_cmp(uint8, uint8); - uint8 op_dec(uint8); - uint8 op_eor(uint8, uint8); - uint8 op_inc(uint8); - uint8 op_ld (uint8, uint8); - uint8 op_lsr(uint8); - uint8 op_or (uint8, uint8); - uint8 op_rol(uint8); - uint8 op_ror(uint8); - uint8 op_sbc(uint8, uint8); - uint8 op_st (uint8, uint8); - uint16 op_adw(uint16, uint16); - uint16 op_cpw(uint16, uint16); - uint16 op_ldw(uint16, uint16); - uint16 op_sbw(uint16, uint16); - - template void op_adjust(uint8&); - template void op_adjust_addr(); - template void op_adjust_dp(); - void op_adjust_dpw(signed); - template void op_adjust_dpx(); - void op_branch(bool); - void op_branch_bit(); - void op_pull(uint8&); - void op_push(uint8); - template void op_read_addr(uint8&); - template void op_read_addri(uint8&); - template void op_read_const(uint8&); - template void op_read_dp(uint8&); - template void op_read_dpi(uint8&, uint8&); - template void op_read_dpw(); - template void op_read_idpx(); - template void op_read_idpy(); - template void op_read_ix(); - void op_set_addr_bit(); - void op_set_bit(); - void op_set_flag(bool&, bool); - void op_test_addr(bool); - void op_transfer(uint8&, uint8&); - void op_write_addr(uint8&); - void op_write_addri(uint8&); - void op_write_dp(uint8&); - void op_write_dpi(uint8&, uint8&); - template void op_write_dp_const(); - template void op_write_dp_dp(); - template void op_write_ix_iy(); - - void op_bne_dp(); - void op_bne_dpdec(); - void op_bne_dpx(); - void op_bne_ydec(); - void op_brk(); - void op_clv(); - void op_cmc(); - void op_daa(); - void op_das(); - void op_div_ya_x(); - void op_jmp_addr(); - void op_jmp_iaddrx(); - void op_jsp_dp(); - void op_jsr_addr(); - void op_jst(); - void op_lda_ixinc(); - void op_mul_ya(); - void op_nop(); - void op_plp(); - void op_rti(); - void op_rts(); - void op_sta_idpx(); - void op_sta_idpy(); - void op_sta_ix(); - void op_sta_ixinc(); - void op_stw_dp(); - void op_wait(); - void op_xcn(); -}; +struct SMPcore { + virtual void op_io() = 0; + virtual uint8 op_read(uint16 addr, eCDLog_Flags flags = eCDLog_Flags_CPUData) = 0; + virtual void op_write(uint16 addr, uint8 data) = 0; + void op_step(); + + #include "registers.hpp" + #include "memory.hpp" + + regs_t regs; + word_t dp, sp, rd, wr, bit, ya; + uint8 opcode; + + void core_serialize(serializer&); + string disassemble_opcode(uint16 addr); + +protected: + uint8 op_adc(uint8, uint8); + uint8 op_and(uint8, uint8); + uint8 op_asl(uint8); + uint8 op_cmp(uint8, uint8); + uint8 op_dec(uint8); + uint8 op_eor(uint8, uint8); + uint8 op_inc(uint8); + uint8 op_ld (uint8, uint8); + uint8 op_lsr(uint8); + uint8 op_or (uint8, uint8); + uint8 op_rol(uint8); + uint8 op_ror(uint8); + uint8 op_sbc(uint8, uint8); + uint8 op_st (uint8, uint8); + uint16 op_adw(uint16, uint16); + uint16 op_cpw(uint16, uint16); + uint16 op_ldw(uint16, uint16); + uint16 op_sbw(uint16, uint16); + + template void op_adjust(uint8&); + template void op_adjust_addr(); + template void op_adjust_dp(); + void op_adjust_dpw(signed); + template void op_adjust_dpx(); + void op_branch(bool); + void op_branch_bit(); + void op_pull(uint8&); + void op_push(uint8); + template void op_read_addr(uint8&); + template void op_read_addri(uint8&); + template void op_read_const(uint8&); + template void op_read_dp(uint8&); + template void op_read_dpi(uint8&, uint8&); + template void op_read_dpw(); + template void op_read_idpx(); + template void op_read_idpy(); + template void op_read_ix(); + void op_set_addr_bit(); + void op_set_bit(); + void op_set_flag(bool&, bool); + void op_test_addr(bool); + void op_transfer(uint8&, uint8&); + void op_write_addr(uint8&); + void op_write_addri(uint8&); + void op_write_dp(uint8&); + void op_write_dpi(uint8&, uint8&); + template void op_write_dp_const(); + template void op_write_dp_dp(); + template void op_write_ix_iy(); + + void op_bne_dp(); + void op_bne_dpdec(); + void op_bne_dpx(); + void op_bne_ydec(); + void op_brk(); + void op_clv(); + void op_cmc(); + void op_daa(); + void op_das(); + void op_div_ya_x(); + void op_jmp_addr(); + void op_jmp_iaddrx(); + void op_jsp_dp(); + void op_jsr_addr(); + void op_jst(); + void op_lda_ixinc(); + void op_mul_ya(); + void op_nop(); + void op_plp(); + void op_rti(); + void op_rts(); + void op_sta_idpx(); + void op_sta_idpy(); + void op_sta_ix(); + void op_sta_ixinc(); + void op_stw_dp(); + void op_wait(); + void op_xcn(); +}; diff --git a/libsnes/bsnes/snes/smp/core/disassembler.cpp b/waterbox/libsnes/bsnes/snes/smp/core/disassembler.cpp similarity index 100% rename from libsnes/bsnes/snes/smp/core/disassembler.cpp rename to waterbox/libsnes/bsnes/snes/smp/core/disassembler.cpp diff --git a/libsnes/bsnes/snes/smp/core/memory.hpp b/waterbox/libsnes/bsnes/snes/smp/core/memory.hpp similarity index 99% rename from libsnes/bsnes/snes/smp/core/memory.hpp rename to waterbox/libsnes/bsnes/snes/smp/core/memory.hpp index 73e6d8a29b..02813580c6 100644 --- a/libsnes/bsnes/snes/smp/core/memory.hpp +++ b/waterbox/libsnes/bsnes/snes/smp/core/memory.hpp @@ -22,7 +22,7 @@ alwaysinline void op_writedp(uint8 addr, uint8 data) { return op_write((regs.p.p << 8) + addr, data); } -alwaysinline void op_next() { +alwaysinline void op_next() { opcode = op_readpcfirst(); uindex = -1; } diff --git a/libsnes/bsnes/snes/smp/core/opcodes.cpp b/waterbox/libsnes/bsnes/snes/smp/core/opcodes.cpp similarity index 100% rename from libsnes/bsnes/snes/smp/core/opcodes.cpp rename to waterbox/libsnes/bsnes/snes/smp/core/opcodes.cpp diff --git a/libsnes/bsnes/snes/smp/core/registers.hpp b/waterbox/libsnes/bsnes/snes/smp/core/registers.hpp similarity index 100% rename from libsnes/bsnes/snes/smp/core/registers.hpp rename to waterbox/libsnes/bsnes/snes/smp/core/registers.hpp diff --git a/libsnes/bsnes/snes/smp/core/serialization.cpp b/waterbox/libsnes/bsnes/snes/smp/core/serialization.cpp similarity index 94% rename from libsnes/bsnes/snes/smp/core/serialization.cpp rename to waterbox/libsnes/bsnes/snes/smp/core/serialization.cpp index 24d0ca78cc..c25e229476 100644 --- a/libsnes/bsnes/snes/smp/core/serialization.cpp +++ b/waterbox/libsnes/bsnes/snes/smp/core/serialization.cpp @@ -1,27 +1,27 @@ -#ifdef SMPCORE_CPP - -void SMPcore::core_serialize(serializer &s) { - s.integer(regs.pc); - s.integer(regs.a); - s.integer(regs.x); - s.integer(regs.y); - s.integer(regs.s); - s.integer(regs.p.n); - s.integer(regs.p.v); - s.integer(regs.p.p); - s.integer(regs.p.b); - s.integer(regs.p.h); - s.integer(regs.p.i); - s.integer(regs.p.z); - s.integer(regs.p.c); - - s.integer(opcode); - s.integer(dp.w); - s.integer(sp.w); - s.integer(rd.w); - s.integer(wr.w); - s.integer(bit.w); - s.integer(ya.w); -} - -#endif +#ifdef SMPCORE_CPP + +void SMPcore::core_serialize(serializer &s) { + s.integer(regs.pc); + s.integer(regs.a); + s.integer(regs.x); + s.integer(regs.y); + s.integer(regs.s); + s.integer(regs.p.n); + s.integer(regs.p.v); + s.integer(regs.p.p); + s.integer(regs.p.b); + s.integer(regs.p.h); + s.integer(regs.p.i); + s.integer(regs.p.z); + s.integer(regs.p.c); + + s.integer(opcode); + s.integer(dp.w); + s.integer(sp.w); + s.integer(rd.w); + s.integer(wr.w); + s.integer(bit.w); + s.integer(ya.w); +} + +#endif diff --git a/libsnes/bsnes/snes/smp/iplrom.cpp b/waterbox/libsnes/bsnes/snes/smp/iplrom.cpp similarity index 100% rename from libsnes/bsnes/snes/smp/iplrom.cpp rename to waterbox/libsnes/bsnes/snes/smp/iplrom.cpp diff --git a/libsnes/bsnes/snes/smp/memory/memory.cpp b/waterbox/libsnes/bsnes/snes/smp/memory/memory.cpp similarity index 100% rename from libsnes/bsnes/snes/smp/memory/memory.cpp rename to waterbox/libsnes/bsnes/snes/smp/memory/memory.cpp diff --git a/libsnes/bsnes/snes/smp/memory/memory.hpp b/waterbox/libsnes/bsnes/snes/smp/memory/memory.hpp similarity index 100% rename from libsnes/bsnes/snes/smp/memory/memory.hpp rename to waterbox/libsnes/bsnes/snes/smp/memory/memory.hpp diff --git a/libsnes/bsnes/snes/smp/serialization.cpp b/waterbox/libsnes/bsnes/snes/smp/serialization.cpp similarity index 100% rename from libsnes/bsnes/snes/smp/serialization.cpp rename to waterbox/libsnes/bsnes/snes/smp/serialization.cpp diff --git a/libsnes/bsnes/snes/smp/smp.cpp b/waterbox/libsnes/bsnes/snes/smp/smp.cpp similarity index 100% rename from libsnes/bsnes/snes/smp/smp.cpp rename to waterbox/libsnes/bsnes/snes/smp/smp.cpp diff --git a/libsnes/bsnes/snes/smp/smp.hpp b/waterbox/libsnes/bsnes/snes/smp/smp.hpp similarity index 94% rename from libsnes/bsnes/snes/smp/smp.hpp rename to waterbox/libsnes/bsnes/snes/smp/smp.hpp index 70edf66974..a9f5e3db60 100644 --- a/libsnes/bsnes/snes/smp/smp.hpp +++ b/waterbox/libsnes/bsnes/snes/smp/smp.hpp @@ -1,62 +1,62 @@ -struct SMP : public Processor, public SMPcore { - static const uint8 iplrom[64]; - uint8* apuram; //[64 * 1024]; - - enum : bool { Threaded = true }; - alwaysinline void step(unsigned clocks); - alwaysinline void synchronize_cpu(); - alwaysinline void synchronize_dsp(); - - uint8 port_read(uint2 port) const; - void port_write(uint2 port, uint8 data); - - void enter(); - void power(); - void reset(); - - void serialize(serializer&); - SMP(); - ~SMP(); - void initialize(); - -privileged: - #include "memory/memory.hpp" - #include "timing/timing.hpp" - - struct { - //timing - unsigned clock_counter; - unsigned dsp_counter; - unsigned timer_step; - - //$00f0 - uint8 clock_speed; - uint8 timer_speed; - bool timers_enable; - bool ram_disable; - bool ram_writable; - bool timers_disable; - - //$00f1 - bool iplrom_enable; - - //$00f2 - uint8 dsp_addr; - - //$00f8,$00f9 - uint8 ram00f8; - uint8 ram00f9; - } status; - - static void Enter(); - - friend class SMPcore; - - struct Debugger { - hook op_exec; - hook op_read; - hook op_write; - } debugger; -}; - -extern SMP smp; +struct SMP : public Processor, public SMPcore { + static const uint8 iplrom[64]; + uint8* apuram; //[64 * 1024]; + + enum : bool { Threaded = true }; + alwaysinline void step(unsigned clocks); + alwaysinline void synchronize_cpu(); + alwaysinline void synchronize_dsp(); + + uint8 port_read(uint2 port) const; + void port_write(uint2 port, uint8 data); + + void enter(); + void power(); + void reset(); + + void serialize(serializer&); + SMP(); + ~SMP(); + void initialize(); + +privileged: + #include "memory/memory.hpp" + #include "timing/timing.hpp" + + struct { + //timing + unsigned clock_counter; + unsigned dsp_counter; + unsigned timer_step; + + //$00f0 + uint8 clock_speed; + uint8 timer_speed; + bool timers_enable; + bool ram_disable; + bool ram_writable; + bool timers_disable; + + //$00f1 + bool iplrom_enable; + + //$00f2 + uint8 dsp_addr; + + //$00f8,$00f9 + uint8 ram00f8; + uint8 ram00f9; + } status; + + static void Enter(); + + friend class SMPcore; + + struct Debugger { + hook op_exec; + hook op_read; + hook op_write; + } debugger; +}; + +extern SMP smp; diff --git a/libsnes/bsnes/snes/smp/timing/timing.cpp b/waterbox/libsnes/bsnes/snes/smp/timing/timing.cpp similarity index 96% rename from libsnes/bsnes/snes/smp/timing/timing.cpp rename to waterbox/libsnes/bsnes/snes/smp/timing/timing.cpp index 286c733dd0..3709ba9887 100644 --- a/libsnes/bsnes/snes/smp/timing/timing.cpp +++ b/waterbox/libsnes/bsnes/snes/smp/timing/timing.cpp @@ -1,62 +1,62 @@ -#ifdef SMP_CPP - -void SMP::add_clocks(unsigned clocks) { - step(clocks); - synchronize_dsp(); - - #if defined(DEBUGGER) - synchronize_cpu(); - #else - //forcefully sync S-SMP to S-CPU in case chips are not communicating - //sync if S-SMP is more than 24 samples ahead of S-CPU - if(clock > +(768 * 24 * (int64)24000000)) synchronize_cpu(); - #endif -} - -void SMP::cycle_edge() { - timer0.tick(); - timer1.tick(); - timer2.tick(); - - //TEST register S-SMP speed control - //24 clocks have already been added for this cycle at this point - switch(status.clock_speed) { - case 0: break; //100% speed - case 1: add_clocks(24); break; // 50% speed - case 2: while(true) add_clocks(24); // 0% speed -- locks S-SMP - case 3: add_clocks(24 * 9); break; // 10% speed - } -} - -template -void SMP::Timer::tick() { - //stage 0 increment - stage0_ticks += smp.status.timer_step; - if(stage0_ticks < timer_frequency) return; - stage0_ticks -= timer_frequency; - - //stage 1 increment - stage1_ticks ^= 1; - synchronize_stage1(); -} - -template -void SMP::Timer::synchronize_stage1() { - bool new_line = stage1_ticks; - if(smp.status.timers_enable == false) new_line = false; - if(smp.status.timers_disable == true) new_line = false; - - bool old_line = current_line; - current_line = new_line; - if(old_line != 1 || new_line != 0) return; //only pulse on 1->0 transition - - //stage 2 increment - if(enable == false) return; - if(++stage2_ticks != target) return; - - //stage 3 increment - stage2_ticks = 0; - stage3_ticks++; -} - -#endif +#ifdef SMP_CPP + +void SMP::add_clocks(unsigned clocks) { + step(clocks); + synchronize_dsp(); + + #if defined(DEBUGGER) + synchronize_cpu(); + #else + //forcefully sync S-SMP to S-CPU in case chips are not communicating + //sync if S-SMP is more than 24 samples ahead of S-CPU + if(clock > +(768 * 24 * (int64)24000000)) synchronize_cpu(); + #endif +} + +void SMP::cycle_edge() { + timer0.tick(); + timer1.tick(); + timer2.tick(); + + //TEST register S-SMP speed control + //24 clocks have already been added for this cycle at this point + switch(status.clock_speed) { + case 0: break; //100% speed + case 1: add_clocks(24); break; // 50% speed + case 2: while(true) add_clocks(24); // 0% speed -- locks S-SMP + case 3: add_clocks(24 * 9); break; // 10% speed + } +} + +template +void SMP::Timer::tick() { + //stage 0 increment + stage0_ticks += smp.status.timer_step; + if(stage0_ticks < timer_frequency) return; + stage0_ticks -= timer_frequency; + + //stage 1 increment + stage1_ticks ^= 1; + synchronize_stage1(); +} + +template +void SMP::Timer::synchronize_stage1() { + bool new_line = stage1_ticks; + if(smp.status.timers_enable == false) new_line = false; + if(smp.status.timers_disable == true) new_line = false; + + bool old_line = current_line; + current_line = new_line; + if(old_line != 1 || new_line != 0) return; //only pulse on 1->0 transition + + //stage 2 increment + if(enable == false) return; + if(++stage2_ticks != target) return; + + //stage 3 increment + stage2_ticks = 0; + stage3_ticks++; +} + +#endif diff --git a/libsnes/bsnes/snes/smp/timing/timing.hpp b/waterbox/libsnes/bsnes/snes/smp/timing/timing.hpp similarity index 100% rename from libsnes/bsnes/snes/smp/timing/timing.hpp rename to waterbox/libsnes/bsnes/snes/smp/timing/timing.hpp diff --git a/libsnes/bsnes/snes/snes.hpp b/waterbox/libsnes/bsnes/snes/snes.hpp similarity index 100% rename from libsnes/bsnes/snes/snes.hpp rename to waterbox/libsnes/bsnes/snes/snes.hpp diff --git a/libsnes/bsnes/snes/system/audio.cpp b/waterbox/libsnes/bsnes/snes/system/audio.cpp similarity index 100% rename from libsnes/bsnes/snes/system/audio.cpp rename to waterbox/libsnes/bsnes/snes/system/audio.cpp diff --git a/libsnes/bsnes/snes/system/audio.hpp b/waterbox/libsnes/bsnes/snes/system/audio.hpp similarity index 100% rename from libsnes/bsnes/snes/system/audio.hpp rename to waterbox/libsnes/bsnes/snes/system/audio.hpp diff --git a/libsnes/bsnes/snes/system/input.cpp b/waterbox/libsnes/bsnes/snes/system/input.cpp similarity index 98% rename from libsnes/bsnes/snes/system/input.cpp rename to waterbox/libsnes/bsnes/snes/system/input.cpp index 74461c4ef8..4479acc25a 100644 --- a/libsnes/bsnes/snes/system/input.cpp +++ b/waterbox/libsnes/bsnes/snes/system/input.cpp @@ -23,28 +23,28 @@ void Input::connect(bool port, Input::Device id) { switch(port) { case Controller::Port1: config.controller_port1 = id; break; case Controller::Port2: config.controller_port2 = id; break; - } -} - -void Input::serialize(serializer &s) -{ - int p1, p2; - p1 = (int)config.controller_port1; - p2 = (int)config.controller_port2; - s.integer(p1); - s.integer(p2); - if(s.mode() == nall::serializer::Load) { - connect(Controller::Port1, (Device)p1); - connect(Controller::Port2, (Device)p2); - } - port1->serialize(s); - port2->serialize(s); -} - - -Input::Input() : port1(nullptr), port2(nullptr) { - connect(Controller::Port1, Input::Device::Joypad); - connect(Controller::Port2, Input::Device::Joypad); + } +} + +void Input::serialize(serializer &s) +{ + int p1, p2; + p1 = (int)config.controller_port1; + p2 = (int)config.controller_port2; + s.integer(p1); + s.integer(p2); + if(s.mode() == nall::serializer::Load) { + connect(Controller::Port1, (Device)p1); + connect(Controller::Port2, (Device)p2); + } + port1->serialize(s); + port2->serialize(s); +} + + +Input::Input() : port1(nullptr), port2(nullptr) { + connect(Controller::Port1, Input::Device::Joypad); + connect(Controller::Port2, Input::Device::Joypad); } Input::~Input() { diff --git a/libsnes/bsnes/snes/system/input.hpp b/waterbox/libsnes/bsnes/snes/system/input.hpp similarity index 99% rename from libsnes/bsnes/snes/system/input.hpp rename to waterbox/libsnes/bsnes/snes/system/input.hpp index 9d7686161b..d2f5fefbb9 100644 --- a/libsnes/bsnes/snes/system/input.hpp +++ b/waterbox/libsnes/bsnes/snes/system/input.hpp @@ -28,13 +28,13 @@ struct Input { X = 0, Y = 1, Trigger = 2, Start = 3, }; - Controller *port1; - Controller *port2; - - void serialize(serializer &s); - void connect(bool port, Input::Device id); - Input(); - ~Input(); + Controller *port1; + Controller *port2; + + void serialize(serializer &s); + void connect(bool port, Input::Device id); + Input(); + ~Input(); }; extern Input input; diff --git a/libsnes/bsnes/snes/system/serialization.cpp b/waterbox/libsnes/bsnes/snes/system/serialization.cpp similarity index 98% rename from libsnes/bsnes/snes/system/serialization.cpp rename to waterbox/libsnes/bsnes/snes/system/serialization.cpp index f4e4517da7..7cd38ff461 100644 --- a/libsnes/bsnes/snes/system/serialization.cpp +++ b/waterbox/libsnes/bsnes/snes/system/serialization.cpp @@ -53,47 +53,47 @@ void System::serialize(serializer &s) { #define DEBUGSAVESTATE(X) void System::serialize_all(serializer &s) { - DEBUGSAVESTATE(cart); - cartridge.serialize(s); - DEBUGSAVESTATE(system); - system.serialize(s); - DEBUGSAVESTATE(random); - random.serialize(s); - DEBUGSAVESTATE(cpu); - cpu.serialize(s); - DEBUGSAVESTATE(smp); - smp.serialize(s); - DEBUGSAVESTATE(ppu); - ppu.serialize(s); - DEBUGSAVESTATE(dsp); - dsp.serialize(s); - DEBUGSAVESTATE(input); - input.serialize(s); - - DEBUGSAVESTATE(sufamiturbo); - if(cartridge.mode() == Cartridge::Mode::SufamiTurbo) sufamiturbo.serialize(s); - #if defined(GAMEBOY) - DEBUGSAVESTATE(icd2); - if(cartridge.mode() == Cartridge::Mode::SuperGameBoy) icd2.serialize(s); - #endif - DEBUGSAVESTATE(superfx); - if(cartridge.has_superfx()) superfx.serialize(s); - DEBUGSAVESTATE(sa1); - if(cartridge.has_sa1()) sa1.serialize(s); - DEBUGSAVESTATE(necdsp); - if(cartridge.has_necdsp()) necdsp.serialize(s); - DEBUGSAVESTATE(hitachidsp); - if(cartridge.has_hitachidsp()) hitachidsp.serialize(s); - DEBUGSAVESTATE(armdsp); - if(cartridge.has_armdsp()) armdsp.serialize(s); - DEBUGSAVESTATE(srtc); - if(cartridge.has_srtc()) srtc.serialize(s); - DEBUGSAVESTATE(sdd1); - if(cartridge.has_sdd1()) sdd1.serialize(s); - DEBUGSAVESTATE(spc7110); - if(cartridge.has_spc7110()) spc7110.serialize(s); - DEBUGSAVESTATE(obc1); - if(cartridge.has_obc1()) obc1.serialize(s); + DEBUGSAVESTATE(cart); + cartridge.serialize(s); + DEBUGSAVESTATE(system); + system.serialize(s); + DEBUGSAVESTATE(random); + random.serialize(s); + DEBUGSAVESTATE(cpu); + cpu.serialize(s); + DEBUGSAVESTATE(smp); + smp.serialize(s); + DEBUGSAVESTATE(ppu); + ppu.serialize(s); + DEBUGSAVESTATE(dsp); + dsp.serialize(s); + DEBUGSAVESTATE(input); + input.serialize(s); + + DEBUGSAVESTATE(sufamiturbo); + if(cartridge.mode() == Cartridge::Mode::SufamiTurbo) sufamiturbo.serialize(s); + #if defined(GAMEBOY) + DEBUGSAVESTATE(icd2); + if(cartridge.mode() == Cartridge::Mode::SuperGameBoy) icd2.serialize(s); + #endif + DEBUGSAVESTATE(superfx); + if(cartridge.has_superfx()) superfx.serialize(s); + DEBUGSAVESTATE(sa1); + if(cartridge.has_sa1()) sa1.serialize(s); + DEBUGSAVESTATE(necdsp); + if(cartridge.has_necdsp()) necdsp.serialize(s); + DEBUGSAVESTATE(hitachidsp); + if(cartridge.has_hitachidsp()) hitachidsp.serialize(s); + DEBUGSAVESTATE(armdsp); + if(cartridge.has_armdsp()) armdsp.serialize(s); + DEBUGSAVESTATE(srtc); + if(cartridge.has_srtc()) srtc.serialize(s); + DEBUGSAVESTATE(sdd1); + if(cartridge.has_sdd1()) sdd1.serialize(s); + DEBUGSAVESTATE(spc7110); + if(cartridge.has_spc7110()) spc7110.serialize(s); + DEBUGSAVESTATE(obc1); + if(cartridge.has_obc1()) obc1.serialize(s); DEBUGSAVESTATE(msu1); if(cartridge.has_msu1()) msu1.serialize(s); } diff --git a/libsnes/bsnes/snes/system/system.cpp b/waterbox/libsnes/bsnes/snes/system/system.cpp similarity index 99% rename from libsnes/bsnes/snes/system/system.cpp rename to waterbox/libsnes/bsnes/snes/system/system.cpp index 746e7808de..edd5c26057 100644 --- a/libsnes/bsnes/snes/system/system.cpp +++ b/waterbox/libsnes/bsnes/snes/system/system.cpp @@ -148,13 +148,13 @@ void System::unload() { if(cartridge.has_obc1()) obc1.unload(); if(cartridge.has_msu1()) msu1.unload(); if(cartridge.has_link()) link.unload(); -} - -void System::power() { - random.seed((unsigned)interface()->randomSeed()); - - region = config.region; - expansion = config.expansion_port; +} + +void System::power() { + random.seed((unsigned)interface()->randomSeed()); + + region = config.region; + expansion = config.expansion_port; if(region.value == Region::Autodetect) { region = (cartridge.region() == Cartridge::Region::NTSC ? Region::NTSC : Region::PAL); } diff --git a/libsnes/bsnes/snes/system/system.hpp b/waterbox/libsnes/bsnes/snes/system/system.hpp similarity index 100% rename from libsnes/bsnes/snes/system/system.hpp rename to waterbox/libsnes/bsnes/snes/system/system.hpp diff --git a/libsnes/bsnes/snes/system/video.cpp b/waterbox/libsnes/bsnes/snes/system/video.cpp similarity index 100% rename from libsnes/bsnes/snes/system/video.cpp rename to waterbox/libsnes/bsnes/snes/system/video.cpp diff --git a/libsnes/bsnes/snes/system/video.hpp b/waterbox/libsnes/bsnes/snes/system/video.hpp similarity index 100% rename from libsnes/bsnes/snes/system/video.hpp rename to waterbox/libsnes/bsnes/snes/system/video.hpp diff --git a/libsnes/bsnes/target-libsnes/libsnes.cpp b/waterbox/libsnes/bsnes/target-libsnes/libsnes.cpp similarity index 99% rename from libsnes/bsnes/target-libsnes/libsnes.cpp rename to waterbox/libsnes/bsnes/target-libsnes/libsnes.cpp index 9e13608d53..cb7602cdec 100644 --- a/libsnes/bsnes/target-libsnes/libsnes.cpp +++ b/waterbox/libsnes/bsnes/target-libsnes/libsnes.cpp @@ -143,15 +143,15 @@ struct Interface : public SNES::Interface { } }; -void pwrap_init(); +void pwrap_init(); Interface *iface = nullptr; namespace SNES { -SNES::Interface *interface() -{ - if(iface != nullptr) return iface; - iface = new ::Interface(); - pwrap_init(); - return iface; +SNES::Interface *interface() +{ + if(iface != nullptr) return iface; + iface = new ::Interface(); + pwrap_init(); + return iface; } } diff --git a/libsnes/bsnes/target-libsnes/libsnes.hpp b/waterbox/libsnes/bsnes/target-libsnes/libsnes.hpp similarity index 100% rename from libsnes/bsnes/target-libsnes/libsnes.hpp rename to waterbox/libsnes/bsnes/target-libsnes/libsnes.hpp diff --git a/libsnes/bsnes/target-libsnes/libsnes_pwrap.cpp b/waterbox/libsnes/bsnes/target-libsnes/libsnes_pwrap.cpp similarity index 96% rename from libsnes/bsnes/target-libsnes/libsnes_pwrap.cpp rename to waterbox/libsnes/bsnes/target-libsnes/libsnes_pwrap.cpp index 302dcde6f5..b9f1a81b64 100644 --- a/libsnes/bsnes/target-libsnes/libsnes_pwrap.cpp +++ b/waterbox/libsnes/bsnes/target-libsnes/libsnes_pwrap.cpp @@ -1,637 +1,637 @@ -//types of messages: -//cmd: frontend->core: "command to core" a command from the frontend which causes emulation to proceed. when sending a command, the frontend should wait for an eMessage_BRK_Complete before proceeding, although a debugger might proceed after any BRK -//query: frontend->core: "query to core" a query from the frontend which can (and should) be satisfied immediately by the core but which does not result in emulation processes (notably, nothing resembling a CMD and nothing which can trigger a BRK) -//sig: core->frontend: "core signal" a synchronous operation called from the emulation process which the frontend should handle immediately without issuing any calls into the core -//brk: core->frontend: "core break" the emulation process has suspended. the frontend is free to do whatever it wishes. - -#include - -#define LIBSNES_IMPORT -#include "snes/snes.hpp" -#include "libsnes.hpp" - -#include - -#include -#include -#include - -#include -#include - -extern SNES::Interface *iface; - -typedef uint8 u8; -typedef uint16 u16; -typedef uint64 u64; -typedef uint32 u32; - -typedef int32 s32; - -typedef void(*Action)(); - -enum eMessage : int32 -{ - eMessage_NotSet, - - eMessage_Resume, - - eMessage_QUERY_FIRST, - eMessage_QUERY_get_memory_size, - eMessage_QUERY_peek, - eMessage_QUERY_poke, - eMessage_QUERY_serialize_size, - eMessage_QUERY_set_color_lut, - eMessage_QUERY_GetMemoryIdName, - eMessage_QUERY_state_hook_exec, - eMessage_QUERY_state_hook_read, - eMessage_QUERY_state_hook_write, - eMessage_QUERY_state_hook_nmi, - eMessage_QUERY_state_hook_irq, - eMessage_QUERY_enable_trace, - eMessage_QUERY_enable_scanline, - eMessage_QUERY_enable_audio, - eMessage_QUERY_set_layer_enable, - eMessage_QUERY_set_backdropColor, - eMessage_QUERY_peek_logical_register, - eMessage_QUERY_peek_cpu_regs, - eMessage_QUERY_set_cdl, - eMessage_QUERY_LAST, - - eMessage_CMD_FIRST, - eMessage_CMD_init, - eMessage_CMD_power, - eMessage_CMD_reset, - eMessage_CMD_run, - eMessage_CMD_serialize, - eMessage_CMD_unserialize, - eMessage_CMD_load_cartridge_normal, - eMessage_CMD_load_cartridge_sgb, - eMessage_CMD_term, - eMessage_CMD_unload_cartridge, - eMessage_CMD_LAST, - - eMessage_SIG_video_refresh, - eMessage_SIG_input_poll, - eMessage_SIG_input_state, - eMessage_SIG_input_notify, - eMessage_SIG_audio_flush, - eMessage_SIG_path_request, - eMessage_SIG_trace_callback, - eMessage_SIG_allocSharedMemory, - eMessage_SIG_freeSharedMemory, - - eMessage_BRK_Complete, - eMessage_BRK_hook_exec, - eMessage_BRK_hook_read, - eMessage_BRK_hook_write, - eMessage_BRK_hook_nmi, - eMessage_BRK_hook_irq, - eMessage_BRK_scanlineStart, -}; - -enum eStatus : int32 -{ - eStatus_Idle, - eStatus_CMD, - eStatus_BRK -}; - - -//watch it! the size of this struct is important! -#ifdef _MSC_VER -#pragma pack(push,1) -#endif -struct CPURegsComm { - u32 pc; - u16 a, x, y, z, s, d, vector; //7x - u8 p, nothing; - u32 aa, rd; - u8 sp, dp, db, mdr; -} -#ifndef _MSC_VER -__attribute__((__packed__)) -#endif -; -#ifdef _MSC_VER -#pragma pack(pop) -#endif - -struct LayerEnablesComm -{ - u8 BG1_Prio0, BG1_Prio1; - u8 BG2_Prio0, BG2_Prio1; - u8 BG3_Prio0, BG3_Prio1; - u8 BG4_Prio0, BG4_Prio1; - u8 Obj_Prio0, Obj_Prio1, Obj_Prio2, Obj_Prio3; -}; - -//TODO: do any of these need to be volatile? -struct CommStruct -{ - //the cmd being executed - eMessage cmd; - - //the status of the core - eStatus status; - - //the SIG or BRK that the core is halted in - eMessage reason; - - //flexible in/out parameters - //these are all "overloaded" a little so it isn't clear what's used for what in for any particular message.. - //but I think it will beat having to have some kind of extremely verbose custom layouts for every message - char* str; - void* ptr; - uint32 id, addr, value, size; - int32 port, device, index, slot; - int32 width, height; - int32 scanline; - SNES::Input::Device inports[2]; - - //always used in pairs - void* buf[3]; - int32 buf_size[3]; - - int64 cdl_ptr[4]; - int32 cdl_size[4]; - - CPURegsComm cpuregs; - LayerEnablesComm layerEnables; - - //static configuration-type information which can be grabbed off the core at any time without even needing a QUERY command - uint32 region; - uint32 mapper; - - //=========================================================== - - //private stuff - void* privbuf[2]; //TODO remember to tidy this.. - - void CopyBuffer(int id, void* ptr, int32 size) - { - if (privbuf[id]) free(privbuf[id]); - buf[id] = privbuf[id] = malloc(size); - memcpy(buf[id], ptr, size); - buf_size[id] = size; - } - - void SetBuffer(int id, void* ptr, int32 size) - { - if (privbuf[id]) free(privbuf[id]); - privbuf[id] = nullptr; - buf[id] = ptr; - buf_size[id] = size; - } - - -} comm; - -//coroutines -cothread_t co_control, co_emu, co_emu_suspended; - -//internal state -bool audio_en = false; -static const int AUDIOBUFFER_SIZE = 44100 * 2; -uint16_t audiobuffer[AUDIOBUFFER_SIZE]; -int audiobuffer_idx = 0; -Action CMD_cb; - -void BREAK(eMessage msg) -{ - comm.status = eStatus_BRK; - comm.reason = msg; - co_emu_suspended = co_active(); - co_switch(co_control); - comm.status = eStatus_CMD; -} - -void snes_video_refresh(const uint32_t *data, unsigned width, unsigned height) -{ - comm.width = width; - comm.height = height; - comm.ptr = (void*)data; - - BREAK(eMessage_SIG_video_refresh); -} - -void do_SIG_audio_flush() -{ - comm.ptr = audiobuffer; - comm.size = audiobuffer_idx; - BREAK(eMessage_SIG_audio_flush); - audiobuffer_idx = 0; -} - -//this is the raw callback from the emulator internals when a new audio sample is available -void snes_audio_sample(uint16_t left, uint16_t right) -{ - if(!audio_en) return; - - //if theres no room in the audio buffer, we need to send a flush signal - if (audiobuffer_idx == AUDIOBUFFER_SIZE) - { - do_SIG_audio_flush(); - } - - audiobuffer[audiobuffer_idx++] = left; - audiobuffer[audiobuffer_idx++] = right; -} - -void snes_input_poll(void) -{ - BREAK(eMessage_SIG_input_poll); -} - -int16_t snes_input_state(unsigned port, unsigned device, unsigned index, unsigned id) -{ - comm.port = port; - comm.device = device; - comm.index = index; - comm.id = id; - BREAK(eMessage_SIG_input_state); - return comm.value; -} -void snes_input_notify(int index) -{ - comm.index = index; - BREAK(eMessage_SIG_input_notify); -} - -void snes_trace(uint32_t which, const char *msg) -{ - comm.value = which; - comm.str = (char*) msg; - BREAK(eMessage_SIG_trace_callback); -} - -const char* snes_path_request(int slot, const char* hint) -{ - comm.slot = slot; - comm.str= (char *)hint; - BREAK(eMessage_SIG_path_request); - return (const char*)comm.buf[0]; -} - -void snes_scanlineStart(int line) -{ - comm.scanline = line; - BREAK(eMessage_BRK_scanlineStart); -} - -void* snes_allocSharedMemory(const char* memtype, size_t amt) -{ - //its important that this happen before the message marshaling because allocation/free attempts can happen before the marshaling is setup (or at shutdown time, in case of errors?) - //if(!running) return NULL; - - comm.str = (char*)memtype; - comm.size = amt; - - BREAK(eMessage_SIG_allocSharedMemory); - - return comm.ptr; -} - -void snes_freeSharedMemory(void* ptr) -{ - //its important that this happen before the message marshaling because allocation/free attempts can happen before the marshaling is setup (or at shutdown time, in case of errors?) - //if(!running) return; - - if (!ptr) return; - - comm.ptr = ptr; - - BREAK(eMessage_SIG_freeSharedMemory); -} - -static void debug_op_exec(uint24 addr) -{ - comm.addr = addr; - BREAK(eMessage_BRK_hook_exec); -} - -static void debug_op_read(uint24 addr) -{ - comm.addr = addr; - BREAK(eMessage_BRK_hook_read); -} - -static void debug_op_write(uint24 addr, uint8 value) -{ - comm.addr = addr; - comm.value = value; - BREAK(eMessage_BRK_hook_write); -} - -static void debug_op_nmi() -{ - BREAK(eMessage_BRK_hook_nmi); -} - -static void debug_op_irq() -{ - BREAK(eMessage_BRK_hook_irq); -} - -void pwrap_init() -{ - //bsnes's interface initialization calls into this after initializing itself, so we can get a chance to mod it for pwrap functionalities - snes_set_video_refresh(snes_video_refresh); - snes_set_audio_sample(snes_audio_sample); - snes_set_input_poll(snes_input_poll); - snes_set_input_state(snes_input_state); - snes_set_input_notify(snes_input_notify); - snes_set_path_request(snes_path_request); - snes_set_allocSharedMemory(snes_allocSharedMemory); - snes_set_freeSharedMemory(snes_freeSharedMemory); -} - -static void Analyze() -{ - //gather some "static" type information, so we dont have to poll annoyingly for it later - comm.mapper = snes_get_mapper(); - comm.region = snes_get_region(); -} - -void CMD_LoadCartridgeNormal() -{ - const char* xml = (const char*)comm.buf[0]; - if(!xml[0]) xml = nullptr; - bool ret = snes_load_cartridge_normal(xml, (const uint8_t*)comm.buf[1], comm.buf_size[1]); - comm.value = ret?1:0; - - if(ret) - Analyze(); -} - -void CMD_LoadCartridgeSGB() -{ - bool ret = snes_load_cartridge_super_game_boy((const char*)comm.buf[0], (const u8*)comm.buf[1], comm.buf_size[1], nullptr, (const u8*)comm.buf[2], comm.buf_size[2]); - comm.value = ret ? 1 : 0; - - if(ret) - Analyze(); -} - -void CMD_init() -{ - snes_init(); - +//types of messages: +//cmd: frontend->core: "command to core" a command from the frontend which causes emulation to proceed. when sending a command, the frontend should wait for an eMessage_BRK_Complete before proceeding, although a debugger might proceed after any BRK +//query: frontend->core: "query to core" a query from the frontend which can (and should) be satisfied immediately by the core but which does not result in emulation processes (notably, nothing resembling a CMD and nothing which can trigger a BRK) +//sig: core->frontend: "core signal" a synchronous operation called from the emulation process which the frontend should handle immediately without issuing any calls into the core +//brk: core->frontend: "core break" the emulation process has suspended. the frontend is free to do whatever it wishes. + +#include + +#define LIBSNES_IMPORT +#include "snes/snes.hpp" +#include "libsnes.hpp" + +#include + +#include +#include +#include + +#include +#include + +extern SNES::Interface *iface; + +typedef uint8 u8; +typedef uint16 u16; +typedef uint64 u64; +typedef uint32 u32; + +typedef int32 s32; + +typedef void(*Action)(); + +enum eMessage : int32 +{ + eMessage_NotSet, + + eMessage_Resume, + + eMessage_QUERY_FIRST, + eMessage_QUERY_get_memory_size, + eMessage_QUERY_peek, + eMessage_QUERY_poke, + eMessage_QUERY_serialize_size, + eMessage_QUERY_set_color_lut, + eMessage_QUERY_GetMemoryIdName, + eMessage_QUERY_state_hook_exec, + eMessage_QUERY_state_hook_read, + eMessage_QUERY_state_hook_write, + eMessage_QUERY_state_hook_nmi, + eMessage_QUERY_state_hook_irq, + eMessage_QUERY_enable_trace, + eMessage_QUERY_enable_scanline, + eMessage_QUERY_enable_audio, + eMessage_QUERY_set_layer_enable, + eMessage_QUERY_set_backdropColor, + eMessage_QUERY_peek_logical_register, + eMessage_QUERY_peek_cpu_regs, + eMessage_QUERY_set_cdl, + eMessage_QUERY_LAST, + + eMessage_CMD_FIRST, + eMessage_CMD_init, + eMessage_CMD_power, + eMessage_CMD_reset, + eMessage_CMD_run, + eMessage_CMD_serialize, + eMessage_CMD_unserialize, + eMessage_CMD_load_cartridge_normal, + eMessage_CMD_load_cartridge_sgb, + eMessage_CMD_term, + eMessage_CMD_unload_cartridge, + eMessage_CMD_LAST, + + eMessage_SIG_video_refresh, + eMessage_SIG_input_poll, + eMessage_SIG_input_state, + eMessage_SIG_input_notify, + eMessage_SIG_audio_flush, + eMessage_SIG_path_request, + eMessage_SIG_trace_callback, + eMessage_SIG_allocSharedMemory, + eMessage_SIG_freeSharedMemory, + + eMessage_BRK_Complete, + eMessage_BRK_hook_exec, + eMessage_BRK_hook_read, + eMessage_BRK_hook_write, + eMessage_BRK_hook_nmi, + eMessage_BRK_hook_irq, + eMessage_BRK_scanlineStart, +}; + +enum eStatus : int32 +{ + eStatus_Idle, + eStatus_CMD, + eStatus_BRK +}; + + +//watch it! the size of this struct is important! +#ifdef _MSC_VER +#pragma pack(push,1) +#endif +struct CPURegsComm { + u32 pc; + u16 a, x, y, z, s, d, vector; //7x + u8 p, nothing; + u32 aa, rd; + u8 sp, dp, db, mdr; +} +#ifndef _MSC_VER +__attribute__((__packed__)) +#endif +; +#ifdef _MSC_VER +#pragma pack(pop) +#endif + +struct LayerEnablesComm +{ + u8 BG1_Prio0, BG1_Prio1; + u8 BG2_Prio0, BG2_Prio1; + u8 BG3_Prio0, BG3_Prio1; + u8 BG4_Prio0, BG4_Prio1; + u8 Obj_Prio0, Obj_Prio1, Obj_Prio2, Obj_Prio3; +}; + +//TODO: do any of these need to be volatile? +struct CommStruct +{ + //the cmd being executed + eMessage cmd; + + //the status of the core + eStatus status; + + //the SIG or BRK that the core is halted in + eMessage reason; + + //flexible in/out parameters + //these are all "overloaded" a little so it isn't clear what's used for what in for any particular message.. + //but I think it will beat having to have some kind of extremely verbose custom layouts for every message + char* str; + void* ptr; + uint32 id, addr, value, size; + int32 port, device, index, slot; + int32 width, height; + int32 scanline; + SNES::Input::Device inports[2]; + + //always used in pairs + void* buf[3]; + int32 buf_size[3]; + + int64 cdl_ptr[4]; + int32 cdl_size[4]; + + CPURegsComm cpuregs; + LayerEnablesComm layerEnables; + + //static configuration-type information which can be grabbed off the core at any time without even needing a QUERY command + uint32 region; + uint32 mapper; + + //=========================================================== + + //private stuff + void* privbuf[2]; //TODO remember to tidy this.. + + void CopyBuffer(int id, void* ptr, int32 size) + { + if (privbuf[id]) free(privbuf[id]); + buf[id] = privbuf[id] = malloc(size); + memcpy(buf[id], ptr, size); + buf_size[id] = size; + } + + void SetBuffer(int id, void* ptr, int32 size) + { + if (privbuf[id]) free(privbuf[id]); + privbuf[id] = nullptr; + buf[id] = ptr; + buf_size[id] = size; + } + + +} comm; + +//coroutines +cothread_t co_control, co_emu, co_emu_suspended; + +//internal state +bool audio_en = false; +static const int AUDIOBUFFER_SIZE = 44100 * 2; +uint16_t audiobuffer[AUDIOBUFFER_SIZE]; +int audiobuffer_idx = 0; +Action CMD_cb; + +void BREAK(eMessage msg) +{ + comm.status = eStatus_BRK; + comm.reason = msg; + co_emu_suspended = co_active(); + co_switch(co_control); + comm.status = eStatus_CMD; +} + +void snes_video_refresh(const uint32_t *data, unsigned width, unsigned height) +{ + comm.width = width; + comm.height = height; + comm.ptr = (void*)data; + + BREAK(eMessage_SIG_video_refresh); +} + +void do_SIG_audio_flush() +{ + comm.ptr = audiobuffer; + comm.size = audiobuffer_idx; + BREAK(eMessage_SIG_audio_flush); + audiobuffer_idx = 0; +} + +//this is the raw callback from the emulator internals when a new audio sample is available +void snes_audio_sample(uint16_t left, uint16_t right) +{ + if(!audio_en) return; + + //if theres no room in the audio buffer, we need to send a flush signal + if (audiobuffer_idx == AUDIOBUFFER_SIZE) + { + do_SIG_audio_flush(); + } + + audiobuffer[audiobuffer_idx++] = left; + audiobuffer[audiobuffer_idx++] = right; +} + +void snes_input_poll(void) +{ + BREAK(eMessage_SIG_input_poll); +} + +int16_t snes_input_state(unsigned port, unsigned device, unsigned index, unsigned id) +{ + comm.port = port; + comm.device = device; + comm.index = index; + comm.id = id; + BREAK(eMessage_SIG_input_state); + return comm.value; +} +void snes_input_notify(int index) +{ + comm.index = index; + BREAK(eMessage_SIG_input_notify); +} + +void snes_trace(uint32_t which, const char *msg) +{ + comm.value = which; + comm.str = (char*) msg; + BREAK(eMessage_SIG_trace_callback); +} + +const char* snes_path_request(int slot, const char* hint) +{ + comm.slot = slot; + comm.str= (char *)hint; + BREAK(eMessage_SIG_path_request); + return (const char*)comm.buf[0]; +} + +void snes_scanlineStart(int line) +{ + comm.scanline = line; + BREAK(eMessage_BRK_scanlineStart); +} + +void* snes_allocSharedMemory(const char* memtype, size_t amt) +{ + //its important that this happen before the message marshaling because allocation/free attempts can happen before the marshaling is setup (or at shutdown time, in case of errors?) + //if(!running) return NULL; + + comm.str = (char*)memtype; + comm.size = amt; + + BREAK(eMessage_SIG_allocSharedMemory); + + return comm.ptr; +} + +void snes_freeSharedMemory(void* ptr) +{ + //its important that this happen before the message marshaling because allocation/free attempts can happen before the marshaling is setup (or at shutdown time, in case of errors?) + //if(!running) return; + + if (!ptr) return; + + comm.ptr = ptr; + + BREAK(eMessage_SIG_freeSharedMemory); +} + +static void debug_op_exec(uint24 addr) +{ + comm.addr = addr; + BREAK(eMessage_BRK_hook_exec); +} + +static void debug_op_read(uint24 addr) +{ + comm.addr = addr; + BREAK(eMessage_BRK_hook_read); +} + +static void debug_op_write(uint24 addr, uint8 value) +{ + comm.addr = addr; + comm.value = value; + BREAK(eMessage_BRK_hook_write); +} + +static void debug_op_nmi() +{ + BREAK(eMessage_BRK_hook_nmi); +} + +static void debug_op_irq() +{ + BREAK(eMessage_BRK_hook_irq); +} + +void pwrap_init() +{ + //bsnes's interface initialization calls into this after initializing itself, so we can get a chance to mod it for pwrap functionalities + snes_set_video_refresh(snes_video_refresh); + snes_set_audio_sample(snes_audio_sample); + snes_set_input_poll(snes_input_poll); + snes_set_input_state(snes_input_state); + snes_set_input_notify(snes_input_notify); + snes_set_path_request(snes_path_request); + snes_set_allocSharedMemory(snes_allocSharedMemory); + snes_set_freeSharedMemory(snes_freeSharedMemory); +} + +static void Analyze() +{ + //gather some "static" type information, so we dont have to poll annoyingly for it later + comm.mapper = snes_get_mapper(); + comm.region = snes_get_region(); +} + +void CMD_LoadCartridgeNormal() +{ + const char* xml = (const char*)comm.buf[0]; + if(!xml[0]) xml = nullptr; + bool ret = snes_load_cartridge_normal(xml, (const uint8_t*)comm.buf[1], comm.buf_size[1]); + comm.value = ret?1:0; + + if(ret) + Analyze(); +} + +void CMD_LoadCartridgeSGB() +{ + bool ret = snes_load_cartridge_super_game_boy((const char*)comm.buf[0], (const u8*)comm.buf[1], comm.buf_size[1], nullptr, (const u8*)comm.buf[2], comm.buf_size[2]); + comm.value = ret ? 1 : 0; + + if(ret) + Analyze(); +} + +void CMD_init() +{ + snes_init(); + SNES::input.connect(SNES::Controller::Port1, comm.inports[0]); - SNES::input.connect(SNES::Controller::Port2, comm.inports[1]); -} - -void CMD_Serialize() -{ - int size = comm.buf_size[0]; - char* buf = (char*)comm.buf[0]; - bool ret = snes_serialize((uint8_t*)buf,size); - comm.value = ret ? 1 : 0; -} - -void CMD_Unserialize() -{ - int size = comm.buf_size[0]; - char* buf = (char*)comm.buf[0]; - bool ret = snes_unserialize((uint8_t*)buf ,size); - comm.value = ret ? 1 : 0; -} - -static void CMD_Run() -{ - do_SIG_audio_flush(); - - //we could avoid this if we saved the current thread before jumping back to co_control, instead of always jumping back to co_emu - //in effect, we're scrambling the scheduler - //EDIT - well, we changed that, but.. we still want this probably, for debugging and stuff - for (;;) - { - SNES::scheduler.sync = SNES::Scheduler::SynchronizeMode::None; - SNES::scheduler.clearExitReason(); - SNES::scheduler.enter(); - if (SNES::scheduler.exit_reason() == SNES::Scheduler::ExitReason::FrameEvent) - { - SNES::video.update(); - break; - } - //not used yet - if (SNES::scheduler.exit_reason() == SNES::Scheduler::ExitReason::DebuggerEvent) - break; - } - - do_SIG_audio_flush(); -} - -void QUERY_get_memory_size() { - comm.value = snes_get_memory_size(comm.value); -} -void QUERY_peek() { - if (comm.id == SNES_MEMORY_SYSBUS) - comm.value = bus_read(comm.addr); - else comm.value = snes_get_memory_data(comm.id)[comm.addr]; -} -void QUERY_poke() { - if (comm.id == SNES_MEMORY_SYSBUS) - bus_write(comm.addr, comm.value); - else snes_get_memory_data(comm.id)[comm.addr] = comm.value; -} -void QUERY_set_color_lut() { - snes_set_color_lut((uint32_t*)comm.ptr); -} -void QUERY_GetMemoryIdName() { - comm.str = (char* )snes_get_memory_id_name(comm.id); -} -void QUERY_state_hook_exec() { - SNES::cpu.debugger.op_exec = comm.value ? debug_op_exec : hook(); -} -void QUERY_state_hook_read() { - SNES::cpu.debugger.op_read = comm.value ? debug_op_read : hook(); -} -void QUERY_state_hook_write() { - SNES::cpu.debugger.op_write = comm.value ? debug_op_write : hook(); -} -void QUERY_state_hook_nmi() { - SNES::cpu.debugger.op_nmi = comm.value ? debug_op_nmi : hook(); -} -void QUERY_state_hook_irq() { - SNES::cpu.debugger.op_irq = comm.value ? debug_op_irq : hook(); -} -void QUERY_state_enable_trace() { - snes_set_trace_callback(comm.value, snes_trace); -} -void QUERY_state_enable_scanline() { - if (comm.value) - snes_set_scanlineStart(snes_scanlineStart); - else snes_set_scanlineStart(nullptr); -} -void QUERY_state_enable_audio() { - audio_en = !!comm.value; -} -void QUERY_state_set_layer_enable() { - snes_set_layer_enable(0, 0, !!comm.layerEnables.BG1_Prio0); - snes_set_layer_enable(0, 1, !!comm.layerEnables.BG1_Prio1); - snes_set_layer_enable(1, 0, !!comm.layerEnables.BG2_Prio0); - snes_set_layer_enable(1, 1, !!comm.layerEnables.BG2_Prio1); - snes_set_layer_enable(2, 0, !!comm.layerEnables.BG3_Prio0); - snes_set_layer_enable(2, 1, !!comm.layerEnables.BG3_Prio1); - snes_set_layer_enable(3, 0, !!comm.layerEnables.BG4_Prio0); - snes_set_layer_enable(3, 1, !!comm.layerEnables.BG4_Prio1); - snes_set_layer_enable(4, 0, !!comm.layerEnables.Obj_Prio0); - snes_set_layer_enable(4, 1, !!comm.layerEnables.Obj_Prio1); - snes_set_layer_enable(4, 2, !!comm.layerEnables.Obj_Prio2); - snes_set_layer_enable(4, 3, !!comm.layerEnables.Obj_Prio3); -} -void QUERY_set_backdropColor() { - snes_set_backdropColor((s32)comm.value); -} -void QUERY_peek_logical_register() { - comm.value = snes_peek_logical_register(comm.id); -} -void QUERY_peek_cpu_regs() { - comm.cpuregs.pc = (u32)SNES::cpu.regs.pc; - comm.cpuregs.a = SNES::cpu.regs.a; - comm.cpuregs.x = SNES::cpu.regs.x; - comm.cpuregs.y = SNES::cpu.regs.y; - comm.cpuregs.z = SNES::cpu.regs.z; - comm.cpuregs.s = SNES::cpu.regs.s; - comm.cpuregs.d = SNES::cpu.regs.d; - comm.cpuregs.aa = (u32)SNES::cpu.aa; - comm.cpuregs.rd = (u32)SNES::cpu.rd; - comm.cpuregs.sp = SNES::cpu.sp; - comm.cpuregs.dp = SNES::cpu.dp; - comm.cpuregs.db = SNES::cpu.regs.db; - comm.cpuregs.mdr = SNES::cpu.regs.mdr; - comm.cpuregs.vector = SNES::cpu.regs.vector; - comm.cpuregs.p = SNES::cpu.regs.p; - comm.cpuregs.nothing = 0; -} -void QUERY_peek_set_cdl() { - for (int i = 0; i= eMessage_CMD_FIRST && msg <= eMessage_CMD_LAST) - { - //CMD is only valid if status is idle - if (comm.status != eStatus_Idle) - { - printf("ERROR: cmd during non-idle\n"); - return; - } - - comm.status = eStatus_CMD; - comm.cmd = msg; - - CMD_cb = kHandlers_CMD[msg - eMessage_CMD_FIRST - 1]; - co_switch(co_emu); - - //we could be in ANY STATE when we return from here - } - - //QUERY can run any time - //but... some of them might not be safe for re-entrancy. - //later, we should have metadata for messages that indicates that - if (msg >= eMessage_QUERY_FIRST && msg <= eMessage_QUERY_LAST) - { - Action cb = kHandlers_QUERY[msg - eMessage_QUERY_FIRST - 1]; - if (cb) cb(); - } -} - - -//receives the given buffer and COPIES it. use this for returning values from SIGs -extern "C" dllexport void __cdecl CopyBuffer(int id, void* ptr, int32 size) -{ - comm.CopyBuffer(id, ptr, size); -} - -//receives the given buffer and STASHES IT. use this (carefully) for sending params for CMDs -extern "C" dllexport void __cdecl SetBuffer(int id, void* ptr, int32 size) -{ - comm.SetBuffer(id, ptr, size); + SNES::input.connect(SNES::Controller::Port2, comm.inports[1]); +} + +void CMD_Serialize() +{ + int size = comm.buf_size[0]; + char* buf = (char*)comm.buf[0]; + bool ret = snes_serialize((uint8_t*)buf,size); + comm.value = ret ? 1 : 0; +} + +void CMD_Unserialize() +{ + int size = comm.buf_size[0]; + char* buf = (char*)comm.buf[0]; + bool ret = snes_unserialize((uint8_t*)buf ,size); + comm.value = ret ? 1 : 0; +} + +static void CMD_Run() +{ + do_SIG_audio_flush(); + + //we could avoid this if we saved the current thread before jumping back to co_control, instead of always jumping back to co_emu + //in effect, we're scrambling the scheduler + //EDIT - well, we changed that, but.. we still want this probably, for debugging and stuff + for (;;) + { + SNES::scheduler.sync = SNES::Scheduler::SynchronizeMode::None; + SNES::scheduler.clearExitReason(); + SNES::scheduler.enter(); + if (SNES::scheduler.exit_reason() == SNES::Scheduler::ExitReason::FrameEvent) + { + SNES::video.update(); + break; + } + //not used yet + if (SNES::scheduler.exit_reason() == SNES::Scheduler::ExitReason::DebuggerEvent) + break; + } + + do_SIG_audio_flush(); +} + +void QUERY_get_memory_size() { + comm.value = snes_get_memory_size(comm.value); +} +void QUERY_peek() { + if (comm.id == SNES_MEMORY_SYSBUS) + comm.value = bus_read(comm.addr); + else comm.value = snes_get_memory_data(comm.id)[comm.addr]; +} +void QUERY_poke() { + if (comm.id == SNES_MEMORY_SYSBUS) + bus_write(comm.addr, comm.value); + else snes_get_memory_data(comm.id)[comm.addr] = comm.value; +} +void QUERY_set_color_lut() { + snes_set_color_lut((uint32_t*)comm.ptr); +} +void QUERY_GetMemoryIdName() { + comm.str = (char* )snes_get_memory_id_name(comm.id); +} +void QUERY_state_hook_exec() { + SNES::cpu.debugger.op_exec = comm.value ? debug_op_exec : hook(); +} +void QUERY_state_hook_read() { + SNES::cpu.debugger.op_read = comm.value ? debug_op_read : hook(); +} +void QUERY_state_hook_write() { + SNES::cpu.debugger.op_write = comm.value ? debug_op_write : hook(); +} +void QUERY_state_hook_nmi() { + SNES::cpu.debugger.op_nmi = comm.value ? debug_op_nmi : hook(); +} +void QUERY_state_hook_irq() { + SNES::cpu.debugger.op_irq = comm.value ? debug_op_irq : hook(); +} +void QUERY_state_enable_trace() { + snes_set_trace_callback(comm.value, snes_trace); +} +void QUERY_state_enable_scanline() { + if (comm.value) + snes_set_scanlineStart(snes_scanlineStart); + else snes_set_scanlineStart(nullptr); +} +void QUERY_state_enable_audio() { + audio_en = !!comm.value; +} +void QUERY_state_set_layer_enable() { + snes_set_layer_enable(0, 0, !!comm.layerEnables.BG1_Prio0); + snes_set_layer_enable(0, 1, !!comm.layerEnables.BG1_Prio1); + snes_set_layer_enable(1, 0, !!comm.layerEnables.BG2_Prio0); + snes_set_layer_enable(1, 1, !!comm.layerEnables.BG2_Prio1); + snes_set_layer_enable(2, 0, !!comm.layerEnables.BG3_Prio0); + snes_set_layer_enable(2, 1, !!comm.layerEnables.BG3_Prio1); + snes_set_layer_enable(3, 0, !!comm.layerEnables.BG4_Prio0); + snes_set_layer_enable(3, 1, !!comm.layerEnables.BG4_Prio1); + snes_set_layer_enable(4, 0, !!comm.layerEnables.Obj_Prio0); + snes_set_layer_enable(4, 1, !!comm.layerEnables.Obj_Prio1); + snes_set_layer_enable(4, 2, !!comm.layerEnables.Obj_Prio2); + snes_set_layer_enable(4, 3, !!comm.layerEnables.Obj_Prio3); +} +void QUERY_set_backdropColor() { + snes_set_backdropColor((s32)comm.value); +} +void QUERY_peek_logical_register() { + comm.value = snes_peek_logical_register(comm.id); +} +void QUERY_peek_cpu_regs() { + comm.cpuregs.pc = (u32)SNES::cpu.regs.pc; + comm.cpuregs.a = SNES::cpu.regs.a; + comm.cpuregs.x = SNES::cpu.regs.x; + comm.cpuregs.y = SNES::cpu.regs.y; + comm.cpuregs.z = SNES::cpu.regs.z; + comm.cpuregs.s = SNES::cpu.regs.s; + comm.cpuregs.d = SNES::cpu.regs.d; + comm.cpuregs.aa = (u32)SNES::cpu.aa; + comm.cpuregs.rd = (u32)SNES::cpu.rd; + comm.cpuregs.sp = SNES::cpu.sp; + comm.cpuregs.dp = SNES::cpu.dp; + comm.cpuregs.db = SNES::cpu.regs.db; + comm.cpuregs.mdr = SNES::cpu.regs.mdr; + comm.cpuregs.vector = SNES::cpu.regs.vector; + comm.cpuregs.p = SNES::cpu.regs.p; + comm.cpuregs.nothing = 0; +} +void QUERY_peek_set_cdl() { + for (int i = 0; i= eMessage_CMD_FIRST && msg <= eMessage_CMD_LAST) + { + //CMD is only valid if status is idle + if (comm.status != eStatus_Idle) + { + printf("ERROR: cmd during non-idle\n"); + return; + } + + comm.status = eStatus_CMD; + comm.cmd = msg; + + CMD_cb = kHandlers_CMD[msg - eMessage_CMD_FIRST - 1]; + co_switch(co_emu); + + //we could be in ANY STATE when we return from here + } + + //QUERY can run any time + //but... some of them might not be safe for re-entrancy. + //later, we should have metadata for messages that indicates that + if (msg >= eMessage_QUERY_FIRST && msg <= eMessage_QUERY_LAST) + { + Action cb = kHandlers_QUERY[msg - eMessage_QUERY_FIRST - 1]; + if (cb) cb(); + } +} + + +//receives the given buffer and COPIES it. use this for returning values from SIGs +extern "C" dllexport void __cdecl CopyBuffer(int id, void* ptr, int32 size) +{ + comm.CopyBuffer(id, ptr, size); +} + +//receives the given buffer and STASHES IT. use this (carefully) for sending params for CMDs +extern "C" dllexport void __cdecl SetBuffer(int id, void* ptr, int32 size) +{ + comm.SetBuffer(id, ptr, size); } \ No newline at end of file diff --git a/libsnes/libco_debugging/build.sh b/waterbox/libsnes/libco_debugging/build.sh similarity index 94% rename from libsnes/libco_debugging/build.sh rename to waterbox/libsnes/libco_debugging/build.sh index a499104d22..27160d209a 100644 --- a/libsnes/libco_debugging/build.sh +++ b/waterbox/libsnes/libco_debugging/build.sh @@ -1,2 +1,2 @@ -gcc libco_win32threads.c -o libco.dll -Wall -shared -O0 -g +gcc libco_win32threads.c -o libco.dll -Wall -shared -O0 -g mv libco.dll ../../BizHawk.MultiClient/output/dll/libco_msvc_win32.dll \ No newline at end of file diff --git a/libsnes/libco_debugging/libco.h b/waterbox/libsnes/libco_debugging/libco.h similarity index 100% rename from libsnes/libco_debugging/libco.h rename to waterbox/libsnes/libco_debugging/libco.h diff --git a/libsnes/libco_debugging/libco_win32threads.c b/waterbox/libsnes/libco_debugging/libco_win32threads.c similarity index 97% rename from libsnes/libco_debugging/libco_win32threads.c rename to waterbox/libsnes/libco_debugging/libco_win32threads.c index 4739947e22..f33bb7b4bb 100644 --- a/libsnes/libco_debugging/libco_win32threads.c +++ b/waterbox/libsnes/libco_debugging/libco_win32threads.c @@ -1,138 +1,138 @@ -/* -win32 implementation of libco using actual threads. much slower than other implementations, -but far from glacial. may be useful for debuggers that don't understand libco cothreads. - -compiles in mingw. try: -gcc libco_win32threads.c -o libco.dll -Wall -shared -O0 -g -*/ - -#include -#include // asserts don't happen in co_switch(), so no real performance gain from turning them off -#define LIBCO_C -#include "libco.h" -#define WIN32_LEAN_AND_MEAN -#include - -typedef struct -{ - HANDLE thread; - HANDLE sem; - int wantdie; - void (*entrypoint)(void); -} coprivate; - -static __thread coprivate *libco_priv = NULL; - - -/* -Return handle to current cothread. Always returns a valid handle, even when called from the main program thread. -*/ -cothread_t co_active(void) -{ - if (!libco_priv) - { - // thread started out as a real thread, so we must make a libco_priv for it - libco_priv = malloc(sizeof (*libco_priv)); - assert(libco_priv); - DWORD ret = DuplicateHandle - ( - GetCurrentProcess(), - GetCurrentThread(), - GetCurrentProcess(), - &libco_priv->thread, - 0, - FALSE, - DUPLICATE_SAME_ACCESS - ); - assert(ret); - libco_priv->sem = CreateSemaphore(NULL, 0, 1, NULL); - assert(libco_priv->sem); - libco_priv->wantdie = 0; - libco_priv->entrypoint = NULL; - } - return (cothread_t) libco_priv; -} - -void waittorun(void) -{ - // i suppose it would be possible to switch off the main thread - // without ever having made a context for it. then it would never - // be able to activate again. - coprivate *this = (coprivate *) co_active(); - WaitForSingleObject(this->sem, INFINITE); - if (this->wantdie) - { - CloseHandle(this->sem); - ExitThread(0); - } -} - -DWORD WINAPI thread_entry(LPVOID lpParameter) -{ - libco_priv = (coprivate *) lpParameter; - waittorun(); - libco_priv->entrypoint(); - assert(0); // returning from entry point not allowed - return 0; -} - -/* -Create new cothread. -Heapsize is the amount of memory allocated for the cothread stack, specified in bytes. This is unfortunately impossible to make fully portable. It is recommended to specify sizes using `n * sizeof(void*)'. It is better to err on the side of caution and allocate more memory than will be needed to ensure compatibility with other platforms, within reason. A typical heapsize for a 32-bit architecture is ~1MB. -When the new cothread is first called, program execution jumps to coentry. This function does not take any arguments, due to portability issues with passing function arguments. However, arguments can be simulated by the use of global variables, which can be set before the first call to each cothread. -coentry() must not return, and should end with an appropriate co_switch() statement. Behavior is undefined if entry point returns normally. -Library is responsible for allocating cothread stack memory, to free the user from needing to allocate special memory capable of being used as program stack memory on platforms where this is required. -User is always responsible for deleting cothreads with co_delete(). -Return value of null (0) indicates cothread creation failed. -*/ -cothread_t co_create(unsigned int heapsize, void (*entry)(void)) -{ - coprivate *new_thread = malloc(sizeof (*new_thread)); - assert(new_thread); - new_thread->sem = CreateSemaphore(NULL, 0, 1, NULL); - assert(new_thread->sem); - new_thread->wantdie = 0; - new_thread->entrypoint = entry; - assert(new_thread->entrypoint); - new_thread->thread = CreateThread - ( - NULL, - heapsize, - thread_entry, - (void *)new_thread, - 0, // runs immediately - NULL - ); - assert(new_thread->thread); - return (cothread_t) new_thread; -} - -/* -Delete specified cothread. -Null (0) or invalid cothread handle is not allowed. -Passing handle of active cothread to this function is not allowed. -Passing handle of primary cothread is not allowed. -*/ -void co_delete(cothread_t _thread) -{ - coprivate *thread = (coprivate *) _thread; - assert(thread); - assert(thread->entrypoint); // Passing handle of primary cothread is not allowed - thread->wantdie = 1; - ReleaseSemaphore(thread->sem, 1, NULL); - WaitForSingleObject(thread->thread, INFINITE); - CloseHandle(thread->thread); - free(thread); -} - -/* -Switch to specified cothread. -Null (0) or invalid cothread handle is not allowed. -Passing handle of active cothread to this function is not allowed. -*/ -void co_switch(cothread_t _thread) -{ - coprivate *thread = (coprivate *) _thread; - ReleaseSemaphore(thread->sem, 1, NULL); - waittorun(); -} +/* +win32 implementation of libco using actual threads. much slower than other implementations, +but far from glacial. may be useful for debuggers that don't understand libco cothreads. + +compiles in mingw. try: +gcc libco_win32threads.c -o libco.dll -Wall -shared -O0 -g +*/ + +#include +#include // asserts don't happen in co_switch(), so no real performance gain from turning them off +#define LIBCO_C +#include "libco.h" +#define WIN32_LEAN_AND_MEAN +#include + +typedef struct +{ + HANDLE thread; + HANDLE sem; + int wantdie; + void (*entrypoint)(void); +} coprivate; + +static __thread coprivate *libco_priv = NULL; + + +/* +Return handle to current cothread. Always returns a valid handle, even when called from the main program thread. +*/ +cothread_t co_active(void) +{ + if (!libco_priv) + { + // thread started out as a real thread, so we must make a libco_priv for it + libco_priv = malloc(sizeof (*libco_priv)); + assert(libco_priv); + DWORD ret = DuplicateHandle + ( + GetCurrentProcess(), + GetCurrentThread(), + GetCurrentProcess(), + &libco_priv->thread, + 0, + FALSE, + DUPLICATE_SAME_ACCESS + ); + assert(ret); + libco_priv->sem = CreateSemaphore(NULL, 0, 1, NULL); + assert(libco_priv->sem); + libco_priv->wantdie = 0; + libco_priv->entrypoint = NULL; + } + return (cothread_t) libco_priv; +} + +void waittorun(void) +{ + // i suppose it would be possible to switch off the main thread + // without ever having made a context for it. then it would never + // be able to activate again. + coprivate *this = (coprivate *) co_active(); + WaitForSingleObject(this->sem, INFINITE); + if (this->wantdie) + { + CloseHandle(this->sem); + ExitThread(0); + } +} + +DWORD WINAPI thread_entry(LPVOID lpParameter) +{ + libco_priv = (coprivate *) lpParameter; + waittorun(); + libco_priv->entrypoint(); + assert(0); // returning from entry point not allowed + return 0; +} + +/* +Create new cothread. +Heapsize is the amount of memory allocated for the cothread stack, specified in bytes. This is unfortunately impossible to make fully portable. It is recommended to specify sizes using `n * sizeof(void*)'. It is better to err on the side of caution and allocate more memory than will be needed to ensure compatibility with other platforms, within reason. A typical heapsize for a 32-bit architecture is ~1MB. +When the new cothread is first called, program execution jumps to coentry. This function does not take any arguments, due to portability issues with passing function arguments. However, arguments can be simulated by the use of global variables, which can be set before the first call to each cothread. +coentry() must not return, and should end with an appropriate co_switch() statement. Behavior is undefined if entry point returns normally. +Library is responsible for allocating cothread stack memory, to free the user from needing to allocate special memory capable of being used as program stack memory on platforms where this is required. +User is always responsible for deleting cothreads with co_delete(). +Return value of null (0) indicates cothread creation failed. +*/ +cothread_t co_create(unsigned int heapsize, void (*entry)(void)) +{ + coprivate *new_thread = malloc(sizeof (*new_thread)); + assert(new_thread); + new_thread->sem = CreateSemaphore(NULL, 0, 1, NULL); + assert(new_thread->sem); + new_thread->wantdie = 0; + new_thread->entrypoint = entry; + assert(new_thread->entrypoint); + new_thread->thread = CreateThread + ( + NULL, + heapsize, + thread_entry, + (void *)new_thread, + 0, // runs immediately + NULL + ); + assert(new_thread->thread); + return (cothread_t) new_thread; +} + +/* +Delete specified cothread. +Null (0) or invalid cothread handle is not allowed. +Passing handle of active cothread to this function is not allowed. +Passing handle of primary cothread is not allowed. +*/ +void co_delete(cothread_t _thread) +{ + coprivate *thread = (coprivate *) _thread; + assert(thread); + assert(thread->entrypoint); // Passing handle of primary cothread is not allowed + thread->wantdie = 1; + ReleaseSemaphore(thread->sem, 1, NULL); + WaitForSingleObject(thread->thread, INFINITE); + CloseHandle(thread->thread); + free(thread); +} + +/* +Switch to specified cothread. +Null (0) or invalid cothread handle is not allowed. +Passing handle of active cothread to this function is not allowed. +*/ +void co_switch(cothread_t _thread) +{ + coprivate *thread = (coprivate *) _thread; + ReleaseSemaphore(thread->sem, 1, NULL); + waittorun(); +} diff --git a/libsnes/libco_debugging/makefile b/waterbox/libsnes/libco_debugging/makefile similarity index 97% rename from libsnes/libco_debugging/makefile rename to waterbox/libsnes/libco_debugging/makefile index d318edaba2..72bb5bd15e 100644 --- a/libsnes/libco_debugging/makefile +++ b/waterbox/libsnes/libco_debugging/makefile @@ -1,2 +1,2 @@ -libco.dll: libco_win32threads.c - gcc libco_win32threads.c -o libco.dll -Wall -shared -O0 -g +libco.dll: libco_win32threads.c + gcc libco_win32threads.c -o libco.dll -Wall -shared -O0 -g diff --git a/libsnes/lsnes_patches/0001-Don-t-use-time-in-emulating-chips.patch b/waterbox/libsnes/lsnes_patches/0001-Don-t-use-time-in-emulating-chips.patch similarity index 97% rename from libsnes/lsnes_patches/0001-Don-t-use-time-in-emulating-chips.patch rename to waterbox/libsnes/lsnes_patches/0001-Don-t-use-time-in-emulating-chips.patch index a2963ab7c4..7df8070176 100644 --- a/libsnes/lsnes_patches/0001-Don-t-use-time-in-emulating-chips.patch +++ b/waterbox/libsnes/lsnes_patches/0001-Don-t-use-time-in-emulating-chips.patch @@ -1,84 +1,84 @@ -From 22205d4d339cfa11f6d53e644eae1c859a56d349 Mon Sep 17 00:00:00 2001 -From: Ilari Liusvaara -Date: Wed, 9 Nov 2011 00:37:44 +0200 -Subject: [PATCH 1/4] Don't use time() in emulating chips - -Instead of using time() in chip emulation, create new interface method -currentTime(), defaulting to time(0). This way frontend can cleanly -override the current time bsnes is using. ---- - snes/chip/bsx/satellaview/satellaview.cpp | 2 +- - snes/chip/spc7110/spc7110.cpp | 2 +- - snes/chip/srtc/srtc.cpp | 2 +- - snes/interface/interface.cpp | 5 +++++ - snes/interface/interface.hpp | 1 + - 5 files changed, 9 insertions(+), 3 deletions(-) - -diff --git a/snes/chip/bsx/satellaview/satellaview.cpp b/snes/chip/bsx/satellaview/satellaview.cpp -index 386fb62..3c98019 100755 ---- snes/chip/bsx/satellaview/satellaview.cpp -+++ snes/chip/bsx/satellaview/satellaview.cpp -@@ -38,7 +38,7 @@ uint8 BSXSatellaview::mmio_read(unsigned addr) { - - if(counter == 0) { - time_t rawtime; -- time(&rawtime); -+ rawtime = SNES::interface->currentTime(); - tm *t = localtime(&rawtime); - - regs.r2192_hour = t->tm_hour; -diff --git a/snes/chip/spc7110/spc7110.cpp b/snes/chip/spc7110/spc7110.cpp -index 27b8b77..061aa5e 100755 ---- snes/chip/spc7110/spc7110.cpp -+++ snes/chip/spc7110/spc7110.cpp -@@ -101,7 +101,7 @@ void SPC7110::set_data_adjust(unsigned addr) { r4814 = addr; r4815 = addr >> 8; - - void SPC7110::update_time(int offset) { - time_t rtc_time = (rtc[16] << 0) | (rtc[17] << 8) | (rtc[18] << 16) | (rtc[19] << 24); -- time_t current_time = time(0) - offset; -+ time_t current_time = SNES::interface->currentTime() - offset; - - //sizeof(time_t) is platform-dependent; though rtc[] needs to be platform-agnostic. - //yet platforms with 32-bit signed time_t will overflow every ~68 years. handle this by -diff --git a/snes/chip/srtc/srtc.cpp b/snes/chip/srtc/srtc.cpp -index 0044113..725e891 100755 ---- snes/chip/srtc/srtc.cpp -+++ snes/chip/srtc/srtc.cpp -@@ -31,7 +31,7 @@ void SRTC::reset() { - - void SRTC::update_time() { - time_t rtc_time = (rtc[16] << 0) | (rtc[17] << 8) | (rtc[18] << 16) | (rtc[19] << 24); -- time_t current_time = time(0); -+ time_t current_time = SNES::interface->currentTime(); - - //sizeof(time_t) is platform-dependent; though rtc[] needs to be platform-agnostic. - //yet platforms with 32-bit signed time_t will overflow every ~68 years. handle this by -diff --git a/snes/interface/interface.cpp b/snes/interface/interface.cpp -index a0e3a81..b3017c9 100755 ---- snes/interface/interface.cpp -+++ snes/interface/interface.cpp -@@ -18,4 +18,9 @@ void Interface::message(const string &text) { - print(text, "\n"); - } - -+time_t Interface::currentTime() -+{ -+ return time(0); -+} -+ - } -diff --git a/snes/interface/interface.hpp b/snes/interface/interface.hpp -index f1a48c0..df975e8 100755 ---- snes/interface/interface.hpp -+++ snes/interface/interface.hpp -@@ -5,6 +5,7 @@ struct Interface { - - virtual string path(Cartridge::Slot slot, const string &hint) = 0; - virtual void message(const string &text); -+ virtual time_t currentTime(); - }; - - extern Interface *interface; --- -1.7.9.48.g85da4d - +From 22205d4d339cfa11f6d53e644eae1c859a56d349 Mon Sep 17 00:00:00 2001 +From: Ilari Liusvaara +Date: Wed, 9 Nov 2011 00:37:44 +0200 +Subject: [PATCH 1/4] Don't use time() in emulating chips + +Instead of using time() in chip emulation, create new interface method +currentTime(), defaulting to time(0). This way frontend can cleanly +override the current time bsnes is using. +--- + snes/chip/bsx/satellaview/satellaview.cpp | 2 +- + snes/chip/spc7110/spc7110.cpp | 2 +- + snes/chip/srtc/srtc.cpp | 2 +- + snes/interface/interface.cpp | 5 +++++ + snes/interface/interface.hpp | 1 + + 5 files changed, 9 insertions(+), 3 deletions(-) + +diff --git a/snes/chip/bsx/satellaview/satellaview.cpp b/snes/chip/bsx/satellaview/satellaview.cpp +index 386fb62..3c98019 100755 +--- snes/chip/bsx/satellaview/satellaview.cpp ++++ snes/chip/bsx/satellaview/satellaview.cpp +@@ -38,7 +38,7 @@ uint8 BSXSatellaview::mmio_read(unsigned addr) { + + if(counter == 0) { + time_t rawtime; +- time(&rawtime); ++ rawtime = SNES::interface->currentTime(); + tm *t = localtime(&rawtime); + + regs.r2192_hour = t->tm_hour; +diff --git a/snes/chip/spc7110/spc7110.cpp b/snes/chip/spc7110/spc7110.cpp +index 27b8b77..061aa5e 100755 +--- snes/chip/spc7110/spc7110.cpp ++++ snes/chip/spc7110/spc7110.cpp +@@ -101,7 +101,7 @@ void SPC7110::set_data_adjust(unsigned addr) { r4814 = addr; r4815 = addr >> 8; + + void SPC7110::update_time(int offset) { + time_t rtc_time = (rtc[16] << 0) | (rtc[17] << 8) | (rtc[18] << 16) | (rtc[19] << 24); +- time_t current_time = time(0) - offset; ++ time_t current_time = SNES::interface->currentTime() - offset; + + //sizeof(time_t) is platform-dependent; though rtc[] needs to be platform-agnostic. + //yet platforms with 32-bit signed time_t will overflow every ~68 years. handle this by +diff --git a/snes/chip/srtc/srtc.cpp b/snes/chip/srtc/srtc.cpp +index 0044113..725e891 100755 +--- snes/chip/srtc/srtc.cpp ++++ snes/chip/srtc/srtc.cpp +@@ -31,7 +31,7 @@ void SRTC::reset() { + + void SRTC::update_time() { + time_t rtc_time = (rtc[16] << 0) | (rtc[17] << 8) | (rtc[18] << 16) | (rtc[19] << 24); +- time_t current_time = time(0); ++ time_t current_time = SNES::interface->currentTime(); + + //sizeof(time_t) is platform-dependent; though rtc[] needs to be platform-agnostic. + //yet platforms with 32-bit signed time_t will overflow every ~68 years. handle this by +diff --git a/snes/interface/interface.cpp b/snes/interface/interface.cpp +index a0e3a81..b3017c9 100755 +--- snes/interface/interface.cpp ++++ snes/interface/interface.cpp +@@ -18,4 +18,9 @@ void Interface::message(const string &text) { + print(text, "\n"); + } + ++time_t Interface::currentTime() ++{ ++ return time(0); ++} ++ + } +diff --git a/snes/interface/interface.hpp b/snes/interface/interface.hpp +index f1a48c0..df975e8 100755 +--- snes/interface/interface.hpp ++++ snes/interface/interface.hpp +@@ -5,6 +5,7 @@ struct Interface { + + virtual string path(Cartridge::Slot slot, const string &hint) = 0; + virtual void message(const string &text); ++ virtual time_t currentTime(); + }; + + extern Interface *interface; +-- +1.7.9.48.g85da4d + diff --git a/libsnes/lsnes_patches/0002-Save-controller-state-when-savestating.patch b/waterbox/libsnes/lsnes_patches/0002-Save-controller-state-when-savestating.patch similarity index 97% rename from libsnes/lsnes_patches/0002-Save-controller-state-when-savestating.patch rename to waterbox/libsnes/lsnes_patches/0002-Save-controller-state-when-savestating.patch index fdbb563e82..a585958334 100644 --- a/libsnes/lsnes_patches/0002-Save-controller-state-when-savestating.patch +++ b/waterbox/libsnes/lsnes_patches/0002-Save-controller-state-when-savestating.patch @@ -1,346 +1,346 @@ -From fe11984ad18561506a7cc874cb7c0421f1e21ad1 Mon Sep 17 00:00:00 2001 -From: Ilari Liusvaara -Date: Wed, 9 Nov 2011 01:52:08 +0200 -Subject: [PATCH 2/4] Save controller state when savestating - -When savestating, save the controller state and restore it upon loadstate. -Prevents libsnes from mixing up buttons. ---- - snes/controller/controller.cpp | 8 ++++++ - snes/controller/controller.hpp | 2 + - snes/controller/gamepad/gamepad.cpp | 13 ++++++++++ - snes/controller/gamepad/gamepad.hpp | 2 +- - snes/controller/justifier/justifier.cpp | 36 +++++++++++++++++++++++++++++ - snes/controller/justifier/justifier.hpp | 1 + - snes/controller/mouse/mouse.cpp | 13 ++++++++++ - snes/controller/mouse/mouse.hpp | 2 +- - snes/controller/multitap/multitap.cpp | 16 +++++++++++++ - snes/controller/multitap/multitap.hpp | 2 +- - snes/controller/superscope/superscope.cpp | 31 +++++++++++++++++++++++++ - snes/controller/superscope/superscope.hpp | 1 + - snes/system/input.cpp | 16 +++++++++++++ - snes/system/input.hpp | 1 + - snes/system/serialization.cpp | 1 + - 15 files changed, 142 insertions(+), 3 deletions(-) - -diff --git a/snes/controller/controller.cpp b/snes/controller/controller.cpp -index fa8e07d..5f37849 100755 ---- snes/controller/controller.cpp -+++ snes/controller/controller.cpp -@@ -46,8 +46,16 @@ void Controller::iobit(bool data) { - } - } - -+void Controller::serialize(serializer& s) { -+ Processor::serialize(s); -+ //Save a zero block. -+ unsigned char blockzeroes[SaveSize] = {0}; -+ s.array(blockzeroes, SaveSize); -+} -+ - Controller::Controller(bool port) : port(port) { - if(!thread) create(Controller::Enter, 1); - } - -+ - } -diff --git a/snes/controller/controller.hpp b/snes/controller/controller.hpp -index dd748a1..46095a8 100755 ---- snes/controller/controller.hpp -+++ snes/controller/controller.hpp -@@ -13,12 +13,14 @@ - - struct Controller : Processor { - enum : bool { Port1 = 0, Port2 = 1 }; -+ enum { SaveSize = 16 }; - const bool port; - - static void Enter(); - virtual void enter(); - void step(unsigned clocks); - void synchronize_cpu(); -+ virtual void serialize(serializer& s); - - bool iobit(); - void iobit(bool data); -diff --git a/snes/controller/gamepad/gamepad.cpp b/snes/controller/gamepad/gamepad.cpp -index 594020d..4fa1c99 100755 ---- snes/controller/gamepad/gamepad.cpp -+++ snes/controller/gamepad/gamepad.cpp -@@ -13,6 +13,19 @@ void Gamepad::latch(bool data) { - counter = 0; - } - -+void Gamepad::serialize(serializer& s) { -+ Processor::serialize(s); -+ //Save block. -+ unsigned char block[Controller::SaveSize] = {0}; -+ block[0] = latched ? 1 : 0; -+ block[1] = counter; -+ s.array(block, Controller::SaveSize); -+ if(s.mode() == nall::serializer::Load) { -+ latched = (block[0] != 0); -+ counter = block[1]; -+ } -+} -+ - Gamepad::Gamepad(bool port) : Controller(port) { - latched = 0; - counter = 0; -diff --git a/snes/controller/gamepad/gamepad.hpp b/snes/controller/gamepad/gamepad.hpp -index c5ca69c..a2392d1 100755 ---- snes/controller/gamepad/gamepad.hpp -+++ snes/controller/gamepad/gamepad.hpp -@@ -2,7 +2,7 @@ struct Gamepad : Controller { - uint2 data(); - void latch(bool data); - Gamepad(bool port); -- -+ void serialize(serializer& s); - private: - bool latched; - unsigned counter; -diff --git a/snes/controller/justifier/justifier.cpp b/snes/controller/justifier/justifier.cpp -index 6207916..ad13a9b 100755 ---- snes/controller/justifier/justifier.cpp -+++ snes/controller/justifier/justifier.cpp -@@ -100,6 +100,42 @@ void Justifier::latch(bool data) { - if(latched == 0) active = !active; //toggle between both controllers, even when unchained - } - -+void Justifier::serialize(serializer& s) { -+ Processor::serialize(s); -+ //Save block. -+ unsigned char block[Controller::SaveSize] = {0}; -+ block[0] = latched ? 1 : 0; -+ block[1] = counter; -+ block[2] = active ? 1 : 0; -+ block[3] = player1.trigger ? 1 : 0; -+ block[4] = player2.trigger ? 1 : 0; -+ block[5] = player1.start ? 1 : 0; -+ block[6] = player2.start ? 1 : 0; -+ block[7] = (unsigned short)player1.x >> 8; -+ block[8] = (unsigned short)player1.x; -+ block[9] = (unsigned short)player2.x >> 8; -+ block[10] = (unsigned short)player2.x; -+ block[11] = (unsigned short)player1.y >> 8; -+ block[12] = (unsigned short)player1.y; -+ block[13] = (unsigned short)player2.y >> 8; -+ block[14] = (unsigned short)player2.y; -+ s.array(block, Controller::SaveSize); -+ if(s.mode() == nall::serializer::Load) { -+ latched = (block[0] != 0); -+ counter = block[1]; -+ active = (block[2] != 0); -+ player1.trigger = (block[3] != 0); -+ player2.trigger = (block[4] != 0); -+ player1.start = (block[5] != 0); -+ player2.start = (block[6] != 0); -+ player1.x = (short)(((unsigned short)block[7] << 8) | (unsigned short)block[8]); -+ player2.x = (short)(((unsigned short)block[9] << 8) | (unsigned short)block[10]); -+ player1.y = (short)(((unsigned short)block[11] << 8) | (unsigned short)block[12]); -+ player2.y = (short)(((unsigned short)block[13] << 8) | (unsigned short)block[14]); -+ } -+} -+ -+ - Justifier::Justifier(bool port, bool chained) : Controller(port), chained(chained) { - create(Controller::Enter, 21477272); - latched = 0; -diff --git a/snes/controller/justifier/justifier.hpp b/snes/controller/justifier/justifier.hpp -index f927acf..6b7bba0 100755 ---- snes/controller/justifier/justifier.hpp -+++ snes/controller/justifier/justifier.hpp -@@ -2,6 +2,7 @@ struct Justifier : Controller { - void enter(); - uint2 data(); - void latch(bool data); -+ void serialize(serializer& s); - Justifier(bool port, bool chained); - - //private: -diff --git a/snes/controller/mouse/mouse.cpp b/snes/controller/mouse/mouse.cpp -index c9f5d16..6b26fae 100755 ---- snes/controller/mouse/mouse.cpp -+++ snes/controller/mouse/mouse.cpp -@@ -61,6 +61,19 @@ void Mouse::latch(bool data) { - counter = 0; - } - -+void Mouse::serialize(serializer& s) { -+ Processor::serialize(s); -+ //Save block. -+ unsigned char block[Controller::SaveSize] = {0}; -+ block[0] = latched ? 1 : 0; -+ block[1] = counter; -+ s.array(block, Controller::SaveSize); -+ if(s.mode() == nall::serializer::Load) { -+ latched = (block[0] != 0); -+ counter = block[1]; -+ } -+} -+ - Mouse::Mouse(bool port) : Controller(port) { - latched = 0; - counter = 0; -diff --git a/snes/controller/mouse/mouse.hpp b/snes/controller/mouse/mouse.hpp -index 95e24b6..b66ea51 100755 ---- snes/controller/mouse/mouse.hpp -+++ snes/controller/mouse/mouse.hpp -@@ -2,7 +2,7 @@ struct Mouse : Controller { - uint2 data(); - void latch(bool data); - Mouse(bool port); -- -+ void serialize(serializer& s); - private: - bool latched; - unsigned counter; -diff --git a/snes/controller/multitap/multitap.cpp b/snes/controller/multitap/multitap.cpp -index 3a6eb72..146c41d 100755 ---- snes/controller/multitap/multitap.cpp -+++ snes/controller/multitap/multitap.cpp -@@ -30,6 +30,22 @@ void Multitap::latch(bool data) { - counter2 = 0; - } - -+void Multitap::serialize(serializer& s) { -+ Processor::serialize(s); -+ //Save block. -+ unsigned char block[Controller::SaveSize] = {0}; -+ block[0] = latched ? 1 : 0; -+ block[1] = counter1; -+ block[2] = counter2; -+ s.array(block, Controller::SaveSize); -+ if(s.mode() == nall::serializer::Load) { -+ latched = (block[0] != 0); -+ counter1 = block[1]; -+ counter2 = block[2]; -+ } -+} -+ -+ - Multitap::Multitap(bool port) : Controller(port) { - latched = 0; - counter1 = 0; -diff --git a/snes/controller/multitap/multitap.hpp b/snes/controller/multitap/multitap.hpp -index 0540af7..e6324ac 100755 ---- snes/controller/multitap/multitap.hpp -+++ snes/controller/multitap/multitap.hpp -@@ -2,7 +2,7 @@ struct Multitap : Controller { - uint2 data(); - void latch(bool data); - Multitap(bool port); -- -+ void serialize(serializer& s); - private: - bool latched; - unsigned counter1; -diff --git a/snes/controller/superscope/superscope.cpp b/snes/controller/superscope/superscope.cpp -index 12068f0..1a1dfbf 100755 ---- snes/controller/superscope/superscope.cpp -+++ snes/controller/superscope/superscope.cpp -@@ -100,6 +100,37 @@ void SuperScope::latch(bool data) { - counter = 0; - } - -+void SuperScope::serialize(serializer& s) { -+ Processor::serialize(s); -+ //Save block. -+ unsigned char block[Controller::SaveSize] = {0}; -+ block[0] = latched ? 1 : 0; -+ block[1] = counter; -+ block[2] = trigger ? 1 : 0; -+ block[3] = cursor ? 1 : 0; -+ block[4] = turbo ? 1 : 0; -+ block[5] = pause ? 1 : 0; -+ block[6] = offscreen ? 1 : 0; -+ block[7] = (unsigned short)x >> 8; -+ block[8] = (unsigned short)x; -+ block[9] = (unsigned short)y >> 8; -+ block[10] = (unsigned short)y; -+ -+ s.array(block, Controller::SaveSize); -+ if(s.mode() == nall::serializer::Load) { -+ latched = (block[0] != 0); -+ counter = block[1]; -+ trigger = (block[2] != 0); -+ cursor = (block[3] != 0); -+ turbo = (block[4] != 0); -+ pause = (block[5] != 0); -+ offscreen = (block[6] != 0); -+ x = (short)(((unsigned short)block[7] << 8) | (unsigned short)block[8]); -+ y = (short)(((unsigned short)block[9] << 8) | (unsigned short)block[10]); -+ } -+} -+ -+ - SuperScope::SuperScope(bool port) : Controller(port) { - create(Controller::Enter, 21477272); - latched = 0; -diff --git a/snes/controller/superscope/superscope.hpp b/snes/controller/superscope/superscope.hpp -index a7a90b7..93509d7 100755 ---- snes/controller/superscope/superscope.hpp -+++ snes/controller/superscope/superscope.hpp -@@ -2,6 +2,7 @@ struct SuperScope : Controller { - void enter(); - uint2 data(); - void latch(bool data); -+ void serialize(serializer& s); - SuperScope(bool port); - - //private: -diff --git a/snes/system/input.cpp b/snes/system/input.cpp -index 894de0e..4479acc 100755 ---- snes/system/input.cpp -+++ snes/system/input.cpp -@@ -26,6 +26,22 @@ void Input::connect(bool port, Input::Device id) { - } - } - -+void Input::serialize(serializer &s) -+{ -+ int p1, p2; -+ p1 = (int)config.controller_port1; -+ p2 = (int)config.controller_port2; -+ s.integer(p1); -+ s.integer(p2); -+ if(s.mode() == nall::serializer::Load) { -+ connect(Controller::Port1, (Device)p1); -+ connect(Controller::Port2, (Device)p2); -+ } -+ port1->serialize(s); -+ port2->serialize(s); -+} -+ -+ - Input::Input() : port1(nullptr), port2(nullptr) { - connect(Controller::Port1, Input::Device::Joypad); - connect(Controller::Port2, Input::Device::Joypad); -diff --git a/snes/system/input.hpp b/snes/system/input.hpp -index 7a6bd9e..d2f5fef 100755 ---- snes/system/input.hpp -+++ snes/system/input.hpp -@@ -31,6 +31,7 @@ struct Input { - Controller *port1; - Controller *port2; - -+ void serialize(serializer &s); - void connect(bool port, Input::Device id); - Input(); - ~Input(); -diff --git a/snes/system/serialization.cpp b/snes/system/serialization.cpp -index f746c3a..67e08a2 100755 ---- snes/system/serialization.cpp -+++ snes/system/serialization.cpp -@@ -56,6 +56,7 @@ void System::serialize_all(serializer &s) { - smp.serialize(s); - ppu.serialize(s); - dsp.serialize(s); -+ input.serialize(s); - - if(cartridge.mode() == Cartridge::Mode::SufamiTurbo) sufamiturbo.serialize(s); - #if defined(GAMEBOY) --- -1.7.9.48.g85da4d - +From fe11984ad18561506a7cc874cb7c0421f1e21ad1 Mon Sep 17 00:00:00 2001 +From: Ilari Liusvaara +Date: Wed, 9 Nov 2011 01:52:08 +0200 +Subject: [PATCH 2/4] Save controller state when savestating + +When savestating, save the controller state and restore it upon loadstate. +Prevents libsnes from mixing up buttons. +--- + snes/controller/controller.cpp | 8 ++++++ + snes/controller/controller.hpp | 2 + + snes/controller/gamepad/gamepad.cpp | 13 ++++++++++ + snes/controller/gamepad/gamepad.hpp | 2 +- + snes/controller/justifier/justifier.cpp | 36 +++++++++++++++++++++++++++++ + snes/controller/justifier/justifier.hpp | 1 + + snes/controller/mouse/mouse.cpp | 13 ++++++++++ + snes/controller/mouse/mouse.hpp | 2 +- + snes/controller/multitap/multitap.cpp | 16 +++++++++++++ + snes/controller/multitap/multitap.hpp | 2 +- + snes/controller/superscope/superscope.cpp | 31 +++++++++++++++++++++++++ + snes/controller/superscope/superscope.hpp | 1 + + snes/system/input.cpp | 16 +++++++++++++ + snes/system/input.hpp | 1 + + snes/system/serialization.cpp | 1 + + 15 files changed, 142 insertions(+), 3 deletions(-) + +diff --git a/snes/controller/controller.cpp b/snes/controller/controller.cpp +index fa8e07d..5f37849 100755 +--- snes/controller/controller.cpp ++++ snes/controller/controller.cpp +@@ -46,8 +46,16 @@ void Controller::iobit(bool data) { + } + } + ++void Controller::serialize(serializer& s) { ++ Processor::serialize(s); ++ //Save a zero block. ++ unsigned char blockzeroes[SaveSize] = {0}; ++ s.array(blockzeroes, SaveSize); ++} ++ + Controller::Controller(bool port) : port(port) { + if(!thread) create(Controller::Enter, 1); + } + ++ + } +diff --git a/snes/controller/controller.hpp b/snes/controller/controller.hpp +index dd748a1..46095a8 100755 +--- snes/controller/controller.hpp ++++ snes/controller/controller.hpp +@@ -13,12 +13,14 @@ + + struct Controller : Processor { + enum : bool { Port1 = 0, Port2 = 1 }; ++ enum { SaveSize = 16 }; + const bool port; + + static void Enter(); + virtual void enter(); + void step(unsigned clocks); + void synchronize_cpu(); ++ virtual void serialize(serializer& s); + + bool iobit(); + void iobit(bool data); +diff --git a/snes/controller/gamepad/gamepad.cpp b/snes/controller/gamepad/gamepad.cpp +index 594020d..4fa1c99 100755 +--- snes/controller/gamepad/gamepad.cpp ++++ snes/controller/gamepad/gamepad.cpp +@@ -13,6 +13,19 @@ void Gamepad::latch(bool data) { + counter = 0; + } + ++void Gamepad::serialize(serializer& s) { ++ Processor::serialize(s); ++ //Save block. ++ unsigned char block[Controller::SaveSize] = {0}; ++ block[0] = latched ? 1 : 0; ++ block[1] = counter; ++ s.array(block, Controller::SaveSize); ++ if(s.mode() == nall::serializer::Load) { ++ latched = (block[0] != 0); ++ counter = block[1]; ++ } ++} ++ + Gamepad::Gamepad(bool port) : Controller(port) { + latched = 0; + counter = 0; +diff --git a/snes/controller/gamepad/gamepad.hpp b/snes/controller/gamepad/gamepad.hpp +index c5ca69c..a2392d1 100755 +--- snes/controller/gamepad/gamepad.hpp ++++ snes/controller/gamepad/gamepad.hpp +@@ -2,7 +2,7 @@ struct Gamepad : Controller { + uint2 data(); + void latch(bool data); + Gamepad(bool port); +- ++ void serialize(serializer& s); + private: + bool latched; + unsigned counter; +diff --git a/snes/controller/justifier/justifier.cpp b/snes/controller/justifier/justifier.cpp +index 6207916..ad13a9b 100755 +--- snes/controller/justifier/justifier.cpp ++++ snes/controller/justifier/justifier.cpp +@@ -100,6 +100,42 @@ void Justifier::latch(bool data) { + if(latched == 0) active = !active; //toggle between both controllers, even when unchained + } + ++void Justifier::serialize(serializer& s) { ++ Processor::serialize(s); ++ //Save block. ++ unsigned char block[Controller::SaveSize] = {0}; ++ block[0] = latched ? 1 : 0; ++ block[1] = counter; ++ block[2] = active ? 1 : 0; ++ block[3] = player1.trigger ? 1 : 0; ++ block[4] = player2.trigger ? 1 : 0; ++ block[5] = player1.start ? 1 : 0; ++ block[6] = player2.start ? 1 : 0; ++ block[7] = (unsigned short)player1.x >> 8; ++ block[8] = (unsigned short)player1.x; ++ block[9] = (unsigned short)player2.x >> 8; ++ block[10] = (unsigned short)player2.x; ++ block[11] = (unsigned short)player1.y >> 8; ++ block[12] = (unsigned short)player1.y; ++ block[13] = (unsigned short)player2.y >> 8; ++ block[14] = (unsigned short)player2.y; ++ s.array(block, Controller::SaveSize); ++ if(s.mode() == nall::serializer::Load) { ++ latched = (block[0] != 0); ++ counter = block[1]; ++ active = (block[2] != 0); ++ player1.trigger = (block[3] != 0); ++ player2.trigger = (block[4] != 0); ++ player1.start = (block[5] != 0); ++ player2.start = (block[6] != 0); ++ player1.x = (short)(((unsigned short)block[7] << 8) | (unsigned short)block[8]); ++ player2.x = (short)(((unsigned short)block[9] << 8) | (unsigned short)block[10]); ++ player1.y = (short)(((unsigned short)block[11] << 8) | (unsigned short)block[12]); ++ player2.y = (short)(((unsigned short)block[13] << 8) | (unsigned short)block[14]); ++ } ++} ++ ++ + Justifier::Justifier(bool port, bool chained) : Controller(port), chained(chained) { + create(Controller::Enter, 21477272); + latched = 0; +diff --git a/snes/controller/justifier/justifier.hpp b/snes/controller/justifier/justifier.hpp +index f927acf..6b7bba0 100755 +--- snes/controller/justifier/justifier.hpp ++++ snes/controller/justifier/justifier.hpp +@@ -2,6 +2,7 @@ struct Justifier : Controller { + void enter(); + uint2 data(); + void latch(bool data); ++ void serialize(serializer& s); + Justifier(bool port, bool chained); + + //private: +diff --git a/snes/controller/mouse/mouse.cpp b/snes/controller/mouse/mouse.cpp +index c9f5d16..6b26fae 100755 +--- snes/controller/mouse/mouse.cpp ++++ snes/controller/mouse/mouse.cpp +@@ -61,6 +61,19 @@ void Mouse::latch(bool data) { + counter = 0; + } + ++void Mouse::serialize(serializer& s) { ++ Processor::serialize(s); ++ //Save block. ++ unsigned char block[Controller::SaveSize] = {0}; ++ block[0] = latched ? 1 : 0; ++ block[1] = counter; ++ s.array(block, Controller::SaveSize); ++ if(s.mode() == nall::serializer::Load) { ++ latched = (block[0] != 0); ++ counter = block[1]; ++ } ++} ++ + Mouse::Mouse(bool port) : Controller(port) { + latched = 0; + counter = 0; +diff --git a/snes/controller/mouse/mouse.hpp b/snes/controller/mouse/mouse.hpp +index 95e24b6..b66ea51 100755 +--- snes/controller/mouse/mouse.hpp ++++ snes/controller/mouse/mouse.hpp +@@ -2,7 +2,7 @@ struct Mouse : Controller { + uint2 data(); + void latch(bool data); + Mouse(bool port); +- ++ void serialize(serializer& s); + private: + bool latched; + unsigned counter; +diff --git a/snes/controller/multitap/multitap.cpp b/snes/controller/multitap/multitap.cpp +index 3a6eb72..146c41d 100755 +--- snes/controller/multitap/multitap.cpp ++++ snes/controller/multitap/multitap.cpp +@@ -30,6 +30,22 @@ void Multitap::latch(bool data) { + counter2 = 0; + } + ++void Multitap::serialize(serializer& s) { ++ Processor::serialize(s); ++ //Save block. ++ unsigned char block[Controller::SaveSize] = {0}; ++ block[0] = latched ? 1 : 0; ++ block[1] = counter1; ++ block[2] = counter2; ++ s.array(block, Controller::SaveSize); ++ if(s.mode() == nall::serializer::Load) { ++ latched = (block[0] != 0); ++ counter1 = block[1]; ++ counter2 = block[2]; ++ } ++} ++ ++ + Multitap::Multitap(bool port) : Controller(port) { + latched = 0; + counter1 = 0; +diff --git a/snes/controller/multitap/multitap.hpp b/snes/controller/multitap/multitap.hpp +index 0540af7..e6324ac 100755 +--- snes/controller/multitap/multitap.hpp ++++ snes/controller/multitap/multitap.hpp +@@ -2,7 +2,7 @@ struct Multitap : Controller { + uint2 data(); + void latch(bool data); + Multitap(bool port); +- ++ void serialize(serializer& s); + private: + bool latched; + unsigned counter1; +diff --git a/snes/controller/superscope/superscope.cpp b/snes/controller/superscope/superscope.cpp +index 12068f0..1a1dfbf 100755 +--- snes/controller/superscope/superscope.cpp ++++ snes/controller/superscope/superscope.cpp +@@ -100,6 +100,37 @@ void SuperScope::latch(bool data) { + counter = 0; + } + ++void SuperScope::serialize(serializer& s) { ++ Processor::serialize(s); ++ //Save block. ++ unsigned char block[Controller::SaveSize] = {0}; ++ block[0] = latched ? 1 : 0; ++ block[1] = counter; ++ block[2] = trigger ? 1 : 0; ++ block[3] = cursor ? 1 : 0; ++ block[4] = turbo ? 1 : 0; ++ block[5] = pause ? 1 : 0; ++ block[6] = offscreen ? 1 : 0; ++ block[7] = (unsigned short)x >> 8; ++ block[8] = (unsigned short)x; ++ block[9] = (unsigned short)y >> 8; ++ block[10] = (unsigned short)y; ++ ++ s.array(block, Controller::SaveSize); ++ if(s.mode() == nall::serializer::Load) { ++ latched = (block[0] != 0); ++ counter = block[1]; ++ trigger = (block[2] != 0); ++ cursor = (block[3] != 0); ++ turbo = (block[4] != 0); ++ pause = (block[5] != 0); ++ offscreen = (block[6] != 0); ++ x = (short)(((unsigned short)block[7] << 8) | (unsigned short)block[8]); ++ y = (short)(((unsigned short)block[9] << 8) | (unsigned short)block[10]); ++ } ++} ++ ++ + SuperScope::SuperScope(bool port) : Controller(port) { + create(Controller::Enter, 21477272); + latched = 0; +diff --git a/snes/controller/superscope/superscope.hpp b/snes/controller/superscope/superscope.hpp +index a7a90b7..93509d7 100755 +--- snes/controller/superscope/superscope.hpp ++++ snes/controller/superscope/superscope.hpp +@@ -2,6 +2,7 @@ struct SuperScope : Controller { + void enter(); + uint2 data(); + void latch(bool data); ++ void serialize(serializer& s); + SuperScope(bool port); + + //private: +diff --git a/snes/system/input.cpp b/snes/system/input.cpp +index 894de0e..4479acc 100755 +--- snes/system/input.cpp ++++ snes/system/input.cpp +@@ -26,6 +26,22 @@ void Input::connect(bool port, Input::Device id) { + } + } + ++void Input::serialize(serializer &s) ++{ ++ int p1, p2; ++ p1 = (int)config.controller_port1; ++ p2 = (int)config.controller_port2; ++ s.integer(p1); ++ s.integer(p2); ++ if(s.mode() == nall::serializer::Load) { ++ connect(Controller::Port1, (Device)p1); ++ connect(Controller::Port2, (Device)p2); ++ } ++ port1->serialize(s); ++ port2->serialize(s); ++} ++ ++ + Input::Input() : port1(nullptr), port2(nullptr) { + connect(Controller::Port1, Input::Device::Joypad); + connect(Controller::Port2, Input::Device::Joypad); +diff --git a/snes/system/input.hpp b/snes/system/input.hpp +index 7a6bd9e..d2f5fef 100755 +--- snes/system/input.hpp ++++ snes/system/input.hpp +@@ -31,6 +31,7 @@ struct Input { + Controller *port1; + Controller *port2; + ++ void serialize(serializer &s); + void connect(bool port, Input::Device id); + Input(); + ~Input(); +diff --git a/snes/system/serialization.cpp b/snes/system/serialization.cpp +index f746c3a..67e08a2 100755 +--- snes/system/serialization.cpp ++++ snes/system/serialization.cpp +@@ -56,6 +56,7 @@ void System::serialize_all(serializer &s) { + smp.serialize(s); + ppu.serialize(s); + dsp.serialize(s); ++ input.serialize(s); + + if(cartridge.mode() == Cartridge::Mode::SufamiTurbo) sufamiturbo.serialize(s); + #if defined(GAMEBOY) +-- +1.7.9.48.g85da4d + diff --git a/libsnes/lsnes_patches/0003-Allow-frontend-to-control-random-number-seed.patch b/waterbox/libsnes/lsnes_patches/0003-Allow-frontend-to-control-random-number-seed.patch similarity index 96% rename from libsnes/lsnes_patches/0003-Allow-frontend-to-control-random-number-seed.patch rename to waterbox/libsnes/lsnes_patches/0003-Allow-frontend-to-control-random-number-seed.patch index f6feec1d12..828e83a810 100644 --- a/libsnes/lsnes_patches/0003-Allow-frontend-to-control-random-number-seed.patch +++ b/waterbox/libsnes/lsnes_patches/0003-Allow-frontend-to-control-random-number-seed.patch @@ -1,53 +1,53 @@ -From 5f76449a70c9a546e18c2fdebe7588bbe90b56d2 Mon Sep 17 00:00:00 2001 -From: Ilari Liusvaara -Date: Fri, 11 Nov 2011 19:49:46 +0200 -Subject: [PATCH 3/4] Allow frontend to control random number seed - ---- - snes/interface/interface.cpp | 5 +++++ - snes/interface/interface.hpp | 1 + - snes/system/system.cpp | 2 +- - 3 files changed, 7 insertions(+), 1 deletions(-) - -diff --git a/snes/interface/interface.cpp b/snes/interface/interface.cpp -index b3017c9..0a21a13 100755 ---- snes/interface/interface.cpp -+++ snes/interface/interface.cpp -@@ -23,4 +23,9 @@ time_t Interface::currentTime() - return time(0); - } - -+time_t Interface::randomSeed() -+{ -+ return time(0); -+} -+ - } -diff --git a/snes/interface/interface.hpp b/snes/interface/interface.hpp -index df975e8..30ee7fd 100755 ---- snes/interface/interface.hpp -+++ snes/interface/interface.hpp -@@ -6,6 +6,7 @@ struct Interface { - virtual string path(Cartridge::Slot slot, const string &hint) = 0; - virtual void message(const string &text); - virtual time_t currentTime(); -+ virtual time_t randomSeed(); - }; - - extern Interface *interface; -diff --git a/snes/system/system.cpp b/snes/system/system.cpp -index 9b70bbf..cbd096c 100755 ---- snes/system/system.cpp -+++ snes/system/system.cpp -@@ -151,7 +151,7 @@ void System::unload() { - } - - void System::power() { -- random.seed((unsigned)time(0)); -+ random.seed((unsigned)interface->randomSeed()); - - region = config.region; - expansion = config.expansion_port; --- -1.7.9.48.g85da4d - +From 5f76449a70c9a546e18c2fdebe7588bbe90b56d2 Mon Sep 17 00:00:00 2001 +From: Ilari Liusvaara +Date: Fri, 11 Nov 2011 19:49:46 +0200 +Subject: [PATCH 3/4] Allow frontend to control random number seed + +--- + snes/interface/interface.cpp | 5 +++++ + snes/interface/interface.hpp | 1 + + snes/system/system.cpp | 2 +- + 3 files changed, 7 insertions(+), 1 deletions(-) + +diff --git a/snes/interface/interface.cpp b/snes/interface/interface.cpp +index b3017c9..0a21a13 100755 +--- snes/interface/interface.cpp ++++ snes/interface/interface.cpp +@@ -23,4 +23,9 @@ time_t Interface::currentTime() + return time(0); + } + ++time_t Interface::randomSeed() ++{ ++ return time(0); ++} ++ + } +diff --git a/snes/interface/interface.hpp b/snes/interface/interface.hpp +index df975e8..30ee7fd 100755 +--- snes/interface/interface.hpp ++++ snes/interface/interface.hpp +@@ -6,6 +6,7 @@ struct Interface { + virtual string path(Cartridge::Slot slot, const string &hint) = 0; + virtual void message(const string &text); + virtual time_t currentTime(); ++ virtual time_t randomSeed(); + }; + + extern Interface *interface; +diff --git a/snes/system/system.cpp b/snes/system/system.cpp +index 9b70bbf..cbd096c 100755 +--- snes/system/system.cpp ++++ snes/system/system.cpp +@@ -151,7 +151,7 @@ void System::unload() { + } + + void System::power() { +- random.seed((unsigned)time(0)); ++ random.seed((unsigned)interface->randomSeed()); + + region = config.region; + expansion = config.expansion_port; +-- +1.7.9.48.g85da4d + diff --git a/libsnes/lsnes_patches/0004-Fix-mouse-polling.patch b/waterbox/libsnes/lsnes_patches/0004-Fix-mouse-polling.patch similarity index 97% rename from libsnes/lsnes_patches/0004-Fix-mouse-polling.patch rename to waterbox/libsnes/lsnes_patches/0004-Fix-mouse-polling.patch index 8fb4e43fe9..bdecda2782 100644 --- a/libsnes/lsnes_patches/0004-Fix-mouse-polling.patch +++ b/waterbox/libsnes/lsnes_patches/0004-Fix-mouse-polling.patch @@ -1,60 +1,60 @@ -From 160dedf35571478781737ee35307b9321cfb41bb Mon Sep 17 00:00:00 2001 -From: Ilari Liusvaara -Date: Wed, 7 Mar 2012 16:57:18 +0200 -Subject: [PATCH 4/4] Fix mouse polling - -Don't poll for mouse motion excessive number of times (no need to poll it for -each bit!) ---- - snes/controller/mouse/mouse.cpp | 12 ++++++++++-- - snes/controller/mouse/mouse.hpp | 2 ++ - 2 files changed, 12 insertions(+), 2 deletions(-) - -diff --git a/snes/controller/mouse/mouse.cpp b/snes/controller/mouse/mouse.cpp -index 6b26fae..824ecd3 100755 ---- snes/controller/mouse/mouse.cpp -+++ snes/controller/mouse/mouse.cpp -@@ -3,8 +3,10 @@ - uint2 Mouse::data() { - if(counter >= 32) return 1; - -- int position_x = interface->inputPoll(port, Input::Device::Mouse, 0, (unsigned)Input::MouseID::X); //-n = left, 0 = center, +n = right -- int position_y = interface->inputPoll(port, Input::Device::Mouse, 0, (unsigned)Input::MouseID::Y); //-n = up, 0 = center, +n = down -+ if(counter == 0) { -+ position_x = interface->inputPoll(port, Input::Device::Mouse, 0, (unsigned)Input::MouseID::X); //-n = left, 0 = center, +n = right -+ position_y = interface->inputPoll(port, Input::Device::Mouse, 0, (unsigned)Input::MouseID::Y); //-n = up, 0 = center, +n = down -+ } - - bool direction_x = position_x < 0; //0 = right, 1 = left - bool direction_y = position_y < 0; //0 = down, 1 = up -@@ -67,10 +69,16 @@ void Mouse::serialize(serializer& s) { - unsigned char block[Controller::SaveSize] = {0}; - block[0] = latched ? 1 : 0; - block[1] = counter; -+ block[2] = (unsigned short)position_x >> 8; -+ block[3] = (unsigned short)position_x; -+ block[4] = (unsigned short)position_y >> 8; -+ block[5] = (unsigned short)position_y; - s.array(block, Controller::SaveSize); - if(s.mode() == nall::serializer::Load) { - latched = (block[0] != 0); - counter = block[1]; -+ position_x = (short)(((unsigned short)block[2] << 8) | (unsigned short)block[3]); -+ position_y = (short)(((unsigned short)block[4] << 8) | (unsigned short)block[5]); - } - } - -diff --git a/snes/controller/mouse/mouse.hpp b/snes/controller/mouse/mouse.hpp -index b66ea51..6074f34 100755 ---- snes/controller/mouse/mouse.hpp -+++ snes/controller/mouse/mouse.hpp -@@ -6,4 +6,6 @@ struct Mouse : Controller { - private: - bool latched; - unsigned counter; -+ int position_x; -+ int position_y; - }; --- -1.7.9.48.g85da4d - +From 160dedf35571478781737ee35307b9321cfb41bb Mon Sep 17 00:00:00 2001 +From: Ilari Liusvaara +Date: Wed, 7 Mar 2012 16:57:18 +0200 +Subject: [PATCH 4/4] Fix mouse polling + +Don't poll for mouse motion excessive number of times (no need to poll it for +each bit!) +--- + snes/controller/mouse/mouse.cpp | 12 ++++++++++-- + snes/controller/mouse/mouse.hpp | 2 ++ + 2 files changed, 12 insertions(+), 2 deletions(-) + +diff --git a/snes/controller/mouse/mouse.cpp b/snes/controller/mouse/mouse.cpp +index 6b26fae..824ecd3 100755 +--- snes/controller/mouse/mouse.cpp ++++ snes/controller/mouse/mouse.cpp +@@ -3,8 +3,10 @@ + uint2 Mouse::data() { + if(counter >= 32) return 1; + +- int position_x = interface->inputPoll(port, Input::Device::Mouse, 0, (unsigned)Input::MouseID::X); //-n = left, 0 = center, +n = right +- int position_y = interface->inputPoll(port, Input::Device::Mouse, 0, (unsigned)Input::MouseID::Y); //-n = up, 0 = center, +n = down ++ if(counter == 0) { ++ position_x = interface->inputPoll(port, Input::Device::Mouse, 0, (unsigned)Input::MouseID::X); //-n = left, 0 = center, +n = right ++ position_y = interface->inputPoll(port, Input::Device::Mouse, 0, (unsigned)Input::MouseID::Y); //-n = up, 0 = center, +n = down ++ } + + bool direction_x = position_x < 0; //0 = right, 1 = left + bool direction_y = position_y < 0; //0 = down, 1 = up +@@ -67,10 +69,16 @@ void Mouse::serialize(serializer& s) { + unsigned char block[Controller::SaveSize] = {0}; + block[0] = latched ? 1 : 0; + block[1] = counter; ++ block[2] = (unsigned short)position_x >> 8; ++ block[3] = (unsigned short)position_x; ++ block[4] = (unsigned short)position_y >> 8; ++ block[5] = (unsigned short)position_y; + s.array(block, Controller::SaveSize); + if(s.mode() == nall::serializer::Load) { + latched = (block[0] != 0); + counter = block[1]; ++ position_x = (short)(((unsigned short)block[2] << 8) | (unsigned short)block[3]); ++ position_y = (short)(((unsigned short)block[4] << 8) | (unsigned short)block[5]); + } + } + +diff --git a/snes/controller/mouse/mouse.hpp b/snes/controller/mouse/mouse.hpp +index b66ea51..6074f34 100755 +--- snes/controller/mouse/mouse.hpp ++++ snes/controller/mouse/mouse.hpp +@@ -6,4 +6,6 @@ struct Mouse : Controller { + private: + bool latched; + unsigned counter; ++ int position_x; ++ int position_y; + }; +-- +1.7.9.48.g85da4d +