diff --git a/higan/emulator/emulator.hpp b/higan/emulator/emulator.hpp index b70357c0..7a45aba0 100755 --- a/higan/emulator/emulator.hpp +++ b/higan/emulator/emulator.hpp @@ -3,7 +3,7 @@ namespace Emulator { static const char Name[] = "higan"; - static const char Version[] = "092.08"; + static const char Version[] = "092.09"; static const char Author[] = "byuu"; static const char License[] = "GPLv3"; static const char Website[] = "http://byuu.org/"; diff --git a/higan/emulator/interface.hpp b/higan/emulator/interface.hpp index 9abd8d7c..d227087f 100755 --- a/higan/emulator/interface.hpp +++ b/higan/emulator/interface.hpp @@ -47,9 +47,9 @@ struct Interface { vector port; struct Bind { - virtual void loadRequest(unsigned, const string&, const string&) {} - virtual void loadRequest(unsigned, const string&) {} - virtual void saveRequest(unsigned, const string&) {} + virtual void loadRequest(unsigned, string, string) {} + virtual void loadRequest(unsigned, string) {} + virtual void saveRequest(unsigned, string) {} virtual uint32_t videoColor(unsigned, uint16_t, uint16_t, uint16_t) { return 0u; } virtual void videoRefresh(const uint32_t*, unsigned, unsigned, unsigned) {} virtual void audioSample(int16_t, int16_t) {} @@ -57,14 +57,14 @@ struct Interface { virtual unsigned dipSettings(const Markup::Node&) { return 0; } virtual string path(unsigned) { return ""; } virtual string server() { return ""; } - virtual void notify(const string& text) { print(text, "\n"); } + virtual void notify(string text) { print(text, "\n"); } }; Bind* bind = nullptr; //callback bindings (provided by user interface) - void loadRequest(unsigned id, const string& name, const string& type) { return bind->loadRequest(id, name, type); } - void loadRequest(unsigned id, const string& path) { return bind->loadRequest(id, path); } - void saveRequest(unsigned id, const string& path) { return bind->saveRequest(id, path); } + void loadRequest(unsigned id, string name, string type) { return bind->loadRequest(id, name, type); } + void loadRequest(unsigned id, string path) { return bind->loadRequest(id, path); } + void saveRequest(unsigned id, string path) { return bind->saveRequest(id, path); } uint32_t videoColor(unsigned source, uint16_t red, uint16_t green, uint16_t blue) { return bind->videoColor(source, red, green, blue); } void videoRefresh(const uint32_t* data, unsigned pitch, unsigned width, unsigned height) { return bind->videoRefresh(data, pitch, width, height); } void audioSample(int16_t lsample, int16_t rsample) { return bind->audioSample(lsample, rsample); } diff --git a/higan/fc/apu/dmc.cpp b/higan/fc/apu/dmc.cpp index 6e0031b9..ffe221f8 100755 --- a/higan/fc/apu/dmc.cpp +++ b/higan/fc/apu/dmc.cpp @@ -9,7 +9,7 @@ void APU::DMC::stop() { length_counter = 0; dma_delay_counter = 0; cpu.set_rdy_line(1); - cpu.set_rdy_addr({ false, 0u }); + cpu.set_rdy_addr(false); } uint8 APU::DMC::clock() { @@ -19,10 +19,10 @@ uint8 APU::DMC::clock() { dma_delay_counter--; if(dma_delay_counter == 1) { - cpu.set_rdy_addr({ true, uint16(0x8000 | read_addr) }); + cpu.set_rdy_addr(true, 0x8000 | read_addr); } else if(dma_delay_counter == 0) { cpu.set_rdy_line(1); - cpu.set_rdy_addr({ false, 0u }); + cpu.set_rdy_addr(false); dma_buffer = cpu.mdr(); have_dma_buffer = true; @@ -91,7 +91,7 @@ void APU::DMC::reset() { sample = 0; } -void APU::DMC::serialize(serializer &s) { +void APU::DMC::serialize(serializer& s) { s.integer(length_counter); s.integer(irq_pending); diff --git a/higan/fc/apu/envelope.cpp b/higan/fc/apu/envelope.cpp index 08b56ee8..8d0dbc7d 100755 --- a/higan/fc/apu/envelope.cpp +++ b/higan/fc/apu/envelope.cpp @@ -28,7 +28,7 @@ void APU::Envelope::reset() { decay_volume = 0; } -void APU::Envelope::serialize(serializer &s) { +void APU::Envelope::serialize(serializer& s) { s.integer(speed); s.integer(use_speed_as_volume); s.integer(loop_mode); diff --git a/higan/fc/apu/noise.cpp b/higan/fc/apu/noise.cpp index 74173802..65eee58d 100755 --- a/higan/fc/apu/noise.cpp +++ b/higan/fc/apu/noise.cpp @@ -44,7 +44,7 @@ void APU::Noise::reset() { lfsr = 1; } -void APU::Noise::serialize(serializer &s) { +void APU::Noise::serialize(serializer& s) { s.integer(length_counter); envelope.serialize(s); diff --git a/higan/fc/apu/pulse.cpp b/higan/fc/apu/pulse.cpp index e8305617..5f8abbcd 100755 --- a/higan/fc/apu/pulse.cpp +++ b/higan/fc/apu/pulse.cpp @@ -8,7 +8,7 @@ uint8 APU::Pulse::clock() { if(sweep.check_period() == false) return 0; if(length_counter == 0) return 0; - static const unsigned duty_table[] = { 1, 2, 4, 6 }; + static const unsigned duty_table[] = {1, 2, 4, 6}; uint8 result = (duty_counter < duty_table[duty]) ? envelope.volume() : 0; if(sweep.pulse_period < 0x008) result = 0; @@ -37,7 +37,7 @@ void APU::Pulse::reset() { period_counter = 1; } -void APU::Pulse::serialize(serializer &s) { +void APU::Pulse::serialize(serializer& s) { s.integer(length_counter); envelope.serialize(s); diff --git a/higan/fc/apu/serialization.cpp b/higan/fc/apu/serialization.cpp index 8d3230cf..5968a9c2 100755 --- a/higan/fc/apu/serialization.cpp +++ b/higan/fc/apu/serialization.cpp @@ -1,4 +1,4 @@ -void APU::serialize(serializer &s) { +void APU::serialize(serializer& s) { Thread::serialize(s); filter.serialize(s); @@ -13,13 +13,13 @@ void APU::serialize(serializer &s) { s.integer(cartridge_sample); } -void APU::Filter::serialize(serializer &s) { +void APU::Filter::serialize(serializer& s) { s.integer(hipass_strong); s.integer(hipass_weak); s.integer(lopass); } -void APU::FrameCounter::serialize(serializer &s) { +void APU::FrameCounter::serialize(serializer& s) { s.integer(irq_pending); s.integer(mode); diff --git a/higan/fc/apu/sweep.cpp b/higan/fc/apu/sweep.cpp index 8c0211b9..333ccae0 100755 --- a/higan/fc/apu/sweep.cpp +++ b/higan/fc/apu/sweep.cpp @@ -42,7 +42,7 @@ void APU::Sweep::power() { void APU::Sweep::reset() { } -void APU::Sweep::serialize(serializer &s) { +void APU::Sweep::serialize(serializer& s) { s.integer(shift); s.integer(decrement); s.integer(period); diff --git a/higan/fc/apu/triangle.cpp b/higan/fc/apu/triangle.cpp index 0b0b1358..1249b384 100755 --- a/higan/fc/apu/triangle.cpp +++ b/higan/fc/apu/triangle.cpp @@ -43,7 +43,7 @@ void APU::Triangle::reset() { reload_linear = 0; } -void APU::Triangle::serialize(serializer &s) { +void APU::Triangle::serialize(serializer& s) { s.integer(length_counter); s.integer(linear_length); diff --git a/higan/fc/cartridge/board/bandai-fcg.cpp b/higan/fc/cartridge/board/bandai-fcg.cpp index 1042be00..a23ad2a4 100755 --- a/higan/fc/cartridge/board/bandai-fcg.cpp +++ b/higan/fc/cartridge/board/bandai-fcg.cpp @@ -100,7 +100,7 @@ void reset() { irq_latch = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); s.array(chr_bank); @@ -111,7 +111,7 @@ void serialize(serializer &s) { s.integer(irq_latch); } -BandaiFCG(Markup::Node &document) : Board(document) { +BandaiFCG(Markup::Node& document) : Board(document) { } }; diff --git a/higan/fc/cartridge/board/board.cpp b/higan/fc/cartridge/board/board.cpp index 0ad56a29..383ebc88 100755 --- a/higan/fc/cartridge/board/board.cpp +++ b/higan/fc/cartridge/board/board.cpp @@ -77,12 +77,12 @@ void Board::power() { void Board::reset() { } -void Board::serialize(serializer &s) { +void Board::serialize(serializer& s) { if(prgram.size) s.array(prgram.data, prgram.size); if(chrram.size) s.array(chrram.data, chrram.size); } -Board::Board(Markup::Node &document) { +Board::Board(Markup::Node& document) { cartridge.board = this; auto cartridge = document["cartridge"]; @@ -119,7 +119,7 @@ Board::Board(Markup::Node &document) { Board::~Board() { } -Board* Board::load(const string &manifest) { +Board* Board::load(string manifest) { auto document = Markup::Document(manifest); cartridge.information.title = document["information/title"].text(); diff --git a/higan/fc/cartridge/board/board.hpp b/higan/fc/cartridge/board/board.hpp index 106b8b76..89106319 100755 --- a/higan/fc/cartridge/board/board.hpp +++ b/higan/fc/cartridge/board/board.hpp @@ -1,13 +1,13 @@ struct Board { struct Memory { - uint8_t *data; + uint8_t* data; unsigned size; bool writable; inline uint8 read(unsigned addr) const; inline void write(unsigned addr, uint8 data); - inline Memory(uint8_t *data, unsigned size) : data(data), size(size) {} + inline Memory(uint8_t* data, unsigned size) : data(data), size(size) {} inline Memory() : data(nullptr), size(0u), writable(false) {} inline ~Memory() { if(data) delete[] data; } }; @@ -29,10 +29,10 @@ struct Board { virtual void reset(); virtual void serialize(serializer&); - Board(Markup::Node &document); + Board(Markup::Node& document); virtual ~Board(); - static Board* load(const string &manifest); + static Board* load(string manifest); struct Information { string type; diff --git a/higan/fc/cartridge/board/konami-vrc1.cpp b/higan/fc/cartridge/board/konami-vrc1.cpp index 09b9bd4d..b91c2d8a 100755 --- a/higan/fc/cartridge/board/konami-vrc1.cpp +++ b/higan/fc/cartridge/board/konami-vrc1.cpp @@ -29,12 +29,12 @@ void reset() { vrc1.reset(); } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); vrc1.serialize(s); } -KonamiVRC1(Markup::Node &document) : Board(document), vrc1(*this) { +KonamiVRC1(Markup::Node& document) : Board(document), vrc1(*this) { } }; diff --git a/higan/fc/cartridge/board/konami-vrc2.cpp b/higan/fc/cartridge/board/konami-vrc2.cpp index ca1d0897..826ac31f 100755 --- a/higan/fc/cartridge/board/konami-vrc2.cpp +++ b/higan/fc/cartridge/board/konami-vrc2.cpp @@ -44,12 +44,12 @@ void reset() { vrc2.reset(); } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); vrc2.serialize(s); } -KonamiVRC2(Markup::Node &document) : Board(document), vrc2(*this) { +KonamiVRC2(Markup::Node& document) : Board(document), vrc2(*this) { settings.pinout.a0 = 1 << decimal(document["cartridge"]["chip"]["pinout"]["a0"].data); settings.pinout.a1 = 1 << decimal(document["cartridge"]["chip"]["pinout"]["a1"].data); } diff --git a/higan/fc/cartridge/board/konami-vrc3.cpp b/higan/fc/cartridge/board/konami-vrc3.cpp index 018a9631..accda1ad 100755 --- a/higan/fc/cartridge/board/konami-vrc3.cpp +++ b/higan/fc/cartridge/board/konami-vrc3.cpp @@ -45,12 +45,12 @@ void reset() { vrc3.reset(); } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); vrc3.serialize(s); } -KonamiVRC3(Markup::Node &document) : Board(document), vrc3(*this) { +KonamiVRC3(Markup::Node& document) : Board(document), vrc3(*this) { settings.mirror = document["cartridge"]["mirror"]["mode"].data == "vertical" ? 1 : 0; } diff --git a/higan/fc/cartridge/board/konami-vrc4.cpp b/higan/fc/cartridge/board/konami-vrc4.cpp index 34762e39..a9988afe 100755 --- a/higan/fc/cartridge/board/konami-vrc4.cpp +++ b/higan/fc/cartridge/board/konami-vrc4.cpp @@ -48,12 +48,12 @@ void reset() { vrc4.reset(); } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); vrc4.serialize(s); } -KonamiVRC4(Markup::Node &document) : Board(document), vrc4(*this) { +KonamiVRC4(Markup::Node& document) : Board(document), vrc4(*this) { settings.pinout.a0 = 1 << decimal(document["cartridge"]["chip"]["pinout"]["a0"].data); settings.pinout.a1 = 1 << decimal(document["cartridge"]["chip"]["pinout"]["a1"].data); } diff --git a/higan/fc/cartridge/board/konami-vrc6.cpp b/higan/fc/cartridge/board/konami-vrc6.cpp index 5e19d031..f4e5e95b 100755 --- a/higan/fc/cartridge/board/konami-vrc6.cpp +++ b/higan/fc/cartridge/board/konami-vrc6.cpp @@ -27,7 +27,7 @@ void chr_write(unsigned addr, uint8 data) { return Board::chr_write(vrc6.chr_addr(addr), data); } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); vrc6.serialize(s); } @@ -36,7 +36,7 @@ void main() { vrc6.main(); } void power() { vrc6.power(); } void reset() { vrc6.reset(); } -KonamiVRC6(Markup::Node &document) : Board(document), vrc6(*this) { +KonamiVRC6(Markup::Node& document) : Board(document), vrc6(*this) { } }; diff --git a/higan/fc/cartridge/board/konami-vrc7.cpp b/higan/fc/cartridge/board/konami-vrc7.cpp index 67b1f87a..8c72a3f0 100755 --- a/higan/fc/cartridge/board/konami-vrc7.cpp +++ b/higan/fc/cartridge/board/konami-vrc7.cpp @@ -36,12 +36,12 @@ void reset() { vrc7.reset(); } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); vrc7.serialize(s); } -KonamiVRC7(Markup::Node &document) : Board(document), vrc7(*this) { +KonamiVRC7(Markup::Node& document) : Board(document), vrc7(*this) { } }; diff --git a/higan/fc/cartridge/board/nes-axrom.cpp b/higan/fc/cartridge/board/nes-axrom.cpp index 5e25af98..6d468cfd 100755 --- a/higan/fc/cartridge/board/nes-axrom.cpp +++ b/higan/fc/cartridge/board/nes-axrom.cpp @@ -38,14 +38,14 @@ void reset() { mirror_select = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); s.integer(prg_bank); s.integer(mirror_select); } -NES_AxROM(Markup::Node &document) : Board(document) { +NES_AxROM(Markup::Node& document) : Board(document) { } }; diff --git a/higan/fc/cartridge/board/nes-bnrom.cpp b/higan/fc/cartridge/board/nes-bnrom.cpp index d21ea294..41723c13 100755 --- a/higan/fc/cartridge/board/nes-bnrom.cpp +++ b/higan/fc/cartridge/board/nes-bnrom.cpp @@ -40,12 +40,12 @@ void reset() { prg_bank = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); s.integer(prg_bank); } -NES_BNROM(Markup::Node &document) : Board(document) { +NES_BNROM(Markup::Node& document) : Board(document) { settings.mirror = document["cartridge"]["mirror"]["mode"].data == "vertical" ? 1 : 0; } diff --git a/higan/fc/cartridge/board/nes-cnrom.cpp b/higan/fc/cartridge/board/nes-cnrom.cpp index d5968c25..aafc7bda 100755 --- a/higan/fc/cartridge/board/nes-cnrom.cpp +++ b/higan/fc/cartridge/board/nes-cnrom.cpp @@ -42,12 +42,12 @@ void reset() { chr_bank = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); s.integer(chr_bank); } -NES_CNROM(Markup::Node &document) : Board(document) { +NES_CNROM(Markup::Node& document) : Board(document) { settings.mirror = document["cartridge"]["mirror"]["mode"].data == "vertical" ? 1 : 0; } diff --git a/higan/fc/cartridge/board/nes-exrom.cpp b/higan/fc/cartridge/board/nes-exrom.cpp index 2390ec8a..42bd56c9 100755 --- a/higan/fc/cartridge/board/nes-exrom.cpp +++ b/higan/fc/cartridge/board/nes-exrom.cpp @@ -41,12 +41,12 @@ void reset() { mmc5.reset(); } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); mmc5.serialize(s); } -NES_ExROM(Markup::Node &document) : Board(document), mmc5(*this) { +NES_ExROM(Markup::Node& document) : Board(document), mmc5(*this) { revision = Revision::ELROM; } diff --git a/higan/fc/cartridge/board/nes-fxrom.cpp b/higan/fc/cartridge/board/nes-fxrom.cpp index ba6ca275..2c79e50b 100755 --- a/higan/fc/cartridge/board/nes-fxrom.cpp +++ b/higan/fc/cartridge/board/nes-fxrom.cpp @@ -72,7 +72,7 @@ void reset() { latch[1] = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); s.integer(prg_bank); @@ -84,7 +84,7 @@ void serialize(serializer &s) { s.array(latch); } -NES_FxROM(Markup::Node &document) : Board(document) { +NES_FxROM(Markup::Node& document) : Board(document) { revision = Revision::FKROM; } diff --git a/higan/fc/cartridge/board/nes-gxrom.cpp b/higan/fc/cartridge/board/nes-gxrom.cpp index 9b572710..36548d18 100755 --- a/higan/fc/cartridge/board/nes-gxrom.cpp +++ b/higan/fc/cartridge/board/nes-gxrom.cpp @@ -48,13 +48,13 @@ void reset() { chr_bank = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); s.integer(prg_bank); s.integer(chr_bank); } -NES_GxROM(Markup::Node &document) : Board(document) { +NES_GxROM(Markup::Node& document) : Board(document) { settings.mirror = document["cartridge"]["mirror"]["mode"].data == "vertical" ? 1 : 0; } diff --git a/higan/fc/cartridge/board/nes-hkrom.cpp b/higan/fc/cartridge/board/nes-hkrom.cpp index 6ab14e08..660785ec 100755 --- a/higan/fc/cartridge/board/nes-hkrom.cpp +++ b/higan/fc/cartridge/board/nes-hkrom.cpp @@ -37,12 +37,12 @@ void reset() { mmc6.reset(); } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); mmc6.serialize(s); } -NES_HKROM(Markup::Node &document) : Board(document), mmc6(*this) { +NES_HKROM(Markup::Node& document) : Board(document), mmc6(*this) { } }; diff --git a/higan/fc/cartridge/board/nes-nrom.cpp b/higan/fc/cartridge/board/nes-nrom.cpp index fbecddf6..490d2094 100755 --- a/higan/fc/cartridge/board/nes-nrom.cpp +++ b/higan/fc/cartridge/board/nes-nrom.cpp @@ -32,11 +32,11 @@ void chr_write(unsigned addr, uint8 data) { if(chrram.size) return chrram.write(addr, data); } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); } -NES_NROM(Markup::Node &document) : Board(document) { +NES_NROM(Markup::Node& document) : Board(document) { settings.mirror = document["cartridge"]["mirror"]["mode"].data == "vertical" ? 1 : 0; } diff --git a/higan/fc/cartridge/board/nes-pxrom.cpp b/higan/fc/cartridge/board/nes-pxrom.cpp index 1715cb97..f6b0510e 100755 --- a/higan/fc/cartridge/board/nes-pxrom.cpp +++ b/higan/fc/cartridge/board/nes-pxrom.cpp @@ -78,7 +78,7 @@ void reset() { latch[1] = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); s.integer(prg_bank); @@ -90,7 +90,7 @@ void serialize(serializer &s) { s.array(latch); } -NES_PxROM(Markup::Node &document) : Board(document) { +NES_PxROM(Markup::Node& document) : Board(document) { revision = Revision::PNROM; } diff --git a/higan/fc/cartridge/board/nes-sxrom.cpp b/higan/fc/cartridge/board/nes-sxrom.cpp index 35ae390a..7f51a6b1 100755 --- a/higan/fc/cartridge/board/nes-sxrom.cpp +++ b/higan/fc/cartridge/board/nes-sxrom.cpp @@ -89,12 +89,12 @@ void reset() { mmc1.reset(); } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); mmc1.serialize(s); } -NES_SxROM(Markup::Node &document) : Board(document), mmc1(*this) { +NES_SxROM(Markup::Node& document) : Board(document), mmc1(*this) { revision = Revision::SXROM; } diff --git a/higan/fc/cartridge/board/nes-txrom.cpp b/higan/fc/cartridge/board/nes-txrom.cpp index ae8fab2d..ee36d552 100755 --- a/higan/fc/cartridge/board/nes-txrom.cpp +++ b/higan/fc/cartridge/board/nes-txrom.cpp @@ -55,12 +55,12 @@ void reset() { mmc3.reset(); } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); mmc3.serialize(s); } -NES_TxROM(Markup::Node &document) : Board(document), mmc3(*this) { +NES_TxROM(Markup::Node& document) : Board(document), mmc3(*this) { revision = Revision::TLROM; } diff --git a/higan/fc/cartridge/board/nes-uxrom.cpp b/higan/fc/cartridge/board/nes-uxrom.cpp index 8dbbf0f8..7aced28e 100755 --- a/higan/fc/cartridge/board/nes-uxrom.cpp +++ b/higan/fc/cartridge/board/nes-uxrom.cpp @@ -42,13 +42,13 @@ void reset() { prg_bank = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); s.integer(prg_bank); } -NES_UxROM(Markup::Node &document) : Board(document) { +NES_UxROM(Markup::Node& document) : Board(document) { settings.mirror = document["cartridge"]["mirror"]["mode"].data == "vertical" ? 1 : 0; } diff --git a/higan/fc/cartridge/board/sunsoft-5b.cpp b/higan/fc/cartridge/board/sunsoft-5b.cpp index 3e1a8748..bbfc4186 100755 --- a/higan/fc/cartridge/board/sunsoft-5b.cpp +++ b/higan/fc/cartridge/board/sunsoft-5b.cpp @@ -42,7 +42,7 @@ struct Pulse { output = 0; } - void serialize(serializer &s) { + void serialize(serializer& s) { s.integer(disable); s.integer(frequency); s.integer(volume); @@ -190,8 +190,8 @@ void reset() { mmu_port = 0; apu_port = 0; - for(auto &n : prg_bank) n = 0; - for(auto &n : chr_bank) n = 0; + for(auto& n : prg_bank) n = 0; + for(auto& n : chr_bank) n = 0; mirror = 0; irq_enable = 0; irq_counter_enable = 0; @@ -202,7 +202,7 @@ void reset() { pulse[2].reset(); } -void serialize(serializer &s) { +void serialize(serializer& s) { Board::serialize(s); s.integer(mmu_port); @@ -220,7 +220,7 @@ void serialize(serializer &s) { pulse[2].serialize(s); } -Sunsoft5B(Markup::Node &document) : Board(document) { +Sunsoft5B(Markup::Node& document) : Board(document) { } }; diff --git a/higan/fc/cartridge/cartridge.cpp b/higan/fc/cartridge/cartridge.cpp index 6c980fe2..57dc723b 100755 --- a/higan/fc/cartridge/cartridge.cpp +++ b/higan/fc/cartridge/cartridge.cpp @@ -32,7 +32,7 @@ void Cartridge::load() { sha256_final(&sha); sha256_hash(&sha, hash); string result; - for(auto &byte : hash) result.append(hex<2>(byte)); + for(auto& byte : hash) result.append(hex<2>(byte)); sha256 = result; system.load(); @@ -78,7 +78,7 @@ void Cartridge::scanline(unsigned y) { return board->scanline(y); } -void Cartridge::serialize(serializer &s) { +void Cartridge::serialize(serializer& s) { Thread::serialize(s); return board->serialize(s); } diff --git a/higan/fc/cartridge/chip/chip.cpp b/higan/fc/cartridge/chip/chip.cpp index 1d0f9fb6..e3cabdcf 100755 --- a/higan/fc/cartridge/chip/chip.cpp +++ b/higan/fc/cartridge/chip/chip.cpp @@ -13,5 +13,5 @@ void Chip::tick() { board.tick(); } -Chip::Chip(Board &board) : board(board) { +Chip::Chip(Board& board) : board(board) { } diff --git a/higan/fc/cartridge/chip/chip.hpp b/higan/fc/cartridge/chip/chip.hpp index 8753c66b..3c331a9b 100755 --- a/higan/fc/cartridge/chip/chip.hpp +++ b/higan/fc/cartridge/chip/chip.hpp @@ -1,7 +1,7 @@ struct Board; struct Chip { - Board &board; + Board& board; void tick(); - Chip(Board &board); + Chip(Board& board); }; diff --git a/higan/fc/cartridge/chip/mmc1.cpp b/higan/fc/cartridge/chip/mmc1.cpp index 15dc3097..3983bdaf 100755 --- a/higan/fc/cartridge/chip/mmc1.cpp +++ b/higan/fc/cartridge/chip/mmc1.cpp @@ -115,7 +115,7 @@ void reset() { prg_bank = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { s.integer(writedelay); s.integer(shiftaddr); s.integer(shiftdata); @@ -129,7 +129,7 @@ void serialize(serializer &s) { s.integer(prg_bank); } -MMC1(Board &board) : Chip(board) { +MMC1(Board& board) : Chip(board) { revision = Revision::MMC1B2; } diff --git a/higan/fc/cartridge/chip/mmc3.cpp b/higan/fc/cartridge/chip/mmc3.cpp index d4203a0a..a051d918 100755 --- a/higan/fc/cartridge/chip/mmc3.cpp +++ b/higan/fc/cartridge/chip/mmc3.cpp @@ -165,7 +165,7 @@ void reset() { chr_abus = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { s.integer(chr_mode); s.integer(prg_mode); s.integer(bank_select); @@ -183,7 +183,7 @@ void serialize(serializer &s) { s.integer(chr_abus); } -MMC3(Board &board) : Chip(board) { +MMC3(Board& board) : Chip(board) { } }; diff --git a/higan/fc/cartridge/chip/mmc5.cpp b/higan/fc/cartridge/chip/mmc5.cpp index 6f62e4f9..5cd94fa0 100755 --- a/higan/fc/cartridge/chip/mmc5.cpp +++ b/higan/fc/cartridge/chip/mmc5.cpp @@ -399,13 +399,13 @@ void power() { } void reset() { - for(auto &n : exram) n = 0xff; + for(auto& n : exram) n = 0xff; prg_mode = 3; chr_mode = 0; - for(auto &n : prgram_write_protect) n = 0; + for(auto& n : prgram_write_protect) n = 0; exram_mode = 0; - for(auto &n : nametable_mode) n = 0; + for(auto& n : nametable_mode) n = 0; fillmode_tile = 0; fillmode_color = 0; ram_select = 0; @@ -414,8 +414,8 @@ void reset() { prg_bank[1] = 0x00; prg_bank[2] = 0x00; prg_bank[3] = 0xff; - for(auto &n : chr_sprite_bank) n = 0; - for(auto &n : chr_bg_bank) n = 0; + for(auto& n : chr_sprite_bank) n = 0; + for(auto& n : chr_bg_bank) n = 0; chr_bank_hi = 0; vs_enable = 0; vs_side = 0; @@ -433,7 +433,7 @@ void reset() { in_frame = 0; vcounter = 0; hcounter = 0; - for(auto &n : chr_access) n = 0; + for(auto& n : chr_access) n = 0; chr_active = 0; sprite_8x16 = 0; @@ -445,21 +445,21 @@ void reset() { vs_hpos = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { s.array(exram); s.integer(prg_mode); s.integer(chr_mode); - for(auto &n : prgram_write_protect) s.integer(n); + for(auto& n : prgram_write_protect) s.integer(n); s.integer(exram_mode); - for(auto &n : nametable_mode) s.integer(n); + for(auto& n : nametable_mode) s.integer(n); s.integer(fillmode_tile); s.integer(fillmode_color); s.integer(ram_select); s.integer(ram_bank); - for(auto &n : prg_bank) s.integer(n); - for(auto &n : chr_sprite_bank) s.integer(n); - for(auto &n : chr_bg_bank) s.integer(n); + for(auto& n : prg_bank) s.integer(n); + for(auto& n : chr_sprite_bank) s.integer(n); + for(auto& n : chr_bg_bank) s.integer(n); s.integer(chr_bank_hi); s.integer(vs_enable); s.integer(vs_side); @@ -478,7 +478,7 @@ void serialize(serializer &s) { s.integer(vcounter); s.integer(hcounter); - for(auto &n : chr_access) s.integer(n); + for(auto& n : chr_access) s.integer(n); s.integer(chr_active); s.integer(sprite_8x16); @@ -490,7 +490,7 @@ void serialize(serializer &s) { s.integer(vs_hpos); } -MMC5(Board &board) : Chip(board) { +MMC5(Board& board) : Chip(board) { revision = Revision::MMC5; } diff --git a/higan/fc/cartridge/chip/mmc6.cpp b/higan/fc/cartridge/chip/mmc6.cpp index ce43d0dd..624ed205 100755 --- a/higan/fc/cartridge/chip/mmc6.cpp +++ b/higan/fc/cartridge/chip/mmc6.cpp @@ -161,11 +161,11 @@ void reset() { prg_mode = 0; ram_enable = 0; bank_select = 0; - for(auto &n : prg_bank) n = 0; - for(auto &n : chr_bank) n = 0; + for(auto& n : prg_bank) n = 0; + for(auto& n : chr_bank) n = 0; mirror = 0; - for(auto &n : ram_readable) n = 0; - for(auto &n : ram_writable) n = 0; + for(auto& n : ram_readable) n = 0; + for(auto& n : ram_writable) n = 0; irq_latch = 0; irq_counter = 0; irq_enable = 0; @@ -175,16 +175,16 @@ void reset() { chr_abus = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { s.integer(chr_mode); s.integer(prg_mode); s.integer(ram_enable); s.integer(bank_select); - for(auto &n : prg_bank) s.integer(n); - for(auto &n : chr_bank) s.integer(n); + for(auto& n : prg_bank) s.integer(n); + for(auto& n : chr_bank) s.integer(n); s.integer(mirror); - for(auto &n : ram_readable) s.integer(n); - for(auto &n : ram_writable) s.integer(n); + for(auto& n : ram_readable) s.integer(n); + for(auto& n : ram_writable) s.integer(n); s.integer(irq_latch); s.integer(irq_counter); s.integer(irq_enable); @@ -194,7 +194,7 @@ void serialize(serializer &s) { s.integer(chr_abus); } -MMC6(Board &board) : Chip(board) { +MMC6(Board& board) : Chip(board) { } }; diff --git a/higan/fc/cartridge/chip/vrc1.cpp b/higan/fc/cartridge/chip/vrc1.cpp index a64c0fa1..76ca0784 100755 --- a/higan/fc/cartridge/chip/vrc1.cpp +++ b/higan/fc/cartridge/chip/vrc1.cpp @@ -61,20 +61,20 @@ void power() { } void reset() { - for(auto &n : prg_bank) n = 0; - for(auto &n : chr_banklo) n = 0; - for(auto &n : chr_bankhi) n = 0; + for(auto& n : prg_bank) n = 0; + for(auto& n : chr_banklo) n = 0; + for(auto& n : chr_bankhi) n = 0; mirror = 0; } -void serialize(serializer &s) { - for(auto &n : prg_bank) s.integer(n); - for(auto &n : chr_banklo) s.integer(n); - for(auto &n : chr_bankhi) s.integer(n); +void serialize(serializer& s) { + for(auto& n : prg_bank) s.integer(n); + for(auto& n : chr_banklo) s.integer(n); + for(auto& n : chr_bankhi) s.integer(n); s.integer(mirror); } -VRC1(Board &board) : Chip(board) { +VRC1(Board& board) : Chip(board) { } }; diff --git a/higan/fc/cartridge/chip/vrc2.cpp b/higan/fc/cartridge/chip/vrc2.cpp index 207387fb..94bfb604 100755 --- a/higan/fc/cartridge/chip/vrc2.cpp +++ b/higan/fc/cartridge/chip/vrc2.cpp @@ -91,20 +91,20 @@ void power() { } void reset() { - for(auto &n : prg_bank) n = 0; - for(auto &n : chr_bank) n = 0; + for(auto& n : prg_bank) n = 0; + for(auto& n : chr_bank) n = 0; mirror = 0; latch = 0; } -void serialize(serializer &s) { - for(auto &n : prg_bank) s.integer(n); - for(auto &n : chr_bank) s.integer(n); +void serialize(serializer& s) { + for(auto& n : prg_bank) s.integer(n); + for(auto& n : chr_bank) s.integer(n); s.integer(mirror); s.integer(latch); } -VRC2(Board &board) : Chip(board) { +VRC2(Board& board) : Chip(board) { } }; diff --git a/higan/fc/cartridge/chip/vrc3.cpp b/higan/fc/cartridge/chip/vrc3.cpp index 7ced8972..56277586 100755 --- a/higan/fc/cartridge/chip/vrc3.cpp +++ b/higan/fc/cartridge/chip/vrc3.cpp @@ -84,7 +84,7 @@ void reset() { irq_line = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { s.integer(prg_bank); s.integer(irq_mode); s.integer(irq_enable); @@ -94,7 +94,7 @@ void serialize(serializer &s) { s.integer(irq_line); } -VRC3(Board &board) : Chip(board) { +VRC3(Board& board) : Chip(board) { } }; diff --git a/higan/fc/cartridge/chip/vrc4.cpp b/higan/fc/cartridge/chip/vrc4.cpp index 10c93ee9..0f8a7403 100755 --- a/higan/fc/cartridge/chip/vrc4.cpp +++ b/higan/fc/cartridge/chip/vrc4.cpp @@ -148,9 +148,9 @@ void power() { void reset() { prg_mode = 0; - for(auto &n : prg_bank) n = 0; + for(auto& n : prg_bank) n = 0; mirror = 0; - for(auto &n : chr_bank) n = 0; + for(auto& n : chr_bank) n = 0; irq_latch = 0; irq_mode = 0; @@ -162,11 +162,11 @@ void reset() { irq_line = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { s.integer(prg_mode); - for(auto &n : prg_bank) s.integer(n); + for(auto& n : prg_bank) s.integer(n); s.integer(mirror); - for(auto &n : chr_bank) s.integer(n); + for(auto& n : chr_bank) s.integer(n); s.integer(irq_latch); s.integer(irq_mode); @@ -178,7 +178,7 @@ void serialize(serializer &s) { s.integer(irq_line); } -VRC4(Board &board) : Chip(board) { +VRC4(Board& board) : Chip(board) { } }; diff --git a/higan/fc/cartridge/chip/vrc6.cpp b/higan/fc/cartridge/chip/vrc6.cpp index ed42a4ee..c2af0a93 100755 --- a/higan/fc/cartridge/chip/vrc6.cpp +++ b/higan/fc/cartridge/chip/vrc6.cpp @@ -33,7 +33,7 @@ struct Pulse { if(enable == false) output = 0; } - void serialize(serializer &s) { + void serialize(serializer& s) { s.integer(mode); s.integer(duty); s.integer(volume); @@ -73,7 +73,7 @@ struct Sawtooth { if(enable == false) output = 0; } - void serialize(serializer &s) { + void serialize(serializer& s) { s.integer(rate); s.integer(enable); s.integer(frequency); @@ -297,7 +297,7 @@ void reset() { sawtooth.output = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { pulse1.serialize(s); pulse2.serialize(s); sawtooth.serialize(s); @@ -315,7 +315,7 @@ void serialize(serializer &s) { s.integer(irq_line); } -VRC6(Board &board) : Chip(board) { +VRC6(Board& board) : Chip(board) { } }; diff --git a/higan/fc/cartridge/chip/vrc7.cpp b/higan/fc/cartridge/chip/vrc7.cpp index fe777071..6c752c5a 100755 --- a/higan/fc/cartridge/chip/vrc7.cpp +++ b/higan/fc/cartridge/chip/vrc7.cpp @@ -119,8 +119,8 @@ void power() { } void reset() { - for(auto &n : prg_bank) n = 0; - for(auto &n : chr_bank) n = 0; + for(auto& n : prg_bank) n = 0; + for(auto& n : chr_bank) n = 0; mirror = 0; irq_latch = 0; @@ -133,7 +133,7 @@ void reset() { irq_line = 0; } -void serialize(serializer &s) { +void serialize(serializer& s) { s.array(prg_bank); s.array(chr_bank); s.integer(mirror); @@ -148,7 +148,7 @@ void serialize(serializer &s) { s.integer(irq_line); } -VRC7(Board &board) : Chip(board) { +VRC7(Board& board) : Chip(board) { } }; diff --git a/higan/fc/cheat/cheat.cpp b/higan/fc/cheat/cheat.cpp index b2f5b133..148e4b76 100755 --- a/higan/fc/cheat/cheat.cpp +++ b/higan/fc/cheat/cheat.cpp @@ -4,20 +4,20 @@ namespace Famicom { Cheat cheat; -bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned &comp) { +bool Cheat::decode(string code_, unsigned& addr, unsigned& data, unsigned& comp) { static bool initialize = false; static uint8 mapProActionReplay[256], mapGameGenie[256]; if(initialize == false) { initialize = true; - for(auto &n : mapProActionReplay) n = ~0; + for(auto& n : mapProActionReplay) n = ~0; mapProActionReplay['0'] = 0; mapProActionReplay['1'] = 1; mapProActionReplay['2'] = 2; mapProActionReplay['3'] = 3; mapProActionReplay['4'] = 4; mapProActionReplay['5'] = 5; mapProActionReplay['6'] = 6; mapProActionReplay['7'] = 7; mapProActionReplay['8'] = 8; mapProActionReplay['9'] = 9; mapProActionReplay['A'] = 10; mapProActionReplay['B'] = 11; mapProActionReplay['C'] = 12; mapProActionReplay['D'] = 13; mapProActionReplay['E'] = 14; mapProActionReplay['F'] = 15; - for(auto &n : mapGameGenie) n = ~0; + for(auto& n : mapGameGenie) n = ~0; mapGameGenie['A'] = 0; mapGameGenie['P'] = 1; mapGameGenie['Z'] = 2; mapGameGenie['L'] = 3; mapGameGenie['G'] = 4; mapGameGenie['I'] = 5; mapGameGenie['T'] = 6; mapGameGenie['Y'] = 7; mapGameGenie['E'] = 8; mapGameGenie['O'] = 9; mapGameGenie['X'] = 10; mapGameGenie['U'] = 11; @@ -29,7 +29,7 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned unsigned length = code.length(), bits = 0; if(code.wildcard("????:??")) { - code = { substr(code, 0, 4), substr(code, 5, 2) }; + code = {substr(code, 0, 4), substr(code, 5, 2)}; for(unsigned n = 0; n < 6; n++) if(mapProActionReplay[code[n]] > 15) return false; bits = hex(code); addr = (bits >> 8) & 0xffff; @@ -39,7 +39,7 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned } if(code.wildcard("????:??:??")) { - code = { substr(code, 0, 4), substr(code, 5, 2), substr(code, 8, 2) }; + code = {substr(code, 0, 4), substr(code, 5, 2), substr(code, 8, 2)}; for(unsigned n = 0; n < 8; n++) if(mapProActionReplay[code[n]] > 15) return false; bits = hex(code); addr = (bits >> 16) & 0xffff; @@ -51,8 +51,8 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned if(length == 6) { for(unsigned n = 0; n < 6; n++) if(mapGameGenie[code[n]] > 15) return false; for(unsigned n = 0; n < 6; n++) bits |= mapGameGenie[code[n]] << (20 - n * 4); - unsigned addrTable[] = { 10, 9, 8, 7, 2, 1, 0, 19, 14, 13, 12, 11, 6, 5, 4 }; - unsigned dataTable[] = { 23, 18, 17, 16, 3, 22, 21, 20 }; + unsigned addrTable[] = {10, 9, 8, 7, 2, 1, 0, 19, 14, 13, 12, 11, 6, 5, 4}; + unsigned dataTable[] = {23, 18, 17, 16, 3, 22, 21, 20}; addr = 0x8000, data = 0x00, comp = ~0; for(unsigned n = 0; n < 15; n++) addr |= bits & (1 << addrTable[n]) ? 0x4000 >> n : 0; @@ -63,9 +63,9 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned if(length == 8) { for(unsigned n = 0; n < 8; n++) if(mapGameGenie[code[n]] > 15) return false; for(unsigned n = 0; n < 8; n++) bits |= mapGameGenie[code[n]] << (28 - n * 4); - unsigned addrTable[] = { 18, 17, 16, 15, 10, 9, 8, 27, 22, 21, 20, 19, 14, 13, 12 }; - unsigned dataTable[] = { 31, 26, 25, 24, 3, 30, 29, 28 }; - unsigned compTable[] = { 7, 2, 1, 0, 11, 6, 5,4 }; + unsigned addrTable[] = {18, 17, 16, 15, 10, 9, 8, 27, 22, 21, 20, 19, 14, 13, 12}; + unsigned dataTable[] = {31, 26, 25, 24, 3, 30, 29, 28}; + unsigned compTable[] = {7, 2, 1, 0, 11, 6, 5, 4}; addr = 0x8000, data = 0x00, comp = 0x00; for(unsigned n = 0; n < 15; n++) addr |= bits & (1 << addrTable[n]) ? 0x4000 >> n : 0; @@ -78,7 +78,7 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned } void Cheat::synchronize() { - for(auto &n : override) n = false; + for(auto& n : override) n = false; for(unsigned n = 0; n < size(); n++) { override[operator[](n).addr] = true; diff --git a/higan/fc/cheat/cheat.hpp b/higan/fc/cheat/cheat.hpp index 4e6514e5..88996ab5 100755 --- a/higan/fc/cheat/cheat.hpp +++ b/higan/fc/cheat/cheat.hpp @@ -5,7 +5,7 @@ struct CheatCode { }; struct Cheat : public vector { - static bool decode(const string &code, unsigned &addr, unsigned &data, unsigned &comp); + static bool decode(string code, unsigned& addr, unsigned& data, unsigned& comp); void synchronize(); bool override[65536]; diff --git a/higan/fc/cpu/cpu.cpp b/higan/fc/cpu/cpu.cpp index b95d80bf..652e1385 100755 --- a/higan/fc/cpu/cpu.cpp +++ b/higan/fc/cpu/cpu.cpp @@ -60,7 +60,8 @@ void CPU::reset() { status.irq_apu_line = 0; status.rdy_line = 1; - status.rdy_addr = { false, 0x0000 }; + status.rdy_addr_valid = false; + status.rdy_addr_value = 0x0000; status.oam_dma_pending = false; status.oam_dma_page = 0x00; diff --git a/higan/fc/cpu/cpu.hpp b/higan/fc/cpu/cpu.hpp index a2b20bac..b265292b 100755 --- a/higan/fc/cpu/cpu.hpp +++ b/higan/fc/cpu/cpu.hpp @@ -9,7 +9,8 @@ struct CPU : Processor::R6502, Thread { bool irq_apu_line; bool rdy_line; - optional rdy_addr; + bool rdy_addr_valid; + uint16 rdy_addr_value; bool oam_dma_pending; uint8 oam_dma_page; @@ -49,7 +50,7 @@ struct CPU : Processor::R6502, Thread { void set_irq_apu_line(bool); void set_rdy_line(bool); - void set_rdy_addr(optional); + void set_rdy_addr(bool valid, uint16 value = 0); }; extern CPU cpu; diff --git a/higan/fc/cpu/serialization.cpp b/higan/fc/cpu/serialization.cpp index eae53f5b..833453e7 100755 --- a/higan/fc/cpu/serialization.cpp +++ b/higan/fc/cpu/serialization.cpp @@ -1,4 +1,4 @@ -void CPU::serialize(serializer &s) { +void CPU::serialize(serializer& s) { R6502::serialize(s); Thread::serialize(s); @@ -11,12 +11,8 @@ void CPU::serialize(serializer &s) { s.integer(status.irq_apu_line); s.integer(status.rdy_line); - bool rdy_addr_valid = status.rdy_addr; - unsigned rdy_addr_value = 0; - if(rdy_addr_valid) rdy_addr_value = status.rdy_addr(); - s.integer(rdy_addr_valid); - s.integer(rdy_addr_value); - if(rdy_addr_valid) status.rdy_addr = rdy_addr_value; + s.integer(status.rdy_addr_valid); + s.integer(status.rdy_addr_value); s.integer(status.oam_dma_pending); s.integer(status.oam_dma_page); diff --git a/higan/fc/cpu/timing.cpp b/higan/fc/cpu/timing.cpp index bce0f1ff..86547105 100755 --- a/higan/fc/cpu/timing.cpp +++ b/higan/fc/cpu/timing.cpp @@ -6,7 +6,7 @@ uint8 CPU::op_read(uint16 addr) { } while(status.rdy_line == 0) { - regs.mdr = bus.read(status.rdy_addr ? status.rdy_addr() : addr); + regs.mdr = bus.read(status.rdy_addr_valid ? status.rdy_addr_value : addr); add_clocks(12); } @@ -58,6 +58,7 @@ void CPU::set_rdy_line(bool line) { status.rdy_line = line; } -void CPU::set_rdy_addr(optional addr) { - status.rdy_addr = addr; +void CPU::set_rdy_addr(bool valid, uint16 value) { + status.rdy_addr_valid = valid; + status.rdy_addr_value = value; } diff --git a/higan/fc/fc.hpp b/higan/fc/fc.hpp index 073f4a64..3fce8b02 100755 --- a/higan/fc/fc.hpp +++ b/higan/fc/fc.hpp @@ -33,7 +33,7 @@ namespace Famicom { clock = 0; } - inline void serialize(serializer &s) { + inline void serialize(serializer& s) { s.integer(frequency); s.integer(clock); } diff --git a/higan/fc/input/input.hpp b/higan/fc/input/input.hpp index 0f6b1b6f..8e424761 100755 --- a/higan/fc/input/input.hpp +++ b/higan/fc/input/input.hpp @@ -11,7 +11,7 @@ struct Input { void power(); void reset(); - void serialize(serializer &s); + void serialize(serializer&); private: Device port1; diff --git a/higan/fc/input/serialization.cpp b/higan/fc/input/serialization.cpp index 481bf81c..c0eb132f 100755 --- a/higan/fc/input/serialization.cpp +++ b/higan/fc/input/serialization.cpp @@ -1,4 +1,4 @@ -void Input::serialize(serializer &s) { +void Input::serialize(serializer& s) { s.integer((unsigned&)port1); s.integer((unsigned&)port2); diff --git a/higan/fc/ppu/ppu.cpp b/higan/fc/ppu/ppu.cpp index 32a0e1a8..dcae5631 100755 --- a/higan/fc/ppu/ppu.cpp +++ b/higan/fc/ppu/ppu.cpp @@ -92,10 +92,10 @@ void PPU::reset() { //$2003 status.oam_addr = 0x00; - for(auto &n : buffer) n = 0; - for(auto &n : ciram ) n = 0; - for(auto &n : cgram ) n = 0; - for(auto &n : oam ) n = 0; + for(auto& n : buffer) n = 0; + for(auto& n : ciram ) n = 0; + for(auto& n : cgram ) n = 0; + for(auto& n : oam ) n = 0; } uint8 PPU::read(uint16 addr) { @@ -281,7 +281,7 @@ void PPU::scrolly_increment() { // void PPU::raster_pixel() { - uint32 *output = buffer + status.ly * 256; + uint32* output = buffer + status.ly * 256; unsigned mask = 0x8000 >> (status.xaddr + (status.lx & 7)); unsigned palette = 0, object_palette = 0; diff --git a/higan/fc/ppu/serialization.cpp b/higan/fc/ppu/serialization.cpp index 2dd67b6b..12b17a8c 100755 --- a/higan/fc/ppu/serialization.cpp +++ b/higan/fc/ppu/serialization.cpp @@ -1,4 +1,4 @@ -void PPU::serialize(serializer &s) { +void PPU::serialize(serializer& s) { Thread::serialize(s); s.integer(status.mdr); diff --git a/higan/fc/system/serialization.cpp b/higan/fc/system/serialization.cpp index 8db2dcc8..1d2c750f 100755 --- a/higan/fc/system/serialization.cpp +++ b/higan/fc/system/serialization.cpp @@ -15,7 +15,7 @@ serializer System::serialize() { return s; } -bool System::unserialize(serializer &s) { +bool System::unserialize(serializer& s) { unsigned signature, version; char hash[64], description[512]; @@ -32,10 +32,10 @@ bool System::unserialize(serializer &s) { return true; } -void System::serialize(serializer &s) { +void System::serialize(serializer& s) { } -void System::serialize_all(serializer &s) { +void System::serialize_all(serializer& s) { system.serialize(s); input.serialize(s); cartridge.serialize(s); diff --git a/higan/fc/video/video.hpp b/higan/fc/video/video.hpp index 067c9002..1dcac9c4 100755 --- a/higan/fc/video/video.hpp +++ b/higan/fc/video/video.hpp @@ -1,5 +1,5 @@ struct Video { - unsigned *palette; + unsigned* palette = nullptr; void generate_palette(); Video(); diff --git a/higan/gb/apu/apu.cpp b/higan/gb/apu/apu.cpp index 3fd2d109..3701c536 100755 --- a/higan/gb/apu/apu.cpp +++ b/higan/gb/apu/apu.cpp @@ -57,7 +57,7 @@ void APU::power() { create(Main, 4 * 1024 * 1024); for(unsigned n = 0xff10; n <= 0xff3f; n++) bus.mmio[n] = this; - for(auto &n : mmio_data) n = 0x00; + for(auto& n : mmio_data) n = 0x00; sequencer_base = 0; sequencer_step = 0; diff --git a/higan/gb/apu/master/master.cpp b/higan/gb/apu/master/master.cpp index af0fb69f..7e24161c 100755 --- a/higan/gb/apu/master/master.cpp +++ b/higan/gb/apu/master/master.cpp @@ -78,7 +78,7 @@ void APU::Master::power() { right = 0; } -void APU::Master::serialize(serializer &s) { +void APU::Master::serialize(serializer& s) { s.integer(left_in_enable); s.integer(left_volume); s.integer(right_in_enable); diff --git a/higan/gb/apu/noise/noise.cpp b/higan/gb/apu/noise/noise.cpp index f7c476e6..08b1c70c 100755 --- a/higan/gb/apu/noise/noise.cpp +++ b/higan/gb/apu/noise/noise.cpp @@ -20,9 +20,6 @@ void APU::Noise::run() { } void APU::Noise::clock_length() { -//if(counter && length) { -// if(--length == 0) enable = false; -//} if(enable && counter) { if(++length == 0) enable = false; } @@ -38,7 +35,6 @@ void APU::Noise::clock_envelope() { void APU::Noise::write(unsigned r, uint8 data) { if(r == 1) { //$ff20 NR41 - //length = 64 - (data & 0x3f); length = data & 0x3f; } @@ -66,7 +62,6 @@ void APU::Noise::write(unsigned r, uint8 data) { lfsr = ~0U; envelope_period = envelope_frequency; volume = envelope_volume; - //if(length == 0) length = 64; } } } @@ -90,7 +85,7 @@ void APU::Noise::power() { lfsr = 0; } -void APU::Noise::serialize(serializer &s) { +void APU::Noise::serialize(serializer& s) { s.integer(enable); s.integer(envelope_volume); diff --git a/higan/gb/apu/serialization.cpp b/higan/gb/apu/serialization.cpp index 072f1ff3..a9891838 100755 --- a/higan/gb/apu/serialization.cpp +++ b/higan/gb/apu/serialization.cpp @@ -1,6 +1,6 @@ #ifdef APU_CPP -void APU::serialize(serializer &s) { +void APU::serialize(serializer& s) { Thread::serialize(s); s.array(mmio_data); diff --git a/higan/gb/apu/square1/square1.cpp b/higan/gb/apu/square1/square1.cpp index 24fafed6..c96287ec 100755 --- a/higan/gb/apu/square1/square1.cpp +++ b/higan/gb/apu/square1/square1.cpp @@ -9,10 +9,10 @@ void APU::Square1::run() { period = 4 * (2048 - frequency); phase++; switch(duty) { - case 0: duty_output = (phase == 6); break; //______-_ - case 1: duty_output = (phase >= 6); break; //______-- - case 2: duty_output = (phase >= 4); break; //____---- - case 3: duty_output = (phase <= 5); break; //------__ + case 0: duty_output = (phase == 6); break; //______-_ + case 1: duty_output = (phase >= 6); break; //______-- + case 2: duty_output = (phase >= 4); break; //____---- + case 3: duty_output = (phase <= 5); break; //------__ } } @@ -39,10 +39,6 @@ void APU::Square1::sweep(bool update) { } void APU::Square1::clock_length() { -//if(counter && length) { -// if(--length == 0) enable = false; -//} - if(counter && enable) { if(++length == 0) enable = false; } @@ -74,7 +70,6 @@ void APU::Square1::write(unsigned r, uint8 data) { if(r == 1) { //$ff11 NR11 duty = data >> 6; - //length = 64 - (data & 0x3f); length = data & 0x3f; } @@ -104,7 +99,6 @@ void APU::Square1::write(unsigned r, uint8 data) { sweep_enable = sweep_period || sweep_shift; sweep_negate = false; if(sweep_shift) sweep(0); - //if(length == 0) length = 64; } } } @@ -135,7 +129,7 @@ void APU::Square1::power() { volume = 0; } -void APU::Square1::serialize(serializer &s) { +void APU::Square1::serialize(serializer& s) { s.integer(enable); s.integer(sweep_frequency); diff --git a/higan/gb/apu/square2/square2.cpp b/higan/gb/apu/square2/square2.cpp index cde68884..f2e79a23 100755 --- a/higan/gb/apu/square2/square2.cpp +++ b/higan/gb/apu/square2/square2.cpp @@ -9,10 +9,10 @@ void APU::Square2::run() { period = 4 * (2048 - frequency); phase++; switch(duty) { - case 0: duty_output = (phase == 6); break; //______-_ - case 1: duty_output = (phase >= 6); break; //______-- - case 2: duty_output = (phase >= 4); break; //____---- - case 3: duty_output = (phase <= 5); break; //------__ + case 0: duty_output = (phase == 6); break; //______-_ + case 1: duty_output = (phase >= 6); break; //______-- + case 2: duty_output = (phase >= 4); break; //____---- + case 3: duty_output = (phase <= 5); break; //------__ } } @@ -23,10 +23,6 @@ void APU::Square2::run() { } void APU::Square2::clock_length() { -//if(counter && length) { -// if(--length == 0) enable = false; -//} - if(counter && enable) { if(++length == 0) enable = false; } @@ -43,7 +39,6 @@ void APU::Square2::clock_envelope() { void APU::Square2::write(unsigned r, uint8 data) { if(r == 1) { //$ff16 NR21 duty = data >> 6; - //length = 64 - (data & 0x3f); length = (data & 0x3f); } @@ -68,7 +63,6 @@ void APU::Square2::write(unsigned r, uint8 data) { period = 4 * (2048 - frequency); envelope_period = envelope_frequency; volume = envelope_volume; - //if(length == 0) length = 64; } } } @@ -92,7 +86,7 @@ void APU::Square2::power() { volume = 0; } -void APU::Square2::serialize(serializer &s) { +void APU::Square2::serialize(serializer& s) { s.integer(enable); s.integer(duty); diff --git a/higan/gb/apu/wave/wave.cpp b/higan/gb/apu/wave/wave.cpp index 32f101fd..afea5b05 100755 --- a/higan/gb/apu/wave/wave.cpp +++ b/higan/gb/apu/wave/wave.cpp @@ -13,9 +13,6 @@ void APU::Wave::run() { } void APU::Wave::clock_length() { -//if(counter && length) { -// if(--length == 0) enable = false; -//} if(enable && counter) { if(++length == 0) enable = false; } @@ -28,7 +25,6 @@ void APU::Wave::write(unsigned r, uint8 data) { } if(r == 1) { //$ff1b NR31 - //length = 256 - data; length = data; } @@ -54,7 +50,6 @@ void APU::Wave::write(unsigned r, uint8 data) { enable = dac_enable; period = 2 * (2048 - frequency); pattern_offset = 0; - //if(length == 0) length = 256; } } } @@ -74,7 +69,7 @@ void APU::Wave::power() { counter = 0; random_lfsr r; - for(auto &n : pattern) n = r() & 15; + for(auto& n : pattern) n = r() & 15; output = 0; length = 0; @@ -83,7 +78,7 @@ void APU::Wave::power() { pattern_sample = 0; } -void APU::Wave::serialize(serializer &s) { +void APU::Wave::serialize(serializer& s) { s.integer(enable); s.integer(dac_enable); diff --git a/higan/gb/cartridge/cartridge.cpp b/higan/gb/cartridge/cartridge.cpp index 342ba121..30d775b9 100755 --- a/higan/gb/cartridge/cartridge.cpp +++ b/higan/gb/cartridge/cartridge.cpp @@ -118,7 +118,7 @@ uint8 Cartridge::mmio_read(uint16 addr) { if(addr == 0xff50) return 0x00; if(bootrom_enable) { - const uint8 *data = nullptr; + const uint8* data = nullptr; switch(system.revision()) { default: case System::Revision::GameBoy: data = system.bootROM.dmg; break; case System::Revision::SuperGameBoy: data = system.bootROM.sgb; break; diff --git a/higan/gb/cartridge/cartridge.hpp b/higan/gb/cartridge/cartridge.hpp index 86ab4bde..6fa82395 100755 --- a/higan/gb/cartridge/cartridge.hpp +++ b/higan/gb/cartridge/cartridge.hpp @@ -45,13 +45,13 @@ struct Cartridge : MMIO, property { readonly loaded; readonly sha256; - uint8_t *romdata; + uint8_t* romdata; unsigned romsize; - uint8_t *ramdata; + uint8_t* ramdata; unsigned ramsize; - MMIO *mapper; + MMIO* mapper; bool bootrom_enable; void load(System::Revision revision); diff --git a/higan/gb/cartridge/serialization.cpp b/higan/gb/cartridge/serialization.cpp index c05e0892..39498e4d 100755 --- a/higan/gb/cartridge/serialization.cpp +++ b/higan/gb/cartridge/serialization.cpp @@ -1,6 +1,6 @@ #ifdef CARTRIDGE_CPP -void Cartridge::serialize(serializer &s) { +void Cartridge::serialize(serializer& s) { if(information.battery) s.array(ramdata, ramsize); s.integer(bootrom_enable); diff --git a/higan/gb/cheat/cheat.cpp b/higan/gb/cheat/cheat.cpp index 03881df6..e972c520 100755 --- a/higan/gb/cheat/cheat.cpp +++ b/higan/gb/cheat/cheat.cpp @@ -4,20 +4,20 @@ namespace GameBoy { Cheat cheat; -bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned &comp) { +bool Cheat::decode(string code_, unsigned& addr, unsigned& data, unsigned& comp) { static bool initialize = false; static uint8 mapProActionReplay[256], mapGameGenie[256]; if(initialize == false) { initialize = true; - for(auto &n : mapProActionReplay) n = ~0; + for(auto& n : mapProActionReplay) n = ~0; mapProActionReplay['0'] = 0; mapProActionReplay['1'] = 1; mapProActionReplay['2'] = 2; mapProActionReplay['3'] = 3; mapProActionReplay['4'] = 4; mapProActionReplay['5'] = 5; mapProActionReplay['6'] = 6; mapProActionReplay['7'] = 7; mapProActionReplay['8'] = 8; mapProActionReplay['9'] = 9; mapProActionReplay['A'] = 10; mapProActionReplay['B'] = 11; mapProActionReplay['C'] = 12; mapProActionReplay['D'] = 13; mapProActionReplay['E'] = 14; mapProActionReplay['F'] = 15; - for(auto &n : mapGameGenie) n = ~0; + for(auto& n : mapGameGenie) n = ~0; mapGameGenie['0'] = 0; mapGameGenie['1'] = 1; mapGameGenie['2'] = 2; mapGameGenie['3'] = 3; mapGameGenie['4'] = 4; mapGameGenie['5'] = 5; mapGameGenie['6'] = 6; mapGameGenie['7'] = 7; mapGameGenie['8'] = 8; mapGameGenie['9'] = 9; mapGameGenie['A'] = 10; mapGameGenie['B'] = 11; @@ -29,7 +29,7 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned unsigned length = code.length(), bits = 0; if(code.wildcard("????:??")) { - code = { substr(code, 0, 4), substr(code, 5, 2) }; + code = {substr(code, 0, 4), substr(code, 5, 2)}; for(unsigned n = 0; n < 6; n++) if(mapProActionReplay[code[n]] > 15) return false; bits = hex(code); addr = (bits >> 8) & 0xffff; @@ -39,7 +39,7 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned } if(code.wildcard("????:??:??")) { - code = { substr(code, 0, 4), substr(code, 5, 2), substr(code, 8, 2) }; + code = {substr(code, 0, 4), substr(code, 5, 2), substr(code, 8, 2)}; for(unsigned n = 0; n < 8; n++) if(mapProActionReplay[code[n]] > 15) return false; bits = hex(code); addr = (bits >> 16) & 0xffff; @@ -49,7 +49,7 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned } if(code.wildcard("???" "-" "???")) { - code = { substr(code, 0, 3), substr(code, 4, 3) }; + code = {substr(code, 0, 3), substr(code, 4, 3)}; for(unsigned n = 0; n < 6; n++) if(mapGameGenie[code[n]] > 15) return false; for(unsigned n = 0; n < 6; n++) bits |= mapGameGenie[code[n]] << (20 - n * 4); @@ -63,7 +63,7 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned } if(code.wildcard("???" "-" "???" "-" "???")) { - code = { substr(code, 0, 3), substr(code, 4, 3), substr(code, 8, 1), substr(code, 10, 1) }; + code = {substr(code, 0, 3), substr(code, 4, 3), substr(code, 8, 1), substr(code, 10, 1)}; for(unsigned n = 0; n < 8; n++) if(mapGameGenie[code[n]] > 15) return false; for(unsigned n = 0; n < 8; n++) bits |= mapGameGenie[code[n]] << (28 - n * 4); @@ -81,7 +81,7 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned } void Cheat::synchronize() { - for(auto &n : override) n = false; + for(auto& n : override) n = false; for(unsigned n = 0; n < size(); n++) { override[operator[](n).addr] = true; diff --git a/higan/gb/cheat/cheat.hpp b/higan/gb/cheat/cheat.hpp index 4e6514e5..88996ab5 100755 --- a/higan/gb/cheat/cheat.hpp +++ b/higan/gb/cheat/cheat.hpp @@ -5,7 +5,7 @@ struct CheatCode { }; struct Cheat : public vector { - static bool decode(const string &code, unsigned &addr, unsigned &data, unsigned &comp); + static bool decode(string code, unsigned& addr, unsigned& data, unsigned& comp); void synchronize(); bool override[65536]; diff --git a/higan/gb/cpu/cpu.cpp b/higan/gb/cpu/cpu.cpp index d6a15208..c2251cbd 100755 --- a/higan/gb/cpu/cpu.cpp +++ b/higan/gb/cpu/cpu.cpp @@ -139,8 +139,8 @@ void CPU::power() { bus.mmio[0xff77] = this; //??? } - for(auto &n : wram) n = 0x00; - for(auto &n : hram) n = 0x00; + for(auto& n : wram) n = 0x00; + for(auto& n : hram) n = 0x00; r[PC] = 0x0000; r[SP] = 0x0000; diff --git a/higan/gb/cpu/serialization.cpp b/higan/gb/cpu/serialization.cpp index 81f7a9ef..50edab10 100755 --- a/higan/gb/cpu/serialization.cpp +++ b/higan/gb/cpu/serialization.cpp @@ -1,6 +1,6 @@ #ifdef CPU_CPP -void CPU::serialize(serializer &s) { +void CPU::serialize(serializer& s) { LR35902::serialize(s); Thread::serialize(s); diff --git a/higan/gb/gb.hpp b/higan/gb/gb.hpp index 0a1a3903..10980cfa 100755 --- a/higan/gb/gb.hpp +++ b/higan/gb/gb.hpp @@ -33,7 +33,7 @@ namespace GameBoy { clock = 0; } - inline void serialize(serializer &s) { + inline void serialize(serializer& s) { s.integer(frequency); s.integer(clock); } diff --git a/higan/gb/interface/interface.cpp b/higan/gb/interface/interface.cpp index 3d287b33..020246d4 100755 --- a/higan/gb/interface/interface.cpp +++ b/higan/gb/interface/interface.cpp @@ -57,7 +57,7 @@ void Interface::load(unsigned id) { } void Interface::save() { - for(auto &memory : cartridge.memory) { + for(auto& memory : cartridge.memory) { interface->saveRequest(memory.id, memory.name); } } diff --git a/higan/gb/memory/memory.cpp b/higan/gb/memory/memory.cpp index c3297284..0c33e3c8 100755 --- a/higan/gb/memory/memory.cpp +++ b/higan/gb/memory/memory.cpp @@ -16,7 +16,7 @@ void Memory::allocate(unsigned size_) { data = new uint8_t[size](); } -void Memory::copy(const uint8_t *data_, unsigned size_) { +void Memory::copy(const uint8_t* data_, unsigned size_) { free(); size = size_; data = new uint8_t[size]; diff --git a/higan/gb/memory/memory.hpp b/higan/gb/memory/memory.hpp index 3dfb8df9..464c3045 100755 --- a/higan/gb/memory/memory.hpp +++ b/higan/gb/memory/memory.hpp @@ -1,10 +1,10 @@ struct Memory { - uint8_t *data; + uint8_t* data; unsigned size; uint8_t& operator[](unsigned addr); void allocate(unsigned size); - void copy(const uint8_t *data, unsigned size); + void copy(const uint8_t* data, unsigned size); void free(); Memory(); ~Memory(); @@ -21,7 +21,7 @@ struct Unmapped : MMIO { }; struct Bus { - MMIO *mmio[65536]; + MMIO* mmio[65536]; uint8 read(uint16 addr); void write(uint16 addr, uint8 data); diff --git a/higan/gb/ppu/cgb.cpp b/higan/gb/ppu/cgb.cpp index d95939e0..f80b9c1a 100755 --- a/higan/gb/ppu/cgb.cpp +++ b/higan/gb/ppu/cgb.cpp @@ -12,7 +12,7 @@ void PPU::cgb_render() { if(status.ob_enable) cgb_render_ob(); } - uint32 *output = screen + status.ly * 160; + uint32* output = screen + status.ly * 160; for(unsigned n = 0; n < 160; n++) output[n] = video.palette[line[n]]; interface->lcdScanline(); } @@ -23,7 +23,7 @@ void PPU::cgb_render() { //0x20: horizontal flip //0x08: VRAM bank# //0x07: palette# -void PPU::cgb_read_tile(bool select, unsigned x, unsigned y, unsigned &tile, unsigned &attr, unsigned &data) { +void PPU::cgb_read_tile(bool select, unsigned x, unsigned y, unsigned& tile, unsigned& attr, unsigned& data) { unsigned tmaddr = 0x1800 + (select << 10); tmaddr += (((y >> 3) << 5) + (x >> 3)) & 0x03ff; diff --git a/higan/gb/ppu/dmg.cpp b/higan/gb/ppu/dmg.cpp index 9deaab86..ca76ea7a 100755 --- a/higan/gb/ppu/dmg.cpp +++ b/higan/gb/ppu/dmg.cpp @@ -12,7 +12,7 @@ void PPU::dmg_render() { if(status.ob_enable) dmg_render_ob(); } - uint32 *output = screen + status.ly * 160; + uint32* output = screen + status.ly * 160; for(unsigned n = 0; n < 160; n++) output[n] = video.palette[line[n]]; interface->lcdScanline(); } diff --git a/higan/gb/ppu/ppu.cpp b/higan/gb/ppu/ppu.cpp index 0090071d..d165b5eb 100755 --- a/higan/gb/ppu/ppu.cpp +++ b/higan/gb/ppu/ppu.cpp @@ -106,17 +106,17 @@ void PPU::power() { bus.mmio[0xff6b] = this; //OBPD } - for(auto &n : screen) n = 0x0000; - for(auto &n : line) n = 0x0000; - for(auto &n : origin) n = Origin::None; + for(auto& n : screen) n = 0x0000; + for(auto& n : line) n = 0x0000; + for(auto& n : origin) n = Origin::None; - for(auto &n : vram) n = 0x00; - for(auto &n : oam) n = 0x00; - for(auto &n : bgp) n = 0x00; - for(auto &n : obp[0]) n = 0x00; - for(auto &n : obp[1]) n = 0x00; - for(auto &n : bgpd) n = 0x0000; - for(auto &n : obpd) n = 0x0000; + for(auto& n : vram) n = 0x00; + for(auto& n : oam) n = 0x00; + for(auto& n : bgp) n = 0x00; + for(auto& n : obp[0]) n = 0x00; + for(auto& n : obp[1]) n = 0x00; + for(auto& n : bgpd) n = 0x0000; + for(auto& n : obpd) n = 0x0000; status.lx = 0; status.wyc = 0; diff --git a/higan/gb/ppu/ppu.hpp b/higan/gb/ppu/ppu.hpp index 44e3581a..77138108 100755 --- a/higan/gb/ppu/ppu.hpp +++ b/higan/gb/ppu/ppu.hpp @@ -83,7 +83,7 @@ struct PPU : Thread, MMIO { //cgb.cpp void cgb_render(); - void cgb_read_tile(bool select, unsigned x, unsigned y, unsigned &tile, unsigned &attr, unsigned &data); + void cgb_read_tile(bool select, unsigned x, unsigned y, unsigned& tile, unsigned& attr, unsigned& data); void cgb_render_bg(); void cgb_render_window(); void cgb_render_ob(); diff --git a/higan/gb/ppu/serialization.cpp b/higan/gb/ppu/serialization.cpp index 4fde8d71..0a2aa2cf 100755 --- a/higan/gb/ppu/serialization.cpp +++ b/higan/gb/ppu/serialization.cpp @@ -1,6 +1,6 @@ #ifdef PPU_CPP -void PPU::serialize(serializer &s) { +void PPU::serialize(serializer& s) { Thread::serialize(s); s.array(screen); diff --git a/higan/gb/scheduler/scheduler.cpp b/higan/gb/scheduler/scheduler.cpp index 732d30c9..aeef2027 100755 --- a/higan/gb/scheduler/scheduler.cpp +++ b/higan/gb/scheduler/scheduler.cpp @@ -23,8 +23,8 @@ void Scheduler::init() { Scheduler::Scheduler() { exit_reason = ExitReason::UnknownEvent; - host_thread = 0; - active_thread = 0; + host_thread = nullptr; + active_thread = nullptr; } } diff --git a/higan/gb/system/serialization.cpp b/higan/gb/system/serialization.cpp index 88cfe6bf..0c951c35 100755 --- a/higan/gb/system/serialization.cpp +++ b/higan/gb/system/serialization.cpp @@ -17,7 +17,7 @@ serializer System::serialize() { return s; } -bool System::unserialize(serializer &s) { +bool System::unserialize(serializer& s) { unsigned signature, version; char hash[64], description[512]; @@ -34,11 +34,11 @@ bool System::unserialize(serializer &s) { return true; } -void System::serialize(serializer &s) { +void System::serialize(serializer& s) { s.integer(clocks_executed); } -void System::serialize_all(serializer &s) { +void System::serialize_all(serializer& s) { cartridge.serialize(s); system.serialize(s); cpu.serialize(s); diff --git a/higan/gb/system/system.cpp b/higan/gb/system/system.cpp index 7bed09cb..d50ee23c 100755 --- a/higan/gb/system/system.cpp +++ b/higan/gb/system/system.cpp @@ -73,9 +73,9 @@ void System::power() { } System::System() { - for(auto &byte : bootROM.dmg) byte = 0; - for(auto &byte : bootROM.sgb) byte = 0; - for(auto &byte : bootROM.cgb) byte = 0; + for(auto& byte : bootROM.dmg) byte = 0; + for(auto& byte : bootROM.sgb) byte = 0; + for(auto& byte : bootROM.cgb) byte = 0; } } diff --git a/higan/gb/video/video.cpp b/higan/gb/video/video.cpp index a032e2f4..c8c1667d 100755 --- a/higan/gb/video/video.cpp +++ b/higan/gb/video/video.cpp @@ -56,10 +56,10 @@ unsigned Video::palette_cgb(unsigned color) const { } const double Video::monochrome[4][3] = { - { 0.605, 0.734, 0.059 }, - { 0.543, 0.672, 0.059 }, - { 0.188, 0.383, 0.188 }, - { 0.059, 0.219, 0.059 }, + {0.605, 0.734, 0.059}, + {0.543, 0.672, 0.059}, + {0.188, 0.383, 0.188}, + {0.059, 0.219, 0.059}, }; } diff --git a/higan/gb/video/video.hpp b/higan/gb/video/video.hpp index bb15349e..e81dacd3 100755 --- a/higan/gb/video/video.hpp +++ b/higan/gb/video/video.hpp @@ -1,5 +1,5 @@ struct Video { - uint32_t *palette; + uint32_t* palette; void generate_palette(); Video(); diff --git a/higan/gba/apu/fifo.cpp b/higan/gba/apu/fifo.cpp index 3459d97a..490f5bd0 100755 --- a/higan/gba/apu/fifo.cpp +++ b/higan/gba/apu/fifo.cpp @@ -11,7 +11,7 @@ void APU::FIFO::write(int8 byte) { } void APU::FIFO::reset() { - for(auto &byte : sample) byte = 0; + for(auto& byte : sample) byte = 0; output = 0; rdoffset = 0; diff --git a/higan/gba/apu/sequencer.cpp b/higan/gba/apu/sequencer.cpp index 9c9218fe..a4b6de9d 100755 --- a/higan/gba/apu/sequencer.cpp +++ b/higan/gba/apu/sequencer.cpp @@ -1,5 +1,5 @@ void APU::runsequencer() { - auto &r = sequencer; + auto& r = sequencer; if(r.base == 0) { //512hz if(r.step == 0 || r.step == 2 || r.step == 4 || r.step == 6) { //256hz @@ -80,9 +80,9 @@ void APU::Sequencer::write(unsigned addr, uint8 byte) { void APU::Sequencer::power() { lvolume = 0; rvolume = 0; - for(auto &n : lenable) n = 0; - for(auto &n : renable) n = 0; - for(auto &n : enable) n = 0; + for(auto& n : lenable) n = 0; + for(auto& n : renable) n = 0; + for(auto& n : enable) n = 0; masterenable = 0; base = 0; step = 0; diff --git a/higan/gba/apu/serialization.cpp b/higan/gba/apu/serialization.cpp index 129416db..9390f043 100755 --- a/higan/gba/apu/serialization.cpp +++ b/higan/gba/apu/serialization.cpp @@ -1,4 +1,4 @@ -void APU::serialize(serializer &s) { +void APU::serialize(serializer& s) { Thread::serialize(s); s.integer(regs.bias.level); @@ -56,7 +56,7 @@ void APU::serialize(serializer &s) { s.integer(wave.frequency); s.integer(wave.counter); s.integer(wave.initialize); - for(auto &value : wave.pattern) s.integer(value); + for(auto& value : wave.pattern) s.integer(value); s.integer(wave.enable); s.integer(wave.output); s.integer(wave.patternaddr); @@ -84,17 +84,17 @@ void APU::serialize(serializer &s) { s.integer(sequencer.volume); s.integer(sequencer.lvolume); s.integer(sequencer.rvolume); - for(auto &flag : sequencer.lenable) s.integer(flag); - for(auto &flag : sequencer.renable) s.integer(flag); - for(auto &flag : sequencer.enable) s.integer(flag); + for(auto& flag : sequencer.lenable) s.integer(flag); + for(auto& flag : sequencer.renable) s.integer(flag); + for(auto& flag : sequencer.enable) s.integer(flag); s.integer(sequencer.masterenable); s.integer(sequencer.base); s.integer(sequencer.step); s.integer(sequencer.lsample); s.integer(sequencer.rsample); - for(auto &f : fifo) { - for(auto &value : f.sample) s.integer(value); + for(auto& f : fifo) { + for(auto& value : f.sample) s.integer(value); s.integer(f.output); s.integer(f.rdoffset); s.integer(f.wroffset); diff --git a/higan/gba/apu/wave.cpp b/higan/gba/apu/wave.cpp index de570de3..e1b666cb 100755 --- a/higan/gba/apu/wave.cpp +++ b/higan/gba/apu/wave.cpp @@ -6,7 +6,7 @@ void APU::Wave::run() { } output = patternsample; - static unsigned multiplier[] = { 0, 4, 2, 1, 3, 3, 3, 3}; + static unsigned multiplier[] = {0, 4, 2, 1, 3, 3, 3, 3}; output = (output * multiplier[volume]) / 4; if(enable == false) output = 0; } @@ -85,7 +85,7 @@ void APU::Wave::power() { frequency = 0; counter = 0; initialize = 0; - for(auto &sample : pattern) sample = 0; + for(auto& sample : pattern) sample = 0; enable = 0; output = 0; patternaddr = 0; diff --git a/higan/gba/cartridge/cartridge.hpp b/higan/gba/cartridge/cartridge.hpp index 9defbf0d..3e480c39 100755 --- a/higan/gba/cartridge/cartridge.hpp +++ b/higan/gba/cartridge/cartridge.hpp @@ -28,8 +28,8 @@ struct Cartridge : property { uint8* ram_data(); unsigned ram_size(); - uint32 read(uint8 *data, uint32 addr, uint32 size); - void write(uint8 *data, uint32 addr, uint32 size, uint32 word); + uint32 read(uint8* data, uint32 addr, uint32 size); + void write(uint8* data, uint32 addr, uint32 size, uint32 word); uint32 read(uint32 addr, uint32 size); void write(uint32 addr, uint32 size, uint32 word); diff --git a/higan/gba/cartridge/eeprom.cpp b/higan/gba/cartridge/eeprom.cpp index 33289ecd..edfd3885 100755 --- a/higan/gba/cartridge/eeprom.cpp +++ b/higan/gba/cartridge/eeprom.cpp @@ -82,7 +82,7 @@ void Cartridge::EEPROM::power() { address = 0; } -void Cartridge::EEPROM::serialize(serializer &s) { +void Cartridge::EEPROM::serialize(serializer& s) { s.array(data, size); s.integer(size); s.integer(mask); diff --git a/higan/gba/cartridge/flashrom.cpp b/higan/gba/cartridge/flashrom.cpp index c2b45918..f20d6e6e 100755 --- a/higan/gba/cartridge/flashrom.cpp +++ b/higan/gba/cartridge/flashrom.cpp @@ -86,7 +86,7 @@ void Cartridge::FlashROM::power() { bank = 0; } -void Cartridge::FlashROM::serialize(serializer &s) { +void Cartridge::FlashROM::serialize(serializer& s) { s.array(data, size); s.integer(size); s.integer(id); diff --git a/higan/gba/cartridge/memory.hpp b/higan/gba/cartridge/memory.hpp index 2eb0f0f7..2a2d487c 100755 --- a/higan/gba/cartridge/memory.hpp +++ b/higan/gba/cartridge/memory.hpp @@ -1,11 +1,11 @@ struct Memory { - uint8 *data; + uint8* data; unsigned size; unsigned mask; } rom, ram; struct EEPROM { - uint8 *data; + uint8* data; unsigned size; unsigned mask; unsigned test; @@ -26,7 +26,7 @@ struct EEPROM { } eeprom; struct FlashROM { - uint8 *data; + uint8* data; unsigned size; uint16 id; diff --git a/higan/gba/cartridge/serialization.cpp b/higan/gba/cartridge/serialization.cpp index 3d606c61..508f0535 100755 --- a/higan/gba/cartridge/serialization.cpp +++ b/higan/gba/cartridge/serialization.cpp @@ -1,4 +1,4 @@ -void Cartridge::serialize(serializer &s) { +void Cartridge::serialize(serializer& s) { if(has_sram) s.array(ram.data, ram.size); if(has_eeprom) eeprom.serialize(s); if(has_flashrom) flashrom.serialize(s); diff --git a/higan/gba/cpu/cpu.cpp b/higan/gba/cpu/cpu.cpp index a53172a9..cdcf23c3 100755 --- a/higan/gba/cpu/cpu.cpp +++ b/higan/gba/cpu/cpu.cpp @@ -105,7 +105,7 @@ void CPU::power() { for(unsigned n = 0; n < 32 * 1024; n++) iwram[n] = 0; for(unsigned n = 0; n < 256 * 1024; n++) ewram[n] = 0; - for(auto &dma : regs.dma) { + for(auto& dma : regs.dma) { dma.source = 0; dma.target = 0; dma.length = 0; @@ -115,7 +115,7 @@ void CPU::power() { dma.run.source = 0; dma.run.length = 0; } - for(auto &timer : regs.timer) { + for(auto& timer : regs.timer) { timer.period = 0; timer.reload = 0; timer.control = 0; diff --git a/higan/gba/cpu/cpu.hpp b/higan/gba/cpu/cpu.hpp index d3effba2..79d34939 100755 --- a/higan/gba/cpu/cpu.hpp +++ b/higan/gba/cpu/cpu.hpp @@ -1,6 +1,6 @@ struct CPU : Processor::ARM, Thread, MMIO { - uint8 *iwram; - uint8 *ewram; + uint8* iwram; + uint8* ewram; #include "registers.hpp" #include "state.hpp" diff --git a/higan/gba/cpu/dma.cpp b/higan/gba/cpu/dma.cpp index d288e497..a12121b5 100755 --- a/higan/gba/cpu/dma.cpp +++ b/higan/gba/cpu/dma.cpp @@ -1,6 +1,6 @@ void CPU::dma_run() { for(unsigned n = 0; n < 4; n++) { - auto &dma = regs.dma[n]; + auto& dma = regs.dma[n]; if(dma.pending) { dma.pending = false; dma_transfer(dma); @@ -10,7 +10,7 @@ void CPU::dma_run() { } } -void CPU::dma_transfer(Registers::DMA &dma) { +void CPU::dma_transfer(Registers::DMA& dma) { unsigned size = dma.control.size ? Word : Half; unsigned seek = dma.control.size ? 4 : 2; @@ -43,18 +43,18 @@ void CPU::dma_transfer(Registers::DMA &dma) { } void CPU::dma_vblank() { - for(auto &dma : regs.dma) { + for(auto& dma : regs.dma) { if(dma.control.enable && dma.control.timingmode == 1) dma.pending = true; } } void CPU::dma_hblank() { - for(auto &dma : regs.dma) { + for(auto& dma : regs.dma) { if(dma.control.enable && dma.control.timingmode == 2) dma.pending = true; } } void CPU::dma_hdma() { - auto &dma = regs.dma[3]; + auto& dma = regs.dma[3]; if(dma.control.enable && dma.control.timingmode == 3) dma.pending = true; } diff --git a/higan/gba/cpu/mmio.cpp b/higan/gba/cpu/mmio.cpp index 40f971fc..81334794 100755 --- a/higan/gba/cpu/mmio.cpp +++ b/higan/gba/cpu/mmio.cpp @@ -11,7 +11,7 @@ uint8 CPU::read(uint32 addr) { case 0x040000c6: case 0x040000c7: case 0x040000d2: case 0x040000d3: case 0x040000de: case 0x040000df: { - auto &dma = regs.dma[(addr - 0x040000ba) / 12]; + auto& dma = regs.dma[(addr - 0x040000ba) / 12]; unsigned shift = (addr & 1) * 8; return dma.control >> shift; } @@ -24,7 +24,7 @@ uint8 CPU::read(uint32 addr) { case 0x04000104: case 0x04000105: case 0x04000108: case 0x04000109: case 0x0400010c: case 0x0400010d: { - auto &timer = regs.timer[(addr >> 2) & 3]; + auto& timer = regs.timer[(addr >> 2) & 3]; unsigned shift = (addr & 1) * 8; return timer.period >> shift; } @@ -34,7 +34,7 @@ uint8 CPU::read(uint32 addr) { case 0x04000106: case 0x04000107: case 0x0400010a: case 0x0400010b: case 0x0400010e: case 0x0400010f: { - auto &timer = regs.timer[(addr >> 2) & 3]; + auto& timer = regs.timer[(addr >> 2) & 3]; unsigned shift = (addr & 1) * 8; return timer.control >> shift; } @@ -47,7 +47,7 @@ uint8 CPU::read(uint32 addr) { case 0x04000122: case 0x04000123: case 0x04000124: case 0x04000125: case 0x04000126: case 0x04000127: { - auto &data = regs.serial.data[(addr >> 1) & 3]; + auto& data = regs.serial.data[(addr >> 1) & 3]; unsigned shift = (addr & 1) * 8; return data >> shift; } @@ -145,7 +145,7 @@ void CPU::write(uint32 addr, uint8 byte) { case 0x040000bc: case 0x040000bd: case 0x040000be: case 0x040000bf: case 0x040000c8: case 0x040000c9: case 0x040000ca: case 0x040000cb: case 0x040000d4: case 0x040000d5: case 0x040000d6: case 0x040000d7: { - auto &dma = regs.dma[(addr - 0x040000b0) / 12]; + auto& dma = regs.dma[(addr - 0x040000b0) / 12]; unsigned shift = (addr & 3) * 8; dma.source = (dma.source & ~(255 << shift)) | (byte << shift); return; @@ -159,7 +159,7 @@ void CPU::write(uint32 addr, uint8 byte) { case 0x040000c0: case 0x040000c1: case 0x040000c2: case 0x040000c3: case 0x040000cc: case 0x040000cd: case 0x040000ce: case 0x040000cf: case 0x040000d8: case 0x040000d9: case 0x040000da: case 0x040000db: { - auto &dma = regs.dma[(addr - 0x040000b4) / 12]; + auto& dma = regs.dma[(addr - 0x040000b4) / 12]; unsigned shift = (addr & 3) * 8; dma.target = (dma.target & ~(255 << shift)) | (byte << shift); return; @@ -173,7 +173,7 @@ void CPU::write(uint32 addr, uint8 byte) { case 0x040000c4: case 0x040000c5: case 0x040000d0: case 0x040000d1: case 0x040000dc: case 0x040000dd: { - auto &dma = regs.dma[(addr - 0x040000b8) / 12]; + auto& dma = regs.dma[(addr - 0x040000b8) / 12]; unsigned shift = (addr & 1) * 8; dma.length = (dma.length & ~(255 << shift)) | (byte << shift); return; @@ -187,7 +187,7 @@ void CPU::write(uint32 addr, uint8 byte) { case 0x040000c6: case 0x040000c7: case 0x040000d2: case 0x040000d3: case 0x040000de: case 0x040000df: { - auto &dma = regs.dma[(addr - 0x040000ba) / 12]; + auto& dma = regs.dma[(addr - 0x040000ba) / 12]; unsigned shift = (addr & 1) * 8; bool enable = dma.control.enable; dma.control = (dma.control & ~(255 << shift)) | (byte << shift); @@ -210,7 +210,7 @@ void CPU::write(uint32 addr, uint8 byte) { case 0x04000104: case 0x04000105: case 0x04000108: case 0x04000109: case 0x0400010c: case 0x0400010d: { - auto &timer = regs.timer[(addr >> 2) & 3]; + auto& timer = regs.timer[(addr >> 2) & 3]; unsigned shift = (addr & 1) * 8; timer.reload = (timer.reload & ~(255 << shift)) | (byte << shift); return; @@ -224,7 +224,7 @@ void CPU::write(uint32 addr, uint8 byte) { case 0x04000106: case 0x0400010a: case 0x0400010e: { - auto &timer = regs.timer[(addr >> 2) & 3]; + auto& timer = regs.timer[(addr >> 2) & 3]; bool enable = timer.control.enable; timer.control = byte; if(enable == 0 && timer.control.enable == 1) { @@ -241,7 +241,7 @@ void CPU::write(uint32 addr, uint8 byte) { case 0x04000122: case 0x04000123: case 0x04000124: case 0x04000125: case 0x04000126: case 0x04000127: { - auto &data = regs.serial.data[(addr >> 1) & 3]; + auto& data = regs.serial.data[(addr >> 1) & 3]; unsigned shift = (addr & 1) * 8; data = (data & ~(255 << shift)) | (byte << shift); return; diff --git a/higan/gba/cpu/serialization.cpp b/higan/gba/cpu/serialization.cpp index 6c68e6a8..ebb3a9fb 100755 --- a/higan/gba/cpu/serialization.cpp +++ b/higan/gba/cpu/serialization.cpp @@ -1,11 +1,11 @@ -void CPU::serialize(serializer &s) { +void CPU::serialize(serializer& s) { ARM::serialize(s); Thread::serialize(s); s.array(iwram, 32 * 1024); s.array(ewram, 256 * 1024); - for(auto &dma : regs.dma) { + for(auto& dma : regs.dma) { s.integer(dma.source); s.integer(dma.target); s.integer(dma.length); @@ -22,7 +22,7 @@ void CPU::serialize(serializer &s) { s.integer(dma.run.length); } - for(auto &timer : regs.timer) { + for(auto& timer : regs.timer) { s.integer(timer.period); s.integer(timer.reload); s.integer(timer.control.frequency); @@ -31,7 +31,7 @@ void CPU::serialize(serializer &s) { s.integer(timer.control.enable); } - for(auto &value : regs.serial.data) s.integer(value); + for(auto& value : regs.serial.data) s.integer(value); s.integer(regs.serial.control.shiftclockselect); s.integer(regs.serial.control.shiftclockfrequency); s.integer(regs.serial.control.transferenablereceive); @@ -41,7 +41,7 @@ void CPU::serialize(serializer &s) { s.integer(regs.serial.control.irqenable); s.integer(regs.serial.data8); - for(auto &flag : regs.keypad.control.flag) s.integer(flag); + for(auto& flag : regs.keypad.control.flag) s.integer(flag); s.integer(regs.keypad.control.enable); s.integer(regs.keypad.control.condition); @@ -73,23 +73,23 @@ void CPU::serialize(serializer &s) { s.integer(regs.irq.enable.vblank); s.integer(regs.irq.enable.hblank); s.integer(regs.irq.enable.vcoincidence); - for(auto &flag : regs.irq.enable.timer) s.integer(flag); + for(auto& flag : regs.irq.enable.timer) s.integer(flag); s.integer(regs.irq.enable.serial); - for(auto &flag : regs.irq.enable.dma) s.integer(flag); + for(auto& flag : regs.irq.enable.dma) s.integer(flag); s.integer(regs.irq.enable.keypad); s.integer(regs.irq.enable.cartridge); s.integer(regs.irq.flag.vblank); s.integer(regs.irq.flag.hblank); s.integer(regs.irq.flag.vcoincidence); - for(auto &flag : regs.irq.flag.timer) s.integer(flag); + for(auto& flag : regs.irq.flag.timer) s.integer(flag); s.integer(regs.irq.flag.serial); - for(auto &flag : regs.irq.flag.dma) s.integer(flag); + for(auto& flag : regs.irq.flag.dma) s.integer(flag); s.integer(regs.irq.flag.keypad); s.integer(regs.irq.flag.cartridge); - for(auto &flag : regs.wait.control.nwait) s.integer(flag); - for(auto &flag : regs.wait.control.swait) s.integer(flag); + for(auto& flag : regs.wait.control.nwait) s.integer(flag); + for(auto& flag : regs.wait.control.swait) s.integer(flag); s.integer(regs.wait.control.phi); s.integer(regs.wait.control.prefetch); s.integer(regs.wait.control.gametype); diff --git a/higan/gba/cpu/timer.cpp b/higan/gba/cpu/timer.cpp index 7f7004a3..0aaa2ec4 100755 --- a/higan/gba/cpu/timer.cpp +++ b/higan/gba/cpu/timer.cpp @@ -1,10 +1,10 @@ void CPU::timer_step(unsigned clocks) { for(unsigned c = 0; c < clocks; c++) { for(unsigned n = 0; n < 4; n++) { - auto &timer = regs.timer[n]; + auto& timer = regs.timer[n]; if(timer.control.enable == false || timer.control.cascade == true) continue; - static unsigned mask[] = { 0, 63, 255, 1023 }; + static unsigned mask[] = {0, 63, 255, 1023}; if((regs.clock & mask[timer.control.frequency]) == 0) { timer_increment(n); } @@ -15,7 +15,7 @@ void CPU::timer_step(unsigned clocks) { } void CPU::timer_increment(unsigned n) { - auto &timer = regs.timer[n]; + auto& timer = regs.timer[n]; if(++timer.period == 0) { timer.period = timer.reload; @@ -34,7 +34,7 @@ void CPU::timer_fifo_run(unsigned n) { apu.fifo[n].read(); if(apu.fifo[n].size > 16) return; - auto &dma = regs.dma[1 + n]; + auto& dma = regs.dma[1 + n]; if(dma.control.enable && dma.control.timingmode == 3) { dma.pending = true; dma.control.targetmode = 2; diff --git a/higan/gba/gba.hpp b/higan/gba/gba.hpp index 833fed9d..1861a755 100755 --- a/higan/gba/gba.hpp +++ b/higan/gba/gba.hpp @@ -35,7 +35,7 @@ namespace GameBoyAdvance { clock = 0; } - inline void serialize(serializer &s) { + inline void serialize(serializer& s) { s.integer(frequency); s.integer(clock); } diff --git a/higan/gba/memory/memory.cpp b/higan/gba/memory/memory.cpp index 7f081c6d..82e98cbe 100755 --- a/higan/gba/memory/memory.cpp +++ b/higan/gba/memory/memory.cpp @@ -33,7 +33,7 @@ uint32 Bus::mirror(uint32 addr, uint32 size) { uint32 Bus::speed(uint32 addr, uint32 size) { if(addr & 0x08000000) { - static unsigned timing[] = { 5, 4, 3, 9 }; + static unsigned timing[] = {5, 4, 3, 9}; unsigned n = cpu.regs.wait.control.nwait[addr >> 25 & 3]; unsigned s = cpu.regs.wait.control.swait[addr >> 25 & 3]; n = timing[n]; diff --git a/higan/gba/memory/memory.hpp b/higan/gba/memory/memory.hpp index c4db4b9b..b7ef66d5 100755 --- a/higan/gba/memory/memory.hpp +++ b/higan/gba/memory/memory.hpp @@ -11,7 +11,7 @@ struct MMIO : Memory { }; struct Bus : Memory { - Memory *mmio[0x400]; + Memory* mmio[0x400]; bool idleflag; static uint32 mirror(uint32 addr, uint32 size); diff --git a/higan/gba/memory/serialization.cpp b/higan/gba/memory/serialization.cpp index fc5418df..106ecd1b 100755 --- a/higan/gba/memory/serialization.cpp +++ b/higan/gba/memory/serialization.cpp @@ -1,3 +1,3 @@ -void Bus::serialize(serializer &s) { +void Bus::serialize(serializer& s) { s.integer(idleflag); } diff --git a/higan/gba/ppu/background.cpp b/higan/gba/ppu/background.cpp index d7fd790b..79515179 100755 --- a/higan/gba/ppu/background.cpp +++ b/higan/gba/ppu/background.cpp @@ -21,9 +21,9 @@ void PPU::render_backgrounds() { } } -void PPU::render_background_linear(Registers::Background &bg) { +void PPU::render_background_linear(Registers::Background& bg) { if(regs.control.enable[bg.id] == false) return; - auto &output = layer[bg.id]; + auto& output = layer[bg.id]; if(bg.control.mosaic == false || (regs.vcounter % (1 + regs.mosaic.bgvsize)) == 0) { bg.vmosaic = regs.vcounter; @@ -78,9 +78,9 @@ void PPU::render_background_linear(Registers::Background &bg) { } } -void PPU::render_background_affine(Registers::Background &bg) { +void PPU::render_background_affine(Registers::Background& bg) { if(regs.control.enable[bg.id] == false) return; - auto &output = layer[bg.id]; + auto& output = layer[bg.id]; unsigned basemap = bg.control.screenbaseblock << 11; unsigned basechr = bg.control.characterbaseblock << 14; @@ -113,9 +113,9 @@ void PPU::render_background_affine(Registers::Background &bg) { bg.ly += bg.pd; } -void PPU::render_background_bitmap(Registers::Background &bg) { +void PPU::render_background_bitmap(Registers::Background& bg) { if(regs.control.enable[bg.id] == false) return; - auto &output = layer[bg.id]; + auto& output = layer[bg.id]; uint1 depth = regs.control.bgmode != 4; //0 = 8-bit (Mode 4), 1 = 15-bit (Mode 3, Mode 5) unsigned basemap = regs.control.bgmode == 3 ? 0 : 0xa000 * regs.control.frame; diff --git a/higan/gba/ppu/memory.cpp b/higan/gba/ppu/memory.cpp index 376cee68..de319fcf 100755 --- a/higan/gba/ppu/memory.cpp +++ b/higan/gba/ppu/memory.cpp @@ -61,8 +61,8 @@ uint32 PPU::oam_read(uint32 addr, uint32 size) { if(size == Word) return oam_read(addr & ~2, Half) << 0 | oam_read(addr | 2, Half) << 16; if(size == Byte) return oam_read(addr, Half) >> ((addr & 1) * 8); - auto &obj = object[addr >> 3 & 127]; - auto &par = objectparam[addr >> 5 & 31]; + auto& obj = object[addr >> 3 & 127]; + auto& par = objectparam[addr >> 5 & 31]; switch(addr & 6) { @@ -112,8 +112,8 @@ void PPU::oam_write(uint32 addr, uint32 size, uint32 word) { return oam_write(addr, Half, word << 8 | word << 0); } - auto &obj = object[addr >> 3 & 127]; - auto &par = objectparam[addr >> 5 & 31]; + auto& obj = object[addr >> 3 & 127]; + auto& par = objectparam[addr >> 5 & 31]; switch(addr & 6) { case 0: diff --git a/higan/gba/ppu/mmio.cpp b/higan/gba/ppu/mmio.cpp index 2b74e5d0..5498fddd 100755 --- a/higan/gba/ppu/mmio.cpp +++ b/higan/gba/ppu/mmio.cpp @@ -22,7 +22,7 @@ uint8 PPU::read(uint32 addr) { case 0x0400000a: case 0x0400000b: case 0x0400000c: case 0x0400000d: case 0x0400000e: case 0x0400000f: { - auto &bg = regs.bg[(addr >> 1) & 3]; + auto& bg = regs.bg[(addr >> 1) & 3]; unsigned shift = (addr & 1) * 8; return bg.control >> shift; } @@ -68,7 +68,7 @@ void PPU::write(uint32 addr, uint8 byte) { case 0x0400000a: case 0x0400000b: case 0x0400000c: case 0x0400000d: case 0x0400000e: case 0x0400000f: { - auto &bg = regs.bg[(addr >> 1) & 3]; + auto& bg = regs.bg[(addr >> 1) & 3]; unsigned shift = (addr & 1) * 8; bg.control = (bg.control & ~(255 << shift)) | (byte << shift); return; @@ -79,7 +79,7 @@ void PPU::write(uint32 addr, uint8 byte) { case 0x04000014: case 0x04000015: case 0x04000018: case 0x04000019: case 0x0400001c: case 0x0400001d: { - auto &bg = regs.bg[(addr >> 2) & 3]; + auto& bg = regs.bg[(addr >> 2) & 3]; unsigned shift = (addr & 1) * 8; bg.hoffset = (bg.hoffset & ~(255 << shift)) | (byte << shift); return; @@ -90,7 +90,7 @@ void PPU::write(uint32 addr, uint8 byte) { case 0x04000016: case 0x04000017: case 0x0400001a: case 0x0400001b: case 0x0400001e: case 0x0400001f: { - auto &bg = regs.bg[(addr >> 2) & 3]; + auto& bg = regs.bg[(addr >> 2) & 3]; unsigned shift = (addr & 1) * 8; bg.voffset = (bg.voffset & ~(255 << shift)) | (byte << shift); return; @@ -99,7 +99,7 @@ void PPU::write(uint32 addr, uint8 byte) { //BG2PA,BG3PA case 0x04000020: case 0x04000021: case 0x04000030: case 0x04000031: { - auto &bg = regs.bg[(addr >> 4) & 3]; + auto& bg = regs.bg[(addr >> 4) & 3]; unsigned shift = (addr & 1) * 8; bg.pa = (bg.pa & ~(255 << shift)) | (byte << shift); return; @@ -108,7 +108,7 @@ void PPU::write(uint32 addr, uint8 byte) { //BG2PB,BG3PB case 0x04000022: case 0x04000023: case 0x04000032: case 0x04000033: { - auto &bg = regs.bg[(addr >> 4) & 3]; + auto& bg = regs.bg[(addr >> 4) & 3]; unsigned shift = (addr & 1) * 8; bg.pb = (bg.pb & ~(255 << shift)) | (byte << shift); return; @@ -117,7 +117,7 @@ void PPU::write(uint32 addr, uint8 byte) { //BG2PC,BG3PC case 0x04000024: case 0x04000025: case 0x04000034: case 0x04000035: { - auto &bg = regs.bg[(addr >> 4) & 3]; + auto& bg = regs.bg[(addr >> 4) & 3]; unsigned shift = (addr & 1) * 8; bg.pc = (bg.pc & ~(255 << shift)) | (byte << shift); return; @@ -126,7 +126,7 @@ void PPU::write(uint32 addr, uint8 byte) { //BG2PD,BG3PD case 0x04000026: case 0x04000027: case 0x04000036: case 0x04000037: { - auto &bg = regs.bg[(addr >> 4) & 3]; + auto& bg = regs.bg[(addr >> 4) & 3]; unsigned shift = (addr & 1) * 8; bg.pd = (bg.pd & ~(255 << shift)) | (byte << shift); return; @@ -135,7 +135,7 @@ void PPU::write(uint32 addr, uint8 byte) { //BG2X_L,BG2X_H,BG3X_L,BG3X_H case 0x04000028: case 0x04000029: case 0x0400002a: case 0x0400002b: case 0x04000038: case 0x04000039: case 0x0400003a: case 0x0400003b: { - auto &bg = regs.bg[(addr >> 4) & 3]; + auto& bg = regs.bg[(addr >> 4) & 3]; unsigned shift = (addr & 3) * 8; bg.lx = bg.x = (bg.x & ~(255 << shift)) | (byte << shift); return; @@ -144,7 +144,7 @@ void PPU::write(uint32 addr, uint8 byte) { //BG2Y_L,BG2Y_H,BG3Y_L,BG3Y_H case 0x0400002c: case 0x0400002d: case 0x0400002e: case 0x0400002f: case 0x0400003c: case 0x0400003d: case 0x0400003e: case 0x0400003f: { - auto &bg = regs.bg[(addr >> 4) & 3]; + auto& bg = regs.bg[(addr >> 4) & 3]; unsigned shift = (addr & 3) * 8; bg.ly = bg.y = (bg.y & ~(255 << shift)) | (byte << shift); return; diff --git a/higan/gba/ppu/mosaic.cpp b/higan/gba/ppu/mosaic.cpp index b0b66fff..33867993 100755 --- a/higan/gba/ppu/mosaic.cpp +++ b/higan/gba/ppu/mosaic.cpp @@ -1,7 +1,7 @@ void PPU::render_mosaic_background(unsigned id) { if(regs.mosaic.bghsize == 0) return; unsigned width = 1 + regs.mosaic.bghsize; - auto &buffer = layer[id]; + auto& buffer = layer[id]; for(unsigned x = 0; x < 240;) { for(unsigned m = 1; m < width; m++) { @@ -15,7 +15,7 @@ void PPU::render_mosaic_background(unsigned id) { void PPU::render_mosaic_object() { if(regs.mosaic.objhsize == 0) return; unsigned width = 1 + regs.mosaic.objhsize; - auto &buffer = layer[OBJ]; + auto& buffer = layer[OBJ]; Pixel mosaicPixel; mosaicPixel.mosaic = false; diff --git a/higan/gba/ppu/object.cpp b/higan/gba/ppu/object.cpp index 225e1677..063512a4 100755 --- a/higan/gba/ppu/object.cpp +++ b/higan/gba/ppu/object.cpp @@ -7,12 +7,12 @@ void PPU::render_objects() { //fx,fy = affine pixel coordinates //pa,pb,pc,pd = affine pixel adjustments //x,y = adjusted coordinates within sprite (linear = vflip/hflip, affine = rotation/zoom) -void PPU::render_object(Object &obj) { +void PPU::render_object(Object& obj) { uint8 py = regs.vcounter - obj.y; if(obj.affine == 0 && obj.affinesize == 1) return; //hidden if(py >= obj.height << obj.affinesize) return; //offscreen - auto &output = layer[OBJ]; + auto& output = layer[OBJ]; unsigned rowsize = regs.control.objmapping == 0 ? 32 >> obj.colors : obj.width / 8; unsigned baseaddr = obj.character * 32; diff --git a/higan/gba/ppu/ppu.cpp b/higan/gba/ppu/ppu.cpp index aaba4ef0..330f4195 100755 --- a/higan/gba/ppu/ppu.cpp +++ b/higan/gba/ppu/ppu.cpp @@ -53,7 +53,7 @@ void PPU::power() { regs.greenswap = 0; regs.status = 0; regs.vcounter = 0; - for(auto &bg : regs.bg) { + for(auto& bg : regs.bg) { bg.control = 0; bg.hoffset = 0; bg.voffset = 0; @@ -66,13 +66,13 @@ void PPU::power() { bg.lx = 0; bg.ly = 0; } - for(auto &w : regs.window) { + for(auto& w : regs.window) { w.x1 = 0; w.x2 = 0; w.y1 = 0; w.y2 = 0; } - for(auto &f : regs.windowflags) { + for(auto& f : regs.windowflags) { f = 0; } regs.mosaic.bghsize = 0; diff --git a/higan/gba/ppu/ppu.hpp b/higan/gba/ppu/ppu.hpp index 7840c4dc..fbad6c2b 100755 --- a/higan/gba/ppu/ppu.hpp +++ b/higan/gba/ppu/ppu.hpp @@ -3,8 +3,8 @@ struct PPU : Thread, MMIO { uint16 pram[512]; #include "registers.hpp" #include "state.hpp" - uint32 *output; - uint16 *blur; + uint32* output; + uint16* blur; static void Enter(); void main(); diff --git a/higan/gba/ppu/screen.cpp b/higan/gba/ppu/screen.cpp index 0124df02..59014229 100755 --- a/higan/gba/ppu/screen.cpp +++ b/higan/gba/ppu/screen.cpp @@ -1,6 +1,6 @@ void PPU::render_forceblank() { - uint32 *line = output + regs.vcounter * 240; - uint16 *last = blur + regs.vcounter * 240; + uint32* line = output + regs.vcounter * 240; + uint16* last = blur + regs.vcounter * 240; for(unsigned x = 0; x < 240; x++) { line[x] = video.palette[(0x7fff + last[x] - ((0x7fff ^ last[x]) & 0x0421)) >> 1]; last[x] = 0x7fff; @@ -8,8 +8,8 @@ void PPU::render_forceblank() { } void PPU::render_screen() { - uint32 *line = output + regs.vcounter * 240; - uint16 *last = blur + regs.vcounter * 240; + uint32* line = output + regs.vcounter * 240; + uint16* last = blur + regs.vcounter * 240; if(regs.bg[0].control.mosaic) render_mosaic_background(BG0); if(regs.bg[1].control.mosaic) render_mosaic_background(BG1); @@ -40,8 +40,8 @@ void PPU::render_screen() { } } - auto &above = layer[a]; - auto &below = layer[b]; + auto& above = layer[a]; + auto& below = layer[b]; bool blendabove = regs.blend.control.above[a]; bool blendbelow = regs.blend.control.below[b]; unsigned color = above[x].color; diff --git a/higan/gba/ppu/serialization.cpp b/higan/gba/ppu/serialization.cpp index 3a90456b..9ebc9667 100755 --- a/higan/gba/ppu/serialization.cpp +++ b/higan/gba/ppu/serialization.cpp @@ -1,4 +1,4 @@ -void PPU::serialize(serializer &s) { +void PPU::serialize(serializer& s) { Thread::serialize(s); s.array(vram, 96 * 1024); @@ -10,8 +10,8 @@ void PPU::serialize(serializer &s) { s.integer(regs.control.hblank); s.integer(regs.control.objmapping); s.integer(regs.control.forceblank); - for(auto &flag : regs.control.enable) s.integer(flag); - for(auto &flag : regs.control.enablewindow) s.integer(flag); + for(auto& flag : regs.control.enable) s.integer(flag); + for(auto& flag : regs.control.enablewindow) s.integer(flag); s.integer(regs.greenswap); @@ -25,7 +25,7 @@ void PPU::serialize(serializer &s) { s.integer(regs.vcounter); - for(auto &bg : regs.bg) { + for(auto& bg : regs.bg) { s.integer(bg.control.priority); s.integer(bg.control.characterbaseblock); s.integer(bg.control.mosaic); @@ -48,15 +48,15 @@ void PPU::serialize(serializer &s) { s.integer(bg.id); } - for(auto &window : regs.window) { + for(auto& window : regs.window) { s.integer(window.x1); s.integer(window.x2); s.integer(window.y1); s.integer(window.y2); } - for(auto &windowflags : regs.windowflags) { - for(auto &flag : windowflags.enable) s.integer(flag); + for(auto& windowflags : regs.windowflags) { + for(auto& flag : windowflags.enable) s.integer(flag); } s.integer(regs.mosaic.bghsize); @@ -64,8 +64,8 @@ void PPU::serialize(serializer &s) { s.integer(regs.mosaic.objhsize); s.integer(regs.mosaic.objvsize); - for(auto &flag : regs.blend.control.above) s.integer(flag); - for(auto &flag : regs.blend.control.below) s.integer(flag); + for(auto& flag : regs.blend.control.above) s.integer(flag); + for(auto& flag : regs.blend.control.below) s.integer(flag); s.integer(regs.blend.control.mode); s.integer(regs.blend.eva); s.integer(regs.blend.evb); @@ -73,7 +73,7 @@ void PPU::serialize(serializer &s) { for(unsigned l = 0; l < 6; l++) { for(unsigned p = 0; p < 240; p++) { - auto &pixel = layer[l][p]; + auto& pixel = layer[l][p]; s.integer(pixel.enable); s.integer(pixel.priority); s.integer(pixel.color); @@ -88,10 +88,10 @@ void PPU::serialize(serializer &s) { } } - for(auto &value : vmosaic) s.integer(value); - for(auto &value : hmosaic) s.integer(value); + for(auto& value : vmosaic) s.integer(value); + for(auto& value : hmosaic) s.integer(value); - for(auto &obj : object) { + for(auto& obj : object) { s.integer(obj.y); s.integer(obj.affine); s.integer(obj.affinesize); @@ -114,7 +114,7 @@ void PPU::serialize(serializer &s) { s.integer(obj.height); } - for(auto &par : objectparam) { + for(auto& par : objectparam) { s.integer(par.pa); s.integer(par.pb); s.integer(par.pc); diff --git a/higan/gba/system/serialization.cpp b/higan/gba/system/serialization.cpp index b553509b..0d344ad9 100755 --- a/higan/gba/system/serialization.cpp +++ b/higan/gba/system/serialization.cpp @@ -15,7 +15,7 @@ serializer System::serialize() { return s; } -bool System::unserialize(serializer &s) { +bool System::unserialize(serializer& s) { unsigned signature, version; char hash[64], description[512]; @@ -32,12 +32,12 @@ bool System::unserialize(serializer &s) { return true; } -void System::serialize(serializer &s) { +void System::serialize(serializer& s) { s.integer(bios.size); s.integer(bios.mdr); } -void System::serialize_all(serializer &s) { +void System::serialize_all(serializer& s) { cartridge.serialize(s); system.serialize(s); cpu.serialize(s); diff --git a/higan/gba/system/system.hpp b/higan/gba/system/system.hpp index b4966cb0..7e0686d2 100755 --- a/higan/gba/system/system.hpp +++ b/higan/gba/system/system.hpp @@ -3,7 +3,7 @@ enum class Input : unsigned { }; struct BIOS : Memory { - uint8 *data; + uint8* data; unsigned size; uint32 mdr; diff --git a/higan/gba/video/video.hpp b/higan/gba/video/video.hpp index 15004b36..ad976fc8 100755 --- a/higan/gba/video/video.hpp +++ b/higan/gba/video/video.hpp @@ -1,5 +1,5 @@ struct Video { - unsigned *palette; + unsigned* palette; void generate_palette(); Video(); diff --git a/higan/nall/mosaic/context.hpp b/higan/nall/mosaic/context.hpp index 259374a4..a0fe91d5 100755 --- a/higan/nall/mosaic/context.hpp +++ b/higan/nall/mosaic/context.hpp @@ -78,9 +78,9 @@ struct context { for(unsigned n = 0; n < length; n++) { string fn = part[1]; - fn.replace("n", decimal(n)); - fn.replace("o", decimal(offset)); - fn.replace("p", decimal(buffer.size())); + fn.replace("n", string{n}); + fn.replace("o", string{offset}); + fn.replace("p", string{buffer.size()}); buffer.resize(offset + 1); buffer[offset] = eval(fn); offset += stride; diff --git a/higan/nall/stream/stream.hpp b/higan/nall/stream/stream.hpp index 776e32ff..6e78b18a 100755 --- a/higan/nall/stream/stream.hpp +++ b/higan/nall/stream/stream.hpp @@ -53,7 +53,7 @@ struct stream { buffer.resize(size() + 1); buffer[size()] = 0; seek(0); - read((uint8_t*)buffer(), size()); + read((uint8_t*)buffer.data(), size()); return buffer; } diff --git a/higan/nall/string.hpp b/higan/nall/string.hpp index b0246c64..e4dd1d0d 100755 --- a/higan/nall/string.hpp +++ b/higan/nall/string.hpp @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -22,29 +23,21 @@ #include #define NALL_STRING_INTERNAL_HPP +#include #include -#include +#include #include -#include -#include #include -#include #include +#include #include #include -#include -#include +#include #include -#include -#include -#include #include #include -#include -#include #include #include -#include #include #include #include diff --git a/higan/nall/string/base.hpp b/higan/nall/string/base.hpp index 755c8b16..0085f7cc 100755 --- a/higan/nall/string/base.hpp +++ b/higan/nall/string/base.hpp @@ -1,233 +1,192 @@ #ifdef NALL_STRING_INTERNAL_HPP namespace nall { - struct cstring; - struct string; - struct lstring; - template inline const char* to_string(T); - struct cstring { - inline operator const char*() const; - inline unsigned length() const; - inline bool operator==(const char*) const; - inline bool operator!=(const char*) const; - inline optional position(const char* key) const; - inline optional iposition(const char* key) const; - inline cstring& operator=(const char* data); - inline cstring(const char* data); - inline cstring(); +struct string; +struct stringref; +struct lstring; +typedef const stringref& rstring; - protected: - const char* data; - }; +struct string { +protected: + std::shared_ptr _data; + unsigned _capacity; + unsigned _size; - struct string { - inline static string read(const string& filename); +public: + //core.hpp + inline char* data(); + inline const char* data() const; + inline unsigned length() const; + inline unsigned size() const; + inline unsigned capacity() const; + inline bool empty() const; - inline static string date(); - inline static string time(); - inline static string datetime(); + inline void reset(); + inline void reserve(unsigned); + inline void resize(unsigned); + inline void clear(char); - inline void reset(); - inline void reserve(unsigned); - inline void resize(unsigned); - inline void clear(char); - inline bool empty() const; + template inline string& assign(Args&&... args); + template inline string& append(Args&&... args); - template inline string& assign(Args&&... args); - template inline string& append(Args&&... args); + //file.hpp + inline static string read(rstring filename); + inline bool readfile(rstring); - inline bool readfile(const string&); + //datetime.hpp + inline static string date(); + inline static string time(); + inline static string datetime(); - template inline string& replace(const char*, const char*); - template inline string& ireplace(const char*, const char*); - template inline string& qreplace(const char*, const char*); - template inline string& iqreplace(const char*, const char*); + //replace.hpp + template inline string& replace(rstring, rstring); + template inline string& ireplace(rstring, rstring); + template inline string& qreplace(rstring, rstring); + template inline string& iqreplace(rstring, rstring); - inline unsigned length() const; - inline unsigned capacity() const; + //wrapper.hpp + template inline lstring split(rstring) const; + template inline lstring isplit(rstring) const; + template inline lstring qsplit(rstring) const; + template inline lstring iqsplit(rstring) const; - template inline lstring split(const char*) const; - template inline lstring isplit(const char*) const; - template inline lstring qsplit(const char*) const; - template inline lstring iqsplit(const char*) const; + inline bool equals(rstring) const; + inline bool iequals(rstring) const; - inline bool equals(const char*) const; - inline bool iequals(const char*) const; + inline bool wildcard(rstring) const; + inline bool iwildcard(rstring) const; - inline bool wildcard(const char*) const; - inline bool iwildcard(const char*) const; + inline bool beginswith(rstring) const; + inline bool ibeginswith(rstring) const; + inline bool endswith(rstring) const; + inline bool iendswith(rstring) const; - inline bool beginswith(const char*) const; - inline bool ibeginswith(const char*) const; - inline bool endswith(const char*) const; - inline bool iendswith(const char*) const; + inline string& lower(); + inline string& upper(); + inline string& qlower(); + inline string& qupper(); + inline string& transform(rstring before, rstring after); + inline string& reverse(); - inline string& lower(); - inline string& upper(); - inline string& qlower(); - inline string& qupper(); - inline string& transform(const char* before, const char* after); - inline string& reverse(); + template inline string& ltrim(rstring key = " "); + template inline string& rtrim(rstring key = " "); + template inline string& trim(rstring key = " ", rstring rkey = ""); + inline string& strip(); - template inline string& ltrim(const char* key = " "); - template inline string& rtrim(const char* key = " "); - template inline string& trim(const char* key = " ", const char* rkey = nullptr); - inline string& strip(); + inline optional position(rstring key) const; + inline optional iposition(rstring key) const; + inline optional qposition(rstring key) const; + inline optional iqposition(rstring key) const; - inline optional position(const char* key) const; - inline optional iposition(const char* key) const; - inline optional qposition(const char* key) const; - inline optional iqposition(const char* key) const; + //core.hpp + inline explicit operator bool() const; + inline operator const char*() const; + inline char& operator[](unsigned); + inline const char& operator[](unsigned) const; - inline explicit operator bool() const; - inline operator const char*() const; - inline char* operator()(); - inline char& operator[](int); + inline bool operator==(const char*) const; + inline bool operator!=(const char*) const; + inline bool operator< (const char*) const; + inline bool operator<=(const char*) const; + inline bool operator> (const char*) const; + inline bool operator>=(const char*) const; - inline bool operator==(const char*) const; - inline bool operator!=(const char*) const; - inline bool operator< (const char*) const; - inline bool operator<=(const char*) const; - inline bool operator> (const char*) const; - inline bool operator>=(const char*) const; + inline string& operator=(const string&); + inline string& operator=(string&&); - inline string& operator=(const string&); - inline string& operator=(string&&); + template inline string(T&& source, Args&&... args); + inline string(); + inline string(const string&); + inline string(string&&); + inline ~string(); - template inline string(Args&&... args); - inline string(const string&); - inline string(string&&); - inline ~string(); + inline char* begin() { return &data()[0]; } + inline char* end() { return &data()[size()]; } + inline const char* begin() const { return &data()[0]; } + inline const char* end() const { return &data()[size()]; } - inline char* begin() { return &data[0]; } - inline char* end() { return &data[length()]; } - inline const char* begin() const { return &data[0]; } - inline const char* end() const { return &data[length()]; } +//protected: + struct exception_out_of_bounds{}; + template inline string& ureplace(rstring, rstring); + inline void _unique(); + inline void _copy(); + inline string& _append(const char*); - //internal functions - inline string& assign_(const char*); - inline string& append_(const char*); - - protected: - char* data; - unsigned size; - - template inline string& ureplace(const char*, const char*); - - #if defined(QSTRING_H) - public: - inline operator QString() const; - #endif - }; - - struct lstring : vector { - inline optional find(const char*) const; - inline string concatenate(const char*) const; - inline lstring& isort(); - inline lstring& strip(); - inline void append() {} - template inline void append(const string&, Args&&...); - - template inline lstring& split(const char*, const char*); - template inline lstring& isplit(const char*, const char*); - template inline lstring& qsplit(const char*, const char*); - template inline lstring& iqsplit(const char*, const char*); - - inline bool operator==(const lstring&) const; - inline bool operator!=(const lstring&) const; - - inline lstring& operator=(const lstring&); - inline lstring& operator=(lstring&); - inline lstring& operator=(lstring&&); - - template inline lstring(Args&&... args); - inline lstring(const lstring&); - inline lstring(lstring&); - inline lstring(lstring&&); - - protected: - template inline lstring& usplit(const char*, const char*); - }; - - //compare.hpp - inline char chrlower(char c); - inline char chrupper(char c); - inline int istrcmp(const char* str1, const char* str2); - inline bool strbegin(const char* str, const char* key); - inline bool istrbegin(const char* str, const char* key); - inline bool strend(const char* str, const char* key); - inline bool istrend(const char* str, const char* key); - - //convert.hpp - inline char* strlower(char* str); - inline char* strupper(char* str); - inline char* qstrlower(char* str); - inline char* qstrupper(char* str); - inline char* strtr(char* dest, const char* before, const char* after); - - //format.hpp - template inline string format(const string& value); - template inline string hex(uintmax_t value); - template inline string octal(uintmax_t value); - template inline string binary(uintmax_t value); - - //math.hpp - inline bool strint(const char* str, int& result); - inline bool strmath(const char* str, int& result); - - //platform.hpp - inline string activepath(); - inline string realpath(const string& name); - inline string userpath(); - inline string configpath(); - inline string sharedpath(); - inline string temppath(); - - //strm.hpp - inline unsigned strmcpy(char* target, const char* source, unsigned length); - inline unsigned strmcat(char* target, const char* source, unsigned length); - inline bool strccpy(char* target, const char* source, unsigned length); - inline bool strccat(char* target, const char* source, unsigned length); - inline void strpcpy(char*& target, const char* source, unsigned& length); - - //strpos.hpp - inline optional strpos(const char* str, const char* key); - inline optional istrpos(const char* str, const char* key); - inline optional qstrpos(const char* str, const char* key); - inline optional iqstrpos(const char* str, const char* key); - template inline optional ustrpos(const char* str, const char* key); - - //trim.hpp - template inline char* ltrim(char* str, const char* key = " "); - template inline char* rtrim(char* str, const char* key = " "); - template inline char* trim(char* str, const char* key = " ", const char* rkey = nullptr); - inline char* strip(char* s); - - //utility.hpp - template alwaysinline bool chrequal(char x, char y); - template alwaysinline bool quoteskip(T*& p); - template alwaysinline bool quotecopy(char*& t, T*& p); - inline string substr(const char* src, unsigned start = 0, unsigned length = ~0u); - inline string sha256(const uint8_t* data, unsigned size); - - inline char* integer(char* result, intmax_t value); - inline char* decimal(char* result, uintmax_t value); - - //these functions are deprecated, use format() instead: - template inline string integer(intmax_t value); - template inline string linteger(intmax_t value); - template inline string decimal(uintmax_t value); - template inline string ldecimal(uintmax_t value); - inline unsigned fp(char* str, long double value); - inline string fp(long double value); - - //variadic.hpp - template inline void print(Args&&... args); - - //wildcard.hpp - inline bool wildcard(const char* str, const char* pattern); - inline bool iwildcard(const char* str, const char* pattern); +#if defined(QSTRING_H) +public: + inline operator QString() const; +#endif }; +//list.hpp +struct lstring : vector { + inline optional find(rstring) const; + inline string concatenate(const string&) const; + inline lstring& isort(); + inline lstring& strip(); + inline void append() {} + template inline void append(const string&, Args&&...); + + inline bool operator==(const lstring&) const; + inline bool operator!=(const lstring&) const; + + inline lstring& operator=(const lstring&); + inline lstring& operator=(lstring&); + inline lstring& operator=(lstring&&); + + template inline lstring(Args&&... args); + inline lstring(const lstring&); + inline lstring(lstring&); + inline lstring(lstring&&); + + //split.hpp + template inline lstring& split(rstring, rstring); + template inline lstring& isplit(rstring, rstring); + template inline lstring& qsplit(rstring, rstring); + template inline lstring& iqsplit(rstring, rstring); + +protected: + template inline lstring& usplit(rstring, rstring); +}; + +//filename.hpp +inline string dir(string name); +inline string notdir(string name); +inline string parentdir(string name); +inline string basename(string name); +inline string extension(string name); + +//format.hpp +template inline string format(const string& value); +template inline string hex(uintmax_t value); +template inline string octal(uintmax_t value); +template inline string binary(uintmax_t value); + +//platform.hpp +inline string activepath(); +inline string realpath(const string& name); +inline string userpath(); +inline string configpath(); +inline string sharedpath(); +inline string temppath(); + +//utility.hpp +inline string substr(rstring source, unsigned offset = 0, unsigned length = ~0u); +inline string sha256(const uint8_t* data, unsigned size); +inline bool tokenize(lstring& list, const char* s, const char* p); + +inline char* integer(char* result, intmax_t value); +inline char* decimal(char* result, uintmax_t value); + +inline unsigned fp(char* str, long double value); +inline string fp(long double value); + +//variadic.hpp +inline void sprint(string& output); +template inline void sprint(string& output, const T& value, Args&&... args); +template inline void print(Args&&... args); + +} + #endif diff --git a/higan/nall/string/bsv.hpp b/higan/nall/string/bsv.hpp deleted file mode 100755 index 9f09657e..00000000 --- a/higan/nall/string/bsv.hpp +++ /dev/null @@ -1,76 +0,0 @@ -#ifdef NALL_STRING_INTERNAL_HPP - -//BSV v1.0 parser -//revision 0.02 - -namespace nall { - -struct BSV { - static inline string decode(const char* input) { - string output; - unsigned offset = 0; - while(*input) { - //illegal characters - if(*input == '}' ) return ""; - if(*input == '\r') return ""; - if(*input == '\n') return ""; - - //normal characters - if(*input != '{') { output[offset++] = *input++; continue; } - - //entities - if(strbegin(input, "{lf}")) { output[offset++] = '\n'; input += 4; continue; } - if(strbegin(input, "{lb}")) { output[offset++] = '{'; input += 4; continue; } - if(strbegin(input, "{rb}")) { output[offset++] = '}'; input += 4; continue; } - - //illegal entities - return ""; - } - output[offset] = 0; - return output; - } - - static inline string encode(const char* input) { - string output; - unsigned offset = 0; - while(*input) { - //illegal characters - if(*input == '\r') return ""; - - if(*input == '\n') { - output[offset++] = '{'; - output[offset++] = 'l'; - output[offset++] = 'f'; - output[offset++] = '}'; - input++; - continue; - } - - if(*input == '{') { - output[offset++] = '{'; - output[offset++] = 'l'; - output[offset++] = 'b'; - output[offset++] = '}'; - input++; - continue; - } - - if(*input == '}') { - output[offset++] = '{'; - output[offset++] = 'r'; - output[offset++] = 'b'; - output[offset++] = '}'; - input++; - continue; - } - - output[offset++] = *input++; - } - output[offset] = 0; - return output; - } -}; - -} - -#endif diff --git a/higan/nall/string/cast.hpp b/higan/nall/string/cast.hpp index 68368bb3..c5a60993 100755 --- a/higan/nall/string/cast.hpp +++ b/higan/nall/string/cast.hpp @@ -168,18 +168,6 @@ template<> struct stringify { stringify(const string& value) : value(value) {} }; -template<> struct stringify { - const char* value; - operator const char*() const { return value; } - stringify(const cstring& value) : value(value) {} -}; - -template<> struct stringify { - const char* value; - operator const char*() const { return value; } - stringify(const cstring& value) : value(value) {} -}; - #if defined(QSTRING_H) template<> struct stringify { diff --git a/higan/nall/string/char.hpp b/higan/nall/string/char.hpp new file mode 100644 index 00000000..3cfdddea --- /dev/null +++ b/higan/nall/string/char.hpp @@ -0,0 +1,15 @@ +#ifdef NALL_STRING_INTERNAL_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/higan/nall/string/char/base.hpp b/higan/nall/string/char/base.hpp new file mode 100644 index 00000000..cb52d775 --- /dev/null +++ b/higan/nall/string/char/base.hpp @@ -0,0 +1,83 @@ +#ifdef NALL_STRING_INTERNAL_HPP + +//collection of functions to extend libc +//none of these functions require nall::string +//and thus, require no changes when nall::string is modified + +namespace nall { + +//compare.hpp +inline char chrlower(char c); +inline char chrupper(char c); +inline int imemcmp(const char* str1, const char* str2, unsigned size); +inline int istrcmp(const char* str1, const char* str2); +inline bool strbegin(const char* str, const char* key); +inline bool istrbegin(const char* str, const char* key); +inline bool strend(const char* str, const char* key); +inline bool istrend(const char* str, const char* key); + +//convert.hpp +inline char* strlower(char* str); +inline char* strupper(char* str); +inline char* qstrlower(char* str); +inline char* qstrupper(char* str); +inline char* strtr(char* dest, const char* before, const char* after); + +//math-fixed-point.hpp +namespace fixedpoint { +inline intmax_t eval_integer(const char*& s); +inline intmax_t eval(const char*& s, int depth = 0); +inline bool eval(const char* s, intmax_t& result); +inline intmax_t parse(const char* s); +} + +//math-floating-point.hpp +namespace floatingpoint { +inline double eval_integer(const char*& s); +inline double eval(const char*& s, int depth = 0); +inline bool eval(const char* s, double& result); +inline double parse(const char* s); +} + +//strm.hpp +inline unsigned strmcpy(char* target, const char* source, unsigned length); +inline unsigned strmcat(char* target, const char* source, unsigned length); +inline bool strccpy(char* target, const char* source, unsigned length); +inline bool strccat(char* target, const char* source, unsigned length); +inline void strpcpy(char*& target, const char* source, unsigned& length); + +//strpos.hpp +inline optional strpos(const char* str, const char* key); +inline optional istrpos(const char* str, const char* key); +inline optional qstrpos(const char* str, const char* key); +inline optional iqstrpos(const char* str, const char* key); +template inline optional ustrpos(const char* str, const char* key); + +//trim.hpp +template inline char* ltrim(char* str, const char* key = " "); +template inline char* rtrim(char* str, const char* key = " "); +template inline char* trim(char* str, const char* key = " ", const char* rkey = nullptr); +inline char* strip(char* s); + +//utf8.hpp +struct UTF8 { + unsigned size; //size of encoded codepoint + uint64_t data; //encoded codepoint + unsigned codepoint; //decoded codepoint +}; +inline UTF8 utf8_read(const char* s); +inline void utf8_write(char* s, const UTF8& utf8); + +//utility.hpp +template alwaysinline bool chrequal(char x, char y); +template alwaysinline bool quoteskip(T*& p); +template alwaysinline bool quotecopy(char*& t, T*& p); + +//wildcard.hpp +inline bool wildcard(const char* str, const char* pattern); +inline bool iwildcard(const char* str, const char* pattern); +inline bool tokenize(const char* s, const char* p); + +} + +#endif diff --git a/higan/nall/string/compare.hpp b/higan/nall/string/char/compare.hpp old mode 100755 new mode 100644 similarity index 83% rename from higan/nall/string/compare.hpp rename to higan/nall/string/char/compare.hpp index d7e624e0..ff9bf54b --- a/higan/nall/string/compare.hpp +++ b/higan/nall/string/char/compare.hpp @@ -10,6 +10,14 @@ char chrupper(char c) { return (c >= 'a' && c <= 'z') ? c - ('a' - 'A') : c; } +int imemcmp(const char* str1, const char* str2, unsigned size) { + while(size--) { + if(chrlower(*str1) != chrlower(*str2)) break; + str1++, str2++; + } + return (int)chrlower(*str1) - (int)chrlower(*str2); +} + int istrcmp(const char* str1, const char* str2) { while(*str1) { if(chrlower(*str1) != chrlower(*str2)) break; @@ -19,6 +27,7 @@ int istrcmp(const char* str1, const char* str2) { } bool strbegin(const char* str, const char* key) { + if(!str || !key) return false; int i, ssl = strlen(str), ksl = strlen(key); if(ksl > ssl) return false; @@ -26,6 +35,7 @@ bool strbegin(const char* str, const char* key) { } bool istrbegin(const char* str, const char* key) { + if(!str || !key) return false; int ssl = strlen(str), ksl = strlen(key); if(ksl > ssl) return false; @@ -42,6 +52,7 @@ bool istrbegin(const char* str, const char* key) { } bool strend(const char* str, const char* key) { + if(!str || !key) return false; int ssl = strlen(str), ksl = strlen(key); if(ksl > ssl) return false; @@ -49,6 +60,7 @@ bool strend(const char* str, const char* key) { } bool istrend(const char* str, const char* key) { + if(!str || !key) return false; int ssl = strlen(str), ksl = strlen(key); if(ksl > ssl) return false; diff --git a/higan/nall/string/convert.hpp b/higan/nall/string/char/convert.hpp old mode 100755 new mode 100644 similarity index 100% rename from higan/nall/string/convert.hpp rename to higan/nall/string/char/convert.hpp diff --git a/higan/nall/string/math-fixed-point.hpp b/higan/nall/string/char/math-fixed-point.hpp old mode 100755 new mode 100644 similarity index 95% rename from higan/nall/string/math-fixed-point.hpp rename to higan/nall/string/char/math-fixed-point.hpp index 0f2c2a56..839c5370 --- a/higan/nall/string/math-fixed-point.hpp +++ b/higan/nall/string/char/math-fixed-point.hpp @@ -1,10 +1,11 @@ #ifdef NALL_STRING_INTERNAL_HPP +namespace nall { namespace fixedpoint { static nall::function eval_fallback; -static intmax_t eval_integer(const char*& s) { +intmax_t eval_integer(const char*& s) { if(!*s) throw "unrecognized integer"; intmax_t value = 0, x = *s, y = *(s + 1); @@ -58,7 +59,7 @@ static intmax_t eval_integer(const char*& s) { throw "unrecognized integer"; } -static intmax_t eval(const char*& s, int depth = 0) { +intmax_t eval(const char*& s, int depth) { while(*s == ' ' || *s == '\t') s++; //trim whitespace if(!*s) throw "unrecognized token"; intmax_t value = 0, x = *s, y = *(s + 1); @@ -142,7 +143,7 @@ static intmax_t eval(const char*& s, int depth = 0) { return value; } -static bool eval(const char* s, intmax_t &result) { +bool eval(const char* s, intmax_t& result) { try { result = eval(s); return true; @@ -152,7 +153,7 @@ static bool eval(const char* s, intmax_t &result) { } } -static intmax_t parse(const char* s) { +intmax_t parse(const char* s) { try { intmax_t result = eval(s); return result; @@ -161,6 +162,7 @@ static intmax_t parse(const char* s) { } } +} } #endif diff --git a/higan/nall/string/math-floating-point.hpp b/higan/nall/string/char/math-floating-point.hpp old mode 100755 new mode 100644 similarity index 93% rename from higan/nall/string/math-floating-point.hpp rename to higan/nall/string/char/math-floating-point.hpp index 5db7f833..66b65dd2 --- a/higan/nall/string/math-floating-point.hpp +++ b/higan/nall/string/char/math-floating-point.hpp @@ -1,10 +1,11 @@ #ifdef NALL_STRING_INTERNAL_HPP +namespace nall { namespace floatingpoint { static nall::function eval_fallback; -static double eval_integer(const char*& s) { +double eval_integer(const char*& s) { if(!*s) throw "unrecognized integer"; intmax_t value = 0, radix = 0, x = *s, y = *(s + 1); @@ -45,9 +46,10 @@ static double eval_integer(const char*& s) { return value; } //floating-point + unsigned divisor = 1; while(true) { - if(*s >= '0' && *s <= '9') { radix = radix * 10 + (*s++ - '0'); continue; } - return atof(nall::string{ nall::decimal(value), ".", nall::decimal(radix) }); + if(*s >= '0' && *s <= '9') { radix = radix * 10 + (*s++ - '0'); divisor *= 10; continue; } + return (double)value + (double)radix / (double)divisor; } } @@ -64,7 +66,7 @@ static double eval_integer(const char*& s) { throw "unrecognized integer"; } -static double eval(const char*& s, int depth = 0) { +double eval(const char*& s, int depth) { while(*s == ' ' || *s == '\t') s++; //trim whitespace if(!*s) throw "unrecognized token"; double value = 0, x = *s, y = *(s + 1); @@ -133,7 +135,7 @@ static double eval(const char*& s, int depth = 0) { return value; } -static bool eval(const char* s, double& result) { +bool eval(const char* s, double& result) { try { result = eval(s); return true; @@ -143,7 +145,7 @@ static bool eval(const char* s, double& result) { } } -static double parse(const char* s) { +double parse(const char* s) { try { double result = eval(s); return result; @@ -152,6 +154,7 @@ static double parse(const char* s) { } } +} } #endif diff --git a/higan/nall/string/strm.hpp b/higan/nall/string/char/strm.hpp old mode 100755 new mode 100644 similarity index 100% rename from higan/nall/string/strm.hpp rename to higan/nall/string/char/strm.hpp diff --git a/higan/nall/string/strpos.hpp b/higan/nall/string/char/strpos.hpp old mode 100755 new mode 100644 similarity index 100% rename from higan/nall/string/strpos.hpp rename to higan/nall/string/char/strpos.hpp diff --git a/higan/nall/string/trim.hpp b/higan/nall/string/char/trim.hpp old mode 100755 new mode 100644 similarity index 92% rename from higan/nall/string/trim.hpp rename to higan/nall/string/char/trim.hpp index bb2c6474..e9ca2c7d --- a/higan/nall/string/trim.hpp +++ b/higan/nall/string/char/trim.hpp @@ -4,8 +4,8 @@ namespace nall { //limit defaults to zero, which will underflow on first compare; equivalent to no limit template char* ltrim(char* str, const char* key) { + if(!str || !key || !*key) return str; unsigned limit = Limit; - if(!key || !*key) return str; while(strbegin(str, key)) { char* dest = str; char* src = str + strlen(key); @@ -20,8 +20,8 @@ template char* ltrim(char* str, const char* key) { } template char* rtrim(char* str, const char* key) { + if(!str || !key || !*key) return str; unsigned limit = Limit; - if(!key || !*key) return str; while(strend(str, key)) { str[strlen(str) - strlen(key)] = 0; if(--limit == 0) break; @@ -36,6 +36,8 @@ template char* trim(char* str, const char* key, const char* rkey //remove whitespace characters from both left and right sides of string char* strip(char* s) { + if(!s) return nullptr; + signed n = 0, p = 0; while(s[n]) { if(s[n] != ' ' && s[n] != '\t' && s[n] != '\r' && s[n] != '\n') break; @@ -48,6 +50,7 @@ char* strip(char* s) { p--; } s[++p] = 0; + return s; } diff --git a/higan/nall/string/utf8.hpp b/higan/nall/string/char/utf8.hpp old mode 100755 new mode 100644 similarity index 76% rename from higan/nall/string/utf8.hpp rename to higan/nall/string/char/utf8.hpp index 1c16ca49..03eb5ef0 --- a/higan/nall/string/utf8.hpp +++ b/higan/nall/string/char/utf8.hpp @@ -2,13 +2,7 @@ namespace nall { -struct UTF8 { - unsigned size; //size of encoded codepoint - uint64_t data; //encoded codepoint - unsigned codepoint; //decoded codepoint -}; - -inline UTF8 utf8_read(const char* s) { +UTF8 utf8_read(const char* s) { UTF8 utf8; if((*s & 0xfe) == 0xfc) utf8.size = 6; @@ -32,7 +26,7 @@ inline UTF8 utf8_read(const char* s) { return utf8; } -inline void utf8_write(char* s, const UTF8& utf8) { +void utf8_write(char* s, const UTF8& utf8) { for(signed n = utf8.size - 1, shift = 0; n >= 0; n--, shift += 8) { s[n] = utf8.data >> shift; } diff --git a/higan/nall/string/char/utility.hpp b/higan/nall/string/char/utility.hpp new file mode 100644 index 00000000..dc3a411d --- /dev/null +++ b/higan/nall/string/char/utility.hpp @@ -0,0 +1,39 @@ +#ifdef NALL_STRING_INTERNAL_HPP + +namespace nall { + +template +bool chrequal(char x, char y) { + if(Insensitive) return chrlower(x) == chrlower(y); + return x == y; +} + +template +bool quoteskip(T*& p) { + if(Quoted == false) return false; + if(*p != '\'' && *p != '\"') return false; + + while(*p == '\'' || *p == '\"') { + char x = *p++; + while(*p && *p++ != x); + } + return true; +} + +template +bool quotecopy(char*& t, T*& p) { + if(Quoted == false) return false; + if(*p != '\'' && *p != '\"') return false; + + while(*p == '\'' || *p == '\"') { + char x = *p++; + *t++ = x; + while(*p && *p != x) *t++ = *p++; + *t++ = *p++; + } + return true; +} + +} + +#endif diff --git a/higan/nall/string/wildcard.hpp b/higan/nall/string/char/wildcard.hpp old mode 100755 new mode 100644 similarity index 71% rename from higan/nall/string/wildcard.hpp rename to higan/nall/string/char/wildcard.hpp index 1650666b..e1b644aa --- a/higan/nall/string/wildcard.hpp +++ b/higan/nall/string/char/wildcard.hpp @@ -44,7 +44,7 @@ bool iwildcard(const char* s, const char* p) { return !*p; } -inline bool tokenize(const char* s, const char* p) { +bool tokenize(const char* s, const char* p) { while(*s) { if(*p == '*') { while(*s) if(tokenize(s++, p + 1)) return true; @@ -56,25 +56,6 @@ inline bool tokenize(const char* s, const char* p) { return !*p; } -inline bool tokenize(lstring &list, const char* s, const char* p) { - while(*s) { - if(*p == '*') { - const char* b = s; - while(*s) { - if(tokenize(list, s++, p + 1)) { - list.prepend(substr(b, 0, --s - b)); - return true; - } - } - list.prepend(b); - return !*++p; - } - if(*s++ != *p++) return false; - } - while(*p == '*') { list.prepend(s); p++; } - return !*p; -} - } #endif diff --git a/higan/nall/string/core.hpp b/higan/nall/string/core.hpp index d53fcdd2..82016aab 100755 --- a/higan/nall/string/core.hpp +++ b/higan/nall/string/core.hpp @@ -1,62 +1,74 @@ #ifdef NALL_STRING_INTERNAL_HPP +//core functionality +//only this header file may access _data, _size, _capacity directly +//all other headers must use data(), size(), capacity() + namespace nall { -static void istring(string &output) { +char* string::data() { _unique(); return _data.get(); } +const char* string::data() const { if(!_data) return ""; return _data.get(); } +unsigned string::length() const { return strlen(data()); } +unsigned string::size() const { return _size; } +unsigned string::capacity() const { return _capacity; } +bool string::empty() const { return size() == 0; } + +//ensure _data is unique +void string::_unique() { + if(_data.unique()) return; + _copy(); } -template -static void istring(string& output, const T& value, Args&&... args) { - output.append_(make_string(value)); - istring(output, std::forward(args)...); +//copy _data (to make unique or to grow in size) +void string::_copy() { + auto copy = new char[_capacity + 1]; + if(_data.get()) memcpy(copy, _data.get(), min(_capacity, _size)); + copy[_size] = 0; + copy[_capacity] = 0; + _data.reset(copy); +} + +//amortize growth to O(log n) +//allocate one extra byte to always store null-terminator for libc usage +void string::reserve(unsigned capacity) { + if(capacity > _capacity) { + _capacity = bit::round(capacity + 1) - 1; + _copy(); + } +} + +void string::resize(unsigned size) { + reserve(size); + data()[_size = size] = 0; } void string::reset() { - resize(64); - *data = 0; -} - -void string::reserve(unsigned size_) { - if(size_ > size) resize(size_); -} - -void string::resize(unsigned size_) { - size = size_; - data = (char*)realloc(data, size + 1); - data[size] = 0; + _data.reset(); + _capacity = 0; + _size = 0; } void string::clear(char c) { - for(unsigned n = 0; n < size; n++) data[n] = c; - data[size] = 0; -} - -bool string::empty() const { - return !*data; + for(unsigned n = 0; n < size(); n++) data()[n] = c; } template string& string::assign(Args&&... args) { - *data = 0; - istring(*this, std::forward(args)...); + reset(); + sprint(*this, std::forward(args)...); return *this; } template string& string::append(Args&&... args) { - istring(*this, std::forward(args)...); + sprint(*this, std::forward(args)...); return *this; } -string& string::assign_(const char* s) { - unsigned length = strlen(s); - reserve(length); - strcpy(data, s); - return *this; -} - -string& string::append_(const char* s) { - unsigned length = strlen(data) + strlen(s); - reserve(length); - strcat(data, s); +string& string::_append(const char* s) { + if(s == nullptr) return *this; + unsigned basesize = size(), length = strlen(s); + reserve(basesize + length); + memcpy(data() + basesize, s, length); + resize(basesize + length); return *this; } @@ -65,164 +77,64 @@ string::operator bool() const { } string::operator const char*() const { - return data; + return data(); } -char* string::operator()() { - return data; +char& string::operator[](unsigned position) { + if(position > size() + 1) throw exception_out_of_bounds{}; + return data()[position]; } -char& string::operator[](int index) { - reserve(index); - return data[index]; +const char& string::operator[](unsigned position) const { + if(position > size() + 1) throw exception_out_of_bounds{}; + return data()[position]; } -bool string::operator==(const char* str) const { return strcmp(data, str) == 0; } -bool string::operator!=(const char* str) const { return strcmp(data, str) != 0; } -bool string::operator< (const char* str) const { return strcmp(data, str) < 0; } -bool string::operator<=(const char* str) const { return strcmp(data, str) <= 0; } -bool string::operator> (const char* str) const { return strcmp(data, str) > 0; } -bool string::operator>=(const char* str) const { return strcmp(data, str) >= 0; } +bool string::operator==(const char* str) const { return strcmp(data(), str) == 0; } +bool string::operator!=(const char* str) const { return strcmp(data(), str) != 0; } +bool string::operator< (const char* str) const { return strcmp(data(), str) < 0; } +bool string::operator<=(const char* str) const { return strcmp(data(), str) <= 0; } +bool string::operator> (const char* str) const { return strcmp(data(), str) > 0; } +bool string::operator>=(const char* str) const { return strcmp(data(), str) >= 0; } -string& string::operator=(const string& value) { - if(&value == this) return *this; - assign(value); +string& string::operator=(const string& source) { + if(&source == this) return *this; + _data = source._data; + _capacity = source._capacity; + _size = source._size; return *this; } string& string::operator=(string&& source) { if(&source == this) return *this; - if(data) free(data); - size = source.size; - data = source.data; - source.data = nullptr; - source.size = 0; + _data = std::move(source._data); + _capacity = source._capacity; + _size = source._size; + source._capacity = 0; + source._size = 0; return *this; } -template string::string(Args&&... args) { - size = 64; - data = (char*)malloc(size + 1); - *data = 0; - istring(*this, std::forward(args)...); -} - -string::string(const string& value) { - if(&value == this) return; - size = strlen(value); - data = strdup(value); +string::string(const string& source) { + operator=(source); } string::string(string&& source) { - if(&source == this) return; - size = source.size; - data = source.data; - source.data = nullptr; + operator=(std::move(source)); +} + +template string::string(T&& source, Args&&... args) { + _capacity = 0; + _size = 0; + sprint(*this, std::forward(source), std::forward(args)...); +} + +string::string() { + _capacity = 0; + _size = 0; } string::~string() { - if(data) free(data); -} - -bool string::readfile(const string& filename) { - assign(""); - - #if !defined(_WIN32) - FILE *fp = fopen(filename, "rb"); - #else - FILE *fp = _wfopen(utf16_t(filename), L"rb"); - #endif - if(!fp) return false; - - fseek(fp, 0, SEEK_END); - unsigned size = ftell(fp); - rewind(fp); - char *fdata = new char[size + 1]; - unsigned unused = fread(fdata, 1, size, fp); - fclose(fp); - fdata[size] = 0; - assign(fdata); - delete[] fdata; - - return true; -} - -optional lstring::find(const char* key) const { - for(unsigned i = 0; i < size(); i++) { - if(operator[](i) == key) return { true, i }; - } - return { false, 0 }; -} - -string lstring::concatenate(const char* separator) const { - string output; - for(unsigned i = 0; i < size(); i++) { - output.append(operator[](i), i < size() - 1 ? separator : ""); - } - return output; -} - -lstring& lstring::isort() { - nall::sort(pool, objectsize, [](const string& x, const string& y) { - return istrcmp(x, y) < 0; - }); - return *this; -} - -lstring& lstring::strip() { - for(unsigned n = 0; n < size(); n++) { - operator[](n).strip(); - } - return *this; -} - -template void lstring::append(const string& data, Args&&... args) { - vector::append(data); - append(std::forward(args)...); -} - -bool lstring::operator==(const lstring& source) const { - if(this == &source) return true; - if(size() != source.size()) return false; - for(unsigned n = 0; n < size(); n++) { - if(operator[](n) != source[n]) return false; - } - return true; -} - -bool lstring::operator!=(const lstring& source) const { - return !operator==(source); -} - -lstring& lstring::operator=(const lstring& source) { - vector::operator=(source); - return *this; -} - -lstring& lstring::operator=(lstring& source) { - vector::operator=(source); - return *this; -} - -lstring& lstring::operator=(lstring&& source) { - vector::operator=(std::move(source)); - return *this; -} - -template lstring::lstring(Args&&... args) { - append(std::forward(args)...); -} - -lstring::lstring(const lstring& source) { - vector::operator=(source); -} - -lstring::lstring(lstring& source) { - vector::operator=(source); -} - -lstring::lstring(lstring&& source) { - vector::operator=(std::move(source)); } } diff --git a/higan/nall/string/cstring.hpp b/higan/nall/string/cstring.hpp deleted file mode 100755 index d9a9cdea..00000000 --- a/higan/nall/string/cstring.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#ifdef NALL_STRING_INTERNAL_HPP - -//const string: -//bind a const char* pointer to an object that has various testing functionality; -//yet lacks the memory allocation and modification functionality of the string class - -namespace nall { - -cstring::operator const char*() const { return data; } -unsigned cstring::length() const { return strlen(data); } -bool cstring::operator==(const char* s) const { return !strcmp(data, s); } -bool cstring::operator!=(const char* s) const { return strcmp(data, s); } -optional cstring::position (const char* key) const { return strpos(data, key); } -optional cstring::iposition(const char* key) const { return istrpos(data, key); } -cstring& cstring::operator=(const char* data) { this->data = data; return *this; } -cstring::cstring(const char* data) : data(data) {} -cstring::cstring() : data("") {} - -} - -#endif diff --git a/higan/nall/string/datetime.hpp b/higan/nall/string/datetime.hpp index f2ddb8d2..b55659a1 100644 --- a/higan/nall/string/datetime.hpp +++ b/higan/nall/string/datetime.hpp @@ -6,9 +6,9 @@ string string::date() { time_t timestamp = ::time(nullptr); tm* info = localtime(×tamp); return { - decimal<4, '0'>(1900 + info->tm_year), "-", - decimal<2, '0'>(1 + info->tm_mon), "-", - decimal<2, '0'>(info->tm_mday) + format<4, '0'>(1900 + info->tm_year), "-", + format<2, '0'>(1 + info->tm_mon), "-", + format<2, '0'>(info->tm_mday) }; } @@ -16,9 +16,9 @@ string string::time() { time_t timestamp = ::time(nullptr); tm* info = localtime(×tamp); return { - decimal<2, '0'>(info->tm_hour), ":", - decimal<2, '0'>(info->tm_min), ":", - decimal<2, '0'>(info->tm_sec) + format<2, '0'>(info->tm_hour), ":", + format<2, '0'>(info->tm_min), ":", + format<2, '0'>(info->tm_sec) }; } diff --git a/higan/nall/string/file.hpp b/higan/nall/string/file.hpp new file mode 100644 index 00000000..a287ac2a --- /dev/null +++ b/higan/nall/string/file.hpp @@ -0,0 +1,37 @@ +#ifdef NALL_STRING_INTERNAL_HPP + +namespace nall { + +bool string::readfile(rstring filename) { + reset(); + + #if !defined(_WIN32) + FILE* fp = fopen(filename, "rb"); + #else + FILE* fp = _wfopen(utf16_t(filename), L"rb"); + #endif + if(!fp) return false; + + fseek(fp, 0, SEEK_END); + unsigned fsize = ftell(fp); + rewind(fp); + char *fdata = new char[fsize + 1]; + unsigned unused = fread(fdata, 1, fsize, fp); + fclose(fp); + fdata[fsize] = 0; + resize(fsize); + memcpy(data(), fdata, fsize); + delete[] fdata; + + return true; +} + +string string::read(rstring filename) { + string data; + data.readfile(filename); + return data; +} + +} + +#endif diff --git a/higan/nall/string/filename.hpp b/higan/nall/string/filename.hpp index 19b5f117..a176e441 100755 --- a/higan/nall/string/filename.hpp +++ b/higan/nall/string/filename.hpp @@ -5,7 +5,7 @@ namespace nall { // "/foo/bar.c" -> "/foo/" // "/foo/" -> "/foo/" // "bar.c" -> "./" -inline string dir(string name) { +string dir(string name) { for(signed i = name.length(); i >= 0; i--) { if(name[i] == '/' || name[i] == '\\') { name[i + 1] = 0; @@ -19,7 +19,7 @@ inline string dir(string name) { // "/foo/bar.c" -> "bar.c" // "/foo/" -> "" // "bar.c" -> "bar.c" -inline string notdir(string name) { +string notdir(string name) { for(signed i = name.length(); i >= 0; i--) { if(name[i] == '/' || name[i] == '\\') { return (const char*)name + i + 1; @@ -31,7 +31,7 @@ inline string notdir(string name) { // "/foo/bar/baz" -> "/foo/bar/" // "/foo/bar/" -> "/foo/" // "/foo/bar" -> "/foo/" -inline string parentdir(string name) { +string parentdir(string name) { unsigned length = name.length(), paths = 0, prev, last; for(unsigned i = 0; i < length; i++) { if(name[i] == '/' || name[i] == '\\') { @@ -46,7 +46,7 @@ inline string parentdir(string name) { } // "/foo/bar.c" -> "/foo/bar" -inline string basename(string name) { +string basename(string name) { for(signed i = name.length(); i >= 0; i--) { if(name[i] == '/' || name[i] == '\\') break; //file has no extension if(name[i] == '.') { @@ -59,7 +59,7 @@ inline string basename(string name) { // "/foo/bar.c" -> "c" // "/foo/bar" -> "" -inline string extension(string name) { +string extension(string name) { for(signed i = name.length(); i >= 0; i--) { if(name[i] == '/' || name[i] == '\\') return ""; //file has no extension if(name[i] == '.') { diff --git a/higan/nall/string/format.hpp b/higan/nall/string/format.hpp index 7b0b391d..b9ed3ff2 100644 --- a/higan/nall/string/format.hpp +++ b/higan/nall/string/format.hpp @@ -8,9 +8,8 @@ template string format(const string& value) { bool padright = precision >= 0; unsigned padding = abs(precision); - unsigned length = value.length(); - if(padding <= length) { - if(padright) return substr(value, length - padding); + if(padding <= value.size()) { + if(padright) return substr(value, value.size() - padding); else return substr(value, 0, padding); } @@ -18,7 +17,7 @@ template string format(const string& value) { buffer.resize(padding); buffer.clear(padchar); - memcpy(buffer() + (padright ? padding - length : 0), value, length); + memcpy(buffer.data() + (padright ? padding - value.size() : 0), value, value.size()); return buffer; } diff --git a/higan/nall/string/list.hpp b/higan/nall/string/list.hpp new file mode 100644 index 00000000..d9b85afe --- /dev/null +++ b/higan/nall/string/list.hpp @@ -0,0 +1,86 @@ +#ifdef NALL_STRING_INTERNAL_HPP + +namespace nall { + +optional lstring::find(rstring key) const { + for(unsigned i = 0; i < size(); i++) { + if(operator[](i) == key) return {true, i}; + } + return false; +} + +string lstring::concatenate(const string& separator) const { + string output; + for(unsigned i = 0; i < size(); i++) { + output.append(operator[](i)); + if(i < size() - 1) output.append(separator); + } + return output; +} + +lstring& lstring::isort() { + nall::sort(pool, objectsize, [](const string& x, const string& y) { + return istrcmp(x, y) < 0; + }); + return *this; +} + +lstring& lstring::strip() { + for(unsigned n = 0; n < size(); n++) { + operator[](n).strip(); + } + return *this; +} + +template void lstring::append(const string& data, Args&&... args) { + vector::append(data); + append(std::forward(args)...); +} + +bool lstring::operator==(const lstring& source) const { + if(this == &source) return true; + if(size() != source.size()) return false; + for(unsigned n = 0; n < size(); n++) { + if(operator[](n) != source[n]) return false; + } + return true; +} + +bool lstring::operator!=(const lstring& source) const { + return !operator==(source); +} + +lstring& lstring::operator=(const lstring& source) { + vector::operator=(source); + return *this; +} + +lstring& lstring::operator=(lstring& source) { + vector::operator=(source); + return *this; +} + +lstring& lstring::operator=(lstring&& source) { + vector::operator=(std::move(source)); + return *this; +} + +template lstring::lstring(Args&&... args) { + append(std::forward(args)...); +} + +lstring::lstring(const lstring& source) { + vector::operator=(source); +} + +lstring::lstring(lstring& source) { + vector::operator=(source); +} + +lstring::lstring(lstring&& source) { + vector::operator=(std::move(source)); +} + +} + +#endif diff --git a/higan/nall/string/markup/bml.hpp b/higan/nall/string/markup/bml.hpp index f627dd8c..6743a80e 100644 --- a/higan/nall/string/markup/bml.hpp +++ b/higan/nall/string/markup/bml.hpp @@ -107,10 +107,9 @@ protected: //remove empty lines and comment lines for(unsigned y = 0; y < text.size();) { - text[y].rtrim<1>("\n"); unsigned x = 0; bool empty = true; - while(text[y][x]) { + while(x < text[y].size()) { if(text[y][x] == ' ' || text[y][x] == '\t') { x++; continue; } empty = (text[y][x + 0] == '/' && text[y][x + 1] == '/'); break; diff --git a/higan/nall/string/markup/xml.hpp b/higan/nall/string/markup/xml.hpp index 7cd34bca..6debcc37 100644 --- a/higan/nall/string/markup/xml.hpp +++ b/higan/nall/string/markup/xml.hpp @@ -44,7 +44,7 @@ protected: return; #endif - char* output = target(); + char* output = target.data(); while(length) { if(*source == '&') { if(!memcmp(source, "<", 4)) { *output++ = '<'; source += 4; length -= 4; continue; } diff --git a/higan/nall/string/ref.hpp b/higan/nall/string/ref.hpp new file mode 100644 index 00000000..e973bd21 --- /dev/null +++ b/higan/nall/string/ref.hpp @@ -0,0 +1,69 @@ +#ifdef NALL_STRING_INTERNAL_HPP + +namespace nall { + +struct stringref { + operator const char*() const { + return _data; + } + + const char* data() const { + return _data; + } + + unsigned size() const { + if(!_initialized) { + _size = strlen(_data); + _initialized = 1; + } + return _size; + } + + stringref() = delete; + stringref(const stringref& source) = delete; + stringref(stringref&& source) = delete; + + template + stringref(T&& source, Args&&... args) { + if(sizeof...(Args) == 0) { construct(std::forward(source)); _string = nullptr; return; } + _string = new string(std::forward(source), std::forward(args)...); + _data = _string->data(); + _size = _string->size(); + _initialized = 1; + } + + ~stringref() { + if(_string) delete _string; + } + +protected: + const char* _data; + string* _string; + mutable unsigned _size; + mutable bool _initialized; + + template + void construct(const char (&source)[size]) { + _data = source; + _size = size - 1; + _initialized = 1; + } + + template::value>::type> + void construct(const T* source) { + _data = source; + _size = 0; + _initialized = 0; + } + + template::value>::type> + void construct(const T& source) { + _data = source.data(); + _size = source.size(); + _initialized = 1; + } +}; + +} + +#endif diff --git a/higan/nall/string/replace.hpp b/higan/nall/string/replace.hpp index 550b116f..cb2db8d1 100755 --- a/higan/nall/string/replace.hpp +++ b/higan/nall/string/replace.hpp @@ -3,49 +3,52 @@ namespace nall { template -string& string::ureplace(const char* key, const char* token) { - if(!key || !*key) return *this; +string& string::ureplace(rstring key, rstring token) { + if(key.size() == 0) return *this; enum : unsigned { limit = Limit ? Limit : ~0u }; - const char* p = data; - unsigned counter = 0, keyLength = 0; + const char* p = data(); + unsigned counter = 0; while(*p) { if(quoteskip(p)) continue; for(unsigned n = 0;; n++) { - if(key[n] == 0) { counter++; p += n; keyLength = n; break; } + if(key[n] == 0) { counter++; p += n; break; } if(!chrequal(key[n], p[n])) { p++; break; } } } if(counter == 0) return *this; if(Limit) counter = min(counter, Limit); - char* t = data; - char* base; - unsigned tokenLength = strlen(token); - if(tokenLength > keyLength) { - t = base = strdup(data); - reserve((unsigned)(p - data) + ((tokenLength - keyLength) * counter)); + char* t = data(); + char* base = nullptr; + signed displacement = token.size() - key.size(); + signed displacementSize = displacement * counter; + + if(token.size() > key.size()) { + t = base = strdup(data()); + reserve((unsigned)(p - data()) + displacementSize); } - char* o = data; + char* o = data(); while(*t && counter) { if(quotecopy(o, t)) continue; for(unsigned n = 0;; n++) { - if(key[n] == 0) { counter--; memcpy(o, token, tokenLength); t += keyLength; o += tokenLength; break; } + if(key[n] == 0) { counter--; memcpy(o, token, token.size()); t += key.size(); o += token.size(); break; } if(!chrequal(key[n], t[n])) { *o++ = *t++; break; } } } do *o++ = *t; while(*t++); - if(tokenLength > keyLength) free(base); + if(base) free(base); + resize(_size + displacementSize); return *this; } -template string& string::replace(const char* key, const char* token) { return ureplace(key, token); } -template string& string::ireplace(const char* key, const char* token) { return ureplace(key, token); } -template string& string::qreplace(const char* key, const char* token) { return ureplace(key, token); } -template string& string::iqreplace(const char* key, const char* token) { return ureplace(key, token); } +template string& string::replace(rstring key, rstring token) { return ureplace(key, token); } +template string& string::ireplace(rstring key, rstring token) { return ureplace(key, token); } +template string& string::qreplace(rstring key, rstring token) { return ureplace(key, token); } +template string& string::iqreplace(rstring key, rstring token) { return ureplace(key, token); } }; diff --git a/higan/nall/string/split.hpp b/higan/nall/string/split.hpp index 4e092a76..90521e1f 100755 --- a/higan/nall/string/split.hpp +++ b/higan/nall/string/split.hpp @@ -2,10 +2,11 @@ namespace nall { -template lstring& lstring::usplit(const char* key, const char* base) { +template lstring& lstring::usplit(rstring key, rstring base) { reset(); - if(!key || !*key) return *this; + if(key.size() == 0) return *this; + const char* b = base; const char* p = base; while(*p) { @@ -13,23 +14,23 @@ template lstring& lstring::usplit if(quoteskip(p)) continue; for(unsigned n = 0;; n++) { if(key[n] == 0) { - append(substr(base, 0, p - base)); + append(substr(b, 0, p - b)); p += n; - base = p; + b = p; break; } if(!chrequal(key[n], p[n])) { p++; break; } } } - append(base); + append(b); return *this; } -template lstring& lstring::split(const char* key, const char* src) { return usplit(key, src); } -template lstring& lstring::isplit(const char* key, const char* src) { return usplit(key, src); } -template lstring& lstring::qsplit(const char* key, const char* src) { return usplit(key, src); } -template lstring& lstring::iqsplit(const char* key, const char* src) { return usplit(key, src); } +template lstring& lstring::split(rstring key, rstring src) { return usplit(key, src); } +template lstring& lstring::isplit(rstring key, rstring src) { return usplit(key, src); } +template lstring& lstring::qsplit(rstring key, rstring src) { return usplit(key, src); } +template lstring& lstring::iqsplit(rstring key, rstring src) { return usplit(key, src); } }; diff --git a/higan/nall/string/static.hpp b/higan/nall/string/static.hpp deleted file mode 100755 index 0edbf750..00000000 --- a/higan/nall/string/static.hpp +++ /dev/null @@ -1,13 +0,0 @@ -#ifdef NALL_STRING_INTERNAL_HPP - -namespace nall { - -string string::read(const string& filename) { - string data; - data.readfile(filename); - return data; -} - -} - -#endif diff --git a/higan/nall/string/utility.hpp b/higan/nall/string/utility.hpp index b0e1ed58..9880c72d 100755 --- a/higan/nall/string/utility.hpp +++ b/higan/nall/string/utility.hpp @@ -2,50 +2,12 @@ namespace nall { -template -bool chrequal(char x, char y) { - if(Insensitive) return chrlower(x) == chrlower(y); - return x == y; -} - -template -bool quoteskip(T*& p) { - if(Quoted == false) return false; - if(*p != '\'' && *p != '\"') return false; - - while(*p == '\'' || *p == '\"') { - char x = *p++; - while(*p && *p++ != x); - } - return true; -} - -template -bool quotecopy(char*& t, T*& p) { - if(Quoted == false) return false; - if(*p != '\'' && *p != '\"') return false; - - while(*p == '\'' || *p == '\"') { - char x = *p++; - *t++ = x; - while(*p && *p != x) *t++ = *p++; - *t++ = *p++; - } - return true; -} - -string substr(const char* src, unsigned start, unsigned length) { - string dest; - if(length == ~0u) { - //copy entire string - dest.reserve(strlen(src + start) + 1); - strcpy(dest(), src + start); - } else { - //copy partial string - dest.reserve(length + 1); - strmcpy(dest(), src + start, length + 1); - } - return dest; +string substr(rstring source, unsigned offset, unsigned length) { + string result; + if(length == ~0u) length = source.size() - offset; + result.resize(length); + memcpy(result.data(), source.data() + offset, length); + return result; } string sha256(const uint8_t* data, unsigned size) { @@ -56,11 +18,28 @@ string sha256(const uint8_t* data, unsigned size) { sha256_final(&sha); sha256_hash(&sha, hash); string result; - for(auto &byte : hash) result.append(hex<2>(byte)); + for(auto& byte : hash) result.append(hex<2>(byte)); return result; } -/* cast.hpp arithmetic -> string */ +bool tokenize(lstring& list, const char* s, const char* p) { + while(*s) { + if(*p == '*') { + const char* b = s; + while(*s) { + if(tokenize(list, s++, p + 1)) { + list.prepend(substr(b, 0, --s - b)); + return true; + } + } + list.prepend(b); + return !*++p; + } + if(*s++ != *p++) return false; + } + while(*p == '*') { list.prepend(s); p++; } + return !*p; +} char* integer(char* result, intmax_t value) { bool negative = value < 0; @@ -97,110 +76,6 @@ char* decimal(char* result, uintmax_t value) { return result; } -/* general-purpose arithmetic -> string */ - -template string integer(intmax_t value) { - bool negative = value < 0; - if(negative) value = -value; - - char buffer[64]; - unsigned size = 0; - - do { - unsigned n = value % 10; - buffer[size++] = '0' + n; - value /= 10; - } while(value); - if(negative) buffer[size++] = '-'; -//buffer[size++] = negative ? '-' : '+'; - buffer[size] = 0; - - unsigned length = (length_ == 0 ? size : length_); - char result[length + 1]; - memset(result, padding, length); - result[length] = 0; - - for(signed x = length - 1, y = 0; x >= 0 && y < size; x--, y++) { - result[x] = buffer[y]; - } - - return (const char*)result; -} - -template string linteger(intmax_t value) { - bool negative = value < 0; - if(negative) value = -value; - - char buffer[64]; - unsigned size = 0; - - do { - unsigned n = value % 10; - buffer[size++] = '0' + n; - value /= 10; - } while(value); - if(negative) buffer[size++] = '-'; -//buffer[size++] = negative ? '-' : '+'; - buffer[size] = 0; - - unsigned length = (length_ == 0 ? size : length_); - char result[length + 1]; - memset(result, padding, length); - result[length] = 0; - - for(signed x = 0, y = size - 1; x < length && y >= 0; x++, y--) { - result[x] = buffer[y]; - } - - return (const char*)result; -} - -template string decimal(uintmax_t value) { - char buffer[64]; - unsigned size = 0; - - do { - unsigned n = value % 10; - buffer[size++] = '0' + n; - value /= 10; - } while(value); - buffer[size] = 0; - - unsigned length = (length_ == 0 ? size : length_); - char result[length + 1]; - memset(result, padding, length); - result[length] = 0; - - for(signed x = length - 1, y = 0; x >= 0 && y < size; x--, y++) { - result[x] = buffer[y]; - } - - return (const char*)result; -} - -template string ldecimal(uintmax_t value) { - char buffer[64]; - unsigned size = 0; - - do { - unsigned n = value % 10; - buffer[size++] = '0' + n; - value /= 10; - } while(value); - buffer[size] = 0; - - unsigned length = (length_ == 0 ? size : length_); - char result[length + 1]; - memset(result, padding, length); - result[length] = 0; - - for(signed x = 0, y = size - 1; x < length && y >= 0; x++, y--) { - result[x] = buffer[y]; - } - - return (const char*)result; -} - //using sprintf is certainly not the most ideal method to convert //a double to a string ... but attempting to parse a double by //hand, digit-by-digit, results in subtle rounding errors. @@ -233,7 +108,7 @@ unsigned fp(char* str, long double value) { string fp(long double value) { string temp; temp.reserve(fp(nullptr, value)); - fp(temp(), value); + fp(temp.data(), value); return temp; } diff --git a/higan/nall/string/variadic.hpp b/higan/nall/string/variadic.hpp index c43bfe86..fed6b7f3 100755 --- a/higan/nall/string/variadic.hpp +++ b/higan/nall/string/variadic.hpp @@ -2,7 +2,16 @@ namespace nall { -template inline void print(Args&&... args) { +void sprint(string& output) { +} + +template +void sprint(string& output, const T& value, Args&&... args) { + output._append(make_string(value)); + sprint(output, std::forward(args)...); +} + +template void print(Args&&... args) { printf("%s", (const char*)string(std::forward(args)...)); } diff --git a/higan/nall/string/wrapper.hpp b/higan/nall/string/wrapper.hpp index 50f3c12c..d5f2deb9 100755 --- a/higan/nall/string/wrapper.hpp +++ b/higan/nall/string/wrapper.hpp @@ -2,46 +2,101 @@ namespace nall { -unsigned string::length() const { return strlen(data); } -unsigned string::capacity() const { return size; } +template lstring string::split(rstring key) const { lstring result; result.split(key, data()); return result; } +template lstring string::isplit(rstring key) const { lstring result; result.isplit(key, data()); return result; } +template lstring string::qsplit(rstring key) const { lstring result; result.qsplit(key, data()); return result; } +template lstring string::iqsplit(rstring key) const { lstring result; result.iqsplit(key, data()); return result; } -template lstring string::split(const char* key) const { lstring result; result.split(key, data); return result; } -template lstring string::isplit(const char* key) const { lstring result; result.isplit(key, data); return result; } -template lstring string::qsplit(const char* key) const { lstring result; result.qsplit(key, data); return result; } -template lstring string::iqsplit(const char* key) const { lstring result; result.iqsplit(key, data); return result; } +bool string::wildcard(rstring source) const { return nall::wildcard(data(), source); } +bool string::iwildcard(rstring source) const { return nall::iwildcard(data(), source); } -bool string::equals(const char* str) const { return !strcmp(data, str); } -bool string::iequals(const char* str) const { return !istrcmp(data, str); } +bool string::equals(rstring source) const { + if(size() != source.size()) return false; + return memcmp(data(), source.data(), source.size()) == 0; +} -bool string::wildcard(const char* str) const { return nall::wildcard(data, str); } -bool string::iwildcard(const char* str) const { return nall::iwildcard(data, str); } +bool string::iequals(rstring source) const { + if(size() != source.size()) return false; + return imemcmp(data(), source.data(), source.size()) == 0; +} -bool string::beginswith(const char* str) const { return strbegin(data, str); } -bool string::ibeginswith(const char* str) const { return istrbegin(data, str); } +bool string::beginswith(rstring source) const { + if(source.size() > size()) return false; + return memcmp(data(), source.data(), source.size()) == 0; +} -bool string::endswith(const char* str) const { return strend(data, str); } -bool string::iendswith(const char* str) const { return istrend(data, str); } +bool string::ibeginswith(rstring source) const { + if(source.size() > size()) return false; + return imemcmp(data(), source.data(), source.size()) == 0; +} + +bool string::endswith(rstring source) const { + if(source.size() > size()) return false; + return memcmp(data() + size() - source.size(), source.data(), source.size()) == 0; +} + +bool string::iendswith(rstring source) const { + if(source.size() > size()) return false; + return imemcmp(data() + size() - source.size(), source.data(), source.size()) == 0; +} + +string& string::lower() { nall::strlower(data()); return *this; } +string& string::upper() { nall::strupper(data()); return *this; } +string& string::qlower() { nall::qstrlower(data()); return *this; } +string& string::qupper() { nall::qstrupper(data()); return *this; } + +string& string::transform(rstring before, rstring after) { nall::strtr(data(), before, after); return *this; } -string& string::lower() { nall::strlower(data); return *this; } -string& string::upper() { nall::strupper(data); return *this; } -string& string::qlower() { nall::qstrlower(data); return *this; } -string& string::qupper() { nall::qstrupper(data); return *this; } -string& string::transform(const char* before, const char* after) { nall::strtr(data, before, after); return *this; } string& string::reverse() { - unsigned length = strlen(data), pivot = length >> 1; - for(signed x = 0, y = length - 1; x < pivot && y >= 0; x++, y--) std::swap(data[x], data[y]); + unsigned length = size(), pivot = length >> 1; + for(signed x = 0, y = length - 1; x < pivot && y >= 0; x++, y--) std::swap(data()[x], data()[y]); return *this; } -template string& string::ltrim(const char* key) { nall::ltrim(data, key); return *this; } -template string& string::rtrim(const char* key) { nall::rtrim(data, key); return *this; } -template string& string::trim(const char* key, const char* rkey) { nall::trim (data, key, rkey); return *this; } -string& string::strip() { nall::strip(data); return *this; } +template string& string::ltrim(rstring key) { + if(key.size() == 0) return *this; + unsigned limit = Limit ? Limit : ~0u, offset = 0; -optional string::position(const char* key) const { return strpos(data, key); } -optional string::iposition(const char* key) const { return istrpos(data, key); } -optional string::qposition(const char* key) const { return qstrpos(data, key); } -optional string::iqposition(const char* key) const { return iqstrpos(data, key); } + while(limit && size() - offset >= key.size()) { + if(memcmp(data() + offset, key.data(), key.size())) break; + offset += key.size(); + limit--; + } + + if(offset) memmove(data(), data() + offset, size() - offset); + resize(size() - offset); + return *this; +} + +template string& string::rtrim(rstring key) { + if(key.size() == 0) return *this; + unsigned limit = Limit ? Limit : ~0u, offset = 0; + + while(limit && size() - offset >= key.size()) { + if(memcmp(data() + size() - key.size() - offset, key.data(), key.size())) break; + offset += key.size(); + limit--; + } + + resize(size() - offset); + return *this; +} + +template string& string::trim(rstring key, rstring rkey) { + rtrim(rkey.size() ? rkey : key); + return ltrim(key); +} + +string& string::strip() { + nall::strip(data()); + resize(length()); + return *this; +} + +optional string::position(rstring key) const { return strpos(data(), key); } +optional string::iposition(rstring key) const { return istrpos(data(), key); } +optional string::qposition(rstring key) const { return qstrpos(data(), key); } +optional string::iqposition(rstring key) const { return iqstrpos(data(), key); } } diff --git a/higan/phoenix/core/core.cpp b/higan/phoenix/core/core.cpp index 917e0e08..0a324c65 100755 --- a/higan/phoenix/core/core.cpp +++ b/higan/phoenix/core/core.cpp @@ -61,7 +61,7 @@ void Application::quit() { return pApplication::quit(); } -void Application::setName(const string& name) { +void Application::setName(string name) { applicationState.name = name; } @@ -99,7 +99,7 @@ string Geometry::text() const { return {x, ",", y, ",", width, ",", height}; } -Geometry::Geometry(const string& text) { +Geometry::Geometry(string text) { lstring part = text.split(","); x = integer(part(0, "256")); y = integer(part(1, "256")); @@ -110,19 +110,19 @@ Geometry::Geometry(const string& text) { //Font //==== -string Font::serif(unsigned size, const string& style) { +string Font::serif(unsigned size, string style) { return pFont::serif(size, style); } -string Font::sans(unsigned size, const string& style) { +string Font::sans(unsigned size, string style) { return pFont::sans(size, style); } -string Font::monospace(unsigned size, const string& style) { +string Font::monospace(unsigned size, string style) { return pFont::monospace(size, style); } -Size Font::size(const string &font, const string& text) { +Size Font::size(string font, string text) { return pFont::size(font, text); } @@ -192,12 +192,12 @@ BrowserWindow& BrowserWindow::setParent(Window& parent) { return *this; } -BrowserWindow& BrowserWindow::setPath(const string& path) { +BrowserWindow& BrowserWindow::setPath(string path) { state.path = path; return *this; } -BrowserWindow& BrowserWindow::setTitle(const string& title) { +BrowserWindow& BrowserWindow::setTitle(string title) { state.title = title; return *this; } @@ -233,12 +233,12 @@ MessageWindow& MessageWindow::setParent(Window& parent) { return *this; } -MessageWindow& MessageWindow::setText(const string& text) { +MessageWindow& MessageWindow::setText(string text) { state.text = text; return *this; } -MessageWindow& MessageWindow::setTitle(const string& title) { +MessageWindow& MessageWindow::setTitle(string title) { state.title = title; return *this; } @@ -248,7 +248,7 @@ MessageWindow::Response MessageWindow::warning(MessageWindow::Buttons buttons) { return pMessageWindow::warning(state); } -MessageWindow::MessageWindow(const string& text): +MessageWindow::MessageWindow(string text): state(*new State) { state.text = text; } @@ -405,7 +405,7 @@ void Window::setGeometry(const Geometry& geometry) { return p.setGeometry(geometry); } -void Window::setMenuFont(const string& font) { +void Window::setMenuFont(string font) { state.menuFont = font; return p.setMenuFont(font); } @@ -433,12 +433,12 @@ void Window::setSmartGeometry(const Geometry& geometry) { }); } -void Window::setStatusFont(const string& font) { +void Window::setStatusFont(string font) { state.statusFont = font; return p.setStatusFont(font); } -void Window::setStatusText(const string& text) { +void Window::setStatusText(string text) { state.statusText = text; return p.setStatusText(text); } @@ -448,7 +448,7 @@ void Window::setStatusVisible(bool visible) { return p.setStatusVisible(visible); } -void Window::setTitle(const string& text) { +void Window::setTitle(string text) { state.title = text; return p.setTitle(text); } @@ -459,7 +459,7 @@ void Window::setVisible(bool visible) { return p.setVisible(visible); } -void Window::setWidgetFont(const string& font) { +void Window::setWidgetFont(string font) { state.widgetFont = font; return p.setWidgetFont(font); } @@ -548,7 +548,7 @@ void Menu::setImage(const image& image) { return p.setImage(image); } -void Menu::setText(const string& text) { +void Menu::setText(string text) { state.text = text; return p.setText(text); } @@ -588,7 +588,7 @@ void Item::setImage(const image& image) { return p.setImage(image); } -void Item::setText(const string& text) { +void Item::setText(string text) { state.text = text; return p.setText(text); } @@ -618,7 +618,7 @@ void CheckItem::setChecked(bool checked) { return p.setChecked(checked); } -void CheckItem::setText(const string& text) { +void CheckItem::setText(string text) { state.text = text; return p.setText(text); } @@ -654,7 +654,7 @@ void RadioItem::setChecked() { return p.setChecked(); } -void RadioItem::setText(const string& text) { +void RadioItem::setText(string text) { state.text = text; return p.setText(text); } @@ -785,7 +785,7 @@ void Widget::setFocused() { return p.setFocused(); } -void Widget::setFont(const string& font) { +void Widget::setFont(string font) { state.font = font; return p.setFont(font); } @@ -835,7 +835,7 @@ void Button::setImage(const image& image, Orientation orientation) { return p.setImage(image, orientation); } -void Button::setText(const string& text) { +void Button::setText(string text) { state.text = text; return p.setText(text); } @@ -912,7 +912,7 @@ void CheckButton::setChecked(bool checked) { return p.setChecked(checked); } -void CheckButton::setText(const string& text) { +void CheckButton::setText(string text) { state.text = text; return p.setText(text); } @@ -940,7 +940,7 @@ void ComboButton::append_(const lstring& list) { } } -void ComboButton::modify(unsigned row, const string& text) { +void ComboButton::modify(unsigned row, string text) { state.text(row) = text; p.modify(row, text); } @@ -1097,7 +1097,7 @@ HorizontalSlider::~HorizontalSlider() { //Label //===== -void Label::setText(const string& text) { +void Label::setText(string text) { state.text = text; return p.setText(text); } @@ -1123,7 +1123,7 @@ void LineEdit::setEditable(bool editable) { return p.setEditable(editable); } -void LineEdit::setText(const string& text) { +void LineEdit::setText(string text) { state.text = text; return p.setText(text); } @@ -1276,7 +1276,7 @@ void RadioButton::setChecked() { return p.setChecked(); } -void RadioButton::setText(const string& text) { +void RadioButton::setText(string text) { state.text = text; return p.setText(text); } @@ -1310,7 +1310,7 @@ void TextEdit::setEditable(bool editable) { return p.setEditable(editable); } -void TextEdit::setText(const string& text) { +void TextEdit::setText(string text) { state.text = text; return p.setText(text); } diff --git a/higan/phoenix/core/core.hpp b/higan/phoenix/core/core.hpp index 3cd21639..4325b8a8 100755 --- a/higan/phoenix/core/core.hpp +++ b/higan/phoenix/core/core.hpp @@ -58,7 +58,7 @@ struct Application { static bool pendingEvents(); static void processEvents(); static void quit(); - static void setName(const nall::string& name); + static void setName(nall::string name); Application() = delete; struct State; @@ -108,16 +108,16 @@ struct Geometry { inline Geometry() : x(0), y(0), width(0), height(0) {} inline Geometry(const Position& position, const Size& size) : x(position.x), y(position.y), width(size.width), height(size.height) {} template inline Geometry(X x, Y y, W width, H height) : x(x), y(y), width(width), height(height) {} - Geometry(const nall::string& text); + Geometry(nall::string text); }; enum class Orientation : unsigned { Horizontal, Vertical }; struct Font { - static nall::string serif(unsigned size = 0, const nall::string& style = ""); - static nall::string sans(unsigned size = 0, const nall::string& style = ""); - static nall::string monospace(unsigned size = 0, const nall::string& style = ""); - static Size size(const nall::string &font, const nall::string& text); + static nall::string serif(unsigned size = 0, nall::string style = ""); + static nall::string sans(unsigned size = 0, nall::string style = ""); + static nall::string monospace(unsigned size = 0, nall::string style = ""); + static Size size(nall::string font, nall::string text); Font() = delete; }; @@ -151,8 +151,8 @@ struct BrowserWindow { nall::string save(); BrowserWindow& setFilters_(const nall::lstring& filters); BrowserWindow& setParent(Window& parent); - BrowserWindow& setPath(const nall::string& path); - BrowserWindow& setTitle(const nall::string& title); + BrowserWindow& setPath(nall::string path); + BrowserWindow& setTitle(nall::string title); BrowserWindow(); ~BrowserWindow(); @@ -179,11 +179,11 @@ struct MessageWindow { Response information(Buttons = Buttons::Ok); Response question(Buttons = Buttons::YesNo); MessageWindow& setParent(Window& parent); - MessageWindow& setText(const nall::string& text); - MessageWindow& setTitle(const nall::string& title); + MessageWindow& setText(nall::string text); + MessageWindow& setTitle(nall::string title); Response warning(Buttons = Buttons::Ok); - MessageWindow(const nall::string& text = ""); + MessageWindow(nall::string text = ""); ~MessageWindow(); struct State; State& state; @@ -241,17 +241,17 @@ struct Window : private nall::base_from_member, Object { void setFocused(); void setFullScreen(bool fullScreen = true); void setGeometry(const Geometry& geometry); - void setMenuFont(const nall::string& font); + void setMenuFont(nall::string font); void setMenuVisible(bool visible = true); void setModal(bool modal = true); void setResizable(bool resizable = true); void setSmartGeometry(const Geometry& geometry); - void setStatusFont(const nall::string& font); - void setStatusText(const nall::string& text); + void setStatusFont(nall::string font); + void setStatusText(nall::string text); void setStatusVisible(bool visible = true); - void setTitle(const nall::string& text); + void setTitle(nall::string text); void setVisible(bool visible = true); - void setWidgetFont(const nall::string& font); + void setWidgetFont(nall::string font); nall::string statusText(); void synchronizeLayout(); bool visible(); @@ -283,7 +283,7 @@ struct Menu : private nall::base_from_member, Action { void append(const nall::group& list); void remove(const nall::group& list); void setImage(const nall::image& image = nall::image{}); - void setText(const nall::string& text); + void setText(nall::string text); Menu(); ~Menu(); @@ -302,7 +302,7 @@ struct Item : private nall::base_from_member, Action { nall::function onActivate; void setImage(const nall::image& image = nall::image{}); - void setText(const nall::string& text); + void setText(nall::string text); Item(); ~Item(); @@ -316,7 +316,7 @@ struct CheckItem : private nall::base_from_member, Action { bool checked(); void setChecked(bool checked = true); - void setText(const nall::string& text); + void setText(nall::string text); CheckItem(); ~CheckItem(); @@ -333,7 +333,7 @@ struct RadioItem : private nall::base_from_member, Action { bool checked(); void setChecked(); - void setText(const nall::string& text); + void setText(nall::string text); nall::string text(); RadioItem(); @@ -382,7 +382,7 @@ struct Widget : private nall::base_from_member, Sizable { Size minimumSize(); void setEnabled(bool enabled = true); void setFocused(); - void setFont(const nall::string& font); + void setFont(nall::string font); void setGeometry(const Geometry& geometry); void setVisible(bool visible = true); bool visible(); @@ -399,7 +399,7 @@ struct Button : private nall::base_from_member, Widget { nall::function onActivate; void setImage(const nall::image& image = nall::image{}, Orientation = Orientation::Horizontal); - void setText(const nall::string& text); + void setText(nall::string text); Button(); ~Button(); @@ -432,7 +432,7 @@ struct CheckButton : private nall::base_from_member, Widget { bool checked(); void setChecked(bool checked = true); - void setText(const nall::string &text); + void setText(nall::string text); CheckButton(); ~CheckButton(); @@ -447,7 +447,7 @@ struct ComboButton : private nall::base_from_member, Widget { template void append(Args&&... args) { append_({args...}); } void append_(const nall::lstring& list); - void modify(unsigned row, const nall::string& text); + void modify(unsigned row, nall::string text); void remove(unsigned row); void reset(); unsigned selection(); @@ -510,7 +510,7 @@ struct HorizontalSlider : private nall::base_from_member, Wi }; struct Label : private nall::base_from_member, Widget { - void setText(const nall::string& text); + void setText(nall::string text); Label(); ~Label(); @@ -524,7 +524,7 @@ struct LineEdit : private nall::base_from_member, Widget { nall::function onChange; void setEditable(bool editable = true); - void setText(const nall::string& text); + void setText(nall::string text); nall::string text(); LineEdit(); @@ -584,7 +584,7 @@ struct RadioButton : private nall::base_from_member, Widget { bool checked(); void setChecked(); - void setText(const nall::string& text); + void setText(nall::string text); RadioButton(); ~RadioButton(); @@ -598,7 +598,7 @@ struct TextEdit : private nall::base_from_member, Widget { void setCursorPosition(unsigned position); void setEditable(bool editable = true); - void setText(const nall::string& text); + void setText(nall::string text); void setWordWrap(bool wordWrap = true); nall::string text(); bool wordWrap(); diff --git a/higan/phoenix/gtk/action/check-item.cpp b/higan/phoenix/gtk/action/check-item.cpp index e0d2eaeb..5f0d85bb 100755 --- a/higan/phoenix/gtk/action/check-item.cpp +++ b/higan/phoenix/gtk/action/check-item.cpp @@ -14,7 +14,7 @@ void pCheckItem::setChecked(bool checked) { locked = false; } -void pCheckItem::setText(const string& text) { +void pCheckItem::setText(string text) { gtk_menu_item_set_label(GTK_MENU_ITEM(widget), mnemonic(text)); } diff --git a/higan/phoenix/gtk/action/item.cpp b/higan/phoenix/gtk/action/item.cpp index dce6fe46..29b053e4 100755 --- a/higan/phoenix/gtk/action/item.cpp +++ b/higan/phoenix/gtk/action/item.cpp @@ -13,7 +13,7 @@ void pItem::setImage(const image& image) { } } -void pItem::setText(const string& text) { +void pItem::setText(string text) { gtk_menu_item_set_label(GTK_MENU_ITEM(widget), mnemonic(text)); } diff --git a/higan/phoenix/gtk/action/menu.cpp b/higan/phoenix/gtk/action/menu.cpp index 4d364614..c0e4b375 100755 --- a/higan/phoenix/gtk/action/menu.cpp +++ b/higan/phoenix/gtk/action/menu.cpp @@ -24,7 +24,7 @@ void pMenu::setImage(const image& image) { } } -void pMenu::setText(const string& text) { +void pMenu::setText(string text) { gtk_menu_item_set_label(GTK_MENU_ITEM(widget), mnemonic(text)); } @@ -47,7 +47,7 @@ void pMenu::orphan() { for(auto& action : menu.state.action) append(action); } -void pMenu::setFont(const string& font) { +void pMenu::setFont(string font) { pAction::setFont(font); for(auto& item : menu.state.action) item.p.setFont(font); } diff --git a/higan/phoenix/gtk/action/radio-item.cpp b/higan/phoenix/gtk/action/radio-item.cpp index 0c17b197..72ffe8e4 100755 --- a/higan/phoenix/gtk/action/radio-item.cpp +++ b/higan/phoenix/gtk/action/radio-item.cpp @@ -26,7 +26,7 @@ void pRadioItem::setGroup(const group& group) { } } -void pRadioItem::setText(const string& text) { +void pRadioItem::setText(string text) { gtk_menu_item_set_label(GTK_MENU_ITEM(widget), mnemonic(text)); } diff --git a/higan/phoenix/gtk/font.cpp b/higan/phoenix/gtk/font.cpp index f4928805..e8917cad 100755 --- a/higan/phoenix/gtk/font.cpp +++ b/higan/phoenix/gtk/font.cpp @@ -17,14 +17,14 @@ string pFont::monospace(unsigned size, string style) { return {"Liberation Mono, ", size, ", ", style}; } -Size pFont::size(const string& font, const string& text) { +Size pFont::size(string font, string text) { PangoFontDescription* description = create(font); Size size = pFont::size(description, text); free(description); return size; } -PangoFontDescription* pFont::create(const string& description) { +PangoFontDescription* pFont::create(string description) { lstring part; part.split<2>(",", description); for(auto& item : part) item.trim(" "); @@ -51,7 +51,7 @@ void pFont::free(PangoFontDescription* font) { pango_font_description_free(font); } -Size pFont::size(PangoFontDescription* font, const string& text) { +Size pFont::size(PangoFontDescription* font, string text) { PangoContext* context = gdk_pango_context_get_for_screen(gdk_screen_get_default()); PangoLayout* layout = pango_layout_new(context); pango_layout_set_font_description(layout, font); @@ -62,7 +62,7 @@ Size pFont::size(PangoFontDescription* font, const string& text) { return {width, height}; } -void pFont::setFont(GtkWidget* widget, const string& font) { +void pFont::setFont(GtkWidget* widget, string font) { auto gtkFont = pFont::create(font); pFont::setFont(widget, (gpointer)gtkFont); pFont::free(gtkFont); diff --git a/higan/phoenix/gtk/platform.hpp b/higan/phoenix/gtk/platform.hpp index 8b44a21e..143e30df 100755 --- a/higan/phoenix/gtk/platform.hpp +++ b/higan/phoenix/gtk/platform.hpp @@ -41,12 +41,12 @@ struct pFont { static string serif(unsigned size, string style); static string sans(unsigned size, string style); static string monospace(unsigned size, string style); - static Size size(const string& font, const string& text); + static Size size(string font, string text); - static PangoFontDescription* create(const string& description); + static PangoFontDescription* create(string description); static void free(PangoFontDescription* font); - static Size size(PangoFontDescription* font, const string& text); - static void setFont(GtkWidget* widget, const string& font); + static Size size(PangoFontDescription* font, string text); + static void setFont(GtkWidget* widget, string font); static void setFont(GtkWidget* widget, gpointer font); }; @@ -128,16 +128,16 @@ struct pWindow : public pObject { void setFocused(); void setFullScreen(bool fullScreen); void setGeometry(const Geometry& geometry); - void setMenuFont(const string& font); + void setMenuFont(string font); void setMenuVisible(bool visible); void setModal(bool modal); void setResizable(bool resizable); - void setStatusFont(const string& font); - void setStatusText(const string& text); + void setStatusFont(string font); + void setStatusText(string text); void setStatusVisible(bool visible); - void setTitle(const string& text); + void setTitle(string text); void setVisible(bool visible); - void setWidgetFont(const string& font); + void setWidgetFont(string font); pWindow(Window& window) : pObject(window), window(window) {} void constructor(); @@ -166,13 +166,13 @@ struct pMenu : public pAction { void append(Action& action); void remove(Action& action); void setImage(const image& image); - void setText(const string& text); + void setText(string text); pMenu(Menu &menu) : pAction(menu), menu(menu) {} void constructor(); void destructor(); void orphan(); - void setFont(const string& font); + void setFont(string font); }; struct pSeparator : public pAction { @@ -188,7 +188,7 @@ struct pItem : public pAction { Item& item; void setImage(const image& image); - void setText(const string& text); + void setText(string text); pItem(Item& item) : pAction(item), item(item) {} void constructor(); @@ -201,7 +201,7 @@ struct pCheckItem : public pAction { bool checked(); void setChecked(bool checked); - void setText(const string& text); + void setText(string text); pCheckItem(CheckItem& checkItem) : pAction(checkItem), checkItem(checkItem) {} void constructor(); @@ -215,7 +215,7 @@ struct pRadioItem : public pAction { bool checked(); void setChecked(); void setGroup(const group& group); - void setText(const string& text); + void setText(string text); pRadioItem(RadioItem& radioItem) : pAction(radioItem), radioItem(radioItem) {} void constructor(); @@ -244,7 +244,7 @@ struct pWidget : public pSizable { virtual Size minimumSize(); void setEnabled(bool enabled); virtual void setFocused(); - virtual void setFont(const string& font); + virtual void setFont(string font); virtual void setGeometry(const Geometry& geometry); void setVisible(bool visible); @@ -259,7 +259,7 @@ struct pButton : public pWidget { Size minimumSize(); void setImage(const image& image, Orientation orientation); - void setText(const string& text); + void setText(string text); pButton(Button& button) : pWidget(button), button(button) {} void constructor(); @@ -286,7 +286,7 @@ struct pCheckButton : public pWidget { bool checked(); Size minimumSize(); void setChecked(bool checked); - void setText(const string& text); + void setText(string text); pCheckButton(CheckButton& checkButton) : pWidget(checkButton), checkButton(checkButton) {} void constructor(); @@ -298,8 +298,8 @@ struct pComboButton : public pWidget { ComboButton& comboButton; unsigned itemCounter; - void append(const string& text); - void modify(unsigned row, const string& text); + void append(string text); + void modify(unsigned row, string text); void remove(unsigned row); Size minimumSize(); void reset(); @@ -371,7 +371,7 @@ struct pLabel : public pWidget { Label& label; Size minimumSize(); - void setText(const string& text); + void setText(string text); pLabel(Label& label) : pWidget(label), label(label) {} void constructor(); @@ -384,7 +384,7 @@ struct pLineEdit : public pWidget { Size minimumSize(); void setEditable(bool editable); - void setText(const string& text); + void setText(string text); string text(); pLineEdit(LineEdit& lineEdit) : pWidget(lineEdit), lineEdit(lineEdit) {} @@ -428,7 +428,7 @@ struct pListView : public pWidget { void destructor(); void orphan(); void setFocused(); - void setFont(const string& font); + void setFont(string font); }; struct pProgressBar : public pWidget { @@ -450,7 +450,7 @@ struct pRadioButton : public pWidget { Size minimumSize(); void setChecked(); void setGroup(const group& group); - void setText(const string& text); + void setText(string text); pRadioButton(RadioButton& radioButton) : pWidget(radioButton), radioButton(radioButton) {} void onActivate(); @@ -468,7 +468,7 @@ struct pTextEdit : public pWidget { bool focused(); void setCursorPosition(unsigned position); void setEditable(bool editable); - void setText(const string& text); + void setText(string text); void setWordWrap(bool wordWrap); string text(); diff --git a/higan/phoenix/gtk/widget/button.cpp b/higan/phoenix/gtk/widget/button.cpp index 90bfa1dc..16e6bb37 100755 --- a/higan/phoenix/gtk/widget/button.cpp +++ b/higan/phoenix/gtk/widget/button.cpp @@ -33,7 +33,7 @@ void pButton::setImage(const image& image, Orientation orientation) { } } -void pButton::setText(const string& text) { +void pButton::setText(string text) { gtk_button_set_label(GTK_BUTTON(gtkWidget), text); setFont(widget.state.font); } diff --git a/higan/phoenix/gtk/widget/check-button.cpp b/higan/phoenix/gtk/widget/check-button.cpp index 04d8afa7..2f3a9c1e 100644 --- a/higan/phoenix/gtk/widget/check-button.cpp +++ b/higan/phoenix/gtk/widget/check-button.cpp @@ -20,7 +20,7 @@ void pCheckButton::setChecked(bool checked) { locked = false; } -void pCheckButton::setText(const string& text) { +void pCheckButton::setText(string text) { gtk_button_set_label(GTK_BUTTON(gtkWidget), text); } diff --git a/higan/phoenix/gtk/widget/combo-button.cpp b/higan/phoenix/gtk/widget/combo-button.cpp index b6b8e2a1..a3d7c859 100644 --- a/higan/phoenix/gtk/widget/combo-button.cpp +++ b/higan/phoenix/gtk/widget/combo-button.cpp @@ -7,7 +7,7 @@ static void ComboButton_change(ComboButton* self) { } } -void pComboButton::append(const string& text) { +void pComboButton::append(string text) { gtk_combo_box_append_text(GTK_COMBO_BOX(gtkWidget), text); if(itemCounter++ == 0) setSelection(0); } @@ -20,7 +20,7 @@ Size pComboButton::minimumSize() { return {maximumWidth + 44, size.height + 12}; } -void pComboButton::modify(unsigned row, const string& text) { +void pComboButton::modify(unsigned row, string text) { locked = true; unsigned position = selection(); gtk_combo_box_remove_text(GTK_COMBO_BOX(gtkWidget), row); diff --git a/higan/phoenix/gtk/widget/label.cpp b/higan/phoenix/gtk/widget/label.cpp index b1d40c9d..c484587b 100755 --- a/higan/phoenix/gtk/widget/label.cpp +++ b/higan/phoenix/gtk/widget/label.cpp @@ -5,7 +5,7 @@ Size pLabel::minimumSize() { return {size.width, size.height}; } -void pLabel::setText(const string& text) { +void pLabel::setText(string text) { gtk_label_set_text(GTK_LABEL(gtkWidget), text); } diff --git a/higan/phoenix/gtk/widget/line-edit.cpp b/higan/phoenix/gtk/widget/line-edit.cpp index 45822997..77226e6a 100755 --- a/higan/phoenix/gtk/widget/line-edit.cpp +++ b/higan/phoenix/gtk/widget/line-edit.cpp @@ -18,7 +18,7 @@ void pLineEdit::setEditable(bool editable) { gtk_editable_set_editable(GTK_EDITABLE(gtkWidget), editable); } -void pLineEdit::setText(const string& text) { +void pLineEdit::setText(string text) { locked = true; gtk_entry_set_text(GTK_ENTRY(gtkWidget), text); locked = false; diff --git a/higan/phoenix/gtk/widget/list-view.cpp b/higan/phoenix/gtk/widget/list-view.cpp index 75075d94..eb65634f 100755 --- a/higan/phoenix/gtk/widget/list-view.cpp +++ b/higan/phoenix/gtk/widget/list-view.cpp @@ -217,7 +217,7 @@ void pListView::setFocused() { gtk_widget_grab_focus(subWidget); } -void pListView::setFont(const string& font) { +void pListView::setFont(string font) { pFont::setFont(gtkWidget, font); for(auto& cell : column) pFont::setFont(cell.label, font); } diff --git a/higan/phoenix/gtk/widget/radio-button.cpp b/higan/phoenix/gtk/widget/radio-button.cpp index 53afc087..4c80580e 100644 --- a/higan/phoenix/gtk/widget/radio-button.cpp +++ b/higan/phoenix/gtk/widget/radio-button.cpp @@ -36,7 +36,7 @@ void pRadioButton::setGroup(const group& group) { parent().locked = false; } -void pRadioButton::setText(const string& text) { +void pRadioButton::setText(string text) { gtk_button_set_label(GTK_BUTTON(gtkWidget), text); } diff --git a/higan/phoenix/gtk/widget/text-edit.cpp b/higan/phoenix/gtk/widget/text-edit.cpp index 931e4a60..f1f9a7cf 100755 --- a/higan/phoenix/gtk/widget/text-edit.cpp +++ b/higan/phoenix/gtk/widget/text-edit.cpp @@ -22,7 +22,7 @@ void pTextEdit::setEditable(bool editable) { gtk_text_view_set_editable(GTK_TEXT_VIEW(subWidget), editable); } -void pTextEdit::setText(const string& text) { +void pTextEdit::setText(string text) { locked = true; gtk_text_buffer_set_text(textBuffer, text, -1); locked = false; diff --git a/higan/phoenix/gtk/widget/widget.cpp b/higan/phoenix/gtk/widget/widget.cpp index 6a390029..cafba39e 100755 --- a/higan/phoenix/gtk/widget/widget.cpp +++ b/higan/phoenix/gtk/widget/widget.cpp @@ -22,7 +22,7 @@ void pWidget::setFocused() { gtk_widget_grab_focus(gtkWidget); } -void pWidget::setFont(const string& font) { +void pWidget::setFont(string font) { pFont::setFont(gtkWidget, font); } diff --git a/higan/phoenix/gtk/window.cpp b/higan/phoenix/gtk/window.cpp index 61e038cb..6cdb02ac 100755 --- a/higan/phoenix/gtk/window.cpp +++ b/higan/phoenix/gtk/window.cpp @@ -244,7 +244,7 @@ void pWindow::setGeometry(const Geometry& geometry) { } } -void pWindow::setMenuFont(const string& font) { +void pWindow::setMenuFont(string font) { for(auto& item : window.state.menu) item.p.setFont(font); } @@ -268,11 +268,11 @@ void pWindow::setResizable(bool resizable) { gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(status), resizable); } -void pWindow::setStatusFont(const string& font) { +void pWindow::setStatusFont(string font) { pFont::setFont(status, font); } -void pWindow::setStatusText(const string& text) { +void pWindow::setStatusText(string text) { gtk_statusbar_pop(GTK_STATUSBAR(status), 1); gtk_statusbar_push(GTK_STATUSBAR(status), 1, text); } @@ -281,7 +281,7 @@ void pWindow::setStatusVisible(bool visible) { gtk_widget_set_visible(status, visible); } -void pWindow::setTitle(const string& text) { +void pWindow::setTitle(string text) { gtk_window_set_title(GTK_WINDOW(widget), text); } @@ -302,7 +302,7 @@ void pWindow::setVisible(bool visible) { } } -void pWindow::setWidgetFont(const string& font) { +void pWindow::setWidgetFont(string font) { } void pWindow::constructor() { diff --git a/higan/phoenix/reference/action/check-item.cpp b/higan/phoenix/reference/action/check-item.cpp index a40a2d60..9d439b98 100755 --- a/higan/phoenix/reference/action/check-item.cpp +++ b/higan/phoenix/reference/action/check-item.cpp @@ -7,7 +7,7 @@ bool pCheckItem::checked() { void pCheckItem::setChecked(bool checked) { } -void pCheckItem::setText(const string& text) { +void pCheckItem::setText(string text) { } void pCheckItem::constructor() { diff --git a/higan/phoenix/reference/action/check-item.hpp b/higan/phoenix/reference/action/check-item.hpp index 12087690..0641a76b 100644 --- a/higan/phoenix/reference/action/check-item.hpp +++ b/higan/phoenix/reference/action/check-item.hpp @@ -5,7 +5,7 @@ struct pCheckItem : public pAction { bool checked(); void setChecked(bool checked); - void setText(const string& text); + void setText(string text); pCheckItem(CheckItem& checkItem) : pAction(checkItem), checkItem(checkItem) {} void constructor(); diff --git a/higan/phoenix/reference/action/item.cpp b/higan/phoenix/reference/action/item.cpp index 197734f4..b010da65 100755 --- a/higan/phoenix/reference/action/item.cpp +++ b/higan/phoenix/reference/action/item.cpp @@ -3,7 +3,7 @@ namespace phoenix { void pItem::setImage(const image& image) { } -void pItem::setText(const string& text) { +void pItem::setText(string text) { } void pItem::constructor() { diff --git a/higan/phoenix/reference/action/item.hpp b/higan/phoenix/reference/action/item.hpp index 631fa747..9e255fb4 100644 --- a/higan/phoenix/reference/action/item.hpp +++ b/higan/phoenix/reference/action/item.hpp @@ -4,7 +4,7 @@ struct pItem : public pAction { Item& item; void setImage(const image& image); - void setText(const string& text); + void setText(string text); pItem(Item& item) : pAction(item), item(item) {} void constructor(); diff --git a/higan/phoenix/reference/action/menu.cpp b/higan/phoenix/reference/action/menu.cpp index 7d5024e6..157858be 100755 --- a/higan/phoenix/reference/action/menu.cpp +++ b/higan/phoenix/reference/action/menu.cpp @@ -9,7 +9,7 @@ void pMenu::remove(Action& action) { void pMenu::setImage(const image& image) { } -void pMenu::setText(const string& text) { +void pMenu::setText(string text) { } void pMenu::constructor() { diff --git a/higan/phoenix/reference/action/menu.hpp b/higan/phoenix/reference/action/menu.hpp index 2850405f..9bcddf60 100644 --- a/higan/phoenix/reference/action/menu.hpp +++ b/higan/phoenix/reference/action/menu.hpp @@ -6,7 +6,7 @@ struct pMenu : public pAction { void append(Action& action); void remove(Action& action); void setImage(const image& image); - void setText(const string& text); + void setText(string text); pMenu(Menu& menu) : pAction(menu), menu(menu) {} void constructor(); diff --git a/higan/phoenix/reference/action/radio-item.cpp b/higan/phoenix/reference/action/radio-item.cpp index ded3473f..bdd39e6e 100755 --- a/higan/phoenix/reference/action/radio-item.cpp +++ b/higan/phoenix/reference/action/radio-item.cpp @@ -10,7 +10,7 @@ void pRadioItem::setChecked() { void pRadioItem::setGroup(const group& group) { } -void pRadioItem::setText(const string& text) { +void pRadioItem::setText(string text) { } void pRadioItem::constructor() { diff --git a/higan/phoenix/reference/action/radio-item.hpp b/higan/phoenix/reference/action/radio-item.hpp index f89b0760..926a9883 100644 --- a/higan/phoenix/reference/action/radio-item.hpp +++ b/higan/phoenix/reference/action/radio-item.hpp @@ -6,7 +6,7 @@ struct pRadioItem : public pAction { bool checked(); void setChecked(); void setGroup(const group& group); - void setText(const string& text); + void setText(string text); pRadioItem(RadioItem& radioItem) : pAction(radioItem), radioItem(radioItem) {} void constructor(); diff --git a/higan/phoenix/reference/font.cpp b/higan/phoenix/reference/font.cpp index 217854f5..e382add9 100755 --- a/higan/phoenix/reference/font.cpp +++ b/higan/phoenix/reference/font.cpp @@ -12,7 +12,7 @@ string pFont::monospace(unsigned size, string style) { return ""; } -Size pFont::size(const string& font, const string& text) { +Size pFont::size(string font, string text) { return {0, 0}; } diff --git a/higan/phoenix/reference/font.hpp b/higan/phoenix/reference/font.hpp index 6895646d..235806ac 100644 --- a/higan/phoenix/reference/font.hpp +++ b/higan/phoenix/reference/font.hpp @@ -4,7 +4,7 @@ struct pFont { static string serif(unsigned size, string style); static string sans(unsigned size, string style); static string monospace(unsigned size, string style); - static Size size(const string& font, const string& text); + static Size size(string font, string text); }; } diff --git a/higan/phoenix/reference/widget/button.cpp b/higan/phoenix/reference/widget/button.cpp index 9a99bbb2..e2a3dfbc 100755 --- a/higan/phoenix/reference/widget/button.cpp +++ b/higan/phoenix/reference/widget/button.cpp @@ -3,7 +3,7 @@ namespace phoenix { void pButton::setImage(const image& image, Orientation orientation) { } -void pButton::setText(const string& text) { +void pButton::setText(string text) { } void pButton::constructor() { diff --git a/higan/phoenix/reference/widget/button.hpp b/higan/phoenix/reference/widget/button.hpp index 799de3dc..be591979 100644 --- a/higan/phoenix/reference/widget/button.hpp +++ b/higan/phoenix/reference/widget/button.hpp @@ -4,7 +4,7 @@ struct pButton : public pWidget { Button& button; void setImage(const image& image, Orientation orientation); - void setText(const string& text); + void setText(string text); pButton(Button& button) : pWidget(button), button(button) {} void constructor(); diff --git a/higan/phoenix/reference/widget/check-button.cpp b/higan/phoenix/reference/widget/check-button.cpp index 639de8b8..e237e6b1 100644 --- a/higan/phoenix/reference/widget/check-button.cpp +++ b/higan/phoenix/reference/widget/check-button.cpp @@ -7,7 +7,7 @@ bool pCheckButton::checked() { void pCheckButton::setChecked(bool checked) { } -void pCheckButton::setText(const string& text) { +void pCheckButton::setText(string text) { } void pCheckButton::constructor() { diff --git a/higan/phoenix/reference/widget/check-button.hpp b/higan/phoenix/reference/widget/check-button.hpp index ded0e22d..62c4ed96 100644 --- a/higan/phoenix/reference/widget/check-button.hpp +++ b/higan/phoenix/reference/widget/check-button.hpp @@ -5,7 +5,7 @@ struct pCheckButton : public pWidget { bool checked(); void setChecked(bool checked); - void setText(const string& text); + void setText(string text); pCheckButton(CheckButton& checkButton) : pWidget(checkButton), checkButton(checkButton) {} void constructor(); diff --git a/higan/phoenix/reference/widget/combo-button.cpp b/higan/phoenix/reference/widget/combo-button.cpp index 8a1ea55e..67bcb9e1 100644 --- a/higan/phoenix/reference/widget/combo-button.cpp +++ b/higan/phoenix/reference/widget/combo-button.cpp @@ -1,9 +1,9 @@ namespace phoenix { -void pComboButton::append(const string& text) { +void pComboButton::append(string text) { } -void pComboButton::modify(unsigned row, const string& text) { +void pComboButton::modify(unsigned row, string text) { } void pComboButton::remove(unsigned row) { diff --git a/higan/phoenix/reference/widget/combo-button.hpp b/higan/phoenix/reference/widget/combo-button.hpp index 00c29f5a..65cdcbbe 100644 --- a/higan/phoenix/reference/widget/combo-button.hpp +++ b/higan/phoenix/reference/widget/combo-button.hpp @@ -3,8 +3,8 @@ namespace phoenix { struct pComboButton : public pWidget { ComboButton& comboButton; - void append(const string& text); - void modify(unsigned row, const string& text); + void append(string text); + void modify(unsigned row, string text); void remove(unsigned row); void reset(); unsigned selection(); diff --git a/higan/phoenix/reference/widget/label.cpp b/higan/phoenix/reference/widget/label.cpp index ff39c60d..cf5af2c7 100755 --- a/higan/phoenix/reference/widget/label.cpp +++ b/higan/phoenix/reference/widget/label.cpp @@ -1,6 +1,6 @@ namespace phoenix { -void pLabel::setText(const string& text) { +void pLabel::setText(string text) { } void pLabel::constructor() { diff --git a/higan/phoenix/reference/widget/label.hpp b/higan/phoenix/reference/widget/label.hpp index c0093e5a..1d6a94fa 100644 --- a/higan/phoenix/reference/widget/label.hpp +++ b/higan/phoenix/reference/widget/label.hpp @@ -3,7 +3,7 @@ namespace phoenix { struct pLabel : public pWidget { Label& label; - void setText(const string& text); + void setText(string text); pLabel(Label& label) : pWidget(label), label(label) {} void constructor(); diff --git a/higan/phoenix/reference/widget/line-edit.cpp b/higan/phoenix/reference/widget/line-edit.cpp index 24c30c34..35ae2eb3 100755 --- a/higan/phoenix/reference/widget/line-edit.cpp +++ b/higan/phoenix/reference/widget/line-edit.cpp @@ -3,7 +3,7 @@ namespace phoenix { void pLineEdit::setEditable(bool editable) { } -void pLineEdit::setText(const string& text) { +void pLineEdit::setText(string text) { } string pLineEdit::text() { diff --git a/higan/phoenix/reference/widget/line-edit.hpp b/higan/phoenix/reference/widget/line-edit.hpp index 6d305bff..9eb621e6 100644 --- a/higan/phoenix/reference/widget/line-edit.hpp +++ b/higan/phoenix/reference/widget/line-edit.hpp @@ -4,7 +4,7 @@ struct pLineEdit : public pWidget { LineEdit& lineEdit; void setEditable(bool editable); - void setText(const string& text); + void setText(string text); string text(); pLineEdit(LineEdit& lineEdit) : pWidget(lineEdit), lineEdit(lineEdit) {} diff --git a/higan/phoenix/reference/widget/radio-button.cpp b/higan/phoenix/reference/widget/radio-button.cpp index 4d2de357..32695c0c 100644 --- a/higan/phoenix/reference/widget/radio-button.cpp +++ b/higan/phoenix/reference/widget/radio-button.cpp @@ -10,7 +10,7 @@ void pRadioButton::setChecked() { void pRadioButton::setGroup(const group& group) { } -void pRadioButton::setText(const string& text) { +void pRadioButton::setText(string text) { } void pRadioButton::constructor() { diff --git a/higan/phoenix/reference/widget/radio-button.hpp b/higan/phoenix/reference/widget/radio-button.hpp index 2a8ca9ae..c1ac3ec9 100644 --- a/higan/phoenix/reference/widget/radio-button.hpp +++ b/higan/phoenix/reference/widget/radio-button.hpp @@ -6,7 +6,7 @@ struct pRadioButton : public pWidget { bool checked(); void setChecked(); void setGroup(const group& group); - void setText(const string& text); + void setText(string text); pRadioButton(RadioButton& radioButton) : pWidget(radioButton), radioButton(radioButton) {} void constructor(); diff --git a/higan/phoenix/reference/widget/text-edit.cpp b/higan/phoenix/reference/widget/text-edit.cpp index 6051af72..d1dcca7c 100755 --- a/higan/phoenix/reference/widget/text-edit.cpp +++ b/higan/phoenix/reference/widget/text-edit.cpp @@ -6,7 +6,7 @@ void pTextEdit::setCursorPosition(unsigned position) { void pTextEdit::setEditable(bool editable) { } -void pTextEdit::setText(const string& text) { +void pTextEdit::setText(string text) { } void pTextEdit::setWordWrap(bool wordWrap) { diff --git a/higan/phoenix/reference/widget/text-edit.hpp b/higan/phoenix/reference/widget/text-edit.hpp index 7d774d5e..0bca068b 100644 --- a/higan/phoenix/reference/widget/text-edit.hpp +++ b/higan/phoenix/reference/widget/text-edit.hpp @@ -5,7 +5,7 @@ struct pTextEdit : public pWidget { void setCursorPosition(unsigned position); void setEditable(bool editable); - void setText(const string& text); + void setText(string text); void setWordWrap(bool wordWrap); string text(); diff --git a/higan/phoenix/reference/widget/widget.cpp b/higan/phoenix/reference/widget/widget.cpp index 8e3b6033..7fc18aa7 100755 --- a/higan/phoenix/reference/widget/widget.cpp +++ b/higan/phoenix/reference/widget/widget.cpp @@ -18,7 +18,7 @@ void pWidget::setEnabled(bool enabled) { void pWidget::setFocused() { } -void pWidget::setFont(const string& font) { +void pWidget::setFont(string font) { } void pWidget::setGeometry(const Geometry& geometry) { diff --git a/higan/phoenix/reference/widget/widget.hpp b/higan/phoenix/reference/widget/widget.hpp index 8111560e..3947064d 100644 --- a/higan/phoenix/reference/widget/widget.hpp +++ b/higan/phoenix/reference/widget/widget.hpp @@ -8,7 +8,7 @@ struct pWidget : public pSizable { Size minimumSize(); void setEnabled(bool enabled); void setFocused(); - void setFont(const string& font); + void setFont(string font); void setGeometry(const Geometry& geometry); void setVisible(bool visible); diff --git a/higan/phoenix/reference/window.cpp b/higan/phoenix/reference/window.cpp index c9b1de2e..dc4d3f4a 100755 --- a/higan/phoenix/reference/window.cpp +++ b/higan/phoenix/reference/window.cpp @@ -52,7 +52,7 @@ void pWindow::setFullScreen(bool fullScreen) { void pWindow::setGeometry(const Geometry& geometry) { } -void pWindow::setMenuFont(const string& font) { +void pWindow::setMenuFont(string font) { } void pWindow::setMenuVisible(bool visible) { @@ -64,22 +64,22 @@ void pWindow::setModal(bool modal) { void pWindow::setResizable(bool resizable) { } -void pWindow::setStatusFont(const string& font) { +void pWindow::setStatusFont(string font) { } -void pWindow::setStatusText(const string& text) { +void pWindow::setStatusText(string text) { } void pWindow::setStatusVisible(bool visible) { } -void pWindow::setTitle(const string& text) { +void pWindow::setTitle(string text) { } void pWindow::setVisible(bool visible) { } -void pWindow::setWidgetFont(const string& font) { +void pWindow::setWidgetFont(string font) { } void pWindow::constructor() { diff --git a/higan/phoenix/reference/window.hpp b/higan/phoenix/reference/window.hpp index f56d4c90..6546ea55 100644 --- a/higan/phoenix/reference/window.hpp +++ b/higan/phoenix/reference/window.hpp @@ -19,16 +19,16 @@ struct pWindow : public pObject { void setFocused(); void setFullScreen(bool fullScreen); void setGeometry(const Geometry& geometry); - void setMenuFont(const string& font); + void setMenuFont(string font); void setMenuVisible(bool visible); void setModal(bool modal); void setResizable(bool resizable); - void setStatusFont(const string& font); - void setStatusText(const string& text); + void setStatusFont(string font); + void setStatusText(string text); void setStatusVisible(bool visible); - void setTitle(const string& text); + void setTitle(string text); void setVisible(bool visible); - void setWidgetFont(const string& font); + void setWidgetFont(string font); pWindow(Window& window) : pObject(window), window(window) {} void constructor(); diff --git a/higan/processor/arm/instructions-arm.cpp b/higan/processor/arm/instructions-arm.cpp index b4369aef..62f1a05b 100755 --- a/higan/processor/arm/instructions-arm.cpp +++ b/higan/processor/arm/instructions-arm.cpp @@ -493,7 +493,7 @@ void ARM::arm_op_move_immediate_offset() { uint12 rm = instruction(); uint32 rn = r(n); - auto &rd = r(d); + auto& rd = r(d); if(pre == 1) rn = up ? rn + rm : rn - rm; if(l == 1) rd = load(rn, byte ? Byte : Word); @@ -530,7 +530,7 @@ void ARM::arm_op_move_register_offset() { uint4 m = instruction(); uint32 rn = r(n); - auto &rd = r(d); + auto& rd = r(d); uint32 rs = immediate; uint32 rm = r(m); bool c = cpsr().c; diff --git a/higan/processor/arm/registers.hpp b/higan/processor/arm/registers.hpp index ec993fd3..37d8300a 100755 --- a/higan/processor/arm/registers.hpp +++ b/higan/processor/arm/registers.hpp @@ -109,8 +109,8 @@ struct Processor { bool sequential; bool irqline; - GPR *r[16]; - PSR *spsr; + GPR* r[16]; + PSR* spsr; void power(); void setMode(Mode); diff --git a/higan/processor/arm/serialization.cpp b/higan/processor/arm/serialization.cpp index 269b3d15..b48ff2f8 100755 --- a/higan/processor/arm/serialization.cpp +++ b/higan/processor/arm/serialization.cpp @@ -1,4 +1,4 @@ -void ARM::PSR::serialize(serializer &s) { +void ARM::PSR::serialize(serializer& s) { s.integer(n); s.integer(z); s.integer(c); @@ -9,7 +9,7 @@ void ARM::PSR::serialize(serializer &s) { s.integer(m); } -void ARM::serialize(serializer &s) { +void ARM::serialize(serializer& s) { s.integer(processor.r0.data); s.integer(processor.r1.data); s.integer(processor.r2.data); diff --git a/higan/processor/gsu/gsu.cpp b/higan/processor/gsu/gsu.cpp index a1233f72..01f36e62 100755 --- a/higan/processor/gsu/gsu.cpp +++ b/higan/processor/gsu/gsu.cpp @@ -11,7 +11,7 @@ void GSU::power() { } void GSU::reset() { - for(auto &r : regs.r) r = 0x0000; + for(auto& r : regs.r) r = 0x0000; regs.sfr = 0x0000; regs.pbr = 0x00; regs.rombr = 0x00; diff --git a/higan/processor/gsu/serialization.cpp b/higan/processor/gsu/serialization.cpp index 86bfa1bf..28ec16b6 100755 --- a/higan/processor/gsu/serialization.cpp +++ b/higan/processor/gsu/serialization.cpp @@ -1,4 +1,4 @@ -void GSU::serialize(serializer &s) { +void GSU::serialize(serializer& s) { s.integer(regs.pipeline); s.integer(regs.ramaddr); diff --git a/higan/processor/hg51b/serialization.cpp b/higan/processor/hg51b/serialization.cpp index 19ce5d81..945c55bf 100755 --- a/higan/processor/hg51b/serialization.cpp +++ b/higan/processor/hg51b/serialization.cpp @@ -1,8 +1,8 @@ #ifdef PROCESSOR_HG51B_HPP -void HG51B::serialize(serializer &s) { +void HG51B::serialize(serializer& s) { s.array(dataRAM); - for(auto &n : stack) s.integer(n); + for(auto& n : stack) s.integer(n); s.integer(opcode); s.integer(regs.halt); @@ -21,7 +21,7 @@ void HG51B::serialize(serializer &s) { s.integer(regs.ramdata); s.integer(regs.busaddr); s.integer(regs.ramaddr); - for(auto &n : regs.gpr) s.integer(n); + for(auto& n : regs.gpr) s.integer(n); } #endif diff --git a/higan/processor/lr35902/registers.hpp b/higan/processor/lr35902/registers.hpp index ffdb09bd..9adbe054 100755 --- a/higan/processor/lr35902/registers.hpp +++ b/higan/processor/lr35902/registers.hpp @@ -18,7 +18,7 @@ enum { struct Register { virtual operator unsigned() const = 0; virtual unsigned operator=(unsigned x) = 0; - Register& operator=(const Register &x) { operator=((unsigned)x); return *this; } + Register& operator=(const Register& x) { operator=((unsigned)x); return *this; } unsigned operator++(int) { unsigned r = *this; operator=(*this + 1); return r; } unsigned operator--(int) { unsigned r = *this; operator=(*this - 1); return r; } @@ -50,7 +50,7 @@ struct RegisterF : Register { operator unsigned() const { return (z << 7) | (n << 6) | (h << 5) | (c << 4); } unsigned operator=(unsigned x) { z = x & 0x80; n = x & 0x40; h = x & 0x20; c = x & 0x10; return *this; } bool& operator[](unsigned r) { - static bool* table[] = { &z, &n, &h, &c }; + static bool* table[] = {&z, &n, &h, &c}; return *table[r]; } }; @@ -62,18 +62,19 @@ struct Register16 : Register { }; struct RegisterAF : Register { - Register8 &hi; - RegisterF &lo; + Register8& hi; + RegisterF& lo; operator unsigned() const { return (hi << 8) | (lo << 0); } unsigned operator=(unsigned x) { hi = x >> 8; lo = x >> 0; return *this; } - RegisterAF(Register8 &hi, RegisterF &lo) : hi(hi), lo(lo) {} + RegisterAF(Register8& hi, RegisterF& lo) : hi(hi), lo(lo) {} }; struct RegisterW : Register { - Register8 &hi, &lo; + Register8& hi; + Register8& lo; operator unsigned() const { return (hi << 8) | (lo << 0); } unsigned operator=(unsigned x) { hi = x >> 8; lo = x >> 0; return *this; } - RegisterW(Register8 &hi, Register8 &lo) : hi(hi), lo(lo) {} + RegisterW(Register8& hi, Register8& lo) : hi(hi), lo(lo) {} }; struct Registers { @@ -98,7 +99,7 @@ struct Registers { bool ime; Register& operator[](unsigned r) { - static Register* table[] = { &a, &f, &af, &b, &c, &bc, &d, &e, &de, &h, &l, &hl, &sp, &pc }; + static Register* table[] = {&a, &f, &af, &b, &c, &bc, &d, &e, &de, &h, &l, &hl, &sp, &pc}; return *table[r]; } diff --git a/higan/processor/lr35902/serialization.cpp b/higan/processor/lr35902/serialization.cpp index d1021be9..1f5f7260 100755 --- a/higan/processor/lr35902/serialization.cpp +++ b/higan/processor/lr35902/serialization.cpp @@ -1,4 +1,4 @@ -void LR35902::serialize(serializer &s) { +void LR35902::serialize(serializer& s) { s.integer(r.a.data); s.integer(r.f.z); s.integer(r.f.n); diff --git a/higan/processor/r6502/instructions.cpp b/higan/processor/r6502/instructions.cpp index 73e3c5b7..9d551c05 100755 --- a/higan/processor/r6502/instructions.cpp +++ b/higan/processor/r6502/instructions.cpp @@ -165,26 +165,26 @@ L op_readpc(); } } -void R6502::opi_clear_flag(bool &flag) { +void R6502::opi_clear_flag(bool& flag) { L op_readpc(); flag = 0; } -void R6502::opi_decrement(uint8 &r) { +void R6502::opi_decrement(uint8& r) { L op_readpc(); r--; regs.p.n = (r & 0x80); regs.p.z = (r == 0); } -void R6502::opi_increment(uint8 &r) { +void R6502::opi_increment(uint8& r) { L op_readpc(); r++; regs.p.n = (r & 0x80); regs.p.z = (r == 0); } -void R6502::opi_pull(uint8 &r) { +void R6502::opi_pull(uint8& r) { op_readpc(); op_readpc(); L r = op_readsp(); @@ -192,7 +192,7 @@ L r = op_readsp(); regs.p.z = (r == 0); } -void R6502::opi_push(uint8 &r) { +void R6502::opi_push(uint8& r) { op_readpc(); L op_writesp(r); } @@ -312,7 +312,7 @@ void R6502::opi_rmw_zero_page_x() { L op_writezp(zp + regs.x, rd); } -void R6502::opi_set_flag(bool &flag) { +void R6502::opi_set_flag(bool& flag) { L op_readpc(); flag = 1; } @@ -323,27 +323,27 @@ L op_readpc(); call(op); } -void R6502::opi_store_absolute(uint8 &r) { +void R6502::opi_store_absolute(uint8& r) { abs.l = op_readpci(); abs.h = op_readpci(); L op_write(abs.w, r); } -void R6502::opi_store_absolute_x(uint8 &r) { +void R6502::opi_store_absolute_x(uint8& r) { abs.l = op_readpci(); abs.h = op_readpci(); op_page_always(abs.w, abs.w + regs.x); L op_write(abs.w + regs.x, r); } -void R6502::opi_store_absolute_y(uint8 &r) { +void R6502::opi_store_absolute_y(uint8& r) { abs.l = op_readpci(); abs.h = op_readpci(); op_page_always(abs.w, abs.w + regs.y); L op_write(abs.w + regs.y, r); } -void R6502::opi_store_indirect_zero_page_x(uint8 &r) { +void R6502::opi_store_indirect_zero_page_x(uint8& r) { zp = op_readpci(); op_readzp(zp); abs.l = op_readzp(zp++ + regs.x); @@ -351,7 +351,7 @@ void R6502::opi_store_indirect_zero_page_x(uint8 &r) { L op_write(abs.w, r); } -void R6502::opi_store_indirect_zero_page_y(uint8 &r) { +void R6502::opi_store_indirect_zero_page_y(uint8& r) { rd = op_readpci(); abs.l = op_readzp(rd++); abs.h = op_readzp(rd++); @@ -359,24 +359,24 @@ void R6502::opi_store_indirect_zero_page_y(uint8 &r) { L op_write(abs.w + regs.y, r); } -void R6502::opi_store_zero_page(uint8 &r) { +void R6502::opi_store_zero_page(uint8& r) { zp = op_readpci(); L op_writezp(zp, r); } -void R6502::opi_store_zero_page_x(uint8 &r) { +void R6502::opi_store_zero_page_x(uint8& r) { zp = op_readpci(); op_readzp(zp); L op_writezp(zp + regs.x, r); } -void R6502::opi_store_zero_page_y(uint8 &r) { +void R6502::opi_store_zero_page_y(uint8& r) { zp = op_readpci(); op_readzp(zp); L op_writezp(zp + regs.y, r); } -void R6502::opi_transfer(uint8 &s, uint8 &d, bool flag) { +void R6502::opi_transfer(uint8& s, uint8& d, bool flag) { L op_readpc(); d = s; if(flag == false) return; diff --git a/higan/processor/r6502/r6502.hpp b/higan/processor/r6502/r6502.hpp index f34b5ee2..e6d5dadf 100755 --- a/higan/processor/r6502/r6502.hpp +++ b/higan/processor/r6502/r6502.hpp @@ -13,7 +13,7 @@ struct R6502 { virtual uint8 op_read(uint16 addr) = 0; virtual void op_write(uint16 addr, uint8 data) = 0; virtual void last_cycle() = 0; - virtual void nmi(uint16 &vector) = 0; + virtual void nmi(uint16& vector) = 0; virtual uint8 debugger_read(uint16 addr) { return 0u; } uint8 mdr() const; @@ -61,11 +61,11 @@ struct R6502 { void opf_sra(); void opi_branch(bool condition); - void opi_clear_flag(bool &flag); - void opi_decrement(uint8 &r); - void opi_increment(uint8 &r); - void opi_pull(uint8 &r); - void opi_push(uint8 &r); + void opi_clear_flag(bool& flag); + void opi_decrement(uint8& r); + void opi_increment(uint8& r); + void opi_pull(uint8& r); + void opi_push(uint8& r); template void opi_read_absolute(); template void opi_read_absolute_x(); template void opi_read_absolute_y(); @@ -79,17 +79,17 @@ struct R6502 { template void opi_rmw_absolute_x(); template void opi_rmw_zero_page(); template void opi_rmw_zero_page_x(); - void opi_set_flag(bool &flag); + void opi_set_flag(bool& flag); template void opi_shift(); - void opi_store_absolute(uint8 &r); - void opi_store_absolute_x(uint8 &r); - void opi_store_absolute_y(uint8 &r); - void opi_store_indirect_zero_page_x(uint8 &r); - void opi_store_indirect_zero_page_y(uint8 &r); - void opi_store_zero_page(uint8 &r); - void opi_store_zero_page_x(uint8 &r); - void opi_store_zero_page_y(uint8 &r); - void opi_transfer(uint8 &s, uint8 &d, bool flag); + void opi_store_absolute(uint8& r); + void opi_store_absolute_x(uint8& r); + void opi_store_absolute_y(uint8& r); + void opi_store_indirect_zero_page_x(uint8& r); + void opi_store_indirect_zero_page_y(uint8& r); + void opi_store_zero_page(uint8& r); + void opi_store_zero_page_x(uint8& r); + void opi_store_zero_page_y(uint8& r); + void opi_transfer(uint8& s, uint8& d, bool flag); void op_brk(); void op_jmp_absolute(); diff --git a/higan/processor/r6502/serialization.cpp b/higan/processor/r6502/serialization.cpp index 1bb8652c..089d1e83 100755 --- a/higan/processor/r6502/serialization.cpp +++ b/higan/processor/r6502/serialization.cpp @@ -1,4 +1,4 @@ -void R6502::serialize(serializer &s) { +void R6502::serialize(serializer& s) { s.integer(regs.mdr); s.integer(regs.pc); s.integer(regs.a); diff --git a/higan/processor/r65816/disassembler.cpp b/higan/processor/r65816/disassembler.cpp index 78e5e77d..38d05d34 100755 --- a/higan/processor/r65816/disassembler.cpp +++ b/higan/processor/r65816/disassembler.cpp @@ -102,10 +102,10 @@ uint32 R65816::decode(uint8 offset_type, uint32 addr) { return(r & 0xffffff); } -void R65816::disassemble_opcode(char *output, uint32 addr) { +void R65816::disassemble_opcode(char* output, uint32 addr) { static reg24_t pc; char t[256]; - char *s = output; + char* s = output; if(false /* in_opcode() == true */) { strcpy(s, "?????? "); diff --git a/higan/processor/r65816/disassembler.hpp b/higan/processor/r65816/disassembler.hpp index 48457068..a6732bd2 100755 --- a/higan/processor/r65816/disassembler.hpp +++ b/higan/processor/r65816/disassembler.hpp @@ -22,8 +22,8 @@ enum : unsigned { OPTYPE_RELW, //relw }; -void disassemble_opcode(char *output, uint32 addr); -uint8 dreadb(uint32 addr); +void disassemble_opcode(char* output, uint32 addr); +uint8 dreadb(uint32 addr); uint16 dreadw(uint32 addr); uint32 dreadl(uint32 addr); uint32 decode(uint8 offset_type, uint32 addr); diff --git a/higan/processor/r65816/serialization.cpp b/higan/processor/r65816/serialization.cpp index 06db3cb4..62df5ff5 100755 --- a/higan/processor/r65816/serialization.cpp +++ b/higan/processor/r65816/serialization.cpp @@ -1,4 +1,4 @@ -void R65816::serialize(serializer &s) { +void R65816::serialize(serializer& s) { s.integer(regs.pc.d); s.integer(regs.a.w); diff --git a/higan/processor/spc700/instructions.cpp b/higan/processor/spc700/instructions.cpp index 101661da..7b7a99a3 100755 --- a/higan/processor/spc700/instructions.cpp +++ b/higan/processor/spc700/instructions.cpp @@ -1,7 +1,7 @@ #define call (this->*op) template -void SPC700::op_adjust(uint8 &r) { +void SPC700::op_adjust(uint8& r) { op_io(); r = call(r); } @@ -61,7 +61,7 @@ void SPC700::op_branch_bit() { regs.pc += (int8)rd; } -void SPC700::op_pull(uint8 &r) { +void SPC700::op_pull(uint8& r) { op_io(); op_io(); r = op_readsp(); @@ -74,7 +74,7 @@ void SPC700::op_push(uint8 r) { } template -void SPC700::op_read_addr(uint8 &r) { +void SPC700::op_read_addr(uint8& r) { dp.l = op_readpc(); dp.h = op_readpc(); rd = op_read(dp); @@ -82,7 +82,7 @@ void SPC700::op_read_addr(uint8 &r) { } template -void SPC700::op_read_addri(uint8 &r) { +void SPC700::op_read_addri(uint8& r) { dp.l = op_readpc(); dp.h = op_readpc(); op_io(); @@ -91,20 +91,20 @@ void SPC700::op_read_addri(uint8 &r) { } template -void SPC700::op_read_const(uint8 &r) { +void SPC700::op_read_const(uint8& r) { rd = op_readpc(); r = call(r, rd); } template -void SPC700::op_read_dp(uint8 &r) { +void SPC700::op_read_dp(uint8& r) { dp = op_readpc(); rd = op_readdp(dp); r = call(r, rd); } template -void SPC700::op_read_dpi(uint8 &r, uint8 &i) { +void SPC700::op_read_dpi(uint8& r, uint8& i) { dp = op_readpc(); op_io(); rd = op_readdp(dp + i); @@ -188,7 +188,7 @@ void SPC700::op_set_bit() { op_writedp(dp, rd | (!(opcode & 0x10) << (opcode >> 5))); } -void SPC700::op_set_flag(bool &flag, bool data) { +void SPC700::op_set_flag(bool& flag, bool data) { op_io(); if(&flag == ®s.p.i) op_io(); flag = data; @@ -204,7 +204,7 @@ void SPC700::op_test_addr(bool set) { op_write(dp, set ? rd | regs.a : rd & ~regs.a); } -void SPC700::op_transfer(uint8 &from, uint8 &to) { +void SPC700::op_transfer(uint8& from, uint8& to) { op_io(); to = from; if(&to == ®s.s) return; @@ -212,14 +212,14 @@ void SPC700::op_transfer(uint8 &from, uint8 &to) { regs.p.z = (to == 0); } -void SPC700::op_write_addr(uint8 &r) { +void SPC700::op_write_addr(uint8& r) { dp.l = op_readpc(); dp.h = op_readpc(); op_read(dp); op_write(dp, r); } -void SPC700::op_write_addri(uint8 &i) { +void SPC700::op_write_addri(uint8& i) { dp.l = op_readpc(); dp.h = op_readpc(); op_io(); @@ -228,13 +228,13 @@ void SPC700::op_write_addri(uint8 &i) { op_write(dp, regs.a); } -void SPC700::op_write_dp(uint8 &r) { +void SPC700::op_write_dp(uint8& r) { dp = op_readpc(); op_readdp(dp); op_writedp(dp, r); } -void SPC700::op_write_dpi(uint8 &r, uint8 &i) { +void SPC700::op_write_dpi(uint8& r, uint8& i) { dp = op_readpc() + i; op_io(); op_readdp(dp); diff --git a/higan/processor/spc700/serialization.cpp b/higan/processor/spc700/serialization.cpp index b47087e4..87a79e37 100755 --- a/higan/processor/spc700/serialization.cpp +++ b/higan/processor/spc700/serialization.cpp @@ -1,4 +1,4 @@ -void SPC700::serialize(serializer &s) { +void SPC700::serialize(serializer& s) { s.integer(regs.pc); s.integer(regs.a); s.integer(regs.x); diff --git a/higan/processor/upd96050/disassembler.cpp b/higan/processor/upd96050/disassembler.cpp index 23a5bb95..08c3552a 100755 --- a/higan/processor/upd96050/disassembler.cpp +++ b/higan/processor/upd96050/disassembler.cpp @@ -16,84 +16,84 @@ string NECDSP::disassemble(uint14 ip) { uint4 dst = opcode >> 0; switch(alu) { - case 0: output.append("nop "); break; - case 1: output.append("or "); break; - case 2: output.append("and "); break; - case 3: output.append("xor "); break; - case 4: output.append("sub "); break; - case 5: output.append("add "); break; - case 6: output.append("sbb "); break; - case 7: output.append("adc "); break; - case 8: output.append("dec "); break; - case 9: output.append("inc "); break; - case 10: output.append("cmp "); break; - case 11: output.append("shr1 "); break; - case 12: output.append("shl1 "); break; - case 13: output.append("shl2 "); break; - case 14: output.append("shl4 "); break; - case 15: output.append("xchg "); break; + case 0: output.append("nop "); break; + case 1: output.append("or "); break; + case 2: output.append("and "); break; + case 3: output.append("xor "); break; + case 4: output.append("sub "); break; + case 5: output.append("add "); break; + case 6: output.append("sbb "); break; + case 7: output.append("adc "); break; + case 8: output.append("dec "); break; + case 9: output.append("inc "); break; + case 10: output.append("cmp "); break; + case 11: output.append("shr1 "); break; + case 12: output.append("shl1 "); break; + case 13: output.append("shl2 "); break; + case 14: output.append("shl4 "); break; + case 15: output.append("xchg "); break; } if(alu < 8) { switch(pselect) { - case 0: output.append("ram,"); break; - case 1: output.append("idb,"); break; - case 2: output.append("m," ); break; - case 3: output.append("n," ); break; + case 0: output.append("ram,"); break; + case 1: output.append("idb,"); break; + case 2: output.append("m," ); break; + case 3: output.append("n," ); break; } } switch(asl) { - case 0: output.append("a"); break; - case 1: output.append("b"); break; + case 0: output.append("a"); break; + case 1: output.append("b"); break; } output.append("\n mov "); switch(src) { - case 0: output.append("trb," ); break; - case 1: output.append("a," ); break; - case 2: output.append("b," ); break; - case 3: output.append("tr," ); break; - case 4: output.append("dp," ); break; - case 5: output.append("rp," ); break; - case 6: output.append("ro," ); break; - case 7: output.append("sgn," ); break; - case 8: output.append("dr," ); break; - case 9: output.append("drnf,"); break; - case 10: output.append("sr," ); break; - case 11: output.append("sim," ); break; - case 12: output.append("sil," ); break; - case 13: output.append("k," ); break; - case 14: output.append("l," ); break; - case 15: output.append("mem," ); break; + case 0: output.append("trb," ); break; + case 1: output.append("a," ); break; + case 2: output.append("b," ); break; + case 3: output.append("tr," ); break; + case 4: output.append("dp," ); break; + case 5: output.append("rp," ); break; + case 6: output.append("ro," ); break; + case 7: output.append("sgn," ); break; + case 8: output.append("dr," ); break; + case 9: output.append("drnf,"); break; + case 10: output.append("sr," ); break; + case 11: output.append("sim," ); break; + case 12: output.append("sil," ); break; + case 13: output.append("k," ); break; + case 14: output.append("l," ); break; + case 15: output.append("mem," ); break; } switch(dst) { - case 0: output.append("non"); break; - case 1: output.append("a" ); break; - case 2: output.append("b" ); break; - case 3: output.append("tr" ); break; - case 4: output.append("dp" ); break; - case 5: output.append("rp" ); break; - case 6: output.append("dr" ); break; - case 7: output.append("sr" ); break; - case 8: output.append("sol"); break; - case 9: output.append("som"); break; - case 10: output.append("k" ); break; - case 11: output.append("klr"); break; - case 12: output.append("klm"); break; - case 13: output.append("l" ); break; - case 14: output.append("trb"); break; - case 15: output.append("mem"); break; + case 0: output.append("non"); break; + case 1: output.append("a" ); break; + case 2: output.append("b" ); break; + case 3: output.append("tr" ); break; + case 4: output.append("dp" ); break; + case 5: output.append("rp" ); break; + case 6: output.append("dr" ); break; + case 7: output.append("sr" ); break; + case 8: output.append("sol"); break; + case 9: output.append("som"); break; + case 10: output.append("k" ); break; + case 11: output.append("klr"); break; + case 12: output.append("klm"); break; + case 13: output.append("l" ); break; + case 14: output.append("trb"); break; + case 15: output.append("mem"); break; } if(dpl) { switch(dpl) { - case 0: output.append("\n dpnop"); break; - case 1: output.append("\n dpinc"); break; - case 2: output.append("\n dpdec"); break; - case 3: output.append("\n dpclr"); break; + case 0: output.append("\n dpnop"); break; + case 1: output.append("\n dpinc"); break; + case 2: output.append("\n dpdec"); break; + case 3: output.append("\n dpclr"); break; } } @@ -118,46 +118,46 @@ string NECDSP::disassemble(uint14 ip) { uint14 jp = (regs.pc & 0x2000) | (bank << 11) | (na << 0); switch(brch) { - case 0x000: output.append("jmpso "); jp = 0; break; - case 0x080: output.append("jnca "); break; - case 0x082: output.append("jca "); break; - case 0x084: output.append("jncb "); break; - case 0x086: output.append("jcb "); break; - case 0x088: output.append("jnza "); break; - case 0x08a: output.append("jza "); break; - case 0x08c: output.append("jnzb "); break; - case 0x08e: output.append("jzb "); break; - case 0x090: output.append("jnova0 "); break; - case 0x092: output.append("jova0 "); break; - case 0x094: output.append("jnovb0 "); break; - case 0x096: output.append("jovb0 "); break; - case 0x098: output.append("jnova1 "); break; - case 0x09a: output.append("jova1 "); break; - case 0x09c: output.append("jnovb1 "); break; - case 0x09e: output.append("jovb1 "); break; - case 0x0a0: output.append("jnsa0 "); break; - case 0x0a2: output.append("jsa0 "); break; - case 0x0a4: output.append("jnsb0 "); break; - case 0x0a6: output.append("jsb0 "); break; - case 0x0a8: output.append("jnsa1 "); break; - case 0x0aa: output.append("jsa1 "); break; - case 0x0ac: output.append("jnsb1 "); break; - case 0x0ae: output.append("jsb1 "); break; - case 0x0b0: output.append("jdpl0 "); break; - case 0x0b1: output.append("jdpln0 "); break; - case 0x0b2: output.append("jdplf "); break; - case 0x0b3: output.append("jdplnf "); break; - case 0x0b4: output.append("jnsiak "); break; - case 0x0b6: output.append("jsiak "); break; - case 0x0b8: output.append("jnsoak "); break; - case 0x0ba: output.append("jsoak "); break; - case 0x0bc: output.append("jnrqm "); break; - case 0x0be: output.append("jrqm "); break; - case 0x100: output.append("ljmp "); jp &= ~0x2000; break; - case 0x101: output.append("hjmp "); jp |= 0x2000; break; - case 0x140: output.append("lcall "); jp &= ~0x2000; break; - case 0x141: output.append("hcall "); jp |= 0x2000; break; - default: output.append("?????? "); break; + case 0x000: output.append("jmpso "); jp = 0; break; + case 0x080: output.append("jnca "); break; + case 0x082: output.append("jca "); break; + case 0x084: output.append("jncb "); break; + case 0x086: output.append("jcb "); break; + case 0x088: output.append("jnza "); break; + case 0x08a: output.append("jza "); break; + case 0x08c: output.append("jnzb "); break; + case 0x08e: output.append("jzb "); break; + case 0x090: output.append("jnova0 "); break; + case 0x092: output.append("jova0 "); break; + case 0x094: output.append("jnovb0 "); break; + case 0x096: output.append("jovb0 "); break; + case 0x098: output.append("jnova1 "); break; + case 0x09a: output.append("jova1 "); break; + case 0x09c: output.append("jnovb1 "); break; + case 0x09e: output.append("jovb1 "); break; + case 0x0a0: output.append("jnsa0 "); break; + case 0x0a2: output.append("jsa0 "); break; + case 0x0a4: output.append("jnsb0 "); break; + case 0x0a6: output.append("jsb0 "); break; + case 0x0a8: output.append("jnsa1 "); break; + case 0x0aa: output.append("jsa1 "); break; + case 0x0ac: output.append("jnsb1 "); break; + case 0x0ae: output.append("jsb1 "); break; + case 0x0b0: output.append("jdpl0 "); break; + case 0x0b1: output.append("jdpln0 "); break; + case 0x0b2: output.append("jdplf "); break; + case 0x0b3: output.append("jdplnf "); break; + case 0x0b4: output.append("jnsiak "); break; + case 0x0b6: output.append("jsiak "); break; + case 0x0b8: output.append("jnsoak "); break; + case 0x0ba: output.append("jsoak "); break; + case 0x0bc: output.append("jnrqm "); break; + case 0x0be: output.append("jrqm "); break; + case 0x100: output.append("ljmp "); jp &= ~0x2000; break; + case 0x101: output.append("hjmp "); jp |= 0x2000; break; + case 0x140: output.append("lcall "); jp &= ~0x2000; break; + case 0x141: output.append("hcall "); jp |= 0x2000; break; + default: output.append("?????? "); break; } output.append("$", hex<4>(jp)); @@ -171,22 +171,22 @@ string NECDSP::disassemble(uint14 ip) { output.append("$", hex<4>(id), ","); switch(dst) { - case 0: output.append("non"); break; - case 1: output.append("a" ); break; - case 2: output.append("b" ); break; - case 3: output.append("tr" ); break; - case 4: output.append("dp" ); break; - case 5: output.append("rp" ); break; - case 6: output.append("dr" ); break; - case 7: output.append("sr" ); break; - case 8: output.append("sol"); break; - case 9: output.append("som"); break; - case 10: output.append("k" ); break; - case 11: output.append("klr"); break; - case 12: output.append("klm"); break; - case 13: output.append("l" ); break; - case 14: output.append("trb"); break; - case 15: output.append("mem"); break; + case 0: output.append("non"); break; + case 1: output.append("a" ); break; + case 2: output.append("b" ); break; + case 3: output.append("tr" ); break; + case 4: output.append("dp" ); break; + case 5: output.append("rp" ); break; + case 6: output.append("dr" ); break; + case 7: output.append("sr" ); break; + case 8: output.append("sol"); break; + case 9: output.append("som"); break; + case 10: output.append("k" ); break; + case 11: output.append("klr"); break; + case 12: output.append("klm"); break; + case 13: output.append("l" ); break; + case 14: output.append("trb"); break; + case 15: output.append("mem"); break; } } diff --git a/higan/processor/upd96050/instructions.cpp b/higan/processor/upd96050/instructions.cpp index 62226738..c9fcb4c0 100755 --- a/higan/processor/upd96050/instructions.cpp +++ b/higan/processor/upd96050/instructions.cpp @@ -24,22 +24,22 @@ void uPD96050::exec_op(uint24 opcode) { uint16 idb; switch(src) { - case 0: idb = regs.trb; break; - case 1: idb = regs.a; break; - case 2: idb = regs.b; break; - case 3: idb = regs.tr; break; - case 4: idb = regs.dp; break; - case 5: idb = regs.rp; break; - case 6: idb = dataROM[regs.rp]; break; - case 7: idb = 0x8000 - regs.flaga.s1; break; - case 8: idb = regs.dr; regs.sr.rqm = 1; break; - case 9: idb = regs.dr; break; - case 10: idb = regs.sr; break; - case 11: idb = regs.si; break; //MSB - case 12: idb = regs.si; break; //LSB - case 13: idb = regs.k; break; - case 14: idb = regs.l; break; - case 15: idb = dataRAM[regs.dp]; break; + case 0: idb = regs.trb; break; + case 1: idb = regs.a; break; + case 2: idb = regs.b; break; + case 3: idb = regs.tr; break; + case 4: idb = regs.dp; break; + case 5: idb = regs.rp; break; + case 6: idb = dataROM[regs.rp]; break; + case 7: idb = 0x8000 - regs.flaga.s1; break; + case 8: idb = regs.dr; regs.sr.rqm = 1; break; + case 9: idb = regs.dr; break; + case 10: idb = regs.sr; break; + case 11: idb = regs.si; break; //MSB + case 12: idb = regs.si; break; //LSB + case 13: idb = regs.k; break; + case 14: idb = regs.l; break; + case 15: idb = dataRAM[regs.dp]; break; } if(alu) { @@ -48,87 +48,87 @@ void uPD96050::exec_op(uint24 opcode) { bool c; switch(pselect) { - case 0: p = dataRAM[regs.dp]; break; - case 1: p = idb; break; - case 2: p = regs.m; break; - case 3: p = regs.n; break; + case 0: p = dataRAM[regs.dp]; break; + case 1: p = idb; break; + case 2: p = regs.m; break; + case 3: p = regs.n; break; } switch(asl) { - case 0: q = regs.a; flag = regs.flaga; c = regs.flagb.c; break; - case 1: q = regs.b; flag = regs.flagb; c = regs.flaga.c; break; + case 0: q = regs.a; flag = regs.flaga; c = regs.flagb.c; break; + case 1: q = regs.b; flag = regs.flagb; c = regs.flaga.c; break; } switch(alu) { - case 1: r = q | p; break; //OR - case 2: r = q & p; break; //AND - case 3: r = q ^ p; break; //XOR - case 4: r = q - p; break; //SUB - case 5: r = q + p; break; //ADD - case 6: r = q - p - c; break; //SBB - case 7: r = q + p + c; break; //ADC - case 8: r = q - 1; p = 1; break; //DEC - case 9: r = q + 1; p = 1; break; //INC - case 10: r = ~q; break; //CMP - case 11: r = (q >> 1) | (q & 0x8000); break; //SHR1 (ASR) - case 12: r = (q << 1) | c; break; //SHL1 (ROL) - case 13: r = (q << 2) | 3; break; //SHL2 - case 14: r = (q << 4) | 15; break; //SHL4 - case 15: r = (q << 8) | (q >> 8); break; //XCHG + case 1: r = q | p; break; //OR + case 2: r = q & p; break; //AND + case 3: r = q ^ p; break; //XOR + case 4: r = q - p; break; //SUB + case 5: r = q + p; break; //ADD + case 6: r = q - p - c; break; //SBB + case 7: r = q + p + c; break; //ADC + case 8: r = q - 1; p = 1; break; //DEC + case 9: r = q + 1; p = 1; break; //INC + case 10: r = ~q; break; //CMP + case 11: r = (q >> 1) | (q & 0x8000); break; //SHR1 (ASR) + case 12: r = (q << 1) | c; break; //SHL1 (ROL) + case 13: r = (q << 2) | 3; break; //SHL2 + case 14: r = (q << 4) | 15; break; //SHL4 + case 15: r = (q << 8) | (q >> 8); break; //XCHG } flag.s0 = (r & 0x8000); flag.z = (r == 0); switch(alu) { - case 1: case 2: case 3: case 10: case 13: case 14: case 15: { - flag.c = 0; - flag.ov0 = 0; - flag.ov1 = 0; - break; + case 1: case 2: case 3: case 10: case 13: case 14: case 15: { + flag.c = 0; + flag.ov0 = 0; + flag.ov1 = 0; + break; + } + case 4: case 5: case 6: case 7: case 8: case 9: { + if(alu & 1) { + //addition + flag.ov0 = (q ^ r) & ~(q ^ p) & 0x8000; + flag.c = (r < q); + } else { + //subtraction + flag.ov0 = (q ^ r) & (q ^ p) & 0x8000; + flag.c = (r > q); } - case 4: case 5: case 6: case 7: case 8: case 9: { - if(alu & 1) { - //addition - flag.ov0 = (q ^ r) & ~(q ^ p) & 0x8000; - flag.c = (r < q); - } else { - //subtraction - flag.ov0 = (q ^ r) & (q ^ p) & 0x8000; - flag.c = (r > q); - } - if(flag.ov0) { - flag.s1 = flag.ov1 ^ !(r & 0x8000); - flag.ov1 = !flag.ov1; - } - break; - } - case 11: { - flag.c = q & 1; - flag.ov0 = 0; - flag.ov1 = 0; - break; - } - case 12: { - flag.c = q >> 15; - flag.ov0 = 0; - flag.ov1 = 0; - break; + if(flag.ov0) { + flag.s1 = flag.ov1 ^ !(r & 0x8000); + flag.ov1 = !flag.ov1; } + break; + } + case 11: { + flag.c = q & 1; + flag.ov0 = 0; + flag.ov1 = 0; + break; + } + case 12: { + flag.c = q >> 15; + flag.ov0 = 0; + flag.ov1 = 0; + break; + } } switch(asl) { - case 0: regs.a = r; regs.flaga = flag; break; - case 1: regs.b = r; regs.flagb = flag; break; + case 0: regs.a = r; regs.flaga = flag; break; + case 1: regs.b = r; regs.flagb = flag; break; } } exec_ld((idb << 6) + dst); switch(dpl) { - case 1: regs.dp = (regs.dp & 0xf0) + ((regs.dp + 1) & 0x0f); break; //DPINC - case 2: regs.dp = (regs.dp & 0xf0) + ((regs.dp - 1) & 0x0f); break; //DPDEC - case 3: regs.dp = (regs.dp & 0xf0); break; //DPCLR + case 1: regs.dp = (regs.dp & 0xf0) + ((regs.dp + 1) & 0x0f); break; //DPINC + case 2: regs.dp = (regs.dp & 0xf0) + ((regs.dp - 1) & 0x0f); break; //DPDEC + case 3: regs.dp = (regs.dp & 0xf0); break; //DPCLR } regs.dp ^= dphm << 4; @@ -149,51 +149,51 @@ void uPD96050::exec_jp(uint24 opcode) { uint14 jp = (regs.pc & 0x2000) | (bank << 11) | (na << 0); switch(brch) { - case 0x000: regs.pc = regs.so; return; //JMPSO + case 0x000: regs.pc = regs.so; return; //JMPSO - case 0x080: if(regs.flaga.c == 0) regs.pc = jp; return; //JNCA - case 0x082: if(regs.flaga.c == 1) regs.pc = jp; return; //JCA - case 0x084: if(regs.flagb.c == 0) regs.pc = jp; return; //JNCB - case 0x086: if(regs.flagb.c == 1) regs.pc = jp; return; //JCB + case 0x080: if(regs.flaga.c == 0) regs.pc = jp; return; //JNCA + case 0x082: if(regs.flaga.c == 1) regs.pc = jp; return; //JCA + case 0x084: if(regs.flagb.c == 0) regs.pc = jp; return; //JNCB + case 0x086: if(regs.flagb.c == 1) regs.pc = jp; return; //JCB - case 0x088: if(regs.flaga.z == 0) regs.pc = jp; return; //JNZA - case 0x08a: if(regs.flaga.z == 1) regs.pc = jp; return; //JZA - case 0x08c: if(regs.flagb.z == 0) regs.pc = jp; return; //JNZB - case 0x08e: if(regs.flagb.z == 1) regs.pc = jp; return; //JZB + case 0x088: if(regs.flaga.z == 0) regs.pc = jp; return; //JNZA + case 0x08a: if(regs.flaga.z == 1) regs.pc = jp; return; //JZA + case 0x08c: if(regs.flagb.z == 0) regs.pc = jp; return; //JNZB + case 0x08e: if(regs.flagb.z == 1) regs.pc = jp; return; //JZB - case 0x090: if(regs.flaga.ov0 == 0) regs.pc = jp; return; //JNOVA0 - case 0x092: if(regs.flaga.ov0 == 1) regs.pc = jp; return; //JOVA0 - case 0x094: if(regs.flagb.ov0 == 0) regs.pc = jp; return; //JNOVB0 - case 0x096: if(regs.flagb.ov0 == 1) regs.pc = jp; return; //JOVB0 + case 0x090: if(regs.flaga.ov0 == 0) regs.pc = jp; return; //JNOVA0 + case 0x092: if(regs.flaga.ov0 == 1) regs.pc = jp; return; //JOVA0 + case 0x094: if(regs.flagb.ov0 == 0) regs.pc = jp; return; //JNOVB0 + case 0x096: if(regs.flagb.ov0 == 1) regs.pc = jp; return; //JOVB0 - case 0x098: if(regs.flaga.ov1 == 0) regs.pc = jp; return; //JNOVA1 - case 0x09a: if(regs.flaga.ov1 == 1) regs.pc = jp; return; //JOVA1 - case 0x09c: if(regs.flagb.ov1 == 0) regs.pc = jp; return; //JNOVB1 - case 0x09e: if(regs.flagb.ov1 == 1) regs.pc = jp; return; //JOVB1 + case 0x098: if(regs.flaga.ov1 == 0) regs.pc = jp; return; //JNOVA1 + case 0x09a: if(regs.flaga.ov1 == 1) regs.pc = jp; return; //JOVA1 + case 0x09c: if(regs.flagb.ov1 == 0) regs.pc = jp; return; //JNOVB1 + case 0x09e: if(regs.flagb.ov1 == 1) regs.pc = jp; return; //JOVB1 - case 0x0a0: if(regs.flaga.s0 == 0) regs.pc = jp; return; //JNSA0 - case 0x0a2: if(regs.flaga.s0 == 1) regs.pc = jp; return; //JSA0 - case 0x0a4: if(regs.flagb.s0 == 0) regs.pc = jp; return; //JNSB0 - case 0x0a6: if(regs.flagb.s0 == 1) regs.pc = jp; return; //JSB0 + case 0x0a0: if(regs.flaga.s0 == 0) regs.pc = jp; return; //JNSA0 + case 0x0a2: if(regs.flaga.s0 == 1) regs.pc = jp; return; //JSA0 + case 0x0a4: if(regs.flagb.s0 == 0) regs.pc = jp; return; //JNSB0 + case 0x0a6: if(regs.flagb.s0 == 1) regs.pc = jp; return; //JSB0 - case 0x0a8: if(regs.flaga.s1 == 0) regs.pc = jp; return; //JNSA1 - case 0x0aa: if(regs.flaga.s1 == 1) regs.pc = jp; return; //JSA1 - case 0x0ac: if(regs.flagb.s1 == 0) regs.pc = jp; return; //JNSB1 - case 0x0ae: if(regs.flagb.s1 == 1) regs.pc = jp; return; //JSB1 + case 0x0a8: if(regs.flaga.s1 == 0) regs.pc = jp; return; //JNSA1 + case 0x0aa: if(regs.flaga.s1 == 1) regs.pc = jp; return; //JSA1 + case 0x0ac: if(regs.flagb.s1 == 0) regs.pc = jp; return; //JNSB1 + case 0x0ae: if(regs.flagb.s1 == 1) regs.pc = jp; return; //JSB1 - case 0x0b0: if((regs.dp & 0x0f) == 0x00) regs.pc = jp; return; //JDPL0 - case 0x0b1: if((regs.dp & 0x0f) != 0x00) regs.pc = jp; return; //JDPLN0 - case 0x0b2: if((regs.dp & 0x0f) == 0x0f) regs.pc = jp; return; //JDPLF - case 0x0b3: if((regs.dp & 0x0f) != 0x0f) regs.pc = jp; return; //JDPLNF + case 0x0b0: if((regs.dp & 0x0f) == 0x00) regs.pc = jp; return; //JDPL0 + case 0x0b1: if((regs.dp & 0x0f) != 0x00) regs.pc = jp; return; //JDPLN0 + case 0x0b2: if((regs.dp & 0x0f) == 0x0f) regs.pc = jp; return; //JDPLF + case 0x0b3: if((regs.dp & 0x0f) != 0x0f) regs.pc = jp; return; //JDPLNF - case 0x0bc: if(regs.sr.rqm == 0) regs.pc = jp; return; //JNRQM - case 0x0be: if(regs.sr.rqm == 1) regs.pc = jp; return; //JRQM + case 0x0bc: if(regs.sr.rqm == 0) regs.pc = jp; return; //JNRQM + case 0x0be: if(regs.sr.rqm == 1) regs.pc = jp; return; //JRQM - case 0x100: regs.pc = jp & ~0x2000; return; //LJMP - case 0x101: regs.pc = jp | 0x2000; return; //HJMP + case 0x100: regs.pc = jp & ~0x2000; return; //LJMP + case 0x101: regs.pc = jp | 0x2000; return; //HJMP - case 0x140: regs.stack[regs.sp++] = regs.pc; regs.pc = jp & ~0x2000; return; //LCALL - case 0x141: regs.stack[regs.sp++] = regs.pc; regs.pc = jp | 0x2000; return; //HCALL + case 0x140: regs.stack[regs.sp++] = regs.pc; regs.pc = jp & ~0x2000; return; //LCALL + case 0x141: regs.stack[regs.sp++] = regs.pc; regs.pc = jp | 0x2000; return; //HCALL } } @@ -202,21 +202,21 @@ void uPD96050::exec_ld(uint24 opcode) { uint4 dst = opcode >> 0; //destination switch(dst) { - case 0: break; - case 1: regs.a = id; break; - case 2: regs.b = id; break; - case 3: regs.tr = id; break; - case 4: regs.dp = id; break; - case 5: regs.rp = id; break; - case 6: regs.dr = id; regs.sr.rqm = 1; break; - case 7: regs.sr = (regs.sr & 0x907c) | (id & ~0x907c); break; - case 8: regs.so = id; break; //LSB - case 9: regs.so = id; break; //MSB - case 10: regs.k = id; break; - case 11: regs.k = id; regs.l = dataROM[regs.rp]; break; - case 12: regs.l = id; regs.k = dataRAM[regs.dp | 0x40]; break; - case 13: regs.l = id; break; - case 14: regs.trb = id; break; - case 15: dataRAM[regs.dp] = id; break; + case 0: break; + case 1: regs.a = id; break; + case 2: regs.b = id; break; + case 3: regs.tr = id; break; + case 4: regs.dp = id; break; + case 5: regs.rp = id; break; + case 6: regs.dr = id; regs.sr.rqm = 1; break; + case 7: regs.sr = (regs.sr & 0x907c) | (id & ~0x907c); break; + case 8: regs.so = id; break; //LSB + case 9: regs.so = id; break; //MSB + case 10: regs.k = id; break; + case 11: regs.k = id; regs.l = dataROM[regs.rp]; break; + case 12: regs.l = id; regs.k = dataRAM[regs.dp | 0x40]; break; + case 13: regs.l = id; break; + case 14: regs.trb = id; break; + case 15: dataRAM[regs.dp] = id; break; } } diff --git a/higan/processor/upd96050/serialization.cpp b/higan/processor/upd96050/serialization.cpp index 024cd087..d94821d4 100755 --- a/higan/processor/upd96050/serialization.cpp +++ b/higan/processor/upd96050/serialization.cpp @@ -1,4 +1,4 @@ -void uPD96050::serialize(serializer &s) { +void uPD96050::serialize(serializer& s) { s.array(dataRAM); s.array(regs.stack); diff --git a/higan/sfc/alt/cpu/cpu.cpp b/higan/sfc/alt/cpu/cpu.cpp index d1715d59..7121e406 100755 --- a/higan/sfc/alt/cpu/cpu.cpp +++ b/higan/sfc/alt/cpu/cpu.cpp @@ -15,7 +15,7 @@ void CPU::step(unsigned clocks) { smp.clock -= clocks * (uint64)smp.frequency; ppu.clock -= clocks; for(unsigned i = 0; i < coprocessors.size(); i++) { - auto &chip = *coprocessors[i]; + auto& chip = *coprocessors[i]; chip.clock -= clocks * (uint64)chip.frequency; } input.port1->clock -= clocks * (uint64)input.port1->frequency; @@ -41,7 +41,7 @@ void CPU::synchronize_ppu() { void CPU::synchronize_coprocessors() { for(unsigned i = 0; i < coprocessors.size(); i++) { - auto &chip = *coprocessors[i]; + auto& chip = *coprocessors[i]; if(chip.clock < 0) co_switch(chip.thread); } } @@ -81,8 +81,8 @@ alwaysinline void CPU::op_step() { } void CPU::enable() { - function reader = { &CPU::mmio_read, (CPU*)&cpu }; - function writer = { &CPU::mmio_write, (CPU*)&cpu }; + function reader = {&CPU::mmio_read, (CPU*)&cpu}; + function writer = {&CPU::mmio_write, (CPU*)&cpu}; bus.map(reader, writer, 0x00, 0x3f, 0x2140, 0x2183); bus.map(reader, writer, 0x80, 0xbf, 0x2140, 0x2183); @@ -171,8 +171,8 @@ void CPU::reset() { dma_reset(); } -CPU::CPU() : queue(512, { &CPU::queue_event, this }) { - PPUcounter::scanline = { &CPU::scanline, this }; +CPU::CPU() : queue(512, {&CPU::queue_event, this}) { + PPUcounter::scanline = {&CPU::scanline, this}; } CPU::~CPU() { diff --git a/higan/sfc/alt/cpu/serialization.cpp b/higan/sfc/alt/cpu/serialization.cpp index 002c6624..ed7ac3fe 100755 --- a/higan/sfc/alt/cpu/serialization.cpp +++ b/higan/sfc/alt/cpu/serialization.cpp @@ -1,6 +1,6 @@ #ifdef CPU_CPP -void CPU::serialize(serializer &s) { +void CPU::serialize(serializer& s) { R65816::serialize(s); Thread::serialize(s); PPUcounter::serialize(s); diff --git a/higan/sfc/alt/ppu-balanced/mmio/mmio.cpp b/higan/sfc/alt/ppu-balanced/mmio/mmio.cpp index aedb67c1..d058c48d 100644 --- a/higan/sfc/alt/ppu-balanced/mmio/mmio.cpp +++ b/higan/sfc/alt/ppu-balanced/mmio/mmio.cpp @@ -165,10 +165,10 @@ void PPU::mmio_w2115(uint8 value) { regs.vram_incmode = !!(value & 0x80); regs.vram_mapping = (value >> 2) & 3; switch(value & 3) { - case 0: regs.vram_incsize = 1; break; - case 1: regs.vram_incsize = 32; break; - case 2: regs.vram_incsize = 128; break; - case 3: regs.vram_incsize = 128; break; + case 0: regs.vram_incsize = 1; break; + case 1: regs.vram_incsize = 32; break; + case 2: regs.vram_incsize = 128; break; + case 3: regs.vram_incsize = 128; break; } } @@ -574,36 +574,36 @@ uint8 PPU::mmio_read(unsigned addr) { cpu.synchronize_ppu(); switch(addr & 0xffff) { - case 0x2104: - case 0x2105: - case 0x2106: - case 0x2108: - case 0x2109: - case 0x210a: - case 0x2114: - case 0x2115: - case 0x2116: - case 0x2118: - case 0x2119: - case 0x211a: - case 0x2124: - case 0x2125: - case 0x2126: - case 0x2128: - case 0x2129: - case 0x212a: return regs.ppu1_mdr; - case 0x2134: return mmio_r2134(); //MPYL - case 0x2135: return mmio_r2135(); //MPYM - case 0x2136: return mmio_r2136(); //MPYH - case 0x2137: return mmio_r2137(); //SLHV - case 0x2138: return mmio_r2138(); //OAMDATAREAD - case 0x2139: return mmio_r2139(); //VMDATALREAD - case 0x213a: return mmio_r213a(); //VMDATAHREAD - case 0x213b: return mmio_r213b(); //CGDATAREAD - case 0x213c: return mmio_r213c(); //OPHCT - case 0x213d: return mmio_r213d(); //OPVCT - case 0x213e: return mmio_r213e(); //STAT77 - case 0x213f: return mmio_r213f(); //STAT78 + case 0x2104: + case 0x2105: + case 0x2106: + case 0x2108: + case 0x2109: + case 0x210a: + case 0x2114: + case 0x2115: + case 0x2116: + case 0x2118: + case 0x2119: + case 0x211a: + case 0x2124: + case 0x2125: + case 0x2126: + case 0x2128: + case 0x2129: + case 0x212a: return regs.ppu1_mdr; + case 0x2134: return mmio_r2134(); //MPYL + case 0x2135: return mmio_r2135(); //MPYM + case 0x2136: return mmio_r2136(); //MPYH + case 0x2137: return mmio_r2137(); //SLHV + case 0x2138: return mmio_r2138(); //OAMDATAREAD + case 0x2139: return mmio_r2139(); //VMDATALREAD + case 0x213a: return mmio_r213a(); //VMDATAHREAD + case 0x213b: return mmio_r213b(); //CGDATAREAD + case 0x213c: return mmio_r213c(); //OPHCT + case 0x213d: return mmio_r213d(); //OPVCT + case 0x213e: return mmio_r213e(); //STAT77 + case 0x213f: return mmio_r213f(); //STAT78 } return cpu.regs.mdr; @@ -613,58 +613,58 @@ void PPU::mmio_write(unsigned addr, uint8 data) { cpu.synchronize_ppu(); switch(addr & 0xffff) { - case 0x2100: return mmio_w2100(data); //INIDISP - case 0x2101: return mmio_w2101(data); //OBSEL - case 0x2102: return mmio_w2102(data); //OAMADDL - case 0x2103: return mmio_w2103(data); //OAMADDH - case 0x2104: return mmio_w2104(data); //OAMDATA - case 0x2105: return mmio_w2105(data); //BGMODE - case 0x2106: return mmio_w2106(data); //MOSAIC - case 0x2107: return mmio_w2107(data); //BG1SC - case 0x2108: return mmio_w2108(data); //BG2SC - case 0x2109: return mmio_w2109(data); //BG3SC - case 0x210a: return mmio_w210a(data); //BG4SC - case 0x210b: return mmio_w210b(data); //BG12NBA - case 0x210c: return mmio_w210c(data); //BG34NBA - case 0x210d: return mmio_w210d(data); //BG1HOFS - case 0x210e: return mmio_w210e(data); //BG1VOFS - case 0x210f: return mmio_w210f(data); //BG2HOFS - case 0x2110: return mmio_w2110(data); //BG2VOFS - case 0x2111: return mmio_w2111(data); //BG3HOFS - case 0x2112: return mmio_w2112(data); //BG3VOFS - case 0x2113: return mmio_w2113(data); //BG4HOFS - case 0x2114: return mmio_w2114(data); //BG4VOFS - case 0x2115: return mmio_w2115(data); //VMAIN - case 0x2116: return mmio_w2116(data); //VMADDL - case 0x2117: return mmio_w2117(data); //VMADDH - case 0x2118: return mmio_w2118(data); //VMDATAL - case 0x2119: return mmio_w2119(data); //VMDATAH - case 0x211a: return mmio_w211a(data); //M7SEL - case 0x211b: return mmio_w211b(data); //M7A - case 0x211c: return mmio_w211c(data); //M7B - case 0x211d: return mmio_w211d(data); //M7C - case 0x211e: return mmio_w211e(data); //M7D - case 0x211f: return mmio_w211f(data); //M7X - case 0x2120: return mmio_w2120(data); //M7Y - case 0x2121: return mmio_w2121(data); //CGADD - case 0x2122: return mmio_w2122(data); //CGDATA - case 0x2123: return mmio_w2123(data); //W12SEL - case 0x2124: return mmio_w2124(data); //W34SEL - case 0x2125: return mmio_w2125(data); //WOBJSEL - case 0x2126: return mmio_w2126(data); //WH0 - case 0x2127: return mmio_w2127(data); //WH1 - case 0x2128: return mmio_w2128(data); //WH2 - case 0x2129: return mmio_w2129(data); //WH3 - case 0x212a: return mmio_w212a(data); //WBGLOG - case 0x212b: return mmio_w212b(data); //WOBJLOG - case 0x212c: return mmio_w212c(data); //TM - case 0x212d: return mmio_w212d(data); //TS - case 0x212e: return mmio_w212e(data); //TMW - case 0x212f: return mmio_w212f(data); //TSW - case 0x2130: return mmio_w2130(data); //CGWSEL - case 0x2131: return mmio_w2131(data); //CGADDSUB - case 0x2132: return mmio_w2132(data); //COLDATA - case 0x2133: return mmio_w2133(data); //SETINI + case 0x2100: return mmio_w2100(data); //INIDISP + case 0x2101: return mmio_w2101(data); //OBSEL + case 0x2102: return mmio_w2102(data); //OAMADDL + case 0x2103: return mmio_w2103(data); //OAMADDH + case 0x2104: return mmio_w2104(data); //OAMDATA + case 0x2105: return mmio_w2105(data); //BGMODE + case 0x2106: return mmio_w2106(data); //MOSAIC + case 0x2107: return mmio_w2107(data); //BG1SC + case 0x2108: return mmio_w2108(data); //BG2SC + case 0x2109: return mmio_w2109(data); //BG3SC + case 0x210a: return mmio_w210a(data); //BG4SC + case 0x210b: return mmio_w210b(data); //BG12NBA + case 0x210c: return mmio_w210c(data); //BG34NBA + case 0x210d: return mmio_w210d(data); //BG1HOFS + case 0x210e: return mmio_w210e(data); //BG1VOFS + case 0x210f: return mmio_w210f(data); //BG2HOFS + case 0x2110: return mmio_w2110(data); //BG2VOFS + case 0x2111: return mmio_w2111(data); //BG3HOFS + case 0x2112: return mmio_w2112(data); //BG3VOFS + case 0x2113: return mmio_w2113(data); //BG4HOFS + case 0x2114: return mmio_w2114(data); //BG4VOFS + case 0x2115: return mmio_w2115(data); //VMAIN + case 0x2116: return mmio_w2116(data); //VMADDL + case 0x2117: return mmio_w2117(data); //VMADDH + case 0x2118: return mmio_w2118(data); //VMDATAL + case 0x2119: return mmio_w2119(data); //VMDATAH + case 0x211a: return mmio_w211a(data); //M7SEL + case 0x211b: return mmio_w211b(data); //M7A + case 0x211c: return mmio_w211c(data); //M7B + case 0x211d: return mmio_w211d(data); //M7C + case 0x211e: return mmio_w211e(data); //M7D + case 0x211f: return mmio_w211f(data); //M7X + case 0x2120: return mmio_w2120(data); //M7Y + case 0x2121: return mmio_w2121(data); //CGADD + case 0x2122: return mmio_w2122(data); //CGDATA + case 0x2123: return mmio_w2123(data); //W12SEL + case 0x2124: return mmio_w2124(data); //W34SEL + case 0x2125: return mmio_w2125(data); //WOBJSEL + case 0x2126: return mmio_w2126(data); //WH0 + case 0x2127: return mmio_w2127(data); //WH1 + case 0x2128: return mmio_w2128(data); //WH2 + case 0x2129: return mmio_w2129(data); //WH3 + case 0x212a: return mmio_w212a(data); //WBGLOG + case 0x212b: return mmio_w212b(data); //WOBJLOG + case 0x212c: return mmio_w212c(data); //TM + case 0x212d: return mmio_w212d(data); //TS + case 0x212e: return mmio_w212e(data); //TMW + case 0x212f: return mmio_w212f(data); //TSW + case 0x2130: return mmio_w2130(data); //CGWSEL + case 0x2131: return mmio_w2131(data); //CGADDSUB + case 0x2132: return mmio_w2132(data); //COLDATA + case 0x2133: return mmio_w2133(data); //SETINI } } diff --git a/higan/sfc/alt/ppu-balanced/ppu.cpp b/higan/sfc/alt/ppu-balanced/ppu.cpp index a98b862a..d7059ae0 100644 --- a/higan/sfc/alt/ppu-balanced/ppu.cpp +++ b/higan/sfc/alt/ppu-balanced/ppu.cpp @@ -118,8 +118,8 @@ void PPU::frame() { } void PPU::enable() { - function reader = { &PPU::mmio_read, (PPU*)&ppu }; - function writer = { &PPU::mmio_write, (PPU*)&ppu }; + function reader = {&PPU::mmio_read, (PPU*)&ppu}; + function writer = {&PPU::mmio_write, (PPU*)&ppu}; bus.map(reader, writer, 0x00, 0x3f, 0x2100, 0x213f); bus.map(reader, writer, 0x80, 0xbf, 0x2100, 0x213f); @@ -129,9 +129,9 @@ void PPU::power() { ppu1_version = config.ppu1.version; ppu2_version = config.ppu2.version; - for(auto &n : vram) n = 0x00; - for(auto &n : oam) n = 0x00; - for(auto &n : cgram) n = 0x00; + for(auto& n : vram) n = 0x00; + for(auto& n : oam) n = 0x00; + for(auto& n : cgram) n = 0x00; flush_tiledata_cache(); region = (system.region() == System::Region::NTSC ? 0 : 1); //0 = NTSC, 1 = PAL @@ -373,18 +373,18 @@ void PPU::reset() { void PPU::layer_enable(unsigned layer, unsigned priority, bool enable) { switch(layer * 4 + priority) { - case 0: layer_enabled[BG1][0] = enable; break; - case 1: layer_enabled[BG1][1] = enable; break; - case 4: layer_enabled[BG2][0] = enable; break; - case 5: layer_enabled[BG2][1] = enable; break; - case 8: layer_enabled[BG3][0] = enable; break; - case 9: layer_enabled[BG3][1] = enable; break; - case 12: layer_enabled[BG4][0] = enable; break; - case 13: layer_enabled[BG4][1] = enable; break; - case 16: layer_enabled[OAM][0] = enable; break; - case 17: layer_enabled[OAM][1] = enable; break; - case 18: layer_enabled[OAM][2] = enable; break; - case 19: layer_enabled[OAM][3] = enable; break; + case 0: layer_enabled[BG1][0] = enable; break; + case 1: layer_enabled[BG1][1] = enable; break; + case 4: layer_enabled[BG2][0] = enable; break; + case 5: layer_enabled[BG2][1] = enable; break; + case 8: layer_enabled[BG3][0] = enable; break; + case 9: layer_enabled[BG3][1] = enable; break; + case 12: layer_enabled[BG4][0] = enable; break; + case 13: layer_enabled[BG4][1] = enable; break; + case 16: layer_enabled[OAM][0] = enable; break; + case 17: layer_enabled[OAM][1] = enable; break; + case 18: layer_enabled[OAM][2] = enable; break; + case 19: layer_enabled[OAM][3] = enable; break; } } diff --git a/higan/sfc/alt/ppu-balanced/ppu.hpp b/higan/sfc/alt/ppu-balanced/ppu.hpp index de8152e9..46d8674e 100644 --- a/higan/sfc/alt/ppu-balanced/ppu.hpp +++ b/higan/sfc/alt/ppu-balanced/ppu.hpp @@ -11,8 +11,8 @@ struct PPU : Thread, public PPUcounter { #include "mmio/mmio.hpp" #include "render/render.hpp" - uint32 *surface; - uint32 *output; + uint32* surface; + uint32* output; uint8 ppu1_version; uint8 ppu2_version; diff --git a/higan/sfc/alt/ppu-balanced/render/bg.cpp b/higan/sfc/alt/ppu-balanced/render/bg.cpp index 6793d747..f7a5a1d6 100644 --- a/higan/sfc/alt/ppu-balanced/render/bg.cpp +++ b/higan/sfc/alt/ppu-balanced/render/bg.cpp @@ -97,14 +97,14 @@ void PPU::render_line_bg(uint8 pri0_pos, uint8 pri1_pos) { uint16 hoffset, voffset, opt_x, col; bool mirror_x, mirror_y; - const uint8 *tile_ptr; - const uint16 *mtable = mosaic_table[regs.mosaic_enabled[bg] ? regs.mosaic_size : 0]; - const bool is_opt_mode = (mode == 2 || mode == 4 || mode == 6); - const bool is_direct_color_mode = (regs.direct_color == true && bg == BG1 && (mode == 3 || mode == 4)); + const uint8* tile_ptr; + const uint16* mtable = mosaic_table[regs.mosaic_enabled[bg] ? regs.mosaic_size : 0]; + const bool is_opt_mode = (mode == 2 || mode == 4 || mode == 6); + const bool is_direct_color_mode = (regs.direct_color == true && bg == BG1 && (mode == 3 || mode == 4)); build_window_tables(bg); - const uint8 *wt_main = window[bg].main; - const uint8 *wt_sub = window[bg].sub; + const uint8* wt_main = window[bg].main; + const uint8* wt_sub = window[bg].sub; uint16 prev_x = 0xffff, prev_y = 0xffff, prev_optx = 0xffff; for(uint16 x = 0; x < width; x++) { diff --git a/higan/sfc/alt/ppu-balanced/render/cache.cpp b/higan/sfc/alt/ppu-balanced/render/cache.cpp index 4e3b7be7..8e88b850 100644 --- a/higan/sfc/alt/ppu-balanced/render/cache.cpp +++ b/higan/sfc/alt/ppu-balanced/render/cache.cpp @@ -28,7 +28,7 @@ void PPU::render_bg_tile(uint16 tile_num) { uint8 col, d0, d1, d2, d3, d4, d5, d6, d7; if(color_depth == COLORDEPTH_4) { - uint8 *dest = (uint8*)bg_tiledata[TILE_2BIT] + tile_num * 64; + uint8* dest = (uint8*)bg_tiledata[TILE_2BIT] + tile_num * 64; unsigned pos = tile_num * 16; unsigned y = 8; while(y--) { @@ -48,7 +48,7 @@ void PPU::render_bg_tile(uint16 tile_num) { } if(color_depth == COLORDEPTH_16) { - uint8 *dest = (uint8*)bg_tiledata[TILE_4BIT] + tile_num * 64; + uint8* dest = (uint8*)bg_tiledata[TILE_4BIT] + tile_num * 64; unsigned pos = tile_num * 32; unsigned y = 8; while(y--) { @@ -70,7 +70,7 @@ void PPU::render_bg_tile(uint16 tile_num) { } if(color_depth == COLORDEPTH_256) { - uint8 *dest = (uint8*)bg_tiledata[TILE_8BIT] + tile_num * 64; + uint8* dest = (uint8*)bg_tiledata[TILE_8BIT] + tile_num * 64; unsigned pos = tile_num * 64; unsigned y = 8; while(y--) { diff --git a/higan/sfc/alt/ppu-balanced/render/line.cpp b/higan/sfc/alt/ppu-balanced/render/line.cpp index 181174fc..03466fc1 100644 --- a/higan/sfc/alt/ppu-balanced/render/line.cpp +++ b/higan/sfc/alt/ppu-balanced/render/line.cpp @@ -15,9 +15,10 @@ inline uint16 PPU::get_direct_color(uint8 p, uint8 t) { } inline uint16 PPU::get_pixel_normal(uint32 x) { - pixel_t &p = pixel_cache[x]; + pixel_t& p = pixel_cache[x]; uint16 src_main, src_sub; - uint8 bg_sub; + uint8 bg_sub; + src_main = p.src_main; if(!regs.addsub_mode) { @@ -50,9 +51,10 @@ inline uint16 PPU::get_pixel_normal(uint32 x) { } inline uint16 PPU::get_pixel_swap(uint32 x) { - pixel_t &p = pixel_cache[x]; + pixel_t& p = pixel_cache[x]; uint16 src_main, src_sub; - uint8 bg_sub; + uint8 bg_sub; + src_main = p.src_sub; if(!regs.addsub_mode) { @@ -85,7 +87,7 @@ inline uint16 PPU::get_pixel_swap(uint32 x) { } inline void PPU::render_line_output() { - uint32 *ptr = (uint32*)output + (line * 1024) + ((interlace() && field()) ? 512 : 0); + uint32* ptr = (uint32*)output + (line * 1024) + ((interlace() && field()) ? 512 : 0); uint32 curr, prev; if(!regs.pseudo_hires && regs.bg_mode != 5 && regs.bg_mode != 6) { @@ -110,7 +112,7 @@ inline void PPU::render_line_output() { } inline void PPU::render_line_clear() { - uint32 *ptr = (uint32*)output + (line * 1024) + ((interlace() && field()) ? 512 : 0); + uint32* ptr = (uint32*)output + (line * 1024) + ((interlace() && field()) ? 512 : 0); unsigned width = (!regs.pseudo_hires && regs.bg_mode != 5 && regs.bg_mode != 6) ? 256 : 512; memset(ptr, 0, width * 2 * sizeof(uint32)); } diff --git a/higan/sfc/alt/ppu-balanced/render/mode7.cpp b/higan/sfc/alt/ppu-balanced/render/mode7.cpp index 747bafef..f3b5ba9b 100644 --- a/higan/sfc/alt/ppu-balanced/render/mode7.cpp +++ b/higan/sfc/alt/ppu-balanced/render/mode7.cpp @@ -38,12 +38,13 @@ void PPU::render_line_mode7(uint8 pri0_pos, uint8 pri1_pos) { bool _bgsub_enabled = regs.bgsub_enabled[bg]; build_window_tables(bg); - uint8 *wt_main = window[bg].main; - uint8 *wt_sub = window[bg].sub; + uint8* wt_main = window[bg].main; + uint8* wt_sub = window[bg].sub; int32 y = (regs.mode7_vflip == false ? line : 255 - line); - uint16 *mtable_x, *mtable_y; + uint16* mtable_x; + uint16* mtable_y; if(bg == BG1) { mtable_x = (uint16*)mosaic_table[(regs.mosaic_enabled[BG1] == true) ? regs.mosaic_size : 0]; mtable_y = (uint16*)mosaic_table[(regs.mosaic_enabled[BG1] == true) ? regs.mosaic_size : 0]; @@ -65,39 +66,39 @@ void PPU::render_line_mode7(uint8 pri0_pos, uint8 pri1_pos) { py >>= 8; switch(regs.mode7_repeat) { - case 0: //screen repetition outside of screen area - case 1: { //same as case 0 + case 0: //screen repetition outside of screen area + case 1: { //same as case 0 + px &= 1023; + py &= 1023; + tx = ((px >> 3) & 127); + ty = ((py >> 3) & 127); + tile = vram[(ty * 128 + tx) << 1]; + palette = vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1]; + } break; + case 2: { //palette color 0 outside of screen area + if((px | py) & ~1023) { + palette = 0; + } else { px &= 1023; py &= 1023; tx = ((px >> 3) & 127); ty = ((py >> 3) & 127); tile = vram[(ty * 128 + tx) << 1]; palette = vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1]; - } break; - case 2: { //palette color 0 outside of screen area - if((px | py) & ~1023) { - palette = 0; - } else { - px &= 1023; - py &= 1023; - tx = ((px >> 3) & 127); - ty = ((py >> 3) & 127); - tile = vram[(ty * 128 + tx) << 1]; - palette = vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1]; - } - } break; - case 3: { //character 0 repetition outside of screen area - if((px | py) & ~1023) { - tile = 0; - } else { - px &= 1023; - py &= 1023; - tx = ((px >> 3) & 127); - ty = ((py >> 3) & 127); - tile = vram[(ty * 128 + tx) << 1]; - } - palette = vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1]; - } break; + } + } break; + case 3: { //character 0 repetition outside of screen area + if((px | py) & ~1023) { + tile = 0; + } else { + px &= 1023; + py &= 1023; + tx = ((px >> 3) & 127); + ty = ((py >> 3) & 127); + tile = vram[(ty * 128 + tx) << 1]; + } + palette = vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1]; + } break; } if(bg == BG1) { diff --git a/higan/sfc/alt/ppu-balanced/render/oam.cpp b/higan/sfc/alt/ppu-balanced/render/oam.cpp index 42544a02..c7415271 100644 --- a/higan/sfc/alt/ppu-balanced/render/oam.cpp +++ b/higan/sfc/alt/ppu-balanced/render/oam.cpp @@ -34,33 +34,33 @@ void PPU::build_sprite_list() { const bool size = sprite_list[i].size; switch(cache.oam_basesize) { - case 0: sprite_list[i].width = (!size) ? 8 : 16; - sprite_list[i].height = (!size) ? 8 : 16; - break; - case 1: sprite_list[i].width = (!size) ? 8 : 32; - sprite_list[i].height = (!size) ? 8 : 32; - break; - case 2: sprite_list[i].width = (!size) ? 8 : 64; - sprite_list[i].height = (!size) ? 8 : 64; - break; - case 3: sprite_list[i].width = (!size) ? 16 : 32; - sprite_list[i].height = (!size) ? 16 : 32; - break; - case 4: sprite_list[i].width = (!size) ? 16 : 64; - sprite_list[i].height = (!size) ? 16 : 64; - break; - case 5: sprite_list[i].width = (!size) ? 32 : 64; - sprite_list[i].height = (!size) ? 32 : 64; - break; - case 6: sprite_list[i].width = (!size) ? 16 : 32; - sprite_list[i].height = (!size) ? 32 : 64; - if(regs.oam_interlace && !size) sprite_list[i].height = 16; - //32x64 height is not affected by oam_interlace setting - break; - case 7: sprite_list[i].width = (!size) ? 16 : 32; - sprite_list[i].height = (!size) ? 32 : 32; - if(regs.oam_interlace && !size) sprite_list[i].height = 16; - break; + case 0: sprite_list[i].width = (!size) ? 8 : 16; + sprite_list[i].height = (!size) ? 8 : 16; + break; + case 1: sprite_list[i].width = (!size) ? 8 : 32; + sprite_list[i].height = (!size) ? 8 : 32; + break; + case 2: sprite_list[i].width = (!size) ? 8 : 64; + sprite_list[i].height = (!size) ? 8 : 64; + break; + case 3: sprite_list[i].width = (!size) ? 16 : 32; + sprite_list[i].height = (!size) ? 16 : 32; + break; + case 4: sprite_list[i].width = (!size) ? 16 : 64; + sprite_list[i].height = (!size) ? 16 : 64; + break; + case 5: sprite_list[i].width = (!size) ? 32 : 64; + sprite_list[i].height = (!size) ? 32 : 64; + break; + case 6: sprite_list[i].width = (!size) ? 16 : 32; + sprite_list[i].height = (!size) ? 32 : 64; + if(regs.oam_interlace && !size) sprite_list[i].height = 16; + //32x64 height is not affected by oam_interlace setting + break; + case 7: sprite_list[i].width = (!size) ? 16 : 32; + sprite_list[i].height = (!size) ? 32 : 32; + if(regs.oam_interlace && !size) sprite_list[i].height = 16; + break; } } } @@ -68,7 +68,7 @@ void PPU::build_sprite_list() { bool PPU::is_sprite_on_scanline() { //if sprite is entirely offscreen and doesn't wrap around to the left side of the screen, //then it is not counted. this *should* be 256, and not 255, even though dot 256 is offscreen. - sprite_item *spr = &sprite_list[active_sprite]; + sprite_item* spr = &sprite_list[active_sprite]; if(spr->x > 256 && (spr->x + spr->width - 1) < 512) return false; int spr_height = (regs.oam_interlace == false) ? (spr->height) : (spr->height >> 1); @@ -78,7 +78,7 @@ bool PPU::is_sprite_on_scanline() { } void PPU::load_oam_tiles() { - sprite_item *spr = &sprite_list[active_sprite]; + sprite_item* spr = &sprite_list[active_sprite]; uint16 tile_width = spr->width >> 3; int x = spr->x; int y = (line - spr->y) & 0xff; @@ -131,16 +131,16 @@ void PPU::load_oam_tiles() { } void PPU::render_oam_tile(int tile_num) { - oam_tileitem *t = &oam_tilelist[tile_num]; - uint8 *oam_td = (uint8*)bg_tiledata[COLORDEPTH_16]; - uint8 *oam_td_state = (uint8*)bg_tiledata_state[COLORDEPTH_16]; + oam_tileitem* t = &oam_tilelist[tile_num]; + uint8* oam_td = (uint8*)bg_tiledata[COLORDEPTH_16]; + uint8* oam_td_state = (uint8*)bg_tiledata_state[COLORDEPTH_16]; if(oam_td_state[t->tile] == 1) { render_bg_tile(t->tile); } unsigned sx = t->x; - uint8 *tile_ptr = (uint8*)oam_td + (t->tile << 6) + ((t->y & 7) << 3); + uint8* tile_ptr = (uint8*)oam_td + (t->tile << 6) + ((t->y & 7) << 3); for(unsigned x = 0; x < 8; x++) { sx &= 511; if(sx < 256) { @@ -218,8 +218,8 @@ void PPU::render_line_oam(uint8 pri0_pos, uint8 pri1_pos, uint8 pri2_pos, uint8 bool bgsub_enabled = regs.bgsub_enabled[OAM]; build_window_tables(OAM); - uint8 *wt_main = window[OAM].main; - uint8 *wt_sub = window[OAM].sub; + uint8* wt_main = window[OAM].main; + uint8* wt_sub = window[OAM].sub; unsigned pri_tbl[4] = { pri0_pos, pri1_pos, pri2_pos, pri3_pos }; for(int x = 0; x < 256; x++) { diff --git a/higan/sfc/alt/ppu-balanced/render/render.cpp b/higan/sfc/alt/ppu-balanced/render/render.cpp index c185fa0a..5d558e1b 100644 --- a/higan/sfc/alt/ppu-balanced/render/render.cpp +++ b/higan/sfc/alt/ppu-balanced/render/render.cpp @@ -113,14 +113,14 @@ void PPU::render_line() { update_bg_info(); switch(regs.bg_mode) { - case 0: render_line_mode0(); break; - case 1: render_line_mode1(); break; - case 2: render_line_mode2(); break; - case 3: render_line_mode3(); break; - case 4: render_line_mode4(); break; - case 5: render_line_mode5(); break; - case 6: render_line_mode6(); break; - case 7: render_line_mode7(); break; + case 0: render_line_mode0(); break; + case 1: render_line_mode1(); break; + case 2: render_line_mode2(); break; + case 3: render_line_mode3(); break; + case 4: render_line_mode4(); break; + case 5: render_line_mode5(); break; + case 6: render_line_mode6(); break; + case 7: render_line_mode7(); break; } render_line_output(); diff --git a/higan/sfc/alt/ppu-balanced/render/render.hpp b/higan/sfc/alt/ppu-balanced/render/render.hpp index 91438009..9f7545d5 100644 --- a/higan/sfc/alt/ppu-balanced/render/render.hpp +++ b/higan/sfc/alt/ppu-balanced/render/render.hpp @@ -25,8 +25,8 @@ struct pixel_t { uint8 pri_main, pri_sub; } pixel_cache[256]; -uint8 *bg_tiledata[3]; -uint8 *bg_tiledata_state[3]; //0 = valid, 1 = dirty +uint8* bg_tiledata[3]; +uint8* bg_tiledata_state[3]; //0 = valid, 1 = dirty template void render_bg_tile(uint16 tile_num); inline void flush_pixel_cache(); diff --git a/higan/sfc/alt/ppu-balanced/render/windows.cpp b/higan/sfc/alt/ppu-balanced/render/windows.cpp index d8b4fd1a..79e1347e 100644 --- a/higan/sfc/alt/ppu-balanced/render/windows.cpp +++ b/higan/sfc/alt/ppu-balanced/render/windows.cpp @@ -3,7 +3,7 @@ //screen: 0 = main, 1 = sub void PPU::build_window_table(uint8 bg, bool screen) { bool set = 1, clr = 0; - uint8 *table = (screen == 0 ? window[bg].main : window[bg].sub); + uint8* table = (screen == 0 ? window[bg].main : window[bg].sub); if(bg != COL) { if(screen == 0 && regs.window_enabled[bg] == false) { @@ -16,10 +16,10 @@ void PPU::build_window_table(uint8 bg, bool screen) { } } else { switch(screen == 0 ? regs.color_mask : regs.colorsub_mask) { - case 0: memset(table, 1, 256); return; //always - case 3: memset(table, 0, 256); return; //never - case 1: set = 1, clr = 0; break; //inside window only - case 2: set = 0, clr = 1; break; //outside window only + case 0: memset(table, 1, 256); return; //always + case 3: memset(table, 0, 256); return; //never + case 1: set = 1, clr = 0; break; //inside window only + case 2: set = 0, clr = 1; break; //outside window only } } @@ -54,10 +54,10 @@ void PPU::build_window_table(uint8 bg, bool screen) { bool w2_mask = (x >= window2_left && x <= window2_right) ^ regs.window2_invert[bg]; switch(regs.window_mask[bg]) { - case 0: table[x] = (w1_mask | w2_mask) == 1 ? set : clr; break; //or - case 1: table[x] = (w1_mask & w2_mask) == 1 ? set : clr; break; //and - case 2: table[x] = (w1_mask ^ w2_mask) == 1 ? set : clr; break; //xor - case 3: table[x] = (w1_mask ^ w2_mask) == 0 ? set : clr; break; //xnor + case 0: table[x] = (w1_mask | w2_mask) == 1 ? set : clr; break; //or + case 1: table[x] = (w1_mask & w2_mask) == 1 ? set : clr; break; //and + case 2: table[x] = (w1_mask ^ w2_mask) == 1 ? set : clr; break; //xor + case 3: table[x] = (w1_mask ^ w2_mask) == 0 ? set : clr; break; //xnor } } } diff --git a/higan/sfc/alt/ppu-balanced/serialization.cpp b/higan/sfc/alt/ppu-balanced/serialization.cpp index f2af4a9c..282fd65e 100644 --- a/higan/sfc/alt/ppu-balanced/serialization.cpp +++ b/higan/sfc/alt/ppu-balanced/serialization.cpp @@ -1,6 +1,6 @@ #ifdef PPU_CPP -void PPUcounter::serialize(serializer &s) { +void PPUcounter::serialize(serializer& s) { s.integer(status.interlace); s.integer(status.field); s.integer(status.vcounter); @@ -12,7 +12,7 @@ void PPUcounter::serialize(serializer &s) { s.integer(history.index); } -void PPU::serialize(serializer &s) { +void PPU::serialize(serializer& s) { Thread::serialize(s); PPUcounter::serialize(s); diff --git a/higan/sfc/alt/ppu-performance/background/background.cpp b/higan/sfc/alt/ppu-performance/background/background.cpp index 29c70aaf..a177542c 100755 --- a/higan/sfc/alt/ppu-performance/background/background.cpp +++ b/higan/sfc/alt/ppu-performance/background/background.cpp @@ -14,7 +14,7 @@ unsigned PPU::Background::get_tile(unsigned hoffset, unsigned voffset) { return (ppu.vram[tiledata_addr + 0] << 0) + (ppu.vram[tiledata_addr + 1] << 8); } -void PPU::Background::offset_per_tile(unsigned x, unsigned y, unsigned &hoffset, unsigned &voffset) { +void PPU::Background::offset_per_tile(unsigned x, unsigned y, unsigned& hoffset, unsigned& voffset) { unsigned opt_x = (x + (hscroll & 7)), hval, vval; if(opt_x >= 8) { hval = self.bg3.get_tile((opt_x - 8) + (self.bg3.regs.hoffset & ~7), self.bg3.regs.voffset + 0); @@ -129,7 +129,7 @@ void PPU::Background::render() { if(mirror_y) voffset ^= 7; unsigned mirror_xmask = !mirror_x ? 0 : 7; - uint8 *tiledata = self.cache.tile(regs.mode, tile_num); + uint8* tiledata = self.cache.tile(regs.mode, tile_num); tiledata += ((voffset & 7) * 8); for(unsigned n = 0; n < 8; n++, x++) { @@ -161,7 +161,7 @@ void PPU::Background::render() { } } -PPU::Background::Background(PPU &self, unsigned id) : self(self), id(id) { +PPU::Background::Background(PPU& self, unsigned id) : self(self), id(id) { priority0_enable = true; priority1_enable = true; diff --git a/higan/sfc/alt/ppu-performance/background/background.hpp b/higan/sfc/alt/ppu-performance/background/background.hpp index 04facf00..926ab0a6 100755 --- a/higan/sfc/alt/ppu-performance/background/background.hpp +++ b/higan/sfc/alt/ppu-performance/background/background.hpp @@ -52,15 +52,15 @@ class Background { LayerWindow window; alwaysinline unsigned get_tile(unsigned hoffset, unsigned voffset); - void offset_per_tile(unsigned x, unsigned y, unsigned &hoffset, unsigned &voffset); + void offset_per_tile(unsigned x, unsigned y, unsigned& hoffset, unsigned& voffset); void scanline(); void render(); void render_mode7(); void serialize(serializer&); - Background(PPU &self, unsigned id); + Background(PPU& self, unsigned id); ~Background(); - PPU &self; + PPU& self; friend class PPU; }; diff --git a/higan/sfc/alt/ppu-performance/background/mode7.cpp b/higan/sfc/alt/ppu-performance/background/mode7.cpp index ef2b388c..762dd45b 100755 --- a/higan/sfc/alt/ppu-performance/background/mode7.cpp +++ b/higan/sfc/alt/ppu-performance/background/mode7.cpp @@ -18,7 +18,8 @@ void PPU::Background::render_mode7() { signed y = (self.regs.mode7_vflip == false ? self.vcounter() : 255 - self.vcounter()); - uint16 *mosaic_x, *mosaic_y; + uint16* mosaic_x; + uint16* mosaic_y; if(id == ID::BG1) { mosaic_x = mosaic_table[self.bg1.regs.mosaic]; mosaic_y = mosaic_table[self.bg1.regs.mosaic]; @@ -38,43 +39,43 @@ void PPU::Background::render_mode7() { py = (psy + (c * mosaic_x[x])) >> 8; switch(self.regs.mode7_repeat) { - case 0: case 1: { + case 0: case 1: { + px &= 1023; + py &= 1023; + tx = ((px >> 3) & 127); + ty = ((py >> 3) & 127); + tile = ppu.vram[(ty * 128 + tx) << 1]; + palette = ppu.vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1]; + break; + } + + case 2: { + if((px | py) & ~1023) { + palette = 0; + } else { px &= 1023; py &= 1023; tx = ((px >> 3) & 127); ty = ((py >> 3) & 127); tile = ppu.vram[(ty * 128 + tx) << 1]; palette = ppu.vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1]; - break; } + break; + } - case 2: { - if((px | py) & ~1023) { - palette = 0; - } else { - px &= 1023; - py &= 1023; - tx = ((px >> 3) & 127); - ty = ((py >> 3) & 127); - tile = ppu.vram[(ty * 128 + tx) << 1]; - palette = ppu.vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1]; - } - break; - } - - case 3: { - if((px | py) & ~1023) { - tile = 0; - } else { - px &= 1023; - py &= 1023; - tx = ((px >> 3) & 127); - ty = ((py >> 3) & 127); - tile = ppu.vram[(ty * 128 + tx) << 1]; - } - palette = ppu.vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1]; - break; + case 3: { + if((px | py) & ~1023) { + tile = 0; + } else { + px &= 1023; + py &= 1023; + tx = ((px >> 3) & 127); + ty = ((py >> 3) & 127); + tile = ppu.vram[(ty * 128 + tx) << 1]; } + palette = ppu.vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1]; + break; + } } unsigned priority; diff --git a/higan/sfc/alt/ppu-performance/cache/cache.cpp b/higan/sfc/alt/ppu-performance/cache/cache.cpp index e51fc1a6..ad587067 100755 --- a/higan/sfc/alt/ppu-performance/cache/cache.cpp +++ b/higan/sfc/alt/ppu-performance/cache/cache.cpp @@ -3,7 +3,7 @@ uint8* PPU::Cache::tile_2bpp(unsigned tile) { if(tilevalid[0][tile] == 0) { tilevalid[0][tile] = 1; - uint8 *output = (uint8*)tiledata[0] + (tile << 6); + uint8* output = (uint8*)tiledata[0] + (tile << 6); unsigned offset = tile << 4; unsigned y = 8; unsigned color, d0, d1; @@ -32,7 +32,7 @@ uint8* PPU::Cache::tile_2bpp(unsigned tile) { uint8* PPU::Cache::tile_4bpp(unsigned tile) { if(tilevalid[1][tile] == 0) { tilevalid[1][tile] = 1; - uint8 *output = (uint8*)tiledata[1] + (tile << 6); + uint8* output = (uint8*)tiledata[1] + (tile << 6); unsigned offset = tile << 5; unsigned y = 8; unsigned color, d0, d1, d2, d3; @@ -65,7 +65,7 @@ uint8* PPU::Cache::tile_4bpp(unsigned tile) { uint8* PPU::Cache::tile_8bpp(unsigned tile) { if(tilevalid[2][tile] == 0) { tilevalid[2][tile] = 1; - uint8 *output = (uint8*)tiledata[2] + (tile << 6); + uint8* output = (uint8*)tiledata[2] + (tile << 6); unsigned offset = tile << 6; unsigned y = 8; unsigned color, d0, d1, d2, d3, d4, d5, d6, d7; @@ -111,7 +111,7 @@ uint8* PPU::Cache::tile(unsigned bpp, unsigned tile) { } } -PPU::Cache::Cache(PPU &self) : self(self) { +PPU::Cache::Cache(PPU& self) : self(self) { tiledata[0] = new uint8[262144](); tiledata[1] = new uint8[131072](); tiledata[2] = new uint8[ 65536](); diff --git a/higan/sfc/alt/ppu-performance/cache/cache.hpp b/higan/sfc/alt/ppu-performance/cache/cache.hpp index b1f399fb..cc370c8b 100755 --- a/higan/sfc/alt/ppu-performance/cache/cache.hpp +++ b/higan/sfc/alt/ppu-performance/cache/cache.hpp @@ -1,7 +1,6 @@ -class Cache { -public: - uint8 *tiledata[3]; - uint8 *tilevalid[3]; +struct Cache { + uint8* tiledata[3]; + uint8* tilevalid[3]; uint8* tile_2bpp(unsigned tile); uint8* tile_4bpp(unsigned tile); @@ -9,8 +8,8 @@ public: uint8* tile(unsigned bpp, unsigned tile); void serialize(serializer&); - Cache(PPU &self); + Cache(PPU& self); - PPU &self; + PPU& self; friend class PPU; }; diff --git a/higan/sfc/alt/ppu-performance/mmio/mmio.cpp b/higan/sfc/alt/ppu-performance/mmio/mmio.cpp index 89416274..46244e23 100755 --- a/higan/sfc/alt/ppu-performance/mmio/mmio.cpp +++ b/higan/sfc/alt/ppu-performance/mmio/mmio.cpp @@ -13,10 +13,10 @@ bool PPU::hires() const { return regs.pseudo_hires || regs.bgmode == 5 || regs.b uint16 PPU::get_vram_addr() { uint16 addr = regs.vram_addr; switch(regs.vram_mapping) { - case 0: break; - case 1: addr = (addr & 0xff00) | ((addr & 0x001f) << 3) | ((addr >> 5) & 7); break; - case 2: addr = (addr & 0xfe00) | ((addr & 0x003f) << 3) | ((addr >> 6) & 7); break; - case 3: addr = (addr & 0xfc00) | ((addr & 0x007f) << 3) | ((addr >> 7) & 7); break; + case 0: break; + case 1: addr = (addr & 0xff00) | ((addr & 0x001f) << 3) | ((addr >> 5) & 7); break; + case 2: addr = (addr & 0xfe00) | ((addr & 0x003f) << 3) | ((addr >> 6) & 7); break; + case 3: addr = (addr & 0xfc00) | ((addr & 0x007f) << 3) | ((addr >> 7) & 7); break; } return (addr << 1); } @@ -61,99 +61,99 @@ void PPU::cgram_write(unsigned addr, uint8 data) { void PPU::mmio_update_video_mode() { switch(regs.bgmode) { - case 0: { - bg1.regs.mode = Background::Mode::BPP2; bg1.regs.priority0 = 8; bg1.regs.priority1 = 11; - bg2.regs.mode = Background::Mode::BPP2; bg2.regs.priority0 = 7; bg2.regs.priority1 = 10; - bg3.regs.mode = Background::Mode::BPP2; bg3.regs.priority0 = 2; bg3.regs.priority1 = 5; - bg4.regs.mode = Background::Mode::BPP2; bg4.regs.priority0 = 1; bg4.regs.priority1 = 4; - sprite.regs.priority0 = 3; sprite.regs.priority1 = 6; sprite.regs.priority2 = 9; sprite.regs.priority3 = 12; - } break; + case 0: { + bg1.regs.mode = Background::Mode::BPP2; bg1.regs.priority0 = 8; bg1.regs.priority1 = 11; + bg2.regs.mode = Background::Mode::BPP2; bg2.regs.priority0 = 7; bg2.regs.priority1 = 10; + bg3.regs.mode = Background::Mode::BPP2; bg3.regs.priority0 = 2; bg3.regs.priority1 = 5; + bg4.regs.mode = Background::Mode::BPP2; bg4.regs.priority0 = 1; bg4.regs.priority1 = 4; + sprite.regs.priority0 = 3; sprite.regs.priority1 = 6; sprite.regs.priority2 = 9; sprite.regs.priority3 = 12; + } break; - case 1: { - bg1.regs.mode = Background::Mode::BPP4; - bg2.regs.mode = Background::Mode::BPP4; - bg3.regs.mode = Background::Mode::BPP2; - bg4.regs.mode = Background::Mode::Inactive; - if(regs.bg3_priority) { - bg1.regs.priority0 = 5; bg1.regs.priority1 = 8; - bg2.regs.priority0 = 4; bg2.regs.priority1 = 7; - bg3.regs.priority0 = 1; bg3.regs.priority1 = 10; - sprite.regs.priority0 = 2; sprite.regs.priority1 = 3; sprite.regs.priority2 = 6; sprite.regs.priority3 = 9; - } else { - bg1.regs.priority0 = 6; bg1.regs.priority1 = 9; - bg2.regs.priority0 = 5; bg2.regs.priority1 = 8; - bg3.regs.priority0 = 1; bg3.regs.priority1 = 3; - sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 7; sprite.regs.priority3 = 10; - } - } break; + case 1: { + bg1.regs.mode = Background::Mode::BPP4; + bg2.regs.mode = Background::Mode::BPP4; + bg3.regs.mode = Background::Mode::BPP2; + bg4.regs.mode = Background::Mode::Inactive; + if(regs.bg3_priority) { + bg1.regs.priority0 = 5; bg1.regs.priority1 = 8; + bg2.regs.priority0 = 4; bg2.regs.priority1 = 7; + bg3.regs.priority0 = 1; bg3.regs.priority1 = 10; + sprite.regs.priority0 = 2; sprite.regs.priority1 = 3; sprite.regs.priority2 = 6; sprite.regs.priority3 = 9; + } else { + bg1.regs.priority0 = 6; bg1.regs.priority1 = 9; + bg2.regs.priority0 = 5; bg2.regs.priority1 = 8; + bg3.regs.priority0 = 1; bg3.regs.priority1 = 3; + sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 7; sprite.regs.priority3 = 10; + } + } break; - case 2: { - bg1.regs.mode = Background::Mode::BPP4; - bg2.regs.mode = Background::Mode::BPP4; - bg3.regs.mode = Background::Mode::Inactive; - bg4.regs.mode = Background::Mode::Inactive; - bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; - bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; - sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; - } break; + case 2: { + bg1.regs.mode = Background::Mode::BPP4; + bg2.regs.mode = Background::Mode::BPP4; + bg3.regs.mode = Background::Mode::Inactive; + bg4.regs.mode = Background::Mode::Inactive; + bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; + bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; + sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; + } break; - case 3: { - bg1.regs.mode = Background::Mode::BPP8; - bg2.regs.mode = Background::Mode::BPP4; - bg3.regs.mode = Background::Mode::Inactive; - bg4.regs.mode = Background::Mode::Inactive; - bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; - bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; - sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; - } break; + case 3: { + bg1.regs.mode = Background::Mode::BPP8; + bg2.regs.mode = Background::Mode::BPP4; + bg3.regs.mode = Background::Mode::Inactive; + bg4.regs.mode = Background::Mode::Inactive; + bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; + bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; + sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; + } break; - case 4: { - bg1.regs.mode = Background::Mode::BPP8; - bg2.regs.mode = Background::Mode::BPP2; - bg3.regs.mode = Background::Mode::Inactive; - bg4.regs.mode = Background::Mode::Inactive; - bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; - bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; - sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; - } break; + case 4: { + bg1.regs.mode = Background::Mode::BPP8; + bg2.regs.mode = Background::Mode::BPP2; + bg3.regs.mode = Background::Mode::Inactive; + bg4.regs.mode = Background::Mode::Inactive; + bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; + bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; + sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; + } break; - case 5: { - bg1.regs.mode = Background::Mode::BPP4; - bg2.regs.mode = Background::Mode::BPP2; - bg3.regs.mode = Background::Mode::Inactive; - bg4.regs.mode = Background::Mode::Inactive; - bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; - bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; - sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; - } break; + case 5: { + bg1.regs.mode = Background::Mode::BPP4; + bg2.regs.mode = Background::Mode::BPP2; + bg3.regs.mode = Background::Mode::Inactive; + bg4.regs.mode = Background::Mode::Inactive; + bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; + bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; + sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; + } break; - case 6: { - bg1.regs.mode = Background::Mode::BPP4; + case 6: { + bg1.regs.mode = Background::Mode::BPP4; + bg2.regs.mode = Background::Mode::Inactive; + bg3.regs.mode = Background::Mode::Inactive; + bg4.regs.mode = Background::Mode::Inactive; + bg1.regs.priority0 = 2; bg1.regs.priority1 = 5; + sprite.regs.priority0 = 1; sprite.regs.priority1 = 3; sprite.regs.priority2 = 4; sprite.regs.priority3 = 6; + } break; + + case 7: { + if(regs.mode7_extbg == false) { + bg1.regs.mode = Background::Mode::Mode7; bg2.regs.mode = Background::Mode::Inactive; bg3.regs.mode = Background::Mode::Inactive; bg4.regs.mode = Background::Mode::Inactive; - bg1.regs.priority0 = 2; bg1.regs.priority1 = 5; - sprite.regs.priority0 = 1; sprite.regs.priority1 = 3; sprite.regs.priority2 = 4; sprite.regs.priority3 = 6; - } break; - - case 7: { - if(regs.mode7_extbg == false) { - bg1.regs.mode = Background::Mode::Mode7; - bg2.regs.mode = Background::Mode::Inactive; - bg3.regs.mode = Background::Mode::Inactive; - bg4.regs.mode = Background::Mode::Inactive; - bg1.regs.priority0 = 2; bg1.regs.priority1 = 2; - sprite.regs.priority0 = 1; sprite.regs.priority1 = 3; sprite.regs.priority2 = 4; sprite.regs.priority3 = 5; - } else { - bg1.regs.mode = Background::Mode::Mode7; - bg2.regs.mode = Background::Mode::Mode7; - bg3.regs.mode = Background::Mode::Inactive; - bg4.regs.mode = Background::Mode::Inactive; - bg1.regs.priority0 = 3; bg1.regs.priority1 = 3; - bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; - sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 7; - } - } break; + bg1.regs.priority0 = 2; bg1.regs.priority1 = 2; + sprite.regs.priority0 = 1; sprite.regs.priority1 = 3; sprite.regs.priority2 = 4; sprite.regs.priority3 = 5; + } else { + bg1.regs.mode = Background::Mode::Mode7; + bg2.regs.mode = Background::Mode::Mode7; + bg3.regs.mode = Background::Mode::Inactive; + bg4.regs.mode = Background::Mode::Inactive; + bg1.regs.priority0 = 3; bg1.regs.priority1 = 3; + bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; + sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 7; + } + } break; } } @@ -161,118 +161,118 @@ uint8 PPU::mmio_read(unsigned addr) { cpu.synchronize_ppu(); switch(addr & 0xffff) { - case 0x2104: case 0x2105: case 0x2106: case 0x2108: case 0x2109: case 0x210a: - case 0x2114: case 0x2115: case 0x2116: case 0x2118: case 0x2119: case 0x211a: - case 0x2124: case 0x2125: case 0x2126: case 0x2128: case 0x2129: case 0x212a: { - return regs.ppu1_mdr; - } + case 0x2104: case 0x2105: case 0x2106: case 0x2108: case 0x2109: case 0x210a: + case 0x2114: case 0x2115: case 0x2116: case 0x2118: case 0x2119: case 0x211a: + case 0x2124: case 0x2125: case 0x2126: case 0x2128: case 0x2129: case 0x212a: { + return regs.ppu1_mdr; + } - case 0x2134: { //MPYL - unsigned result = ((int16)regs.m7a * (int8)(regs.m7b >> 8)); - regs.ppu1_mdr = result >> 0; - return regs.ppu1_mdr; - } + case 0x2134: { //MPYL + unsigned result = ((int16)regs.m7a * (int8)(regs.m7b >> 8)); + regs.ppu1_mdr = result >> 0; + return regs.ppu1_mdr; + } - case 0x2135: { //MPYM - unsigned result = ((int16)regs.m7a * (int8)(regs.m7b >> 8)); - regs.ppu1_mdr = result >> 8; - return regs.ppu1_mdr; - } + case 0x2135: { //MPYM + unsigned result = ((int16)regs.m7a * (int8)(regs.m7b >> 8)); + regs.ppu1_mdr = result >> 8; + return regs.ppu1_mdr; + } - case 0x2136: { //MPYH - unsigned result = ((int16)regs.m7a * (int8)(regs.m7b >> 8)); - regs.ppu1_mdr = result >> 16; - return regs.ppu1_mdr; - } + case 0x2136: { //MPYH + unsigned result = ((int16)regs.m7a * (int8)(regs.m7b >> 8)); + regs.ppu1_mdr = result >> 16; + return regs.ppu1_mdr; + } - case 0x2137: { //SLHV - if(cpu.pio() & 0x80) latch_counters(); - return cpu.regs.mdr; - } + case 0x2137: { //SLHV + if(cpu.pio() & 0x80) latch_counters(); + return cpu.regs.mdr; + } - case 0x2138: { //OAMDATAREAD - regs.ppu1_mdr = oam_read(regs.oam_addr); - regs.oam_addr = (regs.oam_addr + 1) & 0x03ff; - sprite.set_first(); - return regs.ppu1_mdr; - } + case 0x2138: { //OAMDATAREAD + regs.ppu1_mdr = oam_read(regs.oam_addr); + regs.oam_addr = (regs.oam_addr + 1) & 0x03ff; + sprite.set_first(); + return regs.ppu1_mdr; + } - case 0x2139: { //VMDATALREAD - regs.ppu1_mdr = regs.vram_readbuffer >> 0; - if(regs.vram_incmode == 0) { - uint16 addr = get_vram_addr(); - regs.vram_readbuffer = vram_read(addr + 0) << 0; - regs.vram_readbuffer |= vram_read(addr + 1) << 8; - regs.vram_addr += regs.vram_incsize; - } - return regs.ppu1_mdr; + case 0x2139: { //VMDATALREAD + regs.ppu1_mdr = regs.vram_readbuffer >> 0; + if(regs.vram_incmode == 0) { + uint16 addr = get_vram_addr(); + regs.vram_readbuffer = vram_read(addr + 0) << 0; + regs.vram_readbuffer |= vram_read(addr + 1) << 8; + regs.vram_addr += regs.vram_incsize; } + return regs.ppu1_mdr; + } - case 0x213a: { //VMDATAHREAD - regs.ppu1_mdr = regs.vram_readbuffer >> 8; - if(regs.vram_incmode == 1) { - uint16 addr = get_vram_addr(); - regs.vram_readbuffer = vram_read(addr + 0) << 0; - regs.vram_readbuffer |= vram_read(addr + 1) << 8; - regs.vram_addr += regs.vram_incsize; - } - return regs.ppu1_mdr; + case 0x213a: { //VMDATAHREAD + regs.ppu1_mdr = regs.vram_readbuffer >> 8; + if(regs.vram_incmode == 1) { + uint16 addr = get_vram_addr(); + regs.vram_readbuffer = vram_read(addr + 0) << 0; + regs.vram_readbuffer |= vram_read(addr + 1) << 8; + regs.vram_addr += regs.vram_incsize; } + return regs.ppu1_mdr; + } - case 0x213b: { //CGDATAREAD - if((regs.cgram_addr & 1) == 0) { - regs.ppu2_mdr = cgram_read(regs.cgram_addr); - } else { - regs.ppu2_mdr = (regs.ppu2_mdr & 0x80) | (cgram_read(regs.cgram_addr) & 0x7f); - } - regs.cgram_addr = (regs.cgram_addr + 1) & 0x01ff; - return regs.ppu2_mdr; + case 0x213b: { //CGDATAREAD + if((regs.cgram_addr & 1) == 0) { + regs.ppu2_mdr = cgram_read(regs.cgram_addr); + } else { + regs.ppu2_mdr = (regs.ppu2_mdr & 0x80) | (cgram_read(regs.cgram_addr) & 0x7f); } + regs.cgram_addr = (regs.cgram_addr + 1) & 0x01ff; + return regs.ppu2_mdr; + } - case 0x213c: { //OPHCT - if(regs.latch_hcounter == 0) { - regs.ppu2_mdr = regs.hcounter & 0xff; - } else { - regs.ppu2_mdr = (regs.ppu2_mdr & 0xfe) | (regs.hcounter >> 8); - } - regs.latch_hcounter ^= 1; - return regs.ppu2_mdr; + case 0x213c: { //OPHCT + if(regs.latch_hcounter == 0) { + regs.ppu2_mdr = regs.hcounter & 0xff; + } else { + regs.ppu2_mdr = (regs.ppu2_mdr & 0xfe) | (regs.hcounter >> 8); } + regs.latch_hcounter ^= 1; + return regs.ppu2_mdr; + } - case 0x213d: { //OPVCT - if(regs.latch_vcounter == 0) { - regs.ppu2_mdr = regs.vcounter & 0xff; - } else { - regs.ppu2_mdr = (regs.ppu2_mdr & 0xfe) | (regs.vcounter >> 8); - } - regs.latch_vcounter ^= 1; - return regs.ppu2_mdr; + case 0x213d: { //OPVCT + if(regs.latch_vcounter == 0) { + regs.ppu2_mdr = regs.vcounter & 0xff; + } else { + regs.ppu2_mdr = (regs.ppu2_mdr & 0xfe) | (regs.vcounter >> 8); } + regs.latch_vcounter ^= 1; + return regs.ppu2_mdr; + } - case 0x213e: { //STAT77 - regs.ppu1_mdr &= 0x10; - regs.ppu1_mdr |= sprite.regs.time_over << 7; - regs.ppu1_mdr |= sprite.regs.range_over << 6; - regs.ppu1_mdr |= 0x01; //version - return regs.ppu1_mdr; - } - - case 0x213f: { //STAT78 - regs.latch_hcounter = 0; - regs.latch_vcounter = 0; - - regs.ppu2_mdr &= 0x20; - regs.ppu2_mdr |= cpu.field() << 7; - if((cpu.pio() & 0x80) == 0) { - regs.ppu2_mdr |= 0x40; - } else if(regs.counters_latched) { - regs.ppu2_mdr |= 0x40; - regs.counters_latched = false; - } - regs.ppu2_mdr |= (system.region() == System::Region::NTSC ? 0 : 1) << 4; - regs.ppu2_mdr |= 0x03; //version - return regs.ppu2_mdr; + case 0x213e: { //STAT77 + regs.ppu1_mdr &= 0x10; + regs.ppu1_mdr |= sprite.regs.time_over << 7; + regs.ppu1_mdr |= sprite.regs.range_over << 6; + regs.ppu1_mdr |= 0x01; //version + return regs.ppu1_mdr; + } + + case 0x213f: { //STAT78 + regs.latch_hcounter = 0; + regs.latch_vcounter = 0; + + regs.ppu2_mdr &= 0x20; + regs.ppu2_mdr |= cpu.field() << 7; + if((cpu.pio() & 0x80) == 0) { + regs.ppu2_mdr |= 0x40; + } else if(regs.counters_latched) { + regs.ppu2_mdr |= 0x40; + regs.counters_latched = false; } + regs.ppu2_mdr |= (system.region() == System::Region::NTSC ? 0 : 1) << 4; + regs.ppu2_mdr |= 0x03; //version + return regs.ppu2_mdr; + } } return cpu.regs.mdr; @@ -282,401 +282,401 @@ void PPU::mmio_write(unsigned addr, uint8 data) { cpu.synchronize_ppu(); switch(addr & 0xffff) { - case 0x2100: { //INIDISP - if(regs.display_disable && cpu.vcounter() == display.height) sprite.address_reset(); - regs.display_disable = data & 0x80; - regs.display_brightness = data & 0x0f; - return; + case 0x2100: { //INIDISP + if(regs.display_disable && cpu.vcounter() == display.height) sprite.address_reset(); + regs.display_disable = data & 0x80; + regs.display_brightness = data & 0x0f; + return; + } + + case 0x2101: { //OBSEL + sprite.regs.base_size = (data >> 5) & 7; + sprite.regs.nameselect = (data >> 3) & 3; + sprite.regs.tiledata_addr = (data & 3) << 14; + sprite.list_valid = false; + return; + } + + case 0x2102: { //OAMADDL + regs.oam_baseaddr = (regs.oam_baseaddr & 0x0100) | (data << 0); + sprite.address_reset(); + return; + } + + case 0x2103: { //OAMADDH + regs.oam_priority = data & 0x80; + regs.oam_baseaddr = ((data & 1) << 8) | (regs.oam_baseaddr & 0x00ff); + sprite.address_reset(); + return; + } + + case 0x2104: { //OAMDATA + if((regs.oam_addr & 1) == 0) regs.oam_latchdata = data; + if(regs.oam_addr & 0x0200) { + oam_write(regs.oam_addr, data); + } else if((regs.oam_addr & 1) == 1) { + oam_write((regs.oam_addr & ~1) + 0, regs.oam_latchdata); + oam_write((regs.oam_addr & ~1) + 1, data); } + regs.oam_addr = (regs.oam_addr + 1) & 0x03ff; + sprite.set_first(); + return; + } - case 0x2101: { //OBSEL - sprite.regs.base_size = (data >> 5) & 7; - sprite.regs.nameselect = (data >> 3) & 3; - sprite.regs.tiledata_addr = (data & 3) << 14; - sprite.list_valid = false; - return; + case 0x2105: { //BGMODE + bg4.regs.tile_size = data & 0x80; + bg3.regs.tile_size = data & 0x40; + bg2.regs.tile_size = data & 0x20; + bg1.regs.tile_size = data & 0x10; + regs.bg3_priority = data & 0x08; + regs.bgmode = data & 0x07; + mmio_update_video_mode(); + return; + } + + case 0x2106: { //MOSAIC + unsigned mosaic_size = (data >> 4) & 15; + bg4.regs.mosaic = (data & 0x08 ? mosaic_size : 0); + bg3.regs.mosaic = (data & 0x04 ? mosaic_size : 0); + bg2.regs.mosaic = (data & 0x02 ? mosaic_size : 0); + bg1.regs.mosaic = (data & 0x01 ? mosaic_size : 0); + return; + } + + case 0x2107: { //BG1SC + bg1.regs.screen_addr = (data & 0x7c) << 9; + bg1.regs.screen_size = data & 3; + return; + } + + case 0x2108: { //BG2SC + bg2.regs.screen_addr = (data & 0x7c) << 9; + bg2.regs.screen_size = data & 3; + return; + } + + case 0x2109: { //BG3SC + bg3.regs.screen_addr = (data & 0x7c) << 9; + bg3.regs.screen_size = data & 3; + return; + } + + case 0x210a: { //BG4SC + bg4.regs.screen_addr = (data & 0x7c) << 9; + bg4.regs.screen_size = data & 3; + return; + } + + case 0x210b: { //BG12NBA + bg1.regs.tiledata_addr = (data & 0x07) << 13; + bg2.regs.tiledata_addr = (data & 0x70) << 9; + return; + } + + case 0x210c: { //BG34NBA + bg3.regs.tiledata_addr = (data & 0x07) << 13; + bg4.regs.tiledata_addr = (data & 0x70) << 9; + return; + } + + case 0x210d: { //BG1HOFS + regs.mode7_hoffset = (data << 8) | regs.mode7_latchdata; + regs.mode7_latchdata = data; + + bg1.regs.hoffset = (data << 8) | (regs.bgofs_latchdata & ~7) | ((bg1.regs.hoffset >> 8) & 7); + regs.bgofs_latchdata = data; + return; + } + + case 0x210e: { //BG1VOFS + regs.mode7_voffset = (data << 8) | regs.mode7_latchdata; + regs.mode7_latchdata = data; + + bg1.regs.voffset = (data << 8) | regs.bgofs_latchdata; + regs.bgofs_latchdata = data; + return; + } + + case 0x210f: { //BG2HOFS + bg2.regs.hoffset = (data << 8) | (regs.bgofs_latchdata & ~7) | ((bg2.regs.hoffset >> 8) & 7); + regs.bgofs_latchdata = data; + return; + } + + case 0x2110: { //BG2VOFS + bg2.regs.voffset = (data << 8) | regs.bgofs_latchdata; + regs.bgofs_latchdata = data; + return; + } + + case 0x2111: { //BG3HOFS + bg3.regs.hoffset = (data << 8) | (regs.bgofs_latchdata & ~7) | ((bg3.regs.hoffset >> 8) & 7); + regs.bgofs_latchdata = data; + return; + } + + case 0x2112: { //BG3VOFS + bg3.regs.voffset = (data << 8) | regs.bgofs_latchdata; + regs.bgofs_latchdata = data; + return; + } + + case 0x2113: { //BG4HOFS + bg4.regs.hoffset = (data << 8) | (regs.bgofs_latchdata & ~7) | ((bg4.regs.hoffset >> 8) & 7); + regs.bgofs_latchdata = data; + return; + } + + case 0x2114: { //BG4VOFS + bg4.regs.voffset = (data << 8) | regs.bgofs_latchdata; + regs.bgofs_latchdata = data; + return; + } + + case 0x2115: { //VMAIN + regs.vram_incmode = data & 0x80; + regs.vram_mapping = (data >> 2) & 3; + switch(data & 3) { + case 0: regs.vram_incsize = 1; break; + case 1: regs.vram_incsize = 32; break; + case 2: regs.vram_incsize = 128; break; + case 3: regs.vram_incsize = 128; break; } + return; + } - case 0x2102: { //OAMADDL - regs.oam_baseaddr = (regs.oam_baseaddr & 0x0100) | (data << 0); - sprite.address_reset(); - return; + case 0x2116: { //VMADDL + regs.vram_addr = (regs.vram_addr & 0xff00) | (data << 0); + uint16 addr = get_vram_addr(); + regs.vram_readbuffer = vram_read(addr + 0) << 0; + regs.vram_readbuffer |= vram_read(addr + 1) << 8; + return; + } + + case 0x2117: { //VMADDH + regs.vram_addr = (data << 8) | (regs.vram_addr & 0x00ff); + uint16 addr = get_vram_addr(); + regs.vram_readbuffer = vram_read(addr + 0) << 0; + regs.vram_readbuffer |= vram_read(addr + 1) << 8; + return; + } + + case 0x2118: { //VMDATAL + vram_write(get_vram_addr() + 0, data); + if(regs.vram_incmode == 0) regs.vram_addr += regs.vram_incsize; + return; + } + + case 0x2119: { //VMDATAH + vram_write(get_vram_addr() + 1, data); + if(regs.vram_incmode == 1) regs.vram_addr += regs.vram_incsize; + return; + } + + case 0x211a: { //M7SEL + regs.mode7_repeat = (data >> 6) & 3; + regs.mode7_vflip = data & 0x02; + regs.mode7_hflip = data & 0x01; + return; + } + + case 0x211b: { //M7A + regs.m7a = (data << 8) | regs.mode7_latchdata; + regs.mode7_latchdata = data; + return; + } + + case 0x211c: { //M7B + regs.m7b = (data << 8) | regs.mode7_latchdata; + regs.mode7_latchdata = data; + return; + } + + case 0x211d: { //M7C + regs.m7c = (data << 8) | regs.mode7_latchdata; + regs.mode7_latchdata = data; + return; + } + + case 0x211e: { //M7D + regs.m7d = (data << 8) | regs.mode7_latchdata; + regs.mode7_latchdata = data; + return; + } + + case 0x211f: { //M7X + regs.m7x = (data << 8) | regs.mode7_latchdata; + regs.mode7_latchdata = data; + return; + } + + case 0x2120: { //M7Y + regs.m7y = (data << 8) | regs.mode7_latchdata; + regs.mode7_latchdata = data; + return; + } + + case 0x2121: { //CGADD + regs.cgram_addr = data << 1; + return; + } + + case 0x2122: { //CGDATA + if((regs.cgram_addr & 1) == 0) { + regs.cgram_latchdata = data; + } else { + cgram_write((regs.cgram_addr & ~1) + 0, regs.cgram_latchdata); + cgram_write((regs.cgram_addr & ~1) + 1, data & 0x7f); } + regs.cgram_addr = (regs.cgram_addr + 1) & 0x01ff; + return; + } - case 0x2103: { //OAMADDH - regs.oam_priority = data & 0x80; - regs.oam_baseaddr = ((data & 1) << 8) | (regs.oam_baseaddr & 0x00ff); - sprite.address_reset(); - return; - } + case 0x2123: { //W12SEL + bg2.window.two_enable = data & 0x80; + bg2.window.two_invert = data & 0x40; + bg2.window.one_enable = data & 0x20; + bg2.window.one_invert = data & 0x10; + bg1.window.two_enable = data & 0x08; + bg1.window.two_invert = data & 0x04; + bg1.window.one_enable = data & 0x02; + bg1.window.one_invert = data & 0x01; + return; + } - case 0x2104: { //OAMDATA - if((regs.oam_addr & 1) == 0) regs.oam_latchdata = data; - if(regs.oam_addr & 0x0200) { - oam_write(regs.oam_addr, data); - } else if((regs.oam_addr & 1) == 1) { - oam_write((regs.oam_addr & ~1) + 0, regs.oam_latchdata); - oam_write((regs.oam_addr & ~1) + 1, data); - } - regs.oam_addr = (regs.oam_addr + 1) & 0x03ff; - sprite.set_first(); - return; - } + case 0x2124: { //W34SEL + bg4.window.two_enable = data & 0x80; + bg4.window.two_invert = data & 0x40; + bg4.window.one_enable = data & 0x20; + bg4.window.one_invert = data & 0x10; + bg3.window.two_enable = data & 0x08; + bg3.window.two_invert = data & 0x04; + bg3.window.one_enable = data & 0x02; + bg3.window.one_invert = data & 0x01; + return; + } - case 0x2105: { //BGMODE - bg4.regs.tile_size = data & 0x80; - bg3.regs.tile_size = data & 0x40; - bg2.regs.tile_size = data & 0x20; - bg1.regs.tile_size = data & 0x10; - regs.bg3_priority = data & 0x08; - regs.bgmode = data & 0x07; - mmio_update_video_mode(); - return; - } + case 0x2125: { //WOBJSEL + screen.window.two_enable = data & 0x80; + screen.window.two_invert = data & 0x40; + screen.window.one_enable = data & 0x20; + screen.window.one_invert = data & 0x10; + sprite.window.two_enable = data & 0x08; + sprite.window.two_invert = data & 0x04; + sprite.window.one_enable = data & 0x02; + sprite.window.one_invert = data & 0x01; + return; + } - case 0x2106: { //MOSAIC - unsigned mosaic_size = (data >> 4) & 15; - bg4.regs.mosaic = (data & 0x08 ? mosaic_size : 0); - bg3.regs.mosaic = (data & 0x04 ? mosaic_size : 0); - bg2.regs.mosaic = (data & 0x02 ? mosaic_size : 0); - bg1.regs.mosaic = (data & 0x01 ? mosaic_size : 0); - return; - } + case 0x2126: { //WH0 + regs.window_one_left = data; + return; + } - case 0x2107: { //BG1SC - bg1.regs.screen_addr = (data & 0x7c) << 9; - bg1.regs.screen_size = data & 3; - return; - } + case 0x2127: { //WH1 + regs.window_one_right = data; + return; + } - case 0x2108: { //BG2SC - bg2.regs.screen_addr = (data & 0x7c) << 9; - bg2.regs.screen_size = data & 3; - return; - } + case 0x2128: { //WH2 + regs.window_two_left = data; + return; + } - case 0x2109: { //BG3SC - bg3.regs.screen_addr = (data & 0x7c) << 9; - bg3.regs.screen_size = data & 3; - return; - } + case 0x2129: { //WH3 + regs.window_two_right = data; + return; + } - case 0x210a: { //BG4SC - bg4.regs.screen_addr = (data & 0x7c) << 9; - bg4.regs.screen_size = data & 3; - return; - } + case 0x212a: { //WBGLOG + bg4.window.mask = (data >> 6) & 3; + bg3.window.mask = (data >> 4) & 3; + bg2.window.mask = (data >> 2) & 3; + bg1.window.mask = (data >> 0) & 3; + return; + } - case 0x210b: { //BG12NBA - bg1.regs.tiledata_addr = (data & 0x07) << 13; - bg2.regs.tiledata_addr = (data & 0x70) << 9; - return; - } + case 0x212b: { //WOBJLOG + screen.window.mask = (data >> 2) & 3; + sprite.window.mask = (data >> 0) & 3; + return; + } - case 0x210c: { //BG34NBA - bg3.regs.tiledata_addr = (data & 0x07) << 13; - bg4.regs.tiledata_addr = (data & 0x70) << 9; - return; - } + case 0x212c: { //TM + sprite.regs.main_enable = data & 0x10; + bg4.regs.main_enable = data & 0x08; + bg3.regs.main_enable = data & 0x04; + bg2.regs.main_enable = data & 0x02; + bg1.regs.main_enable = data & 0x01; + return; + } - case 0x210d: { //BG1HOFS - regs.mode7_hoffset = (data << 8) | regs.mode7_latchdata; - regs.mode7_latchdata = data; + case 0x212d: { //TS + sprite.regs.sub_enable = data & 0x10; + bg4.regs.sub_enable = data & 0x08; + bg3.regs.sub_enable = data & 0x04; + bg2.regs.sub_enable = data & 0x02; + bg1.regs.sub_enable = data & 0x01; + return; + } - bg1.regs.hoffset = (data << 8) | (regs.bgofs_latchdata & ~7) | ((bg1.regs.hoffset >> 8) & 7); - regs.bgofs_latchdata = data; - return; - } + case 0x212e: { //TMW + sprite.window.main_enable = data & 0x10; + bg4.window.main_enable = data & 0x08; + bg3.window.main_enable = data & 0x04; + bg2.window.main_enable = data & 0x02; + bg1.window.main_enable = data & 0x01; + return; + } - case 0x210e: { //BG1VOFS - regs.mode7_voffset = (data << 8) | regs.mode7_latchdata; - regs.mode7_latchdata = data; + case 0x212f: { //TSW + sprite.window.sub_enable = data & 0x10; + bg4.window.sub_enable = data & 0x08; + bg3.window.sub_enable = data & 0x04; + bg2.window.sub_enable = data & 0x02; + bg1.window.sub_enable = data & 0x01; + return; + } - bg1.regs.voffset = (data << 8) | regs.bgofs_latchdata; - regs.bgofs_latchdata = data; - return; - } + case 0x2130: { //CGWSEL + screen.window.main_mask = (data >> 6) & 3; + screen.window.sub_mask = (data >> 4) & 3; + screen.regs.addsub_mode = data & 0x02; + screen.regs.direct_color = data & 0x01; + return; + } - case 0x210f: { //BG2HOFS - bg2.regs.hoffset = (data << 8) | (regs.bgofs_latchdata & ~7) | ((bg2.regs.hoffset >> 8) & 7); - regs.bgofs_latchdata = data; - return; - } + case 0x2131: { //CGADDSUB + screen.regs.color_mode = data & 0x80; + screen.regs.color_halve = data & 0x40; + screen.regs.color_enable[6] = data & 0x20; + screen.regs.color_enable[5] = data & 0x10; + screen.regs.color_enable[4] = data & 0x10; + screen.regs.color_enable[3] = data & 0x08; + screen.regs.color_enable[2] = data & 0x04; + screen.regs.color_enable[1] = data & 0x02; + screen.regs.color_enable[0] = data & 0x01; + return; + } - case 0x2110: { //BG2VOFS - bg2.regs.voffset = (data << 8) | regs.bgofs_latchdata; - regs.bgofs_latchdata = data; - return; - } + case 0x2132: { //COLDATA + if(data & 0x80) screen.regs.color_b = data & 0x1f; + if(data & 0x40) screen.regs.color_g = data & 0x1f; + if(data & 0x20) screen.regs.color_r = data & 0x1f; + screen.regs.color = (screen.regs.color_b << 10) | (screen.regs.color_g << 5) | (screen.regs.color_r << 0); + return; + } - case 0x2111: { //BG3HOFS - bg3.regs.hoffset = (data << 8) | (regs.bgofs_latchdata & ~7) | ((bg3.regs.hoffset >> 8) & 7); - regs.bgofs_latchdata = data; - return; - } - - case 0x2112: { //BG3VOFS - bg3.regs.voffset = (data << 8) | regs.bgofs_latchdata; - regs.bgofs_latchdata = data; - return; - } - - case 0x2113: { //BG4HOFS - bg4.regs.hoffset = (data << 8) | (regs.bgofs_latchdata & ~7) | ((bg4.regs.hoffset >> 8) & 7); - regs.bgofs_latchdata = data; - return; - } - - case 0x2114: { //BG4VOFS - bg4.regs.voffset = (data << 8) | regs.bgofs_latchdata; - regs.bgofs_latchdata = data; - return; - } - - case 0x2115: { //VMAIN - regs.vram_incmode = data & 0x80; - regs.vram_mapping = (data >> 2) & 3; - switch(data & 3) { - case 0: regs.vram_incsize = 1; break; - case 1: regs.vram_incsize = 32; break; - case 2: regs.vram_incsize = 128; break; - case 3: regs.vram_incsize = 128; break; - } - return; - } - - case 0x2116: { //VMADDL - regs.vram_addr = (regs.vram_addr & 0xff00) | (data << 0); - uint16 addr = get_vram_addr(); - regs.vram_readbuffer = vram_read(addr + 0) << 0; - regs.vram_readbuffer |= vram_read(addr + 1) << 8; - return; - } - - case 0x2117: { //VMADDH - regs.vram_addr = (data << 8) | (regs.vram_addr & 0x00ff); - uint16 addr = get_vram_addr(); - regs.vram_readbuffer = vram_read(addr + 0) << 0; - regs.vram_readbuffer |= vram_read(addr + 1) << 8; - return; - } - - case 0x2118: { //VMDATAL - vram_write(get_vram_addr() + 0, data); - if(regs.vram_incmode == 0) regs.vram_addr += regs.vram_incsize; - return; - } - - case 0x2119: { //VMDATAH - vram_write(get_vram_addr() + 1, data); - if(regs.vram_incmode == 1) regs.vram_addr += regs.vram_incsize; - return; - } - - case 0x211a: { //M7SEL - regs.mode7_repeat = (data >> 6) & 3; - regs.mode7_vflip = data & 0x02; - regs.mode7_hflip = data & 0x01; - return; - } - - case 0x211b: { //M7A - regs.m7a = (data << 8) | regs.mode7_latchdata; - regs.mode7_latchdata = data; - return; - } - - case 0x211c: { //M7B - regs.m7b = (data << 8) | regs.mode7_latchdata; - regs.mode7_latchdata = data; - return; - } - - case 0x211d: { //M7C - regs.m7c = (data << 8) | regs.mode7_latchdata; - regs.mode7_latchdata = data; - return; - } - - case 0x211e: { //M7D - regs.m7d = (data << 8) | regs.mode7_latchdata; - regs.mode7_latchdata = data; - return; - } - - case 0x211f: { //M7X - regs.m7x = (data << 8) | regs.mode7_latchdata; - regs.mode7_latchdata = data; - return; - } - - case 0x2120: { //M7Y - regs.m7y = (data << 8) | regs.mode7_latchdata; - regs.mode7_latchdata = data; - return; - } - - case 0x2121: { //CGADD - regs.cgram_addr = data << 1; - return; - } - - case 0x2122: { //CGDATA - if((regs.cgram_addr & 1) == 0) { - regs.cgram_latchdata = data; - } else { - cgram_write((regs.cgram_addr & ~1) + 0, regs.cgram_latchdata); - cgram_write((regs.cgram_addr & ~1) + 1, data & 0x7f); - } - regs.cgram_addr = (regs.cgram_addr + 1) & 0x01ff; - return; - } - - case 0x2123: { //W12SEL - bg2.window.two_enable = data & 0x80; - bg2.window.two_invert = data & 0x40; - bg2.window.one_enable = data & 0x20; - bg2.window.one_invert = data & 0x10; - bg1.window.two_enable = data & 0x08; - bg1.window.two_invert = data & 0x04; - bg1.window.one_enable = data & 0x02; - bg1.window.one_invert = data & 0x01; - return; - } - - case 0x2124: { //W34SEL - bg4.window.two_enable = data & 0x80; - bg4.window.two_invert = data & 0x40; - bg4.window.one_enable = data & 0x20; - bg4.window.one_invert = data & 0x10; - bg3.window.two_enable = data & 0x08; - bg3.window.two_invert = data & 0x04; - bg3.window.one_enable = data & 0x02; - bg3.window.one_invert = data & 0x01; - return; - } - - case 0x2125: { //WOBJSEL - screen.window.two_enable = data & 0x80; - screen.window.two_invert = data & 0x40; - screen.window.one_enable = data & 0x20; - screen.window.one_invert = data & 0x10; - sprite.window.two_enable = data & 0x08; - sprite.window.two_invert = data & 0x04; - sprite.window.one_enable = data & 0x02; - sprite.window.one_invert = data & 0x01; - return; - } - - case 0x2126: { //WH0 - regs.window_one_left = data; - return; - } - - case 0x2127: { //WH1 - regs.window_one_right = data; - return; - } - - case 0x2128: { //WH2 - regs.window_two_left = data; - return; - } - - case 0x2129: { //WH3 - regs.window_two_right = data; - return; - } - - case 0x212a: { //WBGLOG - bg4.window.mask = (data >> 6) & 3; - bg3.window.mask = (data >> 4) & 3; - bg2.window.mask = (data >> 2) & 3; - bg1.window.mask = (data >> 0) & 3; - return; - } - - case 0x212b: { //WOBJLOG - screen.window.mask = (data >> 2) & 3; - sprite.window.mask = (data >> 0) & 3; - return; - } - - case 0x212c: { //TM - sprite.regs.main_enable = data & 0x10; - bg4.regs.main_enable = data & 0x08; - bg3.regs.main_enable = data & 0x04; - bg2.regs.main_enable = data & 0x02; - bg1.regs.main_enable = data & 0x01; - return; - } - - case 0x212d: { //TS - sprite.regs.sub_enable = data & 0x10; - bg4.regs.sub_enable = data & 0x08; - bg3.regs.sub_enable = data & 0x04; - bg2.regs.sub_enable = data & 0x02; - bg1.regs.sub_enable = data & 0x01; - return; - } - - case 0x212e: { //TMW - sprite.window.main_enable = data & 0x10; - bg4.window.main_enable = data & 0x08; - bg3.window.main_enable = data & 0x04; - bg2.window.main_enable = data & 0x02; - bg1.window.main_enable = data & 0x01; - return; - } - - case 0x212f: { //TSW - sprite.window.sub_enable = data & 0x10; - bg4.window.sub_enable = data & 0x08; - bg3.window.sub_enable = data & 0x04; - bg2.window.sub_enable = data & 0x02; - bg1.window.sub_enable = data & 0x01; - return; - } - - case 0x2130: { //CGWSEL - screen.window.main_mask = (data >> 6) & 3; - screen.window.sub_mask = (data >> 4) & 3; - screen.regs.addsub_mode = data & 0x02; - screen.regs.direct_color = data & 0x01; - return; - } - - case 0x2131: { //CGADDSUB - screen.regs.color_mode = data & 0x80; - screen.regs.color_halve = data & 0x40; - screen.regs.color_enable[6] = data & 0x20; - screen.regs.color_enable[5] = data & 0x10; - screen.regs.color_enable[4] = data & 0x10; - screen.regs.color_enable[3] = data & 0x08; - screen.regs.color_enable[2] = data & 0x04; - screen.regs.color_enable[1] = data & 0x02; - screen.regs.color_enable[0] = data & 0x01; - return; - } - - case 0x2132: { //COLDATA - if(data & 0x80) screen.regs.color_b = data & 0x1f; - if(data & 0x40) screen.regs.color_g = data & 0x1f; - if(data & 0x20) screen.regs.color_r = data & 0x1f; - screen.regs.color = (screen.regs.color_b << 10) | (screen.regs.color_g << 5) | (screen.regs.color_r << 0); - return; - } - - case 0x2133: { //SETINI - regs.mode7_extbg = data & 0x40; - regs.pseudo_hires = data & 0x08; - regs.overscan = data & 0x04; - sprite.regs.interlace = data & 0x02; - regs.interlace = data & 0x01; - mmio_update_video_mode(); - sprite.list_valid = false; - return; - } + case 0x2133: { //SETINI + regs.mode7_extbg = data & 0x40; + regs.pseudo_hires = data & 0x08; + regs.overscan = data & 0x04; + sprite.regs.interlace = data & 0x02; + regs.interlace = data & 0x01; + mmio_update_video_mode(); + sprite.list_valid = false; + return; + } } } diff --git a/higan/sfc/alt/ppu-performance/ppu.cpp b/higan/sfc/alt/ppu-performance/ppu.cpp index c6bd0a3f..b598cc70 100755 --- a/higan/sfc/alt/ppu-performance/ppu.cpp +++ b/higan/sfc/alt/ppu-performance/ppu.cpp @@ -82,17 +82,17 @@ void PPU::frame() { } void PPU::enable() { - function reader = { &PPU::mmio_read, (PPU*)&ppu }; - function writer = { &PPU::mmio_write, (PPU*)&ppu }; + function reader = {&PPU::mmio_read, (PPU*)&ppu}; + function writer = {&PPU::mmio_write, (PPU*)&ppu}; bus.map(reader, writer, 0x00, 0x3f, 0x2100, 0x213f); bus.map(reader, writer, 0x80, 0xbf, 0x2100, 0x213f); } void PPU::power() { - for(auto &n : vram) n = 0; - for(auto &n : oam) n = 0; - for(auto &n : cgram) n = 0; + for(auto& n : vram) n = 0; + for(auto& n : oam) n = 0; + for(auto& n : cgram) n = 0; reset(); } @@ -107,18 +107,18 @@ void PPU::reset() { void PPU::layer_enable(unsigned layer, unsigned priority, bool enable) { switch(layer * 4 + priority) { - case 0: bg1.priority0_enable = enable; break; - case 1: bg1.priority1_enable = enable; break; - case 4: bg2.priority0_enable = enable; break; - case 5: bg2.priority1_enable = enable; break; - case 8: bg3.priority0_enable = enable; break; - case 9: bg3.priority1_enable = enable; break; - case 12: bg4.priority0_enable = enable; break; - case 13: bg4.priority1_enable = enable; break; - case 16: sprite.priority0_enable = enable; break; - case 17: sprite.priority1_enable = enable; break; - case 18: sprite.priority2_enable = enable; break; - case 19: sprite.priority3_enable = enable; break; + case 0: bg1.priority0_enable = enable; break; + case 1: bg1.priority1_enable = enable; break; + case 4: bg2.priority0_enable = enable; break; + case 5: bg2.priority1_enable = enable; break; + case 8: bg3.priority0_enable = enable; break; + case 9: bg3.priority1_enable = enable; break; + case 12: bg4.priority0_enable = enable; break; + case 13: bg4.priority1_enable = enable; break; + case 16: sprite.priority0_enable = enable; break; + case 17: sprite.priority1_enable = enable; break; + case 18: sprite.priority2_enable = enable; break; + case 19: sprite.priority3_enable = enable; break; } } diff --git a/higan/sfc/alt/ppu-performance/ppu.hpp b/higan/sfc/alt/ppu-performance/ppu.hpp index 16e9f403..b3427e29 100755 --- a/higan/sfc/alt/ppu-performance/ppu.hpp +++ b/higan/sfc/alt/ppu-performance/ppu.hpp @@ -27,8 +27,8 @@ struct PPU : Thread, public PPUcounter { ~PPU(); private: - uint32 *surface; - uint32 *output; + uint32* surface; + uint32* output; #include "mmio/mmio.hpp" #include "window/window.hpp" diff --git a/higan/sfc/alt/ppu-performance/screen/screen.cpp b/higan/sfc/alt/ppu-performance/screen/screen.cpp index 43185a4b..dd775b6d 100755 --- a/higan/sfc/alt/ppu-performance/screen/screen.cpp +++ b/higan/sfc/alt/ppu-performance/screen/screen.cpp @@ -55,7 +55,7 @@ void PPU::Screen::scanline() { } void PPU::Screen::render_black() { - uint32 *data = self.output + self.vcounter() * 1024; + uint32* data = self.output + self.vcounter() * 1024; if(self.interlace() && self.field()) data += 512; memset(data, 0, self.display.width << 2); } @@ -115,7 +115,7 @@ uint16 PPU::Screen::get_pixel_sub(unsigned x) { } void PPU::Screen::render() { - uint32 *data = self.output + self.vcounter() * 1024; + uint32* data = self.output + self.vcounter() * 1024; if(self.interlace() && self.field()) data += 512; if(!self.regs.pseudo_hires && self.regs.bgmode != 5 && self.regs.bgmode != 6) { @@ -130,7 +130,7 @@ void PPU::Screen::render() { } } -PPU::Screen::Screen(PPU &self) : self(self) { +PPU::Screen::Screen(PPU& self) : self(self) { } PPU::Screen::~Screen() { diff --git a/higan/sfc/alt/ppu-performance/screen/screen.hpp b/higan/sfc/alt/ppu-performance/screen/screen.hpp index e93d3cd4..2f87e811 100755 --- a/higan/sfc/alt/ppu-performance/screen/screen.hpp +++ b/higan/sfc/alt/ppu-performance/screen/screen.hpp @@ -36,9 +36,9 @@ class Screen { void render(); void serialize(serializer&); - Screen(PPU &self); + Screen(PPU& self); ~Screen(); - PPU &self; + PPU& self; friend class PPU; }; diff --git a/higan/sfc/alt/ppu-performance/serialization.cpp b/higan/sfc/alt/ppu-performance/serialization.cpp index 54388df4..ad6c5e35 100755 --- a/higan/sfc/alt/ppu-performance/serialization.cpp +++ b/higan/sfc/alt/ppu-performance/serialization.cpp @@ -1,6 +1,6 @@ #ifdef PPU_CPP -void PPUcounter::serialize(serializer &s) { +void PPUcounter::serialize(serializer& s) { s.integer(status.interlace); s.integer(status.field); s.integer(status.vcounter); @@ -12,7 +12,7 @@ void PPUcounter::serialize(serializer &s) { s.integer(history.index); } -void PPU::serialize(serializer &s) { +void PPU::serialize(serializer& s) { Thread::serialize(s); PPUcounter::serialize(s); @@ -94,7 +94,7 @@ void PPU::serialize(serializer &s) { s.integer(regs.vcounter); } -void PPU::Cache::serialize(serializer &s) { +void PPU::Cache::serialize(serializer& s) { //rather than save ~512KB worth of cached tiledata, invalidate it all for(unsigned i = 0; i < 4096; i++) tilevalid[0][i] = false; for(unsigned i = 0; i < 2048; i++) tilevalid[1][i] = false; @@ -140,7 +140,7 @@ void PPU::Background::serialize(serializer &s) { window.serialize(s); } -void PPU::Sprite::serialize(serializer &s) { +void PPU::Sprite::serialize(serializer& s) { s.integer(regs.priority0); s.integer(regs.priority1); s.integer(regs.priority2); @@ -190,7 +190,7 @@ void PPU::Sprite::serialize(serializer &s) { window.serialize(s); } -void PPU::Screen::serialize(serializer &s) { +void PPU::Screen::serialize(serializer& s) { s.integer(regs.addsub_mode); s.integer(regs.direct_color); @@ -216,7 +216,7 @@ void PPU::Screen::serialize(serializer &s) { window.serialize(s); } -void PPU::LayerWindow::serialize(serializer &s) { +void PPU::LayerWindow::serialize(serializer& s) { s.integer(one_enable); s.integer(one_invert); s.integer(two_enable); @@ -231,7 +231,7 @@ void PPU::LayerWindow::serialize(serializer &s) { s.array(sub); } -void PPU::ColorWindow::serialize(serializer &s) { +void PPU::ColorWindow::serialize(serializer& s) { s.integer(one_enable); s.integer(one_invert); s.integer(two_enable); diff --git a/higan/sfc/alt/ppu-performance/sprite/sprite.cpp b/higan/sfc/alt/ppu-performance/sprite/sprite.cpp index 222739cd..a42dc8bd 100755 --- a/higan/sfc/alt/ppu-performance/sprite/sprite.cpp +++ b/higan/sfc/alt/ppu-performance/sprite/sprite.cpp @@ -43,7 +43,7 @@ void PPU::Sprite::set_first() { } bool PPU::Sprite::on_scanline(unsigned sprite) { - auto &s = list[sprite]; + auto& s = list[sprite]; if(s.x > 256 && (s.x + s.width - 1) < 512) return false; signed height = (regs.interlace == false ? s.height : s.height >> 1); if(self.vcounter() >= s.y && self.vcounter() < (s.y + height)) return true; @@ -85,7 +85,7 @@ void PPU::Sprite::render() { for(signed i = 31; i >= 0; i--) { if(itemlist[i] == 0xff) continue; - auto &s = list[itemlist[i]]; + auto& s = list[itemlist[i]]; unsigned tile_width = s.width >> 3; signed x = s.x; signed y = (self.vcounter() - s.y) & 0xff; @@ -142,8 +142,8 @@ void PPU::Sprite::render() { for(unsigned i = 0; i < 34; i++) { if(tilelist[i].tile == 0xffff) continue; - auto &t = tilelist[i]; - uint8 *tiledata = self.cache.tile_4bpp(t.tile); + auto& t = tilelist[i]; + uint8* tiledata = self.cache.tile_4bpp(t.tile); tiledata += (t.y & 7) << 3; unsigned sx = t.x; for(unsigned x = 0; x < 8; x++) { @@ -180,7 +180,7 @@ void PPU::Sprite::render() { } } -PPU::Sprite::Sprite(PPU &self) : self(self) { +PPU::Sprite::Sprite(PPU& self) : self(self) { priority0_enable = true; priority1_enable = true; priority2_enable = true; diff --git a/higan/sfc/alt/ppu-performance/sprite/sprite.hpp b/higan/sfc/alt/ppu-performance/sprite/sprite.hpp index 06912d7e..0bfefbf6 100755 --- a/higan/sfc/alt/ppu-performance/sprite/sprite.hpp +++ b/higan/sfc/alt/ppu-performance/sprite/sprite.hpp @@ -64,8 +64,8 @@ class Sprite { void render(); void serialize(serializer&); - Sprite(PPU &self); + Sprite(PPU& self); - PPU &self; + PPU& self; friend class PPU; }; diff --git a/higan/sfc/alt/ppu-performance/window/window.cpp b/higan/sfc/alt/ppu-performance/window/window.cpp index 216ee7b1..94f9479c 100755 --- a/higan/sfc/alt/ppu-performance/window/window.cpp +++ b/higan/sfc/alt/ppu-performance/window/window.cpp @@ -1,7 +1,7 @@ #ifdef PPU_CPP void PPU::LayerWindow::render(bool screen) { - uint8 *output; + uint8* output; if(screen == 0) { output = main; if(main_enable == false) { @@ -41,10 +41,10 @@ void PPU::LayerWindow::render(bool screen) { bool one_mask = (x >= ppu.regs.window_one_left && x <= ppu.regs.window_one_right) ^ one_invert; bool two_mask = (x >= ppu.regs.window_two_left && x <= ppu.regs.window_two_right) ^ two_invert; switch(mask) { - case 0: output[x] = one_mask | two_mask == 1; break; - case 1: output[x] = one_mask & two_mask == 1; break; - case 2: output[x] = one_mask ^ two_mask == 1; break; - case 3: output[x] = one_mask ^ two_mask == 0; break; + case 0: output[x] = one_mask | two_mask == 1; break; + case 1: output[x] = one_mask & two_mask == 1; break; + case 2: output[x] = one_mask ^ two_mask == 1; break; + case 3: output[x] = one_mask ^ two_mask == 0; break; } } } @@ -52,14 +52,14 @@ void PPU::LayerWindow::render(bool screen) { // void PPU::ColorWindow::render(bool screen) { - uint8 *output = (screen == 0 ? main : sub); + uint8* output = (screen == 0 ? main : sub); bool set = 1, clr = 0; switch(screen == 0 ? main_mask : sub_mask) { - case 0: memset(output, 1, 256); return; //always - case 1: set = 1, clr = 0; break; //inside window only - case 2: set = 0, clr = 1; break; //outside window only - case 3: memset(output, 0, 256); return; //never + case 0: memset(output, 1, 256); return; //always + case 1: set = 1, clr = 0; break; //inside window only + case 2: set = 0, clr = 1; break; //outside window only + case 3: memset(output, 0, 256); return; //never } if(one_enable == false && two_enable == false) { diff --git a/higan/sfc/alt/ppu-performance/window/window.hpp b/higan/sfc/alt/ppu-performance/window/window.hpp index ee67dd5e..af2fb4d7 100755 --- a/higan/sfc/alt/ppu-performance/window/window.hpp +++ b/higan/sfc/alt/ppu-performance/window/window.hpp @@ -1,5 +1,4 @@ -class LayerWindow { -public: +struct LayerWindow { bool one_enable; bool one_invert; bool two_enable; @@ -17,8 +16,7 @@ public: void serialize(serializer&); }; -class ColorWindow { -public: +struct ColorWindow { bool one_enable; bool one_invert; bool two_enable; diff --git a/higan/sfc/alt/smp/core.cpp b/higan/sfc/alt/smp/core.cpp index 21bf5bf2..986b9586 100755 --- a/higan/sfc/alt/smp/core.cpp +++ b/higan/sfc/alt/smp/core.cpp @@ -46,22 +46,22 @@ void SMP::op_step() { opcode_number = op_readpc(); opcode_cycle++; } else switch(opcode_number) { - #include "core/opcycle_misc.cpp" - #include "core/opcycle_mov.cpp" - #include "core/opcycle_pc.cpp" - #include "core/opcycle_read.cpp" - #include "core/opcycle_rmw.cpp" + #include "core/opcycle_misc.cpp" + #include "core/opcycle_mov.cpp" + #include "core/opcycle_pc.cpp" + #include "core/opcycle_read.cpp" + #include "core/opcycle_rmw.cpp" } #else unsigned opcode = op_readpc(); switch(opcode) { - #include "core/op_misc.cpp" - #include "core/op_mov.cpp" - #include "core/op_pc.cpp" - #include "core/op_read.cpp" - #include "core/op_rmw.cpp" + #include "core/op_misc.cpp" + #include "core/op_mov.cpp" + #include "core/op_pc.cpp" + #include "core/op_read.cpp" + #include "core/op_rmw.cpp" } //TODO: untaken branches should consume less cycles diff --git a/higan/sfc/alt/smp/core/generate.cpp b/higan/sfc/alt/smp/core/generate.cpp index 77ab3ed2..24ca7e59 100755 --- a/higan/sfc/alt/smp/core/generate.cpp +++ b/higan/sfc/alt/smp/core/generate.cpp @@ -11,7 +11,7 @@ struct opcode_t { unsigned opcode; }; -void generate(const char *sourceFilename, const char *targetFilename) { +void generate(const char* sourceFilename, const char* targetFilename) { file fp; fp.open(targetFilename, file::mode::write); diff --git a/higan/sfc/alt/smp/disassembler.cpp b/higan/sfc/alt/smp/disassembler.cpp index fb76ae92..754a43ff 100755 --- a/higan/sfc/alt/smp/disassembler.cpp +++ b/higan/sfc/alt/smp/disassembler.cpp @@ -8,15 +8,16 @@ uint16 SMP::relb(int8 offset, int op_len) { return pc + offset; } -void SMP::disassemble_opcode(char *output, uint16 addr) { - char *s, t[512]; - uint8 op, op0, op1; +void SMP::disassemble_opcode(char* output, uint16 addr) { + char* s; + char t[512]; + uint8 op, op0, op1; uint16 opw, opdp0, opdp1; s = output; sprintf(s, "..%.4x ", addr); - op = disassemble_read(addr + 0); + op = disassemble_read(addr + 0); op0 = disassemble_read(addr + 1); op1 = disassemble_read(addr + 2); opw = (op0) | (op1 << 8); diff --git a/higan/sfc/alt/smp/smp.cpp b/higan/sfc/alt/smp/smp.cpp index d6f33d19..21c7e0ce 100755 --- a/higan/sfc/alt/smp/smp.cpp +++ b/higan/sfc/alt/smp/smp.cpp @@ -80,7 +80,7 @@ void SMP::reset() { timer0.stage3_ticks = timer1.stage3_ticks = timer2.stage3_ticks = 0; } -void SMP::serialize(serializer &s) { +void SMP::serialize(serializer& s) { Thread::serialize(s); s.array(apuram, 64 * 1024); @@ -139,7 +139,7 @@ void SMP::serialize(serializer &s) { SMP::SMP() { apuram = new uint8[64 * 1024]; - for(auto &byte : iplrom) byte = 0; + for(auto& byte : iplrom) byte = 0; } SMP::~SMP() { diff --git a/higan/sfc/alt/smp/smp.hpp b/higan/sfc/alt/smp/smp.hpp index afb66938..d97e8ae7 100755 --- a/higan/sfc/alt/smp/smp.hpp +++ b/higan/sfc/alt/smp/smp.hpp @@ -1,6 +1,6 @@ struct SMP : Thread { uint8 iplrom[64]; - uint8 *apuram; + uint8* apuram; enum : bool { Threaded = false }; alwaysinline void synchronize_cpu(); diff --git a/higan/sfc/base/satellaview/satellaview.cpp b/higan/sfc/base/satellaview/satellaview.cpp index 236b8ee4..947956f2 100644 --- a/higan/sfc/base/satellaview/satellaview.cpp +++ b/higan/sfc/base/satellaview/satellaview.cpp @@ -35,55 +35,55 @@ uint8 SatellaviewBaseUnit::read(unsigned addr) { addr &= 0xffff; switch(addr) { - case 0x2188: return regs.r2188; - case 0x2189: return regs.r2189; - case 0x218a: return regs.r218a; - case 0x218c: return regs.r218c; - case 0x218e: return regs.r218e; - case 0x218f: return regs.r218f; - case 0x2190: return regs.r2190; + case 0x2188: return regs.r2188; + case 0x2189: return regs.r2189; + case 0x218a: return regs.r218a; + case 0x218c: return regs.r218c; + case 0x218e: return regs.r218e; + case 0x218f: return regs.r218f; + case 0x2190: return regs.r2190; - case 0x2192: { - unsigned counter = regs.r2192_counter++; - if(regs.r2192_counter >= 18) regs.r2192_counter = 0; + case 0x2192: { + unsigned counter = regs.r2192_counter++; + if(regs.r2192_counter >= 18) regs.r2192_counter = 0; - if(counter == 0) { - time_t rawtime; - time(&rawtime); - tm *t = localtime(&rawtime); + if(counter == 0) { + time_t rawtime; + time(&rawtime); + tm* t = localtime(&rawtime); - regs.r2192_hour = t->tm_hour; - regs.r2192_minute = t->tm_min; - regs.r2192_second = t->tm_sec; - } + regs.r2192_hour = t->tm_hour; + regs.r2192_minute = t->tm_min; + regs.r2192_second = t->tm_sec; + } - switch(counter) { - case 0: return 0x00; //??? - case 1: return 0x00; //??? - case 2: return 0x00; //??? - case 3: return 0x00; //??? - case 4: return 0x00; //??? - case 5: return 0x01; - case 6: return 0x01; - case 7: return 0x00; - case 8: return 0x00; - case 9: return 0x00; - case 10: return regs.r2192_second; - case 11: return regs.r2192_minute; - case 12: return regs.r2192_hour; - case 13: return 0x00; //??? - case 14: return 0x00; //??? - case 15: return 0x00; //??? - case 16: return 0x00; //??? - case 17: return 0x00; //??? - } - } break; + switch(counter) { + case 0: return 0x00; //??? + case 1: return 0x00; //??? + case 2: return 0x00; //??? + case 3: return 0x00; //??? + case 4: return 0x00; //??? + case 5: return 0x01; + case 6: return 0x01; + case 7: return 0x00; + case 8: return 0x00; + case 9: return 0x00; + case 10: return regs.r2192_second; + case 11: return regs.r2192_minute; + case 12: return regs.r2192_hour; + case 13: return 0x00; //??? + case 14: return 0x00; //??? + case 15: return 0x00; //??? + case 16: return 0x00; //??? + case 17: return 0x00; //??? + } + } break; - case 0x2193: return regs.r2193 & ~0x0c; - case 0x2194: return regs.r2194; - case 0x2196: return regs.r2196; - case 0x2197: return regs.r2197; - case 0x2199: return regs.r2199; + case 0x2193: return regs.r2193 & ~0x0c; + case 0x2194: return regs.r2194; + case 0x2196: return regs.r2196; + case 0x2197: return regs.r2197; + case 0x2199: return regs.r2199; } return cpu.regs.mdr; @@ -93,60 +93,60 @@ void SatellaviewBaseUnit::write(unsigned addr, uint8 data) { addr &= 0xffff; switch(addr) { - case 0x2188: { - regs.r2188 = data; - } break; + case 0x2188: { + regs.r2188 = data; + } break; - case 0x2189: { - regs.r2189 = data; - } break; + case 0x2189: { + regs.r2189 = data; + } break; - case 0x218a: { - regs.r218a = data; - } break; + case 0x218a: { + regs.r218a = data; + } break; - case 0x218b: { - regs.r218b = data; - } break; + case 0x218b: { + regs.r218b = data; + } break; - case 0x218c: { - regs.r218c = data; - } break; + case 0x218c: { + regs.r218c = data; + } break; - case 0x218e: { - regs.r218e = data; - } break; + case 0x218e: { + regs.r218e = data; + } break; - case 0x218f: { - regs.r218e >>= 1; - regs.r218e = regs.r218f - regs.r218e; - regs.r218f >>= 1; - } break; + case 0x218f: { + regs.r218e >>= 1; + regs.r218e = regs.r218f - regs.r218e; + regs.r218f >>= 1; + } break; - case 0x2191: { - regs.r2191 = data; - regs.r2192_counter = 0; - } break; + case 0x2191: { + regs.r2191 = data; + regs.r2192_counter = 0; + } break; - case 0x2192: { - regs.r2190 = 0x80; - } break; + case 0x2192: { + regs.r2190 = 0x80; + } break; - case 0x2193: { - regs.r2193 = data; - } break; + case 0x2193: { + regs.r2193 = data; + } break; - case 0x2194: { - regs.r2194 = data; - } break; + case 0x2194: { + regs.r2194 = data; + } break; - case 0x2197: { - regs.r2197 = data; - } break; + case 0x2197: { + regs.r2197 = data; + } break; - case 0x2199: { - regs.r2199 = data; - } break; + case 0x2199: { + regs.r2199 = data; + } break; } } diff --git a/higan/sfc/cartridge/cartridge.cpp b/higan/sfc/cartridge/cartridge.cpp index ac784fd6..4a599991 100755 --- a/higan/sfc/cartridge/cartridge.cpp +++ b/higan/sfc/cartridge/cartridge.cpp @@ -84,7 +84,7 @@ void Cartridge::load() { sha256_final(&sha); sha256_hash(&sha, hash); string result; - for(auto &byte : hash) result.append(hex<2>(byte)); + for(auto& byte : hash) result.append(hex<2>(byte)); sha256 = result; } @@ -114,7 +114,7 @@ void Cartridge::load() { sha256_final(&sha); sha256_hash(&sha, hash); string result; - for(auto &byte : hash) result.append(hex<2>(byte)); + for(auto& byte : hash) result.append(hex<2>(byte)); sha256 = result; } diff --git a/higan/sfc/cartridge/markup.cpp b/higan/sfc/cartridge/markup.cpp index 9e904a61..6b3431be 100755 --- a/higan/sfc/cartridge/markup.cpp +++ b/higan/sfc/cartridge/markup.cpp @@ -1,6 +1,6 @@ #ifdef CARTRIDGE_CPP -void Cartridge::parse_markup(const char *markup) { +void Cartridge::parse_markup(const char* markup) { auto document = Markup::Document(markup); information.title.cartridge = document["information/title"].text(); @@ -32,14 +32,14 @@ void Cartridge::parse_markup(const char *markup) { // -void Cartridge::parse_markup_map(Mapping &m, Markup::Node map) { +void Cartridge::parse_markup_map(Mapping& m, Markup::Node map) { m.addr = map["address"].data; m.size = numeral(map["size"].data); m.base = numeral(map["base"].data); m.mask = numeral(map["mask"].data); } -void Cartridge::parse_markup_memory(MappedRAM &ram, Markup::Node node, unsigned id, bool writable) { +void Cartridge::parse_markup_memory(MappedRAM& ram, Markup::Node node, unsigned id, bool writable) { string name = node["name"].data; unsigned size = numeral(node["size"].data); ram.map(allocate(size, 0xff), size); @@ -57,7 +57,7 @@ void Cartridge::parse_markup_cartridge(Markup::Node root) { parse_markup_memory(rom, root["rom"], ID::ROM, false); parse_markup_memory(ram, root["ram"], ID::RAM, true); - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "rom") { @@ -86,7 +86,7 @@ void Cartridge::parse_markup_icd2(Markup::Node root) { string bootROMName = root["rom"]["name"].data; interface->loadRequest(ID::SuperGameBoyBootROM, bootROMName); - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "io") { @@ -108,7 +108,7 @@ void Cartridge::parse_markup_bsx(Markup::Node root) { parse_markup_memory(bsxcartridge.ram, root["ram"], ID::BsxRAM, true); parse_markup_memory(bsxcartridge.psram, root["psram"], ID::BsxPSRAM, true); - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "rom" @@ -132,7 +132,7 @@ void Cartridge::parse_markup_satellaview(Markup::Node root) { interface->loadRequest(ID::Satellaview, "BS-X Satellaview", "bs"); - for(auto &node : root.find("map")) { + for(auto& node : root.find("map")) { if(node["id"].data == "rom") { if(satellaviewcartridge.memory.size() == 0) continue; @@ -152,7 +152,7 @@ void Cartridge::parse_markup_sufamiturbo(Markup::Node root, bool slot) { interface->loadRequest(ID::SufamiTurboSlotA, "Sufami Turbo - Slot A", "st"); } - for(auto &node : root.find("map")) { + for(auto& node : root.find("map")) { SufamiTurboCartridge &cart = (slot == 0 ? sufamiturboA : sufamiturboB); if(node["id"].data == "rom") { @@ -180,7 +180,7 @@ void Cartridge::parse_markup_nss(Markup::Node root) { has_nss_dip = true; nss.dip = interface->dipSettings(root); - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "io") { @@ -195,7 +195,7 @@ void Cartridge::parse_markup_event(Markup::Node root) { if(root.exists() == false) return; has_event = true; - for(auto &node : root) { + for(auto& node : root) { if(node.name != "rom") continue; unsigned id = numeral(node["id"].data); if(id > 3) continue; @@ -212,7 +212,7 @@ void Cartridge::parse_markup_event(Markup::Node root) { if(part.size() == 1) event.timer = decimal(part(0)); if(part.size() == 2) event.timer = decimal(part(0)) * 60 + decimal(part(1)); - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "rom") { @@ -249,7 +249,7 @@ void Cartridge::parse_markup_sa1(Markup::Node root) { parse_markup_memory(sa1.bwram, root["ram[0]"], ID::SA1BWRAM, true); parse_markup_memory(sa1.iram, root["ram[1]"], ID::SA1IRAM, true); - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "io") { @@ -286,7 +286,7 @@ void Cartridge::parse_markup_superfx(Markup::Node root) { parse_markup_memory(superfx.rom, root["rom"], ID::SuperFXROM, false); parse_markup_memory(superfx.ram, root["ram"], ID::SuperFXRAM, true); - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "io") { @@ -326,7 +326,7 @@ void Cartridge::parse_markup_armdsp(Markup::Node root) { memory.append({ID::ArmDSPRAM, dataRAMName}); } - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "io") { @@ -344,8 +344,8 @@ void Cartridge::parse_markup_hitachidsp(Markup::Node root, unsigned roms) { parse_markup_memory(hitachidsp.rom, root["rom[0]"], ID::HitachiDSPROM, false); parse_markup_memory(hitachidsp.ram, root["ram[0]"], ID::HitachiDSPRAM, true); - for(auto &word : hitachidsp.dataROM) word = 0x000000; - for(auto &word : hitachidsp.dataRAM) word = 0x00; + for(auto& word : hitachidsp.dataROM) word = 0x000000; + for(auto& word : hitachidsp.dataRAM) word = 0x00; hitachidsp.Frequency = numeral(root["frequency"].data); if(hitachidsp.Frequency == 0) hitachidsp.frequency = 20000000; @@ -359,7 +359,7 @@ void Cartridge::parse_markup_hitachidsp(Markup::Node root, unsigned roms) { interface->loadRequest(ID::HitachiDSPDRAM, dataRAMName); } - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "io") { @@ -388,9 +388,9 @@ void Cartridge::parse_markup_necdsp(Markup::Node root) { if(root.exists() == false) return; has_necdsp = true; - for(auto &word : necdsp.programROM) word = 0x000000; - for(auto &word : necdsp.dataROM) word = 0x0000; - for(auto &word : necdsp.dataRAM) word = 0x0000; + for(auto& word : necdsp.programROM) word = 0x000000; + for(auto& word : necdsp.dataROM) word = 0x0000; + for(auto& word : necdsp.dataRAM) word = 0x0000; necdsp.frequency = numeral(root["frequency"].data); if(necdsp.frequency == 0) necdsp.frequency = 8000000; @@ -421,7 +421,7 @@ void Cartridge::parse_markup_necdsp(Markup::Node root) { } } - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "io") { @@ -447,7 +447,7 @@ void Cartridge::parse_markup_epsonrtc(Markup::Node root) { interface->loadRequest(ID::EpsonRTC, name); memory.append({ID::EpsonRTC, name}); - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "io") { @@ -466,7 +466,7 @@ void Cartridge::parse_markup_sharprtc(Markup::Node root) { interface->loadRequest(ID::SharpRTC, name); memory.append({ID::SharpRTC, name}); - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "io") { @@ -485,7 +485,7 @@ void Cartridge::parse_markup_spc7110(Markup::Node root) { parse_markup_memory(spc7110.drom, root["rom[1]"], ID::SPC7110DROM, false); parse_markup_memory(spc7110.ram, root["ram"], ID::SPC7110RAM, true); - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "io") { @@ -515,7 +515,7 @@ void Cartridge::parse_markup_sdd1(Markup::Node root) { parse_markup_memory(sdd1.rom, root["rom"], ID::SDD1ROM, false); parse_markup_memory(sdd1.ram, root["ram"], ID::SDD1RAM, true); - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "io") { @@ -544,7 +544,7 @@ void Cartridge::parse_markup_obc1(Markup::Node root) { parse_markup_memory(obc1.ram, root["ram"], ID::OBC1RAM, true); - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "io") { @@ -559,7 +559,7 @@ void Cartridge::parse_markup_hsu1(Markup::Node root) { if(root.exists() == false) return; has_hsu1 = true; - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "io") { @@ -574,7 +574,7 @@ void Cartridge::parse_markup_msu1(Markup::Node root) { if(root.exists() == false) return; has_msu1 = true; - for(auto &node : root) { + for(auto& node : root) { if(node.name != "map") continue; if(node["id"].data == "io") { @@ -589,13 +589,13 @@ Cartridge::Mapping::Mapping() { size = base = mask = 0; } -Cartridge::Mapping::Mapping(SuperFamicom::Memory &memory) { +Cartridge::Mapping::Mapping(SuperFamicom::Memory& memory) { reader = {&SuperFamicom::Memory::read, &memory}; writer = {&SuperFamicom::Memory::write, &memory}; size = base = mask = 0; } -Cartridge::Mapping::Mapping(const function &reader, const function &writer) { +Cartridge::Mapping::Mapping(const function& reader, const function& writer) { this->reader = reader; this->writer = writer; size = base = mask = 0; diff --git a/higan/sfc/cartridge/serialization.cpp b/higan/sfc/cartridge/serialization.cpp index 41121d94..07948643 100755 --- a/higan/sfc/cartridge/serialization.cpp +++ b/higan/sfc/cartridge/serialization.cpp @@ -1,6 +1,6 @@ #ifdef CARTRIDGE_CPP -void Cartridge::serialize(serializer &s) { +void Cartridge::serialize(serializer& s) { s.array(ram.data(), ram.size()); } diff --git a/higan/sfc/cheat/cheat.cpp b/higan/sfc/cheat/cheat.cpp index 82a77ea8..d8a7f6f1 100755 --- a/higan/sfc/cheat/cheat.cpp +++ b/higan/sfc/cheat/cheat.cpp @@ -43,7 +43,7 @@ uint8 Cheat::read(unsigned addr) const { addr = mirror(addr); for(unsigned i = 0; i < size(); i++) { - const CheatCode &code = operator[](i); + const CheatCode& code = operator[](i); if(addr == mirror(code.addr)) { return code.data; } @@ -65,7 +65,7 @@ Cheat::~Cheat() { delete[] override; } -bool Cheat::decode(const string &code, unsigned &addr, unsigned &data) { +bool Cheat::decode(string code, unsigned& addr, unsigned& data) { string t = code; t.lower(); @@ -73,7 +73,7 @@ bool Cheat::decode(const string &code, unsigned &addr, unsigned &data) { if(t.wildcard("??????:??")) { //Direct - t = { substr(t, 0, 6), substr(t, 7, 2) }; + t = {substr(t, 0, 6), substr(t, 7, 2)}; for(unsigned n = 0; n < 8; n++) if(!ischr(t[n])) return false; //validate input unsigned r = hex(t); @@ -84,11 +84,11 @@ bool Cheat::decode(const string &code, unsigned &addr, unsigned &data) { if(t.wildcard("????" "-" "????")) { //Game Genie - t = { substr(t, 0, 4), substr(t, 5, 4) }; + t = {substr(t, 0, 4), substr(t, 5, 4)}; for(unsigned n = 0; n < 8; n++) if(!ischr(t[n])) return false; //validate input t.transform("df4709156bc8a23e", "0123456789abcdef"); unsigned r = hex(t); - static unsigned bits[] = { 13, 12, 11, 10, 5, 4, 3, 2, 23, 22, 21, 20, 1, 0, 15, 14, 19, 18, 17, 16, 9, 8, 7, 6 }; + static unsigned bits[] = {13, 12, 11, 10, 5, 4, 3, 2, 23, 22, 21, 20, 1, 0, 15, 14, 19, 18, 17, 16, 9, 8, 7, 6}; addr = 0; for(unsigned n = 0; n < 24; n++) addr |= r & (1 << bits[n]) ? 0x800000 >> n : 0; diff --git a/higan/sfc/cheat/cheat.hpp b/higan/sfc/cheat/cheat.hpp index 2ea2ebc9..f08b71a3 100755 --- a/higan/sfc/cheat/cheat.hpp +++ b/higan/sfc/cheat/cheat.hpp @@ -4,7 +4,7 @@ struct CheatCode { }; struct Cheat : public vector { - uint8 *override; + uint8* override; bool enabled() const; void enable(bool); @@ -15,7 +15,7 @@ struct Cheat : public vector { Cheat(); ~Cheat(); - static bool decode(const string&, unsigned&, unsigned&); + static bool decode(string, unsigned&, unsigned&); private: bool system_enabled; diff --git a/higan/sfc/chip/armdsp/armdsp.hpp b/higan/sfc/chip/armdsp/armdsp.hpp index ce229853..3fdd686e 100755 --- a/higan/sfc/chip/armdsp/armdsp.hpp +++ b/higan/sfc/chip/armdsp/armdsp.hpp @@ -1,9 +1,9 @@ //ARMv3 (ARM6) struct ArmDSP : Processor::ARM, Coprocessor { - uint8 *programROM; - uint8 *dataROM; - uint8 *programRAM; + uint8* programROM; + uint8* dataROM; + uint8* programRAM; #include "registers.hpp" diff --git a/higan/sfc/chip/armdsp/serialization.cpp b/higan/sfc/chip/armdsp/serialization.cpp index 3a659464..68531baa 100755 --- a/higan/sfc/chip/armdsp/serialization.cpp +++ b/higan/sfc/chip/armdsp/serialization.cpp @@ -9,7 +9,7 @@ nall::vector ArmDSP::firmware() { return buffer; } -void ArmDSP::serialize(serializer &s) { +void ArmDSP::serialize(serializer& s) { ARM::serialize(s); Thread::serialize(s); diff --git a/higan/sfc/chip/bsx/bsx.cpp b/higan/sfc/chip/bsx/bsx.cpp index b2381fc6..567026ab 100755 --- a/higan/sfc/chip/bsx/bsx.cpp +++ b/higan/sfc/chip/bsx/bsx.cpp @@ -28,17 +28,17 @@ void BSXCartridge::reset() { mmio_commit(); } -uint8 BSXCartridge::memory_access(bool write, Memory &memory, unsigned addr, uint8 data) { +uint8 BSXCartridge::memory_access(bool write, Memory& memory, unsigned addr, uint8 data) { if(write == 0) return memory_read(memory, addr); memory_write(memory, addr, data); } -uint8 BSXCartridge::memory_read(Memory &memory, unsigned addr) { +uint8 BSXCartridge::memory_read(Memory& memory, unsigned addr) { addr = bus.mirror(addr, memory.size()); return memory.read(addr); } -void BSXCartridge::memory_write(Memory &memory, unsigned addr, uint8 data) { +void BSXCartridge::memory_write(Memory& memory, unsigned addr, uint8 data) { addr = bus.mirror(addr, memory.size()); return memory.write(addr, data); } @@ -83,7 +83,7 @@ uint8 BSXCartridge::mcu_access(bool write, unsigned addr, uint8 data) { || ((addr & 0x400000) == 0x400000) //$40-7f|c0-ff:0000-ffff ) { if(r02 == 0) addr = ((addr & 0x7f0000) >> 1) | (addr & 0x7fff); - Memory &memory = (r01 == 0 ? (Memory&)satellaviewcartridge : (Memory&)psram); + Memory& memory = (r01 == 0 ? (Memory&)satellaviewcartridge : (Memory&)psram); return memory_access(write, memory, addr & 0x7fffff, data); } diff --git a/higan/sfc/chip/bsx/bsx.hpp b/higan/sfc/chip/bsx/bsx.hpp index 19815ca9..be31ea5b 100755 --- a/higan/sfc/chip/bsx/bsx.hpp +++ b/higan/sfc/chip/bsx/bsx.hpp @@ -9,9 +9,9 @@ struct BSXCartridge { void power(); void reset(); - uint8 memory_access(bool write, Memory &memory, unsigned addr, uint8 data); - uint8 memory_read(Memory &memory, unsigned addr); - void memory_write(Memory &memory, unsigned addr, uint8 data); + uint8 memory_access(bool write, Memory& memory, unsigned addr, uint8 data); + uint8 memory_read(Memory& memory, unsigned addr); + void memory_write(Memory& memory, unsigned addr, uint8 data); uint8 mcu_access(bool write, unsigned addr, uint8 data = 0x00); uint8 mcu_read(unsigned addr); diff --git a/higan/sfc/chip/bsx/serialization.cpp b/higan/sfc/chip/bsx/serialization.cpp index aed4206b..e4ee4264 100644 --- a/higan/sfc/chip/bsx/serialization.cpp +++ b/higan/sfc/chip/bsx/serialization.cpp @@ -1,6 +1,6 @@ #ifdef BSX_CPP -void BSXCartridge::serialize(serializer &s) { +void BSXCartridge::serialize(serializer& s) { s.array(ram.data(), ram.size()); s.array(psram.data(), psram.size()); } diff --git a/higan/sfc/chip/epsonrtc/epsonrtc.cpp b/higan/sfc/chip/epsonrtc/epsonrtc.cpp index 9dad58b8..06bab485 100755 --- a/higan/sfc/chip/epsonrtc/epsonrtc.cpp +++ b/higan/sfc/chip/epsonrtc/epsonrtc.cpp @@ -105,7 +105,7 @@ void EpsonRTC::reset() { void EpsonRTC::sync() { time_t systime = time(0); - tm *timeinfo = localtime(&systime); + tm* timeinfo = localtime(&systime); unsigned second = min(59, timeinfo->tm_sec); secondlo = second % 10; diff --git a/higan/sfc/chip/epsonrtc/epsonrtc.hpp b/higan/sfc/chip/epsonrtc/epsonrtc.hpp index 0ee25a4b..91eaeda6 100755 --- a/higan/sfc/chip/epsonrtc/epsonrtc.hpp +++ b/higan/sfc/chip/epsonrtc/epsonrtc.hpp @@ -71,8 +71,8 @@ struct EpsonRTC : Coprocessor { uint4 rtc_read(uint4 addr); void rtc_write(uint4 addr, uint4 data); - void load(const uint8 *data); - void save(uint8 *data); + void load(const uint8* data); + void save(uint8* data); //time.cpp void irq(uint2 period); diff --git a/higan/sfc/chip/epsonrtc/memory.cpp b/higan/sfc/chip/epsonrtc/memory.cpp index 63c3aa93..f88aa4ac 100755 --- a/higan/sfc/chip/epsonrtc/memory.cpp +++ b/higan/sfc/chip/epsonrtc/memory.cpp @@ -112,7 +112,7 @@ void EpsonRTC::rtc_write(uint4 addr, uint4 data) { } } -void EpsonRTC::load(const uint8 *data) { +void EpsonRTC::load(const uint8* data) { secondlo = data[0] >> 0; secondhi = data[0] >> 4; batteryfailure = data[0] >> 7; @@ -164,7 +164,7 @@ void EpsonRTC::load(const uint8 *data) { while(diff--) tick_second(); } -void EpsonRTC::save(uint8 *data) { +void EpsonRTC::save(uint8* data) { data[0] = secondlo << 0 | secondhi << 4 | batteryfailure << 7; data[1] = minutelo << 0 | minutehi << 4 | resync << 7; data[2] = hourlo << 0 | hourhi << 4 | meridian << 6 | resync << 7; diff --git a/higan/sfc/chip/epsonrtc/serialization.cpp b/higan/sfc/chip/epsonrtc/serialization.cpp index 6396fd2d..22a9e6ed 100755 --- a/higan/sfc/chip/epsonrtc/serialization.cpp +++ b/higan/sfc/chip/epsonrtc/serialization.cpp @@ -1,6 +1,6 @@ #ifdef EPSONRTC_CPP -void EpsonRTC::serialize(serializer &s) { +void EpsonRTC::serialize(serializer& s) { Thread::serialize(s); s.integer(clocks); diff --git a/higan/sfc/chip/event/event.cpp b/higan/sfc/chip/event/event.cpp index 9e7a734b..b7276295 100644 --- a/higan/sfc/chip/event/event.cpp +++ b/higan/sfc/chip/event/event.cpp @@ -181,7 +181,7 @@ void Event::ram_write(unsigned addr, uint8 data) { return ram.write(bus.mirror(addr, ram.size()), data); } -void Event::serialize(serializer &s) { +void Event::serialize(serializer& s) { Thread::serialize(s); s.array(ram.data(), ram.size()); s.integer(status); diff --git a/higan/sfc/chip/hitachidsp/serialization.cpp b/higan/sfc/chip/hitachidsp/serialization.cpp index 01de7a0c..050e01b6 100755 --- a/higan/sfc/chip/hitachidsp/serialization.cpp +++ b/higan/sfc/chip/hitachidsp/serialization.cpp @@ -12,7 +12,7 @@ vector HitachiDSP::firmware() { return buffer; } -void HitachiDSP::serialize(serializer &s) { +void HitachiDSP::serialize(serializer& s) { HG51B::serialize(s); Thread::serialize(s); diff --git a/higan/sfc/chip/hsu1/hsu1.cpp b/higan/sfc/chip/hsu1/hsu1.cpp index c8f100dc..5feaebf3 100644 --- a/higan/sfc/chip/hsu1/hsu1.cpp +++ b/higan/sfc/chip/hsu1/hsu1.cpp @@ -88,7 +88,7 @@ void HSU1::write(unsigned addr, uint8 data) { txbuffer.reset(); server.header = server.downloadHeader(); - uint8_t *data = nullptr; + uint8_t* data = nullptr; unsigned size = 0; server.downloadContent(data, size); rxbuffer.resize(size); diff --git a/higan/sfc/chip/hsu1/serialization.cpp b/higan/sfc/chip/hsu1/serialization.cpp index 2543aaf3..9f359679 100644 --- a/higan/sfc/chip/hsu1/serialization.cpp +++ b/higan/sfc/chip/hsu1/serialization.cpp @@ -1,6 +1,6 @@ #ifdef HSU1_CPP -void HSU1::serialize(serializer &s) { +void HSU1::serialize(serializer& s) { s.integer(txbusy); s.integer(rxbusy); s.integer(txlatch); diff --git a/higan/sfc/chip/icd2/icd2.cpp b/higan/sfc/chip/icd2/icd2.cpp index 29f3a121..6e9b64ec 100755 --- a/higan/sfc/chip/icd2/icd2.cpp +++ b/higan/sfc/chip/icd2/icd2.cpp @@ -59,12 +59,12 @@ void ICD2::reset() { r6005 = 0xff; r6006 = 0xff; r6007 = 0xff; - for(auto &r : r7000) r = 0x00; + for(auto& r : r7000) r = 0x00; r7800 = 0x0000; mlt_req = 0; - for(auto &n : lcd.buffer) n = 0; - for(auto &n : lcd.output) n = 0; + for(auto& n : lcd.buffer) n = 0; + for(auto& n : lcd.output) n = 0; lcd.row = 0; packetsize = 0; diff --git a/higan/sfc/chip/icd2/icd2.hpp b/higan/sfc/chip/icd2/icd2.hpp index e95b7f8a..377a175c 100755 --- a/higan/sfc/chip/icd2/icd2.hpp +++ b/higan/sfc/chip/icd2/icd2.hpp @@ -16,8 +16,8 @@ struct ICD2 : Emulator::Interface::Bind, GameBoy::Interface::Hook, Coprocessor { void serialize(serializer&); private: - Emulator::Interface::Bind *bind; - GameBoy::Interface::Hook *hook; + Emulator::Interface::Bind* bind; + GameBoy::Interface::Hook* hook; #include "interface/interface.hpp" #include "mmio/mmio.hpp" }; diff --git a/higan/sfc/chip/icd2/interface/interface.cpp b/higan/sfc/chip/icd2/interface/interface.cpp index 6c47e63f..27d74624 100755 --- a/higan/sfc/chip/icd2/interface/interface.cpp +++ b/higan/sfc/chip/icd2/interface/interface.cpp @@ -84,7 +84,7 @@ uint32_t ICD2::videoColor(unsigned source, uint16_t red, uint16_t green, uint16_ return source; } -void ICD2::videoRefresh(const uint32_t *data, unsigned pitch, unsigned width, unsigned height) { +void ICD2::videoRefresh(const uint32_t* data, unsigned pitch, unsigned width, unsigned height) { } void ICD2::audioSample(int16_t left, int16_t right) { diff --git a/higan/sfc/chip/icd2/interface/interface.hpp b/higan/sfc/chip/icd2/interface/interface.hpp index 6c024fed..205adffc 100755 --- a/higan/sfc/chip/icd2/interface/interface.hpp +++ b/higan/sfc/chip/icd2/interface/interface.hpp @@ -2,7 +2,7 @@ void lcdScanline(); void joypWrite(bool p15, bool p14); uint32_t videoColor(unsigned source, uint16_t red, uint16_t green, uint16_t blue); -void videoRefresh(const uint32_t *data, unsigned pitch, unsigned width, unsigned height); +void videoRefresh(const uint32_t* data, unsigned pitch, unsigned width, unsigned height); void audioSample(int16_t lsample, int16_t rsample); int16_t inputPoll(unsigned port, unsigned device, unsigned id); diff --git a/higan/sfc/chip/icd2/mmio/mmio.cpp b/higan/sfc/chip/icd2/mmio/mmio.cpp index bb227d77..0847264d 100755 --- a/higan/sfc/chip/icd2/mmio/mmio.cpp +++ b/higan/sfc/chip/icd2/mmio/mmio.cpp @@ -1,7 +1,7 @@ #ifdef ICD2_CPP //convert linear pixel data to 2bpp planar tiledata -void ICD2::render(const uint32 *source) { +void ICD2::render(const uint32* source) { memset(lcd.output, 0x00, 320 * sizeof(uint16)); for(unsigned y = 0; y < 8; y++) { @@ -78,10 +78,10 @@ void ICD2::write(unsigned addr, uint8 data) { reset(); } switch(data & 3) { - case 0: frequency = cpu.frequency / 4; break; //fast (glitchy, even on real hardware) - case 1: frequency = cpu.frequency / 5; break; //normal - case 2: frequency = cpu.frequency / 7; break; //slow - case 3: frequency = cpu.frequency / 9; break; //very slow + case 0: frequency = cpu.frequency / 4; break; //fast (glitchy, even on real hardware) + case 1: frequency = cpu.frequency / 5; break; //normal + case 2: frequency = cpu.frequency / 7; break; //slow + case 3: frequency = cpu.frequency / 9; break; //very slow } r6003 = data; return; diff --git a/higan/sfc/chip/icd2/mmio/mmio.hpp b/higan/sfc/chip/icd2/mmio/mmio.hpp index 6172e856..df7ab07d 100755 --- a/higan/sfc/chip/icd2/mmio/mmio.hpp +++ b/higan/sfc/chip/icd2/mmio/mmio.hpp @@ -1,4 +1,4 @@ -void render(const uint32 *source); +void render(const uint32* source); uint8 r6000_ly; //SGB BIOS' cache of LY uint8 r6000_row; //SGB BIOS' cache of ROW diff --git a/higan/sfc/chip/icd2/serialization.cpp b/higan/sfc/chip/icd2/serialization.cpp index 75bfed9b..d0a1649a 100755 --- a/higan/sfc/chip/icd2/serialization.cpp +++ b/higan/sfc/chip/icd2/serialization.cpp @@ -1,6 +1,6 @@ #ifdef ICD2_CPP -void ICD2::serialize(serializer &s) { +void ICD2::serialize(serializer& s) { Thread::serialize(s); GameBoy::system.serialize_all(s); diff --git a/higan/sfc/chip/msu1/msu1.cpp b/higan/sfc/chip/msu1/msu1.cpp index 7882ea05..8e8011d9 100755 --- a/higan/sfc/chip/msu1/msu1.cpp +++ b/higan/sfc/chip/msu1/msu1.cpp @@ -99,7 +99,7 @@ void MSU1::audio_open() { if(audiofile.open()) audiofile.close(); auto document = Markup::Document(cartridge.information.markup.cartridge); string name = {"track-", mmio.audio_track, ".pcm"}; - for(auto &track : document.find("cartridge/msu1/track")) { + for(auto track : document.find("cartridge/msu1/track")) { if(numeral(track["number"].data) != mmio.audio_track) continue; name = track["name"].data; break; diff --git a/higan/sfc/chip/msu1/serialization.cpp b/higan/sfc/chip/msu1/serialization.cpp index dff6bd38..0de5ce8c 100755 --- a/higan/sfc/chip/msu1/serialization.cpp +++ b/higan/sfc/chip/msu1/serialization.cpp @@ -1,6 +1,6 @@ #ifdef MSU1_CPP -void MSU1::serialize(serializer &s) { +void MSU1::serialize(serializer& s) { Thread::serialize(s); s.integer(boot); diff --git a/higan/sfc/chip/necdsp/serialization.cpp b/higan/sfc/chip/necdsp/serialization.cpp index 42df005e..36bbca5c 100755 --- a/higan/sfc/chip/necdsp/serialization.cpp +++ b/higan/sfc/chip/necdsp/serialization.cpp @@ -21,7 +21,7 @@ vector NECDSP::firmware() { return buffer; } -void NECDSP::serialize(serializer &s) { +void NECDSP::serialize(serializer& s) { uPD96050::serialize(s); Thread::serialize(s); } diff --git a/higan/sfc/chip/obc1/serialization.cpp b/higan/sfc/chip/obc1/serialization.cpp index ebdee36e..cda5e7ea 100755 --- a/higan/sfc/chip/obc1/serialization.cpp +++ b/higan/sfc/chip/obc1/serialization.cpp @@ -1,6 +1,6 @@ #ifdef OBC1_CPP -void OBC1::serialize(serializer &s) { +void OBC1::serialize(serializer& s) { s.array(ram.data(), ram.size()); s.integer(status.address); diff --git a/higan/sfc/chip/sa1/dma/dma.cpp b/higan/sfc/chip/sa1/dma/dma.cpp index cc860145..346ce8bf 100755 --- a/higan/sfc/chip/sa1/dma/dma.cpp +++ b/higan/sfc/chip/sa1/dma/dma.cpp @@ -15,33 +15,33 @@ void SA1::dma_normal() { if(mmio.sd == DMA::SourceIRAM && mmio.dd == DMA::DestIRAM ) continue; switch(mmio.sd) { - case DMA::SourceROM: { - if((dsa & 0x408000) == 0x008000 || (dsa & 0xc00000) == 0xc00000) { - data = bus_read(dsa); - } - } break; + case DMA::SourceROM: + if((dsa & 0x408000) == 0x008000 || (dsa & 0xc00000) == 0xc00000) { + data = bus_read(dsa); + } + break; - case DMA::SourceBWRAM: { - if((dsa & 0x40e000) == 0x006000 || (dsa & 0xf00000) == 0x400000) { - data = bus_read(dsa); - } - } break; + case DMA::SourceBWRAM: + if((dsa & 0x40e000) == 0x006000 || (dsa & 0xf00000) == 0x400000) { + data = bus_read(dsa); + } + break; - case DMA::SourceIRAM: { - data = iram.read(dsa & 0x07ff); - } break; + case DMA::SourceIRAM: + data = iram.read(dsa & 0x07ff); + break; } switch(mmio.dd) { - case DMA::DestBWRAM: { - if((dda & 0x40e000) == 0x006000 || (dda & 0xf00000) == 0x400000) { - bus_write(dda, data); - } - } break; + case DMA::DestBWRAM: + if((dda & 0x40e000) == 0x006000 || (dda & 0xf00000) == 0x400000) { + bus_write(dda, data); + } + break; - case DMA::DestIRAM: { - iram.write(dda & 0x07ff, data); - } break; + case DMA::DestIRAM: + iram.write(dda & 0x07ff, data); + break; } } diff --git a/higan/sfc/chip/sa1/memory/memory.cpp b/higan/sfc/chip/sa1/memory/memory.cpp index ad1ef606..8f24db39 100755 --- a/higan/sfc/chip/sa1/memory/memory.cpp +++ b/higan/sfc/chip/sa1/memory/memory.cpp @@ -234,19 +234,19 @@ uint8 SA1::bitmap_read(unsigned addr) { //4bpp unsigned shift = addr & 1; addr = (addr >> 1) & (bwram.size() - 1); - switch(shift) { default: - case 0: return (bwram.read(addr) >> 0) & 15; - case 1: return (bwram.read(addr) >> 4) & 15; + switch(shift) { + case 0: return (bwram.read(addr) >> 0) & 15; + case 1: return (bwram.read(addr) >> 4) & 15; } } else { //2bpp unsigned shift = addr & 3; addr = (addr >> 2) & (bwram.size() - 1); - switch(shift) { default: - case 0: return (bwram.read(addr) >> 0) & 3; - case 1: return (bwram.read(addr) >> 2) & 3; - case 2: return (bwram.read(addr) >> 4) & 3; - case 3: return (bwram.read(addr) >> 6) & 3; + switch(shift) { + case 0: return (bwram.read(addr) >> 0) & 3; + case 1: return (bwram.read(addr) >> 2) & 3; + case 2: return (bwram.read(addr) >> 4) & 3; + case 3: return (bwram.read(addr) >> 6) & 3; } } } @@ -256,19 +256,19 @@ void SA1::bitmap_write(unsigned addr, uint8 data) { //4bpp unsigned shift = addr & 1; addr = (addr >> 1) & (bwram.size() - 1); - switch(shift) { default: - case 0: data = (bwram.read(addr) & 0xf0) | ((data & 15) << 0); break; - case 1: data = (bwram.read(addr) & 0x0f) | ((data & 15) << 4); break; + switch(shift) { + case 0: data = (bwram.read(addr) & 0xf0) | ((data & 15) << 0); break; + case 1: data = (bwram.read(addr) & 0x0f) | ((data & 15) << 4); break; } } else { //2bpp unsigned shift = addr & 3; addr = (addr >> 2) & (bwram.size() - 1); - switch(shift) { default: - case 0: data = (bwram.read(addr) & 0xfc) | ((data & 3) << 0); break; - case 1: data = (bwram.read(addr) & 0xf3) | ((data & 3) << 2); break; - case 2: data = (bwram.read(addr) & 0xcf) | ((data & 3) << 4); break; - case 3: data = (bwram.read(addr) & 0x3f) | ((data & 3) << 6); break; + switch(shift) { + case 0: data = (bwram.read(addr) & 0xfc) | ((data & 3) << 0); break; + case 1: data = (bwram.read(addr) & 0xf3) | ((data & 3) << 2); break; + case 2: data = (bwram.read(addr) & 0xcf) | ((data & 3) << 4); break; + case 3: data = (bwram.read(addr) & 0x3f) | ((data & 3) << 6); break; } } diff --git a/higan/sfc/chip/sa1/mmio/mmio.cpp b/higan/sfc/chip/sa1/mmio/mmio.cpp index c4a894b0..839063ef 100755 --- a/higan/sfc/chip/sa1/mmio/mmio.cpp +++ b/higan/sfc/chip/sa1/mmio/mmio.cpp @@ -448,21 +448,21 @@ uint8 SA1::mmio_read(unsigned addr) { addr &= 0xffff; switch(addr) { - case 0x2300: return mmio_r2300(); - case 0x2301: return mmio_r2301(); - case 0x2302: return mmio_r2302(); - case 0x2303: return mmio_r2303(); - case 0x2304: return mmio_r2304(); - case 0x2305: return mmio_r2305(); - case 0x2306: return mmio_r2306(); - case 0x2307: return mmio_r2307(); - case 0x2308: return mmio_r2308(); - case 0x2309: return mmio_r2309(); - case 0x230a: return mmio_r230a(); - case 0x230b: return mmio_r230b(); - case 0x230c: return mmio_r230c(); - case 0x230d: return mmio_r230d(); - case 0x230e: return mmio_r230e(); + case 0x2300: return mmio_r2300(); + case 0x2301: return mmio_r2301(); + case 0x2302: return mmio_r2302(); + case 0x2303: return mmio_r2303(); + case 0x2304: return mmio_r2304(); + case 0x2305: return mmio_r2305(); + case 0x2306: return mmio_r2306(); + case 0x2307: return mmio_r2307(); + case 0x2308: return mmio_r2308(); + case 0x2309: return mmio_r2309(); + case 0x230a: return mmio_r230a(); + case 0x230b: return mmio_r230b(); + case 0x230c: return mmio_r230c(); + case 0x230d: return mmio_r230d(); + case 0x230e: return mmio_r230e(); } return 0x00; @@ -473,81 +473,81 @@ void SA1::mmio_write(unsigned addr, uint8 data) { addr &= 0xffff; switch(addr) { - case 0x2200: return mmio_w2200(data); - case 0x2201: return mmio_w2201(data); - case 0x2202: return mmio_w2202(data); - case 0x2203: return mmio_w2203(data); - case 0x2204: return mmio_w2204(data); - case 0x2205: return mmio_w2205(data); - case 0x2206: return mmio_w2206(data); - case 0x2207: return mmio_w2207(data); - case 0x2208: return mmio_w2208(data); - case 0x2209: return mmio_w2209(data); - case 0x220a: return mmio_w220a(data); - case 0x220b: return mmio_w220b(data); - case 0x220c: return mmio_w220c(data); - case 0x220d: return mmio_w220d(data); - case 0x220e: return mmio_w220e(data); - case 0x220f: return mmio_w220f(data); + case 0x2200: return mmio_w2200(data); + case 0x2201: return mmio_w2201(data); + case 0x2202: return mmio_w2202(data); + case 0x2203: return mmio_w2203(data); + case 0x2204: return mmio_w2204(data); + case 0x2205: return mmio_w2205(data); + case 0x2206: return mmio_w2206(data); + case 0x2207: return mmio_w2207(data); + case 0x2208: return mmio_w2208(data); + case 0x2209: return mmio_w2209(data); + case 0x220a: return mmio_w220a(data); + case 0x220b: return mmio_w220b(data); + case 0x220c: return mmio_w220c(data); + case 0x220d: return mmio_w220d(data); + case 0x220e: return mmio_w220e(data); + case 0x220f: return mmio_w220f(data); - case 0x2210: return mmio_w2210(data); - case 0x2211: return mmio_w2211(data); - case 0x2212: return mmio_w2212(data); - case 0x2213: return mmio_w2213(data); - case 0x2214: return mmio_w2214(data); - case 0x2215: return mmio_w2215(data); + case 0x2210: return mmio_w2210(data); + case 0x2211: return mmio_w2211(data); + case 0x2212: return mmio_w2212(data); + case 0x2213: return mmio_w2213(data); + case 0x2214: return mmio_w2214(data); + case 0x2215: return mmio_w2215(data); - case 0x2220: return mmio_w2220(data); - case 0x2221: return mmio_w2221(data); - case 0x2222: return mmio_w2222(data); - case 0x2223: return mmio_w2223(data); - case 0x2224: return mmio_w2224(data); - case 0x2225: return mmio_w2225(data); - case 0x2226: return mmio_w2226(data); - case 0x2227: return mmio_w2227(data); - case 0x2228: return mmio_w2228(data); - case 0x2229: return mmio_w2229(data); - case 0x222a: return mmio_w222a(data); + case 0x2220: return mmio_w2220(data); + case 0x2221: return mmio_w2221(data); + case 0x2222: return mmio_w2222(data); + case 0x2223: return mmio_w2223(data); + case 0x2224: return mmio_w2224(data); + case 0x2225: return mmio_w2225(data); + case 0x2226: return mmio_w2226(data); + case 0x2227: return mmio_w2227(data); + case 0x2228: return mmio_w2228(data); + case 0x2229: return mmio_w2229(data); + case 0x222a: return mmio_w222a(data); - case 0x2230: return mmio_w2230(data); - case 0x2231: return mmio_w2231(data); - case 0x2232: return mmio_w2232(data); - case 0x2233: return mmio_w2233(data); - case 0x2234: return mmio_w2234(data); - case 0x2235: return mmio_w2235(data); - case 0x2236: return mmio_w2236(data); - case 0x2237: return mmio_w2237(data); - case 0x2238: return mmio_w2238(data); - case 0x2239: return mmio_w2239(data); + case 0x2230: return mmio_w2230(data); + case 0x2231: return mmio_w2231(data); + case 0x2232: return mmio_w2232(data); + case 0x2233: return mmio_w2233(data); + case 0x2234: return mmio_w2234(data); + case 0x2235: return mmio_w2235(data); + case 0x2236: return mmio_w2236(data); + case 0x2237: return mmio_w2237(data); + case 0x2238: return mmio_w2238(data); + case 0x2239: return mmio_w2239(data); - case 0x223f: return mmio_w223f(data); - case 0x2240: return mmio_w2240(data); - case 0x2241: return mmio_w2241(data); - case 0x2242: return mmio_w2242(data); - case 0x2243: return mmio_w2243(data); - case 0x2244: return mmio_w2244(data); - case 0x2245: return mmio_w2245(data); - case 0x2246: return mmio_w2246(data); - case 0x2247: return mmio_w2247(data); - case 0x2248: return mmio_w2248(data); - case 0x2249: return mmio_w2249(data); - case 0x224a: return mmio_w224a(data); - case 0x224b: return mmio_w224b(data); - case 0x224c: return mmio_w224c(data); - case 0x224d: return mmio_w224d(data); - case 0x224e: return mmio_w224e(data); - case 0x224f: return mmio_w224f(data); + case 0x223f: return mmio_w223f(data); + case 0x2240: return mmio_w2240(data); + case 0x2241: return mmio_w2241(data); + case 0x2242: return mmio_w2242(data); + case 0x2243: return mmio_w2243(data); + case 0x2244: return mmio_w2244(data); + case 0x2245: return mmio_w2245(data); + case 0x2246: return mmio_w2246(data); + case 0x2247: return mmio_w2247(data); + case 0x2248: return mmio_w2248(data); + case 0x2249: return mmio_w2249(data); + case 0x224a: return mmio_w224a(data); + case 0x224b: return mmio_w224b(data); + case 0x224c: return mmio_w224c(data); + case 0x224d: return mmio_w224d(data); + case 0x224e: return mmio_w224e(data); + case 0x224f: return mmio_w224f(data); - case 0x2250: return mmio_w2250(data); - case 0x2251: return mmio_w2251(data); - case 0x2252: return mmio_w2252(data); - case 0x2253: return mmio_w2253(data); - case 0x2254: return mmio_w2254(data); + case 0x2250: return mmio_w2250(data); + case 0x2251: return mmio_w2251(data); + case 0x2252: return mmio_w2252(data); + case 0x2253: return mmio_w2253(data); + case 0x2254: return mmio_w2254(data); - case 0x2258: return mmio_w2258(data); - case 0x2259: return mmio_w2259(data); - case 0x225a: return mmio_w225a(data); - case 0x225b: return mmio_w225b(data); + case 0x2258: return mmio_w2258(data); + case 0x2259: return mmio_w2259(data); + case 0x225a: return mmio_w225a(data); + case 0x225b: return mmio_w225b(data); } } diff --git a/higan/sfc/chip/sa1/sa1.cpp b/higan/sfc/chip/sa1/sa1.cpp index 2ce73b1f..f377302b 100755 --- a/higan/sfc/chip/sa1/sa1.cpp +++ b/higan/sfc/chip/sa1/sa1.cpp @@ -104,10 +104,10 @@ void SA1::tick() { //test counters for timer IRQ switch((mmio.ven << 1) + (mmio.hen << 0)) { - case 0: break; - case 1: if(status.hcounter == (mmio.hcnt << 2)) trigger_irq(); break; - case 2: if(status.vcounter == mmio.vcnt && status.hcounter == 0) trigger_irq(); break; - case 3: if(status.vcounter == mmio.hcnt && status.hcounter == (mmio.hcnt << 2)) trigger_irq(); break; + case 0: break; + case 1: if(status.hcounter == (mmio.hcnt << 2)) trigger_irq(); break; + case 2: if(status.vcounter == mmio.vcnt && status.hcounter == 0) trigger_irq(); break; + case 3: if(status.vcounter == mmio.hcnt && status.hcounter == (mmio.hcnt << 2)) trigger_irq(); break; } } diff --git a/higan/sfc/chip/sa1/serialization.cpp b/higan/sfc/chip/sa1/serialization.cpp index 661bb41f..26a0340d 100755 --- a/higan/sfc/chip/sa1/serialization.cpp +++ b/higan/sfc/chip/sa1/serialization.cpp @@ -1,6 +1,6 @@ #ifdef SA1_CPP -void SA1::serialize(serializer &s) { +void SA1::serialize(serializer& s) { R65816::serialize(s); Thread::serialize(s); diff --git a/higan/sfc/chip/sdd1/decomp.cpp b/higan/sfc/chip/sdd1/decomp.cpp index d8ef7698..72039a74 100755 --- a/higan/sfc/chip/sdd1/decomp.cpp +++ b/higan/sfc/chip/sdd1/decomp.cpp @@ -70,7 +70,7 @@ const uint8 SDD1::Decomp::GCD::run_count[] = { 0x70, 0x30, 0x50, 0x10, 0x60, 0x20, 0x40, 0x00, }; -void SDD1::Decomp::GCD::get_run_count(uint8 code_number, uint8 &mps_count, bool &lps_index) { +void SDD1::Decomp::GCD::get_run_count(uint8 code_number, uint8& mps_count, bool& lps_index) { uint8 codeword = self.im.get_codeword(code_number); if(codeword & 0x80) { @@ -88,7 +88,7 @@ void SDD1::Decomp::BG::init() { lps_index = 0; } -uint8 SDD1::Decomp::BG::get_bit(bool &end_of_run) { +uint8 SDD1::Decomp::BG::get_bit(bool& end_of_run) { if(!(mps_count || lps_index)) self.gcd.get_run_count(code_number, mps_count, lps_index); uint8 bit; @@ -107,39 +107,39 @@ uint8 SDD1::Decomp::BG::get_bit(bool &end_of_run) { //probability estimation module const SDD1::Decomp::PEM::State SDD1::Decomp::PEM::evolution_table[33] = { - { 0, 25, 25 }, - { 0, 2, 1 }, - { 0, 3, 1 }, - { 0, 4, 2 }, - { 0, 5, 3 }, - { 1, 6, 4 }, - { 1, 7, 5 }, - { 1, 8, 6 }, - { 1, 9, 7 }, - { 2, 10, 8 }, - { 2, 11, 9 }, - { 2, 12, 10 }, - { 2, 13, 11 }, - { 3, 14, 12 }, - { 3, 15, 13 }, - { 3, 16, 14 }, - { 3, 17, 15 }, - { 4, 18, 16 }, - { 4, 19, 17 }, - { 5, 20, 18 }, - { 5, 21, 19 }, - { 6, 22, 20 }, - { 6, 23, 21 }, - { 7, 24, 22 }, - { 7, 24, 23 }, - { 0, 26, 1 }, - { 1, 27, 2 }, - { 2, 28, 4 }, - { 3, 29, 8 }, - { 4, 30, 12 }, - { 5, 31, 16 }, - { 6, 32, 18 }, - { 7, 24, 22 }, + {0, 25, 25}, + {0, 2, 1}, + {0, 3, 1}, + {0, 4, 2}, + {0, 5, 3}, + {1, 6, 4}, + {1, 7, 5}, + {1, 8, 6}, + {1, 9, 7}, + {2, 10, 8}, + {2, 11, 9}, + {2, 12, 10}, + {2, 13, 11}, + {3, 14, 12}, + {3, 15, 13}, + {3, 16, 14}, + {3, 17, 15}, + {4, 18, 16}, + {4, 19, 17}, + {5, 20, 18}, + {5, 21, 19}, + {6, 22, 20}, + {6, 23, 21}, + {7, 24, 22}, + {7, 24, 23}, + {0, 26, 1}, + {1, 27, 2}, + {2, 28, 4}, + {3, 29, 8}, + {4, 30, 12}, + {5, 31, 16}, + {6, 32, 18}, + {7, 24, 22}, }; void SDD1::Decomp::PEM::init() { @@ -150,10 +150,10 @@ void SDD1::Decomp::PEM::init() { } uint8 SDD1::Decomp::PEM::get_bit(uint8 context) { - ContextInfo &info = context_info[context]; + ContextInfo& info = context_info[context]; uint8 current_status = info.status; uint8 current_mps = info.mps; - const State &s = SDD1::Decomp::PEM::evolution_table[current_status]; + const State& s = SDD1::Decomp::PEM::evolution_table[current_status]; uint8 bit; bool end_of_run; @@ -212,7 +212,7 @@ uint8 SDD1::Decomp::CM::get_bit() { break; } - uint16 &context_bits = previous_bitplane_bits[current_bitplane]; + uint16& context_bits = previous_bitplane_bits[current_bitplane]; uint8 current_context = (current_bitplane & 0x01) << 4; switch(context_bits_info) { case 0x00: current_context |= ((context_bits & 0x01c0) >> 5) | (context_bits & 0x0001); break; @@ -276,8 +276,9 @@ uint8 SDD1::Decomp::read() { return ol.decompress(); } -SDD1::Decomp::Decomp() : im(*this), gcd(*this), - bg0(*this, 0), bg1(*this, 1), bg2(*this, 2), bg3(*this, 3), - bg4(*this, 4), bg5(*this, 5), bg6(*this, 6), bg7(*this, 7), - pem(*this), cm(*this), ol(*this) { +SDD1::Decomp::Decomp(): +im(*this), gcd(*this), +bg0(*this, 0), bg1(*this, 1), bg2(*this, 2), bg3(*this, 3), +bg4(*this, 4), bg5(*this, 5), bg6(*this, 6), bg7(*this, 7), +pem(*this), cm(*this), ol(*this) { } diff --git a/higan/sfc/chip/sdd1/decomp.hpp b/higan/sfc/chip/sdd1/decomp.hpp index 065e64bc..37d58cb6 100755 --- a/higan/sfc/chip/sdd1/decomp.hpp +++ b/higan/sfc/chip/sdd1/decomp.hpp @@ -1,26 +1,26 @@ struct Decomp { struct IM { //input manager - Decomp &self; + Decomp& self; void init(unsigned offset); uint8 get_codeword(uint8 code_length); - IM(SDD1::Decomp &self) : self(self) {} + IM(SDD1::Decomp& self) : self(self) {} private: unsigned offset; unsigned bit_count; }; struct GCD { //golomb-code decoder - Decomp &self; + Decomp& self; static const uint8 run_count[256]; - void get_run_count(uint8 code_number, uint8 &mps_count, bool &lps_index); - GCD(SDD1::Decomp &self) : self(self) {} + void get_run_count(uint8 code_number, uint8& mps_count, bool& lps_index); + GCD(SDD1::Decomp& self) : self(self) {} }; struct BG { //bits generator - Decomp &self; + Decomp& self; void init(); - uint8 get_bit(bool &end_of_run); - BG(SDD1::Decomp &self, uint8 code_number) : self(self), code_number(code_number) {} + uint8 get_bit(bool& end_of_run); + BG(SDD1::Decomp& self, uint8 code_number) : self(self), code_number(code_number) {} private: const uint8 code_number; uint8 mps_count; @@ -28,10 +28,10 @@ struct Decomp { }; struct PEM { //probability estimation module - Decomp &self; + Decomp& self; void init(); uint8 get_bit(uint8 context); - PEM(SDD1::Decomp &self) : self(self) {} + PEM(SDD1::Decomp& self) : self(self) {} private: struct State { uint8 code_number; @@ -46,10 +46,10 @@ struct Decomp { }; struct CM { //context model - Decomp &self; + Decomp& self; void init(unsigned offset); uint8 get_bit(); - CM(SDD1::Decomp &self) : self(self) {} + CM(SDD1::Decomp& self) : self(self) {} private: uint8 bitplanes_info; uint8 context_bits_info; @@ -59,10 +59,10 @@ struct Decomp { }; struct OL { //output logic - Decomp &self; + Decomp& self; void init(unsigned offset); uint8 decompress(); - OL(SDD1::Decomp &self) : self(self) {} + OL(SDD1::Decomp& self) : self(self) {} private: uint8 bitplanes_info; uint8 r0, r1, r2; diff --git a/higan/sfc/chip/sdd1/sdd1.cpp b/higan/sfc/chip/sdd1/sdd1.cpp index e8dd09d0..05128926 100755 --- a/higan/sfc/chip/sdd1/sdd1.cpp +++ b/higan/sfc/chip/sdd1/sdd1.cpp @@ -50,10 +50,10 @@ uint8 SDD1::read(unsigned addr) { } switch(addr) { - case 0x4804: return mmc[0] >> 20; - case 0x4805: return mmc[1] >> 20; - case 0x4806: return mmc[2] >> 20; - case 0x4807: return mmc[3] >> 20; + case 0x4804: return mmc[0] >> 20; + case 0x4805: return mmc[1] >> 20; + case 0x4806: return mmc[2] >> 20; + case 0x4807: return mmc[3] >> 20; } return cpu.regs.mdr; @@ -65,24 +65,24 @@ void SDD1::write(unsigned addr, uint8 data) { if((addr & 0x4380) == 0x4300) { unsigned channel = (addr >> 4) & 7; switch(addr & 15) { - case 2: dma[channel].addr = (dma[channel].addr & 0xffff00) + (data << 0); break; - case 3: dma[channel].addr = (dma[channel].addr & 0xff00ff) + (data << 8); break; - case 4: dma[channel].addr = (dma[channel].addr & 0x00ffff) + (data << 16); break; + case 2: dma[channel].addr = (dma[channel].addr & 0xffff00) + (data << 0); break; + case 3: dma[channel].addr = (dma[channel].addr & 0xff00ff) + (data << 8); break; + case 4: dma[channel].addr = (dma[channel].addr & 0x00ffff) + (data << 16); break; - case 5: dma[channel].size = (dma[channel].size & 0xff00) + (data << 0); break; - case 6: dma[channel].size = (dma[channel].size & 0x00ff) + (data << 8); break; + case 5: dma[channel].size = (dma[channel].size & 0xff00) + (data << 0); break; + case 6: dma[channel].size = (dma[channel].size & 0x00ff) + (data << 8); break; } return cpu.mmio_write(addr, data); } switch(addr) { - case 0x4800: sdd1_enable = data; break; - case 0x4801: xfer_enable = data; break; + case 0x4800: sdd1_enable = data; break; + case 0x4801: xfer_enable = data; break; - case 0x4804: mmc[0] = data << 20; break; - case 0x4805: mmc[1] = data << 20; break; - case 0x4806: mmc[2] = data << 20; break; - case 0x4807: mmc[3] = data << 20; break; + case 0x4804: mmc[0] = data << 20; break; + case 0x4805: mmc[1] = data << 20; break; + case 0x4806: mmc[2] = data << 20; break; + case 0x4807: mmc[3] = data << 20; break; } } diff --git a/higan/sfc/chip/sdd1/serialization.cpp b/higan/sfc/chip/sdd1/serialization.cpp index c0e94750..725c34db 100755 --- a/higan/sfc/chip/sdd1/serialization.cpp +++ b/higan/sfc/chip/sdd1/serialization.cpp @@ -1,6 +1,6 @@ #ifdef SDD1_CPP -void SDD1::serialize(serializer &s) { +void SDD1::serialize(serializer& s) { s.array(ram.data(), ram.size()); s.integer(sdd1_enable); diff --git a/higan/sfc/chip/sharprtc/memory.cpp b/higan/sfc/chip/sharprtc/memory.cpp index bff0f5f0..508f2fd8 100755 --- a/higan/sfc/chip/sharprtc/memory.cpp +++ b/higan/sfc/chip/sharprtc/memory.cpp @@ -35,7 +35,7 @@ void SharpRTC::rtc_write(uint4 addr, uint4 data) { } } -void SharpRTC::load(const uint8 *data) { +void SharpRTC::load(const uint8* data) { for(unsigned byte = 0; byte < 8; byte++) { rtc_write(byte * 2 + 0, data[byte] >> 0); rtc_write(byte * 2 + 1, data[byte] >> 4); @@ -53,7 +53,7 @@ void SharpRTC::load(const uint8 *data) { while(diff--) tick_second(); } -void SharpRTC::save(uint8 *data) { +void SharpRTC::save(uint8* data) { for(unsigned byte = 0; byte < 8; byte++) { data[byte] = rtc_read(byte * 2 + 0) << 0; data[byte] |= rtc_read(byte * 2 + 1) << 4; diff --git a/higan/sfc/chip/sharprtc/serialization.cpp b/higan/sfc/chip/sharprtc/serialization.cpp index 3281af6a..802216d6 100755 --- a/higan/sfc/chip/sharprtc/serialization.cpp +++ b/higan/sfc/chip/sharprtc/serialization.cpp @@ -1,6 +1,6 @@ #ifdef SHARPRTC_CPP -void SharpRTC::serialize(serializer &s) { +void SharpRTC::serialize(serializer& s) { Thread::serialize(s); s.integer((unsigned&)rtc_state); diff --git a/higan/sfc/chip/sharprtc/sharprtc.cpp b/higan/sfc/chip/sharprtc/sharprtc.cpp index eb0cabf6..b44e0261 100755 --- a/higan/sfc/chip/sharprtc/sharprtc.cpp +++ b/higan/sfc/chip/sharprtc/sharprtc.cpp @@ -55,7 +55,7 @@ void SharpRTC::reset() { void SharpRTC::sync() { time_t systime = time(0); - tm *timeinfo = localtime(&systime); + tm* timeinfo = localtime(&systime); second = min(59, timeinfo->tm_sec); minute = timeinfo->tm_min; diff --git a/higan/sfc/chip/sharprtc/sharprtc.hpp b/higan/sfc/chip/sharprtc/sharprtc.hpp index d8b81dcc..ea74b195 100755 --- a/higan/sfc/chip/sharprtc/sharprtc.hpp +++ b/higan/sfc/chip/sharprtc/sharprtc.hpp @@ -29,8 +29,8 @@ struct SharpRTC : Coprocessor { uint4 rtc_read(uint4 addr); void rtc_write(uint4 addr, uint4 data); - void load(const uint8 *data); - void save(uint8 *data); + void load(const uint8* data); + void save(uint8* data); //time.cpp static const unsigned daysinmonth[12]; diff --git a/higan/sfc/chip/spc7110/decompressor.cpp b/higan/sfc/chip/spc7110/decompressor.cpp index 8bfd879b..c52a352d 100755 --- a/higan/sfc/chip/spc7110/decompressor.cpp +++ b/higan/sfc/chip/spc7110/decompressor.cpp @@ -3,9 +3,9 @@ //optimized implementation: cydrak struct Decompressor { - SPC7110 &spc7110; + SPC7110& spc7110; - Decompressor(SPC7110 &spc7110) : spc7110(spc7110) {} + Decompressor(SPC7110& spc7110) : spc7110(spc7110) {} uint8 read() { return spc7110.datarom_read(offset++); @@ -79,8 +79,8 @@ struct Decompressor { if(bpp == 2) set = diff; if(plane >= 2 && history <= 1) set = diff; - auto &ctx = context[set][bit + history - 1]; - auto &model = evolution[ctx.prediction]; + auto& ctx = context[set][bit + history - 1]; + auto& model = evolution[ctx.prediction]; uint8 lps_offset = range - model.probability; bool symbol = input >= (lps_offset << 8); //test only the MSB @@ -119,9 +119,9 @@ struct Decompressor { if(bpp == 4) result = deinterleave(deinterleave(pixels, 32), 32); } - void serialize(serializer &s) { - for(auto &root : context) { - for(auto &node : root) { + void serialize(serializer& s) { + for(auto& root : context) { + for(auto& node : root) { s.integer(node.prediction); s.integer(node.swap); } diff --git a/higan/sfc/chip/spc7110/serialization.cpp b/higan/sfc/chip/spc7110/serialization.cpp index 5f483066..f3c572ee 100755 --- a/higan/sfc/chip/spc7110/serialization.cpp +++ b/higan/sfc/chip/spc7110/serialization.cpp @@ -1,6 +1,6 @@ #ifdef SPC7110_CPP -void SPC7110::serialize(serializer &s) { +void SPC7110::serialize(serializer& s) { s.array(ram.data(), ram.size()); s.integer(r4801); diff --git a/higan/sfc/chip/spc7110/spc7110.hpp b/higan/sfc/chip/spc7110/spc7110.hpp index 413ea253..dfeed21e 100755 --- a/higan/sfc/chip/spc7110/spc7110.hpp +++ b/higan/sfc/chip/spc7110/spc7110.hpp @@ -79,7 +79,7 @@ private: uint23 dcu_addr; unsigned dcu_offset; uint8 dcu_tile[32]; - Decompressor *decompressor; + Decompressor* decompressor; //============== //data port unit diff --git a/higan/sfc/chip/superfx/core/core.cpp b/higan/sfc/chip/superfx/core/core.cpp index a15c65db..61d74c66 100755 --- a/higan/sfc/chip/superfx/core/core.cpp +++ b/higan/sfc/chip/superfx/core/core.cpp @@ -54,10 +54,10 @@ uint8 SuperFX::rpix(uint8 x, uint8 y) { unsigned cn; //character number switch(regs.por.obj ? 3 : regs.scmr.ht) { - case 0: cn = ((x & 0xf8) << 1) + ((y & 0xf8) >> 3); break; - case 1: cn = ((x & 0xf8) << 1) + ((x & 0xf8) >> 1) + ((y & 0xf8) >> 3); break; - case 2: cn = ((x & 0xf8) << 1) + ((x & 0xf8) << 0) + ((y & 0xf8) >> 3); break; - case 3: cn = ((y & 0x80) << 2) + ((x & 0x80) << 1) + ((y & 0x78) << 1) + ((x & 0x78) >> 3); break; + case 0: cn = ((x & 0xf8) << 1) + ((y & 0xf8) >> 3); break; + case 1: cn = ((x & 0xf8) << 1) + ((x & 0xf8) >> 1) + ((y & 0xf8) >> 3); break; + case 2: cn = ((x & 0xf8) << 1) + ((x & 0xf8) << 0) + ((y & 0xf8) >> 3); break; + case 3: cn = ((y & 0x80) << 2) + ((x & 0x80) << 1) + ((y & 0x78) << 1) + ((x & 0x78) >> 3); break; } unsigned bpp = 2 << (regs.scmr.md - (regs.scmr.md >> 1)); // = [regs.scmr.md]{ 2, 4, 4, 8 }; unsigned addr = 0x700000 + (cn * (bpp << 3)) + (regs.scbr << 10) + ((y & 0x07) * 2); @@ -73,7 +73,7 @@ uint8 SuperFX::rpix(uint8 x, uint8 y) { return data; } -void SuperFX::pixelcache_flush(pixelcache_t &cache) { +void SuperFX::pixelcache_flush(pixelcache_t& cache) { if(cache.bitpend == 0x00) return; uint8 x = cache.offset << 3; @@ -81,10 +81,10 @@ void SuperFX::pixelcache_flush(pixelcache_t &cache) { unsigned cn; //character number switch(regs.por.obj ? 3 : regs.scmr.ht) { - case 0: cn = ((x & 0xf8) << 1) + ((y & 0xf8) >> 3); break; - case 1: cn = ((x & 0xf8) << 1) + ((x & 0xf8) >> 1) + ((y & 0xf8) >> 3); break; - case 2: cn = ((x & 0xf8) << 1) + ((x & 0xf8) << 0) + ((y & 0xf8) >> 3); break; - case 3: cn = ((y & 0x80) << 2) + ((x & 0x80) << 1) + ((y & 0x78) << 1) + ((x & 0x78) >> 3); break; + case 0: cn = ((x & 0xf8) << 1) + ((y & 0xf8) >> 3); break; + case 1: cn = ((x & 0xf8) << 1) + ((x & 0xf8) >> 1) + ((y & 0xf8) >> 3); break; + case 2: cn = ((x & 0xf8) << 1) + ((x & 0xf8) << 0) + ((y & 0xf8) >> 3); break; + case 3: cn = ((y & 0x80) << 2) + ((x & 0x80) << 1) + ((y & 0x78) << 1) + ((x & 0x78) >> 3); break; } unsigned bpp = 2 << (regs.scmr.md - (regs.scmr.md >> 1)); // = [regs.scmr.md]{ 2, 4, 4, 8 }; unsigned addr = 0x700000 + (cn * (bpp << 3)) + (regs.scbr << 10) + ((y & 0x07) * 2); diff --git a/higan/sfc/chip/superfx/core/core.hpp b/higan/sfc/chip/superfx/core/core.hpp index 66afbef9..26f69ecc 100755 --- a/higan/sfc/chip/superfx/core/core.hpp +++ b/higan/sfc/chip/superfx/core/core.hpp @@ -2,4 +2,4 @@ void stop(); uint8 color(uint8 source); void plot(uint8 x, uint8 y); uint8 rpix(uint8 x, uint8 y); -void pixelcache_flush(pixelcache_t &cache); +void pixelcache_flush(pixelcache_t& cache); diff --git a/higan/sfc/chip/superfx/disasm/disasm.cpp b/higan/sfc/chip/superfx/disasm/disasm.cpp index f3454e60..ef06f65c 100755 --- a/higan/sfc/chip/superfx/disasm/disasm.cpp +++ b/higan/sfc/chip/superfx/disasm/disasm.cpp @@ -1,6 +1,8 @@ #ifdef SUPERFX_CPP -void SuperFX::disassemble_opcode(char *output) { +//TODO: this belongs in processor/gsu + +void SuperFX::disassemble_opcode(char* output) { *output = 0; if(!regs.sfr.alt2) { @@ -39,7 +41,7 @@ void SuperFX::disassemble_opcode(char *output) { #define op1 bus_read((regs.pbr << 16) + regs.r[15] + 0) #define op2 bus_read((regs.pbr << 16) + regs.r[15] + 1) -void SuperFX::disassemble_alt0(char *output) { +void SuperFX::disassemble_alt0(char* output) { char t[256] = ""; switch(op0) { case (0x00): sprintf(t, "stop"); break; @@ -96,7 +98,7 @@ void SuperFX::disassemble_alt0(char *output) { strcat(output, t); } -void SuperFX::disassemble_alt1(char *output) { +void SuperFX::disassemble_alt1(char* output) { char t[256] = ""; switch(op0) { case (0x00): sprintf(t, "stop"); break; @@ -153,7 +155,7 @@ void SuperFX::disassemble_alt1(char *output) { strcat(output, t); } -void SuperFX::disassemble_alt2(char *output) { +void SuperFX::disassemble_alt2(char* output) { char t[256] = ""; switch(op0) { case (0x00): sprintf(t, "stop"); break; @@ -210,7 +212,7 @@ void SuperFX::disassemble_alt2(char *output) { strcat(output, t); } -void SuperFX::disassemble_alt3(char *output) { +void SuperFX::disassemble_alt3(char* output) { char t[256] = ""; switch(op0) { case (0x00): sprintf(t, "stop"); break; diff --git a/higan/sfc/chip/superfx/disasm/disasm.hpp b/higan/sfc/chip/superfx/disasm/disasm.hpp index 903615eb..d87fa6b8 100755 --- a/higan/sfc/chip/superfx/disasm/disasm.hpp +++ b/higan/sfc/chip/superfx/disasm/disasm.hpp @@ -1,5 +1,5 @@ -void disassemble_opcode(char *output); -void disassemble_alt0(char *output); -void disassemble_alt1(char *output); -void disassemble_alt2(char *output); -void disassemble_alt3(char *output); +void disassemble_opcode(char* output); +void disassemble_alt0(char* output); +void disassemble_alt1(char* output); +void disassemble_alt2(char* output); +void disassemble_alt3(char* output); diff --git a/higan/sfc/chip/superfx/mmio/mmio.cpp b/higan/sfc/chip/superfx/mmio/mmio.cpp index 5650a77a..71477f8c 100755 --- a/higan/sfc/chip/superfx/mmio/mmio.cpp +++ b/higan/sfc/chip/superfx/mmio/mmio.cpp @@ -13,40 +13,40 @@ uint8 SuperFX::mmio_read(unsigned addr) { } switch(addr) { - case 0x3030: { - return regs.sfr >> 0; - } + case 0x3030: { + return regs.sfr >> 0; + } - case 0x3031: { - uint8 r = regs.sfr >> 8; - regs.sfr.irq = 0; - cpu.regs.irq = 0; - return r; - } + case 0x3031: { + uint8 r = regs.sfr >> 8; + regs.sfr.irq = 0; + cpu.regs.irq = 0; + return r; + } - case 0x3034: { - return regs.pbr; - } + case 0x3034: { + return regs.pbr; + } - case 0x3036: { - return regs.rombr; - } + case 0x3036: { + return regs.rombr; + } - case 0x303b: { - return regs.vcr; - } + case 0x303b: { + return regs.vcr; + } - case 0x303c: { - return regs.rambr; - } + case 0x303c: { + return regs.rambr; + } - case 0x303e: { - return regs.cbr >> 0; - } + case 0x303e: { + return regs.cbr >> 0; + } - case 0x303f: { - return regs.cbr >> 8; - } + case 0x303f: { + return regs.cbr >> 8; + } } return 0x00; @@ -73,45 +73,45 @@ void SuperFX::mmio_write(unsigned addr, uint8 data) { } switch(addr) { - case 0x3030: { - bool g = regs.sfr.g; - regs.sfr = (regs.sfr & 0xff00) | (data << 0); - if(g == 1 && regs.sfr.g == 0) { - regs.cbr = 0x0000; - cache_flush(); - } - } break; - - case 0x3031: { - regs.sfr = (data << 8) | (regs.sfr & 0x00ff); - } break; - - case 0x3033: { - regs.bramr = data; - } break; - - case 0x3034: { - regs.pbr = data & 0x7f; + case 0x3030: { + bool g = regs.sfr.g; + regs.sfr = (regs.sfr & 0xff00) | (data << 0); + if(g == 1 && regs.sfr.g == 0) { + regs.cbr = 0x0000; cache_flush(); - } break; + } + } break; - case 0x3037: { - regs.cfgr = data; - update_speed(); - } break; + case 0x3031: { + regs.sfr = (data << 8) | (regs.sfr & 0x00ff); + } break; - case 0x3038: { - regs.scbr = data; - } break; + case 0x3033: { + regs.bramr = data; + } break; - case 0x3039: { - regs.clsr = data; - update_speed(); - } break; + case 0x3034: { + regs.pbr = data & 0x7f; + cache_flush(); + } break; - case 0x303a: { - regs.scmr = data; - } break; + case 0x3037: { + regs.cfgr = data; + update_speed(); + } break; + + case 0x3038: { + regs.scbr = data; + } break; + + case 0x3039: { + regs.clsr = data; + update_speed(); + } break; + + case 0x303a: { + regs.scmr = data; + } break; } } diff --git a/higan/sfc/chip/superfx/serialization.cpp b/higan/sfc/chip/superfx/serialization.cpp index 938847fa..7d291a9f 100755 --- a/higan/sfc/chip/superfx/serialization.cpp +++ b/higan/sfc/chip/superfx/serialization.cpp @@ -1,6 +1,6 @@ #ifdef SUPERFX_CPP -void SuperFX::serialize(serializer &s) { +void SuperFX::serialize(serializer& s) { GSU::serialize(s); Thread::serialize(s); diff --git a/higan/sfc/cpu/cpu.cpp b/higan/sfc/cpu/cpu.cpp index 63771b5f..8d48059b 100755 --- a/higan/sfc/cpu/cpu.cpp +++ b/higan/sfc/cpu/cpu.cpp @@ -15,7 +15,7 @@ void CPU::step(unsigned clocks) { smp.clock -= clocks * (uint64)smp.frequency; ppu.clock -= clocks; for(unsigned i = 0; i < coprocessors.size(); i++) { - auto &chip = *coprocessors[i]; + auto& chip = *coprocessors[i]; chip.clock -= clocks * (uint64)chip.frequency; } input.port1->clock -= clocks * (uint64)input.port1->frequency; @@ -41,7 +41,7 @@ void CPU::synchronize_ppu() { void CPU::synchronize_coprocessors() { for(unsigned i = 0; i < coprocessors.size(); i++) { - auto &chip = *coprocessors[i]; + auto& chip = *coprocessors[i]; if(chip.clock < 0) co_switch(chip.thread); } } @@ -121,7 +121,7 @@ void CPU::enable() { void CPU::power() { cpu_version = config.cpu.version; - for(auto &byte : wram) byte = random(config.cpu.wram_init_value); + for(auto& byte : wram) byte = random(config.cpu.wram_init_value); regs.a = regs.x = regs.y = 0x0000; regs.s = 0x01ff; diff --git a/higan/sfc/cpu/dma/dma.cpp b/higan/sfc/cpu/dma/dma.cpp index e8cdb3ec..629fd0c0 100755 --- a/higan/sfc/cpu/dma/dma.cpp +++ b/higan/sfc/cpu/dma/dma.cpp @@ -61,14 +61,14 @@ void CPU::dma_transfer(bool direction, uint8 bbus, uint32 abus) { uint8 CPU::dma_bbus(unsigned i, unsigned index) { switch(channel[i].transfer_mode) { default: - case 0: return (channel[i].dest_addr); //0 - case 1: return (channel[i].dest_addr + (index & 1)); //0,1 - case 2: return (channel[i].dest_addr); //0,0 - case 3: return (channel[i].dest_addr + ((index >> 1) & 1)); //0,0,1,1 - case 4: return (channel[i].dest_addr + (index & 3)); //0,1,2,3 - case 5: return (channel[i].dest_addr + (index & 1)); //0,1,0,1 - case 6: return (channel[i].dest_addr); //0,0 [2] - case 7: return (channel[i].dest_addr + ((index >> 1) & 1)); //0,0,1,1 [3] + case 0: return (channel[i].dest_addr); //0 + case 1: return (channel[i].dest_addr + (index & 1)); //0,1 + case 2: return (channel[i].dest_addr); //0,0 + case 3: return (channel[i].dest_addr + ((index >> 1) & 1)); //0,0,1,1 + case 4: return (channel[i].dest_addr + (index & 3)); //0,1,2,3 + case 5: return (channel[i].dest_addr + (index & 1)); //0,1,0,1 + case 6: return (channel[i].dest_addr); //0,0 [2] + case 7: return (channel[i].dest_addr + ((index >> 1) & 1)); //0,0,1,1 [3] } } diff --git a/higan/sfc/cpu/mmio/mmio.cpp b/higan/sfc/cpu/mmio/mmio.cpp index 8b6aaa6a..03b24624 100755 --- a/higan/sfc/cpu/mmio/mmio.cpp +++ b/higan/sfc/cpu/mmio/mmio.cpp @@ -352,7 +352,7 @@ void CPU::mmio_power() { void CPU::mmio_reset() { //$2140-217f - for(auto &port : status.port) port = 0x00; + for(auto& port : status.port) port = 0x00; //$2181-$2183 status.wram_addr = 0x000000; @@ -415,45 +415,45 @@ uint8 CPU::mmio_read(unsigned addr) { if((addr & 0xff80) == 0x4300) { //$4300-$437f unsigned i = (addr >> 4) & 7; switch(addr & 0xf) { - case 0x0: return mmio_r43x0(i); - case 0x1: return mmio_r43x1(i); - case 0x2: return mmio_r43x2(i); - case 0x3: return mmio_r43x3(i); - case 0x4: return mmio_r43x4(i); - case 0x5: return mmio_r43x5(i); - case 0x6: return mmio_r43x6(i); - case 0x7: return mmio_r43x7(i); - case 0x8: return mmio_r43x8(i); - case 0x9: return mmio_r43x9(i); - case 0xa: return mmio_r43xa(i); - case 0xb: return mmio_r43xb(i); - case 0xc: return regs.mdr; //unmapped - case 0xd: return regs.mdr; //unmapped - case 0xe: return regs.mdr; //unmapped - case 0xf: return mmio_r43xb(i); //mirror of $43xb + case 0x0: return mmio_r43x0(i); + case 0x1: return mmio_r43x1(i); + case 0x2: return mmio_r43x2(i); + case 0x3: return mmio_r43x3(i); + case 0x4: return mmio_r43x4(i); + case 0x5: return mmio_r43x5(i); + case 0x6: return mmio_r43x6(i); + case 0x7: return mmio_r43x7(i); + case 0x8: return mmio_r43x8(i); + case 0x9: return mmio_r43x9(i); + case 0xa: return mmio_r43xa(i); + case 0xb: return mmio_r43xb(i); + case 0xc: return regs.mdr; //unmapped + case 0xd: return regs.mdr; //unmapped + case 0xe: return regs.mdr; //unmapped + case 0xf: return mmio_r43xb(i); //mirror of $43xb } } switch(addr) { - case 0x2180: return mmio_r2180(); - case 0x4016: return mmio_r4016(); - case 0x4017: return mmio_r4017(); - case 0x4210: return mmio_r4210(); - case 0x4211: return mmio_r4211(); - case 0x4212: return mmio_r4212(); - case 0x4213: return mmio_r4213(); - case 0x4214: return mmio_r4214(); - case 0x4215: return mmio_r4215(); - case 0x4216: return mmio_r4216(); - case 0x4217: return mmio_r4217(); - case 0x4218: return mmio_r4218(); - case 0x4219: return mmio_r4219(); - case 0x421a: return mmio_r421a(); - case 0x421b: return mmio_r421b(); - case 0x421c: return mmio_r421c(); - case 0x421d: return mmio_r421d(); - case 0x421e: return mmio_r421e(); - case 0x421f: return mmio_r421f(); + case 0x2180: return mmio_r2180(); + case 0x4016: return mmio_r4016(); + case 0x4017: return mmio_r4017(); + case 0x4210: return mmio_r4210(); + case 0x4211: return mmio_r4211(); + case 0x4212: return mmio_r4212(); + case 0x4213: return mmio_r4213(); + case 0x4214: return mmio_r4214(); + case 0x4215: return mmio_r4215(); + case 0x4216: return mmio_r4216(); + case 0x4217: return mmio_r4217(); + case 0x4218: return mmio_r4218(); + case 0x4219: return mmio_r4219(); + case 0x421a: return mmio_r421a(); + case 0x421b: return mmio_r421b(); + case 0x421c: return mmio_r421c(); + case 0x421d: return mmio_r421d(); + case 0x421e: return mmio_r421e(); + case 0x421f: return mmio_r421f(); } return regs.mdr; @@ -473,46 +473,46 @@ void CPU::mmio_write(unsigned addr, uint8 data) { if((addr & 0xff80) == 0x4300) { //$4300-$437f unsigned i = (addr >> 4) & 7; switch(addr & 0xf) { - case 0x0: mmio_w43x0(i, data); return; - case 0x1: mmio_w43x1(i, data); return; - case 0x2: mmio_w43x2(i, data); return; - case 0x3: mmio_w43x3(i, data); return; - case 0x4: mmio_w43x4(i, data); return; - case 0x5: mmio_w43x5(i, data); return; - case 0x6: mmio_w43x6(i, data); return; - case 0x7: mmio_w43x7(i, data); return; - case 0x8: mmio_w43x8(i, data); return; - case 0x9: mmio_w43x9(i, data); return; - case 0xa: mmio_w43xa(i, data); return; - case 0xb: mmio_w43xb(i, data); return; - case 0xc: return; //unmapped - case 0xd: return; //unmapped - case 0xe: return; //unmapped - case 0xf: mmio_w43xb(i, data); return; //mirror of $43xb + case 0x0: mmio_w43x0(i, data); return; + case 0x1: mmio_w43x1(i, data); return; + case 0x2: mmio_w43x2(i, data); return; + case 0x3: mmio_w43x3(i, data); return; + case 0x4: mmio_w43x4(i, data); return; + case 0x5: mmio_w43x5(i, data); return; + case 0x6: mmio_w43x6(i, data); return; + case 0x7: mmio_w43x7(i, data); return; + case 0x8: mmio_w43x8(i, data); return; + case 0x9: mmio_w43x9(i, data); return; + case 0xa: mmio_w43xa(i, data); return; + case 0xb: mmio_w43xb(i, data); return; + case 0xc: return; //unmapped + case 0xd: return; //unmapped + case 0xe: return; //unmapped + case 0xf: mmio_w43xb(i, data); return; //mirror of $43xb } } switch(addr) { - case 0x2180: mmio_w2180(data); return; - case 0x2181: mmio_w2181(data); return; - case 0x2182: mmio_w2182(data); return; - case 0x2183: mmio_w2183(data); return; - case 0x4016: mmio_w4016(data); return; - case 0x4017: return; //unmapped - case 0x4200: mmio_w4200(data); return; - case 0x4201: mmio_w4201(data); return; - case 0x4202: mmio_w4202(data); return; - case 0x4203: mmio_w4203(data); return; - case 0x4204: mmio_w4204(data); return; - case 0x4205: mmio_w4205(data); return; - case 0x4206: mmio_w4206(data); return; - case 0x4207: mmio_w4207(data); return; - case 0x4208: mmio_w4208(data); return; - case 0x4209: mmio_w4209(data); return; - case 0x420a: mmio_w420a(data); return; - case 0x420b: mmio_w420b(data); return; - case 0x420c: mmio_w420c(data); return; - case 0x420d: mmio_w420d(data); return; + case 0x2180: mmio_w2180(data); return; + case 0x2181: mmio_w2181(data); return; + case 0x2182: mmio_w2182(data); return; + case 0x2183: mmio_w2183(data); return; + case 0x4016: mmio_w4016(data); return; + case 0x4017: return; //unmapped + case 0x4200: mmio_w4200(data); return; + case 0x4201: mmio_w4201(data); return; + case 0x4202: mmio_w4202(data); return; + case 0x4203: mmio_w4203(data); return; + case 0x4204: mmio_w4204(data); return; + case 0x4205: mmio_w4205(data); return; + case 0x4206: mmio_w4206(data); return; + case 0x4207: mmio_w4207(data); return; + case 0x4208: mmio_w4208(data); return; + case 0x4209: mmio_w4209(data); return; + case 0x420a: mmio_w420a(data); return; + case 0x420b: mmio_w420b(data); return; + case 0x420c: mmio_w420c(data); return; + case 0x420d: mmio_w420d(data); return; } } diff --git a/higan/sfc/cpu/serialization.cpp b/higan/sfc/cpu/serialization.cpp index 8d8fc253..14aafd78 100755 --- a/higan/sfc/cpu/serialization.cpp +++ b/higan/sfc/cpu/serialization.cpp @@ -1,6 +1,6 @@ #ifdef CPU_CPP -void CPU::serialize(serializer &s) { +void CPU::serialize(serializer& s) { R65816::serialize(s); Thread::serialize(s); PPUcounter::serialize(s); diff --git a/higan/sfc/dsp/brr.cpp b/higan/sfc/dsp/brr.cpp index 8552d7aa..3a294868 100755 --- a/higan/sfc/dsp/brr.cpp +++ b/higan/sfc/dsp/brr.cpp @@ -1,6 +1,6 @@ #ifdef DSP_CPP -void DSP::brr_decode(voice_t &v) { +void DSP::brr_decode(voice_t& v) { //state.t_brr_byte = ram[v.brr_addr + v.brr_offset] cached from previous clock cycle int nybbles = (state.t_brr_byte << 8) + smp.apuram[(uint16)(v.brr_addr + v.brr_offset + 1)]; @@ -26,29 +26,30 @@ void DSP::brr_decode(voice_t &v) { const int p2 = v.buffer[v.buf_pos - 2] >> 1; switch(filter) { - case 0: break; //no filter + case 0: + break; - case 1: { - //s += p1 * 0.46875 - s += p1 >> 1; - s += (-p1) >> 5; - } break; + case 1: + //s += p1 * 0.46875 + s += p1 >> 1; + s += (-p1) >> 5; + break; - case 2: { - //s += p1 * 0.953125 - p2 * 0.46875 - s += p1; - s -= p2; - s += p2 >> 4; - s += (p1 * -3) >> 6; - } break; + case 2: + //s += p1 * 0.953125 - p2 * 0.46875 + s += p1; + s -= p2; + s += p2 >> 4; + s += (p1 * -3) >> 6; + break; - case 3: { - //s += p1 * 0.8984375 - p2 * 0.40625 - s += p1; - s -= p2; - s += (p1 * -13) >> 7; - s += (p2 * 3) >> 4; - } break; + case 3: + //s += p1 * 0.8984375 - p2 * 0.40625 + s += p1; + s -= p2; + s += (p1 * -13) >> 7; + s += (p2 * 3) >> 4; + break; } //adjust and write sample diff --git a/higan/sfc/dsp/dsp.hpp b/higan/sfc/dsp/dsp.hpp index 41298911..8d13bfa7 100755 --- a/higan/sfc/dsp/dsp.hpp +++ b/higan/sfc/dsp/dsp.hpp @@ -116,7 +116,7 @@ privileged: //gaussian static const int16 gaussian_table[512]; - int gaussian_interpolate(const voice_t &v); + int gaussian_interpolate(const voice_t& v); //counter enum { counter_range = 2048 * 5 * 3 }; //30720 (0x7800) @@ -126,10 +126,10 @@ privileged: bool counter_poll(unsigned rate); //envelope - void envelope_run(voice_t &v); + void envelope_run(voice_t& v); //brr - void brr_decode(voice_t &v); + void brr_decode(voice_t& v); //misc void misc_27(); @@ -138,7 +138,7 @@ privileged: void misc_30(); //voice - void voice_output(voice_t &v, bool channel); + void voice_output(voice_t& v, bool channel); void voice_1 (voice_t &v); void voice_2 (voice_t &v); void voice_3 (voice_t &v); diff --git a/higan/sfc/dsp/envelope.cpp b/higan/sfc/dsp/envelope.cpp index 9ae0d3e0..2965e623 100755 --- a/higan/sfc/dsp/envelope.cpp +++ b/higan/sfc/dsp/envelope.cpp @@ -1,9 +1,9 @@ #ifdef DSP_CPP -void DSP::envelope_run(voice_t &v) { +void DSP::envelope_run(voice_t& v) { int env = v.env; - if(v.env_mode == env_release) { //60% + if(v.env_mode == env_release) { //60% env -= 0x8; if(env < 0) env = 0; v.env = env; @@ -12,35 +12,35 @@ void DSP::envelope_run(voice_t &v) { int rate; int env_data = VREG(adsr1); - if(state.t_adsr0 & 0x80) { //99% ADSR - if(v.env_mode >= env_decay) { //99% + if(state.t_adsr0 & 0x80) { //99% ADSR + if(v.env_mode >= env_decay) { //99% env--; env -= env >> 8; rate = env_data & 0x1f; - if(v.env_mode == env_decay) { //1% + if(v.env_mode == env_decay) { //1% rate = ((state.t_adsr0 >> 3) & 0x0e) + 0x10; } - } else { //env_attack + } else { //env_attack rate = ((state.t_adsr0 & 0x0f) << 1) + 1; env += rate < 31 ? 0x20 : 0x400; } - } else { //GAIN + } else { //GAIN env_data = VREG(gain); int mode = env_data >> 5; - if(mode < 4) { //direct + if(mode < 4) { //direct env = env_data << 4; rate = 31; } else { rate = env_data & 0x1f; - if(mode == 4) { //4: linear decrease + if(mode == 4) { //4: linear decrease env -= 0x20; - } else if(mode < 6) { //5: exponential decrease + } else if(mode < 6) { //5: exponential decrease env--; env -= env >> 8; - } else { //6, 7: linear increase + } else { //6, 7: linear increase env += 0x20; if(mode > 6 && (unsigned)v.hidden_env >= 0x600) { - env += 0x8 - 0x20; //7: two-slope linear increase + env += 0x8 - 0x20; //7: two-slope linear increase } } } diff --git a/higan/sfc/dsp/gaussian.cpp b/higan/sfc/dsp/gaussian.cpp index 80aed8ad..2b066796 100755 --- a/higan/sfc/dsp/gaussian.cpp +++ b/higan/sfc/dsp/gaussian.cpp @@ -35,11 +35,11 @@ const int16 DSP::gaussian_table[512] = { 1299, 1300, 1300, 1301, 1302, 1302, 1303, 1303, 1303, 1304, 1304, 1304, 1304, 1304, 1305, 1305, }; -int DSP::gaussian_interpolate(const voice_t &v) { +int DSP::gaussian_interpolate(const voice_t& v) { //make pointers into gaussian table based on fractional position between samples int offset = (v.interp_pos >> 4) & 0xff; - const int16 *fwd = gaussian_table + 255 - offset; - const int16 *rev = gaussian_table + offset; //mirror left half of gaussian table + const int16* fwd = gaussian_table + 255 - offset; + const int16* rev = gaussian_table + offset; //mirror left half of gaussian table offset = v.buf_pos + (v.interp_pos >> 12); int output; diff --git a/higan/sfc/dsp/misc.cpp b/higan/sfc/dsp/misc.cpp index 244fc51f..98a0e5c3 100755 --- a/higan/sfc/dsp/misc.cpp +++ b/higan/sfc/dsp/misc.cpp @@ -1,7 +1,7 @@ #ifdef DSP_CPP void DSP::misc_27() { - state.t_pmon = REG(pmon) & ~1; //voice 0 doesn't support PMON + state.t_pmon = REG(pmon) & ~1; //voice 0 doesn't support PMON } void DSP::misc_28() { @@ -13,7 +13,7 @@ void DSP::misc_28() { void DSP::misc_29() { state.every_other_sample ^= 1; if(state.every_other_sample) { - state.new_kon &= ~state.kon; //clears KON 63 clocks after it was last read + state.new_kon &= ~state.kon; //clears KON 63 clocks after it was last read } } diff --git a/higan/sfc/dsp/moduloarray.hpp b/higan/sfc/dsp/moduloarray.hpp index 75352247..d237da4f 100755 --- a/higan/sfc/dsp/moduloarray.hpp +++ b/higan/sfc/dsp/moduloarray.hpp @@ -13,7 +13,7 @@ template struct moduloarray { buffer[index + size + size] = value; } - void serialize(serializer &s) { + void serialize(serializer& s) { s.array(buffer, size * 3); } @@ -26,5 +26,5 @@ template struct moduloarray { } private: - T *buffer; + T* buffer; }; diff --git a/higan/sfc/dsp/serialization.cpp b/higan/sfc/dsp/serialization.cpp index 65ca1560..355c20d7 100755 --- a/higan/sfc/dsp/serialization.cpp +++ b/higan/sfc/dsp/serialization.cpp @@ -1,6 +1,6 @@ #ifdef DSP_CPP -void DSP::serialize(serializer &s) { +void DSP::serialize(serializer& s) { Thread::serialize(s); s.array(state.regs, 128); diff --git a/higan/sfc/dsp/voice.cpp b/higan/sfc/dsp/voice.cpp index f4fcd8c0..76debf27 100755 --- a/higan/sfc/dsp/voice.cpp +++ b/higan/sfc/dsp/voice.cpp @@ -1,6 +1,6 @@ #ifdef DSP_CPP -inline void DSP::voice_output(voice_t &v, bool channel) { +inline void DSP::voice_output(voice_t& v, bool channel) { //apply left/right volume int amp = (state.t_output * (int8)VREG(voll + channel)) >> 7; @@ -15,12 +15,12 @@ inline void DSP::voice_output(voice_t &v, bool channel) { } } -void DSP::voice_1(voice_t &v) { +void DSP::voice_1(voice_t& v) { state.t_dir_addr = (state.t_dir << 8) + (state.t_srcn << 2); state.t_srcn = VREG(srcn); } -void DSP::voice_2(voice_t &v) { +void DSP::voice_2(voice_t& v) { //read sample pointer (ignored if not needed) uint16 addr = state.t_dir_addr; if(!v.kon_delay) addr += 2; @@ -34,22 +34,22 @@ void DSP::voice_2(voice_t &v) { state.t_pitch = VREG(pitchl); } -void DSP::voice_3(voice_t &v) { +void DSP::voice_3(voice_t& v) { voice_3a(v); voice_3b(v); voice_3c(v); } -void DSP::voice_3a(voice_t &v) { +void DSP::voice_3a(voice_t& v) { state.t_pitch += (VREG(pitchh) & 0x3f) << 8; } -void DSP::voice_3b(voice_t &v) { +void DSP::voice_3b(voice_t& v) { state.t_brr_byte = smp.apuram[(uint16)(v.brr_addr + v.brr_offset)]; state.t_brr_header = smp.apuram[(uint16)(v.brr_addr)]; } -void DSP::voice_3c(voice_t &v) { +void DSP::voice_3c(voice_t& v) { //pitch modulation using previous voice's output if(state.t_pmon & v.vbit) { @@ -62,7 +62,7 @@ void DSP::voice_3c(voice_t &v) { v.brr_addr = state.t_brr_next_addr; v.brr_offset = 1; v.buf_pos = 0; - state.t_brr_header = 0; //header is ignored on this sample + state.t_brr_header = 0; //header is ignored on this sample } //envelope is never run during KON @@ -113,7 +113,7 @@ void DSP::voice_3c(voice_t &v) { if(!v.kon_delay) envelope_run(v); } -void DSP::voice_4(voice_t &v) { +void DSP::voice_4(voice_t& v) { //decode BRR state.t_looped = 0; if(v.interp_pos >= 0x4000) { @@ -140,7 +140,7 @@ void DSP::voice_4(voice_t &v) { voice_output(v, 0); } -void DSP::voice_5(voice_t &v) { +void DSP::voice_5(voice_t& v) { //output right voice_output(v, 1); @@ -151,22 +151,22 @@ void DSP::voice_5(voice_t &v) { if(v.kon_delay == 5) state.endx_buf &= ~v.vbit; } -void DSP::voice_6(voice_t &v) { +void DSP::voice_6(voice_t& v) { state.outx_buf = state.t_output >> 8; } -void DSP::voice_7(voice_t &v) { +void DSP::voice_7(voice_t& v) { //update ENDX REG(endx) = (uint8)state.endx_buf; state.envx_buf = v.t_envx_out; } -void DSP::voice_8(voice_t &v) { +void DSP::voice_8(voice_t& v) { //update OUTX VREG(outx) = (uint8)state.outx_buf; } -void DSP::voice_9(voice_t &v) { +void DSP::voice_9(voice_t& v) { //update ENVX VREG(envx) = (uint8)state.envx_buf; } diff --git a/higan/sfc/interface/interface.cpp b/higan/sfc/interface/interface.cpp index 6b4855be..27ce0dc8 100755 --- a/higan/sfc/interface/interface.cpp +++ b/higan/sfc/interface/interface.cpp @@ -348,7 +348,7 @@ bool Interface::tracerEnable(bool trace) { if(trace == true && !tracer.open()) { for(unsigned n = 0; n <= 999; n++) { - string filename = {pathname, "trace-", decimal<3, '0'>(n), ".log"}; + string filename = {pathname, "trace-", format<3, '0'>(n), ".log"}; if(file::exists(filename)) continue; tracer.open(filename, file::mode::write); return true; diff --git a/higan/sfc/memory/memory-inline.hpp b/higan/sfc/memory/memory-inline.hpp index e07bd098..db60f7c0 100755 --- a/higan/sfc/memory/memory-inline.hpp +++ b/higan/sfc/memory/memory-inline.hpp @@ -26,13 +26,13 @@ void MappedRAM::reset() { write_protect_ = false; } -void MappedRAM::map(uint8 *source, unsigned length) { +void MappedRAM::map(uint8* source, unsigned length) { reset(); data_ = source; size_ = data_ ? length : 0; } -void MappedRAM::copy(const stream &memory) { +void MappedRAM::copy(const stream& memory) { if(data_) delete[] data_; //round size up to multiple of 256-bytes size_ = (memory.size() & ~255) + ((bool)(memory.size() & 255) << 8); @@ -40,7 +40,7 @@ void MappedRAM::copy(const stream &memory) { memory.read(data_, memory.size()); } -void MappedRAM::read(const stream &memory) { +void MappedRAM::read(const stream& memory) { memory.read(data_, min(memory.size(), size_)); } diff --git a/higan/sfc/memory/memory.cpp b/higan/sfc/memory/memory.cpp index 105059df..638b73d3 100755 --- a/higan/sfc/memory/memory.cpp +++ b/higan/sfc/memory/memory.cpp @@ -6,8 +6,8 @@ namespace SuperFamicom { Bus bus; void Bus::map( - const function &reader, - const function &writer, + const function& reader, + const function& writer, unsigned banklo, unsigned bankhi, unsigned addrlo, unsigned addrhi, unsigned size, unsigned base, unsigned mask @@ -39,12 +39,12 @@ void Bus::map_reset() { } void Bus::map_xml() { - for(auto &m : cartridge.mapping) { + for(auto& m : cartridge.mapping) { lstring part = m.addr.split<1>(":"); lstring banks = part(0).split(","); lstring addrs = part(1).split(","); - for(auto &bank : banks) { - for(auto &addr : addrs) { + for(auto& bank : banks) { + for(auto& addr : addrs) { lstring bankpart = bank.split<1>("-"); lstring addrpart = addr.split<1>("-"); unsigned banklo = hex(bankpart(0)); diff --git a/higan/sfc/memory/memory.hpp b/higan/sfc/memory/memory.hpp index 34e483cf..245156e7 100755 --- a/higan/sfc/memory/memory.hpp +++ b/higan/sfc/memory/memory.hpp @@ -17,15 +17,15 @@ struct StaticRAM : Memory { inline ~StaticRAM(); private: - uint8 *data_; + uint8* data_; unsigned size_; }; struct MappedRAM : Memory { inline void reset(); inline void map(uint8*, unsigned); - inline void copy(const stream &memory); - inline void read(const stream &memory); + inline void copy(const stream& memory); + inline void read(const stream& memory); inline void write_protect(bool status); inline uint8* data(); @@ -37,7 +37,7 @@ struct MappedRAM : Memory { inline MappedRAM(); private: - uint8 *data_; + uint8* data_; unsigned size_; bool write_protect_; }; @@ -49,16 +49,16 @@ struct Bus { alwaysinline uint8 read(unsigned addr); alwaysinline void write(unsigned addr, uint8 data); - uint8 *lookup; - uint32 *target; + uint8* lookup; + uint32* target; unsigned idcount; function reader[256]; function writer[256]; void map( - const function &reader, - const function &writer, + const function& reader, + const function& writer, unsigned banklo, unsigned bankhi, unsigned addrlo, unsigned addrhi, unsigned size = 0, unsigned base = 0, unsigned mask = 0 diff --git a/higan/sfc/ppu/background/background.hpp b/higan/sfc/ppu/background/background.hpp index 6811be29..2c68d0e5 100755 --- a/higan/sfc/ppu/background/background.hpp +++ b/higan/sfc/ppu/background/background.hpp @@ -74,8 +74,8 @@ struct Background { void run_mode7(); void serialize(serializer&); - Background(PPU &self, unsigned id); + Background(PPU& self, unsigned id); - PPU &self; + PPU& self; friend class PPU; }; diff --git a/higan/sfc/ppu/background/mode7.cpp b/higan/sfc/ppu/background/mode7.cpp index afb735af..fe0f79b7 100755 --- a/higan/sfc/ppu/background/mode7.cpp +++ b/higan/sfc/ppu/background/mode7.cpp @@ -47,41 +47,38 @@ void PPU::Background::run_mode7() { unsigned tile; unsigned palette; switch(self.regs.mode7_repeat) { - //screen repetition outside of screen area - case 0: - case 1: { + //screen repetition outside of screen area + case 0: + case 1: + px &= 1023; + py &= 1023; + tile = ppu.vram[((py >> 3) * 128 + (px >> 3)) << 1]; + palette = ppu.vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1]; + break; + + //palette color 0 outside of screen area + case 2: + if((px | py) & ~1023) { + palette = 0; + } else { px &= 1023; py &= 1023; tile = ppu.vram[((py >> 3) * 128 + (px >> 3)) << 1]; palette = ppu.vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1]; - break; } + break; - //palette color 0 outside of screen area - case 2: { - if((px | py) & ~1023) { - palette = 0; - } else { - px &= 1023; - py &= 1023; - tile = ppu.vram[((py >> 3) * 128 + (px >> 3)) << 1]; - palette = ppu.vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1]; - } - break; - } - - //character 0 repetition outside of screen area - case 3: { - if((px | py) & ~1023) { - tile = 0; - } else { - px &= 1023; - py &= 1023; - tile = ppu.vram[((py >> 3) * 128 + (px >> 3)) << 1]; - } - palette = ppu.vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1]; - break; + //character 0 repetition outside of screen area + case 3: + if((px | py) & ~1023) { + tile = 0; + } else { + px &= 1023; + py &= 1023; + tile = ppu.vram[((py >> 3) * 128 + (px >> 3)) << 1]; } + palette = ppu.vram[(((tile << 6) + ((py & 7) << 3) + (px & 7)) << 1) + 1]; + break; } unsigned priority; diff --git a/higan/sfc/ppu/mmio/mmio.cpp b/higan/sfc/ppu/mmio/mmio.cpp index 39b25c20..0178b868 100755 --- a/higan/sfc/ppu/mmio/mmio.cpp +++ b/higan/sfc/ppu/mmio/mmio.cpp @@ -22,10 +22,10 @@ void PPU::latch_counters() { uint16 PPU::get_vram_address() { uint16 addr = regs.vram_addr; switch(regs.vram_mapping) { - case 0: break; //direct mapping - case 1: addr = (addr & 0xff00) | ((addr & 0x001f) << 3) | ((addr >> 5) & 7); break; - case 2: addr = (addr & 0xfe00) | ((addr & 0x003f) << 3) | ((addr >> 6) & 7); break; - case 3: addr = (addr & 0xfc00) | ((addr & 0x007f) << 3) | ((addr >> 7) & 7); break; + case 0: break; //direct mapping + case 1: addr = (addr & 0xff00) | ((addr & 0x001f) << 3) | ((addr >> 5) & 7); break; + case 2: addr = (addr & 0xfe00) | ((addr & 0x003f) << 3) | ((addr >> 6) & 7); break; + case 3: addr = (addr & 0xfc00) | ((addr & 0x007f) << 3) | ((addr >> 7) & 7); break; } return (addr << 1); } @@ -74,99 +74,99 @@ void PPU::cgram_write(unsigned addr, uint8 data) { void PPU::mmio_update_video_mode() { switch(regs.bgmode) { - case 0: { - bg1.regs.mode = Background::Mode::BPP2; bg1.regs.priority0 = 8; bg1.regs.priority1 = 11; - bg2.regs.mode = Background::Mode::BPP2; bg2.regs.priority0 = 7; bg2.regs.priority1 = 10; - bg3.regs.mode = Background::Mode::BPP2; bg3.regs.priority0 = 2; bg3.regs.priority1 = 5; - bg4.regs.mode = Background::Mode::BPP2; bg4.regs.priority0 = 1; bg4.regs.priority1 = 4; - sprite.regs.priority0 = 3; sprite.regs.priority1 = 6; sprite.regs.priority2 = 9; sprite.regs.priority3 = 12; - } break; + case 0: + bg1.regs.mode = Background::Mode::BPP2; bg1.regs.priority0 = 8; bg1.regs.priority1 = 11; + bg2.regs.mode = Background::Mode::BPP2; bg2.regs.priority0 = 7; bg2.regs.priority1 = 10; + bg3.regs.mode = Background::Mode::BPP2; bg3.regs.priority0 = 2; bg3.regs.priority1 = 5; + bg4.regs.mode = Background::Mode::BPP2; bg4.regs.priority0 = 1; bg4.regs.priority1 = 4; + sprite.regs.priority0 = 3; sprite.regs.priority1 = 6; sprite.regs.priority2 = 9; sprite.regs.priority3 = 12; + break; - case 1: { - bg1.regs.mode = Background::Mode::BPP4; - bg2.regs.mode = Background::Mode::BPP4; - bg3.regs.mode = Background::Mode::BPP2; - bg4.regs.mode = Background::Mode::Inactive; - if(regs.bg3_priority) { - bg1.regs.priority0 = 5; bg1.regs.priority1 = 8; - bg2.regs.priority0 = 4; bg2.regs.priority1 = 7; - bg3.regs.priority0 = 1; bg3.regs.priority1 = 10; - sprite.regs.priority0 = 2; sprite.regs.priority1 = 3; sprite.regs.priority2 = 6; sprite.regs.priority3 = 9; - } else { - bg1.regs.priority0 = 6; bg1.regs.priority1 = 9; - bg2.regs.priority0 = 5; bg2.regs.priority1 = 8; - bg3.regs.priority0 = 1; bg3.regs.priority1 = 3; - sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 7; sprite.regs.priority3 = 10; - } - } break; + case 1: + bg1.regs.mode = Background::Mode::BPP4; + bg2.regs.mode = Background::Mode::BPP4; + bg3.regs.mode = Background::Mode::BPP2; + bg4.regs.mode = Background::Mode::Inactive; + if(regs.bg3_priority) { + bg1.regs.priority0 = 5; bg1.regs.priority1 = 8; + bg2.regs.priority0 = 4; bg2.regs.priority1 = 7; + bg3.regs.priority0 = 1; bg3.regs.priority1 = 10; + sprite.regs.priority0 = 2; sprite.regs.priority1 = 3; sprite.regs.priority2 = 6; sprite.regs.priority3 = 9; + } else { + bg1.regs.priority0 = 6; bg1.regs.priority1 = 9; + bg2.regs.priority0 = 5; bg2.regs.priority1 = 8; + bg3.regs.priority0 = 1; bg3.regs.priority1 = 3; + sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 7; sprite.regs.priority3 = 10; + } + break; - case 2: { - bg1.regs.mode = Background::Mode::BPP4; - bg2.regs.mode = Background::Mode::BPP4; - bg3.regs.mode = Background::Mode::Inactive; - bg4.regs.mode = Background::Mode::Inactive; - bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; - bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; - sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; - } break; + case 2: + bg1.regs.mode = Background::Mode::BPP4; + bg2.regs.mode = Background::Mode::BPP4; + bg3.regs.mode = Background::Mode::Inactive; + bg4.regs.mode = Background::Mode::Inactive; + bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; + bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; + sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; + break; - case 3: { - bg1.regs.mode = Background::Mode::BPP8; - bg2.regs.mode = Background::Mode::BPP4; - bg3.regs.mode = Background::Mode::Inactive; - bg4.regs.mode = Background::Mode::Inactive; - bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; - bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; - sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; - } break; + case 3: + bg1.regs.mode = Background::Mode::BPP8; + bg2.regs.mode = Background::Mode::BPP4; + bg3.regs.mode = Background::Mode::Inactive; + bg4.regs.mode = Background::Mode::Inactive; + bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; + bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; + sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; + break; - case 4: { - bg1.regs.mode = Background::Mode::BPP8; - bg2.regs.mode = Background::Mode::BPP2; - bg3.regs.mode = Background::Mode::Inactive; - bg4.regs.mode = Background::Mode::Inactive; - bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; - bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; - sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; - } break; + case 4: + bg1.regs.mode = Background::Mode::BPP8; + bg2.regs.mode = Background::Mode::BPP2; + bg3.regs.mode = Background::Mode::Inactive; + bg4.regs.mode = Background::Mode::Inactive; + bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; + bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; + sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; + break; - case 5: { - bg1.regs.mode = Background::Mode::BPP4; - bg2.regs.mode = Background::Mode::BPP2; - bg3.regs.mode = Background::Mode::Inactive; - bg4.regs.mode = Background::Mode::Inactive; - bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; - bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; - sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; - } break; + case 5: + bg1.regs.mode = Background::Mode::BPP4; + bg2.regs.mode = Background::Mode::BPP2; + bg3.regs.mode = Background::Mode::Inactive; + bg4.regs.mode = Background::Mode::Inactive; + bg1.regs.priority0 = 3; bg1.regs.priority1 = 7; + bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; + sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 8; + break; - case 6: { - bg1.regs.mode = Background::Mode::BPP4; + case 6: + bg1.regs.mode = Background::Mode::BPP4; + bg2.regs.mode = Background::Mode::Inactive; + bg3.regs.mode = Background::Mode::Inactive; + bg4.regs.mode = Background::Mode::Inactive; + bg1.regs.priority0 = 2; bg1.regs.priority1 = 5; + sprite.regs.priority0 = 1; sprite.regs.priority1 = 3; sprite.regs.priority2 = 4; sprite.regs.priority3 = 6; + break; + + case 7: + if(regs.mode7_extbg == false) { + bg1.regs.mode = Background::Mode::Mode7; bg2.regs.mode = Background::Mode::Inactive; bg3.regs.mode = Background::Mode::Inactive; bg4.regs.mode = Background::Mode::Inactive; - bg1.regs.priority0 = 2; bg1.regs.priority1 = 5; - sprite.regs.priority0 = 1; sprite.regs.priority1 = 3; sprite.regs.priority2 = 4; sprite.regs.priority3 = 6; - } break; - - case 7: { - if(regs.mode7_extbg == false) { - bg1.regs.mode = Background::Mode::Mode7; - bg2.regs.mode = Background::Mode::Inactive; - bg3.regs.mode = Background::Mode::Inactive; - bg4.regs.mode = Background::Mode::Inactive; - bg1.regs.priority0 = 2; bg1.regs.priority1 = 2; - sprite.regs.priority0 = 1; sprite.regs.priority1 = 3; sprite.regs.priority2 = 4; sprite.regs.priority3 = 5; - } else { - bg1.regs.mode = Background::Mode::Mode7; - bg2.regs.mode = Background::Mode::Mode7; - bg3.regs.mode = Background::Mode::Inactive; - bg4.regs.mode = Background::Mode::Inactive; - bg1.regs.priority0 = 3; bg1.regs.priority1 = 3; - bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; - sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 7; - } - } break; + bg1.regs.priority0 = 2; bg1.regs.priority1 = 2; + sprite.regs.priority0 = 1; sprite.regs.priority1 = 3; sprite.regs.priority2 = 4; sprite.regs.priority3 = 5; + } else { + bg1.regs.mode = Background::Mode::Mode7; + bg2.regs.mode = Background::Mode::Mode7; + bg3.regs.mode = Background::Mode::Inactive; + bg4.regs.mode = Background::Mode::Inactive; + bg1.regs.priority0 = 3; bg1.regs.priority1 = 3; + bg2.regs.priority0 = 1; bg2.regs.priority1 = 5; + sprite.regs.priority0 = 2; sprite.regs.priority1 = 4; sprite.regs.priority2 = 6; sprite.regs.priority3 = 7; + } + break; } } @@ -329,10 +329,10 @@ void PPU::mmio_w2115(uint8 data) { regs.vram_incmode = data & 0x80; regs.vram_mapping = (data >> 2) & 3; switch(data & 3) { - case 0: regs.vram_incsize = 1; break; - case 1: regs.vram_incsize = 32; break; - case 2: regs.vram_incsize = 128; break; - case 3: regs.vram_incsize = 128; break; + case 0: regs.vram_incsize = 1; break; + case 1: regs.vram_incsize = 32; break; + case 2: regs.vram_incsize = 128; break; + case 3: regs.vram_incsize = 128; break; } } @@ -797,36 +797,36 @@ uint8 PPU::mmio_read(unsigned addr) { cpu.synchronize_ppu(); switch(addr & 0xffff) { - case 0x2104: - case 0x2105: - case 0x2106: - case 0x2108: - case 0x2109: - case 0x210a: - case 0x2114: - case 0x2115: - case 0x2116: - case 0x2118: - case 0x2119: - case 0x211a: - case 0x2124: - case 0x2125: - case 0x2126: - case 0x2128: - case 0x2129: - case 0x212a: return regs.ppu1_mdr; - case 0x2134: return mmio_r2134(); //MPYL - case 0x2135: return mmio_r2135(); //MPYM - case 0x2136: return mmio_r2136(); //MYPH - case 0x2137: return mmio_r2137(); //SLHV - case 0x2138: return mmio_r2138(); //OAMDATAREAD - case 0x2139: return mmio_r2139(); //VMDATALREAD - case 0x213a: return mmio_r213a(); //VMDATAHREAD - case 0x213b: return mmio_r213b(); //CGDATAREAD - case 0x213c: return mmio_r213c(); //OPHCT - case 0x213d: return mmio_r213d(); //OPVCT - case 0x213e: return mmio_r213e(); //STAT77 - case 0x213f: return mmio_r213f(); //STAT78 + case 0x2104: + case 0x2105: + case 0x2106: + case 0x2108: + case 0x2109: + case 0x210a: + case 0x2114: + case 0x2115: + case 0x2116: + case 0x2118: + case 0x2119: + case 0x211a: + case 0x2124: + case 0x2125: + case 0x2126: + case 0x2128: + case 0x2129: + case 0x212a: return regs.ppu1_mdr; + case 0x2134: return mmio_r2134(); //MPYL + case 0x2135: return mmio_r2135(); //MPYM + case 0x2136: return mmio_r2136(); //MYPH + case 0x2137: return mmio_r2137(); //SLHV + case 0x2138: return mmio_r2138(); //OAMDATAREAD + case 0x2139: return mmio_r2139(); //VMDATALREAD + case 0x213a: return mmio_r213a(); //VMDATAHREAD + case 0x213b: return mmio_r213b(); //CGDATAREAD + case 0x213c: return mmio_r213c(); //OPHCT + case 0x213d: return mmio_r213d(); //OPVCT + case 0x213e: return mmio_r213e(); //STAT77 + case 0x213f: return mmio_r213f(); //STAT78 } return cpu.regs.mdr; @@ -836,58 +836,58 @@ void PPU::mmio_write(unsigned addr, uint8 data) { cpu.synchronize_ppu(); switch(addr & 0xffff) { - case 0x2100: return mmio_w2100(data); //INIDISP - case 0x2101: return mmio_w2101(data); //OBSEL - case 0x2102: return mmio_w2102(data); //OAMADDL - case 0x2103: return mmio_w2103(data); //OAMADDH - case 0x2104: return mmio_w2104(data); //OAMDATA - case 0x2105: return mmio_w2105(data); //BGMODE - case 0x2106: return mmio_w2106(data); //MOSAIC - case 0x2107: return mmio_w2107(data); //BG1SC - case 0x2108: return mmio_w2108(data); //BG2SC - case 0x2109: return mmio_w2109(data); //BG3SC - case 0x210a: return mmio_w210a(data); //BG4SC - case 0x210b: return mmio_w210b(data); //BG12NBA - case 0x210c: return mmio_w210c(data); //BG34NBA - case 0x210d: return mmio_w210d(data); //BG1HOFS - case 0x210e: return mmio_w210e(data); //BG1VOFS - case 0x210f: return mmio_w210f(data); //BG2HOFS - case 0x2110: return mmio_w2110(data); //BG2VOFS - case 0x2111: return mmio_w2111(data); //BG3HOFS - case 0x2112: return mmio_w2112(data); //BG3VOFS - case 0x2113: return mmio_w2113(data); //BG4HOFS - case 0x2114: return mmio_w2114(data); //BG4VOFS - case 0x2115: return mmio_w2115(data); //VMAIN - case 0x2116: return mmio_w2116(data); //VMADDL - case 0x2117: return mmio_w2117(data); //VMADDH - case 0x2118: return mmio_w2118(data); //VMDATAL - case 0x2119: return mmio_w2119(data); //VMDATAH - case 0x211a: return mmio_w211a(data); //M7SEL - case 0x211b: return mmio_w211b(data); //M7A - case 0x211c: return mmio_w211c(data); //M7B - case 0x211d: return mmio_w211d(data); //M7C - case 0x211e: return mmio_w211e(data); //M7D - case 0x211f: return mmio_w211f(data); //M7X - case 0x2120: return mmio_w2120(data); //M7Y - case 0x2121: return mmio_w2121(data); //CGADD - case 0x2122: return mmio_w2122(data); //CGDATA - case 0x2123: return mmio_w2123(data); //W12SEL - case 0x2124: return mmio_w2124(data); //W34SEL - case 0x2125: return mmio_w2125(data); //WOBJSEL - case 0x2126: return mmio_w2126(data); //WH0 - case 0x2127: return mmio_w2127(data); //WH1 - case 0x2128: return mmio_w2128(data); //WH2 - case 0x2129: return mmio_w2129(data); //WH3 - case 0x212a: return mmio_w212a(data); //WBGLOG - case 0x212b: return mmio_w212b(data); //WOBJLOG - case 0x212c: return mmio_w212c(data); //TM - case 0x212d: return mmio_w212d(data); //TS - case 0x212e: return mmio_w212e(data); //TMW - case 0x212f: return mmio_w212f(data); //TSW - case 0x2130: return mmio_w2130(data); //CGWSEL - case 0x2131: return mmio_w2131(data); //CGADDSUB - case 0x2132: return mmio_w2132(data); //COLDATA - case 0x2133: return mmio_w2133(data); //SETINI + case 0x2100: return mmio_w2100(data); //INIDISP + case 0x2101: return mmio_w2101(data); //OBSEL + case 0x2102: return mmio_w2102(data); //OAMADDL + case 0x2103: return mmio_w2103(data); //OAMADDH + case 0x2104: return mmio_w2104(data); //OAMDATA + case 0x2105: return mmio_w2105(data); //BGMODE + case 0x2106: return mmio_w2106(data); //MOSAIC + case 0x2107: return mmio_w2107(data); //BG1SC + case 0x2108: return mmio_w2108(data); //BG2SC + case 0x2109: return mmio_w2109(data); //BG3SC + case 0x210a: return mmio_w210a(data); //BG4SC + case 0x210b: return mmio_w210b(data); //BG12NBA + case 0x210c: return mmio_w210c(data); //BG34NBA + case 0x210d: return mmio_w210d(data); //BG1HOFS + case 0x210e: return mmio_w210e(data); //BG1VOFS + case 0x210f: return mmio_w210f(data); //BG2HOFS + case 0x2110: return mmio_w2110(data); //BG2VOFS + case 0x2111: return mmio_w2111(data); //BG3HOFS + case 0x2112: return mmio_w2112(data); //BG3VOFS + case 0x2113: return mmio_w2113(data); //BG4HOFS + case 0x2114: return mmio_w2114(data); //BG4VOFS + case 0x2115: return mmio_w2115(data); //VMAIN + case 0x2116: return mmio_w2116(data); //VMADDL + case 0x2117: return mmio_w2117(data); //VMADDH + case 0x2118: return mmio_w2118(data); //VMDATAL + case 0x2119: return mmio_w2119(data); //VMDATAH + case 0x211a: return mmio_w211a(data); //M7SEL + case 0x211b: return mmio_w211b(data); //M7A + case 0x211c: return mmio_w211c(data); //M7B + case 0x211d: return mmio_w211d(data); //M7C + case 0x211e: return mmio_w211e(data); //M7D + case 0x211f: return mmio_w211f(data); //M7X + case 0x2120: return mmio_w2120(data); //M7Y + case 0x2121: return mmio_w2121(data); //CGADD + case 0x2122: return mmio_w2122(data); //CGDATA + case 0x2123: return mmio_w2123(data); //W12SEL + case 0x2124: return mmio_w2124(data); //W34SEL + case 0x2125: return mmio_w2125(data); //WOBJSEL + case 0x2126: return mmio_w2126(data); //WH0 + case 0x2127: return mmio_w2127(data); //WH1 + case 0x2128: return mmio_w2128(data); //WH2 + case 0x2129: return mmio_w2129(data); //WH3 + case 0x212a: return mmio_w212a(data); //WBGLOG + case 0x212b: return mmio_w212b(data); //WOBJLOG + case 0x212c: return mmio_w212c(data); //TM + case 0x212d: return mmio_w212d(data); //TS + case 0x212e: return mmio_w212e(data); //TMW + case 0x212f: return mmio_w212f(data); //TSW + case 0x2130: return mmio_w2130(data); //CGWSEL + case 0x2131: return mmio_w2131(data); //CGADDSUB + case 0x2132: return mmio_w2132(data); //COLDATA + case 0x2133: return mmio_w2133(data); //SETINI } } diff --git a/higan/sfc/ppu/mmio/mmio.hpp b/higan/sfc/ppu/mmio/mmio.hpp index 7a30c3eb..4424342f 100755 --- a/higan/sfc/ppu/mmio/mmio.hpp +++ b/higan/sfc/ppu/mmio/mmio.hpp @@ -1,8 +1,8 @@ public: uint8 mmio_read(unsigned addr); void mmio_write(unsigned addr, uint8 data); -privileged: +privileged: struct { uint8 ppu1_mdr; uint8 ppu2_mdr; diff --git a/higan/sfc/ppu/ppu.cpp b/higan/sfc/ppu/ppu.cpp index 4505ac09..d18bc0dc 100755 --- a/higan/sfc/ppu/ppu.cpp +++ b/higan/sfc/ppu/ppu.cpp @@ -79,8 +79,8 @@ void PPU::add_clocks(unsigned clocks) { } void PPU::enable() { - function reader = { &PPU::mmio_read, (PPU*)&ppu }; - function writer = { &PPU::mmio_write, (PPU*)&ppu }; + function reader = {&PPU::mmio_read, (PPU*)&ppu}; + function writer = {&PPU::mmio_write, (PPU*)&ppu}; bus.map(reader, writer, 0x00, 0x3f, 0x2100, 0x213f); bus.map(reader, writer, 0x80, 0xbf, 0x2100, 0x213f); @@ -90,9 +90,9 @@ void PPU::power() { ppu1_version = config.ppu1.version; ppu2_version = config.ppu2.version; - for(auto &n : vram) n = random(0x00); - for(auto &n : oam) n = random(0x00); - for(auto &n : cgram) n = random(0x00); + for(auto& n : vram) n = random(0x00); + for(auto& n : oam) n = random(0x00); + for(auto& n : cgram) n = random(0x00); } void PPU::reset() { diff --git a/higan/sfc/ppu/ppu.hpp b/higan/sfc/ppu/ppu.hpp index 78146409..a4716794 100755 --- a/higan/sfc/ppu/ppu.hpp +++ b/higan/sfc/ppu/ppu.hpp @@ -22,8 +22,8 @@ struct PPU : Thread, public PPUcounter { ~PPU(); privileged: - uint32 *surface; - uint32 *output; + uint32* surface; + uint32* output; uint8 ppu1_version; uint8 ppu2_version; diff --git a/higan/sfc/ppu/screen/screen.cpp b/higan/sfc/ppu/screen/screen.cpp index 94fbdb3e..7906298e 100755 --- a/higan/sfc/ppu/screen/screen.cpp +++ b/higan/sfc/ppu/screen/screen.cpp @@ -179,7 +179,7 @@ void PPU::Screen::reset() { regs.color_b = random(0); } -PPU::Screen::Screen(PPU &self) : self(self) { +PPU::Screen::Screen(PPU& self) : self(self) { } #endif diff --git a/higan/sfc/ppu/screen/screen.hpp b/higan/sfc/ppu/screen/screen.hpp index ca861818..dc042496 100755 --- a/higan/sfc/ppu/screen/screen.hpp +++ b/higan/sfc/ppu/screen/screen.hpp @@ -1,5 +1,5 @@ struct Screen { - uint32 *output; + uint32* output; struct Regs { bool addsub_mode; @@ -41,8 +41,8 @@ struct Screen { uint16 fixed_color() const; void serialize(serializer&); - Screen(PPU &self); + Screen(PPU& self); - PPU &self; + PPU& self; friend class PPU; }; diff --git a/higan/sfc/ppu/serialization.cpp b/higan/sfc/ppu/serialization.cpp index 07a56a63..bba07305 100755 --- a/higan/sfc/ppu/serialization.cpp +++ b/higan/sfc/ppu/serialization.cpp @@ -1,6 +1,6 @@ #ifdef PPU_CPP -void PPUcounter::serialize(serializer &s) { +void PPUcounter::serialize(serializer& s) { s.integer(status.interlace); s.integer(status.field); s.integer(status.vcounter); @@ -12,7 +12,7 @@ void PPUcounter::serialize(serializer &s) { s.integer(history.index); } -void PPU::serialize(serializer &s) { +void PPU::serialize(serializer& s) { Thread::serialize(s); PPUcounter::serialize(s); @@ -90,7 +90,7 @@ void PPU::serialize(serializer &s) { screen.serialize(s); } -void PPU::Background::serialize(serializer &s) { +void PPU::Background::serialize(serializer& s) { s.integer(id); s.integer(regs.tiledata_addr); @@ -140,7 +140,7 @@ void PPU::Background::serialize(serializer &s) { s.array(data); } -void PPU::Sprite::serialize(serializer &s) { +void PPU::Sprite::serialize(serializer& s) { for(unsigned i = 0; i < 128; i++) { s.integer(list[i].x); s.integer(list[i].y); @@ -198,7 +198,7 @@ void PPU::Sprite::serialize(serializer &s) { s.integer(output.sub.palette); } -void PPU::Window::serialize(serializer &s) { +void PPU::Window::serialize(serializer& s) { s.integer(regs.bg1_one_enable); s.integer(regs.bg1_one_invert); s.integer(regs.bg1_two_enable); @@ -263,7 +263,7 @@ void PPU::Window::serialize(serializer &s) { s.integer(two); } -void PPU::Screen::serialize(serializer &s) { +void PPU::Screen::serialize(serializer& s) { s.integer(regs.addsub_mode); s.integer(regs.direct_color); diff --git a/higan/sfc/ppu/sprite/list.cpp b/higan/sfc/ppu/sprite/list.cpp index ae684a7d..4e35742b 100755 --- a/higan/sfc/ppu/sprite/list.cpp +++ b/higan/sfc/ppu/sprite/list.cpp @@ -36,10 +36,10 @@ void PPU::Sprite::synchronize() { unsigned PPU::Sprite::SpriteItem::width() const { if(size == 0) { - static unsigned width[] = { 8, 8, 8, 16, 16, 32, 16, 16 }; + static unsigned width[] = { 8, 8, 8, 16, 16, 32, 16, 16}; return width[ppu.sprite.regs.base_size]; } else { - static unsigned width[] = { 16, 32, 64, 32, 64, 64, 32, 32 }; + static unsigned width[] = {16, 32, 64, 32, 64, 64, 32, 32}; return width[ppu.sprite.regs.base_size]; } } @@ -47,10 +47,10 @@ unsigned PPU::Sprite::SpriteItem::width() const { unsigned PPU::Sprite::SpriteItem::height() const { if(size == 0) { if(ppu.sprite.regs.interlace && ppu.sprite.regs.base_size >= 6) return 16; - static unsigned height[] = { 8, 8, 8, 16, 16, 32, 32, 32 }; + static unsigned height[] = { 8, 8, 8, 16, 16, 32, 32, 32}; return height[ppu.sprite.regs.base_size]; } else { - static unsigned height[] = { 16, 32, 64, 32, 64, 64, 64, 32 }; + static unsigned height[] = {16, 32, 64, 32, 64, 64, 64, 32}; return height[ppu.sprite.regs.base_size]; } } diff --git a/higan/sfc/ppu/sprite/sprite.cpp b/higan/sfc/ppu/sprite/sprite.cpp index 66c71103..a88016e0 100755 --- a/higan/sfc/ppu/sprite/sprite.cpp +++ b/higan/sfc/ppu/sprite/sprite.cpp @@ -45,7 +45,7 @@ void PPU::Sprite::scanline() { } } -bool PPU::Sprite::on_scanline(SpriteItem &sprite) { +bool PPU::Sprite::on_scanline(SpriteItem& sprite) { if(sprite.x > 256 && (sprite.x + sprite.width() - 1) < 512) return false; signed height = (regs.interlace == false ? sprite.height() : (sprite.height() >> 1)); if(t.y >= sprite.y && t.y < (sprite.y + height)) return true; @@ -217,7 +217,7 @@ void PPU::Sprite::reset() { output.sub.priority = 0; } -PPU::Sprite::Sprite(PPU &self) : self(self) { +PPU::Sprite::Sprite(PPU& self) : self(self) { } #endif diff --git a/higan/sfc/ppu/sprite/sprite.hpp b/higan/sfc/ppu/sprite/sprite.hpp index 7735f358..6abb2f0f 100755 --- a/higan/sfc/ppu/sprite/sprite.hpp +++ b/higan/sfc/ppu/sprite/sprite.hpp @@ -75,8 +75,8 @@ struct Sprite { bool on_scanline(SpriteItem&); void serialize(serializer&); - Sprite(PPU &self); + Sprite(PPU& self); - PPU &self; + PPU& self; friend class PPU; }; diff --git a/higan/sfc/ppu/window/window.cpp b/higan/sfc/ppu/window/window.cpp index dec05876..2288800d 100755 --- a/higan/sfc/ppu/window/window.cpp +++ b/higan/sfc/ppu/window/window.cpp @@ -63,17 +63,17 @@ void PPU::Window::run() { ); switch(regs.col_main_mask) { - case 0: main = true; break; - case 1: break; - case 2: main = !main; break; - case 3: main = false; break; + case 0: main = true; break; + case 1: break; + case 2: main = !main; break; + case 3: main = false; break; } switch(regs.col_sub_mask) { - case 0: sub = true; break; - case 1: break; - case 2: sub = !sub; break; - case 3: sub = false; break; + case 0: sub = true; break; + case 1: break; + case 2: sub = !sub; break; + case 3: sub = false; break; } output.main.color_enable = main; @@ -81,7 +81,7 @@ void PPU::Window::run() { } void PPU::Window::test( - bool &main, bool &sub, + bool& main, bool& sub, bool one_enable, bool one_invert, bool two_enable, bool two_invert, uint8 mask, bool main_enable, bool sub_enable @@ -96,11 +96,13 @@ void PPU::Window::test( output = one; } else if(one_enable == false && two_enable == true) { output = two; - } else switch(mask) { + } else { + switch(mask) { case 0: output = (one | two) == 1; break; case 1: output = (one & two) == 1; break; case 2: output = (one ^ two) == 1; break; case 3: output = (one ^ two) == 0; break; + } } main = main_enable ? output : false; @@ -163,7 +165,7 @@ void PPU::Window::reset() { two = 0; } -PPU::Window::Window(PPU &self) : self(self) { +PPU::Window::Window(PPU& self) : self(self) { } #endif diff --git a/higan/sfc/ppu/window/window.hpp b/higan/sfc/ppu/window/window.hpp index e1fcd4a4..56af8a79 100755 --- a/higan/sfc/ppu/window/window.hpp +++ b/higan/sfc/ppu/window/window.hpp @@ -74,15 +74,15 @@ struct Window { void reset(); void test( - bool &main, bool &sub, + bool& main, bool& sub, bool one_enable, bool one_invert, bool two_enable, bool two_invert, uint8 mask, bool main_enable, bool sub_enable ); void serialize(serializer&); - Window(PPU &self); + Window(PPU& self); - PPU &self; + PPU& self; friend class PPU; }; diff --git a/higan/sfc/random/random.cpp b/higan/sfc/random/random.cpp index a92a980a..9923e27b 100755 --- a/higan/sfc/random/random.cpp +++ b/higan/sfc/random/random.cpp @@ -9,7 +9,7 @@ unsigned Random::operator()(unsigned result) { return iter = (iter >> 1) ^ (((iter & 1) - 1) & 0xedb88320); } -void Random::serialize(serializer &s) { +void Random::serialize(serializer& s) { s.integer(iter); } diff --git a/higan/sfc/scheduler/scheduler.cpp b/higan/sfc/scheduler/scheduler.cpp index 0576eee5..7e259205 100755 --- a/higan/sfc/scheduler/scheduler.cpp +++ b/higan/sfc/scheduler/scheduler.cpp @@ -24,8 +24,8 @@ void Scheduler::init() { } Scheduler::Scheduler() { - host_thread = 0; - thread = 0; + host_thread = nullptr; + thread = nullptr; exit_reason = ExitReason::UnknownEvent; } diff --git a/higan/sfc/sfc.hpp b/higan/sfc/sfc.hpp index 501a7202..1a1fdada 100755 --- a/higan/sfc/sfc.hpp +++ b/higan/sfc/sfc.hpp @@ -39,7 +39,7 @@ namespace SuperFamicom { clock = 0; } - inline void serialize(serializer &s) { + inline void serialize(serializer& s) { s.integer(frequency); s.integer(clock); } diff --git a/higan/sfc/slot/sufamiturbo/serialization.cpp b/higan/sfc/slot/sufamiturbo/serialization.cpp index 3589f011..3586c918 100644 --- a/higan/sfc/slot/sufamiturbo/serialization.cpp +++ b/higan/sfc/slot/sufamiturbo/serialization.cpp @@ -1,6 +1,6 @@ #ifdef SUFAMITURBO_CPP -void SufamiTurboCartridge::serialize(serializer &s) { +void SufamiTurboCartridge::serialize(serializer& s) { s.array(ram.data(), ram.size()); } diff --git a/higan/sfc/smp/serialization.cpp b/higan/sfc/smp/serialization.cpp index 339df26d..57a3b472 100755 --- a/higan/sfc/smp/serialization.cpp +++ b/higan/sfc/smp/serialization.cpp @@ -1,6 +1,6 @@ #ifdef SMP_CPP -void SMP::serialize(serializer &s) { +void SMP::serialize(serializer& s) { SPC700::serialize(s); Thread::serialize(s); diff --git a/higan/sfc/smp/smp.cpp b/higan/sfc/smp/smp.cpp index 84881245..fd418020 100755 --- a/higan/sfc/smp/smp.cpp +++ b/higan/sfc/smp/smp.cpp @@ -60,7 +60,7 @@ void SMP::reset() { regs.s = 0xef; regs.p = 0x02; - for(auto &n : apuram) n = random(0x00); + for(auto& n : apuram) n = random(0x00); apuram[0x00f4] = 0x00; apuram[0x00f5] = 0x00; apuram[0x00f6] = 0x00; @@ -114,7 +114,7 @@ void SMP::reset() { } SMP::SMP() { - for(auto &byte : iplrom) byte = 0; + for(auto& byte : iplrom) byte = 0; } SMP::~SMP() { diff --git a/higan/sfc/smp/timing.cpp b/higan/sfc/smp/timing.cpp index 3709ba98..a3eb0691 100755 --- a/higan/sfc/smp/timing.cpp +++ b/higan/sfc/smp/timing.cpp @@ -21,10 +21,10 @@ void SMP::cycle_edge() { //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 + 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 } } diff --git a/higan/sfc/system/audio.cpp b/higan/sfc/system/audio.cpp index ad469899..3734d3f1 100755 --- a/higan/sfc/system/audio.cpp +++ b/higan/sfc/system/audio.cpp @@ -27,7 +27,7 @@ void Audio::sample(int16 lsample, int16 rsample) { } void Audio::coprocessor_sample(int16 lsample, int16 rsample) { - signed samples[] = { lsample, rsample }; + signed samples[] = {lsample, rsample}; dspaudio.sample(samples); while(dspaudio.pending()) { dspaudio.read(samples); diff --git a/higan/sfc/system/input.cpp b/higan/sfc/system/input.cpp index 894de0e7..692a7ee4 100755 --- a/higan/sfc/system/input.cpp +++ b/higan/sfc/system/input.cpp @@ -3,7 +3,7 @@ Input input; void Input::connect(bool port, Input::Device id) { - Controller *&controller = (port == Controller::Port1 ? port1 : port2); + Controller*& controller = (port == Controller::Port1 ? port1 : port2); if(controller) { delete controller; controller = nullptr; @@ -26,7 +26,7 @@ void Input::connect(bool port, Input::Device id) { } } -Input::Input() : port1(nullptr), port2(nullptr) { +Input::Input() { connect(Controller::Port1, Input::Device::Joypad); connect(Controller::Port2, Input::Device::Joypad); } diff --git a/higan/sfc/system/input.hpp b/higan/sfc/system/input.hpp index 1c28e433..170cf797 100755 --- a/higan/sfc/system/input.hpp +++ b/higan/sfc/system/input.hpp @@ -28,8 +28,8 @@ struct Input { X = 0, Y = 1, Trigger = 2, Start = 3, }; - Controller *port1; - Controller *port2; + Controller* port1 = nullptr; + Controller* port2 = nullptr; void connect(bool port, Input::Device id); Input(); diff --git a/higan/sfc/system/serialization.cpp b/higan/sfc/system/serialization.cpp index eaf14b61..a29a9eeb 100755 --- a/higan/sfc/system/serialization.cpp +++ b/higan/sfc/system/serialization.cpp @@ -20,7 +20,7 @@ serializer System::serialize() { return s; } -bool System::unserialize(serializer &s) { +bool System::unserialize(serializer& s) { unsigned signature, version; char hash[64], description[512], profile[16]; @@ -43,12 +43,12 @@ bool System::unserialize(serializer &s) { //internal //======== -void System::serialize(serializer &s) { +void System::serialize(serializer& s) { s.integer((unsigned&)region); s.integer((unsigned&)expansion); } -void System::serialize_all(serializer &s) { +void System::serialize_all(serializer& s) { cartridge.serialize(s); system.serialize(s); random.serialize(s); diff --git a/higan/sfc/system/system.cpp b/higan/sfc/system/system.cpp index 69f6eead..0455d3ad 100755 --- a/higan/sfc/system/system.cpp +++ b/higan/sfc/system/system.cpp @@ -45,7 +45,7 @@ void System::runtosave() { } for(unsigned i = 0; i < cpu.coprocessors.size(); i++) { - auto &chip = *cpu.coprocessors[i]; + auto& chip = *cpu.coprocessors[i]; scheduler.thread = chip.thread; runthreadtosave(); } diff --git a/higan/sfc/system/video.cpp b/higan/sfc/system/video.cpp index fbb39ea1..8dffe148 100755 --- a/higan/sfc/system/video.cpp +++ b/higan/sfc/system/video.cpp @@ -48,7 +48,7 @@ const uint8_t Video::cursor[15 * 15] = { }; void Video::draw_cursor(uint16_t color, int x, int y) { - uint32_t *data = (uint32_t*)ppu.output; + uint32_t* data = (uint32_t*)ppu.output; if(ppu.interlace() && ppu.field()) data += 512; for(int cy = 0; cy < 15; cy++) { @@ -92,7 +92,7 @@ void Video::update() { break; } - uint32_t *data = (uint32_t*)ppu.output; + uint32_t* data = (uint32_t*)ppu.output; if(ppu.interlace() && ppu.field()) data += 512; if(hires) { @@ -129,7 +129,7 @@ void Video::scanline() { void Video::init() { hires = false; - for(auto &n : line_width) n = 256; + for(auto& n : line_width) n = 256; } #endif diff --git a/higan/sfc/system/video.hpp b/higan/sfc/system/video.hpp index a97e8f46..5d857c4b 100755 --- a/higan/sfc/system/video.hpp +++ b/higan/sfc/system/video.hpp @@ -1,5 +1,5 @@ struct Video { - unsigned *palette; + unsigned* palette; void generate_palette(); Video(); ~Video(); diff --git a/higan/target-ethos/ethos.cpp b/higan/target-ethos/ethos.cpp index 817b7760..f26d0d21 100755 --- a/higan/target-ethos/ethos.cpp +++ b/higan/target-ethos/ethos.cpp @@ -14,7 +14,7 @@ bool Program::focused() { return config->input.focus.allow || presentation->focused(); } -string Program::path(const string& name) { +string Program::path(string name) { string path = {basepath, name}; if(file::exists(path) || directory::exists(path)) return path; path = {userpath, name}; diff --git a/higan/target-ethos/ethos.hpp b/higan/target-ethos/ethos.hpp index 5d296846..d61c12ed 100755 --- a/higan/target-ethos/ethos.hpp +++ b/higan/target-ethos/ethos.hpp @@ -50,7 +50,7 @@ struct Program { string monospaceFont; bool focused(); - string path(const string &filename); + string path(string filename); void main(); void bootstrap(); Program(int argc, char** argv); diff --git a/higan/target-ethos/general/browser.cpp b/higan/target-ethos/general/browser.cpp index c0cb9f43..9abea773 100755 --- a/higan/target-ethos/general/browser.cpp +++ b/higan/target-ethos/general/browser.cpp @@ -95,7 +95,7 @@ void Browser::bootstrap() { config.save(program->path("paths.bml")); } -string Browser::select(const string& title, const string& extension) { +string Browser::select(string title, string extension) { this->extension = extension; string path; @@ -122,7 +122,7 @@ string Browser::select(const string& title, const string& extension) { return outputFilename; } -void Browser::setPath(const string& path, unsigned selection) { +void Browser::setPath(string path, unsigned selection) { //save path for next browser selection for(auto& folder : folderList) { if(folder.extension == extension) folder.path = path; diff --git a/higan/target-ethos/general/browser.hpp b/higan/target-ethos/general/browser.hpp index 3de8168c..c203d22a 100755 --- a/higan/target-ethos/general/browser.hpp +++ b/higan/target-ethos/general/browser.hpp @@ -9,7 +9,7 @@ struct Browser : Window { Label filterLabel; Button openButton; - string select(const string& title, const string& extension); + string select(string title, string extension); void saveConfiguration(); void synchronize(); void bootstrap(); @@ -30,7 +30,7 @@ private: string path; lstring filenameList; - void setPath(const string& path, unsigned selection = 0); + void setPath(string path, unsigned selection = 0); void fileListActivate(); }; diff --git a/higan/target-ethos/general/presentation.cpp b/higan/target-ethos/general/presentation.cpp index 5c7d873f..997d5339 100755 --- a/higan/target-ethos/general/presentation.cpp +++ b/higan/target-ethos/general/presentation.cpp @@ -42,7 +42,7 @@ void Presentation::synchronize() { } } -void Presentation::setSystemName(const string& name) { +void Presentation::setSystemName(string name) { if(active) active->menu.setText(name); } diff --git a/higan/target-ethos/general/presentation.hpp b/higan/target-ethos/general/presentation.hpp index 7564cd68..c7cbbeb1 100755 --- a/higan/target-ethos/general/presentation.hpp +++ b/higan/target-ethos/general/presentation.hpp @@ -52,7 +52,7 @@ struct Presentation : Window { Item synchronizeTime; void synchronize(); - void setSystemName(const string& name); + void setSystemName(string name); void loadShaders(); void bootstrap(); Presentation(); diff --git a/higan/target-ethos/input/input.cpp b/higan/target-ethos/input/input.cpp index ef9e6093..f86abc34 100755 --- a/higan/target-ethos/input/input.cpp +++ b/higan/target-ethos/input/input.cpp @@ -27,7 +27,7 @@ void AbstractInput::bind() { } } -bool AbstractInput::append(const string& encode) { +bool AbstractInput::append(string encode) { if(mapping.position(encode)) return true; //mapping already bound if(mapping.empty() || mapping == "None") mapping = encode; //remove "None" else mapping.append(",", encode); //add to existing mapping list diff --git a/higan/target-ethos/input/input.hpp b/higan/target-ethos/input/input.hpp index c2c0fe12..38eb0273 100755 --- a/higan/target-ethos/input/input.hpp +++ b/higan/target-ethos/input/input.hpp @@ -11,7 +11,7 @@ struct AbstractInput { vector inputList; void bind(); - bool append(const string& mapping); + bool append(string mapping); virtual bool bind(unsigned scancode, int16_t value) = 0; virtual int16_t poll() = 0; AbstractInput(); diff --git a/higan/target-ethos/interface/interface.cpp b/higan/target-ethos/interface/interface.cpp index f7fe391c..8891c405 100755 --- a/higan/target-ethos/interface/interface.cpp +++ b/higan/target-ethos/interface/interface.cpp @@ -1,15 +1,15 @@ #include "../ethos.hpp" Interface* interface = nullptr; -void Interface::loadRequest(unsigned id, const string &name, const string& type) { +void Interface::loadRequest(unsigned id, string name, string type) { return utility->loadRequest(id, name, type); } -void Interface::loadRequest(unsigned id, const string& path) { +void Interface::loadRequest(unsigned id, string path) { return utility->loadRequest(id, path); } -void Interface::saveRequest(unsigned id, const string& path) { +void Interface::saveRequest(unsigned id, string path) { return utility->saveRequest(id, path); } @@ -123,6 +123,6 @@ string Interface::server() { }; } -void Interface::notify(const string& text) { +void Interface::notify(string text) { MessageWindow().setParent(*presentation).setText(text).information(); } diff --git a/higan/target-ethos/interface/interface.hpp b/higan/target-ethos/interface/interface.hpp index ff576f99..15ca39be 100755 --- a/higan/target-ethos/interface/interface.hpp +++ b/higan/target-ethos/interface/interface.hpp @@ -1,7 +1,7 @@ struct Interface : Emulator::Interface::Bind { - void loadRequest(unsigned id, const string& name, const string& type); - void loadRequest(unsigned id, const string& path); - void saveRequest(unsigned id, const string& path); + void loadRequest(unsigned id, string name, string type); + void loadRequest(unsigned id, string path); + void saveRequest(unsigned id, string path); uint32_t videoColor(unsigned source, uint16_t red, uint16_t green, uint16_t blue); void videoRefresh(const uint32_t* data, unsigned pitch, unsigned width, unsigned height); void audioSample(int16_t lsample, int16_t rsample); @@ -9,7 +9,7 @@ struct Interface : Emulator::Interface::Bind { unsigned dipSettings(const Markup::Node& node); string path(unsigned group); string server(); - void notify(const string& text); + void notify(string text); }; extern Interface* interface; diff --git a/higan/target-ethos/settings/timing.cpp b/higan/target-ethos/settings/timing.cpp index 8e66a2a4..3730ccbd 100755 --- a/higan/target-ethos/settings/timing.cpp +++ b/higan/target-ethos/settings/timing.cpp @@ -91,7 +91,7 @@ void TimingSettings::analyzeStart() { analysis.systemTime = time(0); } -bool TimingSettings::analyzeTick(const string& type) { +bool TimingSettings::analyzeTick(string type) { analysis.counter++; time_t systemTime = time(0); diff --git a/higan/target-ethos/settings/timing.hpp b/higan/target-ethos/settings/timing.hpp index 2a761f0a..81bf00d6 100755 --- a/higan/target-ethos/settings/timing.hpp +++ b/higan/target-ethos/settings/timing.hpp @@ -18,7 +18,7 @@ struct TimingSettings : SettingsLayout { void analyzeAudioFrequency(); void analyzeStart(); - bool analyzeTick(const string& type); + bool analyzeTick(string type); void analyzeStop(); TimingSettings(); diff --git a/higan/target-ethos/tools/cheat-editor.cpp b/higan/target-ethos/tools/cheat-editor.cpp index b1a9168e..b477386b 100755 --- a/higan/target-ethos/tools/cheat-editor.cpp +++ b/higan/target-ethos/tools/cheat-editor.cpp @@ -74,7 +74,7 @@ void CheatEditor::refresh() { string desc = cheat[n].code.empty() && cheat[n].desc.empty() ? "(empty)" : cheat[n].desc; lstring codes = code.split("+"); if(codes.size() > 1) code = {codes[0], "+..."}; - cheatList.modify(n, decimal<3>(1 + n), code, desc); + cheatList.modify(n, format<3>(1 + n), code, desc); } cheatList.autoSizeColumns(); } @@ -124,7 +124,7 @@ void CheatEditor::updateDesc() { refresh(); } -bool CheatEditor::load(const string& filename) { +bool CheatEditor::load(string filename) { string data = string::read(filename); if(data.empty()) return false; @@ -143,7 +143,7 @@ bool CheatEditor::load(const string& filename) { return true; } -bool CheatEditor::save(const string& filename) { +bool CheatEditor::save(string filename) { signed lastSave = -1; for(signed n = 127; n >= 0; n--) { if(!cheat[n].code.empty() || !cheat[n].desc.empty()) { @@ -171,7 +171,7 @@ bool CheatEditor::save(const string& filename) { return true; } -bool CheatEditor::import(const string& code, const string& desc) { +bool CheatEditor::import(string code, string desc) { for(unsigned n = 0; n < Codes; n++) { if(cheat[n].code.empty() && cheat[n].desc.empty()) { cheatList.setChecked(n, false); diff --git a/higan/target-ethos/tools/cheat-editor.hpp b/higan/target-ethos/tools/cheat-editor.hpp index 9c3d99fb..b9548343 100755 --- a/higan/target-ethos/tools/cheat-editor.hpp +++ b/higan/target-ethos/tools/cheat-editor.hpp @@ -18,9 +18,9 @@ struct CheatEditor : Window { void updateCode(); void updateDesc(); - bool load(const string& filename); - bool save(const string& filename); - bool import(const string& code, const string& desc); + bool load(string filename); + bool save(string filename); + bool import(string code, string desc); void update(); void refresh(); diff --git a/higan/target-ethos/tools/state-manager.cpp b/higan/target-ethos/tools/state-manager.cpp index d9d49d66..07c51b36 100755 --- a/higan/target-ethos/tools/state-manager.cpp +++ b/higan/target-ethos/tools/state-manager.cpp @@ -8,7 +8,7 @@ StateManager::StateManager() { layout.setMargin(5); stateList.setHeaderText("Slot", "Description"); stateList.setHeaderVisible(); - for(unsigned n = 0; n < Slots; n++) stateList.append(decimal<2>(1 + n), "(empty)"); + for(unsigned n = 0; n < Slots; n++) stateList.append(format<2>(1 + n), "(empty)"); stateList.autoSizeColumns(); descLabel.setText("Description:"); saveButton.setText("Save"); @@ -59,7 +59,7 @@ void StateManager::synchronize() { void StateManager::refresh() { for(unsigned n = 0; n < Slots; n++) { - stateList.modify(n, decimal<2>(1 + n), slotLoadDescription(n)); + stateList.modify(n, format<2>(1 + n), slotLoadDescription(n)); } stateList.autoSizeColumns(); } @@ -70,7 +70,7 @@ void StateManager::reset() { refresh(); } -bool StateManager::load(const string& filename, unsigned revision) { +bool StateManager::load(string filename, unsigned revision) { for(auto& slot : this->slot) slot = serializer(); synchronize(); @@ -93,7 +93,7 @@ bool StateManager::load(const string& filename, unsigned revision) { return true; } -bool StateManager::save(const string& filename, unsigned revision) { +bool StateManager::save(string filename, unsigned revision) { bool hasSave = false; for(auto& slot : this->slot) hasSave |= slot.capacity() > 0; if(hasSave == false) { diff --git a/higan/target-ethos/tools/state-manager.hpp b/higan/target-ethos/tools/state-manager.hpp index 934de705..f5474ab5 100755 --- a/higan/target-ethos/tools/state-manager.hpp +++ b/higan/target-ethos/tools/state-manager.hpp @@ -12,8 +12,8 @@ struct StateManager : Window { Button eraseButton; void reset(); - bool load(const string& filename, unsigned revision); - bool save(const string& filename, unsigned revision); + bool load(string filename, unsigned revision); + bool save(string filename, unsigned revision); void slotLoad(); void slotSave(); diff --git a/higan/target-ethos/utility/utility.cpp b/higan/target-ethos/utility/utility.cpp index 432c2af1..e2fe173c 100755 --- a/higan/target-ethos/utility/utility.cpp +++ b/higan/target-ethos/utility/utility.cpp @@ -45,7 +45,7 @@ void Utility::loadMedia(Emulator::Interface* emulator, Emulator::Interface::Medi } //load base cartridge -void Utility::loadMedia(Emulator::Interface* emulator, Emulator::Interface::Media& media, const string& pathname) { +void Utility::loadMedia(Emulator::Interface* emulator, Emulator::Interface::Media& media, string pathname) { unload(); setInterface(emulator); path(0) = program->path({media.name, ".sys/"}); @@ -61,7 +61,7 @@ void Utility::loadMedia(Emulator::Interface* emulator, Emulator::Interface::Medi } //request from emulation core to load non-volatile media folder -void Utility::loadRequest(unsigned id, const string& name, const string& type) { +void Utility::loadRequest(unsigned id, string name, string type) { string pathname = browser->select({"Load ", name}, type); if(pathname.empty()) return; path(id) = pathname; @@ -71,7 +71,7 @@ void Utility::loadRequest(unsigned id, const string& name, const string& type) { } //request from emulation core to load non-volatile media file -void Utility::loadRequest(unsigned id, const string& path) { +void Utility::loadRequest(unsigned id, string path) { string pathname = {this->path(system().group(id)), path}; if(file::exists(pathname) == false) return; mmapstream stream(pathname); @@ -79,7 +79,7 @@ void Utility::loadRequest(unsigned id, const string& path) { } //request from emulation core to save non-volatile media file -void Utility::saveRequest(unsigned id, const string& path) { +void Utility::saveRequest(unsigned id, string path) { string pathname = {this->path(system().group(id)), path}; filestream stream(pathname, file::mode::write); return system().save(id, stream); @@ -294,11 +294,11 @@ void Utility::updateStatus() { } } -void Utility::setStatusText(const string& text) { +void Utility::setStatusText(string text) { statusText = text; } -void Utility::showMessage(const string& message) { +void Utility::showMessage(string message) { statusTime = time(0); statusMessage = message; } diff --git a/higan/target-ethos/utility/utility.hpp b/higan/target-ethos/utility/utility.hpp index a05dde0a..1ba64fc3 100755 --- a/higan/target-ethos/utility/utility.hpp +++ b/higan/target-ethos/utility/utility.hpp @@ -3,11 +3,11 @@ struct Utility { void loadMedia(string pathname); void loadMedia(Emulator::Interface* emulator, Emulator::Interface::Media& media); - void loadMedia(Emulator::Interface* emulator, Emulator::Interface::Media& media, const string& pathname); + void loadMedia(Emulator::Interface* emulator, Emulator::Interface::Media& media, string pathname); - void loadRequest(unsigned id, const string& name, const string& type); - void loadRequest(unsigned id, const string& path); - void saveRequest(unsigned id, const string& path); + void loadRequest(unsigned id, string name, string type); + void loadRequest(unsigned id, string path); + void saveRequest(unsigned id, string path); void connect(unsigned port, unsigned device); void power(); @@ -27,8 +27,8 @@ struct Utility { void toggleFullScreen(); void updateStatus(); - void setStatusText(const string& text); - void showMessage(const string& message); + void setStatusText(string text); + void showMessage(string message); Utility(); diff --git a/higan/target-ethos/window/window.cpp b/higan/target-ethos/window/window.cpp index 318a35a9..94753849 100755 --- a/higan/target-ethos/window/window.cpp +++ b/higan/target-ethos/window/window.cpp @@ -1,7 +1,7 @@ #include "../ethos.hpp" -WindowManager *windowManager = nullptr; +WindowManager* windowManager = nullptr; -void WindowManager::append(Window *window, const string &name) { +void WindowManager::append(Window* window, string name) { window->setMenuFont(program->normalFont); window->setWidgetFont(program->normalFont); window->setStatusFont(program->boldFont); @@ -13,27 +13,27 @@ void WindowManager::loadGeometry() { if(initialized == false) { initialized = true; Configuration::Node geometry; - for(auto &window : windowList) { + for(auto& window : windowList) { geometry.append(window.geometry, window.name); } config.append(geometry, "Geometry"); } config.load(program->path("geometry.bml")); config.save(program->path("geometry.bml")); - for(auto &window : windowList) { + for(auto& window : windowList) { window.window->setGeometry(window.geometry); } } void WindowManager::saveGeometry() { - for(auto &window : windowList) { + for(auto& window : windowList) { window.geometry = window.window->geometry().text(); } config.save(program->path("geometry.bml")); } void WindowManager::hideAll() { - for(auto &window : windowList) { + for(auto& window : windowList) { window.window->setVisible(false); } } diff --git a/higan/target-ethos/window/window.hpp b/higan/target-ethos/window/window.hpp index 13cbb9b9..caa81e5d 100755 --- a/higan/target-ethos/window/window.hpp +++ b/higan/target-ethos/window/window.hpp @@ -1,12 +1,12 @@ struct WindowManager { struct WindowList { - Window *window; + Window* window; string name; string geometry; }; vector windowList; - void append(Window *window, const string &name); + void append(Window* window, string name); void loadGeometry(); void saveGeometry(); void hideAll(); @@ -15,4 +15,4 @@ private: Configuration::Document config; }; -extern WindowManager *windowManager; +extern WindowManager* windowManager;