From 8f936892e213a380bcc3d0330397931d1683feab Mon Sep 17 00:00:00 2001 From: Jason Carpenter <5916026+breadbored@users.noreply.github.com> Date: Wed, 6 Sep 2023 01:12:39 -0400 Subject: [PATCH] Latest changes The biggest discovery is that the 7s being printed on the trade are likely just 0xFD status indicators --- comm.c | 26 +++++++++++++++----------- gen1.h | 1 + 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/comm.c b/comm.c index 60e7998..251b7ee 100644 --- a/comm.c +++ b/comm.c @@ -77,8 +77,8 @@ void party_member_to_bytes(struct PartyMember *pPartyMember, uint8_t *out) { (uint8_t) (pPartyMember->original_trainer_id >> 8), (uint8_t) (pPartyMember->original_trainer_id & 0x00FF), (uint8_t) (pPartyMember->experience & 0x000000FF), - (uint8_t) (pPartyMember->experience & 0x0000FF00) >> 8, - (uint8_t) (pPartyMember->experience & 0x00FF0000) >> 16, + (uint8_t) ((pPartyMember->experience & 0x0000FF00) >> 8), + (uint8_t) ((pPartyMember->experience & 0x00FF0000) >> 16), (uint8_t) (pPartyMember->HP_ev >> 8), (uint8_t) (pPartyMember->HP_ev & 0x00FF), (uint8_t) (pPartyMember->attack_ev >> 8), @@ -146,10 +146,10 @@ void trader_packet_to_bytes(struct TraderPacket *pTraderPacket, uint8_t *out) { party_member_to_bytes(&pTraderPacket->pokemon[i], poke); // Selected Pokemon Data (for listing and ordering without stats) - if (poke[0] != 0x00) { - pTraderPacket->selected_pokemon.number++; - pTraderPacket->selected_pokemon.pokemon[i] = poke[0]; - } + // if (poke[0] != 0x00) { + // pTraderPacket->selected_pokemon.number++; + // pTraderPacket->selected_pokemon.pokemon[i] = poke[0]; + // } // Full Party Data (all stats and such) for (size_t j = 0; j < POKE_SIZE; j++) { @@ -262,9 +262,11 @@ uint8_t handle_byte(uint8_t in, size_t *counter) { } else if(trade_state == DATA_TX_RANDOM && in == 0xFD) { trade_state = DATA_TX_WAIT; out[0] = 0xFD; - (*counter)++; + (*counter) = 0; // printf("Random data sent, wait\n"); - } else if(trade_state == DATA_TX_WAIT && in != 0xFD && (*counter) == 0x05) { + } else if (trade_state == DATA_TX_WAIT && in == 0xFD) { + out[0] = 0x00; + } else if(trade_state == DATA_TX_WAIT && in != 0xFD) { (*counter) = 0; // send first byte out[0] = DATA_BLOCK[(*counter)]; @@ -290,6 +292,7 @@ uint8_t handle_byte(uint8_t in, size_t *counter) { if((*counter) == 197) { trade_state = TRADE_WAIT; } + (*counter) = 0; // printf("Send patch trade wait\n"); } else if(trade_state == TRADE_WAIT && (in & 0x60) == 0x60) { if (in == 0x6f) { @@ -422,8 +425,9 @@ void main(void) size_t trade_counter = 0; trader_packet_to_bytes(&traderPacket, DATA_BLOCK); - puts("Pokemon Distribution"); - puts("Copyright 2000"); + puts("Poke Distribution"); + puts("Copyright 2023"); + puts("BreadCodes"); int debug_last_byte = 0x00; @@ -433,7 +437,7 @@ void main(void) while(_io_status == IO_RECEIVING); uint8_t in = _io_in; //SER_REG_DIR; - _io_out = handle_byte(in, trade_counter); + _io_out = handle_byte(in, &trade_counter); __asm LD A,#0x01 diff --git a/gen1.h b/gen1.h index b5e0b1a..e26a13b 100644 --- a/gen1.h +++ b/gen1.h @@ -198,6 +198,7 @@ enum trade_state_t { FIRST_DETECTED_WAIT = 0x02, DATA_TX = 0x03, DATA_TX_WAIT = 0x04, + DATA_TX_WAIT_HOLD = 0x0B, DATA_TX_START = 0x05, DATA_TX_RANDOM = 0x06, DATA_TX_PATCH = 0x07,