inline common fns, replace redudant code

This commit is contained in:
scawful
2024-08-06 17:37:58 -04:00
parent 602d3f73f3
commit a630fd0f23
3 changed files with 33 additions and 42 deletions

View File

@@ -52,39 +52,6 @@ uint64_t decode(const std::vector<uint8_t> &input, size_t &offset) {
std::shared_ptr<ExperimentFlags::Flags> ExperimentFlags::flags_;
constexpr uint32_t kFastRomRegion = 0x808000;
inline uint32_t SnesToPc(uint32_t addr) noexcept {
if (addr >= kFastRomRegion) {
addr -= kFastRomRegion;
}
uint32_t temp = (addr & 0x7FFF) + ((addr / 2) & 0xFF8000);
return (temp + 0x0);
}
inline uint32_t PcToSnes(uint32_t addr) {
uint8_t *b = reinterpret_cast<uint8_t *>(&addr);
b[2] = static_cast<uint8_t>(b[2] * 2);
if (b[1] >= 0x80) {
b[2] += 1;
} else {
b[1] += 0x80;
}
return addr;
}
uint32_t MapBankToWordAddress(uint8_t bank, uint16_t addr) {
uint32_t result = 0;
result = (bank << 16) | addr;
return result;
}
int AddressFromBytes(uint8_t bank, uint8_t high, uint8_t low) noexcept {
return (bank << 16) | (high << 8) | low;
}
// hextodec has been imported from SNESDisasm to parse hex numbers
int HexToDec(char *input, int length) {
int result = 0;

View File

@@ -194,13 +194,38 @@ class Logger {
static std::vector<std::string> logs;
};
inline uint32_t SnesToPc(uint32_t addr) noexcept;
constexpr uint32_t kFastRomRegion = 0x808000;
inline uint32_t PcToSnes(uint32_t addr);
inline uint32_t SnesToPc(uint32_t addr) noexcept {
if (addr >= kFastRomRegion) {
addr -= kFastRomRegion;
}
uint32_t temp = (addr & 0x7FFF) + ((addr / 2) & 0xFF8000);
return (temp + 0x0);
}
inline uint32_t MapBankToWordAddress(uint8_t bank, uint16_t addr);
inline uint32_t PcToSnes(uint32_t addr) {
uint8_t *b = reinterpret_cast<uint8_t *>(&addr);
b[2] = static_cast<uint8_t>(b[2] * 2);
inline int AddressFromBytes(uint8_t bank, uint8_t high, uint8_t low) noexcept;
if (b[1] >= 0x80) {
b[2] += 1;
} else {
b[1] += 0x80;
}
return addr;
}
inline int AddressFromBytes(uint8_t bank, uint8_t high, uint8_t low) noexcept {
return (bank << 16) | (high << 8) | low;
}
inline uint32_t MapBankToWordAddress(uint8_t bank, uint16_t addr) noexcept {
uint32_t result = 0;
result = (bank << 16) | addr;
return result;
}
int HexToDec(char *input, int length);

View File

@@ -33,11 +33,10 @@ constexpr int Uncompressed3BPPSize = 0x0600;
constexpr int kEntranceGfxGroup = 0x5D97;
int Rom::GetGraphicsAddress(const uchar* data, uint8_t addr) {
auto part_one = data[version_constants().kOverworldGfxPtr1 + addr] << 16;
auto part_two = data[version_constants().kOverworldGfxPtr2 + addr] << 8;
auto part_three = data[version_constants().kOverworldGfxPtr3 + addr];
auto snes_addr = (part_one | part_two | part_three);
return core::SnesToPc(snes_addr);
return core::SnesToPc(core::AddressFromBytes(
data[version_constants().kOverworldGfxPtr1 + addr],
data[version_constants().kOverworldGfxPtr2 + addr],
data[version_constants().kOverworldGfxPtr3 + addr]));
}
absl::StatusOr<Bytes> Rom::Load2BppGraphics() {