# HG changeset patch # User Mychaela Falconia # Date 1583467493 0 # Node ID a4b6b4e389b92d783ee306c2c31b3bc830d57aed # Parent 7df08926a4e77508d64159f036899d1814020072 frbl/reconst/command.c: second function reconstruction close to perfect diff -r 7df08926a4e7 -r a4b6b4e389b9 frbl/reconst/command.c --- a/frbl/reconst/command.c Fri Mar 06 01:59:20 2020 +0000 +++ b/frbl/reconst/command.c Fri Mar 06 04:04:53 2020 +0000 @@ -77,6 +77,101 @@ com_build_confirmation(t_com_confirmation *confirmation, SYS_UWORD8 *confirmation_to_send) { - + SYS_WORD32 sp8; + long sp12 = COM_SUCCESS; + SYS_UWORD8 sp16; + SYS_UWORD8 *sp20; + SYS_UWORD8 sp24; + SYS_UWORD16 *sp28; + SYS_UWORD16 sp32; + sp20 = confirmation_to_send++; + *confirmation_to_send++ = COM_COMMAND_WORD(confirmation); + sp16 = 1; + *confirmation_to_send++ = COM_RESULT(confirmation); + sp16++; + switch (COM_COMMAND_WORD(confirmation)) { + case COM_GET_MONITOR_ID: /* 0x202 */ + if (COM_RESULT(confirmation)) + break; + *confirmation_to_send++ = COM_MONITOR_ID(confirmation); + *confirmation_to_send++ = + COM_MONITOR_VERSION_FIRST_NBR(confirmation); + *confirmation_to_send++ = + COM_MONITOR_VERSION_SECOND_NBR(confirmation); + sp16 += 3; + break; + case COM_GET_FLASH_ID: /* 0x23c */ + if (COM_RESULT(confirmation)) + break; + *confirmation_to_send++ = COM_FLASH_ID(confirmation); + sp16++; + break; + case COM_GET_CHIP_ID: /* 0x25a */ + if (COM_RESULT(confirmation)) + break; + *confirmation_to_send++ = COM_CHIP_ID(confirmation); + sp16++; + break; + case COM_GET_BOARD_ID: /* 0x266 */ + if (COM_RESULT(confirmation)) + break; + *confirmation_to_send++ = COM_BOARD_ID(confirmation); + sp16++; + break; + case COM_ERASE_FLASH: + break; + case COM_WRITE_DATA: /* 0x272 */ + if (COM_RESULT(confirmation)) + break; + sp32 = COM_FILE_CHECKSUM(confirmation); + *confirmation_to_send++ = (sp32 & 0xFF00) >> 8; + *confirmation_to_send++ = sp32 & 0xFF; + sp32 = COM_FLASH_CHECKSUM(confirmation); + *confirmation_to_send++ = (sp32 & 0xFF00) >> 8; + *confirmation_to_send++ = sp32 & 0xFF; + sp16 += 4; + break; + case COM_START_APPLICATION: /* 0x2dc */ + if (COM_RESULT(confirmation)) + break; + *confirmation_to_send++ = COM_STARTING_STATE(confirmation); + sp16++; + break; + case COM_READ_PARAMETERS: /* 0x2e8 */ + if (COM_RESULT(confirmation)) + break; + sp16++; + sp24 = COM_NUMBER_OF_PARAMS_READ(confirmation); + *confirmation_to_send++ = sp24; + if (sp24 > COM_MAX_NUMBER_OF_16BITS_DATA) { + sp12 = COM_PARAMETER_ERROR; + break; + } + sp28 = COM_READ_PARAMS_LIST_ADDRESS(confirmation); + for (sp8 = 0; sp8 < sp24; sp8++) { + *confirmation_to_send++ = (*sp28 & 0xFF00) >> 8; + *confirmation_to_send++ = *sp28++ & 0xFF; + sp16 += 2; + } + case COM_WRITE_PARAMETERS: + break; + case COM_LOAD_APPLICATION: /* 0x374 */ + if (COM_RESULT(confirmation)) + break; + sp32 = COM_FILE_RAM_CHECKSUM(confirmation); + *confirmation_to_send++ = (sp32 & 0xFF00) >> 8; + *confirmation_to_send++ = sp32 & 0xFF; + sp32 = COM_RAM_CHECKSUM(confirmation); + *confirmation_to_send++ = (sp32 & 0xFF00) >> 8; + *confirmation_to_send++ = sp32 & 0xFF; + sp16 += 4; + break; + case COM_SEND_RUN_ADDRESS: + break; + default: + sp12 = COM_COMMAND_UNKNOWN; + } + *sp20 = sp16; + return sp12; }