Continuing Payload Work

This commit is contained in:
The Gears of Progress 2024-05-02 12:18:24 -05:00
parent 5cb282c8a7
commit bf7f7f401c
25 changed files with 1408 additions and 201 deletions

1080
Pokemon_Mirror_mb.sym Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 292 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 277 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

View File

@ -0,0 +1,3 @@
#
# Button : 4bpp, not compressed. Pallet 2, copy from 32 to 48.
-gB4 -ps32 -pe48

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 B

View File

@ -26,7 +26,6 @@ public:
hword stack_overwrite_location; // The part of the stack that we're overwriting
byte short_pkmn_name; // The name of the Pokemon that moves us through RAM
byte pointer_pkmn_name; // The name of the Pokemon that overwrites the stack
byte enter_vector_destination; // The location within the payload array where the jump should start
hword enter_vector_location; // Where we should jump to from the enter vector
// This can be a few different places:
// wSerialOtherGameboyRandomNumberListBlock:
@ -36,33 +35,37 @@ public:
// wSerialEnemyMonsPatchList:
// 0xC5D0 to 0xC6E8
word clearScreen;
word CableClub_TextBoxBoarder;
hword placeString;
hword hSerialConnectionStatus;
hword wBoxDataStart;
hword wBoxDataEnd;
hword Serial_ExchangeBytes;
word wRemoveMonFromBox;
word wBoxCount;
word wWhichPokemon;
word _RemovePokemon;
word SaveSAVtoSRAM1;
byte SaveSAVtoSRAM1_memBank;
hword Bankswitch;
hword SoftReset;
hword garbageDataLocation;
word clearScreen; // location of the clearScreen function in the ROM
word CableClub_TextBoxBorder; // location of the CableClub_TextBoxBorder function in the ROM
word placeString; // location of the placeString function in the ROM
word Serial_ExchangeBytes; // location of the Serial_ExchangeBytes function in the ROM
word _RemovePokemon; // location of the _RemovePokemon function in the ROM
word SaveSAVtoSRAM1; // location of the SaveSAVtoSRAM1 function in the ROM
word SaveSAVtoSRAM2; // location of the SaveSAVtoSRAM2 function in the ROM
word OpenSRAM; // location of the OpenSRAM function in the ROM
word SaveBox; // location of the SaveBox function in the ROM
word Bankswitch; // location of the Bankswitch function in the ROM
word SoftReset; // location of the SoftReset function in the ROM
word garbageDataLocation; // location of random data starting with 0xFD in the ROM
hword transferWaitString;
hword pkmnTransferArray;
hword arrayCounter;
byte transferString[30];
byte custom_name[11];
word wRemoveMonFromBox; // location of wRemoveMonFromBox in RAM
word wBoxCount; // location of wBoxCount in RAM
word wWhichPokemon; // location of wWhichPokemon in RAM
word hSerialConnectionStatus; // location of hSerialConnectionStatus in RAM
word wBoxDataStart; // location of wBoxDataStart in RAM
word wBoxDataEnd; // location of wBoxDataEnd in RAM
hword transferStringLocation;
hword textBoarderUppLeft;
byte textBoarderWidth;
byte textBoarderHeight;
word transferWaitString; // location of the transferWaitString in RAM
word pkmnTransferArray; // location of the pkmnTransferArray in RAM
word arrayCounter; // location of the arrayCounter in RAM
byte transferString[30]; // the custom transfer string
byte custom_name[11]; // the custom name string
hword transferStringLocation; // location in VRAM to start writing the transfer string to
hword textBorderUppLeft; // location in VRAM to put the upper left corner of the border
byte textBorderWidth; // the width of the text box border
byte textBorderHeight; // the height of the text box border
};
#endif

View File

@ -10,12 +10,13 @@
#define SPA_ID 7
#define KOR_ID 8
#define RED_GREEN_ID 0
#define RED_BLUE_ID 1
#define GREEN_ID 0
#define RED_ID 1
#define BLUE_ID 2
#define YELLOW_ID 3
#define GOLD_SILVER_ID 4
#define CRYSTAL_ID 5
#define GOLD_ID 4
#define SILVER_ID 5
#define CRYSTAL_ID 6
#define METHOD_NEWLINE 0
#define METHOD_MEW 1
@ -25,7 +26,7 @@
const struct GB_ROM ENG_RED_BLUE = {
.language = ENG_ID,
.version = RED_BLUE_ID,
.version = RED_ID,
.generation = 1,
.method = METHOD_NEWLINE,
.payload_size = 637,
@ -36,41 +37,40 @@ const struct GB_ROM ENG_RED_BLUE = {
.short_pkmn_name = 0xE3,
.pointer_pkmn_name = 0xFC,
.enter_vector_destination = 0x05,
.enter_vector_location = 0xC5D6,
.clearScreen = 0x190F,
.CableClub_TextBoxBoarder = 0x5AB3,
.CableClub_TextBoxBorder = 0x5AB3,
.placeString = 0x1955,
.hSerialConnectionStatus = 0xFFAA,
.wBoxDataStart = 0xDA80,
.wBoxDataEnd = 0xDEE2,
.Serial_ExchangeBytes = 0x216F,
._RemovePokemon = 0x7B68,
.SaveSAVtoSRAM1 = 0x1C77E2,
.SaveSAVtoSRAM2 = 0x1C780F,
.Bankswitch = 0x35D6,
.SoftReset = 0x1F49,
.garbageDataLocation = 0x0316,
.wRemoveMonFromBox = 0xCF95,
.wBoxCount = 0xDA80,
.wWhichPokemon = 0xCF92,
._RemovePokemon = 0x7B68,
.SaveSAVtoSRAM1 = 0x77E2,
.SaveSAVtoSRAM1_memBank = 0x1C,
.Bankswitch = 0x35D6,
.SoftReset = 0x1F49,
.garbageDataLocation = 0x0316, // Starts with 0xFD
.hSerialConnectionStatus = 0xFFAA,
.wBoxDataStart = 0xDA80,
.wBoxDataEnd = 0xDEE2,
.transferWaitString = 0xC67A, // Enter vector + A4
.pkmnTransferArray = 0xC651, // Enter vector + 7B
.arrayCounter = 0xC650, // Enter vector + 7A
.transferString = { // TRANSFERRING..\n
.transferWaitString = 0xC67A,
.pkmnTransferArray = 0xC651,
.arrayCounter = 0xC650,
.transferString = {// TRANSFERRING..\n
// PLEASE WAIT!
0x93, 0x91, 0x80, 0x8D, 0x92, 0x85, 0x84, 0x91, 0x91, 0x88, 0x8D, 0x86, 0xF2, 0xF2, 0x4E,
0x7F, 0x8F, 0x8B, 0x84, 0x80, 0x92, 0x84, 0x7F, 0x96, 0x80, 0x88, 0x93, 0xE7, 0x7F, 0x50},
.custom_name = {0x85, 0x84, 0x8D, 0x8D, 0x84, 0x8B, 0x50, 0x50, 0x50, 0x50, 0x50},
.transferStringLocation = 0xC443,
.textBoarderUppLeft = 0xC42E,
.textBoarderWidth = 3,
.textBoarderHeight = 14,
.textBorderUppLeft = 0xC42E,
.textBorderWidth = 3,
.textBorderHeight = 14,
};
const struct GB_ROM ENG_YELLOW = {
.language = ENG_ID,
.version = YELLOW_ID,
@ -84,89 +84,170 @@ const struct GB_ROM ENG_YELLOW = {
.short_pkmn_name = 0x15,
.pointer_pkmn_name = 0xE3,
//.enter_vector_destination = 0x05,
//.enter_vector_location = 0xC5D6,
.clearScreen = 0x16DD,
.CableClub_TextBoxBoarder = 0x5B67,
.CableClub_TextBoxBorder = 0x5B67,
.placeString = 0x1723,
.hSerialConnectionStatus = 0xFFAA,
.wBoxDataStart = 0xDA7F,
.wBoxDataEnd = 0xDEE1,
.Serial_ExchangeBytes = 0x1FCB,
._RemovePokemon = 0x7A0F,
.SaveSAVtoSRAM1 = 0x1C1B32,
.Bankswitch = 0x3E84,
.SoftReset = 0x1D05,
.garbageDataLocation = 0x0161,
.wRemoveMonFromBox = 0xCF94,
.wBoxCount = 0xDA7F,
.wWhichPokemon = 0xCF91,
._RemovePokemon = 0x7A0F,
.SaveSAVtoSRAM1 = 0x1B32,
.SaveSAVtoSRAM1_memBank = 0x1C,
.Bankswitch = 0x3E84,
.SoftReset = 0x1D05,
.garbageDataLocation = 0x0161, // Starts with 0xFD
.hSerialConnectionStatus = 0xFFAA,
.transferWaitString = 0xC67A, // Enter vector + A4
.pkmnTransferArray = 0xC651, // Enter vector + 7B
.arrayCounter = 0xC650, // Enter vector + 7A
.transferString = { // TRANSFERRING..\n
.wBoxDataStart = 0xDA7F,
.wBoxDataEnd = 0xDEE1,
.transferWaitString = 0xC67A,
.pkmnTransferArray = 0xC651,
.arrayCounter = 0xC650,
.transferString = {// TRANSFERRING..\n
// PLEASE WAIT!
0x93, 0x91, 0x80, 0x8D, 0x92, 0x85, 0x84, 0x91, 0x91, 0x88, 0x8D, 0x86, 0xF2, 0xF2, 0x4E,
0x7F, 0x8F, 0x8B, 0x84, 0x80, 0x92, 0x84, 0x7F, 0x96, 0x80, 0x88, 0x93, 0xE7, 0x7F, 0x50},
.custom_name = {0x85, 0x84, 0x8D, 0x8D, 0x84, 0x8B, 0x50, 0x50, 0x50, 0x50, 0x50},
.transferStringLocation = 0xC443,
.textBoarderUppLeft = 0xC42E,
.textBoarderWidth = 3,
.textBoarderHeight = 14,
.textBorderUppLeft = 0xC42E,
.textBorderWidth = 3,
.textBorderHeight = 14,
};
const struct GB_ROM ENG_GOLD_SILVER = {
const struct GB_ROM ENG_GOLD = {
.language = ENG_ID,
.version = GOLD_SILVER_ID,
.version = GOLD_ID,
.generation = 2,
.method = METHOD_GEN2,
.payload_size = 672,
.box_data_size = 0x44E,
/**/
.print_string_start = 0xC442,
.stack_overwrite_location = 0xDFCB, // Found by seeing where 772C is stored in the stack, 772C is the code that calls PlaceString
.short_pkmn_name = 0x4E,
//.pointer_pkmn_name = 0xFC,
//.enter_vector_destination = 0x05,
.enter_vector_location = 0xC5D6,
.enter_vector_location = 0xC7B4,
.clearScreen = 0x000EE2,
.CableClub_TextBoxBoarder = 0x0A4D88, // LinkTextboxAtHL
.CableClub_TextBoxBorder = 0x0A4D88, // LinkTextboxAtHL
.placeString = 0x000F74,
.Serial_ExchangeBytes = 0x0710,
._RemovePokemon = 0x03603F, // RemoveMonFromPartyOrBox
.OpenSRAM = 0x0030E1,
.SaveBox = 0x054DF6,
.SoftReset = 0x05B0,
.garbageDataLocation = 0x0654,
.wRemoveMonFromBox = 0x01D008, // wPokemonWithdrawDepositParameter
.wBoxCount = 0x01AD6C, // sBoxCount
.wWhichPokemon = 0x01D005, // wCurPartyMon
.hSerialConnectionStatus = 0xFFCD,
.wBoxDataStart = 0xAD6C, // sBoxStart
.wBoxDataEnd = 0xB1BA, // sBoxEnd
.Serial_ExchangeBytes = 0x0710,
.wRemoveMonFromBox = 0x01D008, // wPokemonWithdrawDepositParameter, bank 1
.wBoxCount = 0x01AD6C, // sBoxCount, bank 1
.wWhichPokemon = 0x01D005, // wCurPartyMon, bank 1
._RemovePokemon = 0x03603F - 2, // RemoveMonFromPartyOrBox, bank 3
.SaveSAVtoSRAM1 = 0x0577E2, // ? 0x4DF6
.SaveSAVtoSRAM1_memBank = 0x5,
//.Bankswitch = 0x0010,
.SoftReset = 0x05B0, // ?
.garbageDataLocation = 0x0654, // ? Starts with 0xFD
.transferWaitString = 0xC67A, // Enter vector +
.pkmnTransferArray = 0xC651, // Enter vector +
.arrayCounter = 0xC650, // Enter vector +
.transferString = { // TRANSFERRING..\n
.transferWaitString = 0xC67A,
.pkmnTransferArray = 0xC651,
.arrayCounter = 0xC650,
.transferString = {// TRANSFERRING..\n
// PLEASE WAIT!
0x93, 0x91, 0x80, 0x8D, 0x92, 0x85, 0x84, 0x91, 0x91, 0x88, 0x8D, 0x86, 0xF2, 0xF2, 0x4E,
0x7F, 0x8F, 0x8B, 0x84, 0x80, 0x92, 0x84, 0x7F, 0x96, 0x80, 0x88, 0x93, 0xE7, 0x7F, 0x50},
.custom_name = {0x85, 0x84, 0x8D, 0x8D, 0x84, 0x8B, 0x50, 0x50, 0x50, 0x50, 0x50},
.transferStringLocation = 0xC443, // ?
.textBoarderUppLeft = 0xC42E, // ?
.textBoarderWidth = 3, // ?
.textBoarderHeight = 14, // ?
.transferStringLocation = 0xC443,
.textBorderUppLeft = 0xC42E,
.textBorderWidth = 3,
.textBorderHeight = 14,
};
const struct GB_ROM ENG_SILVER = {
.language = ENG_ID,
.version = GOLD_ID,
.generation = 2,
.method = METHOD_GEN2,
.payload_size = 672,
.box_data_size = 0x44E,
.print_string_start = 0xC442,
.stack_overwrite_location = 0xDFCB, // Found by seeing where 772C is stored in the stack, 772C is the code that calls PlaceString
.short_pkmn_name = 0x4E,
.enter_vector_location = 0xC7B4,
.clearScreen = 0x000EE2,
.CableClub_TextBoxBorder = 0x0A4D88, // LinkTextboxAtHL
.placeString = 0x000F74,
.Serial_ExchangeBytes = 0x0710,
._RemovePokemon = 0x03603D, // RemoveMonFromPartyOrBox
.OpenSRAM = 0x0030E1,
.SaveBox = 0x054DF6,
.SoftReset = 0x05B0,
.garbageDataLocation = 0x0654,
.wRemoveMonFromBox = 0x01D008, // wPokemonWithdrawDepositParameter
.wBoxCount = 0x01AD6C, // sBoxCount
.wWhichPokemon = 0x01D005, // wCurPartyMon
.hSerialConnectionStatus = 0xFFCD,
.wBoxDataStart = 0xAD6C, // sBoxStart
.wBoxDataEnd = 0xB1BA, // sBoxEnd
.transferWaitString = 0xC67A,
.pkmnTransferArray = 0xC651,
.arrayCounter = 0xC650,
.transferString = {// TRANSFERRING..\n
// PLEASE WAIT!
0x93, 0x91, 0x80, 0x8D, 0x92, 0x85, 0x84, 0x91, 0x91, 0x88, 0x8D, 0x86, 0xF2, 0xF2, 0x4E,
0x7F, 0x8F, 0x8B, 0x84, 0x80, 0x92, 0x84, 0x7F, 0x96, 0x80, 0x88, 0x93, 0xE7, 0x7F, 0x50},
.custom_name = {0x85, 0x84, 0x8D, 0x8D, 0x84, 0x8B, 0x50, 0x50, 0x50, 0x50, 0x50},
.transferStringLocation = 0xC443,
.textBorderUppLeft = 0xC42E,
.textBorderWidth = 3,
.textBorderHeight = 14,
};
const struct GB_ROM ENG_CRYSTAL = {
.language = ENG_ID,
.version = CRYSTAL_ID,
.generation = 2,
.method = METHOD_GEN2,
.payload_size = 672,
.box_data_size = 0x44E,
.print_string_start = 0xC4AA,
.stack_overwrite_location = 0xC0BB, // Found by seeing where 772C is stored in the stack, 772C is the code that calls PlaceString
.short_pkmn_name = 0x4E,
.enter_vector_location = 0xC7B4,
.clearScreen = 0x000FDB,
.CableClub_TextBoxBorder = 0x0A4EEF, // LinkTextboxAtHL
.placeString = 0x001078,
.Serial_ExchangeBytes = 0x075F,
._RemovePokemon = 0x036039, // RemoveMonFromPartyOrBox
.OpenSRAM = 0x0030E1,
.SaveBox = 0x054E0C,
.SoftReset = 0x0150, // Reset
.garbageDataLocation = 0x0770,
.wRemoveMonFromBox = 0x01D10B, // wPokemonWithdrawDepositParameter
.wBoxCount = 0x01AD10, // sBoxCount
.wWhichPokemon = 0x01D109, // wCurPartyMon
.hSerialConnectionStatus = 0xFFCB,
.wBoxDataStart = 0x01AD10, // sBox
.wBoxDataEnd = 0x01B15E, // sBoxEnd
.transferWaitString = 0xC67A,
.pkmnTransferArray = 0xC651,
.arrayCounter = 0xC650,
.transferString = {// TRANSFERRING..\n
// PLEASE WAIT!
0x93, 0x91, 0x80, 0x8D, 0x92, 0x85, 0x84, 0x91, 0x91, 0x88, 0x8D, 0x86, 0xF2, 0xF2, 0x4E,
0x7F, 0x8F, 0x8B, 0x84, 0x80, 0x92, 0x84, 0x7F, 0x96, 0x80, 0x88, 0x93, 0xE7, 0x7F, 0x50},
.custom_name = {0x85, 0x84, 0x8D, 0x8D, 0x84, 0x8B, 0x50, 0x50, 0x50, 0x50, 0x50},
.transferStringLocation = 0xC443,
.textBorderUppLeft = 0xC42E,
.textBorderWidth = 3,
.textBorderHeight = 14,
};
#endif

View File

@ -42,6 +42,7 @@ private:
int x_max;
int y_min;
int y_max;
int offset_value;
int bottom_offset;
bool cancel_enabled;
};

View File

@ -19,12 +19,13 @@
#define SPA_ID 7
#define KOR_ID 8
#define RED_GREEN_ID 0
#define RED_BLUE_ID 1
#define GREEN_ID 0
#define RED_ID 1
#define BLUE_ID 2
#define YELLOW_ID 3
#define GOLD_SILVER_ID 4
#define CRYSTAL_ID 5
#define GOLD_ID 4
#define SILVER_ID 5
#define CRYSTAL_ID 6
#define EVENT_MEW_JPN 0
#define EVENT_MEW_ENG 1

View File

@ -61,21 +61,24 @@ extern OBJ_ATTR *btn_lang_spa;
extern OBJ_ATTR *btn_lang_kor;
#define SPRITE_BATCH_GAMES 2
#include "button_red_green_left.h"
extern OBJ_ATTR *button_red_green_left;
extern OBJ_ATTR *button_red_green_right;
#include "button_green_left.h"
extern OBJ_ATTR *button_green_left;
extern OBJ_ATTR *button_green_right;
#include "button_blue_left.h"
extern OBJ_ATTR *button_blue_left;
extern OBJ_ATTR *button_blue_right;
#include "button_red_blue_left.h"
extern OBJ_ATTR *button_red_blue_left;
extern OBJ_ATTR *button_red_blue_right;
#include "button_red_left.h"
extern OBJ_ATTR *button_red_left;
extern OBJ_ATTR *button_red_right;
#include "button_yellow_left.h"
extern OBJ_ATTR *button_yellow_left;
extern OBJ_ATTR *button_yellow_right;
#include "button_gold_silver_left.h"
extern OBJ_ATTR *button_gold_silver_left;
extern OBJ_ATTR *button_gold_silver_right;
#include "button_gold_left.h"
extern OBJ_ATTR *button_gold_left;
extern OBJ_ATTR *button_gold_right;
#include "button_silver_left.h"
extern OBJ_ATTR *button_silver_left;
extern OBJ_ATTR *button_silver_right;
#include "button_crystal_left.h"
extern OBJ_ATTR *button_crystal_left;
extern OBJ_ATTR *button_crystal_right;

View File

@ -20,8 +20,6 @@ Button_Menu::Button_Menu(int nRows, int nColumns, int nButton_width, int nButton
cancel_enabled = enable_cancel;
}
void Button_Menu::set_xy_min_max(int nX_min, int nX_max, int nY_min, int nY_max)
{
x_min = nX_min;
@ -52,22 +50,34 @@ int Button_Menu::button_main()
if (get_pos_from_xy(curr_x, curr_y) >= button_vector.size())
{
curr_y--;
curr_x += offset_value / 2;
}
}
else if (key_hit(KEY_DOWN) && (curr_y < (rows - 1)))
{
curr_y++;
if (get_pos_from_xy(curr_x, curr_y) >= button_vector.size())
{
curr_x = get_x_from_pos(button_vector.size() - 1);
}
}
else if (key_hit(KEY_LEFT) && ((curr_x > 0) || ((curr_x == 0) && (curr_y == rows - 1) && (offset_value > 0))))
{
if (curr_x == 0 && offset_value > 0)
{
curr_y -= 1;
}
else
{
curr_x--;
}
}
else if (key_hit(KEY_LEFT) && (curr_x > 0))
{
curr_x--;
}
else if (key_hit(KEY_UP) && (curr_y > 0))
{
if (curr_y == rows - 1)
{
curr_x += offset_value / 2;
}
curr_y--;
}
else if (key_hit(KEY_A))
@ -121,8 +131,8 @@ void Button_Menu::organize_buttons()
((y_max - y_min) - (rows * button_height)) / (rows + 1);
int horizontal_space =
((x_max - x_min) - (columns * button_width)) / (columns + 1);
int bottom_offset = ((horizontal_space + button_width) * ((rows * columns) - button_vector.size()) / 2);
bottom_offset = ((horizontal_space + button_width) * ((rows * columns) - button_vector.size()) / 2);
offset_value = (rows * columns) - button_vector.size();
for (unsigned int i = 0; i < button_vector.size(); i++)
{
button_vector.at(i).set_location(
@ -158,6 +168,7 @@ void Button_Menu::set_bottom_row_offset(int nBottom_offset)
bottom_offset = nBottom_offset;
}
void Button_Menu::clear_vector(){
void Button_Menu::clear_vector()
{
button_vector.clear();
}

View File

@ -74,9 +74,9 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
}
// Set the entrance vector
payload_storage[curr_rom.enter_vector_destination] = 0xC3;
payload_storage[curr_rom.enter_vector_destination + 1] = curr_rom.enter_vector_location & 0xFF;
payload_storage[curr_rom.enter_vector_destination + 2] = (curr_rom.enter_vector_location >> 8) & 0xFF;
payload_storage[5] = 0xC3;
payload_storage[6] = curr_rom.enter_vector_location & 0xFF;
payload_storage[7] = (curr_rom.enter_vector_location >> 8) & 0xFF;
// Patchlist
// At 0x1BB / 0x1DE, 0xC2 in length (0xC4, but the last 2 are unused)
@ -92,21 +92,21 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
// ld hl, [upper left textbox corner in VRAM]
payload_storage[offset++] = 0x21;
payload_storage[offset++] = (curr_rom.textBoarderUppLeft >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.textBoarderUppLeft >> 8) & 0xFF;
payload_storage[offset++] = (curr_rom.textBorderUppLeft >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.textBorderUppLeft >> 8) & 0xFF;
// ld b, 3 [height]
payload_storage[offset++] = 0x06;
payload_storage[offset++] = (curr_rom.textBoarderWidth >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.textBorderWidth >> 0) & 0xFF;
// ld c, 14 [width]
payload_storage[offset++] = 0x0E;
payload_storage[offset++] = (curr_rom.textBoarderHeight >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.textBorderHeight >> 0) & 0xFF;
// call CableClub_TextBoxBoarder
// call CableClub_TextBoxBorder
payload_storage[offset++] = 0xCD;
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBoarder >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBoarder >> 8) & 0xFF;
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBorder >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBorder >> 8) & 0xFF;
// ld hl, [transfer string location]
payload_storage[offset++] = 0x21;
@ -282,14 +282,24 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
payload_storage[offset++] = 0xDD;
/* Save the current box */
// ld b, 0x1C [memory bank of SaveSAVtoSRAM1]
payload_storage[offset++] = 0x06;
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1 >> 16) & 0xFF;
// ld hl, SaveSAVtoSRAM1
payload_storage[offset++] = 0x21;
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1 >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1 >> 8) & 0xFF;
// ld b, 0x1C [memory bank of SaveSAVtoSRAM1]
payload_storage[offset++] = 0x06;
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1_memBank >> 0) & 0xFF;
// call Bankswitch [which will jump to what's loaded in HL]
payload_storage[offset++] = 0xCD;
payload_storage[offset++] = (curr_rom.Bankswitch >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.Bankswitch >> 8) & 0xFF;
// ld hl, SaveSAVtoSRAM2
payload_storage[offset++] = 0x21;
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM2 >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM2 >> 8) & 0xFF;
// call Bankswitch [which will jump to what's loaded in HL]
payload_storage[offset++] = 0xCD;
@ -426,7 +436,7 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
// ld a, 0x1C
payload_storage[offset++] = 0x3E;
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1_memBank >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1 >> 16) & 0xFF;
// call BankswitchCommon
payload_storage[offset++] = 0xCD;
@ -481,21 +491,21 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
// ld hl, [upper left textbox corner in VRAM]
payload_storage[offset++] = 0x21;
payload_storage[offset++] = (curr_rom.textBoarderUppLeft >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.textBoarderUppLeft >> 8) & 0xFF;
payload_storage[offset++] = (curr_rom.textBorderUppLeft >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.textBorderUppLeft >> 8) & 0xFF;
// ld b, 3 [height]
payload_storage[offset++] = 0x06;
payload_storage[offset++] = (curr_rom.textBoarderWidth >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.textBorderWidth >> 0) & 0xFF;
// ld c, 14 [width]
payload_storage[offset++] = 0x0E;
payload_storage[offset++] = (curr_rom.textBoarderHeight >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.textBorderHeight >> 0) & 0xFF;
// call CableClub_TextBoxBoarder
// call CableClub_TextBoxBorder
payload_storage[offset++] = 0xCD;
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBoarder >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBoarder >> 8) & 0xFF;
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBorder >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.CableClub_TextBoxBorder >> 8) & 0xFF;
// ld hl, [transfer string location]
payload_storage[offset++] = 0x21;
@ -682,7 +692,7 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
/* Save the current box */
// ld a, 0x1C
payload_storage[offset++] = 0x3E;
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1_memBank >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.SaveSAVtoSRAM1 >> 16) & 0xFF;
// call BankswitchCommon
payload_storage[offset++] = 0xCD;
@ -784,7 +794,7 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
// write_call(curr_rom.generation, payload_storage, offset, 0x0363D8);
// Saving the box overwrites our code, so we need to move it here.
write_call(curr_rom.generation, payload_storage, offset, 0x054DF6);
write_call(curr_rom.generation, payload_storage, offset, curr_rom.SaveBox);
// jp SoftReset
payload_storage[offset++] = 0xC3;
@ -812,19 +822,19 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
// ld hl, [upper left textbox corner in VRAM]
payload_storage[offset++] = 0x21;
payload_storage[offset++] = (curr_rom.textBoarderUppLeft >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.textBoarderUppLeft >> 8) & 0xFF;
payload_storage[offset++] = (curr_rom.textBorderUppLeft >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.textBorderUppLeft >> 8) & 0xFF;
// ld b, 3 [height]
payload_storage[offset++] = 0x06;
payload_storage[offset++] = (curr_rom.textBoarderWidth >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.textBorderWidth >> 0) & 0xFF;
// ld c, 14 [width]
payload_storage[offset++] = 0x0E;
payload_storage[offset++] = (curr_rom.textBoarderHeight >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.textBorderHeight >> 0) & 0xFF;
// call CableClub_TextBoxBoarder
write_call(curr_rom.generation, payload_storage, offset, curr_rom.CableClub_TextBoxBoarder);
// call CableClub_TextBoxBorder
write_call(curr_rom.generation, payload_storage, offset, curr_rom.CableClub_TextBoxBorder);
// ld hl, [transfer string location]
payload_storage[offset++] = 0x21;
@ -852,7 +862,7 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
// call OpenSRAM
payload_storage[offset++] = 0x3E;
payload_storage[offset++] = 0x01;
write_call(curr_rom.generation, payload_storage, offset, 0x0030E1);
write_call(curr_rom.generation, payload_storage, offset, curr_rom.OpenSRAM);
// ld hl, (wBoxDataStart - 1) [data to send]
payload_storage[offset++] = 0x21;
@ -1003,8 +1013,8 @@ byte *generate_payload(GB_ROM curr_rom, bool debug)
// jp pkmn list (because saving the box overwrites the data)
payload_storage[offset++] = 0xC3;
payload_storage[offset++] = 0xB4;
payload_storage[offset++] = 0xC7;
payload_storage[offset++] = (curr_rom.enter_vector_location >> 0) & 0xFF;
payload_storage[offset++] = (curr_rom.enter_vector_location >> 8) & 0xFF;
// 72 total bytes of string/array stuff
@ -1061,7 +1071,6 @@ void write_call(int generation, byte array_data[], int &offset, word call_locati
}
else
{
// Farcall: Load bank into a, adr in hl, rst 08 (0xCF)
// Swap banks: Load bank into a, call rst 10 (0xD7)
if (((call_location >> 16) & 0xFF) != 0x00)
{
@ -1075,11 +1084,11 @@ void write_call(int generation, byte array_data[], int &offset, word call_locati
}
};
int test_main()
int main()
{
freopen("test_payload.txt", "w", stdout);
std::cout << std::endl;
byte *payload = generate_payload(ENG_GOLD_SILVER, true);
byte *payload = generate_payload(ENG_CRYSTAL, true);
for (int i = 0; i < PAYLOAD_SIZE; i++)
{
std::cout << "0x" << std::setfill('0') << std::setw(2) << std::hex << std::uppercase << (unsigned int)payload[i] << ", ";

View File

@ -19,8 +19,8 @@ void Pokemon::load_data(int index, byte *party_data, int game, int lang)
{
switch (game)
{
case RED_GREEN_ID:
case RED_BLUE_ID:
case GREEN_ID:
case RED_ID:
case BLUE_ID:
case YELLOW_ID:
gen = 1;
@ -29,7 +29,8 @@ void Pokemon::load_data(int index, byte *party_data, int game, int lang)
nickname_size = 6;
box_size = 30;
break;
case GOLD_SILVER_ID:
case GOLD_ID:
case SILVER_ID:
case CRYSTAL_ID:
gen = 2;
pkmn_size = 32;
@ -43,8 +44,7 @@ void Pokemon::load_data(int index, byte *party_data, int game, int lang)
{
switch (game)
{
case RED_GREEN_ID:
case RED_BLUE_ID:
case RED_ID:
case BLUE_ID:
case YELLOW_ID:
gen = 1;
@ -53,7 +53,8 @@ void Pokemon::load_data(int index, byte *party_data, int game, int lang)
nickname_size = 11;
box_size = 20;
break;
case GOLD_SILVER_ID:
case GOLD_ID:
case SILVER_ID:
case CRYSTAL_ID:
gen = 2;
pkmn_size = 32;

View File

@ -12,7 +12,9 @@
const GB_ROM *list_of_gb_roms[NUM_PAYLOADS] = {
&ENG_RED_BLUE,
&ENG_YELLOW,
&ENG_GOLD_SILVER,
&ENG_GOLD,
&ENG_SILVER,
&ENG_CRYSTAL,
};
byte gen1_debug_box_data[0x462] = {

View File

@ -139,22 +139,29 @@ void populate_lang_buttons()
void populate_game_buttons()
{
game_select_jpn.clear_vector();
game_select_jpn.add_button(Button(button_red_green_left, button_red_green_right, 64), RED_GREEN_ID);
game_select_jpn.set_rows_and_columns(3, 3);
game_select_jpn.add_button(Button(button_green_left, button_green_right, 64), GREEN_ID);
game_select_jpn.add_button(Button(button_red_left, button_red_right, 64), RED_ID);
game_select_jpn.add_button(Button(button_blue_left, button_blue_right, 64), BLUE_ID);
game_select_jpn.add_button(Button(button_yellow_left, button_yellow_right, 64), YELLOW_ID);
game_select_jpn.add_button(Button(button_gold_silver_left, button_gold_silver_right, 64), GOLD_SILVER_ID);
game_select_jpn.add_button(Button(button_gold_left, button_gold_right, 64), GOLD_ID);
game_select_jpn.add_button(Button(button_silver_left, button_silver_right, 64), SILVER_ID);
game_select_jpn.add_button(Button(button_crystal_left, button_crystal_right, 64), CRYSTAL_ID);
game_select_jpn.set_xy_min_max(48, 240, 0, 120);
game_select_jpn.set_xy_min_max(32, 240, 0, 120);
game_select_kor.clear_vector();
game_select_kor.add_button(Button(button_gold_silver_left, button_gold_silver_right, 64), GOLD_SILVER_ID);
game_select_kor.set_rows_and_columns(1, 2);
game_select_kor.add_button(Button(button_gold_left, button_gold_right, 64), GOLD_ID);
game_select_kor.add_button(Button(button_silver_left, button_silver_right, 64), SILVER_ID);
game_select_kor.set_xy_min_max(48, 240, 0, 120);
game_select_def.clear_vector();
game_select_def.set_rows_and_columns(2, 2);
game_select_def.add_button(Button(button_red_blue_left, button_red_blue_right, 64), RED_BLUE_ID);
game_select_def.set_rows_and_columns(3, 2);
game_select_def.add_button(Button(button_red_left, button_red_right, 64), RED_ID);
game_select_def.add_button(Button(button_blue_left, button_blue_right, 64), RED_ID); // red and blue are identical, so we just say red
game_select_def.add_button(Button(button_yellow_left, button_yellow_right, 64), YELLOW_ID);
game_select_def.add_button(Button(button_gold_silver_left, button_gold_silver_right, 64), GOLD_SILVER_ID);
game_select_def.add_button(Button(button_gold_left, button_gold_right, 64), GOLD_ID);
game_select_def.add_button(Button(button_silver_left, button_silver_right, 64), SILVER_ID);
game_select_def.add_button(Button(button_crystal_left, button_crystal_right, 64), CRYSTAL_ID);
game_select_def.set_xy_min_max(48, 240, 0, 120);
}

View File

@ -119,16 +119,18 @@ OBJ_ATTR *btn_lang_ger = &obj_buffer[num_sprites++];
OBJ_ATTR *btn_lang_spa = &obj_buffer[num_sprites++];
OBJ_ATTR *btn_lang_kor = &obj_buffer[num_sprites++];
OBJ_ATTR *button_red_green_left = &obj_buffer[num_sprites++];
OBJ_ATTR *button_red_green_right = &obj_buffer[num_sprites++];
OBJ_ATTR *button_green_left = &obj_buffer[num_sprites++];
OBJ_ATTR *button_green_right = &obj_buffer[num_sprites++];
OBJ_ATTR *button_blue_left = &obj_buffer[num_sprites++];
OBJ_ATTR *button_blue_right = &obj_buffer[num_sprites++];
OBJ_ATTR *button_red_blue_left = &obj_buffer[num_sprites++];
OBJ_ATTR *button_red_blue_right = &obj_buffer[num_sprites++];
OBJ_ATTR *button_red_left = &obj_buffer[num_sprites++];
OBJ_ATTR *button_red_right = &obj_buffer[num_sprites++];
OBJ_ATTR *button_yellow_left = &obj_buffer[num_sprites++];
OBJ_ATTR *button_yellow_right = &obj_buffer[num_sprites++];
OBJ_ATTR *button_gold_silver_left = &obj_buffer[num_sprites++];
OBJ_ATTR *button_gold_silver_right = &obj_buffer[num_sprites++];
OBJ_ATTR *button_gold_left = &obj_buffer[num_sprites++];
OBJ_ATTR *button_gold_right = &obj_buffer[num_sprites++];
OBJ_ATTR *button_silver_left = &obj_buffer[num_sprites++];
OBJ_ATTR *button_silver_right = &obj_buffer[num_sprites++];
OBJ_ATTR *button_crystal_left = &obj_buffer[num_sprites++];
OBJ_ATTR *button_crystal_right = &obj_buffer[num_sprites++];
@ -221,16 +223,18 @@ void load_temp_sprites(int sprite_batch_id)
break;
case SPRITE_BATCH_GAMES:
load_sprite(button_red_green_left, button_red_green_leftTiles, button_red_green_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
load_sprite(button_red_green_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
load_sprite(button_green_left, button_green_leftTiles, button_green_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
load_sprite(button_green_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
load_sprite(button_blue_left, button_blue_leftTiles, button_blue_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
load_sprite(button_blue_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
load_sprite(button_red_blue_left, button_red_blue_leftTiles, button_red_blue_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
load_sprite(button_red_blue_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
load_sprite(button_red_left, button_red_leftTiles, button_red_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
load_sprite(button_red_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
load_sprite(button_yellow_left, button_yellow_leftTiles, button_yellow_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
load_sprite(button_yellow_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
load_sprite(button_gold_silver_left, button_gold_silver_leftTiles, button_gold_silver_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
load_sprite(button_gold_silver_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
load_sprite(button_gold_left, button_gold_leftTiles, button_gold_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
load_sprite(button_gold_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
load_sprite(button_silver_left, button_silver_leftTiles, button_silver_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
load_sprite(button_silver_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
load_sprite(button_crystal_left, button_crystal_leftTiles, button_crystal_leftTilesLen, curr_tile_id, BTN_PAL, ATTR0_WIDE, ATTR1_SIZE_64x32, 1);
load_sprite(button_crystal_right, button_game_select_edgeTiles, button_game_select_edgeTilesLen, curr_tile_id, BTN_PAL, ATTR0_TALL, ATTR1_SIZE_8x32, 1);
break;

View File

@ -1,31 +1,31 @@
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD,
# 0x10
0xFD, 0xFD, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
0xFD, 0xFD, 0xB4, 0xC7, 0xFF, 0x3E, 0x05, 0xD7, 0xCD, 0x0C, 0x4E, 0xC3, 0x50, 0x01, 0x00, 0x00,
# 0x20
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
# 0x30
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
# 0x40
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
# 0x50
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
# 0x60
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
# 0x70
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
# 0x80
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
# 0x90
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
# 0xA0
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
# 0xB0
0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
# 0xC0
0x80, 0x80, 0x80, 0xD6, 0xC5, 0xFF, 0xFF, 0xFF, 0x3E, 0x03, 0xD7, 0xCD, 0xD8, 0x63, 0x3E, 0x05,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
# 0xD0
0xD7, 0xCD, 0xF6, 0x4D, 0xC3, 0xB0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
# 0xE0
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
# 0xF0
@ -57,21 +57,21 @@
# 0x1C0
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
# 0x1D0
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFF, 0xFF, 0xCD, 0xE2,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFF, 0xFF, 0xCD, 0xDB,
# 0x1E0
0x0E, 0x21, 0x2E, 0xC4, 0x06, 0x03, 0x0E, 0x0E, 0x3E, 0x0A, 0xD7, 0xCD, 0x88, 0x4D, 0x21, 0x43,
0x0F, 0x21, 0x2E, 0xC4, 0x06, 0x03, 0x0E, 0x0E, 0x3E, 0x0A, 0xD7, 0xCD, 0xEF, 0x4E, 0x21, 0x43,
# 0x1F0
0xC4, 0x11, 0x7A, 0xC6, 0xCD, 0x74, 0x0F, 0x21, 0xCD, 0xFF, 0x36, 0x02, 0x3E, 0x01, 0xCD, 0xE1,
0xC4, 0x11, 0x7A, 0xC6, 0xCD, 0x78, 0x10, 0x21, 0xCB, 0xFF, 0x36, 0x02, 0x3E, 0x01, 0xCD, 0xE1,
# 0x200
0x30, 0x21, 0x6B, 0xAD, 0x36, 0xFD, 0x11, 0x6A, 0xAD, 0x01, 0x50, 0x04, 0xCD, 0x10, 0x07, 0x21,
0x30, 0x21, 0x0F, 0xAD, 0x36, 0xFD, 0x11, 0x0E, 0xAD, 0x01, 0x50, 0x04, 0xCD, 0x5F, 0x07, 0x21,
# 0x210
0xCD, 0xFF, 0x36, 0x02, 0x21, 0x54, 0x06, 0x11, 0x51, 0xC6, 0x01, 0x1E, 0x00, 0x00, 0x00, 0x00,
0xCB, 0xFF, 0x36, 0x02, 0x21, 0x70, 0x07, 0x11, 0x51, 0xC6, 0x01, 0x1E, 0x00, 0x00, 0x00, 0x00,
# 0x220
0x21, 0x08, 0xD0, 0x36, 0x01, 0xFA, 0x50, 0xC6, 0x5F, 0x16, 0x00, 0x21, 0x51, 0xC6, 0x19, 0x3C,
0x21, 0x0B, 0xD1, 0x36, 0x01, 0xFA, 0x50, 0xC6, 0x5F, 0x16, 0x00, 0x21, 0x51, 0xC6, 0x19, 0x3C,
# 0x230
0xEA, 0x50, 0xC6, 0xFA, 0x6C, 0xAD, 0x47, 0x2A, 0xFE, 0xFF, 0x28, 0x0F, 0xB8, 0x30, 0xE6, 0x21,
0xEA, 0x50, 0xC6, 0xFA, 0x10, 0xAD, 0x47, 0x2A, 0xFE, 0xFF, 0x28, 0x0F, 0xB8, 0x30, 0xE6, 0x21,
# 0x240
0x05, 0xD0, 0x77, 0x3E, 0x03, 0xD7, 0xCD, 0x3F, 0x60, 0x18, 0xDA, 0xC3, 0xB6, 0xC7, 0x00, 0x00,
0x09, 0xD1, 0x77, 0x3E, 0x03, 0xD7, 0xCD, 0x39, 0x60, 0x18, 0xDA, 0xC3, 0xB4, 0xC7, 0x00, 0x00,
# 0x250
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17,
# 0x260

1
updateSYM.bat Normal file
View File

@ -0,0 +1 @@
nm --size-sort Pokemon_Mirror_mb.elf > Pokemon_Mirror_mb.sym