FreeCalypso > hg > freecalypso-reveng
view frbl/reconst/convert.c @ 319:f9482000b838
frbl/reconst/convert.c: almost perfect reconstruction
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 05 Mar 2020 04:48:55 +0000 |
parents | |
children | 20feaf83c661 |
line wrap: on
line source
#include "main/sys_types.h" #include "convert.h" static SYS_UWORD8 *bss_0; static SYS_UWORD32 bss_4; static SYS_UWORD16 bss_8; static SYS_UWORD8 bss_0xa; static SYS_UWORD32 bss_0xc; long con_get_command_from_string(SYS_UWORD8 byte_to_analyze, SYS_UWORD8 *command) { long sp8 = 0; switch (bss_4) { case 0: /* 0x10 */ if (byte_to_analyze == 0xAA) { /* 0x18 */ bss_0xc = (bss_0xc + 1) & 1; } else { /* 0x26 */ if (bss_0xc == 0) return (sp8); bss_0 = command + 1; bss_0xa = 0; bss_8 = byte_to_analyze; bss_0xc = 0; bss_4 = 1; } return (sp8); case 1: /* 0x52 */ if (byte_to_analyze == 0xAA) { /* 0x5a */ if (bss_0xc) { /* 0x62 */ *bss_0++ = byte_to_analyze; bss_0xa++; bss_0xc = 0; } else { /* 0x7a */ bss_0xc = 1; } } else { /* 0x82 */ if (bss_0xc) { /* 0x8a */ bss_0 = command + 1; bss_0xa = 0; bss_8 = byte_to_analyze + 1; bss_0xc = 0; } else { /* 0xa6 */ *bss_0++ = byte_to_analyze; bss_0xa++; } } /* 0xbc */ bss_8--; if (bss_8) return (sp8); *command = bss_0xa; sp8 = 1; bss_4 = 0; bss_0xc = 0; /* FLUID hack */ if (command[0] == 0x01 && command[1] == 0xDD) fluid_bootloader(); /* end FLUID hack */ return (sp8); } return (sp8); } void con_build_string_from_command(SYS_UWORD8 *command, SYS_UWORD8 *string, SYS_UWORD16 *string_length) { SYS_UWORD16 sp12; SYS_UWORD8 *sp16; SYS_UWORD8 *sp20; sp16 = string + 1; sp20 = command++; *string = 0xAA; string += 2; *string_length = 0; for (sp12 = 0; sp12 < *sp20; sp12++) { if (*command == 0xAA) { *string++ = 0xAA; *string_length += 1; } *string++ = *command++; *string_length += 1; } *sp16 = *string_length; *string_length += 2; } void con_initialize_conversion(void) { bss_4 = 0; bss_0xc = 0; }