Resolved magic numbers and reviewer nits.
This commit is contained in:
@@ -20,15 +20,27 @@
|
|||||||
#include "app/core/constants.h"
|
#include "app/core/constants.h"
|
||||||
#include "app/gfx/bitmap.h"
|
#include "app/gfx/bitmap.h"
|
||||||
|
|
||||||
|
#define OVERWORLD_GRAPHICS_POS_1 0x4F80
|
||||||
|
#define OVERWORLD_GRAPHICS_POS_2 0x505F
|
||||||
|
#define OVERWORLD_GRAPHICS_POS_3 0x513E
|
||||||
|
#define COMPRESSION_STRING_MOD 7 << 5
|
||||||
|
|
||||||
|
#define SNES_BYTE_MAX 0xFF
|
||||||
|
|
||||||
|
#define CMD_MOD 0x07
|
||||||
|
#define CMD_EXPANDED_MOD 0xE0
|
||||||
|
#define CMD_EXPANDED_LENGTH_MOD 0x3FF
|
||||||
|
#define CMD_NORMAL_LENGTH_MOD 0x1F
|
||||||
|
|
||||||
namespace yaze {
|
namespace yaze {
|
||||||
namespace app {
|
namespace app {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
int GetGraphicsAddress(const uchar* data, uint8_t offset) {
|
int GetGraphicsAddress(const uchar* data, uint8_t offset) {
|
||||||
auto part_one = data[0x4F80 + offset] << 16;
|
auto part_one = data[OVERWORLD_GRAPHICS_POS_1 + offset] << 16;
|
||||||
auto part_two = data[0x505F + offset] << 8;
|
auto part_two = data[OVERWORLD_GRAPHICS_POS_2 + offset] << 8;
|
||||||
auto part_three = data[0x513E + offset];
|
auto part_three = data[OVERWORLD_GRAPHICS_POS_3 + offset];
|
||||||
auto snes_addr = (part_one | part_two | part_three);
|
auto snes_addr = (part_one | part_two | part_three);
|
||||||
return core::SnesToPc(snes_addr);
|
return core::SnesToPc(snes_addr);
|
||||||
}
|
}
|
||||||
@@ -37,7 +49,8 @@ void PrintCompressionPiece(const std::shared_ptr<CompressionPiece>& piece) {
|
|||||||
printf("Command : %d\n", piece->command);
|
printf("Command : %d\n", piece->command);
|
||||||
printf("length : %d\n", piece->length);
|
printf("length : %d\n", piece->length);
|
||||||
printf("Argument :");
|
printf("Argument :");
|
||||||
for (int i = 0; i < piece->argument.size(); ++i) {
|
auto arg_size = piece->arguments.size();
|
||||||
|
for (int i = 0; i < arg_size; ++i) {
|
||||||
printf("%02X ", piece->argument.at(i));
|
printf("%02X ", piece->argument.at(i));
|
||||||
}
|
}
|
||||||
printf("\nArgument length : %d\n", piece->argument_length);
|
printf("\nArgument length : %d\n", piece->argument_length);
|
||||||
@@ -112,11 +125,11 @@ std::shared_ptr<CompressionPiece> SplitCompressionPiece(
|
|||||||
new_piece = NewCompressionPiece(piece->command, length_left,
|
new_piece = NewCompressionPiece(piece->command, length_left,
|
||||||
piece->argument, piece->argument_length);
|
piece->argument, piece->argument_length);
|
||||||
if (mode == kNintendoMode2) {
|
if (mode == kNintendoMode2) {
|
||||||
new_piece->argument[0] = (offset + kMaxLengthCompression) & 0xFF;
|
new_piece->argument[0] = (offset + kMaxLengthCompression) & SNES_BYTE_MAX;
|
||||||
new_piece->argument[1] = (offset + kMaxLengthCompression) >> 8;
|
new_piece->argument[1] = (offset + kMaxLengthCompression) >> 8;
|
||||||
}
|
}
|
||||||
if (mode == kNintendoMode1) {
|
if (mode == kNintendoMode1) {
|
||||||
new_piece->argument[1] = (offset + kMaxLengthCompression) & 0xFF;
|
new_piece->argument[1] = (offset + kMaxLengthCompression) & SNES_BYTE_MAX;
|
||||||
new_piece->argument[0] = (offset + kMaxLengthCompression) >> 8;
|
new_piece->argument[0] = (offset + kMaxLengthCompression) >> 8;
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
@@ -137,7 +150,7 @@ Bytes CreateCompressionString(std::shared_ptr<CompressionPiece>& start,
|
|||||||
pos++;
|
pos++;
|
||||||
} else {
|
} else {
|
||||||
if (piece->length <= kMaxLengthCompression) {
|
if (piece->length <= kMaxLengthCompression) {
|
||||||
output.push_back((7 << 5) | ((uchar)piece->command << 2) |
|
output.push_back((COMPRESSION_STRING_MOD) | ((uchar)piece->command << 2) |
|
||||||
(((piece->length - 1) & 0xFF00) >> 8));
|
(((piece->length - 1) & 0xFF00) >> 8));
|
||||||
pos++;
|
pos++;
|
||||||
printf("Building extended header : cmd: %d, length: %d - %02X\n",
|
printf("Building extended header : cmd: %d, length: %d - %02X\n",
|
||||||
@@ -178,7 +191,7 @@ Bytes CreateCompressionString(std::shared_ptr<CompressionPiece>& start,
|
|||||||
pos += piece->argument_length;
|
pos += piece->argument_length;
|
||||||
piece = piece->next;
|
piece = piece->next;
|
||||||
}
|
}
|
||||||
output.push_back(0xFF);
|
output.push_back(SNES_BYTE_MAX);
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -248,7 +261,7 @@ void TestAllCommands(const uchar* rom_data, DataSizeArray& data_size_taken,
|
|||||||
search_start -= start;
|
search_start -= start;
|
||||||
printf("-Found repeat of %d at %d\n", copied_size, search_start);
|
printf("-Found repeat of %d at %d\n", copied_size, search_start);
|
||||||
data_size_taken[kCommandRepeatingBytes] = copied_size;
|
data_size_taken[kCommandRepeatingBytes] = copied_size;
|
||||||
cmd_args[kCommandRepeatingBytes][0] = search_start & 0xFF;
|
cmd_args[kCommandRepeatingBytes][0] = search_start & SNES_BYTE_MAX;
|
||||||
cmd_args[kCommandRepeatingBytes][1] = search_start >> 8;
|
cmd_args[kCommandRepeatingBytes][1] = search_start >> 8;
|
||||||
}
|
}
|
||||||
current_pos_u = u_data_pos;
|
current_pos_u = u_data_pos;
|
||||||
@@ -430,16 +443,16 @@ absl::StatusOr<Bytes> ROM::Decompress(int offset, int size, bool reversed) {
|
|||||||
uint buffer_pos = 0;
|
uint buffer_pos = 0;
|
||||||
uchar cmd = 0;
|
uchar cmd = 0;
|
||||||
uchar databyte = rom_data_[offset];
|
uchar databyte = rom_data_[offset];
|
||||||
while (databyte != 0xFF) { // End of decompression
|
while (databyte != SNES_BYTE_MAX) { // End of decompression
|
||||||
databyte = rom_data_[offset];
|
databyte = rom_data_[offset];
|
||||||
|
|
||||||
if ((databyte & 0xE0) == 0xE0) { // Expanded Command
|
if ((databyte & CMD_EXPANDED_MOD) == CMD_EXPANDED_MOD) { // Expanded Command
|
||||||
cmd = ((databyte >> 2) & 0x07);
|
cmd = ((databyte >> 2) & CMD_MOD);
|
||||||
length = (((databyte << 8) | rom_data_[offset + 1]) & 0x3FF);
|
length = (((databyte << 8) | rom_data_[offset + 1]) & CMD_EXPANDED_LENGTH_MOD);
|
||||||
offset += 2; // Advance 2 bytes in ROM
|
offset += 2; // Advance 2 bytes in ROM
|
||||||
} else { // Normal Command
|
} else { // Normal Command
|
||||||
cmd = ((databyte >> 5) & 0x07);
|
cmd = ((databyte >> 5) & CMD_MOD);
|
||||||
length = (databyte & 0x1F);
|
length = (databyte & CMD_NORMAL_LENGTH_MOD);
|
||||||
offset += 1; // Advance 1 byte in ROM
|
offset += 1; // Advance 1 byte in ROM
|
||||||
}
|
}
|
||||||
length += 1; // each commands is at least of size 1 even if index 00
|
length += 1; // each commands is at least of size 1 even if index 00
|
||||||
@@ -467,8 +480,8 @@ absl::StatusOr<Bytes> ROM::Decompress(int offset, int size, bool reversed) {
|
|||||||
offset += 1; // Advance 1 byte in the ROM
|
offset += 1; // Advance 1 byte in the ROM
|
||||||
} break;
|
} break;
|
||||||
case kCommandRepeatingBytes: {
|
case kCommandRepeatingBytes: {
|
||||||
ushort s1 = ((rom_data_[offset + 1] & 0xFF) << 8);
|
ushort s1 = ((rom_data_[offset + 1] & SNES_BYTE_MAX) << 8);
|
||||||
ushort s2 = ((rom_data_[offset] & 0xFF));
|
ushort s2 = ((rom_data_[offset] & SNES_BYTE_MAX));
|
||||||
if (reversed) { // Reversed byte order for overworld maps
|
if (reversed) { // Reversed byte order for overworld maps
|
||||||
auto addr = (rom_data_[offset + 2]) | ((rom_data_[offset + 1]) << 8);
|
auto addr = (rom_data_[offset + 2]) | ((rom_data_[offset + 1]) << 8);
|
||||||
if (addr > offset) {
|
if (addr > offset) {
|
||||||
@@ -567,7 +580,7 @@ absl::Status ROM::LoadFromFile(const absl::string_view& filename) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
absl::Status ROM::LoadFromPointer(uchar* data, size_t length) {
|
absl::Status ROM::LoadFromPointer(uchar* data, size_t length) {
|
||||||
if (data == nullptr)
|
if (!data)
|
||||||
return absl::InvalidArgumentError(
|
return absl::InvalidArgumentError(
|
||||||
"Could not load ROM: parameter `data` is empty.");
|
"Could not load ROM: parameter `data` is empty.");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user