From 08257941b8c71ad4484b014bb1f736354e3820f1 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Tue, 30 Jul 2024 14:52:21 -0230 Subject: [PATCH] Fix some clang-tidy warnings. --- src/common/PJoystickHandler.cxx | 2 +- src/emucore/CartELF.cxx | 39 ++++++------ src/emucore/Console.cxx | 2 +- src/emucore/CortexM0.cxx | 79 +++++++++++++++++-------- src/emucore/elf/BusTransactionQueue.cxx | 5 +- src/emucore/elf/ElfEnvironment.cxx | 21 +++++++ src/emucore/elf/ElfUtil.cxx | 2 + src/emucore/elf/VcsLib.cxx | 28 +++------ src/emucore/elf/VcsLib.hxx | 9 ++- 9 files changed, 120 insertions(+), 67 deletions(-) diff --git a/src/common/PJoystickHandler.cxx b/src/common/PJoystickHandler.cxx index 59216fbc4..c7dd7e4bd 100644 --- a/src/common/PJoystickHandler.cxx +++ b/src/common/PJoystickHandler.cxx @@ -166,7 +166,7 @@ void PhysicalJoystickHandler::addToDatabase(const PhysicalJoystickPtr& stick) } else // adding for the first time { - StickInfo info("", stick); + const StickInfo info("", stick); myDatabase.emplace(stick->name, info); setStickDefaultMapping(stick->ID, Event::NoType, EventMode::kMenuMode); setStickDefaultMapping(stick->ID, Event::NoType, EventMode::kEmulationMode); diff --git a/src/emucore/CartELF.cxx b/src/emucore/CartELF.cxx index 8613956ac..24091b3df 100644 --- a/src/emucore/CartELF.cxx +++ b/src/emucore/CartELF.cxx @@ -151,7 +151,7 @@ namespace { void writeDebugBinary(const ElfLinker& linker) { - constexpr size_t IMAGE_SIZE = 4 * 0x00100000; + constexpr size_t IMAGE_SIZE = 4L * 0x00100000; static const char* IMAGE_FILE_NAME = "elf_executable_image.bin"; auto binary = make_unique(IMAGE_SIZE); @@ -168,10 +168,10 @@ namespace { std::ofstream binaryFile; binaryFile.open(IMAGE_FILE_NAME); - binaryFile.write(reinterpret_cast(binary.get()), 4 * 0x00100000); + binaryFile.write(reinterpret_cast(binary.get()), 4L * 0x00100000); } - cout << "wrote executable image to " << IMAGE_FILE_NAME << std::endl; + cout << "wrote executable image to " << IMAGE_FILE_NAME << '\n'; } #endif } // namespace @@ -194,7 +194,6 @@ CartridgeELF::CartridgeELF(const ByteBuffer& image, size_t size, string_view md5 setupMemoryMap(); } - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CartridgeELF::~CartridgeELF() = default; @@ -286,6 +285,7 @@ bool CartridgeELF::poke(uInt16 address, uInt8 value) return false; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeELF::consoleChanged(ConsoleTiming timing) { myConsoleTiming = timing; @@ -325,6 +325,7 @@ CortexM0::err_t CartridgeELF::BusFallbackDelegate::fetch16( : CortexM0::errIntrinsic(CortexM0::ERR_UNMAPPED_FETCH16, address); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CartridgeELF::BusFallbackDelegate::read8(uInt32 address, uInt8& value, CortexM0& cortex) { // TODO: remove this hack and replace it with a setting. @@ -332,6 +333,7 @@ CortexM0::err_t CartridgeELF::BusFallbackDelegate::read8(uInt32 address, uInt8& return 0; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - inline uInt64 CartridgeELF::getArmCycles() const { return myCortexEmu.getCycles() + myArmCyclesOffset; @@ -393,16 +395,16 @@ void CartridgeELF::parseAndLinkElf() if (myLinker->getSegmentSize(ElfLinker::SegmentType::rodata) > RODATA_SIZE) throw runtime_error("rodata segment too large"); - #ifdef DUMP_ELF - dumpLinkage(elfParser, *myLinker); +#ifdef DUMP_ELF + dumpLinkage(elfParser, *myLinker); - cout - << "\nARM entrypoint: 0x" - << std::hex << std::setw(8) << std::setfill('0') << myArmEntrypoint << std::dec - << '\n'; + cout + << "\nARM entrypoint: 0x" + << std::hex << std::setw(8) << std::setfill('0') << myArmEntrypoint + << std::dec << '\n'; - writeDebugBinary(*myLinker); - #endif + writeDebugBinary(*myLinker); +#endif } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -463,6 +465,7 @@ uInt32 CartridgeELF::getSystemType() const } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeELF::switchExecutionStage() { constexpr uInt32 sp = ADDR_STACK_BASE + STACK_SIZE; @@ -478,7 +481,8 @@ void CartridgeELF::switchExecutionStage() myInitFunctionIndex = 0; } else { - return callFn(myLinker->getPreinitArray()[myInitFunctionIndex++], sp); + callFn(myLinker->getPreinitArray()[myInitFunctionIndex++], sp); + return; } } @@ -487,13 +491,15 @@ void CartridgeELF::switchExecutionStage() myExecutionStage = ExecutionStage::main; } else { - return callFn(myLinker->getInitArray()[myInitFunctionIndex++], sp); + callFn(myLinker->getInitArray()[myInitFunctionIndex++], sp); + return; } } callMain(); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeELF::callFn(uInt32 ptr, uInt32 sp) { myCortexEmu @@ -526,6 +532,7 @@ void CartridgeELF::callMain() callFn(myArmEntrypoint, sp); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeELF::runArm() { if ( @@ -537,7 +544,7 @@ void CartridgeELF::runArm() const uInt32 cyclesGoal = (mySystem->cycles() + ARM_RUNAHED_MAX) * myArmCyclesPer6502Cycle - getArmCycles(); - uInt32 cycles; + uInt32 cycles = 0; const CortexM0::err_t err = myCortexEmu.run(cyclesGoal, cycles); @@ -556,5 +563,3 @@ void CartridgeELF::runArm() FatalEmulationError::raise("error executing ARM code: " + CortexM0::describeError(err)); } } - - diff --git a/src/emucore/Console.cxx b/src/emucore/Console.cxx index eab10ac92..35c3c4c19 100644 --- a/src/emucore/Console.cxx +++ b/src/emucore/Console.cxx @@ -1277,7 +1277,7 @@ void Console::changeAutoFireRate(int direction) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - float Console::currentFrameRate() const { - uInt32 scalinesLastFrame = myTIA->frameBufferScanlinesLastFrame(); + const uInt32 scalinesLastFrame = myTIA->frameBufferScanlinesLastFrame(); return scalinesLastFrame != 0 ? diff --git a/src/emucore/CortexM0.cxx b/src/emucore/CortexM0.cxx index 86fbc39c3..de9810de4 100644 --- a/src/emucore/CortexM0.cxx +++ b/src/emucore/CortexM0.cxx @@ -77,9 +77,6 @@ #define branch_target_9(inst) (read_register(15) + 2 + (((Int32)(inst) << 24) >> 23)) #define branch_target_12(inst) (read_register(15) + 2 + (((Int32)(inst) << 21) >> 20)) -using std::dec; -using Common::Base; - namespace { constexpr uInt32 PAGEMAP_SIZE = 0x100000000 / 4096; @@ -462,6 +459,9 @@ namespace { case CortexM0::ERR_UNDEFINED_INST: return "undefined instruction"; + + default: + break; } ostringstream s; @@ -469,38 +469,45 @@ namespace { return s.str(); } -} +} // namespace +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::BusTransactionDelegate::read32(uInt32 address, uInt32& value, CortexM0& cortex) { return errIntrinsic(ERR_UNMAPPED_READ32, address); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::BusTransactionDelegate::read16(uInt32 address, uInt16& value, CortexM0& cortex) { return errIntrinsic(ERR_UNMAPPED_READ16, address); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::BusTransactionDelegate::read8(uInt32 address, uInt8& value, CortexM0& cortex) { return errIntrinsic(ERR_UNMAPPED_READ8, address); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::BusTransactionDelegate::write32(uInt32 address, uInt32 value, CortexM0& cortex) { return errIntrinsic(ERR_UNMAPPED_WRITE32, address); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::BusTransactionDelegate::write16(uInt32 address, uInt16 value, CortexM0& cortex) { return errIntrinsic(ERR_UNMAPPED_WRITE16, address); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::BusTransactionDelegate::write8(uInt32 address, uInt8 value, CortexM0& cortex) { return errIntrinsic(ERR_UNMAPPED_WRITE8, address); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::BusTransactionDelegate::fetch16( uInt32 address, uInt16& value, uInt8& op, CortexM0& cortex ) { @@ -512,6 +519,7 @@ CortexM0::err_t CortexM0::BusTransactionDelegate::fetch16( return 0; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - string CortexM0::describeError(err_t err) { if (err == ERR_NONE) return "no error"; @@ -524,7 +532,7 @@ string CortexM0::describeError(err_t err) { return s.str(); } - +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::CortexM0() { myPageMap = make_unique(PAGEMAP_SIZE); @@ -533,6 +541,7 @@ CortexM0::CortexM0() reset(); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0& CortexM0::mapRegionData(uInt32 pageBase, uInt32 pageCount, bool readOnly, uInt8* backingStore) { @@ -544,6 +553,7 @@ CortexM0& CortexM0::mapRegionData(uInt32 pageBase, return *this; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0& CortexM0::mapRegionCode(uInt32 pageBase, uInt32 pageCount, bool readOnly, uInt8* backingStore) { @@ -556,6 +566,7 @@ CortexM0& CortexM0::mapRegionCode(uInt32 pageBase, return *this; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0& CortexM0::mapRegionDelegate(uInt32 pageBase, uInt32 pageCount, bool readOnly, CortexM0::BusTransactionDelegate* delegate) { @@ -567,6 +578,7 @@ CortexM0& CortexM0::mapRegionDelegate(uInt32 pageBase, uInt32 pageCount, bool re return *this; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0& CortexM0::mapDefault(CortexM0::BusTransactionDelegate* delegate) { myDefaultDelegate = delegate; @@ -574,6 +586,7 @@ CortexM0& CortexM0::mapDefault(CortexM0::BusTransactionDelegate* delegate) return *this; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0& CortexM0::reset() { reg_norm.fill(0); @@ -585,11 +598,13 @@ CortexM0& CortexM0::reset() return *this; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0& CortexM0::setPc(uInt32 pc) { return setRegister(15, (pc & ~1) + 2); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0& CortexM0::setRegister(uInt8 regno, uInt32 value) { write_register(regno, value); @@ -597,23 +612,26 @@ CortexM0& CortexM0::setRegister(uInt8 regno, uInt32 value) return *this; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uInt32 CortexM0::getRegister(uInt32 regno) { return read_register(regno); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uInt8 CortexM0::decodeInstructionWord(uInt16 instructionWord) { return static_cast(::decodeInstructionWord(instructionWord)); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::run(uInt32 maxCycles, uInt32& cycles) { for (cycles = 0; cycles < maxCycles; cycles++, myCycleCounter++) { const uInt32 pc = read_register(15); - uInt16 inst; - uInt8 op; + uInt16 inst = 0; + uInt8 op = 0; err_t err = fetch16(pc - 2, inst, op); if (err) return err; @@ -635,6 +653,7 @@ CortexM0::err_t CortexM0::run(uInt32 maxCycles, uInt32& cycles) return ERR_NONE; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::MemoryRegion& CortexM0::setupMapping(uInt32 pageBase, uInt32 pageCount, bool readOnly, CortexM0::MemoryRegionType type) { @@ -654,6 +673,7 @@ CortexM0::MemoryRegion& CortexM0::setupMapping(uInt32 pageBase, uInt32 pageCount return region; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CortexM0::recompileCodeRegions() { for (const auto& region: myRegions) { @@ -665,6 +685,7 @@ void CortexM0::recompileCodeRegions() } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::read32(uInt32 address, uInt32& value) { if (address & 0x03) return errIntrinsic(ERR_ACCESS_ALIGNMENT_FAULT, address); @@ -689,6 +710,7 @@ CortexM0::err_t CortexM0::read32(uInt32 address, uInt32& value) } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::read16(uInt32 address, uInt16& value) { if (address & 0x01) return errIntrinsic(ERR_ACCESS_ALIGNMENT_FAULT, address); @@ -713,6 +735,7 @@ CortexM0::err_t CortexM0::read16(uInt32 address, uInt16& value) } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::read8(uInt32 address, uInt8& value) { MemoryRegion& region = myRegions[myPageMap[address / PAGE_SIZE]]; @@ -735,6 +758,7 @@ CortexM0::err_t CortexM0::read8(uInt32 address, uInt8& value) } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::write32(uInt32 address, uInt32 value) { if (address & 0x03) return errIntrinsic(ERR_ACCESS_ALIGNMENT_FAULT, address); @@ -760,6 +784,7 @@ CortexM0::err_t CortexM0::write32(uInt32 address, uInt32 value) } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::write16(uInt32 address, uInt16 value) { if (address & 0x01) return errIntrinsic(ERR_ACCESS_ALIGNMENT_FAULT, address); @@ -790,6 +815,7 @@ CortexM0::err_t CortexM0::write16(uInt32 address, uInt16 value) } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::write8(uInt32 address, uInt8 value) { MemoryRegion& region = myRegions[myPageMap[address / PAGE_SIZE]]; @@ -818,6 +844,7 @@ CortexM0::err_t CortexM0::write8(uInt32 address, uInt8 value) } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::fetch16(uInt32 address, uInt16& value, uInt8& op) { if (address & 0x01) return errIntrinsic(ERR_ACCESS_ALIGNMENT_FAULT, address); @@ -849,6 +876,7 @@ CortexM0::err_t CortexM0::fetch16(uInt32 address, uInt16& value, uInt8& op) } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CortexM0::do_cvflag(uInt32 a, uInt32 b, uInt32 c) { uInt32 rc = (a & 0x7FFFFFFF) + (b & 0x7FFFFFFF) + c; //carry in @@ -864,9 +892,10 @@ void CortexM0::do_cvflag(uInt32 a, uInt32 b, uInt32 c) cFlag = rc & 2; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) { - uInt32 sp, ra, rb, rc, rm, rd, rn, rs; // NOLINT + uInt32 sp, ra, rb, rc, rm, rd, rn, rs; // NOLINT: don't need to initialize #ifdef THUMB_DISS cout << "0x" << std::hex << std::setw(8) << std::setfill('0') << (read_register(15) - 4) << " " << std::dec; @@ -1378,13 +1407,13 @@ CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) #endif sp = read_register(rn); - std::array regsOld = reg_norm; + const std::array regsOld = reg_norm; for(ra = 0, rb = 0x01; rb; rb = (rb << 1) & 0xFF, ++ra) { if(inst & rb) { - err_t err = read32(sp, reg_norm[ra]); + const err_t err = read32(sp, reg_norm[ra]); if (err) { reg_norm = regsOld; @@ -1474,7 +1503,7 @@ CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) DO_DISS("ldrb r" << dec << rd << ",[r" << dec << rn << ",#0x" << Base::HEX2 << rb << "]\n"); rb = read_register(rn) + rb; - uInt8 val8; + uInt8 val8 = 0; const err_t err = read8(rb, val8); if (err) return err; @@ -1492,7 +1521,7 @@ CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) DO_DISS("ldrb r" << dec << rd << ",[r" << dec << rn << ",r" << dec << rm << "]\n"); rb = read_register(rn) + read_register(rm); - uInt8 val8; + uInt8 val8 = 0; const err_t err = read8(rb, val8); if (err) return err; @@ -1511,7 +1540,7 @@ CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) DO_DISS("ldrh r" << dec << rd << ",[r" << dec << rn << ",#0x" << Base::HEX2 << rb << "]\n"); rb = read_register(rn) + rb; - uInt16 val16; + uInt16 val16 = 0; const err_t err = read16(rb, val16); if (err) return err; @@ -1529,7 +1558,7 @@ CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) DO_DISS("ldrh r" << dec << rd << ",[r" << dec << rn << ",r" << dec << rm << "]\n"); rb = read_register(rn) + read_register(rm); - uInt16 val16; + uInt16 val16 = 0; const err_t err = read16(rb, val16); if (err) return err; @@ -1547,7 +1576,7 @@ CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) DO_DISS("ldrsb r" << dec << rd << ",[r" << dec << rn << ",r" << dec << rm << "]\n"); rb = read_register(rn) + read_register(rm); - uInt8 val8; + uInt8 val8 = 0; const err_t err = read8(rb, val8); if (err) return err; @@ -1565,7 +1594,7 @@ CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) DO_DISS("ldrsh r" << dec << rd << ",[r" << dec << rn << ",r" << dec << rm << "]\n"); rb = read_register(rn) + read_register(rm); - uInt16 val16; + uInt16 val16 = 0; const err_t err = read16(rb, val16); if (err) return err; @@ -1806,14 +1835,14 @@ CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) } #endif - std::array regOld = reg_norm; + const std::array regOld = reg_norm; sp = read_register(13); for(ra = 0, rb = 0x01; rb; rb = (rb << 1) & 0xFF, ++ra) { if(inst & rb) { - err_t err = read32(sp, reg_norm[ra]); + const err_t err = read32(sp, reg_norm[ra]); if (err) { reg_norm = regOld; return err; @@ -1825,7 +1854,7 @@ CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) if(inst & 0x100) { - err_t err = read32(sp, rc); + const err_t err = read32(sp, rc); if (err) { reg_norm = regOld; return err; @@ -2029,7 +2058,7 @@ CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) { if(inst & rb) { - err_t err = write32(sp, read_register(ra)); + const err_t err = write32(sp, read_register(ra)); if (err) return err; sp += 4; @@ -2049,7 +2078,7 @@ CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) rb = read_register(rn) + rb; rc = read_register(rd); - err_t err = write32(rb, rc); + const err_t err = write32(rb, rc); if (err) return err; return ERR_NONE; @@ -2064,7 +2093,7 @@ CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) rb = read_register(rn) + read_register(rm); rc = read_register(rd); - err_t err = write32(rb, rc); + const err_t err = write32(rb, rc); if (err) return err; return ERR_NONE; @@ -2080,7 +2109,7 @@ CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) //fprintf(stderr,"0x%08X\n",rb); rc = read_register(rd); - err_t err = write32(rb, rc); + const err_t err = write32(rb, rc); if (err) return err; return ERR_NONE; @@ -2095,7 +2124,7 @@ CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) rb = read_register(rn) + rb; rc = read_register(rd); - err_t err = write8(rb, rc); + const err_t err = write8(rb, rc); if (err) return err; return ERR_NONE; @@ -2110,7 +2139,7 @@ CortexM0::err_t CortexM0::execute(uInt16 inst, uInt8 op) rb = read_register(rn) + read_register(rm); rc = read_register(rd); - err_t err = write8(rb, rc); + const err_t err = write8(rb, rc); if (err) return err; return ERR_NONE; diff --git a/src/emucore/elf/BusTransactionQueue.cxx b/src/emucore/elf/BusTransactionQueue.cxx index ff7997cc1..d283053f2 100644 --- a/src/emucore/elf/BusTransactionQueue.cxx +++ b/src/emucore/elf/BusTransactionQueue.cxx @@ -35,7 +35,6 @@ BusTransactionQueue::Transaction BusTransactionQueue::Transaction::transactionDr return {.address = address, .value = value, .timestamp = timestamp, .yield = false}; } - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void BusTransactionQueue::Transaction::setBusState(bool& bs_drive, uInt8& bs_value) const { @@ -47,7 +46,6 @@ void BusTransactionQueue::Transaction::setBusState(bool& bs_drive, uInt8& bs_val } } - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BusTransactionQueue::BusTransactionQueue(size_t capacity) : myQueueCapacity(capacity) { @@ -73,11 +71,13 @@ BusTransactionQueue& BusTransactionQueue::setNextInjectAddress(uInt16 address) return *this; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uInt16 BusTransactionQueue::getNextInjectAddress() const { return myNextInjectAddress; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BusTransactionQueue& BusTransactionQueue::setTimestamp(uInt64 timestamp) { myTimestamp = timestamp; @@ -102,6 +102,7 @@ BusTransactionQueue& BusTransactionQueue::injectROMAt(uInt8 value, uInt16 addres return *this; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BusTransactionQueue& BusTransactionQueue::stuffByte(uInt8 value, uInt16 address) { push(Transaction::transactionDrive(address, value, myTimestamp)); diff --git a/src/emucore/elf/ElfEnvironment.cxx b/src/emucore/elf/ElfEnvironment.cxx index 2f10a826a..19cdb77df 100644 --- a/src/emucore/elf/ElfEnvironment.cxx +++ b/src/emucore/elf/ElfEnvironment.cxx @@ -1,5 +1,23 @@ +//============================================================================ +// +// SSSS tt lll lll +// SS SS tt ll ll +// SS tttttt eeee ll ll aaaa +// SSSS tt ee ee ll ll aa +// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" +// SS SS tt ee ll ll aa aa +// SSSS ttt eeeee llll llll aaaaa +// +// Copyright (c) 1995-2024 by Bradford W. Mott, Stephen Anthony +// and the Stella Team +// +// See the file "License.txt" for information on usage and redistribution of +// this file, and for a DISCLAIMER OF ALL WARRANTIES. +//============================================================================ + #include "ElfEnvironment.hxx" +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - const uInt8 elfEnvironment::OVERBLANK_PROGRAM[] = { 0xa0,0x00, // ldy #0 0xa5,0xe0, // lda $e0 @@ -34,8 +52,10 @@ const uInt8 elfEnvironment::OVERBLANK_PROGRAM[] = { 0x4c, 0x00, 0x10 // jmp $1000 }; +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - const uInt32 elfEnvironment::OVERBLANK_PROGRAM_SIZE = sizeof(elfEnvironment::OVERBLANK_PROGRAM); +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - const uInt8 elfEnvironment::LOOKUP_TABLES[3 * 256] = { // Ntsc2600 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, @@ -92,6 +112,7 @@ const uInt8 elfEnvironment::LOOKUP_TABLES[3 * 256] = { 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff }; +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - vector elfEnvironment::externalSymbols(elfEnvironment::Palette palette) { static const vector EXTERNAL_SYMBOLS_STATIC = { diff --git a/src/emucore/elf/ElfUtil.cxx b/src/emucore/elf/ElfUtil.cxx index 4b5a6c5ef..720f552db 100644 --- a/src/emucore/elf/ElfUtil.cxx +++ b/src/emucore/elf/ElfUtil.cxx @@ -17,6 +17,7 @@ #include "ElfUtil.hxx" +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Int32 elfUtil::decode_B_BL(uInt32 opcode) { // nomenclature follows Thumb32 BL / B.W encoding in Arm Architecture Reference @@ -38,6 +39,7 @@ Int32 elfUtil::decode_B_BL(uInt32 opcode) return offset; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uInt32 elfUtil::encode_B_BL(Int32 offset, bool link) { // nomenclature follows Thumb32 BL / B.W encoding in Arm Architecture Reference diff --git a/src/emucore/elf/VcsLib.cxx b/src/emucore/elf/VcsLib.cxx index 5c0b502e6..09da8c380 100644 --- a/src/emucore/elf/VcsLib.cxx +++ b/src/emucore/elf/VcsLib.cxx @@ -22,7 +22,6 @@ #include "BusTransactionQueue.hxx" #include "ElfEnvironment.hxx" #include "exception/FatalEmulationError.hxx" -#include "ElfEnvironment.hxx" using namespace elfEnvironment; @@ -31,7 +30,7 @@ namespace { { const uInt16 value16 = value | (value << 8); const uInt32 value32 = value16 | (value16 << 16); - CortexM0::err_t err; + CortexM0::err_t err = CortexM0::ERR_NONE; uInt32 ptr = target; while (ptr < target + size) { @@ -57,12 +56,12 @@ namespace { CortexM0::err_t memcpy(uInt32 dest, uInt32 src, uInt32 size, CortexM0& cortex) { - CortexM0::err_t err; + CortexM0::err_t err = CortexM0::ERR_NONE; const uInt32 destOrig = dest; while (size > 0) { if (((dest | src) & 0x03) == 0 && size >= 4) { - uInt32 value; + uInt32 value = 0; err = cortex.read32(src, value); if (err) return err; @@ -74,7 +73,7 @@ namespace { src += 4; } else if (((dest | src) & 0x01) == 0 && size >= 2) { - uInt16 value; + uInt16 value = 0; err = cortex.read16(src, value); if (err) return err; @@ -86,7 +85,7 @@ namespace { src += 2; } else { - uInt8 value; + uInt8 value = 0; err = cortex.read8(src, value); if (err) return err; @@ -104,7 +103,7 @@ namespace { cortex.setRegister(0, destOrig); return 0; } -} +} // namespace // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - VcsLib::VcsLib(BusTransactionQueue& transactionQueue) : myTransactionQueue(transactionQueue) @@ -177,8 +176,8 @@ void VcsLib::vcsLda2(uInt8 value) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CortexM0::err_t VcsLib::fetch16(uInt32 address, uInt16& value, uInt8& op, CortexM0& cortex) { - uInt32 arg; - CortexM0::err_t err; + uInt32 arg = 0; + CortexM0::err_t err = CortexM0::ERR_NONE; if (myTransactionQueue.size() >= elfEnvironment::QUEUE_SIZE_LIMIT) return CortexM0::errCustom(ERR_STOP_EXECUTION); @@ -405,14 +404,3 @@ CortexM0::err_t VcsLib::fetch16(uInt32 address, uInt16& value, uInt8& op, Cortex return CortexM0::errIntrinsic(CortexM0::ERR_UNMAPPED_FETCH16, address); } } - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -CortexM0::err_t VcsLib::returnFromStub(uInt16& value, uInt8& op) -{ - constexpr uInt16 BX_LR = 0x4770; - - value = BX_LR; - op = CortexM0::decodeInstructionWord(BX_LR); - - return CortexM0::ERR_NONE; -} diff --git a/src/emucore/elf/VcsLib.hxx b/src/emucore/elf/VcsLib.hxx index 981f2e75f..df8bf7d29 100644 --- a/src/emucore/elf/VcsLib.hxx +++ b/src/emucore/elf/VcsLib.hxx @@ -48,7 +48,14 @@ class VcsLib: public CortexM0::BusTransactionDelegate { void vcsLda2(uInt8 value); private: - CortexM0::err_t returnFromStub(uInt16& value, uInt8& op); + static CortexM0::err_t returnFromStub(uInt16& value, uInt8& op) { + constexpr uInt16 BX_LR = 0x4770; + + value = BX_LR; + op = CortexM0::decodeInstructionWord(BX_LR); + + return CortexM0::ERR_NONE; + } private: BusTransactionQueue& myTransactionQueue;