Refactor SnesToPc and PcToSnes functions for improved readability and consistency; remove redundant core:: namespace usage

This commit is contained in:
scawful
2025-01-22 13:45:58 -05:00
parent de53ccae21
commit 43fc52dec7
12 changed files with 170 additions and 172 deletions

View File

@@ -56,15 +56,6 @@ uint32_t ldle3(uint8_t const *const p_arr) { return ldle(p_arr, 3); }
} // namespace } // namespace
uint32_t Get24LocalFromPC(uint8_t *data, int addr, bool pc) {
uint32_t ret =
(PcToSnes(addr) & 0xFF0000) | (data[addr + 1] << 8) | data[addr];
if (pc) {
return SnesToPc(ret);
}
return ret;
}
void stle16b_i(uint8_t *const p_arr, size_t const p_index, void stle16b_i(uint8_t *const p_arr, size_t const p_index,
uint16_t const p_val) { uint16_t const p_val) {
stle16b(p_arr + (p_index * 2), p_val); stle16b(p_arr + (p_index * 2), p_val);

View File

@@ -18,41 +18,6 @@ namespace yaze {
*/ */
namespace core { namespace core {
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;
}
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;
}
uint32_t Get24LocalFromPC(uint8_t *data, int addr, bool pc = true);
/** /**
* @brief Store little endian 16-bit value using a byte pointer, offset by an * @brief Store little endian 16-bit value using a byte pointer, offset by an
* index before dereferencing * index before dereferencing

View File

@@ -31,7 +31,7 @@ struct MemoryEditorWithDiffChecker : public SharedRom {
static uint64_t convert_address = 0; static uint64_t convert_address = 0;
gui::InputHex("SNES to PC", (int *)&convert_address, 6, 200.f); gui::InputHex("SNES to PC", (int *)&convert_address, 6, 200.f);
SameLine(); SameLine();
Text("%x", core::SnesToPc(convert_address)); Text("%x", SnesToPc(convert_address));
// mem_edit.DrawWindow("Memory Editor", (void*)&(*rom()), rom()->size()); // mem_edit.DrawWindow("Memory Editor", (void*)&(*rom()), rom()->size());
BEGIN_TABLE("Memory Comparison", 2, ImGuiTableFlags_Resizable); BEGIN_TABLE("Memory Comparison", 2, ImGuiTableFlags_Resizable);

View File

@@ -125,9 +125,9 @@ absl::Status ScreenEditor::LoadDungeonMaps() {
rom()->ReadWord(zelda3::kDungeonMapGfxPtr + (d * 2))); rom()->ReadWord(zelda3::kDungeonMapGfxPtr + (d * 2)));
ptr |= 0x0A0000; // Add bank to the short ptr ptr |= 0x0A0000; // Add bank to the short ptr
ptr_gfx |= 0x0A0000; // Add bank to the short ptr ptr_gfx |= 0x0A0000; // Add bank to the short ptr
int pc_ptr = core::SnesToPc(ptr); // Contains data for the next 25 rooms int pc_ptr = SnesToPc(ptr); // Contains data for the next 25 rooms
int pc_ptr_gfx = int pc_ptr_gfx =
core::SnesToPc(ptr_gfx); // Contains data for the next 25 rooms SnesToPc(ptr_gfx); // Contains data for the next 25 rooms
ASSIGN_OR_RETURN(uint16_t boss_room_d, ASSIGN_OR_RETURN(uint16_t boss_room_d,
rom()->ReadWord(zelda3::kDungeonMapBossRooms + (d * 2))); rom()->ReadWord(zelda3::kDungeonMapBossRooms + (d * 2)));
@@ -182,8 +182,8 @@ absl::Status ScreenEditor::SaveDungeonMaps() {
for (int d = 0; d < 14; d++) { for (int d = 0; d < 14; d++) {
int ptr = zelda3::kDungeonMapRoomsPtr + (d * 2); int ptr = zelda3::kDungeonMapRoomsPtr + (d * 2);
int ptr_gfx = zelda3::kDungeonMapGfxPtr + (d * 2); int ptr_gfx = zelda3::kDungeonMapGfxPtr + (d * 2);
int pc_ptr = core::SnesToPc(ptr); int pc_ptr = SnesToPc(ptr);
int pc_ptr_gfx = core::SnesToPc(ptr_gfx); int pc_ptr_gfx = SnesToPc(ptr_gfx);
const int nbr_floors = dungeon_maps_[d].nbr_of_floor; const int nbr_floors = dungeon_maps_[d].nbr_of_floor;
const int nbr_basements = dungeon_maps_[d].nbr_of_basement; const int nbr_basements = dungeon_maps_[d].nbr_of_basement;

View File

@@ -154,14 +154,14 @@ std::vector<DictionaryEntry> BuildDictionaryEntries(Rom *rom) {
std::vector<uint8_t> bytes; std::vector<uint8_t> bytes;
std::stringstream stringBuilder; std::stringstream stringBuilder;
int address = core::SnesToPc( int address = SnesToPc(
kTextData + (rom->data()[kPointersDictionaries + (i * 2) + 1] << 8) + kTextData + (rom->data()[kPointersDictionaries + (i * 2) + 1] << 8) +
rom->data()[kPointersDictionaries + (i * 2)]); rom->data()[kPointersDictionaries + (i * 2)]);
int temppush_backress = core::SnesToPc( int temppush_backress =
kTextData + SnesToPc(kTextData +
(rom->data()[kPointersDictionaries + ((i + 1) * 2) + 1] << 8) + (rom->data()[kPointersDictionaries + ((i + 1) * 2) + 1] << 8) +
rom->data()[kPointersDictionaries + ((i + 1) * 2)]); rom->data()[kPointersDictionaries + ((i + 1) * 2)]);
while (address < temppush_backress) { while (address < temppush_backress) {
uint8_t uint8_tDictionary = rom->data()[address++]; uint8_t uint8_tDictionary = rom->data()[address++];
@@ -233,9 +233,9 @@ absl::StatusOr<MessageData> ParseSingleMessage(
current_message_raw.append("]"); current_message_raw.append("]");
auto mutable_rom_data = const_cast<uint8_t *>(rom_data.data()); auto mutable_rom_data = const_cast<uint8_t *>(rom_data.data());
uint32_t address = core::Get24LocalFromPC( uint32_t address = Get24LocalFromPC(
mutable_rom_data, kPointersDictionaries + (dictionary * 2)); mutable_rom_data, kPointersDictionaries + (dictionary * 2));
uint32_t address_end = core::Get24LocalFromPC( uint32_t address_end = Get24LocalFromPC(
mutable_rom_data, kPointersDictionaries + ((dictionary + 1) * 2)); mutable_rom_data, kPointersDictionaries + ((dictionary + 1) * 2));
for (uint32_t i = address; i < address_end; i++) { for (uint32_t i = address; i < address_end; i++) {

View File

@@ -299,9 +299,9 @@ void MessageEditor::ReadAllTextDataV2() {
current_raw_message.append(util::HexWord(dictionary)); current_raw_message.append(util::HexWord(dictionary));
current_raw_message.append("]"); current_raw_message.append("]");
uint32_t address = core::Get24LocalFromPC( uint32_t address = Get24LocalFromPC(
rom()->mutable_data(), kPointersDictionaries + (dictionary * 2)); rom()->mutable_data(), kPointersDictionaries + (dictionary * 2));
uint32_t address_end = core::Get24LocalFromPC( uint32_t address_end = Get24LocalFromPC(
rom()->mutable_data(), rom()->mutable_data(),
kPointersDictionaries + ((dictionary + 1) * 2)); kPointersDictionaries + ((dictionary + 1) * 2));
@@ -397,9 +397,9 @@ void MessageEditor::ReadAllTextData() {
current_message_raw.append(util::HexWord(dictionary)); current_message_raw.append(util::HexWord(dictionary));
current_message_raw.append("]"); current_message_raw.append("]");
uint32_t address = core::Get24LocalFromPC( uint32_t address = Get24LocalFromPC(
rom()->mutable_data(), kPointersDictionaries + (dictionary * 2)); rom()->mutable_data(), kPointersDictionaries + (dictionary * 2));
uint32_t address_end = core::Get24LocalFromPC( uint32_t address_end = Get24LocalFromPC(
rom()->mutable_data(), rom()->mutable_data(),
kPointersDictionaries + ((dictionary + 1) * 2)); kPointersDictionaries + ((dictionary + 1) * 2));

View File

@@ -32,8 +32,8 @@ constexpr int Uncompressed3BPPSize = 0x0600;
uint32_t GetGraphicsAddress(const uint8_t *data, uint8_t addr, uint32_t ptr1, uint32_t GetGraphicsAddress(const uint8_t *data, uint8_t addr, uint32_t ptr1,
uint32_t ptr2, uint32_t ptr3) { uint32_t ptr2, uint32_t ptr3) {
return core::SnesToPc(core::AddressFromBytes( return SnesToPc(AddressFromBytes(data[ptr1 + addr], data[ptr2 + addr],
data[ptr1 + addr], data[ptr2 + addr], data[ptr3 + addr])); data[ptr3 + addr]));
} }
absl::StatusOr<std::vector<uint8_t>> Load2BppGraphics(const Rom &rom) { absl::StatusOr<std::vector<uint8_t>> Load2BppGraphics(const Rom &rom) {
@@ -530,7 +530,7 @@ absl::Status Rom::SaveAllPalettes() {
absl::Status Rom::LoadGfxGroups() { absl::Status Rom::LoadGfxGroups() {
ASSIGN_OR_RETURN(auto main_blockset_ptr, ReadWord(kGfxGroupsPointer)); ASSIGN_OR_RETURN(auto main_blockset_ptr, ReadWord(kGfxGroupsPointer));
main_blockset_ptr = core::SnesToPc(main_blockset_ptr); main_blockset_ptr = SnesToPc(main_blockset_ptr);
for (uint32_t i = 0; i < kNumMainBlocksets; i++) { for (uint32_t i = 0; i < kNumMainBlocksets; i++) {
for (int j = 0; j < 8; j++) { for (int j = 0; j < 8; j++) {
@@ -563,7 +563,7 @@ absl::Status Rom::LoadGfxGroups() {
absl::Status Rom::SaveGroupsToRom() { absl::Status Rom::SaveGroupsToRom() {
ASSIGN_OR_RETURN(auto main_blockset_ptr, ReadWord(kGfxGroupsPointer)); ASSIGN_OR_RETURN(auto main_blockset_ptr, ReadWord(kGfxGroupsPointer));
main_blockset_ptr = core::SnesToPc(main_blockset_ptr); main_blockset_ptr = SnesToPc(main_blockset_ptr);
for (uint32_t i = 0; i < kNumMainBlocksets; i++) { for (uint32_t i = 0; i < kNumMainBlocksets; i++) {
for (int j = 0; j < 8; j++) { for (int j = 0; j < 8; j++) {

View File

@@ -324,6 +324,48 @@ absl::StatusOr<std::vector<uint8_t>> Load2BppGraphics(const Rom& rom);
absl::StatusOr<std::array<gfx::Bitmap, kNumLinkSheets>> LoadLinkGraphics( absl::StatusOr<std::array<gfx::Bitmap, kNumLinkSheets>> LoadLinkGraphics(
const Rom& rom); const Rom& rom);
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;
}
inline uint32_t Get24LocalFromPC(uint8_t* data, int addr, bool pc = true) {
uint32_t ret =
(PcToSnes(addr) & 0xFF0000) | (data[addr + 1] << 8) | data[addr];
if (pc) {
return SnesToPc(ret);
}
return ret;
}
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;
}
/** /**
* @brief A class to hold a shared pointer to a Rom object. * @brief A class to hold a shared pointer to a Rom object.
*/ */

View File

@@ -19,13 +19,13 @@ void Room::LoadHeader() {
int header_pointer = (rom()->data()[kRoomHeaderPointer + 2] << 16) + int header_pointer = (rom()->data()[kRoomHeaderPointer + 2] << 16) +
(rom()->data()[kRoomHeaderPointer + 1] << 8) + (rom()->data()[kRoomHeaderPointer + 1] << 8) +
(rom()->data()[kRoomHeaderPointer]); (rom()->data()[kRoomHeaderPointer]);
header_pointer = core::SnesToPc(header_pointer); header_pointer = SnesToPc(header_pointer);
int address = (rom()->data()[kRoomHeaderPointerBank] << 16) + int address = (rom()->data()[kRoomHeaderPointerBank] << 16) +
(rom()->data()[(header_pointer + 1) + (room_id_ * 2)] << 8) + (rom()->data()[(header_pointer + 1) + (room_id_ * 2)] << 8) +
rom()->data()[(header_pointer) + (room_id_ * 2)]; rom()->data()[(header_pointer) + (room_id_ * 2)];
auto header_location = core::SnesToPc(address); auto header_location = SnesToPc(address);
bg2_ = (background2)((rom()->data()[header_location] >> 5) & 0x07); bg2_ = (background2)((rom()->data()[header_location] >> 5) & 0x07);
collision_ = (CollisionKey)((rom()->data()[header_location] >> 2) & 0x07); collision_ = (CollisionKey)((rom()->data()[header_location] >> 2) & 0x07);
@@ -124,7 +124,7 @@ void Room::CalculateRoomSize() {
void Room::LoadRoomFromROM() { void Room::LoadRoomFromROM() {
auto rom_data = rom()->vector(); auto rom_data = rom()->vector();
int header_pointer = core::SnesToPc(kRoomHeaderPointer); int header_pointer = SnesToPc(kRoomHeaderPointer);
message_id_ = messages_id_dungeon + (room_id_ * 2); message_id_ = messages_id_dungeon + (room_id_ * 2);
@@ -132,7 +132,7 @@ void Room::LoadRoomFromROM() {
(rom()->data()[(header_pointer + 1) + (room_id_ * 2)] << 8) + (rom()->data()[(header_pointer + 1) + (room_id_ * 2)] << 8) +
rom()->data()[(header_pointer) + (room_id_ * 2)]; rom()->data()[(header_pointer) + (room_id_ * 2)];
int hpos = core::SnesToPc(address); int hpos = SnesToPc(address);
hpos++; hpos++;
uint8_t b = rom_data[hpos]; uint8_t b = rom_data[hpos];
@@ -182,14 +182,14 @@ void Room::LoadRoomFromROM() {
hpos++; hpos++;
// Load room objects // Load room objects
int object_pointer = core::SnesToPc(room_object_pointer); int object_pointer = SnesToPc(room_object_pointer);
int room_address = object_pointer + (room_id_ * 3); int room_address = object_pointer + (room_id_ * 3);
int objects_location = core::SnesToPc(room_address); int objects_location = SnesToPc(room_address);
// Load sprites // Load sprites
// int spr_ptr = 0x040000 | rooms_sprite_pointer; // int spr_ptr = 0x040000 | rooms_sprite_pointer;
// int sprite_address = // int sprite_address =
// core::SnesToPc(dungeon_spr_ptrs | spr_ptr + (room_id_ * 2)); // SnesToPc(dungeon_spr_ptrs | spr_ptr + (room_id_ * 2));
} }
void Room::LoadRoomGraphics(uint8_t entrance_blockset) { void Room::LoadRoomGraphics(uint8_t entrance_blockset) {
@@ -253,7 +253,7 @@ void Room::CopyRoomGraphicsToBuffer() {
} }
void Room::LoadAnimatedGraphics() { void Room::LoadAnimatedGraphics() {
int gfx_ptr = core::SnesToPc(rom()->version_constants().kGfxAnimatedPointer); int gfx_ptr = SnesToPc(rom()->version_constants().kGfxAnimatedPointer);
auto gfx_buffer_data = rom()->graphics_buffer(); auto gfx_buffer_data = rom()->graphics_buffer();
auto rom_data = rom()->vector(); auto rom_data = rom()->vector();
@@ -277,13 +277,13 @@ void Room::LoadObjects() {
int object_pointer = (rom_data[room_object_pointer + 2] << 16) + int object_pointer = (rom_data[room_object_pointer + 2] << 16) +
(rom_data[room_object_pointer + 1] << 8) + (rom_data[room_object_pointer + 1] << 8) +
(rom_data[room_object_pointer]); (rom_data[room_object_pointer]);
object_pointer = core::SnesToPc(object_pointer); object_pointer = SnesToPc(object_pointer);
int room_address = object_pointer + (room_id_ * 3); int room_address = object_pointer + (room_id_ * 3);
int tile_address = (rom_data[room_address + 2] << 16) + int tile_address = (rom_data[room_address + 2] << 16) +
(rom_data[room_address + 1] << 8) + rom_data[room_address]; (rom_data[room_address + 1] << 8) + rom_data[room_address];
int objects_location = core::SnesToPc(tile_address); int objects_location = SnesToPc(tile_address);
if (objects_location == 0x52CA2) { if (objects_location == 0x52CA2) {
std::cout << "Room ID : " << room_id_ << std::endl; std::cout << "Room ID : " << room_id_ << std::endl;
@@ -422,7 +422,7 @@ void Room::LoadSprites() {
(0x09 << 16) + (rom_data[sprite_pointer + (room_id_ * 2) + 1] << 8) + (0x09 << 16) + (rom_data[sprite_pointer + (room_id_ * 2) + 1] << 8) +
rom_data[sprite_pointer + (room_id_ * 2)]; rom_data[sprite_pointer + (room_id_ * 2)];
int sprite_address = core::SnesToPc(sprite_address_snes); int sprite_address = SnesToPc(sprite_address_snes);
bool sortsprites = rom_data[sprite_address] == 1; bool sortsprites = rom_data[sprite_address] == 1;
sprite_address += 1; sprite_address += 1;
@@ -462,7 +462,7 @@ void Room::LoadSprites() {
void Room::LoadChests() { void Room::LoadChests() {
auto rom_data = rom()->vector(); auto rom_data = rom()->vector();
uint32_t cpos = core::SnesToPc((rom_data[chests_data_pointer1 + 2] << 16) + uint32_t cpos = SnesToPc((rom_data[chests_data_pointer1 + 2] << 16) +
(rom_data[chests_data_pointer1 + 1] << 8) + (rom_data[chests_data_pointer1 + 1] << 8) +
(rom_data[chests_data_pointer1])); (rom_data[chests_data_pointer1]));
size_t clength = (rom_data[chests_length_pointer + 1] << 8) + size_t clength = (rom_data[chests_length_pointer + 1] << 8) +

View File

@@ -224,7 +224,7 @@ void Overworld::DecompressAllMapTiles() {
int p = (rom()->data()[map_ptr + 2 + (3 * index)] << 16) + int p = (rom()->data()[map_ptr + 2 + (3 * index)] << 16) +
(rom()->data()[map_ptr + 1 + (3 * index)] << 8) + (rom()->data()[map_ptr + 1 + (3 * index)] << 8) +
(rom()->data()[map_ptr + (3 * index)]); (rom()->data()[map_ptr + (3 * index)]);
return core::SnesToPc(p); return SnesToPc(p);
}; };
constexpr uint32_t kBaseLowest = 0x0FFFFF; constexpr uint32_t kBaseLowest = 0x0FFFFF;
@@ -416,12 +416,12 @@ absl::Status Overworld::LoadExits() {
absl::Status Overworld::LoadItems() { absl::Status Overworld::LoadItems() {
ASSIGN_OR_RETURN(uint32_t pointer, ASSIGN_OR_RETURN(uint32_t pointer,
rom()->ReadLong(zelda3::kOverworldItemsAddress)); rom()->ReadLong(zelda3::kOverworldItemsAddress));
uint32_t pointer_pc = core::SnesToPc(pointer); // 1BC2F9 -> 0DC2F9 uint32_t pointer_pc = SnesToPc(pointer); // 1BC2F9 -> 0DC2F9
for (int i = 0; i < 128; i++) { for (int i = 0; i < 128; i++) {
ASSIGN_OR_RETURN(uint16_t word_address, ASSIGN_OR_RETURN(uint16_t word_address,
rom()->ReadWord(pointer_pc + i * 2)); rom()->ReadWord(pointer_pc + i * 2));
uint32_t addr = (pointer & 0xFF0000) | word_address; // 1B F9 3C uint32_t addr = (pointer & 0xFF0000) | word_address; // 1B F9 3C
addr = core::SnesToPc(addr); addr = SnesToPc(addr);
if (overworld_maps_[i].is_large_map()) { if (overworld_maps_[i].is_large_map()) {
if (overworld_maps_[i].parent() != (uint8_t)i) { if (overworld_maps_[i].parent() != (uint8_t)i) {
@@ -490,7 +490,7 @@ absl::Status Overworld::LoadSpritesFromMap(int sprites_per_gamestate_ptr,
int current_spr_ptr = sprites_per_gamestate_ptr + (i * 2); int current_spr_ptr = sprites_per_gamestate_ptr + (i * 2);
ASSIGN_OR_RETURN(auto word_addr, rom()->ReadWord(current_spr_ptr)); ASSIGN_OR_RETURN(auto word_addr, rom()->ReadWord(current_spr_ptr));
int sprite_address = core::SnesToPc((0x09 << 0x10) | word_addr); int sprite_address = SnesToPc((0x09 << 0x10) | word_addr);
while (true) { while (true) {
ASSIGN_OR_RETURN(uint8_t b1, rom()->ReadByte(sprite_address)); ASSIGN_OR_RETURN(uint8_t b1, rom()->ReadByte(sprite_address));
ASSIGN_OR_RETURN(uint8_t b2, rom()->ReadByte(sprite_address + 1)); ASSIGN_OR_RETURN(uint8_t b2, rom()->ReadByte(sprite_address + 1));
@@ -609,7 +609,7 @@ absl::Status Overworld::SaveOverworldMaps() {
if (map_pointers1_id[i] == -1) { if (map_pointers1_id[i] == -1) {
// Save compressed data and pointer for map1 // Save compressed data and pointer for map1
std::copy(a.begin(), a.end(), map_data_p1[i].begin()); std::copy(a.begin(), a.end(), map_data_p1[i].begin());
int snes_pos = core::PcToSnes(pos); int snes_pos = PcToSnes(pos);
map_pointers1[i] = snes_pos; map_pointers1[i] = snes_pos;
util::logf("Saving map pointers1 and compressed data for map %s at %s", util::logf("Saving map pointers1 and compressed data for map %s at %s",
util::HexByte(i), util::HexLong(snes_pos)); util::HexByte(i), util::HexLong(snes_pos));
@@ -641,7 +641,7 @@ absl::Status Overworld::SaveOverworldMaps() {
if (map_pointers2_id[i] == -1) { if (map_pointers2_id[i] == -1) {
// Save compressed data and pointer for map2 // Save compressed data and pointer for map2
std::copy(b.begin(), b.end(), map_data_p2[i].begin()); std::copy(b.begin(), b.end(), map_data_p2[i].begin());
int snes_pos = core::PcToSnes(pos); int snes_pos = PcToSnes(pos);
map_pointers2[i] = snes_pos; map_pointers2[i] = snes_pos;
util::logf("Saving map pointers2 and compressed data for map %s at %s", util::logf("Saving map pointers2 and compressed data for map %s at %s",
util::HexByte(i), util::HexLong(snes_pos)); util::HexByte(i), util::HexLong(snes_pos));
@@ -1107,45 +1107,45 @@ absl::Status Overworld::SaveMap32Expanded() {
// Updates the pointers too for the tile32 // Updates the pointers too for the tile32
// Top Right // Top Right
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x0176EC, core::PcToSnes(kMap32TileTRExpanded))); rom()->WriteLong(0x0176EC, PcToSnes(kMap32TileTRExpanded)));
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x0176F3, core::PcToSnes(kMap32TileTRExpanded + 1))); rom()->WriteLong(0x0176F3, PcToSnes(kMap32TileTRExpanded + 1)));
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x0176FA, core::PcToSnes(kMap32TileTRExpanded + 2))); rom()->WriteLong(0x0176FA, PcToSnes(kMap32TileTRExpanded + 2)));
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x017701, core::PcToSnes(kMap32TileTRExpanded + 3))); rom()->WriteLong(0x017701, PcToSnes(kMap32TileTRExpanded + 3)));
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x017708, core::PcToSnes(kMap32TileTRExpanded + 4))); rom()->WriteLong(0x017708, PcToSnes(kMap32TileTRExpanded + 4)));
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x01771A, core::PcToSnes(kMap32TileTRExpanded + 5))); rom()->WriteLong(0x01771A, PcToSnes(kMap32TileTRExpanded + 5)));
// BottomLeft // BottomLeft
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x01772C, core::PcToSnes(kMap32TileBLExpanded))); rom()->WriteLong(0x01772C, PcToSnes(kMap32TileBLExpanded)));
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x017733, core::PcToSnes(kMap32TileBLExpanded + 1))); rom()->WriteLong(0x017733, PcToSnes(kMap32TileBLExpanded + 1)));
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x01773A, core::PcToSnes(kMap32TileBLExpanded + 2))); rom()->WriteLong(0x01773A, PcToSnes(kMap32TileBLExpanded + 2)));
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x017741, core::PcToSnes(kMap32TileBLExpanded + 3))); rom()->WriteLong(0x017741, PcToSnes(kMap32TileBLExpanded + 3)));
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x017748, core::PcToSnes(kMap32TileBLExpanded + 4))); rom()->WriteLong(0x017748, PcToSnes(kMap32TileBLExpanded + 4)));
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x01775A, core::PcToSnes(kMap32TileBLExpanded + 5))); rom()->WriteLong(0x01775A, PcToSnes(kMap32TileBLExpanded + 5)));
// BottomRight // BottomRight
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x01776C, core::PcToSnes(kMap32TileBRExpanded))); rom()->WriteLong(0x01776C, PcToSnes(kMap32TileBRExpanded)));
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x017773, core::PcToSnes(kMap32TileBRExpanded + 1))); rom()->WriteLong(0x017773, PcToSnes(kMap32TileBRExpanded + 1)));
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x01777A, core::PcToSnes(kMap32TileBRExpanded + 2))); rom()->WriteLong(0x01777A, PcToSnes(kMap32TileBRExpanded + 2)));
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x017781, core::PcToSnes(kMap32TileBRExpanded + 3))); rom()->WriteLong(0x017781, PcToSnes(kMap32TileBRExpanded + 3)));
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x017788, core::PcToSnes(kMap32TileBRExpanded + 4))); rom()->WriteLong(0x017788, PcToSnes(kMap32TileBRExpanded + 4)));
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteLong(0x01779A, core::PcToSnes(kMap32TileBRExpanded + 5))); rom()->WriteLong(0x01779A, PcToSnes(kMap32TileBRExpanded + 5)));
return absl::OkStatus(); return absl::OkStatus();
} }
@@ -1279,79 +1279,79 @@ absl::Status Overworld::SaveMap32Tiles() {
} }
absl::Status Overworld::SaveMap16Expanded() { absl::Status Overworld::SaveMap16Expanded() {
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x008865), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x008865),
core::PcToSnes(kMap16TilesExpanded))); PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x0EDE4F), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x0EDE4F),
core::PcToSnes(kMap16TilesExpanded))); PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x0EDEE9), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x0EDEE9),
core::PcToSnes(kMap16TilesExpanded))); PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBC2D), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BBC2D),
core::PcToSnes(kMap16TilesExpanded + 2))); PcToSnes(kMap16TilesExpanded + 2)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBC4C), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BBC4C),
core::PcToSnes(kMap16TilesExpanded))); PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBCC2), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BBCC2),
core::PcToSnes(kMap16TilesExpanded + 4))); PcToSnes(kMap16TilesExpanded + 4)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBCCB), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BBCCB),
core::PcToSnes(kMap16TilesExpanded + 6))); PcToSnes(kMap16TilesExpanded + 6)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBEF6), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BBEF6),
core::PcToSnes(kMap16TilesExpanded))); PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BBF23), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BBF23),
core::PcToSnes(kMap16TilesExpanded))); PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BC041), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BC041),
core::PcToSnes(kMap16TilesExpanded))); PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BC9B3), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BC9B3),
core::PcToSnes(kMap16TilesExpanded))); PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BC9BA), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BC9BA),
core::PcToSnes(kMap16TilesExpanded + 2))); PcToSnes(kMap16TilesExpanded + 2)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BC9C1), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BC9C1),
core::PcToSnes(kMap16TilesExpanded + 4))); PcToSnes(kMap16TilesExpanded + 4)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BC9C8), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BC9C8),
core::PcToSnes(kMap16TilesExpanded + 6))); PcToSnes(kMap16TilesExpanded + 6)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BCA40), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BCA40),
core::PcToSnes(kMap16TilesExpanded))); PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BCA47), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BCA47),
core::PcToSnes(kMap16TilesExpanded + 2))); PcToSnes(kMap16TilesExpanded + 2)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BCA4E), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BCA4E),
core::PcToSnes(kMap16TilesExpanded + 4))); PcToSnes(kMap16TilesExpanded + 4)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x1BCA55), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x1BCA55),
core::PcToSnes(kMap16TilesExpanded + 6))); PcToSnes(kMap16TilesExpanded + 6)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F457), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F457),
core::PcToSnes(kMap16TilesExpanded))); PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F45E), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F45E),
core::PcToSnes(kMap16TilesExpanded + 2))); PcToSnes(kMap16TilesExpanded + 2)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F467), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F467),
core::PcToSnes(kMap16TilesExpanded + 4))); PcToSnes(kMap16TilesExpanded + 4)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F46E), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F46E),
core::PcToSnes(kMap16TilesExpanded + 6))); PcToSnes(kMap16TilesExpanded + 6)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F51F), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F51F),
core::PcToSnes(kMap16TilesExpanded))); PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F526), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F526),
core::PcToSnes(kMap16TilesExpanded + 4))); PcToSnes(kMap16TilesExpanded + 4)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F52F), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F52F),
core::PcToSnes(kMap16TilesExpanded + 2))); PcToSnes(kMap16TilesExpanded + 2)));
RETURN_IF_ERROR(rom()->WriteLong(core::SnesToPc(0x02F536), RETURN_IF_ERROR(rom()->WriteLong(SnesToPc(0x02F536),
core::PcToSnes(kMap16TilesExpanded + 6))); PcToSnes(kMap16TilesExpanded + 6)));
RETURN_IF_ERROR(rom()->WriteShort(core::SnesToPc(0x02FE1C), RETURN_IF_ERROR(rom()->WriteShort(SnesToPc(0x02FE1C),
core::PcToSnes(kMap16TilesExpanded))); PcToSnes(kMap16TilesExpanded)));
RETURN_IF_ERROR(rom()->WriteShort(core::SnesToPc(0x02FE23), RETURN_IF_ERROR(rom()->WriteShort(SnesToPc(0x02FE23),
core::PcToSnes(kMap16TilesExpanded + 4))); PcToSnes(kMap16TilesExpanded + 4)));
RETURN_IF_ERROR(rom()->WriteShort(core::SnesToPc(0x02FE2C), RETURN_IF_ERROR(rom()->WriteShort(SnesToPc(0x02FE2C),
core::PcToSnes(kMap16TilesExpanded + 2))); PcToSnes(kMap16TilesExpanded + 2)));
RETURN_IF_ERROR(rom()->WriteShort(core::SnesToPc(0x02FE33), RETURN_IF_ERROR(rom()->WriteShort(SnesToPc(0x02FE33),
core::PcToSnes(kMap16TilesExpanded + 6))); PcToSnes(kMap16TilesExpanded + 6)));
RETURN_IF_ERROR(rom()->WriteByte( RETURN_IF_ERROR(rom()->WriteByte(
core::SnesToPc(0x02FD28), SnesToPc(0x02FD28),
static_cast<uint8_t>(core::PcToSnes(kMap16TilesExpanded) >> 16))); static_cast<uint8_t>(PcToSnes(kMap16TilesExpanded) >> 16)));
RETURN_IF_ERROR(rom()->WriteByte( RETURN_IF_ERROR(rom()->WriteByte(
core::SnesToPc(0x02FD39), SnesToPc(0x02FD39),
static_cast<uint8_t>(core::PcToSnes(kMap16TilesExpanded) >> 16))); static_cast<uint8_t>(PcToSnes(kMap16TilesExpanded) >> 16)));
return absl::OkStatus(); return absl::OkStatus();
} }
@@ -1537,7 +1537,7 @@ absl::Status Overworld::SaveItems() {
item_pointers[i] = item_pointers[item_pointers_reuse[i]]; item_pointers[i] = item_pointers[item_pointers_reuse[i]];
} }
int snesaddr = core::PcToSnes(item_pointers[i]); int snesaddr = PcToSnes(item_pointers[i]);
RETURN_IF_ERROR( RETURN_IF_ERROR(
rom()->WriteWord(kOverworldItemsPointers + (i * 2), snesaddr)); rom()->WriteWord(kOverworldItemsPointers + (i * 2), snesaddr));
} }

View File

@@ -67,7 +67,7 @@ void TitleScreen::LoadTitleScreen() {
tilesBG2Buffer[i] = 492; tilesBG2Buffer[i] = 492;
} }
pos = core::SnesToPc(pos); pos = SnesToPc(pos);
while ((rom_[pos] & 0x80) != 0x80) { while ((rom_[pos] & 0x80) != 0x80) {
int dest_addr = pos; // $03 and $04 int dest_addr = pos; // $03 and $04

View File

@@ -115,14 +115,14 @@ class Decompress : public CommandHandler {
* @param arg_vec `-s <address>` * @param arg_vec `-s <address>`
* @return absl::Status * @return absl::Status
*/ */
class SnesToPc : public CommandHandler { class SnesToPcCommand : public CommandHandler {
public: public:
absl::Status handle(const std::vector<std::string>& arg_vec) override { absl::Status handle(const std::vector<std::string>& arg_vec) override {
auto arg = arg_vec[0]; auto arg = arg_vec[0];
std::stringstream ss(arg.data()); std::stringstream ss(arg.data());
uint32_t snes_address; uint32_t snes_address;
ss >> std::hex >> snes_address; ss >> std::hex >> snes_address;
uint32_t pc_address = core::SnesToPc(snes_address); uint32_t pc_address = SnesToPc(snes_address);
std::cout << std::hex << pc_address << std::endl; std::cout << std::hex << pc_address << std::endl;
return absl::OkStatus(); return absl::OkStatus();
} }
@@ -134,14 +134,14 @@ class SnesToPc : public CommandHandler {
* @param arg_vec `-p <address>` * @param arg_vec `-p <address>`
* @return absl::Status * @return absl::Status
*/ */
class PcToSnes : public CommandHandler { class PcToSnesCommand : public CommandHandler {
public: public:
absl::Status handle(const std::vector<std::string>& arg_vec) override { absl::Status handle(const std::vector<std::string>& arg_vec) override {
auto arg = arg_vec[0]; auto arg = arg_vec[0];
std::stringstream ss(arg.data()); std::stringstream ss(arg.data());
uint32_t pc_address; uint32_t pc_address;
ss >> std::hex >> pc_address; ss >> std::hex >> pc_address;
uint32_t snes_address = core::PcToSnes(pc_address); uint32_t snes_address = PcToSnes(pc_address);
ColorModifier blue(ColorCode::FG_BLUE); ColorModifier blue(ColorCode::FG_BLUE);
std::cout << "SNES LoROM Address: "; std::cout << "SNES LoROM Address: ";
std::cout << blue << "$" << std::uppercase << std::hex << snes_address std::cout << blue << "$" << std::uppercase << std::hex << snes_address
@@ -225,8 +225,8 @@ struct Commands {
{"-x", std::make_shared<Expand>()}, {"-x", std::make_shared<Expand>()},
{"-i", std::make_shared<Compress>()}, // Import {"-i", std::make_shared<Compress>()}, // Import
{"-e", std::make_shared<Decompress>()}, // Export {"-e", std::make_shared<Decompress>()}, // Export
{"-s", std::make_shared<SnesToPc>()}, {"-s", std::make_shared<SnesToPcCommand>()},
{"-p", std::make_shared<PcToSnes>()}, {"-p", std::make_shared<PcToSnesCommand>()},
{"-t", std::make_shared<Tile16Transfer>()}, {"-t", std::make_shared<Tile16Transfer>()},
{"-r", std::make_shared<ReadFromRom>()} // Read from Rom {"-r", std::make_shared<ReadFromRom>()} // Read from Rom
}; };