; Commented disassembly of TITANIUM CARD version May 31 2004 ; Atmel AT90SC3232C ; Revision 1.0 (Jun 4 2004) ; ; ; 31.05.2004 ; Disney Channel and Milan Channel fixed ; ; 30.05.2004 ; Some 007X fixed (Sky Sport 1) ; ; 22.05.2004 ; Seca2 Sky Italie Pakage 13 E "Up again" *g* ; ; 24.03.2004 ; Seca2 Sky Italia Pakage 13 E ; Seca2 Canale Satellite Pakage 19 E ; ; 08.03.2004 ; First public Seca2 release ; All Sky Italia Pakages open.. ; ; Tested on: ; Magic Modul ; XCam ; Aston Seca Modul ; Matrix Reloaded ; ; This software is for educational purposes only. It should not be used ; to ilegally watch TV channels. ;//======================================== ;// The X-Register, Y-Register, Z-Register ;//======================================== #define XL R26 // X-Register #define XH R27 #define YL R28 // Y-Register #define YH R29 #define ZL R30 // Z-Register #define ZH R31 ;// memory mapping ;// ;// DATA: ;// 0x0100 - 0x027F RAM_Y (shared CPU / Crypto) *) ;// 0x0280 - 0x03FF RAM_X (shared CPU / Crypto) *) ;// 0x0400 - 0x04C0 RAM_Z (user RAM) ;// 0x0500 - 0x1FFF gap (undefined) ;// 0x2000 - 0x7FC0 EEPROM (addressed like RAM) ;// ;// CODE: ;// 0x0000 - 0x1FFF Smartcard OS ;// 0x2000 - 0x7FFF User Code ;// ;// *) note regarding RAM_Y and RAM_X: the whole RAM ;// may be used by user application. ;// Use of the Crypto processor destroys RAM_X and RAM_Y #define SRAM_ADD_Y 0x0100 #define SRAM_ADD_X 0x0280 #define SRAM_ADD_RESULT_CRYPTO 0x0380 #define SRAM_ADD_DATA_CRYPTO 0x0380 #define SRAM_ADD_EXPO_CRYPTO 0x0300 #define SRAM_buffer 0x0400 #define SRAM_buffer_size (0x04C0-0x0400) #define Half_etu_Treatment_Time 11 // Treatment time required for half a bit ; --------------------------------------------------------------------------- jmp boot ; --------------------------------------------------------------------------- .db "TC" ;__TITANIUM_OS_TARGET__ .dw 0x1100 .dw 0x0600 ;__TITANIUM_OS_VERSION__ .dw 0x0401 .dw 0x915F, 0xBF5F, 0x915F, 0x9860, 0x9518 .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF ;//============================================================================== ;// OS Management ;//============================================================================== ;//---------------------------------------------------------------------- ;// Subroutine: RestoreLoader ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// ;// Output Parameters: none ;// Modified Parameters: Flash + EEPROM cleared ;//---------------------------------------------------------------------- ;// Description: ;// returns control back to Titanium OS ;// ;// no return ;//---------------------------------------------------------------------- RestoreLoader: ldi r17, 0 sts SYSRAM_SYSTEMCALL, r17 wdr ret ;//---------------------------------------------------------------------- ;// Subroutine: SetIsoClock ;//---------------------------------------------------------------------- ;// Input Parameters: R16: FIDI (FI and DI requested as defined by ISO7816) ;// High nibble = FI. Must be 1 ! ;// Low nibble = DI. Must be 1,2,3,4,5 or 8 ! ;// Output Parameters: none ;// Modified Parameters: Z(ZL:ZH),R0,R16,R17 (only 'C' scratch pad registers) ;//---------------------------------------------------------------------- ;// Routines called: none ;// Calling routines: ;//---------------------------------------------------------------------- ;// Description: ;// Initialize the ISO 7816 Port for reception by copying the timing ;// parameters to RAM (delay for 0.5 etu) ;// Checks that FI & DI are authorized. If not, defaults to F=1 and D=1 ;//---------------------------------------------------------------------- SetIsoClock: ldi r17, 1 sts SYSRAM_SYSTEMCALL, r17 wdr ret ;//---------------------------------------------------------------------- ;// Subroutine: SendByte ;//---------------------------------------------------------------------- ;// Input Parameters: R16: byte to be sent ;// Output Parameters: none ;// Modified Parameters: R16,R17,R18,R19,R20,R21,R22,R23 (only 'C' scratch pad registers) ;//---------------------------------------------------------------------- SendByte: ldi r17, 2 sts SYSRAM_SYSTEMCALL, r17 wdr ret ;//---------------------------------------------------------------------- ;// Subroutine: SendSW ;//---------------------------------------------------------------------- ;// C Prototype: void SendSW(WORD Out) ;// Input Parameters: R17:R16: bytes to be sent ;// Output Parameters: none ;// Modified Parameters: R16,R17,R18,R19,R20,R21,R22,R23 (only 'C' scratch pad registers) ;//---------------------------------------------------------------------- SendSW: ldi r20, 3 sts SYSRAM_SYSTEMCALL, r20 wdr ret ;//---------------------------------------------------------------------- ;// Subroutine: ReceiveByte ;//---------------------------------------------------------------------- ;// C Prototype: BYTE ReceiveByte (void) ;// Input Parameters: none ;// Output Parameters: R16: received byte ;// Modified Parameters: R16,R17,R18,R19,R20,R21,R22,R23 (only 'C' scratch pad registers) ;//---------------------------------------------------------------------- ReceiveByte: ldi r17, 4 sts SYSRAM_SYSTEMCALL, r17 wdr ret ;//---------------------------------------------------------------------- ;// Subroutine: bRamToEeprom ;//---------------------------------------------------------------------- ;// Input Parameters: To: Pointer to the destination in EEPROM ;// From: Pointer to the source in RAM ;// Length: Number of bytes to copy ;// CopyType: WRITE / UPDATE ;// Output Parameters: OK/NOK ;// Modified Parameters: To, From, Length ;// Source buffer if WRITE mode used ;//---------------------------------------------------------------------- ;// Description: ;// Copy a string of bytes from Ram to Eeprom in WRITE or UPDATE Mode ;// Returns OK or NOK ;//---------------------------------------------------------------------- bRamToEeprom: ldi ZL, 5 sts SYSRAM_SYSTEMCALL, ZL wdr ret ;//---------------------------------------------------------------------- ;// Subroutine: bEepromSet ;//---------------------------------------------------------------------- ;// Input Parameters: To: Where to write ;// Value: What to write ;// Size: How many bytes to write ;// Output Parameters: OK / NOK ;// Modified Parameters: To, Size ;// Flash/EEPROM Control Register ;//---------------------------------------------------------------------- ;// Description: ;// Fills an EEPROM area with a given value ;// Equivalent to a standard C lib memset ;// Returns OK / NOK ;//---------------------------------------------------------------------- bEepromSet: ldi ZL, 6 sts SYSRAM_SYSTEMCALL, ZL wdr ret ;//---------------------------------------------------------------------- ;// Subroutine: bEepromCopy ;//---------------------------------------------------------------------- ;// Input Parameters: To: Where to write ;// From: Where to get the data ;// Size: How many bytes to write ;// Output Parameters: OK / NOK ;// Modified Parameters: To, From, Size ;// Flash/EEPROM Control Register ;//---------------------------------------------------------------------- ;// Routines called: none ;// Calling routines: bRamToEeprom, bSetEeprom ;//---------------------------------------------------------------------- ;// Description: ;// Equivalent to a standard C lib memmove ;// Returns OK / NOK ;//---------------------------------------------------------------------- bEepromCopy: ldi ZL, 7 sts SYSRAM_SYSTEMCALL, ZL wdr ret ;//---------------------------------------------------------------------- ;// Subroutine: CryptoReset ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: OK/NOK ;// Modified Parameters: The entire RAM X and RAM Y ;//---------------------------------------------------------------------- ;// Routines called: none ;// Calling routines: ;//---------------------------------------------------------------------- ;// Description: ;// Clears shared RAM X and Y ;// Due to the fact that the AVR and Crypto clocks are not synchronous, ;// the crypto command might exit without being completed. 3 attempts ;// are tried before returning an error ;// Returns OK / NOK ;//---------------------------------------------------------------------- CryptoReset: ldi ZL, 0xA sts SYSRAM_SYSTEMCALL, ZL wdr ret ;//---------------------------------------------------------------------- ;// Subroutine: ClearY ;//---------------------------------------------------------------------- ;// Input Parameters: BYTE Mode : NO_RESET or WITH_RESET ;// Output Parameters: OK/NOK ;// Modified Parameters: The entire RAM Y (and RAM X if WITH_RESET) ;//---------------------------------------------------------------------- ;// Routines called: none ;// Calling routines: ;//---------------------------------------------------------------------- ;// Description: ;// Clears shared RAM Y and authorizes its access by the AVR ;// Due to the fact that the AVR and Crypto clocks are not synchronous, ;// the crypto command might exit without being completed. 3 attempts ;// are tried before returning an error ;// Returns OK / NOK ;//---------------------------------------------------------------------- ClearY: ldi ZL, 0xB sts SYSRAM_SYSTEMCALL, ZL wdr ret ;//---------------------------------------------------------------------- ;// Subroutine: LoadModulus ;//---------------------------------------------------------------------- ;// Input Parameters: BYTE * ModulusSource: address of the modulus ;// BYTE Size: Size of the modulus (in bytes) ;// Output Parameters: OK/NOK ;// Modified Parameters: The entire RAM X and RAM Y ;//---------------------------------------------------------------------- ;// Routines called: none ;// Calling routines: ;//---------------------------------------------------------------------- ;// Description: ;// Loads the modulus in RAM Y, forbid access to RAM Y without prior clear ;// and clears RAM X. ;// The modulus shall be passed in LITTLE ENDIAN format (Least Significant ;// Byte first...) and the last byte (Most Significant Byte) is assumed to ;// be 0 padded on its MSBits if the modulus length is not a multiple of 8 ;// Returns OK / NOK ;//---------------------------------------------------------------------- LoadModulus: ldi ZL, 0xD sts SYSRAM_SYSTEMCALL, ZL wdr ret ;//---------------------------------------------------------------------- ;// Subroutine: ModExp ;//---------------------------------------------------------------------- ;// Input Parameters: BYTE * Data: Address of the data ;// BYTE DataSize: Size of the data ;// BYTE * Exp: Address of the exponent ;// BYTE ExpSize: Size of the exponent ;// Output Parameters: OK/NOK ;// Modified Parameters: The entire RAM X and RAM Y ;//---------------------------------------------------------------------- ;// Routines called: none ;// Calling routines: ;//---------------------------------------------------------------------- ;// Description: ;// bModExp shall have been preceded by a bLoadModulus and will return in ;// the Data area of RAM X the result of: M exp E mod(N) where M is the ;// message passed as data (*Data), E the exponent (*Exp) and N the ;// modulus loaded during the previous LoadModulus execution ;// Size limitations apply: both E and M shall be shorter than N ;// If E is *Exp is even, then E=2exp*Exp+1 (if *Exp=1, E=3) ;// If E is odd, then E=*Exp ;// *Exp=0 is forbidden (first byte of the exponent) ;// Returns OK / NOK ;//---------------------------------------------------------------------- ModExp: ldi ZL, 0xE sts SYSRAM_SYSTEMCALL, ZL wdr ret ;//============================================================================== ;// SHA0xFF ;//============================================================================== ;//---------------------------------------------------------------------- ;// Subroutine: SHA1 ;//---------------------------------------------------------------------- ;// Input Parameters: BYTE * Source: pointer on the string of bytes ;// to hash ;// WORD Length: number of bytes to hash ;// Output Parameters: OK/NOK ;// Modified Parameters: RAM X & RAM Y ;//---------------------------------------------------------------------- ;// Description: ;// Perform the Secure Hash Standard algorithm on the string of bytes ;// passed as parameter. The result is stored in the first 20 bytes of ;// the Data segment of RAM X in LITTLE ENDIAN format (least significant ;// byte first i.e. LSByte of 32 bit word H4 first) ;// Attention is brought to the fact that both RAM X and RAM Y are cleaned ;// up at the end and that, expect for the digest locations, they will ;// only contain 0s. Therefore, all data stored in the shared memory are ;// lost during the execution of SHA1. ;// WARNING: The input string shall not located in the shared memory ;// ;// Returns OK / NOK ;//---------------------------------------------------------------------- SHA1: ldi ZL, 0x11 sts SYSRAM_SYSTEMCALL, ZL wdr ret ;//---------------------------------------------------------------------- ;// Subroutine: Pause_r16 ;//---------------------------------------------------------------------- ;// Input Parameters: r16 ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- Pause_r16: dec r16 brne Pause_r16 ret ; --------------------------------------------------------------------------- .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF ;// --- Spain --- /*Bx T1*/ .dw 0xFF50, 0xDF5B, 0xEDCC, 0xB26D, 0x262B, 0x36C1, 0xA8A3, 0xC924 .dw 0x61FD, 0xCE05, 0xC5D1, 0x11E2, 0xB765, 0x99AD, 0xF1B, 0x8188 .dw 0xF3D7, 0xD267, 0x8D2A, 0x7AF, 0x70DB, 0x894D, 0xE187, 0xD384 .dw 0xAB79, 0x450C, 0x2DB5, 0xB401, 0x8AA9, 0xBA0B, 0x12DA, 0xE383 .dw 0xD482, 0x7E03, 0xB3FA, 0xE6B9, 0x4297, 0x5E5C, 0x7595, 0x21DC .dw 0xD093, 0xE456, 0x4FB6, 0x7B55, 0xF99A, 0xA0EE, 0x58C8, 0x276C .dw 0x727A, 0x8B69, 0x6FE5, 0x9251, 0x9C4, 0x7CC2, 0x7643, 0x22EC .dw 0xF7A6, 0x233, 0x41E7, 0x8ED6, 0x7718, 0x7180, 0xC317, 0xD37 .dw 0xA2CA, 0x1038, 0x73F5, 0x9B34, 0xC6B8, 0x2ECF, 0xC013, 0x9CF0 .dw 0x2FD9, 0xEB6B, 0x9835, 0xB00E, 0xF66E, 0x44AA, 0x3B63, 0x8DD .dw 0x4E1D, 0x429, 0x3D30, 0x25E0, 0x60A, 0x8C3F, 0x6260, 0xC7FC .dw 0x194C, 0x94B1, 0x9F3E, 0xBB7D, 0x9015, 0x6AD8, 0x4796, 0x86FE .dw 0x2C7F, 0x1AE8, 0xA18F, 0x16CD, 0x469E, 0x5AEA, 0xD53C, 0x543A .dw 0x57, 0x66BE, 0xF1FB, 0x1468, 0x49DE, 0xA553, 0xA439, 0x315D .dw 0x1EF8, 0x4BEF, 0x321C, 0x1F64, 0x23BC, 0x52BF, 0x595F, 0x91CB .dw 0xE9AC, 0x2885, 0x4A48, 0x40AE, 0xBDF2, 0xF474, 0xA79D, 0x7820 ;// --- Spain --- /*Bx T2*/ .dw 0xC390, 0xF310, 0xA8D, 0xF5E3, 0x2559, 0x68BB, 0x8684, 0x1AC .dw 0x18C4, 0x77BD, 0x7165, 0x758A, 0x17AA, 0xF215, 0xC6D5, 0x8C7C .dw 0x5179, 0x7ADD, 0x144D, 0xA2AE, 0x30DC, 0x62A1, 0xEBE0, 0x7216 .dw 0xED0B, 0x9256, 0xEA0F, 0xAB96, 0x7E39, 0x12A7 .dw 0x4B7, 0xB12B, 0x2FA6, 0x9DC8, 0xF120, 0x40BE, 0xD9CA .dw 0x5887, 0xB208, 0xF676, 0xC073, 0xEFFF, 0x2DF8, 0x1135 .dw 0xB4FE, 0xD8A8, 0xA94E, 0x4245, 0x81FC, 0x5E21, 0xC903 .dw 0x3861, 0x492E, 0x6934, 0xB5D6, 0x700, 0x6DDF, 0x579C .dw 0x44F0, 0x1F55, 0x3380, 0x31B9, 0xA341, 0x5BE6, 0x1ECD .dw 0x911C, 0x6B5C, 0x9BEE, 0x3DE1, 0x6A0E, 0xE4D2, 0xCE47 .dw 0x6FD7, 0x3A7D, 0x899F, 0x54B, 0x2854, 0xA409, 0x4A5F .dw 0x267, 0xC794, 0x46F4, 0xD448, 0x2C70, 0xDAF9, 0x53DE .dw 0xA08E, 0xDB13, 0x6C60, 0xD74, 0xCF6E, 0x5DBC, 0x198F .dw 0xC1E9, 0x5A64, 0xE73C, 0xB083, 0xE878, 0xE2FA, 0x4C3F .dw 0x3B36, 0x9E98, 0x27AD, 0x23D3, 0x1B0C, 0x2A22, 0x931D .dw 0x97D1, 0xAFC5, 0x2663, 0xB3CC, 0x32C2, 0xEC8B, 0x7B85 .dw 0x437F, 0xB866, 0x6D0, 0x2488, 0x82BF, 0x379A, 0xFB95 .dw 0xFD1A, 0x3E29, 0xE599, 0xA552, 0xF74F, 0xCB50, 0xB6BA ;// --- Italy --- /*Bx T1*/ .dw 0x987E, 0x243C, 0x9F33, 0xC596, 0xE69A, 0x942D, 0x48B, 0x6C71 .dw 0x85C1, 0xE70A, 0x76CF, 0x4B19, 0x4009, 0xDF12 .dw 0x4292, 0xA2C2, 0x5743, 0xE4F9, 0x2E10, 0xA882, 0xD48 .dw 0x8A9C, 0x8093, 0x34F8, 0x69C4, 0xEEA, 0xB77B, 0xD3DA .dw 0xB0A0, 0x5BD2, 0x66F5, 0x5079, 0x2A2C, 0x512F, 0xC03E .dw 0x5535, 0xFD8F, 0x1DDB, 0x384D, 0xF167, 0xBEAE, 0xB414 .dw 0x1A06, 0xF43D, 0xDE03, 0xD5B2, 0x4A88, 0x1664, 0x7278 .dw 0x4699, 0x4952, 0x74FE, 0xED18, 0x7C21, 5, 0x13E8 .dw 0x3F6F, 0x90A3, 0xE981, 0x89F2, 0x7360, 0x978E, 0xEEAD .dw 0x9D86, 0xE25E, 0x5865, 0x617A, 0xC995, 0x1B9, 0xE0AC .dw 0x5629, 0x8D11, 0xB187, 0xF7D9, 0x174E, 0xC7FA, 0x7D02 .dw 0xFB6E, 0x2375, 0x4136, 0x5AA5, 0x2B54, 0xF53, 0xC622 .dw 0xF331, 0xECD8, 0x6A08, 0xD6E1, 0x4CFF, 0xBD1, 0xA484 .dw 0xCCA6, 0xA7D0, 0xC315, 0xEBF6, 0x45BD, 0xB532, 0xB3A9 .dw 0xEF25, 0xAABB, 0x375D, 0x7091, 0x6BBC, 0x3944, 0x625C .dw 0xA19B, 0x1F20, 0x8C1C, 0x7E3, 0x6DB8, 0xFCD4, 0xB647 .dw 0x6328, 0xD73B, 0x27CE, 0xBACB, 0xDC5F, 0x8326, 0xE51E .dw 0x7FAB, 0x68CD, 0x9E1B, 0xF0AF, 0xBF77, 0x59DD, 0xC3A .dw 0xCA4F, 0x30C8 ;// --- Italy --- /*Bx T2*/ .dw 0x1033, 0x4990, 0xF330, 0x2AD, 0x3699, 0x5635, 0x2E6B, 0x96AF .dw 0x6DB4, 0x85CC, 0x593C, 0x889E .dw 0x55C7, 0x8673, 0x947F, 0xE58E, 0x5FF2, 0x22FB, 0x2897 .dw 0xEC27, 0xEE0B, 0x137E, 0x4783, 0x4EB, 0x7129, 0x18B9 .dw 0x5DCD, 0xE8D1, 0x5A1F, 0x77E2, 0x45DD, 0x62D8, 0x8A6 .dw 0xC09A, 0xDEA9, 0x7603, 0xDBED, 0x95C9, 0x5B1A, 0xC4F6 .dw 0x67DA, 0x6A15, 0x6C3A, 0xB291, 0x6E68, 0x7ABB, 0x9B6 .dw 0x2A82, 0x53, 0xE6FC, 0x2669, 0x846F, 0x52C5, 0xB066 .dw 0x74D5, 0xD28D, 0x8FB3, 0xFA4E, 0xC8CA, 0x8AD9, 0x1965 .dw 0x372C, 0x9F63, 0xA43, 0x61E9, 0x1DEF, 0x24A8, 0xE775 .dw 0x937B, 0x5B5, 0xF139, 0xAC60, 0xB164, 0xFE80, 0x92A7 .dw 0xBF34, 0x7DAA, 0xAEF9, 0x3114, 0x7217, 0x8B50, 0xEE4 .dw 0xA03B, 0xA24F, 0x9D01, 0x98BA, 0xBDF7, 0x87DC, 0x46F8 .dw 0xD7F0, 0xBC9C, 0x42E1, 0x2112, 0x78CB, 0xC1B8, 0x7A5 .dw 0xFD32, 0xA4AB, 0x651, 0x7958, 0x2B2F, 0xA116, 0x70F4 .dw 0x3D44, 0x1BF5, 0x4DCF, 0xCE23, 0x41A3, 0x3F5E, 0x7CEA .dw 0x1CD4, 0xC29B, 0xC25, 0xC63E, 0xE054, 0x4C20, 0xD6D3 .dw 0x4A1E, 0xBE5C, 0x8911, 0x4B81, 0x8CE3, 0xB70D, 0xFFD0 .dw 0xDFC3, 0x480F, 0x2D40, 0x5738 ;// --- Spain --- /*Fx T1*/ .dw 0x42DF, 0x1B97, 0x8D91, 0x40A2, 0xEEC1, 0xFA7F, 0x2168, 0x948B .dw 0x1FF7, 0x5BE9, 0xE618, 0x79B7, 0x8C13, 0x2ACD, 0x9D86, 0x75EC .dw 0xBC81, 0x57C2 .dw 0x8F14, 0x6C9F, 0xB122, 0x8E2D, 0x4B38, 0xA435, 0xC7E .dw 0x84AA, 0xD63A, 0x1205, 0xC515, 0x922F, 0xD348, 0x996D .dw 0x9555, 0x70EA, 0x3930, 0xC656, 0x1683, 0x3DCC, 0x3CDA .dw 0xB246, 0x43DC, 0x9826, 0x7232, 0xEB73, 0x3E93, 0x9B76 .dw 0xD91D, 0xE7F5, 0xFF0D, 0x5AF6, 0xBFCB, 0x7167, 0x73F .dw 0xFB9A, 0x8777, 0x4541, 0x28E2, 0x4F58, 0xB361, 0xED0E .dw 0x4DB4, 0x65D7, 0x49AC, 0xAF59, 0xA927, 0x5FD2, 0x29DB .dw 0xB603, 0x78D1, 0xAD10, 0xC77A, 0x2BE, 0xF237, 0xEFF1 .dw 0x8A6F, 0x175E, 0xF466, 0xC0B0, 0xC480, 0x2EE1, 0x5182 .dw 0x19A6, 0x314A, 0x5D9C, 0xFC08, 0x3BF0, 0xCA0F, 0x85A8 .dw 0x535C, 0xCFE5, 0x1E4, 0xE8D0, 0xA524, 0x9EDD, 0xAEF8 .dw 0x34F3, 0x7B90, 0x44BA, 0x950, 0xDE2C, 0xABB8, 0x2388 .dw 0x11A3, 0x4C96, 0xC860, 0xFEE0, 0x366B, 0xE30A, 0xD8C3 .dw 0x7D4E, 0xB533, 0x1C6E, 0x8906, 0xBB20, 0xCE04, 0xA0F9 .dw 0x1E63, 0x6225, 0xD5, 0xD47C, 0x1A52, 0x64BD, 0x7454 .dw 0xC947, 0x690B, 0x2BFD, 0x6AA7, 0xA1B9 ;// --- Spain --- /*Fx T2*/ .dw 0x7C69, 0x355C .dw 0xBBE9, 0xD3F5, 0x8A19, 0xB456, 0x3695, 0x3DED, 0x7100 .dw 0x2042, 0xCD26, 0x9A1E, 0x18AA, 0x8616, 0x8B46, 0xB173 .dw 0x4E34, 0x2DDD, 0x651C, 0xFDB3, 0x3862, 0x10E, 0xAD90 .dw 0xD9D4, 0xE1B2, 0xFBF8, 0x5384, 0x6E97, 0x7BA, 0x1F12 .dw 0x3B98, 0xFE49, 0xB685, 0x4F3, 0x3203, 0xDB9B, 0x8788 .dw 0x37FC, 0x173F, 0xA859, 0xA0C4, 0xF49C, 0x5EAC, 0x79D7 .dw 0xB06A, 0xC2F9, 0x8EB5, 0xE655, 0x93E, 0xA5C5, 0x271A .dw 0x786C, 0x687D, 0xBEEF, 0x4170, 0x94A4, 0x742E, 0x8FB7 .dw 0x44C0, 0x6DD2, 0x66F1, 0xDEA, 0x7B43, 0x401D, 0xC802 .dw 0x7EE0, 0xA58, 0x912B, 0x6F10, 0xF05, 0xEB82, 0xAF25 .dw 0x224D, 0x5F67, 0x2C61, 0x9DA2, 0x4508, 0xBF76, 0xF0EE .dw 0x2A81, 0xD699, 0x3C51, 0xA64A, 0xFF6B, 0x9FDA, 0x7A15 .dw 0xA92F, 0x1B28, 0xE580, 0xE2AE, 0x3AC6, 0xAB54, 0x8D72 .dw 0xB97F, 0xFAF6, 0xA70C, 0x935A, 0xBCF7, 0xC114, 0x8C64 .dw 0x6075, 0x23D5, 0xD1E3, 0xCC77, 0x9E50, 0x9283, 0x5BCB .dw 0x6E4, 0x3348, 0xDC11, 0x5713, 0x24E7, 0xA3C7, 0x4F30 .dw 0xEC21, 0xDFA1, 0xB96, 0x2947, 0xD831, 0x63F2, 0x4CB8 .dw 0x394B, 0xE8C3, 0xCEBD, 0xCA5D, 0xCF52, 0xDE89, 0xC9D0 ;// --- Italy --- /*Fx T1*/ .dw 0x95FC, 0xBD0, 0x3B2D, 0x3523, 0xD307, 0x1EAD, 0x2943, 0x8EF4 .dw 0x6163, 0x5BE2, 0x7B88, 0xD6CC, 0x7ACA, 0x794D .dw 0x7C3E, 0x9272, 0x9EAF, 0x8660, 0x5452, 0xEC6C, 0xA8A5 .dw 0x2439, 0x2700, 0xD832, 0x3A46, 0x1A56, 0xA798, 0x28E6 .dw 0x9CED, 0x18D7, 0xEABA, 0x5544, 0x451B, 0x3080, 0x9A4B .dw 0x4ADC, 0x76AA, 0x62C5, 0xDA64, 0xA2F9, 0x36F5, 0xD9CB .dw 0x2F0A, 0x126, 0x940C, 0x7319, 0x8A25, 0xA66B, 0xB0BE .dw 0x7421, 0x32C, 0x478, 0xD585, 0x8D1D, 0xD18B, 0x68A1 .dw 0x53A3, 0x8F4F, 0x99BB, 0xCE67, 0x4E10, 0x34A4, 0x20E0 .dw 0xB83C, 0xB7CD, 0xEE84, 0xF077, 0xE8AB, 0xBFB3, 0x590 .dw 0x6AC0, 0xB697, 0x2EB2, 0xE93F, 0xEBC8, 0x7D70, 0xE359 .dw 0xFE96, 0xC238, 0x85A, 0x4793, 0xB1FD, 0xCF71, 0xDB09 .dw 0xFA41, 0x3351, 0x9169, 0xB4E7, 0x2E1, 0xDDF8, 0x65E5 .dw 0x2287, 0x58FF, 0x12F2, 0xF683, 0x6D0F, 0xBDF3, 0x1F7E .dw 0xC65F, 0xC96F, 0x6D4, 0x6EC1, 0x660E, 0xAEA9, 0x3181 .dw 0xDBC, 0x1489, 0x5D17, 0xFB75, 0x7FDF, 0xB9EF, 0x5E13 .dw 0xDE42, 0x2A16, 0x3DC7, 0x40A0, 0xF757, 0x1148, 0x379F .dw 0xD25C, 0xACC4, 0x509D, 0x1C4C, 0x8249, 0x159B, 0xE42B .dw 0xC3F1, 0x8CB5 ;// --- Italy --- /*Fx T2*/ .dw 0xB2EF, 0xD5A2, 0x6BE5, 0x6934, 0xA3BC, 0xA84E, 0x6153, 0x22D4 .dw 0x7EC7, 0x2F78, 0xDA5B, 0x1A2B .dw 0x39A9, 0x4ACD, 0xDDED, 0xC09E, 0x7603, 0xA531, 0x12D8 .dw 0xEB9B, 0x596E, 0x7F00, 0xD7BA, 0xEC86, 0xF394, 0x5F96 .dw 0xE3E0, 0x7AD, 0x938A, 0xE18, 0xFF6C, 0x98A0, 0x6D62 .dw 0x9A58, 0xBED1, 0x5177, 0x81FA, 0x820, 0x8526, 0x691 .dw 0x5CAB, 0x519, 0x3A2A, 0xAE8D, 0x7432, 0xB549, 0xB030 .dw 0x5667, 0xBDC3, 0xCC89, 0xAFE1, 0x804C, 0x3B36, 0x3F7C .dw 0xEEA7, 0x8C5E, 0xB166, 0x23C8, 0xCE44, 0xFDF2, 0x7AAC .dw 0x5540, 0x1DD2, 0x3C8B, 0xB895, 0x2C6A, 0xE6DE, 0xFB73 .dw 0xFE21, 0x4D82, 0x9AA, 0x38EA, 0x9FE7, 0x7BCB, 0x6304 .dw 0x7911, 0xF16, 0xD9FC, 0xA6B7, 0x47DF, 0x756F, 0x14F5 .dw 0x5ABF, 0x1B2D, 0x33E9, 0xD97, 0x9C3D, 0xC22E, 0x23E .dw 0xCD6, 0xC148, 0x57F4, 0xE4D0, 0x8499, 0xF668, 0x5D88 .dw 0x8741, 0xB642, 0x54DB, 0x654F, 0xCA0A, 0xF1A4, 0x1CA1 .dw 0xE872, 0xBB10, 0xF060, 0xB401, 0x2471, 0xC535, 0x1790 .dw 0xE21F, 0xB37D, 0x28F9, 0x46CF, 0x920B, 0xC450, 0xC643 .dw 0x8E25, 0x1570, 0x13F7, 0xDCC9, 0x649D, 0xD329, 0x1E8F .dw 0x374B, 0xB9F8, 0x8352, 0x4527 ;// --- Italy --- /*9x T1*/ .dw 0xF7CB, 0x765, 0x786E, 0xD8C, 0x7C90, 0x6172, 0x8828, 0x99AC .dw 0x1CDD, 0x46E1, 0xD76B .dw 0x9AFB, 0xF4A6, 0x9B53, 0xB2DE, 0xA291, 0x9C27, 0xADBC .dw 0x3D49, 0x4F5B, 0x7492, 0x2002, 0x93C1, 0x5C73, 0xB816 .dw 0xB6EC, 0xE8E2, 0x4D06, 0x26E9, 0x6D3E, 0x24E7, 0xA783 .dw 0x60D1, 0x7A63, 0xA3E6, 0xA5D2, 0xF589, 0xFC79, 0x35BD .dw 0x66F0, 0x131D, 0xDC5D, 0xB587, 0x8F1B, 0x4538, 0xCF95 .dw 0xF27E, 0x37D4, 0x4BC6, 0xAFDA, 0xC310, 0x7B59, 0x9FB9 .dw 0x69A1, 0xB4BE, 0x1E4, 0x2ACE, 0xF8EF, 0xCCE0, 0xD039 .dw 0xBC4, 0xAA64, 0xFA33, 0x5F84, 0x5708, 0x3C0F, 0x3B14 .dw 0x2CD8, 0xF355, 0x500C, 0x6FA0, 0xA6C, 0xFEED, 0x232E .dw 0x255E, 0x518B, 0xC012, 0x8D3A, 0xC867, 0x85D5, 0x494 .dw 0x6A40, 0xDF42, 0xEB68, 0xF6F9, 0x7DA9, 0x2B7F, 0xE3C9 .dw 0x4AA4, 0xC754, 0xBAB1, 0x7782, 0xB730, 0xCD5A, 0xD348 .dw 0x71C2, 0xD922, 0x4198, 0x2DBB, 0x80B0, 0x2F00, 0xFFAB .dw 0x8634, 0x62FD, 0x1815, 0x1797, 0x5247, 0x7509, 0x4C4E .dw 0x319D, 0x44DB, 0x5681, 0xEEE5, 0x9E32, 0x7636, 0xF18A .dw 0xCA0E, 0xB358, 0x29D6, 0x1F21, 0x3F1A, 0x43A8, 0xEAAE .dw 0x7019, 0x596, 0x1E11, 0xBF03, 0x8EC5 ;// --- Italy --- /*9x T2*/ .dw 0x90ED, 0x5AF8, 0xC6EA, 0xFE7F, 0x253E, 0xBCEF, 0x162F, 0xC3CF .dw 0x3B4B, 0xF96C, 0x776E, 0x37EE, 0xB058, 0x56AE, 0x11C9, 0xE9F2 .dw 0x7EA9, 0x9C0B, 0xA2E6, 0x8DAF, 0x7C81, 0x88F, 0x97DC .dw 0xFAA0, 0x9846, 0x8E0D, 0xBF, 0x3AC8, 0x1E1A, 0x63D3 .dw 0x7526, 0xF52E, 0x2B85, 0xECF0, 0xC29D, 0x36B9, 0xF688 .dw 0x4930, 0xB2F7, 0x5423, 0xE027, 0xCABB, 0xC40A, 0x6844 .dw 0x5C1C, 0x4F59, 0xADBA, 0x787A, 0x329F, 0x1939, 0xE48 .dw 0x89A4, 0x2176, 0xB38A, 0x3F03, 0x4A72, 0x4C8B, 0xFD13 .dw 0xCD62, 0xA843, 0x38C0, 0xD5DA, 0x6A01, 0xEBAB, 0xA184 .dw 0x7B0F, 0xB847, 0x52AC, 0x2815, 0xB5D0, 0xE1E4, 0x1B82 .dw 0xF1DF, 0x8C93, 0xD15B, 0x3379, 0xDD0C, 0xCE2A, 0x354D .dw 0xB617, 0x8724, 0x836B, 0x651F, 0xBEBD, 0x6D55, 0x31A3 .dw 0xE7FB, 0x6709, 0x450, 0x66E5, 0x7469, 0x86A5, 0x2906 .dw 0x5A6, 0xD253, 0x5FB4, 0x4091, 0x6460, 0x2D71, 0x18D9 .dw 0x92D8, 0xD457, 0x7322, 0x3CC7, 0x34C1, 0x7DB, 0x95B1 .dw 0x9B2C, 0x513D, 0x4161, 0x6F20, 0x70A7, 0x1D99, 0x25E .dw 0xCCF3, 0xFF42, 0x9A45, 0xAAFC, 0x10CB, 0xF49E, 0x96B7 .dw 0x1214, 0xE2D6, 0xC57D, 0x805D, 0xDEE3, 0x4E94, 0xD7E8 ;// --- Spain ---;// ECM 1001 .dw 0x9A35, 0xD53E, 0x1BF5, 0xB603, 0x1661, 0x32A8, 0x32FC, 0xC5B0 .dw 0xFA2F, 0x511A, 0x5FB4, 0xEBF, 0x7A00, 0x74BD .dw 0x9F0E, 0x8714, 0xF1AC, 0x22A6, 0xF0F0, 0x7003, 0x2964 .dw 0x72D4, 0x414C, 0xBE9E, 0x313F, 0xE095, 0x832D, 0x44CF .dw 0x27F3, 0xCFCA, 0x762A, 0x77, 0x1160, 0x170, 0x66C9 .dw 0xFC05, 0xA94C, 0xD7D3, 0x451F, 0x3A96, 0xD37E, 0x7690 .dw 0x3AF2, 0xCDCC, 0x9F14 ;// --- Spain ---;// EXP ECM 1001 .dw 0x4325, 0x44E6, 0xA0E3 ;// --- Spain ---;// ECM 1001 .dw 0xAE21, 0xA4EB, 0x9DDE, 0x6B78, 0x280A, 0x8CBB, 0xA557, 0xA6AD .dw 0x54D3, 0x2EA, 0x642F, 0x1886, 0x4246, 0x6255, 0x4E00 .dw 0x43E4, 0x8E2C, 0xA6C1, 0xD465, 0x573D, 0xAB45, 0x3AB6 .dw 0x7693, 0x26F9, 0xA754, 0xEED1, 0xD6F1, 0x8577, 0x7078 .dw 0xB74E, 0xA8B, 0x9AFF, 0xC38E, 0x1AA4, 0x52C6, 0x86EC .dw 0x9951, 0x5FE2, 0xF704, 0x9B74, 0x79BD, 0x9787, 0xD9AC .dw 0x3A58, 0x969F ;// --- Spain ---;// EMM 1003 .dw 0xA01, 0xBE18, 0x3444, 0x8A80, 0x3104 .dw 0x5E94, 0xE86C, 0xE760, 0x3848, 0x7BB, 0x19D4, 0xE6A0 .dw 0xAB14, 0x57BB, 0xB96B, 0x9090, 0xC4B4, 0x5824, 0xB550 .dw 0x1C5, 0x2440, 0xC535, 0x2931, 0xAB95, 0x697B, 0xCEF6 .dw 0x2727, 0xB959, 0xBD54, 0xC48F, 0xEC9F, 0x40A3, 0xA678 .dw 0xE2FF, 0x7B5B, 0x79F6, 0xE5A1, 0xC7EF, 0xDA0E, 0x7A59 .dw 0xA718, 0xA219, 0x4427, 0xF047, 0xE634 ;// --- Spain ---;// EXP ECM 1001 .dw 0x4A55, 0x642F, 0x9D4C ;// --- Spain ---;// EXP EMM 1003 .dw 0xC00B, 0xE92, 0xC682 ;// --- Italy ---;// ECM 1001 (0070) .dw 0xD54B, 0x5410, 0xA7C7, 0x2CA1, 0x475E, 0x49FF, 0x96C7, 0x7BD2 .dw 0x1CC7, 0xEC0A, 0x56B0, 0xA9E1, 0xC0EE, 0xB2CE, 0x349F, 0xE462 .dw 0x11A2, 0x876A, 0xACC3, 0x2353, 0xA3CF, 0xB213, 0xEB25, 0x1AC4 .dw 0x8ED8, 0xB554, 0x5C8, 0x8739, 0x229E, 0xF621, 0xC8AB, 0x3C0F .dw 0x435A, 0x394A, 0x54A8, 0x9BB1, 0xB816, 0x58B1, 0x666F, 0x2022 .dw 0x31FF, 0x881A, 0xE45A, 0x9CCD, 0x862B ;// --- Italy ---;// EXP ECM 1001 (0070) .dw 0x7A0F, 0xE83, 0xF812 ;// --- Italy ---;// EMM 1003 (0070) .dw 0xD3F3, 0x7A54, 0x303F, 0x58C, 0xAA53, 0x6D24, 0x5C1E, 0x6620 .dw 0x2B5E, 0x8D61, 0x37BA, 0x624, 0xBB70, 0x7266, 0x507E, 0x8C83 .dw 0x7DBA, 0x4948, 0xC93, 0xF418, 0x5C35, 0x1874, 0xA2E3, 0x14AD .dw 0x60E9, 0x6F18, 0x6548, 0x49C9, 0x9A84, 0xEA9D, 0xBE35, 0x45B8 .dw 0xF810, 0x1F99, 0x55F5, 0x3745, 0x054A, 0xBC44, 0x5F71, 0x5130 .dw 0xE808, 0x6191, 0x3C75, 0xE32A 0x9534 ;// --- Italy ---;// EXP EMM 1003 (0070) .dw 0x384D, 0xED9F, 0xB6D4 ;// --- Italy ---;// ECM 1001 (0071) .dw 0x9CDF, 0xA87A, 0x8CD8, 0xF8C9, 0x7824, 0x4CA9, 0xBC79, 0xBC5F .dw 0xB934, 0xAB51, 0x1EF8, 0xCFED, 0x31E9, 0xAAA5, 0x5872, 0x1C32 .dw 0x4E4C, 0x1628, 0x2987, 0x65C4, 0xA626, 0x8392, 0x52AA, 0xF5D2 .dw 0x85C6, 0xEAE2, 0x320, 0x1B28, 0x7719, 0xA27C, 0x12D1, 0x25C .dw 0x51A5, 0x8409, 0xF285, 0xD69A, 0xBE6E, 0x8CAE, 0x64FA, 0x3384 .dw 0xE7AE, 0x5FC4, 0xEA1B, 0x8C76, 0x93E7 ;// --- Italy ---;// EXP ECM 1001 (0071) .dw 0xD175, 0x7E8A, 0x9E31 ;// --- Italy ---;// EMM 1003 (0071) .dw 0x7A3, 0x6471, 0xDAD6, 0x5500, 0xCDED, 0x3CEC, 0x640, 0xAC72 .dw 0xB5D3, 0x3AFC, 0x7BA4, 0x613, 0x9FBB, 0xB00C, 0x9CF2, 0xD7D .dw 0xF303, 0xCD7C, 0x695, 0x89CC, 0x68F3, 0x41FC, 0x699A, 0x4E25 .dw 0x7165, 0xE05, 0xB1A4, 0xBD82, 0x35D4, 0x915D, 0xD2B5, 0x1EB2 .dw 0x2336, 0xBBF9, 0x9E91, 0x5EB6, 0xB51C, 0x9CC0, 0x5F78, 0x2020 .dw 0x1435, 0xDAE5, 0xA794, 0x617E, 0xAA51 ;// --- Italy ---;// EXP EMM 1003 (0071) .dw 0x6403, 0x7A94, 0x944E ;// --- Italy ---;// ECM 1001 (0072) .dw 0x6A87, 0x3C95, 0x24A6, 0x9F48, 0x696E, 0xF652, 0xD8E2, 0x4325 .dw 0x6CB5, 0x70AA, 0x13C9, 0xF926, 0x86B9, 0x7E9D, 0xAB53, 0x4DF1 .dw 0xBEEA, 0x8CAE, 0xD277, 0x91DC, 0x4F89, 0x98EA, 0xF2A7, 0x62CC .dw 0xEDA6, 0xA639, 0x5610, 0x8F3B, 0x7855, 0x159F, 0x8C1, 0xC22D .dw 0x53E9, 0xF4A7, 0x829C, 0xCAA8, 0x9E0D, 0xD9B8, 0x2FC7, 0xDC03 .dw 0xA4DE, 0xC7A5, 0xA16A, 0xECD8, 0xACB2 ;// --- Italy ---;// EXP ECM 1001 (0071) .dw 0x7D71, 0x884A, 0xEDEB ;// --- Italy ---;// EMM 1003 (0072) .dw 0x164F, 0xA8B2, 0x293A, 0xEBF1, 0xB3F3, 0x634B, 0x4F03, 0x9014 .dw 0x4065, 0x3B94, 0xB851, 0xD0E8, 0x5422, 0x2B60, 0xC3E5, 0x6FAB .dw 0x33C9, 0xE8E, 0xFE0A, 0xC473, 0xAD76, 0x9BF5, 0xE50A, 0x7315 .dw 0x6ACC, 0x790B, 0x57A3, 0x21F0, 0xB3B8, 0x4C39, 0x2A75, 0x68F8 .dw 0x254D, 0x748F, 0xD16, 0xF176, 0xE137, 0x2555, 0xD942, 0xF6C1 .dw 0xAA12, 0xE928, 0xEBE8, 0xE8E9, 0x8586 ;// --- Italy ---;// EXP EMM 1003 (0072) .dw 0x5673, 0x3366, 0x94B8 .dw 0x3F33, 0x483B, 0x6FA, 0x7F93, 0x71A9, 0x1925, 0xA12D, 0xDB7F .dw 0x1780, 0xDA4D, 0x807, 0xA185, 0xA58B, 0x922B, 0xB9F, 0xE838 .dw 0xDBD7, 0x37B, 0xC9B8, 0xCFE1, 0xFF7C, 0x9F0B, 0x2B3D, 0xDD89 .dw 0x6D2A, 0xDD5A, 0xF861, 0xB710, 0xC4F1, 0xDAE2, 0xD4C3, 0x1DFA .dw 0xAE57, 0x6622, 0x32CD, 0xD735, 0xF524, 0x3D3A, 0x16F, 0x130A .dw 0xDF7A, 0x2621, 0x28CA, 0x17C1, 0xB16F .dw 0x67B3, 0xA2AF, 0xE554 .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF .dw 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF ;// --- Italy ---;// MT (from 2000 to 3FFF) .dw 0xC93E, 0x346F, 0xF9D4, 0x8C81, 0xD566, 0xAEC0, 0x2271, 0x38F6 .dw 0xD5C7, 0x2042, 0xFD11, 0xB7DF, 0xC627, 0xB68E, 0x8F1F, 0xCFF4 .dw 0x904E, 0x24BA, 0x9BE8, 0x2754, 0x54CE, 0xCCF9, 0xB105, 0xE1BB .dw 0x651C, 0x3ADD, 0x5598, 0x1799, 0xE28A, 0xE34A, 0xE328, 0xFF1C .dw 0x813E, 0x4BE4, 0x73AC, 0x25C7, 0xC9E3, 0x312A, 0x773, 0xD655 .dw 0xFAA8, 0x993B, 0x1297, 0x2521, 0xA1C5, 0xDC92, 0xDD28, 0xCCB0 .dw 0x4CAE, 0x3B97, 0x6812, 0x7FEE, 0x3795, 0x6DC9, 0x80E3, 0xB357 .dw 0x57C, 0xE4A3, 0x611C, 0xE46E, 0x6EC3, 0x1568, 0xB812, 0x2A95 .dw 0xC9BB, 0xA9FF, 0xF325, 0xDF99, 0xAF3B, 0xDC51, 0xA299, 0x1EB1 .dw 0x872B, 0x88EB, 0x874F, 0x9A4E, 0xBF74, 0xB3CD, 0x6ED3 .dw 0x1A6F, 0x16F9, 0x6AF0, 0x2853, 0x30FF, 0x7CBF, 0x516E .dw 0x350E, 0x2EBB, 0x7E76, 0x7FD4, 0x9E59, 0x95F6, 0xFED6 .dw 0x30DD, 0x7C82, 0xF2F9, 0xCFC7, 0xE4F, 0x548A, 0xB426 .dw 0x411E, 0xA36C, 0xF2CC, 0x30D5, 0x3F82, 0xDA06, 0x9FDD .dw 0x8F59 .dw 0x857A, 0xCAFE, 0xAC7, 0xA2A6, 0x3EAF, 0x4347, 0x9670 .dw 0x49E, 0xCB26, 0xB04C, 0x7CA, 0x717C, 0x88FE, 0x8D19 .dw 0x14A, 0x3FC7, 0x8DE6, 0x956D, 0x1BA9, 0x5E74, 0xDB29 .dw 0xC9F2, 0x2182, 0xDCF2, 0x6108, 0x1F, 0x91B6, 0x98CA .dw 0xDB07, 0x73C, 0xBFD0, 0xA52E, 0x738F, 0xF6AA, 0xF7B2 .dw 0x50D4, 0xDFF6, 0x7268, 0xD373, 0x9EFE, 0xAD2E, 0x7FCA .dw 0x9CF, 0xDD88, 0x36AE, 0x546B, 0xF0B7, 0xE7A0, 0x95CD .dw 0x836F, 0x1A24, 0xD29E, 0xFACC, 0x760B, 0xE82B, 0x8F51 .dw 0x2F66, 0x95D7, 0x2755, 0xD976, 0xA90F, 0xB54B, 0x51AC .dw 0xF08D, 0x547E, 0x1DB0, 0x1B4A, 0x2B61, 0xF795, 0x8429 .dw 0x603C, 0xBF52, 0x211E, 0xD2AC, 0x9377, 0x1EF1, 0xFA26 .dw 0x2AD, 0xA0B5, 0x35B7, 0xC73E, 0x4AC9, 0xF80D, 0xDF15 .dw 0xB4A6, 0x8E62, 0xCFCF, 0xA87A, 0x72BE, 0xAED0, 0xE99F .dw 0xF141, 0xF989, 0x1AAF, 0xC582, 0x5C6B, 0x476C, 0xF181 .dw 0x5D5, 0x1CAA, 0x25E9, 0xF45B, 0x321C, 0x7EE2, 0x422E .dw 0x52C1, 0xAF86, 0xEAE, 0x30E7, 0xAB8E, 0xF29, 0x196C .dw 0xD37C, 0xA1FF, 0x55F3, 0x930A, 0xFD3B, 0xC094, 0xF101 .dw 0xA307, 0xB4D3, 0xB14E, 0xB43A, 0x670A, 0x8F94, 0x7BC .dw 0x6159, 0x75A1, 0x862D, 0xDD1, 0x5249, 0x8221, 0x3C9B .dw 0xC1CF, 0xA335, 0xF451, 0x51E4, 0x106B, 0xBEA5, 0x62B6 .dw 0x28C0, 0x5FC, 0x4AAC, 0xBC8, 0xDE1E, 0x54E5, 0xADB0 .dw 0xAE11, 0x79BD, 0x4725, 0xFF96, 0x5CD7, 0x106E, 0x72D5 .dw 0x2DEA, 0x3050, 0x6E01, 0xCC57, 0xAD96, 0x4DF2, 0x196 .dw 0xCCC7, 0x88B1, 0x7CBE, 0xD89B, 0x175E, 0xECB4, 0xE42E .dw 0x7606, 0x398E, 0x8090, 0xA1A2, 0xE4E8, 0x2175, 0xDE4E .dw 0x9246, 0x508, 0xF65A, 0xB359, 0xCC26, 0x2DFC, 0xCA7C .dw 0xCB44, 0x5929, 0xB5C5, 0x8CB3, 0xCD26, 0x8667, 0x20DA .dw 0xD0A4, 0xF3C, 0xB9B3, 0xA3E0, 0x1808, 0x7AB5, 0x387E .dw 0xB0F5, 0x453B, 0xBC5D, 0x37BC, 0x15C0, 0xA904, 0x7E71 .dw 0x2D19, 0x1A49, 0xBF8B, 0xEA65, 0x4DC5, 0xD492, 0x38FF .dw 0x357F, 0xAB20, 0x99C2, 0x6FC3, 0xF625, 0x173D, 0x945C .dw 0x7421, 0x236C, 0x8C9, 0xA5CA, 0x31E1, 0x2A1C, 0xC865 .dw 0xAF5A, 0x59F0, 0xAC78, 0x781B, 0xA96C, 0x2065, 0x7319 .dw 0x4F93, 0x1B92, 0x13A0, 0x71C, 0x54EC, 0x1D3E, 0x9F6 .dw 0x802, 0x6B9E, 0x409E, 0x7AD1, 0xE049, 0x17C5, 0x3B9F .dw 0xB332, 0x72F9, 0xD948, 0xBD88, 0x9AB2, 0xEB46, 0x20FA .dw 0x765D, 0x9A9A, 0xBE6A, 0x2959, 0x8B5E, 0x7934, 0xBA31 .dw 0xB5B, 0xFBE2, 0x9885, 0xF86E, 0x545F, 0xC0F7, 0xF1F0 .dw 0xBF79, 0x53A9, 0xCC88, 0x2A4E, 0x2EC, 0xD8FB, 0x3782 .dw 0x7B1B, 0x63C3, 0x2894, 0x42EB, 0xF0AC, 0x9B66, 0xE43E .dw 0x4E93, 0x461E, 0xDE6C, 0xEF17, 0x5854, 0x3A69, 0x9838 .dw 0x2A90, 0x9E4E, 0xEBCB, 0xC124, 0xF97A, 0x8C3D, 0xBCAE .dw 0x3EF, 0xB054, 0x8DF6, 0x458F, 0x4F27, 0xC359, 0xD03F .dw 0xAA21, 0xDD4A, 0x63AD, 0x73AA, 0xBB1B, 0x4092, 0xBEE9 .dw 0xBEE8, 0xF869, 0x1150, 0xD0C6, 0x3837, 0xFDF6, 0xEF40 .dw 0xE58A, 0x732D, 0x3DC, 0x1EA9, 0x2682, 0x6228, 0xF22F .dw 0xEF7B, 0xAFC, 0x958D, 0x6268, 0x4A99, 0xCF49, 0x988D .dw 0x4978, 0x2B0E, 0xE5DD, 0x77E9, 0xFB0D, 0x1D71, 0xF3FC .dw 0x856A, 0xF22E, 0x4F0F, 0xE5CD, 0x2FEA, 0xAA44, 0x9E24 .dw 0xA5D7, 0x3131, 0xFD23, 0x5F58, 0x1935, 0xD138, 0xD47B .dw 0xA7BD, 0x23DF, 0x999E, 0xEA53, 0x7BBC, 0x4C7B, 0x1BD5 .dw 0x7A5F, 0xB327, 0x3110, 0x219E, 0x115A, 0xEBD2, 0x46B1 .dw 0x783D, 0x1015, 0xA580, 0x9A0, 0x9C41, 0x949F, 0x29E .dw 0xEE9, 0x148F, 0x8564, 0x256D, 0x7F8F, 0x7C52, 0x8D76 .dw 0x6E10, 0x6A77, 0x5766, 0x74B9, 0x704E, 0x5679, 0xD86 .dw 0xD7E6, 0xE9F4, 0xA220, 0x4C57, 0xE828, 0x51B8, 0x1679 .dw 0x967C, 0x4C59, 0xDA23, 0x498F, 0x574F, 0x8F48, 0xDEAB .dw 0xF267, 0xCC14, 0xAEAC, 0x30F8, 0xF244, 0x29DA, 0x7EC1 .dw 0x3A49, 0x48CB, 0xBC8, 0x92D, 0x8357, 0x7A41, 0xF77B .dw 0x5C, 0xC354, 0x5D08, 0x57EF, 0xA998, 0x8656, 0xD04F .dw 0xA057, 0x3D08, 0x35B4, 0x111E, 0x42B5, 0x9F29, 0x4A92 .dw 0x40F7, 0x36DE, 0x2E22, 0x8154, 0xFFB3, 0xA334, 0xBA97 .dw 0x564A, 0xBBD3, 0x2C54, 0xA77B, 0x8A8, 0x9E62, 0xF402 .dw 0x5A68, 0xC496, 0x748C, 0xB44E, 0xC4E2, 0x6BF8, 0x63BC .dw 0x7414, 0x2A7C, 0x244A, 0x280F, 0x71EF, 0x22B4, 0x359C .dw 0x672C, 0x8209, 0xC00A, 0xF53F, 0x24AB, 0xAB80, 0xD541 .dw 0x1269, 0x5827, 0xF9AB, 0x4D1C, 0xEB25, 0xB0DF, 0x2DA7 .dw 0xC2AB, 0x9EAC, 0xBE66, 0x826D, 0xEB08, 0xBFDF, 0x69D1 .dw 0x6CD1, 0x4449, 0xC113, 0x3268, 0x6369, 0xA2BE, 0xB7B .dw 0x1423, 0xD690, 0xCD22, 0xA836, 0xB5D9, 0xD13B, 0x3400 .dw 0xCC03, 0xF35B, 0xC75D, 0x4324, 0xD5B2, 0x5D40, 0xF9F5 .dw 0xAE5A, 0xC7F4, 0x4173, 0xB7B2, 0x93DD, 0x9BA8, 0x1C3C .dw 0x8693, 0x885C, 0xC721, 0x394E, 0x4913, 0xEEE1, 0x740A .dw 0x1E99 .dw 0x8659, 0xD079, 0x5B6E, 0xB22D, 0xA8C6, 0x3FD0, 0x5D46 .dw 0x2A93, 0xAB5C, 0x3F3C, 0xF1DC, 0xC2C9, 0xD399, 0xC1D8 .dw 0x5D2C, 0xBB90, 0xFA43, 0xCE3A, 0x4CF, 0xE776, 0xBF71 .dw 0x78AA, 0x5E33, 0x7B40, 0x9943, 0xFF9C, 0x4F65, 0xF5A9 .dw 0xE958, 0x22CD, 0x4DE7, 0x686F, 0x2222, 0x631, 0x3876 .dw 0x8F2A, 0x54A, 0x84D4, 0x7AA6, 0x540B, 0xDE8, 0x8090 .dw 0x114, 0xBB37, 0x21FB, 0x2DFD, 0x4222, 0x8459, 0x8F43 .dw 0x493E, 0xD431, 0x9F3, 0x446C, 0x458C, 0xF57B, 0xA612 .dw 0x2561, 0xA944, 0x1EB0, 0x4BDC, 0x3325, 0x673B, 0x616E .dw 0x7B4B, 0x1EEF, 0x4F35, 0x2251, 0xA5B, 0x5C88, 0x2DFB .dw 0x4950, 0x6CA9, 0x30C1, 0x2D8B, 0x6833, 0xB6B3, 0x14F .dw 0x570B, 0x30C4, 0x7CCB, 0xDB33, 0xF5A5, 0x9BD8, 0x66FB .dw 0xEEC4, 0x87A3, 0x3D12, 0x6FBC, 0x70D9, 0x2BA6, 0xF53D .dw 0x27D3, 0x6C4C, 0x2541, 0x8DD9, 0xCD16, 0xFB91, 0xA97D .dw 0x2F8A, 0x5E36, 0xABAB, 0xECDE, 0x74BE, 0xB509, 0xE244 .dw 0xD4C8, 0xC708, 0x76D2, 0x3236, 0xF290, 0xCBB5, 0x707F .dw 0xEC8A, 0x51C, 0x3374, 0x91DC, 0x17EC, 0xE922, 0xE0C5 .dw 0x8E18, 0xA6A5, 0x43F4, 0x4E5A, 0xFC20, 0x170C, 0x20C8 .dw 0xF37F, 0x7306, 0x6CDC, 0xDF58, 0x11F3, 0xCA1C, 0xB12C .dw 0xF010, 0x42D6, 0xE856, 0xFA10, 0xE594, 0x9EFD, 0x8438 .dw 0x5838, 0x3899, 0x5141, 0xF59A, 0x7E95, 0x550D, 0x4E41 .dw 0xEAE0, 0xCE4C, 0xBF46, 0x5AD3, 0xF54C, 0x92C6, 0x584C .dw 0x954B, 0x46C1, 0xEB14, 0xF470, 0xF41, 0xC56A, 0xF81C .dw 0x939, 0xF8C0, 0xBE1, 0x99E6, 0x70C1, 0xDE29, 0x7AB0 .dw 0x8D57, 0x422C, 0xB36F, 0x15A0, 0x66D1, 0x9C40, 0xE339 .dw 0xEDB5, 0x3D48, 0xDA05, 0x78BA, 0x7064, 0x1B8B, 0xA106 .dw 0x1D1B, 0xB64A, 0xD2EF, 0x191C, 0xC9F5, 0x7F30, 0xA836 .dw 0x3107, 0xE626, 0xB39B, 0x36FB, 0xA39C, 0xE251, 0x4587 .dw 0xD8BA, 0xA331, 0x2AD2, 0x8EC9, 0x1557, 0xA1DF, 0x8C97 .dw 0x5CF0, 0x6689, 0x10FE, 0x66C0, 0x62A4, 0xF9A5, 0x969C .dw 0xE080, 0x241D, 0xF1E, 0x2F5B, 0x7ECE, 0xF8B7, 0xE1D4 .dw 0x65CE, 0x895E, 0x1685, 0xE2A6, 0xD0FC, 0xDAF3, 0xC4A4 .dw 0xDEF2, 0x448C, 0xADF5, 0xEB34, 0x45D2, 0xC7FB, 0xC289 .dw 0x995A, 0x4C4A, 0x6C62, 0xE239, 0x5F2D, 0x32A8, 0x78B1 .dw 0xC690, 0xD64B, 0xE3A, 0x863F, 0x5B1C, 0xBE47, 0xACAC .dw 0x2CCB, 0xFD79, 0x9F42, 0x6F48, 0x12E4, 0x796, 0x6B5 .dw 0x3CB1, 0xB4C4, 0xC5AC, 0x7459, 0xB540, 0xCD9C, 0xCCE3 .dw 0xC358, 0x8879, 0x117E, 0xAC7A, 0x4C8E, 0x7B87, 0xEB97 .dw 0xD3C2, 0xAAE, 0x2510, 0xA9BF, 0x5639, 0x7244, 0x5F1C .dw 0x3D65, 0xF49D, 0x1AE1, 0xEEC4, 0xE438, 0x49F5, 0xE2A7 .dw 0xD295, 0x15CC, 0x1DDB, 0x7209, 0xF764, 0x2771, 0xB487 .dw 0x105D, 0xB084, 0x41AD, 0xAD25, 0xBEA6, 0xC15, 0x9689 .dw 0xC6C5, 0xE512, 0xB039, 0x5D20, 0x449C, 0x9711, 0x8A56 .dw 0x97, 0x62E6, 0xA9C1, 0x62D8, 0x3960, 0xC23D, 0x714 .dw 0x3F61, 0x7C10, 0xBBBE, 0x703C, 0x567, 0x982E, 0x2C38 .dw 0x93B, 0xE972, 0x6D85, 0x5E9C, 0x1808, 0x7FEE, 0xF438 .dw 0x7840, 0x925F, 0x7365, 0xFFF3, 0x74B7, 0xFB91, 0xF03E .dw 0x6926, 0xD1C6, 0xBE25, 0x922B, 0xAA3F, 0x348, 0xBB75 .dw 0xE1CA, 0xACC2, 0xE448, 0x4A81, 0xC373, 0xB087, 0xD80A .dw 0xE651, 0x19BA, 0xE6A5, 0x1179, 0xAA15, 0x7996, 0x91B8 .dw 0xEDBF, 0x7B33, 0x9638, 0x7B31, 0x41EB, 0xD094, 0xA33 .dw 0x247E, 0xC056, 0xCE2E, 0x86C3, 0x7E16, 0xE74D, 0xB7C1 .dw 0xAE0A, 0x3975, 0xA8D8, 0x8770, 0xCE01, 0x96B1, 0xC5C4 .dw 0xDB42, 0xF917, 0x55DC, 0x89DE, 0xF853, 0x71EF, 0x6F24 .dw 0x1D07, 0xAE5E, 0x2F91, 0xC9A3, 0x6963, 0xB02E, 0xD0B0 .dw 0xFECD, 0x1F1A, 0x2905, 0xFA38, 0xF5A8, 0xF587, 0x8E06 .dw 0xC6EE, 0x6D4B, 0x2B7D, 0x6806, 0x14A5, 0x226F, 0x3575 .dw 0x2F3A, 0xFC5, 0x855, 0xDCF, 0xA6B1, 0x814B, 0x8CE4 .dw 0x51A5, 0x9184, 0x215D, 0xA953, 0xE905, 0x1412, 0x15DD .dw 0x2F12, 0x8B52, 0xF637, 0x307B, 0x3418, 0xA7B0, 0x82C2 .dw 0x4A4A, 0x4252, 0x92BA, 0x782D, 0x5882, 0x84AF, 0xAF09 .dw 0xD312, 0x3DD3, 0x403D, 0x153, 0xBAFF, 0xDB08, 0x527 .dw 0xE3E8, 0x7441, 0xD1A0, 0xEC65, 0x89BF, 0x9CE, 0xA5B3 .dw 0xAC03, 0xDE2E, 0xA16C, 0xD97B, 0x8918, 0x5286, 0x3408 .dw 0xD253, 0x8566, 0xB668, 0x2720, 0x3A05, 0xC4D9, 0x5DAA .dw 0x68D7, 0x59E3, 0x6500, 0x62CA, 0x2B6B, 0x2B70, 0x5C61 .dw 0x8942, 0x2897, 0x77B5, 0x8B26, 0xBC82, 0x9718, 0xC9B8 .dw 0x13F6, 0x32F0, 0x4B1B, 0xE5A5, 0x9E03, 0x3740, 0x8FF5 .dw 0x7319, 0x74C2, 0x5B6B, 0xC914, 0x6FE, 0x1FC9, 0x72AD .dw 0xB4D9, 0xDE1C, 0x9A51, 0x8D30, 0x478D, 0x4C97, 0xFD44 .dw 0xC0C, 0xEEB, 0x6496, 0x7DDD, 0xEB19, 0xFBAA, 0x4CBA .dw 0xE9F7, 0xED21, 0x65E8, 0xEE89, 0x6902, 0xAEBC, 0x5403 .dw 0x7648, 0x2E9C, 0x5C55, 0xB2CD, 0xAEA3, 0xD990, 0x479B .dw 0xFBC1 .dw 0x4455, 0x3A46, 0xF884, 0xF5D0, 0x808, 0x5EAC, 0x33C9 .dw 0x165A, 0x6D7, 0x70B4, 0x44BA, 0x21BC, 0xFE2, 0x2D60 .dw 0x71BD, 0xCAC9, 0x6BF6, 0xFACE, 0x8995, 0x64F0, 0x74FD .dw 0x433C, 0x49B3, 0x35E4, 0x29BD, 0x8190, 0xBD45, 0x16F5 .dw 0xFF6, 0xBE2D, 0xD7C, 0x9D7C, 0x3BE3, 0x1665, 0xBBFC .dw 0x41B4, 0x818A, 0x2BCC, 0x241C, 0x5BE2, 0x9D0B, 0x9864 .dw 0x4E8C, 0x8331, 0xF3BC, 0xB67D, 0x58B4, 0xBAB7, 0xEA4A .dw 0x5248, 0x64E3, 0xCD4C, 0xEE20, 0x444F, 0xD58E, 0x11C2 .dw 0x40E4, 0xB0C7, 0xD788, 0x2B4, 0xE58E, 0xFB8B, 0x10DA .dw 0x3914, 0x1D64, 0x2CEF, 0xA84B, 0x9FF2, 0x8D1A, 0xEF9F .dw 0x1D11, 0x4F5B, 0x4C67, 0xE200, 0x1319, 0x873D, 0x7331 .dw 0x3396, 0x42F9, 0x6434, 0x2763, 0x168B, 0xC035, 0xCB55 .dw 0x8068, 0x11B3, 0xA5AF, 0x9822, 0xA45C, 0xE592, 0xB100 .dw 0x1921, 0x798C, 0xDE4B, 0xBCD2, 0x7059, 0x9B74, 0x571C .dw 0x6AFC, 0x4146, 0x7269, 0xCA4B, 0xF901, 0x68AD, 0xF208 .dw 0x8C2, 0x7811, 0x54A6, 0x1A18, 0x1901, 0x90B9, 0x1033 .dw 0x2569, 0xA034, 0x91EA, 0x7FBA, 0xE63B, 0xAD97, 0x543A .dw 0x26D8, 0xD2A8, 0x79A, 0x9631, 0xA210, 0x115, 0xE70 .dw 0xA54A, 0x6E6F, 0x5BDF, 0x87A7, 0xD7F9, 0xD297, 0xC98C .dw 0x822A, 0x1FBA, 0x4721, 0x7105, 0x5576, 0x4031, 0x8B18 .dw 0xCCF2, 0xB357, 0x47EC, 0x7B01, 0xF959, 0xC785, 0x1F12 .dw 0x8A48, 0x90A6, 0x3AB4, 0x1250, 0xDB3A, 0x485F, 0x9B76 .dw 0x9566, 0x8A67, 0x5300, 0x1C98, 0x3FD1, 0x6D30, 0x45A3 .dw 0x92DB, 0xF9DD, 0xD39E, 0x2168, 0x368C, 0xA859, 0x473C .dw 0x748D, 0xFF1D, 0x827C, 0xAA54, 0xBC3E, 0xF492, 0xE00D .dw 0x3AAE, 0xB0EE, 0x4337, 0xE657, 0xB9DF, 0x6BD7, 0xEA5F .dw 0xFB55, 0xC87E, 0x7B7B, 0x5D36, 0x7B66, 0x3AE8, 0xBF6B .dw 0x4C6E, 0x7A1A, 0x27BF, 0xC4C0, 0x2A5C, 0xD02C, 0xF658 .dw 0xF0CC, 0x6DE4, 0x41B4, 0x4C79, 0x8B41, 0xF1F9, 0xF31A .dw 0x28F6, 0x6D9F, 0x605C, 0x5477, 0x3B13, 0x1E5, 0x1950 .dw 0x91A, 0xB3C4, 0xBBD3, 0x2DC4, 0xD2D5, 0x98CB, 0xED24 .dw 0xB19E, 0x9EB3, 0x8F0, 0x27A4, 0xD0D6, 0x496, 0xF275 .dw 0xDBF3, 0xC4FB, 0x86B9, 0xEC85, 0xC641, 0x9983, 0xA104 .dw 0xBE6D, 0x998F, 0xC48B, 0x7B39, 0xC1D, 0x15E7, 0xF8C7 .dw 0x10C4, 0x5E4F, 0xB512, 0xC6C5, 0xDA26, 0xC536, 0x9ED5 .dw 0xFC0B, 0x1435, 0xB691, 0xD858, 0xB842, 0x8BCF, 0xE652 .dw 0x5B87, 0x2F06, 0xC82E, 0x3CE, 0xF27D, 0xAD73, 0xCE88 .dw 0xEC6D, 0x42C2, 0x4FF8, 0x382F, 0xF72F, 0xE81A, 0xDAF8 .dw 0x3B1E, 0x8E0, 0xD175, 0x8245, 0x53C2, 0x47CE, 0xF619 .dw 0xB434, 0x1C32, 0x367, 0x5A31, 0x970, 0x4E00, 0x2263 .dw 0x138F, 0x960, 0xA949, 0x7A7, 0x7079, 0xBC67, 0x43EA .dw 0xEE9C, 0xBF79, 0xA0CD, 0xA445, 0x32E7, 0xCB99, 0x29CD .dw 0x7AB5, 0xC487, 0xF7B9, 0xB209, 0x34B2, 0x755E, 0x73F8 .dw 0x50CC, 0x3A9D, 0xAF94, 0x80EA, 0xC72E, 0x282E, 0x2D30 .dw 0xFC1E, 0x38F5, 0x3881, 0x24F9, 0x9D40, 0x9814, 0xF859 .dw 0xA065, 0xCD5C, 0xD937, 0x140F, 0xF0BE, 0x931D, 0xD77C .dw 0xE903, 0x12F5, 0x2729, 0x1C36, 0x6F73, 0x2EDB, 0x1D78 .dw 0xA237, 0xCA42, 0xF5AA, 0x265C, 0xBE55, 0xB964, 0xD7D9 .dw 0x4DFA, 0x7714, 0xC0C5, 0x1F63, 0x71BE, 0x100D, 0x9B22 .dw 0x2FA7, 0xFAAF, 0x8AAE, 0x3D2F, 0xC0E8, 0x4387, 0xCCDC .dw 0xDBFB, 0xA5E8, 0xD34F, 0x6BBE, 0x52C7, 0xEE1D, 0x1BE8 .dw 0x9768, 0x1BA0, 0x9AA2, 0x664A, 0xD69C, 0x57E8, 0x9C0F .dw 0xFC11, 0x1634, 0xDAD3, 0xFB1B, 0xDD67, 0x1F56, 0x3653 .dw 0x36EF, 0xCD04, 0xFC67, 0x4193, 0xA1CB, 0x7B02, 0x7152 .dw 0x76A9, 0x5C6, 0xEDC3, 0xC4C8, 0x7AF6, 0x38BF, 0xDDCE .dw 0xA0E7, 0x5FE4, 0xE655, 0xA30B, 0xEE86, 0xFB32, 0x68A9 .dw 0x22FB, 0x165C, 0x6CA7, 0x3EE4, 0x63F4, 0x2B0, 0x2A0C .dw 0xA80E, 0x269B, 0xE2B2, 0x8352, 0x2710, 0xB928, 0xF5EC .dw 0xD050, 0x411E, 0x13AE, 0x1D3E, 0x5BB5, 0xC96A, 0x58C2 .dw 0x52E, 0x949D, 0x1822, 0x8D25, 0x651, 0xEBC0, 0x22AF .dw 0x16E4, 0xFD51, 0x2203, 0xD0C7, 0x54FC, 0x4594, 0x8752 .dw 0xDC36, 0x8CBA, 0xEF50, 0x4249, 0x4D3E, 0x3DD7, 0xE1DE .dw 0x16E, 0xDB01, 0x72CB, 0xB048, 0x28D2, 0x60A7, 0xB3F6 .dw 0x8AE4, 0x8FC3, 0x1856, 0xD1DC, 0x1A96, 0xE214, 0xF345 .dw 0x895F, 0xEB91, 0x9DFF, 0x4360, 0x8259, 0xB922, 0x7BD9 .dw 0xA62A, 0x1BA4, 0x7AEF, 0x87ED, 0x224E, 0xE467, 0x8B47 .dw 0xDACC, 0x7F63, 0xCC16, 0x3E9B, 0xB2A9, 0xAF85, 0x5BAF .dw 0x6B28, 0x4E6A, 0x4F1E, 0x46D, 0xF302, 0xE095, 0xBF86 .dw 0x60E8, 0xBE3A, 0x1BE3, 0xD12A, 0xA351, 0xC548, 0x4E45 .dw 0xF71, 0xEC70, 0xAF6D, 0xD4F1, 0x4D77, 0x6CC4, 0x8E9D .dw 0x5245, 0x4BAF, 0xA18E, 0x43DA, 0x7529, 0x528B, 0x2D0 .dw 0xCC03, 0x60EF, 0x8E95, 0xBD63, 0x448A, 0x8DD0, 0xE0AB .dw 0xB42F, 0x4DC8, 0xB304, 0xAF18, 0x458F, 0x8EFF, 0xE3A7 .dw 0x44E2 .dw 0x29E4, 0xCFE0, 0x4B, 0x63B7, 0x5C81, 0xE00C, 0xE3A5 .dw 0xAFB8, 0xFFA6, 0xD394, 0x18A3, 0x5C0A, 0x7F47, 0x5D9A .dw 0x6BB5, 0x58E9, 0x1873, 0x85D8, 0x88C6, 0x3F2D, 0x6153 .dw 0x629, 0x3D43, 0xA312, 0xF2, 0x9654, 0xA97A, 0xF362 .dw 0x4A1D, 0xCDCE, 0x4A7A, 0xC6F3, 0x8007, 0x752E, 0xC1E3 .dw 0x1DE9, 0x826E, 0xC8A, 0xAF3C, 0x3560, 0xA2D0, 0x691A .dw 0xCFAA, 0x705, 0x7BED, 0xB025, 0xCB5F, 0x2E83, 0xB987 .dw 0x6C00, 0x2E1C, 0x4EE3, 0x7553, 0xE3C3, 0x151B, 0x634B .dw 0xE7D6, 0xB6D6, 0xC14D, 0x941F, 0x7B51, 0xCC09, 0x533D .dw 0x1E80, 0x93A9, 0xC847, 0xD927, 0x13E2, 0xFFA5, 0x3F6D .dw 0x3D6D, 0xB67B, 0x8830, 0xBB84, 0x2CF8, 0x1406, 0xA237 .dw 0x96A4, 0x11F7, 0x68DE, 0xD1D9, 0xBEC6, 0xC9DB, 0xA2EC .dw 0xFCBD, 0xADFE, 0xCA31, 0xCC08, 0x1CE7, 0xE536, 0xC154 .dw 0xC1DB, 0xB6D1, 0x44BB, 0x8217, 0xA357, 0x5381, 0x41C9 .dw 0x55AC, 0x2CAB, 0x9E7, 0xD40E, 0xF170, 0xDA3B, 0x5192 .dw 0xD2B7, 0x30B, 0xA39C, 0xE414, 0x2129, 0x685B, 0x21A6 .dw 0x9D54, 0xECCA, 0x4318, 0x7D81, 0x9969, 0x404A, 0x7C46 .dw 0xD1C0, 0x1753, 0xE46E, 0xF1FE, 0xEF67, 0x49BF, 0x749F .dw 0xEF37, 0xE89A, 0x3E90, 0xB5B, 0xD7E7, 0x2F1E, 0xC0FF .dw 0xC208, 0x8265, 0xEAA2, 0x9335, 0xCED8, 0x1AED, 0xE329 .dw 0xB28B, 0x12F2, 0xF6A9, 0x2519, 0x52A0, 0x732, 0x2416 .dw 0xC2FF, 0xBA4D, 0x1D3C, 0x880C, 0x5908, 0x5A02, 0xD9DE .dw 0x8DE5, 0x39BD, 0xCD67, 0x379C, 0xD121, 0x543E, 0x1C8 .dw 0xB139, 0x5647, 0x74A2, 0xB76, 0x273, 0x81DE, 0x9E76 .dw 0xFA40, 0x76B, 0x1C6B, 0xB607, 0xA44F, 0xF526, 0x9148 .dw 0x776E, 0x5C91, 0x652F, 0xCE6, 0x24A8, 0xF6AE, 0x13AD .dw 0x7805, 0x3828, 0xC99A, 0x86AA, 0xE39D, 0xA3EF, 0x7C97 .dw 0xB338, 0x3A4B, 0xC3E1, 0x7C72, 0xD7B7, 0x5F0, 0xD8B4 .dw 0x5E03, 0xCA87, 0x6CE5, 0x6DDD, 0xD9BE, 0xCA02, 0xBBDF .dw 0xEDB2, 0x5BBD, 0x160C, 0x96AB, 0x784D, 0xEA81, 0x510A .dw 0xDB25, 0xC437, 0xE7E7, 0xD8F, 0xF8D5, 0xE39B, 0xC403 .dw 0xA44B, 0x6658, 0x4994, 0x7B63, 0x9606, 0xD8D, 0xE800 .dw 0xC139, 0x670A, 0x643E, 0xB3C0, 0x37BC, 0xFFDE, 0x35E6 .dw 0xB290, 0xAC8, 0xD2F6, 0x8D6D, 0xE2C, 0x78DA, 0x87CD .dw 0xDEBC, 0xF3F4, 0x4A89, 0xB12A, 0xBDC8, 0x5D31, 0x828 .dw 0x62C4, 0x62F7, 0x3558, 0x4717, 0xC4CE, 0x2109, 0xBCB2 .dw 0x1F94, 0xFB9E, 0x5F75, 0x2D9A, 0xF0F4, 0xFF58, 0x49CC .dw 0x9398, 0xBFF4, 0x3D5B, 0xEF75, 0x9005, 0x5A93, 0x1268 .dw 0x45D8, 0xE432, 0xD7A7, 0x63AD, 0x78B0, 0x3785, 0xF962 .dw 0x43FA, 0xAA89, 0x31E2, 0xC91, 0x51C8, 0x70D0, 0x3354 .dw 0x45B7, 0x9352, 0x3855, 0x79A9, 0x1AC9, 0x18D0, 0x6884 .dw 0xBE63, 0x5D75, 0x56ED, 0x5F5E, 0xDA0D, 0x15AE, 0xA5DC .dw 0x9341, 0x8861, 0xD2CE, 0x6878, 0xF374, 0xD150, 0x5F3D .dw 0x77D4, 0xA468, 0xB4F3, 0x74BF, 0xEC81, 0xEA3B, 0xFCF7 .dw 0xE5FD, 0x617E, 0x9C2D, 0xEEB1, 0x93AF, 0x6B9C, 0x6581 .dw 0x6D21, 0xB8CF, 0xA04E, 0x4098, 0xE2A3, 0xF37, 0xABB .dw 0x8B63, 0xCFFF, 0x4D7E, 0x917C, 0x9D62, 0x6776, 0x80A6 .dw 0x9621, 0xC025, 0xC73A, 0x52E5, 0x293D, 0x7175, 0xB8D9 .dw 0x6BF5, 0x8D6E, 0xC61, 0x687C, 0x8789, 0xE628, 0x3998 .dw 0x6C5D, 0x35E0, 0x215C, 0xC0B, 0xEC4C, 0x45D9, 0x7F89 .dw 0xDCFF, 0x47AE, 0x8EB2, 0xFED4, 0x1FB8, 0x7628, 0xB985 .dw 0xE669, 0x3EC2, 0xE0FC, 0x24D8, 0x4B43, 0xB1AF, 0x3621 .dw 0x4F2F, 0x4513, 0x53D7, 0x23A6, 0x3666, 0xD7A7, 0xAE6F .dw 0x304B, 0x844C, 0x124C, 0x6E80, 0xB8D5, 0x2606, 0xA8B .dw 0x7372, 0x397B, 0x413A, 0x2F45, 0xD777, 0xDB9, 0xABC9 .dw 0x5B96, 0xCB38, 0xC983, 0x45B3, 0xE8C2, 0x654E, 0x283E .dw 0x273F, 0xDFEE, 0xDC45, 0xF0D3, 0xBE5D, 0x858D, 0x1421 .dw 0xA67D, 0x6962, 0xC835, 0x834A, 0xF6B4, 0xE6A6, 0x7DE3 .dw 0xCEF5, 0xACDE, 0xDB51, 0x2CEB, 0x9D2, 0xB167, 0xD074 .dw 0xBAFE, 0x4551, 0x3199, 0x5BBB, 0xF9B1, 0xFCAA, 0xAD6B .dw 0xB5E7, 0xA9ED, 0xE11B, 0xFB88, 0x4FF5, 0xE632, 0x8729 .dw 0xC799, 0x97, 0xF147, 0x8A2D, 0x888, 0x5A2C, 0x603 .dw 0xC74C, 0xC1A6, 0x50C9, 0x8482, 0x9935, 0x9C1E, 0x2A9B .dw 0xFB89, 0x8398, 0xF743, 0x9565, 0x8367, 0xB29D, 0x28E3 .dw 0x37A1, 0xE4BA, 0xF71F, 0x1F36, 0xB5A3, 0xA502, 0x649D .dw 0x7C65, 0x7197, 0x3703, 0x959B, 0x3F7F, 0x3E9A, 0x392F .dw 0x5EED, 0x85E7, 0x5E7E, 0xF566, 0x577B, 0xDC78, 0xA832 .dw 0x7AC3, 0x790A, 0x932A, 0x5D48, 0x2986, 0x1636, 0xB8E6 .dw 0xA76B, 0x2A7E, 0xB09A, 0x3785, 0xFBCB, 0x7194, 0xE9E4 .dw 0xA2D2, 0x9EF0, 0x77FA, 0x24BF, 0x43C9, 0xDDE2, 0x99BA .dw 0xBDD1, 0xF25B, 0x5557, 0x1DBA, 0x847C, 0x1FDC, 0xAD90 .dw 0x2FFC, 0x1F6D, 0xC289, 0xCB2E, 0x5EA7, 0xF7AD, 0xE7BA .dw 0xA73B, 0xFC59, 0xE2BB, 0x535D, 0x2ABE, 0x1638, 0xE743 .dw 0x5067 .dw 0xDCC1, 0x7C19, 0x7924, 0x41CD, 0x703, 0xC99F, 0xC8CD .dw 0x761F, 0x5B0A, 0x3837, 0x43AA, 0x3DED, 0x9A42, 0xC8D4 .dw 0xFF75, 0x17EF, 0xB24, 0x7FED, 0xDC1B, 0xD2C1, 0xB976 .dw 0x80CD, 0xE5D9, 0xEDA7, 0x82C0, 0x1F23, 0xDAE8, 0xDCE2 .dw 0x35C5, 0x3702, 0xC663, 0x479B, 0xBA9D, 0x6612, 0x986A .dw 0xFD1E, 0xE85, 0x75B9, 0xD9AF, 0x366D, 0x2CBB, 0x6432 .dw 0xDC94, 0x810C, 0x9D77, 0xEC90, 0x6BCE, 0x89DE, 0xD3B .dw 0x44B7, 0x58D2, 0x1AC, 0xBC78, 0x32B3, 0x8F2C, 0x410A .dw 0x357E, 0x1611, 0x83D8, 0xFA44, 0xA811, 0xA820, 0x86FA .dw 0xF407, 0x43A9, 0xCFC3, 0xFD15, 0x43BA, 0xB63, 0x6433 .dw 0x54C4, 0x63EE, 0x4B55, 0x649B, 0xEE45, 0x8A06, 0x2512 .dw 0x6044, 0x804D, 0x1B9E, 0x2AAE, 0xFBF7, 0x3AB, 0x69B2 .dw 0x9F93, 0xE513, 0x1C56, 0x177E, 0xB69C, 0xC744, 0x5C46 .dw 0x4CF5, 0x7226, 0xD109, 0xE098, 0xF699, 0xFA81, 0x6DF7 .dw 0x9C99, 0x98DE, 0xAA42, 0x8B3F, 0x7228, 0x5CF0, 0x6AA9 .dw 0xC68F, 0x2E5, 0xFF6E, 0x7070, 0xF71, 0x4E98, 0xA564 .dw 0x7C4A, 0x1705, 0x5F7A, 0xC179, 0x3028, 0x1A34, 0x5B33 .dw 0xE3A5, 0x84B2, 0x9B1, 0xAADE, 0x14A, 0xA447, 0xBA16 .dw 0x13D0, 0x268A, 0x74D5, 0xF58A, 0x75F6, 0x9E4D, 0xFC2A .dw 0x270B, 0xE51E, 0xFF41, 0x6B06, 0x9BD, 0x8DEC, 0xC25B .dw 0xED7D, 0x84A2, 0xC8D3, 0xD551, 0x8B48, 0xFF9B, 0xD661 .dw 0x363, 0xD84, 0x2519, 0xF76, 0xE592, 0xC97D, 0xA1E5 .dw 0xDE60, 0xA73A, 0xCF4D, 0xAC53, 0x77C8, 0x6310, 0xB1BF .dw 0xCC74, 0x6DC3, 0x8727, 0x4081, 0xB384, 0x5E85, 0xAB5D .dw 0x9E71, 0xF775, 0x3567, 0x49CD, 0x99CF, 0xFFB3, 0xC42 .dw 0x6149, 0x8D9D, 0xA6EA, 0x4BA0, 0xADA9, 0x7D71, 0x6E8 .dw 0x160B, 0x8BF8, 0x3AB3, 0x4431, 0xC670, 0x4ACD, 0x2667 .dw 0xBD40, 0xB371, 0x2CF7, 0x6F3D, 0xCB18, 0xFB88, 0xAC97 .dw 0x8E4C, 0xAD31, 0xAF91, 0xB30C, 0x18F5, 0x76B2, 0xC679 .dw 0x8A49, 0x2BD9, 0xA35B, 0x72B2, 0xEE70, 0x9832, 0x6A4B .dw 0x7F81, 0x6203, 0xE79B, 0x76D3, 0xF878, 0xAA0F, 0xA0 .dw 0x8E91, 0xB6A5, 0x1930, 0xD098, 0xBB82, 0xDCFB, 0x830B .dw 0xAE89, 0x6DEF, 0x26CB, 0x80C6, 0x4B7F, 0x5C6A, 0x7E6F .dw 0xD139, 0xA93E, 0x737C, 0x6C0B, 0xFA1E, 0xD204, 0x2AB5 .dw 0x389A, 0xD960, 0xB4A2, 0x5FA3, 0x20FC, 0xD228, 0x9B45 .dw 0x1D47, 0x9385, 0x22BA, 0x5338, 0xA58E, 0xD351, 0x9046 .dw 0x4A00, 0xB280, 0xCA5A, 0x20AD, 0x4792, 0x4813, 0xF954 .dw 0x2EB0, 0x9871, 0xE032, 0xD2EE, 0x65A0, 0xE0F7, 0xE061 .dw 0xE2BD, 0xD054, 0xA8D1, 0x6739, 0x7EBC, 0x9C5C, 0x8DD6 .dw 0x97CB, 0xAE32, 0xF4EE, 0x1ED0, 0xFEE9, 0x8AA0, 0x490B .dw 0xB444, 0x4142, 0x93D2, 0xC135, 0x6AB, 0xCCF9, 0x186 .dw 0x45EA, 0x82B0, 0xC8E, 0x41CE, 0x3C6, 0xDA1C, 0xA563 .dw 0x348D, 0x8535, 0x4BE1, 0x9FA7, 0x7654, 0xF98B, 0x6D2C .dw 0xB031, 0x2F13, 0xA525, 0x6FE0, 0x7492, 0x7C1B, 0xA46B .dw 0xE5AB, 0xF078, 0xDA8F, 0x6598, 0xEB2A, 0xD6A3, 0x3C13 .dw 0x372B, 0xF25, 0x463F, 0x19B0, 0x291A, 0x9B24, 0xEC47 .dw 0xE77B, 0x942A, 0x799B, 0x1736, 0xAAEF, 0x869E, 0xF92E .dw 0x2BF0, 0xF44B, 0x6D60, 0xCB2B, 0x7E98, 0x8D0B, 0xC1FE .dw 0x5627, 0x8DCD, 0xE25D, 0x2666, 0x5036, 0xA1BD, 0xB031 .dw 0xAC5E, 0x799E, 0x410F, 0xAC68, 0x4CFC, 0x8F05, 0xEDBF .dw 0x881B, 0x72C9, 0xF287, 0x6E9A, 0x2094, 0xB3F5, 0x9154 .dw 0x93ED, 0x3FF4, 0x82F, 0xB2B0, 0x26D5, 0x21A2, 0x5376 .dw 0xCAAE, 0x6932, 0xDAC9, 0xF41F, 0x1325, 0x7F5A, 0x2FFC .dw 0x1949, 0x170F, 0x4B1, 0xFC1D, 0x5FF4, 0x8E2E, 0xEBCE .dw 0xE89C, 0xF7A5, 0xC7EC, 0xEF07, 0x69AE, 0xA65, 0x2F8F .dw 0x2328, 0x3158, 0xE58C, 0x56BD, 0x75C8, 0xA21C, 0x21CC .dw 0x9EAA, 0x4460, 0xE392, 0xF116, 0xCE86, 0xEA55, 0xF33 .dw 0xD28B, 0x470D, 0xF33F, 0x3622, 0xC65, 0x7902, 0x83F1 .dw 0x4A97, 0xCACF, 0x1ABC, 0xC9C, 0x89A0, 0xC14A, 0xD808 .dw 0xFF39, 0xECC6, 0xD5FD, 0x9344, 0xDCCA, 0x6A1F, 0xBCE1 .dw 0xE6CC, 0xD8F9, 0x8B02, 0x60CA, 0x5949, 0x99EF, 0x959A .dw 0xC07F, 0x34DE, 0x6FD2, 0xA10F, 0xE9B3, 0x1A7E, 0x2B9D .dw 0x6F78, 0xE6DF, 0x5F36, 0xCCFA, 0x11FD, 0x8F1A, 0x45A6 .dw 0xB1ED, 0x6E12, 0x2F59, 0x47F4, 0x7ED3, 0x437C, 0x8406 .dw 0xF20B, 0xFAEF, 0xA69E, 0x8AC5, 0x5D53, 0x1048, 0xF665 .dw 0xF8BA, 0xC610, 0x119C, 0x9167, 0x66E3, 0xEAE6, 0x5768 .dw 0x5A8A, 0xFD04, 0x8CD0, 0xF54A, 0x7DCA, 0xC955, 0xFE03 .dw 0x987E, 0xE514, 0x4D38, 0x7BEA, 0xA54F, 0x1EF9, 0x9E94 .dw 0x894D, 0xE41B, 0x89B6, 0x8F9, 0x3857, 0x7501, 0xE1F2 .dw 0x54A1, 0xA924, 0xBBD3, 0xDD25, 0xD9A3, 0xDD5D, 0xBDFC .dw 0xDE22, 0x3A22, 0xAAA1, 0xC506, 0xC1A6, 0x83E8, 0xA226 .dw 0xB55C, 0xFF02, 0x9319, 0x8BFF, 0xE42B, 0xBD07, 0x5F11 .dw 0xF599, 0xC70B, 0xFA6C, 0x5950, 0x7F6E, 0xBC6F, 0x8909 .dw 0xDFA7 .dw 0xAFDB, 0x2F81, 0xB807, 0x3E62, 0x6841, 0x188F, 0x82EF .dw 0xA4A8, 0x7C08, 0x9315, 0x72C1, 0xDE01, 0xD86E, 0x3B3D .dw 0xFADE, 0x3530, 0x2F86, 0x31D9, 0x4D6B, 0x6AC8, 0xD799 .dw 0x78DB, 0xB3D9, 0xE055, 0x9637, 0x4E12, 0xCD8D, 0xB9EC .dw 0xA54A, 0xEA5D, 0x3382, 0x70D5, 0x7333, 0xB9E6, 0x4008 .dw 0x1EAC, 0xA9C2, 0xD62D, 0x8EE5, 0x6639, 0x9DBE, 0x97C6 .dw 0xE9A1, 0xFEF7, 0x700C, 0xF9C9, 0x7282, 0x70A0, 0xBD56 .dw 0xA8C4, 0x7329, 0xB5D5, 0xF6A, 0x709, 0xE580, 0x7C04 .dw 0xEDBF, 0x5663, 0xC88, 0xFCF9, 0x40DC, 0xA817, 0xD352 .dw 0xA651, 0x418F, 0xBE6, 0xFF22, 0x9A6, 0x93F0, 0xA781 .dw 0x9CAC, 0xBA64, 0x7CC3, 0x7D49, 0x4385, 0x9BBB, 0xE5B0 .dw 0x7E4D, 0xE604, 0x23DB, 0x25DE, 0x9C34, 0x78AF, 0xF02E .dw 0x9348, 0x379B, 0x46C3, 0x74DB, 0xA97C, 0x26B7, 0x6CB4 .dw 0x2FE7, 0x3DD7, 0x1326, 0x8654, 0xDA17, 0x3A09, 0xD173 .dw 0xAA64, 0x6FFC, 0xB38E, 0xDDA1, 0x8E6D, 0x549E, 0xE1E .dw 0x14FD, 0x7D6E, 0x4C71, 0x1DEA, 0xF423, 0x3E78, 0x88B0 .dw 0xD1DB, 0xAD75, 0x59C5, 0xED20, 0x9575, 0xF1B7, 0xA62 .dw 0x4C7D, 0xFE0D, 0x5389, 0xA48A, 0xA4AF, 0xDEB6, 0x71A5 .dw 0xB425, 0x82B1, 0xD12F, 0xF0C8, 0x97CF, 0x25F2, 0x875 .dw 0xD7F4, 0x529F, 0xD86D, 0x47FA, 0xCCE0, 0x69EF, 0x325A .dw 0xA931, 0xD074, 0xC83E, 0x3987, 0x49DA, 0x631A, 0x83A8 .dw 0x7237, 0x4E9A, 0x456A, 0x6005, 0x3D14, 0x526F, 0x7EAE .dw 0x13EA, 0xC64D, 0x9DE1, 0xD2A4, 0x7B11, 0xF88E, 0xD029 .dw 0xD83D, 0xC055, 0x8DF7, 0xE5A6, 0x46AD, 0x8669, 0xB7BF .dw 0xE491, 0x851F, 0x461E, 0x6998, 0xF86E, 0xD2A6, 0x89EB .dw 0x46DC, 0xCF7A, 0x95C9, 0xDFC7, 0x265E, 0x8FCD, 0x47E8 .dw 0xFB9F, 0xA23E, 0xC4D8, 0x8A5C, 0xE570, 0xACD1, 0x600D .dw 0xA1FA, 0x2601, 0x91E, 0xE542, 0x9DFF, 0x6C66, 0x37EC .dw 0x27DC, 0xE9B, 0xADDB, 0x3FD3, 0x51E0, 0xBF36, 0x6318 .dw 0x9073, 0xEABA, 0x205F, 0xC158, 0x3628, 0x3A22, 0x4332 .dw 0x3658, 0xA399, 0xAB45, 0xDF91, 0x70E0, 0x26F6, 0xF75F .dw 0xFE2D, 0x54C6, 0xE043, 0xD7E2, 0x22CC, 0xBCCD, 0xF6F4 .dw 0xE2B7, 0xCBCB, 0x428, 0xF4DA, 0x7B19, 0x8F5E, 0x67BF .dw 0xED08, 0x2E49, 0xB53D, 0x262D, 0x3BA3, 0x68D7, 0x10E6 .dw 0x43CE, 0xD053, 0x4F5C, 0xFF01, 0x5391, 0x13F6, 0x7043 .dw 0xB9D9, 0x5E85, 0x3A69, 0x14BE, 0x85F, 0x1B78, 0x3FCD .dw 0x595F, 0xB997, 0x624B, 0x3583, 0x5FD0, 0x1A02, 0x1B78 .dw 0xE333, 0x9F6C, 0xA79F, 0xA937, 0x86F2, 0xF3CC, 0x2947 .dw 0x92BF, 0x955A, 0x21CF, 0xE856, 0x56CE, 0x81AC, 0x912A .dw 0xB8E6, 0x6393, 0xCB43, 0x9C2D, 0x2C7A, 0xC6F1, 0xC959 .dw 0xCC49, 0xC62A, 0xB86B, 0xA76B, 0xD5F4, 0xB699, 0xBBF2 .dw 0x100B, 0x9890, 0xEBE1, 0x6C28, 0xE889, 0x5372, 0x7B3A .dw 0x91B0, 0xBBA5, 0x4EDF, 0x30D3, 0x16EE, 0xB0C4, 0xCB1C .dw 0xE264, 0xE7DE, 0xF154, 0xBDF3, 0x7317, 0xE1F7, 0xD7E7 .dw 0xF0E2, 0xF134, 0x18BA, 0x8ECD, 0x3142, 0x62F8, 0xB2BB .dw 0x5BED, 0x33D6, 0x6E1, 0x4E49, 0x4BF8, 0xEB70, 0xDB62 .dw 0xC8DB, 0x78DC, 0xDD72, 0x3F7A, 0x7A4C, 0x445F, 0x5F1D .dw 0x55FA, 0xDEEB, 0x6FEF, 0x94FF, 0xD922, 0x1C60, 0x4431 .dw 0x785E, 0x57B6, 0x8ECD, 0x1EF4, 0xCD64, 0x241B, 0xF2F2 .dw 0x445C, 0xC38F, 0x4B0A, 0xD151, 0x6E33, 0x2D21, 0x1F66 .dw 0x486D, 0xFE9C, 0x5E23, 0x447, 0xFFE7, 0x1529, 0x92F .dw 0x145A, 0xFE56, 0x86C3, 0x1BB5, 0xF214, 0x4FDC, 0xAE41 .dw 0xDDE5, 0x476D, 0x9ABB, 0x7BAF, 0x2A59, 0x80B2, 0xE345 .dw 0x8A43, 0x1BA4, 0x5B79, 0x432D, 0xE2FF, 0x548F, 0x7A0B .dw 0xD22A, 0x25D7, 0x4964, 0xCA3C, 0xC0AF, 0xD515, 0x483 .dw 0x5AAB, 0xFBF, 0x38B7, 0xD448, 0x9BEE, 0x138E, 0xF302 .dw 0xFDAE, 0x3492, 0xE39D, 0xF0CF, 0x4F8A, 0xD85F, 0x9F29 .dw 0xABE5, 0xE38C, 0x97C4, 0x631A, 0xFE31, 0x3A4E, 0x22B7 .dw 0xE246, 0x9343, 0xF36B, 0x321F, 0xC5A2, 0xBC26, 0xC167 .dw 0xD8A6, 0xDBE0, 0x8BC6, 0xAD21, 0xA92, 0x1F53, 0x8F1E .dw 0x265F, 0x728A, 0x6BED, 0x62B2, 0xD7DC, 0xB277, 0x8C88 .dw 0x1C95, 0x77BF, 0xE8C4, 0xDAD4, 0x9A9A, 0xF8B4, 0x1A2B .dw 0x9D6E, 0xCB6A, 0xF1E6, 0x7942, 0xD297, 0x6155, 0xD704 .dw 0x4DA, 0x4F92, 0x2DC8, 0x361D, 0x3B01, 0xE23A, 0xA07B .dw 0x9A9C, 0xA48D, 0xE483, 0xB273, 0x36BB, 0x1611, 0x6A03 .dw 0xB706, 0xCCA2, 0xF09B, 0x58CA, 0x5CAF, 0x2E38, 0x882D .dw 0xDDDE, 0xD531, 0x5D0F, 0x3DCE, 0xF1DE, 0x2026, 0x1A37 .dw 0x81CC, 0x866F, 0xDF3C, 0x1A40, 0xFE, 0xC78A, 0x559C .dw 0xB28, 0xC2E3, 0x59E0, 0x306C, 0x7403, 0x9AFB, 0x1C77 .dw 0xFE6D, 0x2536, 0x9CFE, 0xE1E1, 0x7F23, 0xCCBB, 0x3CA8 .dw 0xAF2F, 0x94BA, 0xB8C9, 0xE20C, 0xE96, 0x9740, 0x1F2B .dw 0x483, 0xA92, 0xB85D, 0xF03C, 0x2469, 0x8DA8, 0x19A1 .dw 0x2D03, 0xA6F5, 0xB722, 0x655F, 0x8280, 0xFE24, 0xCBF3 .dw 0x812F .dw 0x6774, 0x3B4, 0x4972, 0x7F5A, 0x74A3, 0xF392, 0x3190 .dw 0xEA63, 0xC3C9, 0xB0F1, 0xB303, 0xD4DD, 0xE6A1, 0x610E .dw 0x7F7F, 0xFE33, 0x553E, 0xCDB2, 0xF474, 0x18C5, 0x86AC .dw 0x3C68, 0x5B01, 0x399E, 0x9EA6, 0xAF52, 0x1E03, 0x5E2 .dw 0x7ADB, 0x4882, 0x335B, 0x9B28, 0x583A, 0x1EA6, 0x58EF .dw 0x4B9D, 0x67B1, 0x9996, 0x5AD3, 0x3001, 0x1CBE, 0xA731 .dw 0x5109, 0xCCB7, 0x8539, 0x516F, 0x1CA3, 0xB204, 0x708E .dw 0x45B3, 0x3245, 0xCD0B, 0x6E40, 0x200C, 0xD3DD, 0x6A4F .dw 0x5100, 0xC7, 0xDBB7, 0x9535, 0x6428, 0xE907, 0x4A85 .dw 0xD69, 0x29D3, 0xF4FA, 0x366A, 0xEB4C, 0xE04D, 0x14C0 .dw 0xA862, 0xDDF6, 0x1CBB, 0xB1D8, 0x9656, 0x4B77, 0xD4B4 .dw 0x120F, 0x9634, 0x2A38, 0xF6EF, 0xBF36, 0x17E1, 0xFEDA .dw 0x2D00, 0x2F87, 0xAC8, 0x6099, 0x2547, 0x5DEA, 0xCF0C .dw 0xC2D4, 0x145C, 0xB8EA, 0x520E, 0xAB06, 0x7738, 0xD8E2 .dw 0x3599, 0xA924, 0x981, 0xD4CD, 0x9930, 0xAACE, 0x7931 .dw 0xA038, 0xFD4D, 0x1957, 0xC769, 0x158C, 0x259E, 0x9A56 .dw 0x8DE5, 0xB599, 0xB901, 0x7D19, 0x1164, 0x325F, 0xA671 .dw 0xF8B6, 0xD658, 0x1667, 0x95C2, 0xDEF3, 0x5D3B, 0x7627 .dw 0x8A2E, 0xE639, 0x74C2, 0xFA57, 0x34AA, 0xE4E6, 0x825D .dw 0xF105, 0x7E5, 0xF076, 0xFDCB, 0x2975, 0x980D, 0xA149 .dw 0xD10A, 0xD0AE, 0x9351, 0x8C47, 0x892A, 0x9C2, 0xCC1D .dw 0x58DE, 0x1774, 0x6137, 0xCF25, 0x8F7B, 0x7DE8, 0xFA23 .dw 0x5A78, 0x21D1, 0xBA96, 0x8A79, 0x1392, 0xAE9F, 0x3CA5 .dw 0x1FBB, 0x61ED, 0xD64A, 0x63A8, 0x774C, 0xA747, 0xDC52 .dw 0x7096, 0x534D, 0x6529, 0x6E7E, 0xFF54, 0xCE67, 0xCCD7 .dw 0x3811, 0x4785, 0xAE1C, 0x8281, 0xE9F6, 0x1FD8, 0xD075 .dw 0xD231, 0x980C, 0xF0CA, 0xF9F4, 0x54EF, 0x3C5D, 0x3A1E .dw 0xE5B0, 0x1A44, 0x1DE2, 0x3BE8, 0x8C1, 0xD6B0, 0xACCA .dw 0xD06, 0xC2FB, 0xF2B, 0x84F5, 0x1C14, 0xB9B7, 0xF3CF .dw 0x4840, 0x6FF8, 0x9291, 0x15E0, 0x4499, 0x10BB, 0x45 .dw 0xC190, 0x56E8, 0x3B6E, 0xFE44, 0x5E38, 0x6DDB, 0x3CF7 .dw 0x2F77, 0x16C0, 0x1632, 0x587F, 0x93BA, 0x390C, 0xAB1D .dw 0xD9F6, 0x9AD3, 0x94DF, 0x89EE, 0xA69, 0xB22D, 0xEA6F .dw 0x9F6, 0x2547, 0xF8DB, 0xAF4F, 0xC8A3, 0xD368, 0x91F5 .dw 0x9B9A, 0x623, 0x2D5E, 0x5ECC, 0x98C7, 0xF9D3, 0x6DC9 .dw 0xD26A, 0x8F30, 0x7022, 0xE07F, 0x2273, 0x3223, 0xB0F1 .dw 0xBB59, 0x1B44, 0xE330, 0x93A, 0xCE02, 0xE0A1, 0xC274 .dw 0x18FB, 0x5116, 0x177A, 0xC79F, 0x2069, 0x4EE9, 0x25F2 .dw 0xB3A6, 0x8747, 0x58F4, 0x3AE9, 0xD9E9, 0xC873, 0x8D6E .dw 0x2B8D, 0xE768, 0x8692, 0xB193, 0xA973, 0x8CA7, 0x7A9D .dw 0xDCC6, 0x63DB, 0xED50, 0x62F1, 0x482B, 0x8A05, 0xE1E6 .dw 0xA02, 0x1236, 0xD141, 0xA752, 0xF781, 0x8E0D, 0x4651 .dw 0xB7B, 0x83E5, 0x4B28, 0x98A, 0xC96D, 0x6C68, 0x6C87 .dw 0x5CC1, 0xA71E, 0x7653, 0xA682, 0xDA8D, 0xD106, 0xCA7D .dw 0x49D3, 0xF96F, 0xADB0, 0xA790, 0xA864, 0x4224, 0x84A6 .dw 0x6C60, 0xB5EC, 0x5F25, 0xDFA8, 0x5691, 0x96EC, 0xA428 .dw 0x1077, 0xA80F, 0x3CFA, 0x8DEB, 0x159D, 0x3227, 0x5519 .dw 0x64A0, 0x5621, 0xFACA, 0x9FFB, 0x4D83, 0xA82F, 0x1098 .dw 0x2D5B, 0x80C6, 0x83B, 0x8560, 0x3417, 0xDC6A, 0xF28D .dw 0x5121, 0xF4EC, 0x95B4, 0x9AFB, 0x42E0, 0xDE89, 0xED5D .dw 0x139E, 0xB423, 0xBCD9, 0xB584, 0x1ED7, 0x5FA1, 0xFE85 .dw 0xB4EF, 0xC5BA, 0x4BBB, 0x4CB2, 0x26D1, 0x351B, 0x189 .dw 0xBBB1, 0x8F16, 0x7AF3, 0x5FD3, 0x3855, 0x4E9E, 0x44EE .dw 0x41E2, 0xAEC9, 0xE842, 0x27D0, 0x1032, 0xBF60, 0x22CA .dw 0xF2C7, 0xFEF6, 0x8F0F, 0xFB40, 0x5150, 0xFE01, 0x9B5B .dw 0xBBE, 0xD6E, 0xF63A, 0x64CD, 0x848D, 0xD87B, 0x5622 .dw 0x43F1, 0x7AFE, 0x7DC4, 0xEAE7, 0xED89, 0x406E, 0xFC45 .dw 0x697A, 0x797, 0x12B7, 0x7E7D, 0x9E1, 0x66A4, 0x9A7E .dw 0x77E8, 0xFD21, 0x92C4, 0x16CE, 0xEE7B, 0x9F37, 0x86A7 .dw 0xA740, 0x9C94, 0xFEAA, 0x6111, 0xDC8, 0x82B5, 0x40C .dw 0xD486, 0xDDE6, 0xDFDD, 0x8F2B, 0xF2B5, 0x4915, 0x9323 .dw 0xC7E7, 0x4371, 0x88A0, 0x417B, 0x12AD, 0x4494, 0x3705 .dw 0xFE5, 0xC9BC, 0x4DF6, 0xAABF, 0x525B, 0x6896, 0xB412 .dw 0xBC40, 0x2ED4, 0x588F, 0xE79E, 0x3063, 0xFBB2, 0x4E9C .dw 0x9E42, 0xAFED, 0x9392, 0x980C, 0x6556, 0x1C7, 0x2FE0 .dw 0x95C2, 0x11B2, 0x6C43, 0xC27A, 0x41EA, 0xD342, 0xB1F4 .dw 0x45D8, 0x73D5, 0x60DA, 0xA97D, 0xB82, 0xC98F, 0xC084 .dw 0x9312, 0xDAFF, 0x94CB, 0xD683, 0x16BD, 0x3015, 0x483E .dw 0xD32D, 0x9C1C, 0xAA75, 0x49FD, 0x948B, 0x53A4, 0x27DD .dw 0x8A4E, 0xB9C5, 0x646D, 0x714, 0xD9D1, 0xDA70, 0x9E4 .dw 0xC20E, 0x8971, 0x889F, 0x4046, 0x2469, 0x91B6, 0xC9B9 .dw 0x5C1C, 0xDE90, 0xE548, 0xD55, 0xD487, 0x9A46, 0x25B9 .dw 0xE0F, 0x2459, 0x5DCE, 0xBCCE, 0xEB06, 0x8A34, 0xFD7C .dw 0xF2F3 .dw 0xEB78, 0x359D, 0x2B04, 0xB784, 0x9BBB, 0x904, 0xD3C6 .dw 0x1F40, 0x3473, 0x8271, 0xB757, 0x558D, 0x9AF6, 0xF34E .dw 0x63E9, 0xC6A1, 0x3630, 0x9A4F, 0x6333, 0xE171, 0x449E .dw 0xF76C, 0x46E0, 0xB919, 0x9B22, 0x9ABE, 0x2522, 0x24CA .dw 0xEA91, 0xD326, 0x48F, 0x6701, 0x9720, 0xC01B, 0x5FF1 .dw 0xC02C, 0xE90B, 0xAF7D, 0x9C01, 0x30CA, 0xB234, 0x6F84 .dw 0x5A59, 0xE789, 0x691D, 0x9671, 0x4051, 0x580D, 0xA632 .dw 0x46E2, 0xB889, 0x27D2, 0x65C3, 0x3A3, 0xC4E3, 0xC72A .dw 0x6EE, 0xA137, 0x9424, 0x7926, 0x7513, 0xD872, 0x6D3B .dw 0x8BEE, 0x6726, 0x224C, 0xADFC, 0x3758, 0xA0DD, 0xFDB6 .dw 0xC31E, 0x34C0, 0x72A7, 0xC87C, 0xA2FA, 0xBE9F, 0x6668 .dw 0x38F1, 0x3D02, 0x23D, 0x92F8, 0x3291, 0x5998, 0x726F .dw 0xD629, 0xABE5, 0x8FA5, 0xD540, 0xCB70, 0x117D, 0x63EA .dw 0x8704, 0x155D, 0x1489, 0x8E65, 0x3E12, 0x9907, 0xCD2B .dw 0x3FED, 0x7489, 0x3CED, 0xF5E6, 0xA0C1, 0x9A45, 0x275A .dw 0x4D1C, 0x58BF, 0x225F, 0x1F02, 0xD22F, 0x6AD1, 0x7839 .dw 0x4E64, 0x8E36, 0x671C, 0xBB46, 0xCE45, 0xBB3B, 0x2F82 .dw 0x661B, 0x8AFD, 0xDB5C, 0x13F8, 0xE58D, 0xC25F, 0xDEAC .dw 0x5929, 0xD35F, 0x9EE8, 0xE7DE, 0xD78, 0xD4DC, 0x6027 .dw 0xCD58, 0xB74E, 0xA2ED, 0xD01D, 0x2710, 0xB6FC, 0x6D6E .dw 0x7644, 0xCFD9, 0x3DFF, 0x5BDB, 0x2D63, 0xD168, 0x3D37 .dw 0x2E17, 0x7FDF, 0x3FB8, 0x9D0B, 0x147B, 0xE2E0, 0xB13E .dw 0xF82B, 0xD6B3, 0x7392, 0xB0FE, 0x12B, 0x7D00, 0x1554 .dw 0x6526, 0x1BDE, 0x89D5, 0x4146, 0x1FF6, 0x3D31, 0x9956 .dw 0x518A, 0x9904, 0xBC86, 0xC38A, 0x837F, 0x5249, 0x93BD .dw 0x6482, 0x5CCF, 0xF119, 0x39DD, 0x996A, 0x7D79, 0xBE4A .dw 0xB8A8, 0x41F1, 0x716D, 0xB22F, 0xBFE1, 0x6150, 0xBD3A .dw 0x7015, 0xE92, 0xBCF0, 0x8852, 0x7391, 0x4ED6, 0x10FD .dw 0x4874, 0xB2EE, 0xDA61, 0xAA74, 0x3788, 0xEF27, 0xE236 .dw 0x4D14, 0x8F27, 0xDE63, 0xA5D0, 0x5001, 0x2221, 0x1448 .dw 0x6010, 0x78B4, 0xFB77, 0x36D7, 0xFAEE, 0x3847, 0x4298 .dw 0x7726, 0xC73E, 0x523E, 0xDD58, 0x7C0D, 0xAB85, 0x297B .dw 0x1896, 0xA39B, 0x5A1F, 0x4EA9, 0x405D, 0x9F29, 0x53A2 .dw 0x124, 0x2443, 0x488F, 0x8BC1, 0xF18F, 0xD770, 0x443C .dw 0x419A, 0xB00, 0x6B39, 0x7EF6, 0x3E17, 0x32C4, 0x10F2 .dw 0xF77A, 0x6F7B, 0x3E4, 0xE745, 0x3C0F, 0x7CBF, 0xCF37 .dw 0x83F9, 0xD48E, 0x1657, 0x2803, 0xCE39, 0x298D, 0x4208 .dw 0x49E9, 0x2278, 0xE6FC, 0xC921, 0xD07A, 0xC81D, 0x21C3 .dw 0x23E4, 0x7D8E, 0x9210, 0xCB80, 0x44C1, 0xC3BA, 0x91FD .dw 0xFB23, 0xE4BE, 0x29BA, 0xA82B, 0x893F, 0x1C63, 0xBC96 .dw 0x70D1, 0x8D94, 0x3994, 0x6862, 0x6B27, 0x2E82, 0xD040 .dw 0x2430, 0x895E, 0xD0E, 0x61C4, 0xBBB1, 0x5A13, 0xF975 .dw 0xA682, 0xD24D, 0x3C07, 0xAE14, 0xA5FA, 0x2D12, 0x936C .dw 0x4B88, 0x7070, 0x9863, 0x30E5, 0x66B0, 0xB145, 0xE529 .dw 0xD7C6, 0x1A8D, 0xF572, 0x713E, 0xEBB2, 0x476, 0x7298 .dw 0x6068, 0x2EFD, 0x3968, 0x6FE, 0xA218, 0x4304, 0x4E3B .dw 0xB741, 0xDC5B, 0x3831, 0xA3C7, 0x1CFF, 0x44A4, 0x36E4 .dw 0x8AD3, 0x42ED, 0x2DFE, 0x1D8D, 0x9993, 0xB705, 0xE62B .dw 0x2F81, 0x7DB5, 0x3A41, 0xD104, 0x6A9F, 0x8D99, 0x6A8D .dw 0x2A5E, 0x4161, 0x3294, 0xE3DE, 0x29B0, 0x6B0B, 0xE865 .dw 0xEF86, 0x53C0, 0x6D43, 0x3972, 0xF04D, 0x7B6D, 0x7D36 .dw 0xCF2C, 0x2C2B, 0x778F, 0xF037, 0xD313, 0xE76A, 0x7C45 .dw 0xB570, 0xC9F2, 0x64B4, 0xE6F6, 0x9AD8, 0x6976, 0xAE1E .dw 0x7446, 0x932E, 0x4E19, 0x3B1B, 0xC8D4, 0xBBC0, 0xE8C8 .dw 0x6EA8, 0xC96A, 0xFF12, 0x5ECD, 0x3618, 0x4090, 0x6ECA .dw 0x9BB2, 0xE51, 0x4FF3, 0x7E55, 0x487B, 0x5F53, 0xE747 .dw 0x5F7D, 0x184, 0xD745, 0xC3A1, 0x166C, 0x71D2, 0xD83D .dw 0xA1, 0x2272, 0x81C0, 0xF444, 0xF0F1 ;// --- Italy ---;// MT (from 0x4000) .dw 0x2A76, 0xF729 .dw 0x20BC, 0x93D, 0xEB7C, 0xDB16, 0xCCCD, 0xCC23, 0x952F .dw 0x8F74, 0x223C, 0x59D8, 0xD772, 0xD989, 0x1F9A, 0x90C .dw 0x5BB3, 0x1F2C, 0x5234, 0xBF69, 0xA44, 0x5C78, 0xE6B3 .dw 0x390E, 0x5717, 0x7E43, 0xB246, 0x3EF1, 0x3656, 0x9F4C .dw 0x65E9, 0xA03E, 0xE98B, 0x4201, 0x7EB5, 0x7442, 0x1767 .dw 0x1165, 0xE6C8, 0x9E1, 0x3929, 0xF742, 0x72A1, 0xA28E .dw 0xC39A, 0xA455, 0xE1E, 0x8CBE, 0xCBCA, 0xDD8C, 0x19ED .dw 0xB744, 0x3323, 0x12AB, 0x6AF, 0xA2DF, 0x1432, 0xCE9A .dw 0xCFF8, 0x798D, 0xD66A, 0xDE6C, 0x8D3C, 0x60A6, 0x4741 .dw 0x8D25, 0x33E0, 0xFECE, 0x3251, 0x401A, 0xDF75, 0xB71F .dw 0x2754, 0xD02A, 0x5C66, 0x21B0, 0xA3DD, 0x7A8D, 0x2A44 .dw 0x6B60, 0xA3B2, 0x17ED, 0xF922, 0xF372, 0xCFC, 0x5166 .dw 0x2F08, 0xE32B, 0x81CC, 0x22BF, 0xB8C2, 0x9F4, 0x93E1 .dw 0x40AC, 0x2F80, 0xCC1, 0xA473, 0x39E5, 0x6301, 0x71D4 .dw 0x79B7, 0x40F0, 0xF1F, 0x30BF, 0xF73D, 0x92B7, 0x1B3A .dw 0xD498 .dw 0xAE85, 0x6C7A, 0x821C, 0xF1A, 0xB15F, 0xA28F, 0xD433 .dw 0x7CA1, 0xB5E0, 0x7960, 0x14, 0x1D08, 0x4BF1, 0xE0FB .dw 0x3DDE, 0x5ADC, 0x12BC, 0x3853, 0x477C, 0xBC15, 0x7D79 .dw 0xBE4A, 0xB8A8, 0x41F1, 0x716D, 0xB22F, 0xBFE1, 0x6150 .dw 0xBD3A, 0x7015, 0xE92, 0xBCF0, 0x8852, 0x7391, 0x4ED6 .dw 0x10FD, 0x4874, 0xB2EE, 0xDA61, 0xAA74, 0x3788, 0xEF27 .dw 0xE236, 0x4D14, 0x8F27, 0xDE63, 0xA5D0, 0x5001, 0x2221 .dw 0x1448, 0x6010, 0x78B4, 0x690A, 0x7A74, 0x36B9, 0x6E6C .dw 0x4759, 0xA9DB, 0x1507, 0xF5FA, 0xC98, 0x3748, 0xF71D .dw 0x6BFC, 0x464F, 0x621C, 0xCB3A, 0x4F73, 0x32F0, 0xE5A6 .dw 0x2D07, 0xCDD9, 0x2A85, 0x89E7, 0xD109, 0x2EC6, 0x1DCF .dw 0x4D66, 0xBE49, 0xFBEB, 0xB850, 0xBE47, 0xA7C1, 0x2D3D .dw 0x2D00, 0x2F87, 0xAC8, 0x6099, 0x2547, 0x5DEA, 0xCF0C .dw 0xC2D4, 0x145C, 0xB8EA, 0x520E, 0xAB06, 0x7738, 0xD8E2 .dw 0x3599, 0xA924, 0x981, 0xD4CD, 0x9930, 0xAACE, 0x7931 .dw 0xA038, 0xFD4D, 0x1957, 0xC769, 0x158C, 0x259E, 0x9A56 .dw 0x8DE5, 0xB599, 0xB901, 0x7D19, 0xFFEB, 0x1B, 0xA300 .dw 0x1F2C, 0x67BA, 0xA2BC, 0x6A8B, 0xBD9E, 0xCC5E, 0x37B0 .dw 0x9E99, 0xD22D, 0x80CB, 0x7463, 0x3F4, 0x9C41, 0xF919 .dw 0xB87A, 0x50B6, 0x1F73, 0xC5F, 0x32A6, 0xDF9C, 0xBB52 .dw 0xDE38, 0x9A6, 0x927A, 0x96B0, 0x7EDC, 0x1A59, 0x1558 .dw 0xEF9D, 0x26, 0x480, 0 ; --------------------------------------------------------------------------- ; Boot ; --------------------------------------------------------------------------- boot: ldi r16, Half_etu_Treatment_Time call SetIsoClock ;Call subroutine ldi r18, 0x10 ;ATR_LEN ldi r16, 0x17 ldi r17, 0x90 call sub_398D ldi XL, 0x80 ldi XH, 0x04 ldi r16, 0x00 ;clear r16 rcall POINT_ramZ_0480 std Z+1, r16 rjmp loc_2915 ; --------------------------------------------------------------------------- TX6E00: ldi r16, 0 ldi r17, 0x6E TXxxxx: call SendSW ;Send Statusbyte loc_2915: rcall POINT_ramZ_0480 ldd r16, Z+1 std Z+0xC, r16 ldi r18, 5 ldi r16, 0x80 ldi r17, 4 call RAM_STORE ldi r16, 0xB0 call Pause_r16 ld r16, X cpi r16, 0xC1 brne TX6E00 rcall POINT_ramZ_0480 ldd r16, Z+4 cpi r16, -0x7F brcs Ins_3A TX6700: ldi r16, 0 ldi r17, 0x67 rjmp TXxxxx ; --------------------------------------------------------------------------- ; Ins 3A : send to output decrypted double word ; le DW si trovano in ram 0x0280h ; status code 90 14 = previous ins not 3C ; status code 90 00 = OK ; --------------------------------------------------------------------------- Ins_3A: ldd r16, Z+1 cpi r16, 0x3A brne Ins_3C ldi r16, 0x3A rcall SendByte_and_POINT_ramZ_0480 ;send ACK rcall sub_2BB3 rcall POINT_ramZ_0480 ldd r16, Z+0xC cpi r16, 0x3C breq Ins_3A_2 rcall STORE_z+4_to_r18_and_store_0400_in_r17r16 call sub_398D TX9014: ldi r16, 0x14 TX90xx: ldi r17, 0x90 rjmp TXxxxx ; --------------------------------------------------------------------------- Ins_3A_2: ldi r18, 0x10 rcall r17r16_0280 EEPROM_SEND_9000: call sub_398D TX9000: ldi r16, 0 rjmp TX90xx ; --------------------------------------------------------------------------- ; Ins 3C : ECM ; --------------------------------------------------------------------------- Ins_3C: ldd r16, Z+1 ;load INS cpi r16, 0x3C ;check INS breq Ins_3C_1 ;jump Ins_3C_1 if INS = 3C rjmp Ins_40 ;else jump to Ins_40 ; --------------------------------------------------------------------------- Ins_3C_1: ldd r16, Z+ ;load LEN cpi r16, 0x5C ;check LEN brcs TX6700 ldi r16, 0x3C call SendByte ldi r16, 0 mov r4, r16 ldi r16, 4 mov r5, r16 rcall POINT_ramZ_0480 rcall STORE_z+4_to_r18_and_store_0400_in_r17r16 call RAM_STORE ;// Remove SSE call sub_31EB call sub_2F39 tst r16 brne Ins_3C_2 ;// SEND SW (9017) SSE non è andata a buon fine ldi r16, 0x17 rjmp TX90xx ; --------------------------------------------------------------------------- Ins_3C_2: rcall POINT_ramZ_0480 ldd r16, Z+0xB ldi r17, 0 subi r16, 0xFE sbci r17, 0xFF rcall POINT_ramZ_0400 add ZL, r16 adc ZH, r17 ld r16, Z cpi r16, 0x82 breq Ins_3C_3 ;// SEND SW (9018) P5 ERRATO non punta alla signa ldi r16, 0x18 rjmp TX90xx ; --------------------------------------------------------------------------- Ins_3C_3: call sub_2FF4 tst r16 brne Ins_3C_4 ;// SEND SW (9019) ldi r16, 0x19 rjmp TX90xx ; --------------------------------------------------------------------------- Ins_3C_4: ldi r16, 0x3C call sub_31BA rcall POINT_ramZ_0480 ldd r18, Z+0xB subi r18, 8 rcall store_0400_in_r17r16 subi r16, 0xF6 sbci r17, 0xFF ;Point r17:r16 to 0x0409 call sub_3028 rcall POINT_ramZ_0480 ldd r18, Z+0xB rcall store_0400_in_r17r16 subi r16, 0xFE sbci r17, 0xFF call sub_3221 rcall POINT_ramZ_0480 ldd r16, Z+5 ldd r17, Z+6 or r16, r17 brne Ins_3C_5 TX9002: ldi r16, 2 rjmp TX90xx ; --------------------------------------------------------------------------- Ins_3C_5: ldd r16, Z+5 subi r16, 0xFF sbci r17, 0xFF std Z+5, r16 std Z+6, r17 ;// SHA MD-1 ldi r23, 0 ;SHA-1 Byte PAD ldi r22, 0 ;SHA-1 Byte END ldd r20, Z+0xB ldi r21, 0 subi r20, 0xE ;number of bytes to hash (from P3 to D1 includes) sbci r21, 0 ldi r18, 0 ldi r19, 4 ;r19:r18 = 0x0400 rcall store_0400_in_r17r16 rcall sub_2BDF ;Point r17:r16 to 0x045F ;jump SHA-1 ;// Copy 8 bytes from 0x045F to 0x0473 ;0x0473 MD-1 (COPY) ldi r20, 8 rcall r21_0_r19r18_045F_r17r16_0400 subi r16, 0x8C sbci r17, 0xFF ;Point r17:r16 to 0x0473 call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 ;// r19:r18 = 0x0473 (INPUT) // decrypt seca ldi r18, 0 ldi r19, 4 subi r18, 0x8C sbci r19, 0xFF ;Point r19:r18 to 0x0473 rcall POINT_r17r16_048C_and_decrypt_seca ;Point Key BUFFER to 0x048C ;// SHA MD-2 ;from 0x045F to 0x047F OUTPUT MD-2 (0x20h bytes) ldi r23, 0 ;SHA-1 Byte PAD ldi r22, 0 ;SHA-1 Byte END ldi r20, 0x1C ;number of bytes to hash (0x1Ch) (28) rcall r21_0_r19r18_045F_r17r16_0400 rcall sub_2BDF ;Point r17:r16 to 0x045F ;jump SHA-1 ;// rcall POINT_ramZ_0480 ldd r16, Z+9 ldd r17, Z+0xA or r16, r17 ;r16 = r16 OR r17 breq Ins_3C_6 rcall store_0400_in_r17r16 subi r16, 0xA0 sbci r17, 0xFF ;Point r17:r16 to 0x045F (OUTPUT MD-2 (0x20h bytes)) call Process_Nano_0F Ins_3C_6: ldi r24, 0x80 ldi r25, 2 ;Point r25:r24 to 0x0280 lds r16, ram_04A3 rcall sub_2BC8 mov ZL, r16 mov ZH, r17 subi ZL, 0x67 sbci ZH, 0x6F ld r16, Z sbrs r16, 1 ;skip if BIT 1 of r16 is set rjmp Ins_3C_7 ;// Italian algo assumes some additional modifications befor final decrypt ;// XOR 10h (16) bytes in italian 007x ECM ;// save the result into 0x028F ldi r22, 0x10 ;LEN ldi r20, 0xE6 ldi r21, 0x92 ;point ram Y to 0x92E6 (EEPROM) rcall POINT_ramZ_0480 rcall Store_Z+5/Z+6_to_r18r19_and_r17r16_0280 subi r16, 0xF0 sbci r17, 0xFF ;point ram Z to 0x028F call StoreBYTES_len_r22_X_xor_Y_to_Z ;point ram Z to r17:r16 ;point ram X to r19:r18 ;point ram Y to r21:r20 ;LEN = r22 ;store Z = (X XOR Y) ;// Permut bytes in italian 007x ECM rcall POINT_ramZ_0280 ldd r16, Z+0x11 st Z, r16 ldd r16, Z+0x10 std Z+1, r16 ldd r16, Z+0x12 std Z+2, r16 ldd r16, Z+0x14 std Z+3, r16 ldd r16, Z+0x13 std Z+4, r16 ldd r16, Z+0x17 std Z+5, r16 ldd r16, Z+0x15 std Z+6, r16 ldd r16, Z+0x16 std Z+7, r16 ldd r16, Z+0x1E std Z+8, r16 ldd r16, Z+0x1B std Z+9, r16 ldd r16, Z+0x1D std Z+0xA, r16 ldd r16, Z+0x1A std Z+0xB, r16 ldd r16, Z+0x1F std Z+0xC, r16 ldd r16, Z+0x1C std Z+0xD, r16 ldd r16, Z+0x19 std Z+0xE, r16 ldd r16, Z+0x18 std Z+0xF, r16 rjmp Ins_3C_8 ; --------------------------------------------------------------------------- Ins_3C_7: ;// copy 10h bytes from r19:r18 to 0x0280 ldi r20, 0x10 ldi r21, 0 rcall POINT_ramZ_0480 rcall Store_Z+5/Z+6_to_r18r19_and_r17r16_0280 call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 Ins_3C_8: rcall POINT_ramZ_0480 ldd r16, Z+7 ldd r17, Z+8 or r16, r17 breq Ins_3C_end ldi r16, 0x60 add r4, r16 ldi r16, 0 adc r5, r16 mov r16, r4 mov r17, r5 call sub_34EF rjmp TX9000 ; --------------------------------------------------------------------------- Ins_3C_end: ;// DECRYPT /* 1st CW */ ;// r19:r18 = 0x0280 (INPUT) // decrypt seca ;// save the result into 0x0280 (DW1) ldi r18, 0x80 ldi r19, 2 ;Point r19:r18 to 0x0280 rcall POINT_r17r16_048C_and_decrypt_seca ;Point Key BUFFER to 0x048C adiw r24, 8 ;add 0x0008 to r25:r24 ;// DECRYPT /* 2nd CW */ ;// r19:r18 = 0x0288 (INPUT) // decrypt seca ;// save the result into 0x0288 (DW2) mov r18, r24 mov r19, r25 ;Point r19:r18 to 0x0288 rcall POINT_r17r16_048C_and_decrypt_seca ;Point Key BUFFER to 0x048C rjmp TX9000 ; --------------------------------------------------------------------------- ; Ins 40 : EMM ; NOT YET IMPLEMENTED !!! ONLY PARTIAL STATUSBYTE ; status code 67 00 = if LEN <> 5C ; status code 90 1D = if P1 => x6 ; status code 90 02 = ALWAYS ! ; --------------------------------------------------------------------------- Ins_40: ldd r16, Z+1 ;load INS cpi r16, 0x40 ;check INS brne Ins_0E ;jump Ins_0E if INS <> 40 ldd r16, Z+4 ;load LEN cpi r16, 0x5C ;check LEN brcc Ins_40_1 rjmp TX6700 ; --------------------------------------------------------------------------- Ins_40_1: rcall sub_2BEE cpi r16, 6 brcs Ins_40_2 ldi r16, 0x1D rjmp TX90xx ; --------------------------------------------------------------------------- Ins_40_2: ldi r16, 0x40 rcall SendByte_and_POINT_ramZ_0480 ;send ACK rcall STORE_z+4_to_r18_and_store_0400_in_r17r16 rcall RAM_STORE_and_PAUSE_0cicli rcall PAUSE_0cicli rjmp TX9002 ; --------------------------------------------------------------------------- ; Ins 0E : output serial number of the card ; --------------------------------------------------------------------------- Ins_0E: ldd r16, Z+1 ;load INS cpi r16, 0xE ;check INS brne Ins_16 ;jump Ins_16 if INS <> 0E ldi r16, 0xE rcall SendByte_and_POINT_ramZ_0480 ;send ACK rcall sub_2BB3 ldi r20, 8 ldi r21, 0 ldi r18, 7 ldi r19, 0x90 loc_2A1E: rcall store_0400_in_r17r16 call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 SendRAM0400_Instr_LEN_9000: rcall POINT_ramZ_0480 rcall STORE_z+4_to_r18_and_store_0400_in_r17r16 rjmp EEPROM_SEND_9000 ; --------------------------------------------------------------------------- ; Ins 16 : output providers bitmap, pin prot status, flags and table indicators ; C1 16 00 00 08 ; --------------------------------------------------------------------------- Ins_16: ldd r16, Z+1 ;load INS cpi r16, 0x16 ;check INS brne Ins_12 ;jump Ins_12 if INS <> 16 ldi r16, 0x16 rcall SendByte_and_POINT_ramZ_0480 ;send ACK rcall sub_2BB3 ldi r20, 8 ldi r21, 0 ldi r18, 0xF ldi r19, 0x90 rjmp loc_2A1E ; --------------------------------------------------------------------------- ; Ins 12 management: output provider id-string and regional bitmap ; --------------------------------------------------------------------------- Ins_12: ldd r16, Z+1 ;load INS cpi r16, 0x12 ;check INS brne Ins_21 ldi r16, 0x12 rcall SendByte_and_POINT_ramZ_0480 ;send ACK rcall sub_2BB3 rcall POINT_ramZ_0480 ldd r8, Z+2 ldi r16, 0xF and r8, r16 ldi r16, 6 cp r8, r16 brcc SendRAM0400_Instr_LEN_9000 ldi r21, 0 ldi r24, 0x27 ldi r25, 0x90 mov r16, r8 ldi r17, 0 ldi r20, 0x75 call sub_39D3 add r24, r16 adc r25, r17 mov r18, r24 mov r19, r25 ldi r20, 0x21 ldi r21, 0 rjmp loc_2A1E ; --------------------------------------------------------------------------- ; Ins 21 ; --------------------------------------------------------------------------- Ins_21: ldd r16, Z+1 ;load INS cpi r16, 0x21 brne Ins_1A ldi r16, 0x21 call SendByte rjmp SendRAM0400_Instr_LEN_9000 ; --------------------------------------------------------------------------- ; Ins 1A : output space and index of primary keys for given provider ; C1 1A xx 00 LEN ; --------------------------------------------------------------------------- Ins_1A: ldd r16, Z+1 cpi r16, 0x1A brne Ins_34 ldi r16, 0x1A rcall SendByte_and_POINT_ramZ_0480 ;send ACK rcall sub_2BB3 ser r16 rcall POINT_ramZ_0400 st Z, r16 std Z+1, r16 ldi r16, 0x1F std Z+2, r16 ldi r16, 0xD4 std Z+3, r16 ldi r16, 0 std Z+4, r16 ldi r16, 5 mov r8, r16 ldi r16, 0xF6 ldi r17, 0x92 rjmp loc_2A68 ; --------------------------------------------------------------------------- loc_2A67: rcall sub_2BD3 loc_2A68: rcall POINT_ramZ_04A4 st Z, r16 std Z+1, r17 mov r18, r16 mov r19, r17 ldi r17, 0x94 cpi r18, 0xFA cpc r19, r17 brcc loc_2A84 mov ZL, r16 mov ZH, r19 ldd r17, Z+0xB rcall POINT_ramZ_0480 ldd r16, Z+2 ori r16, 0x80 cp r17, r16 brne loc_2A80 mov ZL, r18 mov ZH, r19 ld r16, Z clr r9 rcall POINT_ramZ_0400 rcall sub_2BF4 inc r8 loc_2A80: rcall POINT_ramZ_0480 ldd r16, Z+4 cp r16, r8 brcc loc_2A67 loc_2A84: rjmp SendRAM0400_Instr_LEN_9000 ; --------------------------------------------------------------------------- ; Ins 34 : data request ; d1 = Z+0x20 d2 = Z+0x21 d3 = Z+0x22 ; --------------------------------------------------------------------------- Ins_34: ldd r16, Z+1 cpi r16, 0x34 brne Ins_32 ldd r16, Z+4 cpi r16, 3 breq loc_2A8C rjmp TX6700 ; --------------------------------------------------------------------------- loc_2A8C: ldi r16, 0x34 call SendByte ldi r18, 3 rcall r17r16_0280 subi r16, 0xE0 sbci r17, 0xFF rcall RAM_STORE_and_PAUSE_0cicli rcall PAUSE_0cicli ldi r16, 0 rcall POINT_ramZ_0280 std Z+0x23, r16 ldd r16, Z+0x20 cpi r16, 7 ldi r16, 0 brcc TX96xx rjmp TX90xx ; --------------------------------------------------------------------------- TX96xx: ldi r17, 0x96 rjmp TXxxxx ;------------------------------------------------------------------------------- ; Ins 32 : output requested data ; data from ins 34 d1 = Z+0x20 d2 = Z+0x21 d3 = Z+0x22 ; d1 d2 d3 example ; 0 0 0 Provider package bitmap C1 32 xx 00 0A 83 data 04 ; 1 0 0 Provider PPV credits C1 32 xx 00 0A 84 data 04 ; 3 x x Provider PPV event record C1 32 xx 00 0D B1 data 04 ; 4 0 x Seca record C1 32 00 00 0D B2 data 04 ; 6 x x Given record (number) C1 32 xx 00 12 D2 data 03 ;------------------------------------------------------------------------------- Ins_32: ldd r16, Z+1 subi r16, 0x32 breq Ins_32_1 subi r16, 0x1F breq loc_2AAA subi r16, 4 brne loc_2AA7 rjmp Ins_04 ; --------------------------------------------------------------------------- loc_2AA7: subi r16, 0xC breq loc_2AAA rjmp TX6D00 ; --------------------------------------------------------------------------- loc_2AAA: rcall SendByte_Z+1_and_POINT_ramZ_0480 rcall sub_2BF8 rjmp TX9000 ; --------------------------------------------------------------------------- Ins_32_1: rcall SendByte_Z+1_and_POINT_ramZ_0480 rcall sub_2BB3 rcall POINT_ramZ_0480 ldd r16, Z+0xC cpi r16, 0x32 breq loc_2AB6 cpi r16, 0x34 breq loc_2AB6 rjmp loc_2B8C ; --------------------------------------------------------------------------- loc_2AB6: ldd r18, Z+4 rcall sub_2BE3 ld r16, Z cp r18, r16 brcc loc_2ABF ldi r16, 3 loc_2ABC: rcall POINT_ramZ_0400 loc_2ABD: st Z, r16 rjmp SendRAM0400_Instr_LEN_9000 ; --------------------------------------------------------------------------- loc_2ABF: rcall POINT_ramZ_0280 ldd r16, Z+0x20 subi r16, 0 breq loc_2ACC subi r16, 3 breq loc_2AEB dec r16 brne loc_2AC8 rjmp loc_2B0D ; --------------------------------------------------------------------------- loc_2AC8: subi r16, 2 brne loc_2ACB rjmp loc_2B1E ; --------------------------------------------------------------------------- loc_2ACB: rjmp loc_2ADC ; --------------------------------------------------------------------------- loc_2ACC: ldi r24, 0x27 ldi r25, 0x90 rcall POINT_ramZ_0480 rcall sub_2BEE rcall sub_2BC8 add r24, r16 adc r25, r17 rcall POINT_ramZ_04A4 st Z, r24 std Z+1, r25 mov r17, r25 mov ZL, r24 mov ZH, r25 ldd r16, Z+0x19 cpi r16, 0x83 breq loc_2ADE loc_2ADC: ldi r16, 4 rjmp loc_2ABC ; --------------------------------------------------------------------------- loc_2ADE: ldi r16, -0x4E rcall POINT_ramZ_0400 st Z, r16 ldi r20, 0xB ldi r21, 0 mov r18, r24 mov r19, r17 rcall store_0400_in_r17r16 subi r16, 0xFF sbci r17, 0xFF rcall sub_2BCD std Z+0xB, r16 rjmp SendRAM0400_Instr_LEN_9000 ; --------------------------------------------------------------------------- loc_2AEB: rcall POINT_ramZ_0480 rcall sub_2BEE cpi r16, 1 brne loc_2ADC ldi r16, -0x4F rcall POINT_ramZ_0400 st Z, r16 ldi r16, 0 std Z+1, r16 rcall POINT_ramZ_0280 ldd r16, Z+0x21 rcall POINT_ramZ_0400 std Z+2, r16 rcall POINT_ramZ_0280 ldd r16, Z+0x22 rcall POINT_ramZ_0400 std Z+3, r16 ldi r16, -0x23 std Z+4, r16 ldi r16, 2 std Z+5, r16 ldi r16, 0 std Z+6, r16 std Z+7, r16 ldi r16, 0x1B std Z+8, r16 ldi r16, 0x1C std Z+9, r16 ldi r16, 0 std Z+0xA, r16 std Z+0xB, r16 ldi r16, 4 std Z+0xC, r16 rjmp SendRAM0400_Instr_LEN_9000 ; --------------------------------------------------------------------------- loc_2B0D: ldd r18, Z+0x22 rcall POINT_ramZ_0480 ldd r17, Z+2 ldi r16, 0xE0 call sub_2FC0 tst r16 breq loc_2ADC rcall sub_2BE3 ld r20, Z rcall sub_2BDA ldd r19, Z+1 subi r18, -0x19 rcall sub_2BC4 rcall sub_2BCD std Z+9, r16 rjmp SendRAM0400_Instr_LEN_9000 ; --------------------------------------------------------------------------- loc_2B1E clr r8 ldi r16, 0xF6 ldi r17, 0x92 mov r10, r16 mov r11, r17 ldd r16, Z+0x22 ldi r17, 0 ldi r20, 0xC ldi r21, 0 call sub_39D3 add r10, r16 adc r11, r17 rcall POINT_ramZ_04A4 st Z, r10 std Z+1, r11 rjmp loc_2B38 ; --------------------------------------------------------------------------- loc_2B2F: rcall sub_2BCF rcall sub_2BF4 loc_2B31: rcall sub_2BD3 st Z, r16 std Z+1, r17 rcall POINT_ramZ_0280 ldd r16, Z+0x22 inc r16 std Z+0x22, r16 loc_2B38: rcall POINT_ramZ_04A4 ld r18, Z ldd r19, Z+1 ldi r17, 0x94 cpi r18, 0xFA cpc r19, r17 brcs loc_2B40 rjmp SendRAM0400_Instr_LEN_9000 ; --------------------------------------------------------------------------- loc_2B40: mov ZL, r18 mov ZH, r19 ldd r17, Z+0xB rcall POINT_ramZ_0480 rcall sub_2BEE cp r17, r16 brne loc_2B31 ldi r16, -0x2E clr r9 rcall POINT_ramZ_0400 rcall sub_2BF4 inc r8 rcall POINT_ramZ_0400 add ZL, r8 adc ZH, r9 st Z, r9 inc r8 rcall POINT_ramZ_0280 ldd r16, Z+0x22 rcall POINT_ramZ_0400 rcall sub_2BF4 inc r8 rcall POINT_ramZ_04A4 ld r16, Z ldd r17, Z+1 mov ZL, r16 mov ZH, r17 ldd r16, Z+0xB andi r16, 0xF0 cpi r16, 0x80 breq loc_2B61 cpi r16, 0xC0 brne loc_2B74 loc_2B61: rcall POINT_ramZ_04A4 ld r16, Z mov ZL, r16 mov ZH, r17 ld r16, Z rcall POINT_ramZ_0400 rcall sub_2BF4 ldi r20, 3 rcall sub_2BDA ldd r19, Z+1 subi r18, -9 sbci r19, 0xFF mov ZL, r8 ldi ZH, 0 adiw ZL, 9 rcall store_0400_in_r17r16 add r16, ZL adc r17, ZH rjmp loc_2B7A ; --------------------------------------------------------------------------- loc_2B74: ldi r20, 0xC rcall sub_2BDA mov r19, r17 rcall store_0400_in_r17r16 add r16, r8 adc r17, r9 loc_2B7A: call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 ldi r16, 0xC add r8, r16 rcall POINT_ramZ_0480 ldd r16, Z+4 mov ZL, r16 ldi ZH, 0 sbiw ZL, 0xC cp ZL, r8 cpc ZH, r9 brlt loc_2B87 rjmp loc_2B2F ; --------------------------------------------------------------------------- loc_2B87: ldi r16, 3 rcall POINT_ramZ_0400 add ZL, r8 adc ZH, r9 rjmp loc_2ABD ; --------------------------------------------------------------------------- loc_2B8C: rcall sub_2BF8 rjmp TX9014 ; --------------------------------------------------------------------------- ; Ins 04 ; --------------------------------------------------------------------------- Ins_04: ldd r16, Z+2 cpi r16, 0xDE brne SW_WRONG_P1P2 ldd r16, Z+3 cpi r16, 0xAD brne SW_WRONG_P1P2 ldi r16, 0 ldi r17, 0x90 call SendSW ;Send Statusbyte call RestoreLoader ; --------------------------------------------------------------------------- ;Infinite loop (no entry point) ; --------------------------------------------------------------------------- loc_2B9A: rjmp loc_2B9A ; --------------------------------------------------------------------------- SW_WRONG_P1P2: ldi r16, 0x86 ldi r17, 0x6A rjmp TXxxxx ; --------------------------------------------------------------------------- ; Ins not found ; --------------------------------------------------------------------------- TX6D00: rcall PAUSE_0cicli ldi r16, 0 ldi r17, 0x6D rjmp TXxxxx ;//---------------------------------------------------------------------- ;// Subroutine: RAM_STORE_and_PAUSE_0cicli ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: Pause_r16 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- RAM_STORE_and_PAUSE_0cicli: call RAM_STORE PAUSE_0cicli: ldi r16, 0 jmp Pause_r16 ;//---------------------------------------------------------------------- ;// Subroutine: SendByte_Z+1_and_POINT_ramZ_0480 ;//---------------------------------------------------------------------- ;// Input Parameters: ZH:ZL ;// Output Parameters: ZH:ZL ;//---------------------------------------------------------------------- ;// Routines called: SendByte ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- SendByte_Z+1_and_POINT_ramZ_0480: ldd r16, Z+1 SendByte_and_POINT_ramZ_0480: call SendByte POINT_ramZ_0480: ldi ZL, 0x80 ldi ZH, 4 ;Point ZH:ZL to 0x0480 ret ;//---------------------------------------------------------------------- ;// Subroutine: POINT_r17r16_048C_and_decrypt_seca ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: decrypt_seca ;//---------------------------------------------------------------------- ;// Description: ;// point r17:r16 to 0x048C & jump decrypt_seca ;//---------------------------------------------------------------------- POINT_r17r16_048C_and_decrypt_seca: ldi r16, 0x80 ldi r17, 4 subi r16, 0xF3 sbci r17, 0xFF ;Point Key BUFFER to 0x048C jmp decrypt_seca ;jump decrypt_seca ;//---------------------------------------------------------------------- ;// Subroutine: sub_2BB3 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: sub_3953 ;//---------------------------------------------------------------------- ;// Description: ;// memorizza in ram Z 0x0400 $FF x una lunghezza LEN (Z+4) ;//---------------------------------------------------------------------- sub_2BB3: ldd r19, Z+4 ser r18 ;Set Register r18 = $FF ldi r16, 0 ldi r17, 4 ;Point r17:r16 to 0x0400 jmp sub_3953 ;//---------------------------------------------------------------------- ;// Subroutine: STORE_z+4_to_r18_and_store_0400_in_r17r16 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: store_0400_in_r17r16 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- STORE_z+4_to_r18_and_store_0400_in_r17r16: ldd r18, Z+4 rjmp store_0400_in_r17r16 ;//---------------------------------------------------------------------- ;// Subroutine: Store_Z+5/Z+6_to_r18r19_and_r17r16_0280 ;//---------------------------------------------------------------------- ;// Input Parameters: ZH:ZL ;// Output Parameters: r17:r16, r18, r19 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- Store_Z+5/Z+6_to_r18r19_and_r17r16_0280: ldd r18, Z+5 ldd r19, Z+6 r17r16_0280: ldi r16, 0x80 ldi r17, 2 ret ;//---------------------------------------------------------------------- ;// Subroutine: r21_0_r19r18_045F_r17r16_0400 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: r16,r17,r18,r19,r21 ;//---------------------------------------------------------------------- ;// Description: ;// Point r19:r18 to 0x045F and r17:r16 to 0x0400 ;// Clear r21 ;//---------------------------------------------------------------------- r21_0_r19r18_045F_r17r16_0400: ldi r21, 0 ;clear r21 ldi r18, 0 ldi r19, 4 ;Point r19:r18 to 0x0400 subi r18, 0xA0 sub_2BC4: sbci r19, 0xFF ;Point r19:r18 to 0x045F store_0400_in_r17r16: ldi r16, 0 ldi r17, 4 ;Point r17:r16 to 0x0400 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2BC8 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: sub_39D3 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2BC8: ldi r17, 0 ldi r20, 0x75 ldi r21, 0 jmp sub_39D3 ;//---------------------------------------------------------------------- ;// Subroutine: sub_2BCD ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2BCD: call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 sub_2BCF: ldi r16, 4 POINT_ramZ_0400: ldi ZL, 0 ldi ZH, 4 ;Point ZH:ZL to 0x0400 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2BD3 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2BD3: ldi ZL, 0xA4 ldi ZH, 4 ;Point ZH:ZL to 0x04A4 ld r16, Z ldd r17, Z+1 subi r16, 0xF4 sbci r17, 0xFF ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2BDA ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2BDA: ldi r21, 0 ldi ZL, 0xA4 ldi ZH, 4 ;Point ZH:ZL to 0x04A4 ld r18, Z ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2BDF ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: SHA-1 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2BDF: subi r16, 0xA0 sbci r17, 0xFF jmp SHA-1 ;//---------------------------------------------------------------------- ;// Subroutine: sub_2BE3 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2BE3: ldi ZL, 0x80 ldi ZH, 2 ;Point ZH:ZL to 0x0280 ldd r16, Z+0x20 mov ZL, r16 ldi ZH, 0 subi ZL, 0 sbci ZH, 0x70 ret ;//---------------------------------------------------------------------- ;// Subroutine: POINT_ramZ_0280 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: ZH:ZL ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- POINT_ramZ_0280: ldi ZL, 0x80 ldi ZH, 2 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2BEE ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2BEE: ldd r16, Z+2 andi r16, 0xF ret ;//---------------------------------------------------------------------- ;// Subroutine: POINT_ramZ_04A4 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: ZH:ZL ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- POINT_ramZ_04A4: ldi ZL, 0xA4 ldi ZH, 4 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2BF4 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2BF4: add ZL, r8 adc ZH, r9 st Z, r16 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2BF8 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: loc_399C ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2BF8: ldd r17, Z+4 ser r16 ;Set Register r16 = $FF jmp loc_399C ; --------------------------------------------------------------------------- .dw 0101 0202 0202 0202 0201 0202 0202 0102 .dw F40E 417D 2FE2 18DB 6AA3 BCC6 5995 8730 .dw C1F4 288E 964D 7B12 BC5F E739 0AA3 D065 .dw D13F 7E48 2BF6 E483 07C9 AD12 906C 5AB5 .dw 8ED0 1BA7 F43A 214D 68B5 C67C 5309 9FE2 .dw 70DA 9E09 4336 A56F 8D21 E75C B4CB 18F2 .dw A61D 09D4 9F68 7083 F14B 3CE2 5AB5 C72E .dw 8DD7 53BE F660 3A09 7241 C528 AC1B 9FE4 .dw F63A 6009 1BAC 8DD7 419F BE53 72C5 E428 .dw BCE2 C124 7A47 16DB 0558 AFF3 903D 698E .dw 82B4 7BC1 ED1A D827 F96F 950C 43A6 3E50 .dw F1AC 2F4A C279 5896 1D60 E4D3 B70E 8B35 .dw 3E49 C52F 5892 A3FC E0B7 7A14 0D61 D68B .dw 0BD4 7EB2 904F AD18 3CE3 C759 FA25 6186 .dw B461 8DDB 431C 7EA7 5F9A F806 25E0 C239 .dw F21D 84D8 3FA6 417B 59CA BE63 E005 279C .dw 1B27 71E4 AC49 D28E C6F0 0D9A 533F B865 ;//---------------------------------------------------------------------- ;// Subroutine: sub_2C84 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2C84: st -Y, r4 st -Y, r5 st -Y, r6 st -Y, r7 st -Y, r8 st -Y, r9 st -Y, r10 st -Y, r11 st -Y, r12 st -Y, r13 st -Y, r14 st -Y, r15 st -Y, r24 st -Y, r25 st -Y, XL st -Y, XH push YL push YH mov XL, r16 mov XH, r17 mov ZL, r18 mov ZH, r19 push ZH push ZL ldi YL, 0 ldi YH, 0 loc_2C9E: ld r17, Z+ std Y+1, r17 ld r17, X+ std Y+9, r17 inc YL cpi YL, 8 brne loc_2C9E clr YL rcall sub_2CC3 clr YL clr YH pop ZL pop ZH loc_2CAB: ldd r0, Y+1 st Z+, r0 inc YL cpi YL, 8 brne loc_2CAB pop YH pop YL ld XH, Y+ ld XL, Y+ ld r25, Y+ ld r24, Y+ ld r15, Y+ ld r14, Y+ ld r13, Y+ ld r12, Y+ ld r11, Y+ ld r10, Y+ ld r9, Y+ ld r8, Y+ ld r7, Y+ ld r6, Y+ ld r5, Y+ ld r4, Y+ ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2CC3 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2CC3: clr XH ldi XL, 0x11 ldi r25, 7 loc_2CC6: lsl r8 rol r0 lsl r7 rol r0 lsl r6 rol r0 lsl r5 rol r0 lsl r4 rol r0 lsl r3 rol r0 lsl r2 rol r0 lsl r1 rol r0 st X+, r0 dec r25 brpl loc_2CC6 mov r5, r17 mov r1, r18 mov r6, r19 mov r2, r20 mov r7, r21 mov r3, r22 mov r8, r23 mov r4, r24 bst r14, 6 bld r17, 7 bst r16, 7 bld r17, 6 bst r12, 3 bld r17, 5 bst r13, 6 bld r17, 4 bst r14, 7 bld r17, 3 bst r15, 3 bld r17, 2 bst r12, 2 bld r17, 1 bst r10, 1 bld r17, 0 bst r11, 5 bld r18, 7 bst r13, 4 bld r18, 6 bst r11, 1 bld r18, 5 bst r10, 2 bld r18, 4 bst r14, 5 bld r18, 3 bst r16, 3 bld r18, 2 bst r10, 4 bld r18, 1 bst r9, 5 bld r18, 0 bst r15, 5 bld r19, 7 bst r15, 7 bld r19, 6 bst r9, 3 bld r19, 5 bst r9, 2 bld r19, 4 bst r14, 3 bld r19, 3 bst r15, 2 bld r19, 2 bst r15, 4 bld r19, 1 bst r14, 1 bld r19, 0 bst r16, 1 bld r20, 7 bst r13, 2 bld r20, 6 bst r16, 6 bld r20, 5 bst r11, 2 bld r20, 4 bst r16, 4 bld r20, 3 bst r13, 7 bld r20, 2 bst r10, 6 bld r20, 1 bst r12, 6 bld r20, 0 bst r13, 3 bld r21, 7 bst r13, 5 bld r21, 6 bst r14, 4 bld r21, 5 bst r9, 7 bld r21, 4 bst r11, 4 bld r21, 3 bst r16, 2 bld r21, 2 bst r12, 4 bld r21, 1 bst r11, 6 bld r21, 0 bst r14, 2 bld r22, 7 bst r10, 7 bld r22, 6 bst r13, 1 bld r22, 5 bst r9, 4 bld r22, 4 bst r12, 5 bld r22, 3 bst r10, 5 bld r22, 2 bst r11, 3 bld r22, 1 bst r15, 6 bld r22, 0 bst r12, 1 bld r23, 7 bst r12, 7 bld r23, 6 bst r9, 6 bld r23, 5 bst r9, 1 bld r23, 4 bst r10, 3 bld r23, 3 bst r15, 1 bld r23, 2 bst r16, 5 bld r23, 1 bst r11, 7 bld r23, 0 mov r9, r17 mov r10, r18 mov r11, r19 mov r12, r20 mov r13, r21 mov r14, r22 mov r15, r23 ldi YH, 0x10 loc_2D59: clr XH cpi YL, 0 brne loc_2D61 ldi ZL, 8 ldi ZH, 0x58 sub ZL, YH sbc ZH, XH rjmp loc_2D67 ; --------------------------------------------------------------------------- loc_2D61: cpi YH, 0x10 breq loc_2D8B clr ZH mov ZL, YH subi ZL, 8 sbci ZH, -0x58 loc_2D67: lpm loc_2D68: mov r25, r12 cpi YL, 0 brne loc_2D78 lsl r12 rol r11 rol r10 bst r9, 7 rol r9 bld r12, 4 lsl r15 rol r14 rol r13 rol r25 bst r25, 4 bld r15, 0 rjmp loc_2D84 ; --------------------------------------------------------------------------- loc_2D78: lsr r9 ror r10 ror r11 ror r12 bst r12, 3 bld r9, 7 lsr r25 ror r13 ror r14 bst r15, 0 ror r15 bld r25, 3 loc_2D84: andi r25, 0xF mov XL, r12 andi XL, 0xF0 or XL, r25 mov r12, XL dec r0 brne loc_2D68 loc_2D8B: bst r11, 6 bld r17, 7 bst r9, 5 bld r17, 6 bst r11, 3 bld r17, 5 bst r10, 1 bld r17, 4 bst r14, 6 bld r17, 3 bst r13, 5 bld r17, 2 bst r13, 3 bld r17, 1 bst r9, 0 bld r17, 0 bst r15, 7 bld r18, 7 bst r14, 7 bld r18, 6 bst r12, 2 bld r18, 5 bst r15, 1 bld r18, 4 bst r15, 0 bld r18, 3 bst r12, 3 bld r18, 2 bst r10, 4 bld r18, 1 bst r11, 1 bld r18, 0 bst r14, 5 bld r19, 7 bst r10, 2 bld r19, 6 bst r9, 1 bld r19, 5 bst r12, 5 bld r19, 4 bst r10, 3 bld r19, 3 bst r9, 6 bld r19, 2 bst r10, 5 bld r19, 1 bst r14, 3 bld r19, 0 bst r9, 4 bld r20, 7 bst r13, 6 bld r20, 6 bst r15, 2 bld r20, 5 bst r15, 5 bld r20, 4 bst r11, 2 bld r20, 3 bst r13, 0 bld r20, 2 bst r10, 0 bld r20, 1 bst r12, 7 bld r20, 0 bst r12, 6 bld r21, 7 bst r14, 0 bld r21, 6 bst r15, 3 bld r21, 5 bst r12, 4 bld r21, 4 bst r9, 7 bld r21, 3 bst r11, 7 bld r21, 2 bst r9, 3 bld r21, 1 bst r12, 1 bld r21, 0 bst r15, 6 bld r22, 7 bst r9, 2 bld r22, 6 bst r13, 1 bld r22, 5 bst r11, 0 bld r22, 4 bst r13, 7 bld r22, 3 bst r14, 1 bld r22, 2 bst r13, 2 bld r22, 1 bst r12, 0 bld r22, 0 bst r8, 0 bld r23, 7 bst r5, 7 bld r23, 6 bst r5, 6 bld r23, 5 bst r5, 5 bld r23, 4 bst r5, 4 bld r23, 3 bst r5, 3 bld r23, 2 bst r5, 4 bld r23, 1 bst r5, 3 bld r23, 0 eor r17, r23 bst r5, 2 bld r23, 7 bst r5, 1 bld r23, 6 bst r5, 0 bld r23, 5 bst r6, 7 bld r23, 4 bst r5, 0 bld r23, 3 bst r6, 7 bld r23, 2 bst r6, 6 bld r23, 1 bst r6, 5 bld r23, 0 eor r18, r23 bst r6, 4 bld r23, 7 bst r6, 3 bld r23, 6 bst r6, 4 bld r23, 5 bst r6, 3 bld r23, 4 bst r6, 2 bld r23, 3 bst r6, 1 bld r23, 2 bst r6, 0 bld r23, 1 bst r7, 7 bld r23, 0 eor r19, r23 bst r6, 0 bld r23, 7 bst r7, 7 bld r23, 6 bst r7, 6 bld r23, 5 bst r7, 5 bld r23, 4 bst r7, 4 bld r23, 3 bst r7, 3 bld r23, 2 bst r7, 4 bld r23, 1 bst r7, 3 bld r23, 0 eor r20, r23 bst r7, 2 bld r23, 7 bst r7, 1 bld r23, 6 bst r7, 0 bld r23, 5 bst r8, 7 bld r23, 4 bst r7, 0 bld r23, 3 bst r8, 7 bld r23, 2 bst r8, 6 bld r23, 1 bst r8, 5 bld r23, 0 eor r21, r23 bst r8, 4 bld r23, 7 bst r8, 3 bld r23, 6 bst r8, 4 bld r23, 5 bst r8, 3 bld r23, 4 bst r8, 2 bld r23, 3 bst r8, 1 bld r23, 2 bst r8, 0 bld r23, 1 bst r5, 7 bld r23, 0 eor r22, r23 clr r24 clr r25 clr XL clr XH mov r23, r17 lsr r23 lsr r23 lsr r23 mov ZL, r23 clr ZH subi ZL, 0xF8 sbci ZH, 0xA7 lpm sbrs r17, 2 swap r0 mov r23, r0 andi r23, 0xF0 or r24, r23 mov r23, r18 lsr r17 ror r23 lsr r17 ror r23 lsr r23 lsr r23 lsr r23 mov ZL, r23 clr ZH subi ZL, -0x28 sbci ZH, 0xA7 lpm sbrc r18, 4 swap r0 mov r23, r0 andi r23, 0xF or r24, r23 mov r23, r19 lsl r23 rol r18 andi r18, 0x1F mov ZL, r18 clr ZH subi ZL, -0x48 sbci ZH, 0xA7 lpm sbrs r19, 6 swap r0 mov r23, r0 andi r23, 0xF0 or r25, r23 mov r23, r19 lsr r23 andi r23, 0x1F mov ZL, r23 clr ZH subi ZL, -0x68 sbci ZH, 0xA7 lpm sbrc r19, 0 swap r0 mov r23, r0 andi r23, 0xF or r25, r23 mov r23, r20 lsr r23 lsr r23 lsr r23 mov ZL, r23 clr ZH subi ZL, 0x78 ; 'x' sbci ZH, 0xA7 ; 'º' lpm sbrs r20, 2 swap r0 mov r23, r0 andi r23, 0xF0 or XL, r23 mov r23, r21 lsr r20 ror r23 lsr r20 ror r23 lsr r23 lsr r23 lsr r23 mov ZL, r23 clr ZH subi ZL, 0x58 ; 'X' sbci ZH, 0xA7 ; 'º' lpm sbrc r21, 4 swap r0 mov r23, r0 andi r23, 0xF or XL, r23 mov r23, r22 lsl r23 rol r21 andi r21, 0x1F mov ZL, r21 clr ZH subi ZL, 0x38 ; '8' sbci ZH, 0xA7 ; 'º' lpm sbrs r22, 6 swap r0 mov r23, r0 andi r23, 0xF0 or XH, r23 mov r23, r22 lsr r23 andi r23, 0x1F mov ZL, r23 clr ZH subi ZL, 0x18 sbci ZH, 0xA7 ; 'º' lpm sbrc r22, 0 swap r0 mov r23, r0 andi r23, 0xF or XH, r23 bst r25, 0 bld r17, 7 bst r24, 1 bld r17, 6 bst XL, 4 bld r17, 5 bst XL, 3 bld r17, 4 bst XH, 3 bld r17, 3 bst r25, 4 bld r17, 2 bst XH, 4 bld r17, 1 bst XL, 7 bld r17, 0 bst r24, 7 bld r18, 7 bst r25, 1 bld r18, 6 bst XL, 1 bld r18, 5 bst XH, 6 bld r18, 4 bst r24, 3 bld r18, 3 bst XL, 6 bld r18, 2 bst XH, 1 bld r18, 1 bst r25, 6 bld r18, 0 bst r24, 6 bld r19, 7 bst r24, 0 bld r19, 6 bst XL, 0 bld r19, 5 bst r25, 2 bld r19, 4 bst XH, 0 bld r19, 3 bst XH, 5 bld r19, 2 bst r24, 5 bld r19, 1 bst r25, 7 bld r19, 0 bst XL, 5 bld r20, 7 bst r25, 3 bld r20, 6 bst XH, 2 bld r20, 5 bst r24, 2 bld r20, 4 bst XL, 2 bld r20, 3 bst r25, 5 bld r20, 2 bst r24, 4 bld r20, 1 bst XH, 7 bld r20, 0 eor r17, r1 eor r18, r2 eor r19, r3 eor r20, r4 mov r1, r5 mov r2, r6 mov r3, r7 mov r4, r8 mov r5, r17 mov r6, r18 mov r7, r19 mov r8, r20 dec YH breq loc_2F1A rjmp loc_2D59 ; --------------------------------------------------------------------------- loc_2F1A: mov r21, r1 mov r22, r2 mov r23, r3 mov r24, r4 mov r17, r5 mov r18, r6 mov r19, r7 mov r20, r8 clr XH ldi XL, 1 ldi r25, 7 loc_2F25: lsr r21 rol r0 lsr r17 rol r0 lsr r22 rol r0 lsr r18 rol r0 lsr r23 rol r0 lsr r19 rol r0 lsr r24 rol r0 lsr r20 rol r0 st X+, r0 dec r25 brpl loc_2F25 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2F39 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2F39: call sub_39E9_6 ldi r24, 0 ldi r25, 4 rcall POINT_ramZ_0480 ldd r16, Z+1 cpi r16, 0x3C ldi r16, 0x27 mov r4, r16 ldi r16, 0x90 mov r5, r16 rcall Point_ramZ_to_0437 ldd r16, Z+6 ldi r17, 0 ldi r20, 0x75 ldi r21, 0 brne loc_2F4D rcall sub_2FA8 ldi r16, 0x52 rjmp loc_2F4F ; --------------------------------------------------------------------------- loc_2F4D: rcall sub_2FA8 ldi r16, 0x32 loc_2F4F: add r4, r16 ldi r16, 0 adc r5, r16 ldi ZL, 0 ldi ZH, 4 ldd r16, Z+1 andi r16, 7 ldi r17, 0 lsl r16 rol r17 add r4, r16 adc r5, r17 mov ZL, r4 mov ZH, r5 rcall Store_Z+1_Z_to_r17r16 ldd r4, Z+0x10 ldd r5, Z+0x11 ldi r18, 0x5A call LoadModulus cpi r16, 0xFF brne loc_2F69 loc_2F65: call CryptoReset ldi r16, 0 rjmp loc_2F94 ; --------------------------------------------------------------------------- loc_2F69: ldi r19, 6 rcall Point_r21r20_to_r5r4 ldi r18, 0x5A rcall POINT_ramZ_0480 ldd r16, Z+4 mov ZL, r16 ldi ZH, 0 subi ZL, 0x5A sbci ZH, 0 ldi r16, 0 ldi r17, 4 rcall sub_2FBD call ModExp cpi r16, 0xFF breq loc_2F65 rcall POINT_ramZ_0480 ldd r16, Z+4 ldi r17, 0 subi r16, 0x10 sbci r17, 0 lds r18, ram_03D9 cp r16, r18 sbci r17, 0 brlt loc_2F65 ldi r20, 0x5A ldi r21, 0 ldi r18, 0x80 ldi r19, 3 adiw r24, 2 rcall Point_r17r16_to_r25r24 rcall Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20_and_POINT_ramZ_0480 ldd r16, Z+4 subi r16, 0xB lds r17, ram_03D9 sub r16, r17 sts ram_048B, r16 call CryptoReset ldi r16, 1 loc_2F94: ldi ZL, 6 jmp loc_3A04 ;//---------------------------------------------------------------------- ;// Subroutine: Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20_and_POINT_ramZ_0480 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20_and_POINT_ramZ_0480: call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 ldi ZL, 0x80 ldi ZH, 4 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2F9C ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: Point_ZHZL_to_r17r16 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2F9C: rcall Point_ZHZL_to_r17r16 sub_2F9D: ld r21, Z Point_ramZ_to_0437: ldi ZL, 0x37 ldi ZH, 4 ;Point ZH:ZL to 0x0437 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2FA1 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: sub_39D3 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2FA1: lds r16, ram_04A3 sub_2FA3: ldi r17, 0 ldi r20, 0x75 ldi r21, 0 jmp sub_39D3 ;//---------------------------------------------------------------------- ;// Subroutine: sub_2FA8 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: sub_39D3 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2FA8: call sub_39D3 add r4, r16 adc r5, r17 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2FAD ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2FAD: ldi r18, 0x90 ldi r19, 2 ZHZL_04A4_and_Store_Z+1_Z_to_r17r16: ldi ZL, 0xA4 ldi ZH, 4 ;Point ZH:ZL to 0x04A4 Store_Z+1_Z_to_r17r16: ld r16, Z ldd r17, Z+1 ret ;//---------------------------------------------------------------------- ;// Subroutine: Point_r17r16_to_r25r24 ;//---------------------------------------------------------------------- ;// Input Parameters: r24,r25 ;// Output Parameters: r16,r17 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- Point_r17r16_to_r25r24: mov r16, r24 mov r17, r25 ret ;//---------------------------------------------------------------------- ;// Subroutine: Point_r21r20_to_r5r4 ;//---------------------------------------------------------------------- ;// Input Parameters: r4,r5 ;// Output Parameters: r20,r21 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- Point_r21r20_to_r5r4: mov r20, r4 mov r21, r5 ret ;//---------------------------------------------------------------------- ;// Subroutine: Point_ZHZL_to_r17r16 ;//---------------------------------------------------------------------- ;// Input Parameters: r16,r17 ;// Output Parameters: ZH:ZL ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- Point_ZHZL_to_r17r16: mov ZL, r16 mov ZH, r17 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2FBD ;//---------------------------------------------------------------------- ;// Input Parameters: ZH:ZL, r16, r17 ;// Output Parameters: r16, r17 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2FBD: add r16, ZL adc r17, ZH ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2FC0 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2FC0: mov r19, XH mov r0, XL andi r17, 0xF or r17, r16 ldi ZL, 0xA4 ldi ZH, 4 ldi r20, 0xF6 ldi r21, 0x92 rjmp loc_2FCC ; --------------------------------------------------------------------------- loc_2FC9: mov r21, r23 subi r20, 0xF4 sbci r21, 0xFF loc_2FCC: st Z, r20 std Z+1, r21 mov r22, r20 mov r23, r21 ldi r21, 0x94 cpi r22, 0xFA cpc r23, r21 brcc loc_2FEB rcall sub_2FEF cp r16, r17 brne loc_2FC9 rcall sub_2FEF andi r16, 0xF0 cpi r16, 0xE0 brne loc_2FE2 mov XL, r20 mov XH, r23 ld r16, X cp r16, r18 brne loc_2FE2 loc_2FE0: ldi r16, 1 rjmp loc_2FEC ; --------------------------------------------------------------------------- loc_2FE2: cpi r18, 0xFF breq loc_2FE0 mov XL, r22 mov XH, r23 ld r16, X andi r16, 0xF cp r16, r18 brne loc_2FC9 rjmp loc_2FE0 ; --------------------------------------------------------------------------- loc_2FEB: ldi r16, 0 loc_2FEC: mov XL, r0 mov XH, r19 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2FEF ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2FEF: mov XL, r20 mov XH, r23 adiw XL, 0xB ld r16, X ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_2FF4 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_2FF4: rcall POINT_ramZ_0480 rcall sub_3019 ldi r16, 0x80 rcall sub_2FC0 tst r16 brne loc_2FFC sub_2FF4_end: ldi r16, 0 ret ; --------------------------------------------------------------------------- loc_2FFC: rcall ZHZL_04A4_and_Store_Z+1_Z_to_r17r16 subi r16, 0xFF sbci r17, 0xFF rcall Store_r16r17_to_Z_Z+1 rcall r20_8_r21_0 mov r18, r16 mov r19, r17 ldi r16, 0x8D ldi r17, 4 rcall Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20_and_POINT_ramZ_0480 ldd r16, Z+3 sbrc r16, 4 rjmp loc_300E rcall sub_3019 ldi r16, 0xC0 rcall sub_2FC0 tst r16 breq sub_2FF4_end loc_300E: rcall r20_8_r21_0 ldi ZL, 0xA4 ldi ZH, 4 ;Point ZH:ZL to 0x04A4 ld r18, Z ldd r19, Z+1 ldi r16, -0x6B ldi r17, 4 call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 ldi r16, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3019 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3019: ldd r18, Z+3 andi r18, 0xF ldd r17, Z+2 ret ;//---------------------------------------------------------------------- ;// Subroutine: Store_r16r17_to_Z_Z+1 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- Store_r16r17_to_Z_Z+1: st Z, r16 std Z+1, r17 ret ;//---------------------------------------------------------------------- ;// Subroutine: r20_8_r21_0 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: r20,r21 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- r20_8_r21_0: ldi r20, 8 ldi r21, 0 ret ;//---------------------------------------------------------------------- ;// Subroutine: r19r18_r25r24_r17r16_048D_decrypt_seca ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: decrypt_seca ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- r19r18_r25r24_r17r16_048D_decrypt_seca: mov r18, r24 mov r19, r25 r17r16_048D_decrypt_seca: ldi r16, 0x8D ldi r17, 4 ;Point Key BUFFER to 0x048D rjmp decrypt_seca ;//---------------------------------------------------------------------- ;// Subroutine: sub_3028 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3028: call sub_39E9_1 rcall POINT_r25r24_to_r17r16 mov r8, r18 rcall sub_2FA1 rcall sub_308F subi ZL, 0x67 sbci ZH, 0x6F ld r7, Z ldi r16, 8 mov r6, r16 mov r16, r18 andi r16, 7 sub r6, r16 ldi r16, 7 and r6, r16 breq loc_3040 mov r19, r6 ldi r18, 0 rcall Point_r17r16_to_r25r24 add r16, r8 adc r17, r18 call sub_3953 loc_3040: mov ZL, r8 ldi ZH, 0 sbiw ZL, 8 mov XL, r24 mov XH, r25 add XL, ZL adc XH, ZH rcall sub_3090 mov r18, r8 subi r18, 8 rcall Point_r17r16_to_r25r24 rcall sub_3097 clr r10 rjmp loc_305C ; --------------------------------------------------------------------------- loc_304E: mov XL, r24 mov XH, r25 add XL, r10 adc XH, r11 rcall sub_3090 ldi r18, 8 mov ZL, r10 ldi ZH, 0 adiw ZL, 8 rcall Point_r17r16_to_r25r24 rcall sub_2FBD rcall sub_3097 ldi r16, 8 add r10, r16 loc_305C: clr r11 mov ZL, r8 ldi ZH, 0 sbiw ZL, 0x10 cp r10, ZL cpc r11, ZH brlt loc_304E mov XL, r6 ldi XH, 0 add XL, r8 adc XH, r11 rcall r20_8_r21_0 mov ZL, XL mov ZH, XH sbiw ZL, 8 rcall POINT_r19r18_to_r25r24 add r18, ZL adc r19, ZH ldi r16, 0x90 ldi r17, 2 call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 ;// decipher 0x0290 and take as key Buffer (0x048D) ;// r19:r18 = 0x0290 // r17:r16 = 0x048D (Key BUFFER) // decrypt seca ;// save the result into 0x0290 ldi r18, 0x90 ldi r19, 2 ;Point r19:r18 to 0x0290 rcall r17r16_048D_decrypt_seca ;Point Key BUFFER to 0x048D mov r19, r7 ldi r18, 8 ldi r16, 0x90 ldi r17, 2 ;Point r17:r16 to 0x0290 (deciphered buffer) call sub_35A6 mov r4, r16 mov r5, r17 sbiw XL, 0x10 add r24, XL adc r25, XH rcall r19r18_r25r24_r17r16_048D_decrypt_seca ;Point Key BUFFER to 0x048D mov r21, r7 ldi r20, 8 mov r18, r4 mov r19, r5 rcall Point_r17r16_to_r25r24 call sub_35C2 ldi r16, 1 ldi ZL, 0xC jmp loc_39FE ;//---------------------------------------------------------------------- ;// Subroutine: sub_308C ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: Point_ramZ_0100, Point_ZHZL_to_r17r16 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_308C: ldd r18, Z+4 sub_308C_1: rcall Point_ramZ_0100 std Z+2, r18 sub_308F: rjmp Point_ZHZL_to_r17r16 ;//---------------------------------------------------------------------- ;// Subroutine: sub_3090 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: decrypt_seca ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3090: mov r18, XL mov r19, XH ldi r16, 0x8D ldi r17, 4 rcall decrypt_seca ;Point Key BUFFER to 0x048D mov r19, r7 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3097 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: sub_35A6, sub_35C2 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3097: call sub_35A6 mov r21, r7 ldi r20, 8 mov r18, r16 mov r19, r17 mov r16, XL mov r17, XH jmp sub_35C2 ;//---------------------------------------------------------------------- ;// Subroutine: POINT_r25r24_to_r17r16 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- POINT_r25r24_to_r17r16: mov r24, r16 mov r25, r17 ret ;//---------------------------------------------------------------------- ;// Subroutine: POINT_r19r18_to_r25r24 ;//---------------------------------------------------------------------- ;// Input Parameters: r24,r25 ;// Output Parameters: r18,r19 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- POINT_r19r18_to_r25r24: mov r18, r24 mov r19, r25 ret ;//---------------------------------------------------------------------- ;// Subroutine: Point_ramZ_0100 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: ZH:ZL ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- Point_ramZ_0100: ldi ZL, 0 ldi ZH, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_30AA ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_30AA: mov r3, r25 mov r1, r24 mov r20, r16 mov r21, r17 ser r18 ;Set Register r18 = $FF ldi r17, 4 loc_30B0: ldi r16, 0 loc_30B1: mov r19, r16 andi r19, 3 brne loc_30B5 inc r18 loc_30B5: rcall POINT_ramZ_049F ld r22, Z ldd r23, Z+1 mov r24, r16 subi r24, 1 andi r24, 0xF ldi r25, 0 rcall sub_30DD ld r0, Z mov r24, r16 inc r24 andi r24, 0xF rcall sub_30DD ld r2, Z eor r2, r0 mov r0, r18 eor r0, r2 add r22, r0 adc r23, r25 mov ZL, r22 mov ZH, r23 ld r19, Z mov ZL, r20 mov ZH, r21 add ZL, r16 adc ZH, r25 ld r22, Z eor r22, r19 st Z, r22 inc r16 cpi r16, 0x10 brcs loc_30B1 dec r17 brne loc_30B0 mov r24, r1 mov r25, r3 ret ;//---------------------------------------------------------------------- ;// Subroutine: POINT_ramZ_049F ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: ZH:ZL ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- POINT_ramZ_049F: ldi ZL, 0x9F ldi ZH, 4 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_30DD ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_30DD: mov ZL, r20 mov ZH, r21 add ZL, r24 adc ZH, r25 ret ;//---------------------------------------------------------------------- ;// Subroutine: decrypt_seca ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- decrypt_seca: call sub_39E9_2 rcall POINT_r25r24_to_r17r16 mov r8, r18 mov r9, r19 ldi r16, 0xF mov r5, r16 mov r16, r24 rcall sub_30AA ldi r16, 4 mov r10, r16 loc_30ED: ldi r16, 0xC mov r4, r16 loc_30EF: ldi r17, 0 mov r6, r24 mov r7, r25 add r6, r4 adc r7, r17 mov r18, r8 mov r19, r9 rcall store_r7r6_to_r17r16 call sub_35E4 rcall sub_3199 mov ZL, r4 ldi ZH, 0 adiw ZL, 3 rcall POINT_r19r18_to_r25r24 add r18, ZL adc r19, ZH mov ZL, r4 ldi ZH, 0 adiw ZL, 2 rcall Point_r17r16_to_r25r24 rcall sub_2FBD rcall sub_319F rcall sub_2F9D ldd r22, Z+2 ldd r23, Z+3 mov r20, r4 subi r20, 0xFC ; '³' rcall sub_31A3 ld r20, Z rcall sub_308F ld r0, Z eor r0, r20 rcall sub_3190 rcall sub_31AA rcall POINT_ramZ_049F rcall sub_31B3 subi r22, 0xFC ; '³' andi r22, 0xF ldi r23, 0 rcall POINT_ramZ_to_r25r24(2) rcall sub_31B0 ld r21, Z mov r22, r4 rcall sub_31AD rcall sub_31B0 ld r22, Z eor r22, r21 eor r22, r5 ldi r23, 0 mov ZL, r0 mov ZH, r1 rcall sub_31B0 ld r21, Z rcall sub_319F ld r18, Z eor r18, r21 st Z, r18 rcall sub_3180 rcall sub_2F9C rcall sub_319D ld r0, Z eor r0, r20 eor r0, r5 clr r1 rcall sub_3191 ld r22, Z eor r22, r21 mov r21, r22 rcall POINT_ramZ_049F rcall sub_31B3 ldi r23, 0 subi r22, 0xFF rcall sub_31AE rcall sub_31B0 ld r22, Z eor r22, r20 eor r22, r5 ldi r23, 0 add r0, r22 adc r1, r23 mov ZL, r0 mov ZH, r1 ld r20, Z rcall sub_308F ld r16, Z eor r16, r20 st Z, r16 rcall POINT_ramZ_049F rcall Store_Z+1_Z_to_r17r16 rcall POINT_ramZ_to_r25r24(2) add ZL, r4 rcall sub_31A9 eor r20, r5 add r16, r20 adc r17, r23 rcall sub_308F ld r16, Z rcall sub_319F ld r17, Z eor r17, r16 st Z, r17 rcall Point_ramZ_to_0437 ldd r16, Z+2 ldd r17, Z+3 mov r18, r4 ldi r19, 0 subi r18, 0xFF sbci r19, 0xFF rcall POINT_ramZ_to_r25r24(2) add ZL, r18 adc ZH, r19 ld r20, Z mov r18, r4 dec r18 andi r18, 0xF rcall POINT_ramZ_to_r25r24(2) add ZL, r18 adc ZH, r23 ld r18, Z eor r18, r20 eor r18, r5 add r16, r18 adc r17, r23 rcall sub_308F ld r16, Z mov ZL, r6 mov ZH, r7 ld r17, Z eor r17, r16 st Z, r17 dec r5 ldi r16, 0xFC add r4, r16 ldi r16, 0xD cp r4, r16 brcc loc_3179 rjmp loc_30EF ; --------------------------------------------------------------------------- loc_3179: dec r10 breq loc_317C rjmp loc_30ED ; --------------------------------------------------------------------------- loc_317C: rcall sub_3199 ldi ZL, 0xB jmp loc_39FF ;//---------------------------------------------------------------------- ;// Subroutine: sub_3180 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3180: mov ZL, r4 ldi ZH, 0 adiw ZL, 1 mov r18, r24 mov r19, r25 add r18, ZL adc r19, ZH ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3188 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3188: sbci r19, 0xFF rcall POINT_ramZ_to_r25r24 add ZL, r18 adc ZH, r19 sub_318C: ld r18, Z eor r18, r20 st Z, r18 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3190 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3190: eor r0, r5 sub_3191: add r22, r0 adc r23, r1 mov ZL, r22 mov ZH, r23 ret ;//---------------------------------------------------------------------- ;// Subroutine: store_r7r6_to_r17r16 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- store_r7r6_to_r17r16: mov r16, r6 mov r17, r7 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3199: mov r16, r8 mov r17, r9 jmp sub_359C ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_319D: ldd r22, Z+2 ldd r23, Z+3 sub_319F: mov ZL, r18 mov ZH, r19 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_31A2: dec r20 sub_31A3: andi r20, 0xF clr r1 rcall POINT_ramZ_to_r25r24 add ZL, r20 adc ZH, r1 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_31A9: adc ZH, r23 sub_31AA: ld r20, Z eor r20, r21 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_31AD ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: POINT_ramZ_to_r25r24 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_31AD: subi r22, 0xFE sub_31AE: sbci r23, 0xFF POINT_ramZ_to_r25r24(2): rjmp POINT_ramZ_to_r25r24 ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_31B0: add ZL, r22 adc ZH, r23 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_31B3: ld r0, Z ldd r1, Z+1 mov r22, r4 ret ;//---------------------------------------------------------------------- ;// Subroutine: POINT_ramZ_to_r25r24 ;//---------------------------------------------------------------------- ;// Input Parameters: r25:r24 ;// Output Parameters: ZH:ZL ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- POINT_ramZ_to_r25r24: mov ZL, r24 mov ZH, r25 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_31BA ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_31BA: st -Y, XH st -Y, XL ldi XL, 0x9A ldi XH, 0x90 ;Point EEPROM to 0x909A (SHA1-mod) rcall sub_2FA1 add XL, r16 adc XH, r17 adiw XL, 1 ld r23, X ;SHA-1 Byte PAD ld r22, -X ;SHA-1 Byte END lds r20, ram_048B ldi r21, 0 subi r20, 0xFD sbci r21, 0xFF ldi r18, 0 ldi r19, 4 ;r19:r18 = 0x0400 ldi r16, 0x68 ldi r17, 4 ;r17:r16 = 0x0468 call SHA-1 ldi r18, 0 ldi r19, 4 ;r19:r18 = 0x0400 rcall sub_31E5 add r18, r16 adc r19, r17 rcall r17r16_048D_decrypt_seca ;Point Key BUFFER to 0x048D ldi r22, 8 ldi r20, 0 ldi r21, 4 rcall sub_31E5 add r20, r16 adc r21, r17 ldi r18, 0x68 ldi r19, 4 ;r19:r18 = 0x0468 ldi r16, 0x70 ldi r17, 4 ;r17:r16 = 0x0470 call StoreBYTES_len_r22_X_xor_Y_to_Z ;point ram Z to r17:r16 ;point ram X to r19:r18 ;point ram Y to r21:r20 ;LEN = r22 ;store Z = (X XOR Y) ldi r16, 1 ld XL, Y+ ld XH, Y+ ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_31E5 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: r17:r16 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_31E5: lds r16, ram_048B ldi r17, 0 subi r16, 0xFD sbci r17, 0xFF ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_31EB ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_31EB: call sub_39E9_7 ldi XL, -0x63 ldi XH, 4 lds r16, ram_0482 andi r16, 0xF rcall Point_ramZ_to_0437 std Z+6, r16 lds r24, ram_0483 swap r24 andi r24, 0xF lsr r24 andi r24, 3 rcall sub_2FA3 ldi r18, 0x27 ; ''' ldi r19, 0x90 ; 'É' add r18, r16 adc r19, r17 ldi r25, 0 lsl r24 rol r25 rcall sub_319F add ZL, r24 adc ZH, r25 ldd r16, Z+0x22 ldd r17, Z+0x23 adiw XL, 2 st X+, r16 st X, r17 sbiw XL, 3 ldd r16, Z+0x2A ldd r17, Z+0x2B mov ZL, XL mov ZH, XH std Z+4, r16 std Z+5, r17 subi r18, -0x72 sbci r19, 0xFF rcall sub_319F ld r16, Z sbrs r16, 0 rjmp loc_321A ldi r16, 0 ldi r17, 0x70 rjmp loc_321C ; --------------------------------------------------------------------------- loc_321A: ldi r16, 0 ldi r17, 0x20 loc_321C: st X+, r16 st X, r17 ldi ZL, 4 jmp loc_3A06 ;//---------------------------------------------------------------------- ;// Subroutine: sub_3221 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3221: call sub_39E9_1 rcall POINT_r25r24_to_r17r16 mov r11, r18 ldi r16, 0 ldi ZL, -0x7B ldi ZH, 4 st Z, r16 rcall sub_32B5 st Z, r16 std Z+1, r16 ldi ZL, 0x89 ; 'ë' ldi ZH, 4 st Z, r16 std Z+1, r16 clr r10 rjmp loc_327C ; --------------------------------------------------------------------------- loc_3232: mov r16, r4 bst r16, 0 clr r4 bld r4, 6 mov ZL, r10 ldi ZH, 0 adiw ZL, 1 mov r8, r24 mov r9, r25 add r8, ZL adc r9, ZH mov r18, r8 mov r19, r9 rcall r17r16_048D_decrypt_seca ;Point Key BUFFER to 0x048D ldi r17, 0 mov r6, r24 mov r7, r25 add r6, r10 adc r7, r17 mov ZL, r6 mov ZH, r7 ld r18, Z andi r18, 0xF lds r17, ram_0482 mov r16, r4 ori r16, 0x80 rcall sub_2FC0 tst r16 brne loc_3254 ser r18 ;Set Register r18 = $FF ldi r17, 0xF ldi r16, 0xF0 rcall sub_2FC0 loc_3254: tst r16 breq loc_327B ldi XL, 0x90 ; 'É' ldi XH, 2 mov ZL, r6 mov ZH, r7 ld r16, Z st X, r16 rcall r20_8_r21_0 mov r18, r8 mov r19, r9 ldi r16, 0x90 ldi r17, 2 subi r16, 0xFF sbci r17, 0xFF call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 ldi r16, 0 ldi ZL, 0x90 ; 'É' ldi ZH, 2 std Z+9, r16 std Z+0xA, r16 lds r16, ram_0482 andi r16, 0xF or r16, r4 ori r16, 0x80 std Z+0xB, r16 ldi r20, 0xC rcall sub_2FAD call sub_3943 tst r16 breq loc_327B ldi r20, 0xC ldi r21, 0 rcall sub_2FAD call bEepromCopy loc_327B: add r10, r5 loc_327C: cp r10, r11 brcc loc_32AC ldi r17, 0 rcall POINT_ramZ_to_r25r24(2) add ZL, r10 adc ZH, r17 ld r4, Z inc r10 mov r5, r4 swap r5 ldi r16, 0xF and r5, r16 ldi r16, 0xD cp r5, r16 brcs loc_3290 lsl r5 lsl r5 lsl r5 ldi r16, -0x58 ; '¿' add r5, r16 loc_3290: mov r16, r4 subi r16, 0x90 ; 'É' brne loc_3294 rjmp loc_3232 ; --------------------------------------------------------------------------- loc_3294: dec r16 brne loc_3297 rjmp loc_3232 ; --------------------------------------------------------------------------- loc_3297: subi r16, 0x40 breq loc_32A8 subi r16, 0x3E breq loc_329E subi r16, 0x42 breq loc_32A5 rjmp loc_327B ; --------------------------------------------------------------------------- loc_329E: ldi ZL, 0x89 ldi ZH, 4 ;ZH:ZL = 0x0489 rcall Store_Z+1_Z_to_r17r16 subi r16, 0xFF sbci r17, 0xFF loc_32A3: rcall Store_r16r17_to_Z_Z+1 rjmp loc_327B ; --------------------------------------------------------------------------- loc_32A5: rcall sub_32AF rcall POINT_ramZ_0487 ;ZH:ZL = 0x0487 rjmp loc_32A3 ; --------------------------------------------------------------------------- loc_32A8: rcall sub_32AF ldi ZL, 0x85 ldi ZH, 4 ;ZH:ZL = 0x0485 rjmp loc_32A3 ; --------------------------------------------------------------------------- loc_32AC: ldi ZL, 0xC jmp loc_39FE ;//---------------------------------------------------------------------- ;// Subroutine: sub_32AF ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_32AF: mov ZL, r10 ldi ZH, 0 sbiw ZL, 1 mov r16, r24 mov r17, r25 rjmp sub_2FBD ;//---------------------------------------------------------------------- ;// Subroutine: sub_32B5 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_32B5: std Z+1, r16 POINT_ramZ_0487: ldi ZL, 0x87 ldi ZH, 4 ;ZH:ZL = 0x0487 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_32B9 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_32B9: call sub_39E9_6 rcall POINT_r25r24_to_r17r16 mov XL, r18 mov XH, r19 ;Point XH:XL to r19:r18 mov r4, r20 mov r5, r21 andi r25, 0x3F rcall sub_2FA1 rcall sub_308F subi ZL, 0xD9 sbci ZH, 0x6F ldd r16, Z+1 andi r16, 0xF0 cpi r16, 0x70 brne loc_32F4 cpi r25, 0x20 brcs loc_32D3 rcall Point_r21r20_to_r5r4 ldi r18, 0 ldi r19, -0x30 loc_32CE: ldi r17, 0x1F and r17, r25 add r18, r24 adc r19, r17 rjmp loc_32F3 ; --------------------------------------------------------------------------- loc_32D3: mov r18, r4 mov r19, r5 add r18, r24 adc r19, r25 cpi r19, 0x20 brcc loc_32DD rcall Point_r21r20_to_r5r4 ldi r18, 0 ldi r19, 0x70 rjmp loc_32CE ; --------------------------------------------------------------------------- loc_32DD: ; CODE XREF: sub_32B9+1Fj andi r25, 0x1F ldi r20, 0 ldi r21, 0x20 ; ' ' sub r20, r24 sbc r21, r25 ldi r18, 0 ldi r19, 0x70 add r18, r24 adc r19, r25 rcall sub_32F7 rcall Point_r21r20_to_r25r24 add r20, r4 adc r21, r5 subi r21, 0x20 ldi r18, 0 ldi r19, 0xD0 ldi r16, 0 ldi r17, 0x20 sub r16, r24 sbc r17, r25 add XL, r16 adc XH, r17 loc_32F3: rcall sub_32F7 loc_32F4: ldi ZL, 6 jmp loc_3A04 ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_32F7: mov r16, XL mov r17, XH jmp Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 ;//---------------------------------------------------------------------- ;// Subroutine: Point_r21r20_to_r25r24 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- Point_r21r20_to_r25r24: mov r20, r24 mov r21, r25 ret ;//---------------------------------------------------------------------- ;// Subroutine: Process_Nano_0F ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- Process_Nano_0F: call sub_39E9_3 rcall POINT_r25r24_to_r17r16 ;Point r25:r24 to 0x045F (OUTPUT MD-2 (0x20h bytes)) rjmp Process_Nano_0F_1 ; --------------------------------------------------------------------------- Process_Nano_0F_2: ;// Copy 0x10 bytes from 0x045F (HASH_DW) to 0x0120 (buffer_A) ;// 0x0120 buffer_A :// 0x045F HASH_DW (0x10h bytes) ldi r20, 0x10 ;LEN 0x10h bytes (16) ? ldi r21, 0 rcall POINT_r19r18_to_r25r24 ;Point r19:r18 to 0x045F (OUTPUT MD-2 (0x20h bytes)) ldi r16, 0x20 ldi r17, 1 ;r17:r16 = 0x0120 call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 :// swap first 4 bytes with last 4 bytes of first octet (buffer_A and HASH_DW) ldi r16, 0x20 ldi r17, 1 ;Point r17:r16 to 0x0120 (HASH_DW) call sub_359C rcall Point_r17r16_to_r25r24 call sub_359C ;// r19:r18 = r25:r24 (INPUT) // r17:r16 = 0x048D (OUTPUT) ;// get first 8 bytes of HASH_DW and decrypt with the key who signed ECM ;// but always with 9x table (independent from hash table used from P2) rcall r19r18_r25r24_r17r16_048D_decrypt_seca ;Point Key BUFFER to 0x048D :// rcall POINT_ramZ_to_r25r24(2) ;Point ZH:ZL to 0x045F (HASH_DW) ld r17, Z ldd r8, Z+1 mov r9, r17 ;store first 2 bytes in r9, r8 ldi XL, 0 ldi XH, 1 ;XH:XL = 0x0100 rcall r21r20_0008_r19r18_0100 mov r16, r8 rcall sub_32B9 rcall r19r18_0140_r21_0_r20_8 rcall sub_33D0 ;// (C) XOR first 8 bytes of Buffer_B with first 8 bytes of Buffer_C ;// then we'll save result into Buffer_D (0x0110) ldi r22, 8 ;LEN ldi r20, 0x40 ldi r21, 1 ;Point ram Y to 0x0140 rcall r19r18_0100 ;Point ram X to 0x0100 ldi r16, 0x10 ldi r17, 1 ;Point ram Z to 0x0110 call StoreBYTES_len_r22_X_xor_Y_to_Z ;point ram Z to r17:r16 ;point ram X to r19:r18 ;point ram Y to r21:r20 ;LEN = r22 ;store Z = (X XOR Y) ;// (D) take first and eighth byte of Buffer_D and we'll copy them into first 2 bytes of Buffer_C rcall POINT_ramZ_0110 ld r16, Z ldi ZL, 0x40 ldi ZH, 1 ;Point ZH:ZL to 0x0140 st Z, r16 rcall POINT_ramZ_0110 ldd r16, Z+7 ldi ZL, 0x40 ldi ZH, 1 ;Point ZH:ZL to 0x0140 rcall sub_33CA ;take eighth byte of Buffer_D and copy them ;into second byte of Buffer_C ;// (E) XOR 7th and 8th byte of Hash_DW with 1st and 2nd byte of Buffer_C and ;// save into first 2 bytes of Buffer_B ;r22 = 2 ;r21:r20 = 0x0464 rcall StoreBYTES_len_r22_X(0140)_xor_Y_to_Z(0100) ;// (F) save 8 bytes into Buffer_C, overwriting previous. ;// We get them from MT at offset calcualted with AND between first 2 bytes of Buffer_B and 0x3FFF rcall r19r18_0140_r21_0_r20_8 rcall sub_33AD ;// (G) XOR between first 8 bytes of buffer_D and 8 bytes of Buffer_C ;// We'll save into Buffer_E (0x0130) ldi r22, 8 ;LEN ldi r20, 0x10 ldi r21, 1 ;Point ram Y to 0x0110 ldi r18, 0x40 ldi r19, 1 ;Point ram X to 0x0140 ldi r16, 0x30 ldi r17, 1 ;Point ram Z to 0x0130 call StoreBYTES_len_r22_X_xor_Y_to_Z ;point ram Z to r17:r16 ;point ram X to r19:r18 ;point ram Y to r21:r20 ;LEN = r22 ;store Z = (X XOR Y) ;// (H) Do and AND between 3rd and 4th byte of Hash_DW and 3FFF rcall POINT_ramZ_to_r25r24(2) ldd r17, Z+2 ldd r8, Z+3 mov r9, r17 ;store 3rd and 4th bytes in r9, r8 ldi r20, 0x10 rcall sub_33B6 mov r16, r8 rcall sub_32B9 rcall r19r18_0110_r21r20_0010 rcall sub_33D0 ldi r22, 0x10 ldi r20, 0x10 ldi r21, 1 rcall StoreBYTES_len_r22_X(0140)_xor_Y_to_Z(0100) ld r16, X rcall POINT_ramZ_0110 st Z, r16 ldi ZL, 0 ldi ZH, 1 ;ZH:ZL = 0x0100 ldd r16, Z+0xF rcall POINT_ramZ_0110 rcall sub_33CA rcall sub_33D8 rcall r19r18_0110_r21r20_0010 ldi ZL, 0x40 ldi ZH, 1 ;ZH:ZL = 0x0140 ld r17, Z rcall sub_33B0 ldi r22, 0x10 ldi r20, 0 ldi r21, 1 rcall sub_33D8 rcall r21r20_0008_r19r18_0100 rcall POINT_ramZ_to_r25r24(2) ldd r17, Z+4 ldd r16, Z+5 rcall sub_32B9 ldi r16, 0xF mov r8, r16 ;r8 = 0x0F Process_Nano_0F_loop: ;// (O/P) take first 2 bytes of Buffer_D and we do an AND with 3FFF ;// get the octet at this offset and save these 8 bytes into (header) of buffer_B ;// copy first 2 bytes of buffer_B into first 2 of buffer_D ;// REPEAT LOOP 15 times, taking as reference always last buffer_D and last buffer_B calculated :// Of course changing offsets to get data from MT with updated results of AND rcall r21r20_0008_r19r18_0100 rcall sub_33AD dec r8 brne Process_Nano_0F_loop ;// ldi r20, 0 ldi r21, 2 ldi r18, 0 ldi r19, 2 rcall sub_33AD ldi r16, 0 ldi r17, 2 rcall POINT_ramZ_049F rcall Store_r16r17_to_Z_Z+1 ;0x049F = 0x00 // 0x04A0 = 0x02 ldi r17, 3 ldi ZL, 0xA1 ldi ZH, 4 ;ZH:ZL = 0x04A1 rcall Store_r16r17_to_Z_Z+1 ;0x04A1 = 0x00 // 0x04A2 = 0x03 ;// Copy first 8 bytes of Buffer_E (0x0130) into first 8 of Buffer_D (0x0110) rcall r20_8_r21_0 ;len 8 bytes ldi r18, 0x30 ldi r19, 1 ;Point r19:r18 to 0x0130 ldi r16, 0x10 ldi r17, 1 ;Point r17:r16 to 0x0110 call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 ;// decipher buffer_E with alternative_hash and take as key Buffer_C (0x0140) (all 16 Bytes) ;// r19:r18 = 0x0130 (buffer_E) // r17:r16 = 0x0140 (Key BUFFER) // decrypt seca ;// save the result into Buffer_E (0x0130) ldi r18, 0x30 ldi r19, 1 ;Point r19:r18 to 0x0130 rcall r17r16_0140 ;Point Key BUFFER to 0x0140 rcall decrypt_seca ;// (10) Xor 8 bytes of Buffer_E (0x0130) with first 8 of Buffer_D ;// save the result into Buffer_B (0x0100) ldi r22, 8 ;LEN ldi r20, 0x10 ldi r21, 1 ;Point ram Y to 0x0100 ldi r18, 0x30 ldi r19, 1 ;Point ram X to 0x0130 rcall StoreBYTES_len_r22_X(r19r18)_xor_Y(r21r20)_to_Z(0100) ;// (11) Decipher first 8 bytes of Buffer_B (0x0100) and the hash table indicated by P2 ;// save the result into 0x0100 (output) rcall sub_31EB rcall r19r18_0100 rcall r17r16_048D_decrypt_seca ;Point Key BUFFER to 0x048D ;// (12) Copy the result of the previous decipher (0x0100) into first 8 bytes of Buffer_C (0x0140) rcall r21r20_0008_r19r18_0100 rcall r17r16_0140 call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 ;// (13) for the first 8 bytes of buffer_B first complement it ;// and then swap nibbles rcall r20_8_r19r18_0100_r17r16_0100 call NOT_Routine rcall r20_8_r19r18_0100_r17r16_0100 call SWAP_Routine ;// (14) copy first octet of Buffer_B (0x0100) into second octet of Buffer_C (0x0147) rcall r21r20_0008_r19r18_0100 ;len 8 bytes // r19:r18 = 0x0100 rcall r17r16_0140 subi r16, 0xF8 sbci r17, 0xFF ;Point r17:r16 to 0x0147 call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 ;// (15) do a XOR between first 8 bytes of Buffer_C (0x0140) with first 8 of Buffer_A (0x0120) ;// Copy result into first 8 bytes of Hash_DW (0x045F) ldi r22, 8 ldi r20, 0x40 ldi r21, 1 ;point ram Y to 0x0140 ldi r18, 0x20 ldi r19, 1 ;point ram X to 0x0120 rcall Point_r17r16_to_r25r24 call StoreBYTES_len_r22_X_xor_Y_to_Z ;point ram Z to r17:r16 ;point ram X to r19:r18 ;point ram Y to r21:r20 ;LEN = r22 ;store Z = (X XOR Y) Process_Nano_0F_1: ;// if ECM has more 0F nanos repeat procedure from the step which ;// starts 0F nano checking (5), initialising Hash_DW with the last obtained value. ldi ZL, 0x89 ldi ZH, 4 ;Point ZH:ZL to 0x0489 rcall Store_Z+1_Z_to_r17r16 mov r18, r16 mov r19, r17 subi r18, 1 sbci r19, 0 st Z, r18 std Z+1, r19 or r16, r17 breq Process_Nano_0F_end rjmp Process_Nano_0F_2 ; --------------------------------------------------------------------------- Process_Nano_0F_end: ldi ZL, 0xA jmp loc_3A00 ;//---------------------------------------------------------------------- ;// Subroutine: sub_33AD ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: sub_32B9 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_33AD: ld r17, X ldi ZL, 0 ldi ZH, 1 ;Point ZH:ZL to 0x0100 sub_33B0: ldd r16, Z+1 rjmp sub_32B9 ;//---------------------------------------------------------------------- ;// Subroutine: r21r20_0008_r19r18_0100 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: r18,r19,r20,r21 ;//---------------------------------------------------------------------- ;// Routines called: r19r18_0100 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- r21r20_0008_r19r18_0100: ldi r20, 8 ldi r21, 0 rjmp r19r18_0100 ;//---------------------------------------------------------------------- ;// Subroutine: r19r18_0140_r21_0_r20_8 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: r19:r18, r20, r21 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- r19r18_0140_r21_0_r20_8: ldi r20, 8 sub_33B6: ldi r21, 0 ldi r18, 0x40 ldi r19, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: r19r18_0110_r21r20_0010 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: r19:r18, r21:r20 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- r19r18_0110_r21r20_0010: ldi r20, 0x10 ldi r21, 0 ldi r18, 0x10 ldi r19, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: r20_8_r19r18_0100_r17r16_0100 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: r16,r17,r18,r19 ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- r20_8_r19r18_0100_r17r16_0100: ldi r20, 8 rcall r19r18_0100 ldi r16, 0 ldi r17, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: StoreBYTES_len_r22_X(0140)_xor_Y_to_Z(0100) ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- StoreBYTES_len_r22_X(0140)_xor_Y_to_Z(0100): ldi r18, 0x40 ldi r19, 1 ;point ram X to 0x0140 StoreBYTES_len_r22_X(r19r18)_xor_Y(r21r20)_to_Z(0100): ldi r16, 0 ldi r17, 1 ;point ram Z to 0x0100 jmp StoreBYTES_len_r22_X_xor_Y_to_Z ;point ram Z to r17:r16 ;point ram X to r19:r18 ;point ram Y to r21:r20 ;LEN = r22 ;store Z = (X XOR Y) ;//---------------------------------------------------------------------- ;// Subroutine: sub_33CA ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_33CA: std Z+1, r16 ldi r22, 2 rcall Point_r21r20_to_r25r24 subi r20, 0xFA sbci r21, 0xFF ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_33D0 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_33D0: ser r16 ;Set Register r16 = $FF ser r17 ;Set Register r17 = $FF sub r16, r8 sbc r17, r9 rjmp sub_32B9 ;//---------------------------------------------------------------------- ;// Subroutine: POINT_ramZ_0110 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: ZH:ZL ;//---------------------------------------------------------------------- ;// Description: ;// Point ZH:ZL to 0x0110h ;//---------------------------------------------------------------------- POINT_ramZ_0110: ldi ZL, 0x10 ldi ZH, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_33D8: ldi r18, 0x10 ldi r19, 1 ;r19:r18 = 0x0110 rcall r17r16_0140 jmp StoreBYTES_len_r22_X_xor_Y_to_Z ;point ram Z to r17:r16 ;point ram X to r19:r18 ;point ram Y to r21:r20 ;LEN = r22 ;store Z = (X XOR Y) ;//---------------------------------------------------------------------- ;// Subroutine: r19r18_0100 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: r19:r18 ;//---------------------------------------------------------------------- ;// Description: ;// Point R19:R18 to 0x0100h ;//---------------------------------------------------------------------- r19r18_0100: ldi r18, 0 ldi r19, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: r17r16_0140 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: r17:r16 ;//---------------------------------------------------------------------- ;// Description: ;// Point R17:R16 to 0x0140h ;//---------------------------------------------------------------------- r17r16_0140: ldi r16, 0x40 ldi r17, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_33E3 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_33E3 call sub_39E9 sbiw YL, 6 mov r8, r18 mov r9, r19 rcall sub_308F ld r18, Z ldd r19, Z+1 std Y+2, r18 std Y+3, r19 ldd r18, Z+2 ldd r19, Z+3 std Y+4, r18 std Y+5, r19 ldd r14, Z+4 ldd r15, Z+5 ldd r12, Z+6 ldd r13, Z+7 mov ZL, r8 mov ZH, r9 ld r4, Z ldd r5, Z+1 ldd r6, Z+2 ldd r7, Z+3 ldd r24, Z+4 ldd r25, Z+5 ldd XL, Z+6 ldd XH, Z+7 ldi r16, 0 std Y+1, r16 clr r10 clr r11 st Y, r16 rjmp loc_3412 ; --------------------------------------------------------------------------- loc_3405: tst r16 breq loc_3412 ldd r17, Y+1 add r17, r16 std Y+1, r17 mov r16, r17 ldi r17, 0 ldi r20, 0x55 ldi r21, -0x1B call sub_39D3 mov r10, r16 mov r11, r17 loc_3412: ldi r18, 5 ldd r20, Y+2 ldd r21, Y+3 add r20, r24 adc r21, r25 rcall sub_3467 ldd r16, Y+4 ldd r17, Y+5 add r16, XL adc r17, XH rcall sub_3460 add r16, r4 adc r17, r5 call sub_369B mov r4, r16 mov r5, r17 ldi r18, 3 rcall Point_r21r20_to_r25r24 rcall sub_3465 mov r16, XL mov r17, XH rcall sub_345E add r16, r6 adc r17, r7 call sub_3693 mov r6, r16 mov r7, r17 ldi r18, 3 ldd r20, Y+2 ldd r21, Y+3 add r20, r4 adc r21, r5 rcall sub_3467 ldd r16, Y+4 ldd r17, Y+5 add r16, r6 adc r17, r7 rcall sub_3460 add r16, r24 adc r17, r25 call sub_3693 rcall POINT_r25r24_to_r17r16 ldi r18, 5 rcall Point_r21r20_to_r5r4 rcall sub_3465 rcall store_r7r6_to_r17r16 rcall sub_345E add r16, XL adc r17, XH call sub_369B mov XL, r16 mov XH, r17 ld r16, Y inc r16 st Y, r16 cpi r16, 0x10 brcc loc_3450 rjmp loc_3405 ; --------------------------------------------------------------------------- loc_3450: mov ZL, r8 mov ZH, r9 st Z, r4 std Z+1, r5 std Z+2, r6 std Z+3, r7 std Z+4, r24 std Z+5, r25 std Z+6, XL std Z+7, r17 adiw YL, 6 ldi ZL, 0x10 jmp loc_39FA ;//---------------------------------------------------------------------- ;// Subroutine: sub_345E ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_345E: add r16, r12 adc r17, r13 sub_3460: add r16, r10 adc r17, r11 eor r16, r20 eor r17, r21 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3465 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3465: add r20, r14 adc r21, r15 sub_3467: add r20, r10 adc r21, r11 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_346A ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_346A: call sub_39E9_4 rcall POINT_r25r24_to_r17r16 mov r6, r18 mov r7, r19 clr r5 ldi r16, 4 mov r8, r16 loc_3472: clr r4 loc_3473: rcall sub_3180 mov r20, r4 ldi r21, 0 rcall Point_r17r16_to_r25r24 add r16, r4 adc r17, r21 rcall sub_2F9C rcall sub_319D ld r2, Z rcall sub_31A2 ld r0, Z eor r0, r2 rcall sub_3190 rcall sub_31AA mov r21, r20 rcall POINT_ramZ_049F ld r22, Z ldd r23, Z+1 mov r0, r4 ldi r20, 1 add r0, r20 rol r1 rcall POINT_ramZ_to_r25r24(2) add ZL, r0 adc ZH, r1 ld r2, Z mov r20, r4 rcall sub_31A2 ld r0, Z eor r0, r2 eor r0, r5 mov ZL, r22 mov ZH, r23 add ZL, r0 adc ZH, r1 ld r20, Z rcall sub_308F ld r22, Z eor r22, r20 st Z, r22 rcall POINT_ramZ_049F rcall sub_31B3 ldi r23, 0 rcall sub_31AD add ZL, r22 rcall sub_31A9 eor r20, r5 ldi r21, 0 add r0, r20 adc r1, r21 mov ZL, r0 mov ZH, r1 ld r20, Z rcall sub_319F rcall sub_318C rcall POINT_ramZ_049F ld r18, Z ldd r19, Z+1 mov r20, r4 subi r20, 0xFD sbci r21, 0xFF rcall POINT_ramZ_to_r25r24(2) rcall sub_34EA ldi r21, 0 subi r20, 0xFF rcall sub_34DA subi r18, 0xFE rcall sub_3188 rcall Point_ramZ_to_0437 ldd r18, Z+2 ldd r19, Z+3 mov r20, r4 subi r20, 0xFC andi r20, 0xF rcall POINT_ramZ_to_r25r24(2) rcall sub_34EA subi r20, 0xFE rcall sub_34DA subi r18, 0xFD rcall sub_3188 mov r18, r6 mov r19, r7 call sub_35E4 rcall store_r7r6_to_r17r16 call sub_359C inc r5 ldi r16, 4 add r4, r16 ldi r16, 0x10 cp r4, r16 brcc loc_34D1 rjmp loc_3473 ; --------------------------------------------------------------------------- loc_34D1: dec r8 breq loc_34D4 rjmp loc_3472 ; --------------------------------------------------------------------------- loc_34D4: rcall store_r7r6_to_r17r16 call sub_359C ldi ZL, 9 jmp loc_3A01 ;//---------------------------------------------------------------------- ;// Subroutine: sub_34DA ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_34DA: sbci r21, 0xFF rcall POINT_ramZ_to_r25r24 add ZL, r20 adc ZH, r21 ld r20, Z eor r20, r22 eor r20, r5 ldi r21, 0 add r18, r20 adc r19, r21 mov ZL, r18 mov ZH, r19 ld r20, Z mov r18, r4 ldi r19, 0 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_34EA ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_34EA: add ZL, r20 adc ZH, r21 ld r22, Z mov r20, r4 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_34EF ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_34EF: call sub_39E9_5 mov r4, r16 mov r5, r17 clr r6 loc_34F4: rcall POINT_ramZ_0487 rcall Store_Z+1_Z_to_r17r16 ldi XL, 0 ldi XH, 1 rcall sub_308F ldd r18, Z+3 st X, r18 ldd r18, Z+5 rcall sub_359B std Z+1, r18 rcall sub_308F rcall sub_308C rcall sub_359A std Z+3, r18 rcall sub_308F ldd r18, Z+3 rcall sub_359B std Z+4, r18 rcall sub_308F ldd r18, Z+3 rcall sub_3587 rcall Point_r21r20_to_r5r4 ldi r18, 0 ldi r19, 1 ldi r16, 8 ldi r17, 1 rcall sub_3580 ldi r16, 0x18 ldi r17, 1 call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 ldi r18, 0x18 ldi r19, 1 mov r16, r4 mov r17, r5 subi r16, 0xF8 sbci r17, 0xFF rcall sub_33E3 rcall POINT_ramZ_0487 rcall Store_Z+1_Z_to_r17r16 rcall sub_308F ldd r18, Z+3 st X, r18 ldd r18, Z+3 rcall sub_359B std Z+1, r18 rcall sub_308F ldd r18, Z+3 rcall sub_308C_1 rcall sub_359A std Z+3, r18 rcall sub_308F ldd r18, Z+5 rcall sub_359B std Z+4, r18 rcall sub_308F ldd r18, Z+4 rcall sub_3587 ldi r20, 0 ldi r21, 1 ldi r18, 0x18 ldi r19, 1 ldi r16, 0x20 ldi r17, 1 call StoreBYTES_len_r22_X_xor_Y_to_Z ;point ram Z to r17:r16 ;point ram X to r19:r18 ;point ram Y to r21:r20 ;LEN = r22 ;store Z = (X XOR Y) ldi r24, 0x80 ldi r25, 2 ;r25:r24 = 0x0280 mov r16, r6 ldi r17, 0 ldi r20, 3 call sub_39E3 add r24, r16 adc r25, r17 rcall POINT_r19r18_to_r25r24 ldi r16, 0x20 ldi r17, 1 call sub_2C84 ldi r16, 0 st X, r16 rcall sub_359B rcall sub_32B5 rcall Store_Z+1_Z_to_r17r16 rcall sub_308F rcall sub_308C ldd r18, Z+3 rcall sub_359B std Z+3, r18 rcall sub_308F ldd r18, Z+3 rcall sub_359B std Z+4, r18 rcall sub_308F rcall sub_359A std Z+5, r18 rcall sub_308F rcall sub_359A std Z+6, r18 rcall sub_308F ldd r16, Z+5 rcall sub_359B std Z+7, r16 ldi r22, 8 rcall Point_r21r20_to_r25r24 ldi r18, 0 ldi r19, 1 ldi r16, 0x10 ldi r17, 1 rcall sub_3580 ldi r16, 0x28 ldi r17, 1 ;r17:r16 = 0x0128 call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 rcall sub_3580_1 ldi r16, 0x30 ldi r17, 1 ;r17:r16 = 0x0130 rcall sub_3593 rcall sub_346A ldi r20, 0x10 rcall sub_33B6 ldi r16, 0x28 ldi r17, 1 ;r17:r16 = 0x0128 rcall sub_3593 rcall decrypt_seca rcall r20_8_r21_0 ldi r18, 0x10 ldi r19, 1 ;r18:r19 = 0x0110 rcall Point_r17r16_to_r25r24 call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 inc r6 ldi r16, 2 cp r6, r16 brcc loc_357D rjmp loc_34F4 ; --------------------------------------------------------------------------- loc_357D: ldi ZL, 7 jmp loc_3A03 ;//---------------------------------------------------------------------- ;// Subroutine: sub_3580 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: StoreBYTES_len_r22_X_xor_Y_to_Z ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3580: call StoreBYTES_len_r22_X_xor_Y_to_Z ;point ram Z to r17:r16 ;point ram X to r19:r18 ;point ram Y to r21:r20 ;LEN = r22 ;store Z = (X XOR Y) sub_3580_1: ldi r20, 8 ldi r21, 0 ldi r18, 8 ldi r19, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3587 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: Point_ramZ_0100, Point_ZHZL_to_r17r16 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3587: rcall Point_ramZ_0100 std Z+5, r18 rcall Point_ZHZL_to_r17r16 ldd r18, Z+5 rcall Point_ramZ_0100 std Z+6, r18 rcall Point_ZHZL_to_r17r16 ldd r16, Z+4 rcall Point_ramZ_0100 std Z+7, r16 ldi r22, 8 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3593 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3593: call Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20 ldi r18, 0x10 ldi r19, 1 ldi r16, 0x28 ldi r17, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_359A ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_359A: ldd r18, Z+4 sub_359B: rjmp Point_ramZ_0100 ;//---------------------------------------------------------------------- ;// Subroutine: sub_359C ;//---------------------------------------------------------------------- ;// Input Parameters: r17:r16 ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_359C: mov ZL, r16 mov ZH, r17 ldi r18, 4 ;len 4 sub_359C_loop: ld r0, Z ldd r1, Z+4 std Z+4, r0 st Z+, r1 dec r18 brne sub_359C_loop ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_35A6 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_35A6: mov ZL, r16 mov ZH, r17 clr r16 clr r17 mov r20, r18 lsr r18 rjmp loc_35B1 ; --------------------------------------------------------------------------- loc_35AD: ld r1, Z+ ld r0, Z+ add r16, r0 adc r17, r1 loc_35B1: dec r18 brpl loc_35AD sbrs r20, 0 rjmp locret_35C1 clr r23 ld r22, Z lsl r22 rol r23 lsl r22 rol r23 lsl r22 rol r23 lsl r22 rol r23 add r16, r22 adc r17, r23 locret_35C1: ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_35C2 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_35C2: mov r2, XL mov r3, XH andi r19, 0x3F mov XL, r16 mov XH, r17 lds ZL, ram_049D lds ZH, ram_049E add ZL, r18 adc ZH, r19 loc_35CD: cpi ZH, 0x90 brcs loc_35D2 cpi ZH, 0xCF brcc loc_35D2 subi ZH, 0xC0 loc_35D2: ld r17, Z+ cpi ZH, 0x90 brcs loc_35D8 cpi ZH, 0xCF brcc loc_35D8 subi ZH, 0xC0 loc_35D8: sbrs r21, 1 rjmp loc_35DC ld r16, Z+ eor r17, r16 loc_35DC: ld r16, X eor r16, r17 st X+, r16 dec r20 brne loc_35CD mov XL, r2 mov XH, r3 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_35E4 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_35E4: clr r1 mov ZL, r18 mov ZH, r19 ldd r20, Z+4 ldd r21, Z+5 ldd r22, Z+6 ldd r23, Z+7 mov ZL, r16 mov ZH, r17 ld r0, Z+ eor r20, r0 ld r0, Z+ eor r21, r0 ld r0, Z+ eor r22, r0 ld r0, Z+ eor r23, r0 lds ZL, ram_049F lds ZH, ram_04A0 add ZL, r20 adc ZH, r1 ld r20, Z lds ZL, ram_049F lds ZH, ram_04A0 add ZL, r21 adc ZH, r1 ld r21, Z lds ZL, ram_049F lds ZH, ram_04A0 add ZL, r22 adc ZH, r1 ld r22, Z lds ZL, ram_049F lds ZH, ram_04A0 add ZL, r23 adc ZH, r1 ld r23, Z eor r20, r23 lds ZL, ram_04A1 lds ZH, ram_04A2 mov r0, r23 swap r0 add r0, r22 add ZL, r0 adc ZH, r1 ld r22, Z eor r23, r22 lds ZL, ram_04A1 lds ZH, ram_04A2 mov r0, r22 swap r0 add r0, r21 add ZL, r0 adc ZH, r1 ld r21, Z eor r22, r21 lds ZL, ram_04A1 lds ZH, ram_04A2 mov r0, r21 swap r0 add r0, r20 add ZL, r0 adc ZH, r1 ld r20, Z eor r21, r20 lds ZL, ram_049F lds ZH, ram_04A0 mov r0, r20 swap r0 add r0, r23 add ZL, r0 adc ZH, r1 ld r23, Z eor r20, r23 lds ZL, ram_049F lds ZH, ram_04A0 mov r0, r23 swap r0 add r0, r22 add ZL, r0 adc ZH, r1 ld r22, Z eor r23, r22 lds ZL, ram_049F lds ZH, ram_04A0 mov r0, r22 swap r0 add r0, r21 add ZL, r0 adc ZH, r1 ld r21, Z eor r22, r21 eor r21, r20 lds ZL, ram_04A1 lds ZH, ram_04A2 add ZL, r20 adc ZH, r1 ld r20, Z lds ZL, ram_04A1 lds ZH, ram_04A2 add ZL, r21 adc ZH, r1 ld r21, Z lds ZL, ram_04A1 lds ZH, ram_04A2 add ZL, r22 adc ZH, r1 ld r22, Z lds ZL, ram_04A1 lds ZH, ram_04A2 add ZL, r23 adc ZH, r1 ld r23, Z mov ZL, r18 mov ZH, r19 ld r0, Z eor r0, r21 st Z+, r0 ld r0, Z eor r0, r23 st Z+, r0 ld r0, Z eor r0, r20 st Z+, r0 ld r0, Z eor r0, r22 st Z+, r0 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3680 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3680: clr r21 clc loc_3682: rol r16 rol r17 rol r18 rol r19 adc r16, r21 dec r20 brne loc_3682 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_368A ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_368A: mov r21, r16 ror r21 ror r19 ror r18 ror r17 ror r16 dec r20 brne sub_368A ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3693 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3693: clr r21 clc loc_3695: rol r16 rol r17 adc r16, r21 dec r18 brne loc_3695 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_369B ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_369B: mov r21, r16 ror r21 ror r17 ror r16 dec r18 brne sub_369B ret ;//---------------------------------------------------------------------- ;// Subroutine: SHA-1 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- SHA-1: call sub_39E9 sbiw YL, 5 std Y+3, r18 std Y+4, r19 st Y, r23 mov XL, r16 mov XH, r17 mov r14, r20 mov r15, r21 mov r7, r22 ldi r16, 0 std Y+1, r16 std Y+2, r16 clr r6 call CryptoReset tst r16 breq SHA-1_2 ser r16 ;Set Register r16 = $FF rjmp SHA-1_end ; --------------------------------------------------------------------------- SHA-1_2: ;/* SHA1 initialization constants */ ;0x0100 = 01 23 45 67 89 AB CD EF FE DC BA 98 76 54 32 10 F0 E1 D2 C3 ldi r16, 1 ldi r17, 0x23 ldi r18, 0x45 ldi r19, 0x67 rcall POINT_ramZ_0100 rcall Store_r16/r19_to_Z/Z+3 ldi r16, 0x89 ldi r17, -0x55 ldi r18, -0x33 ldi r19, -0x11 rcall POINT_ramZ_0104 rcall Store_r16/r19_to_Z/Z+3 ldi r16, 0xFE ; '¦' ldi r17, -0x24 ; '_' ldi r18, -0x46 ; '¦' ldi r19, -0x68 ; 'ÿ' rcall POINT_ramZ_0108 rcall Store_r16/r19_to_Z/Z+3 ldi r16, 0x76 ; 'v' ldi r17, 0x54 ; 'T' ldi r18, 0x32 ; '2' ldi r19, 0x10 rcall POINT_ramZ_010C rcall Store_r16/r19_to_Z/Z+3 ldi r16, 0xF0 ; '­' ldi r17, -0x1F ; 'ß' ldi r18, -0x2E ; 'Ê' ldi r19, -0x3D ; '+' rcall POINT_ramZ_0110 rcall Store_r16/r19_to_Z/Z+3 rjmp loc_36E7 ; --------------------------------------------------------------------------- loc_36D6: ldd ZL, Y+3 ldd ZH, Y+4 add ZL, r16 adc ZH, r17 ld r18, Z rcall sub_3772 st Z, r18 subi r16, 0xFF sbci r17, 0xFF std Y+1, r16 std Y+2, r17 inc r6 ldi r16, 0x40 cp r6, r16 brne loc_36E7 rcall sub_3786 clr r6 loc_36E7: ldd r16, Y+1 ldd r17, Y+2 cp r16, r14 cpc r17, r15 brne loc_36D6 ldi r16, 0x3E cp r6, r16 brcc loc_3700 rcall sub_3772 st Z, r7 loc_36F1: inc r6 rjmp loc_36F5 ; --------------------------------------------------------------------------- loc_36F3: rcall sub_3786 clr r6 loc_36F5: mov r16, r6 andi r16, 0x3F cpi r16, 0x3E breq loc_3700 ldi r16, 0x40 cp r6, r16 breq loc_36F3 ld r18, Y rcall sub_3772 st Z, r18 rjmp loc_36F1 ; --------------------------------------------------------------------------- loc_3700: ld r16, Y or r16, r7 breq loc_3708 rcall sub_3772 st Z, r15 inc r6 rcall sub_3772 st Z, r14 loc_3708: rcall sub_3786 rcall POINT_ramZ_0100 rcall r16_Z_and_STORE_XHXL_to_ZHZL std Z+3, r16 rcall POINT_ramZ_0100 rcall r16_Z+1_and_STORE_XHXL_to_ZHZL std Z+2, r16 rcall POINT_ramZ_0100 rcall r16_Z+2_and_STORE_XHXL_to_ZHZL std Z+1, r16 rcall POINT_ramZ_0100 ldd r16, Z+3 st X, r16 rcall POINT_ramZ_0104 rcall r16_Z_and_STORE_XHXL_to_ZHZL std Z+7, r16 rcall POINT_ramZ_0104 rcall r16_Z+1_and_STORE_XHXL_to_ZHZL std Z+6, r16 rcall POINT_ramZ_0104 rcall r16_Z+2_and_STORE_XHXL_to_ZHZL std Z+5, r16 rcall POINT_ramZ_0104 rcall r16_Z+3_and_STORE_XHXL_to_ZHZL std Z+4, r16 rcall POINT_ramZ_0108 rcall r16_Z_and_STORE_XHXL_to_ZHZL std Z+0xB, r16 rcall POINT_ramZ_0108 rcall r16_Z+1_and_STORE_XHXL_to_ZHZL std Z+0xA, r16 rcall POINT_ramZ_0108 rcall r16_Z+2_and_STORE_XHXL_to_ZHZL std Z+9, r16 rcall POINT_ramZ_0108 rcall r16_Z+3_and_STORE_XHXL_to_ZHZL std Z+8, r16 rcall POINT_ramZ_010C rcall r16_Z_and_STORE_XHXL_to_ZHZL std Z+0xF, r16 rcall POINT_ramZ_010C rcall r16_Z+1_and_STORE_XHXL_to_ZHZL std Z+0xE, r16 rcall POINT_ramZ_010C rcall r16_Z+2_and_STORE_XHXL_to_ZHZL std Z+0xD, r16 rcall POINT_ramZ_010C rcall r16_Z+3_and_STORE_XHXL_to_ZHZL std Z+0xC, r16 rcall POINT_ramZ_0110 rcall r16_Z_and_STORE_XHXL_to_ZHZL std Z+0x13, r16 rcall POINT_ramZ_0110 rcall r16_Z+1_and_STORE_XHXL_to_ZHZL std Z+0x12, r16 rcall POINT_ramZ_0110 rcall r16_Z+2_and_STORE_XHXL_to_ZHZL std Z+0x11, r16 rcall POINT_ramZ_0110 rcall r16_Z+3_and_STORE_XHXL_to_ZHZL std Z+0x10, r16 ldi r19, 0 ldi r18, 0 ldi r16, 0 ldi r17, 1 call sub_3953 ldi r19, 0 ldi r18, 0 ldi r16, 0 ldi r17, 2 call sub_3953 ldi r16, 0 SHA-1_end: adiw YL, 5 ldi ZL, 0x10 jmp loc_39FA ;//---------------------------------------------------------------------- ;// Subroutine: POINT_ramZ_0100 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: ZH:ZL ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- POINT_ramZ_0100: ldi ZL, 0 ldi ZH, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3759 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: store_Z/Z+3_to_r16/r19, sub_368A ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3759: ldi r20, 2 ldi ZL, 0x18 ldi ZH, 1 rcall store_Z/Z+3_to_r16/r19 call sub_368A Store_r16/r19_to_011C/011F: ldi ZL, 0x1C ldi ZH, 1 ;Point ZH:ZL to 0x011C Store_r16/r19_to_Z/Z+3: st Z, r16 std Z+1, r17 std Z+2, r18 std Z+3, r19 ret ;//---------------------------------------------------------------------- ;// Subroutine: POINT_ramZ_0104 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: ZH:ZL ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- POINT_ramZ_0104: ldi ZL, 4 ldi ZH, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: POINT_ramZ_0108 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: ZH:ZL ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- POINT_ramZ_0108: ldi ZL, 8 ldi ZH, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: POINT_ramZ_010C ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: ZH:ZL ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- POINT_ramZ_010C: ldi ZL, 0xC ldi ZH, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: POINT_ramZ_0110 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: ZH:ZL ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- POINT_ramZ_0110: ldi ZL, 0x10 ldi ZH, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3772 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3772: mov ZL, r6 ldi ZH, 0 subi ZL, 0x5C sbci ZH, 0xFD ret ;//---------------------------------------------------------------------- ;// Subroutine: r16_Z_and_STORE_XHXL_to_ZHZL ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- r16_Z_and_STORE_XHXL_to_ZHZL: ld r16, Z rjmp STORE_XHXL_to_ZHZL ;//---------------------------------------------------------------------- ;// Subroutine: r16_Z+1_and_STORE_XHXL_to_ZHZL ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- r16_Z+1_and_STORE_XHXL_to_ZHZL: ldd r16, Z+1 rjmp STORE_XHXL_to_ZHZL ;//---------------------------------------------------------------------- ;// Subroutine: r16_Z+2_and_STORE_XHXL_to_ZHZL ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- r16_Z+2_and_STORE_XHXL_to_ZHZL: ldd r16, Z+2 rjmp STORE_XHXL_to_ZHZL ;//---------------------------------------------------------------------- ;// Subroutine: r16_Z+3_and_STORE_XHXL_to_ZHZL ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- r16_Z+3_and_STORE_XHXL_to_ZHZL: ldd r16, Z+3 STORE_XHXL_to_ZHZL: mov ZL, XL mov ZH, XH ret ;//---------------------------------------------------------------------- ;// Subroutine: store_Z/Z+3_to_r16/r19 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- store_Z/Z+3_to_r16/r19: ld r16, Z ldd r17, Z+1 ldd r18, Z+2 ldd r19, Z+3 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3786 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3786: call sub_39E9 clr r15 loc_3789: clr r14 loc_378A: mov ZL, r15 ldi ZH, 0 rcall sub_38A8 ld r19, Z mov r24, r15 ldi r25, 0 adiw r24, 1 rcall sub_38A6 ld r18, Z mov r24, r15 ldi r25, 0 adiw r24, 2 rcall sub_38A6 ld r21, Z mov r24, r15 ldi r25, 0 adiw r24, 3 rcall sub_38A6 ld r20, Z rcall sub_3903 rcall sub_38C7 st Z, r20 std Z+1, r21 std Z+2, r18 std Z+3, r19 ldi r16, 4 add r15, r16 inc r14 ldi r16, 0x10 cp r14, r16 brcs loc_378A mov r14, r16 loc_37AA: ldi r20, 1 rcall r25_0_store_r14_to_r24 sbiw r24, 3 rcall sub_38C3 rcall store_Z/Z+3_to_r16/r19(2) rcall r25_0_store_r14_to_r24 sbiw r24, 8 rcall sub_38B7 mov r16, r0 mov r17, r1 mov r18, r2 mov r19, r3 rcall r25_0_store_r14_to_r24 sbiw r24, 0xE rcall sub_38B7 rcall r25_0_store_r14_to_r24 sbiw r24, 0x10 rcall sub_38C3 rcall store_Z/Z+3_to_r16/r19(2) eor r16, r0 eor r17, r1 eor r18, r2 eor r19, r3 call sub_3680 mov r20, r14 ldi r21, 0 lsl r20 rol r21 lsl r20 rol r21 mov ZL, r20 mov ZH, r21 rcall sub_38C7 rcall Store_r16/r19_to_Z/Z+3 inc r14 ldi r16, 0x50 ;r16 = 0x50 cp r14, r16 brcs loc_37AA rcall POINT_ramZ_0100 rcall store_Z/Z+3_to_r16/r19(2) ldi ZL, 0x14 ldi ZH, 1 ;Point ZH:ZL to 0x0114 rcall Store_r16/r19_to_Z/Z+3 rcall POINT_ramZ_0104 rcall store_Z/Z+3_to_r16/r19(2) rcall POINT_ramZ_0118 rcall Store_r16/r19_to_Z/Z+3 rcall POINT_ramZ_0108 rcall store_Z/Z+3_to_r16/r19(2) rcall Store_r16/r19_to_011C/011F rcall POINT_ramZ_010C rcall store_Z/Z+3_to_r16/r19(2) rcall POINT_ramZ_0120 rcall Store_r16/r19_to_Z/Z+3 rcall POINT_ramZ_0110 rcall store_Z/Z+3_to_r16/r19(2) rcall POINT_ramZ_0124 rcall Store_r16/r19_to_Z/Z+3 clr r14 loc_37E6: rcall sub_389E rcall sub_38CD rcall sub_38F1 rcall store_Z/Z+3(0118)_to_r20/r23_and_POINT_ramZ_011C rcall store_Z/Z+3_to_r16/r19(2) rcall sub_38F6 rcall Store_r16/r19_to_r0/r3 mov r16, r20 mov r17, r21 mov r18, r22 mov r19, r23 com r16 com r17 com r18 com r19 rcall sub_38DA rcall store_Z/Z+3_to_r16/r19(2) rcall sub_38F6 or r16, r0 or r17, r1 or r18, r2 or r19, r3 rcall sub_392B rcall sub_38E6 subi r24, 0x67 sbci r25, 0x86 sbci XL, 0x7D sbci XH, -0x5B rcall POINT_ramZ_0120 rcall store_Z/Z+3_to_r16/r19(2) rcall POINT_ramZ_0124 rcall Store_r16/r19_to_Z/Z+3 rcall POINT_ramZ_011C rcall store_Z/Z+3_to_r16/r19(2) rcall POINT_ramZ_0120 rcall Store_r16/r19_to_Z/Z+3 rcall sub_3759 rcall store_Z/Z+3(0114)_to_r16/r19 rcall POINT_ramZ_0118 rcall Store_r16/r19_to_Z/Z+3 rcall sub_38CE ldi r16, 0x14 cp r14, r16 brcs loc_37E6 mov r14, r16 loc_3813: rcall sub_389E rcall sub_38B1 rcall store_Z/Z+3_to_r16/r19(2) rcall sub_38D9 rcall store_Z/Z+3_to_r16/r19(2) rcall sub_38E1 subi r24, 0x5F sbci r25, 0x14 sbci XL, 0x26 sbci XH, -0x6F rcall POINT_ramZ_0120 rcall store_Z/Z+3_to_r16/r19(2) rcall POINT_ramZ_0124 rcall Store_r16/r19_to_Z/Z+3 rcall POINT_ramZ_011C rcall store_Z/Z+3_to_r16/r19(2) rcall POINT_ramZ_0120 rcall Store_r16/r19_to_Z/Z+3 rcall sub_3759 rcall store_Z/Z+3(0114)_to_r16/r19 rcall POINT_ramZ_0118 rcall Store_r16/r19_to_Z/Z+3 rcall sub_38CE ldi r16, 0x28 cp r14, r16 brcs loc_3813 mov r14, r16 loc_382E: rcall sub_389E rcall sub_38CD st -Y, r19 st -Y, r18 st -Y, r17 st -Y, r16 rcall store_Z/Z+3(0118)_to_r20/r23_and_POINT_ramZ_011C rcall store_Z/Z+3_to_r16/r19(2) rcall sub_38F6 rcall sub_38F1 rcall POINT_ramZ_0120 rcall sub_3919 rcall POINT_ramZ_011C rcall store_Z/Z+3_to_r16/r19(2) or r16, r20 or r17, r21 or r18, r22 or r19, r23 and r16, r0 and r17, r1 and r18, r2 and r19, r3 or r16, r24 or r17, r25 or r18, XL or r19, XH ld r20, Y+ ld r21, Y+ ld r22, Y+ ld r23, Y+ add r16, r20 adc r17, r21 adc r18, r22 adc r19, r23 rcall sub_38E6 subi r24, 0x24 sbci r25, 0x43 sbci XL, -0x1C sbci XH, 0x70 st Z, r0 std Z+1, r1 std Z+2, r2 std Z+3, r3 rcall POINT_ramZ_011C rcall store_Z/Z+3_to_r16/r19(2) rcall POINT_ramZ_0120 rcall Store_r16/r19_to_Z/Z+3 rcall sub_3759 rcall store_Z/Z+3(0114)_to_r16/r19 rcall POINT_ramZ_0118 rcall Store_r16/r19_to_Z/Z+3 rcall sub_38CE ldi r16, 0x3C cp r14, r16 brcs loc_382E mov r14, r16 loc_3866: rcall sub_389E rcall sub_38B1 rcall store_Z/Z+3_to_r16/r19(2) rcall sub_38D9 rcall store_Z/Z+3_to_r16/r19(2) rcall sub_38E1 subi r24, 0x2A sbci r25, 0x3E sbci XL, -0x63 sbci XH, 0x35 rcall POINT_ramZ_0120 rcall store_Z/Z+3_to_r16/r19(2) rcall POINT_ramZ_0124 rcall Store_r16/r19_to_Z/Z+3 rcall POINT_ramZ_011C rcall store_Z/Z+3_to_r16/r19(2) rcall POINT_ramZ_0120 rcall Store_r16/r19_to_Z/Z+3 rcall sub_3759 rcall store_Z/Z+3(0114)_to_r16/r19 rcall POINT_ramZ_0118 rcall Store_r16/r19_to_Z/Z+3 rcall sub_38CE ldi r16, 0x50 cp r14, r16 brcs loc_3866 rcall POINT_ramZ_0100 rcall store_Z/Z+3_to_r20/r23 add r20, r24 adc r21, r25 adc r22, XL adc r23, XH rcall sub_390C rcall POINT_ramZ_0118 ld r16, Z rcall POINT_ramZ_0104 rcall sub_38AB rcall POINT_ramZ_011C rcall store_Z/Z+3_to_r16/r19(2) rcall POINT_ramZ_0108 rcall sub_38AB rcall POINT_ramZ_0120 rcall store_Z/Z+3_to_r16/r19(2) rcall POINT_ramZ_010C rcall sub_38AB rcall POINT_ramZ_0124 rcall store_Z/Z+3_to_r16/r19(2) rcall POINT_ramZ_0110 rcall sub_38AB ldi r16, 0x40 cp r15, r16 brcc loc_389B rjmp loc_3789 ; --------------------------------------------------------------------------- loc_389B: ldi ZL, 0x10 jmp loc_39FA ;//---------------------------------------------------------------------- ;// Subroutine: sub_389E ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: sub_3903, sub_391E, store_Z/Z+3_to_r16/r19 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_389E: rcall sub_3903 subi ZL, 0xD8 sbci ZH, 0xFE rcall sub_391E ldi r20, 5 store_Z/Z+3(0114)_to_r16/r19: ldi ZL, 0x14 ldi ZH, 1 store_Z/Z+3_to_r16/r19(2): rjmp store_Z/Z+3_to_r16/r19 ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_38A6: mov ZL, r24 mov ZH, r25 sub_38A8: subi ZL, 0x5C sbci ZH, 0xFD ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_38AB ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: store_Z/Z+3_to_r20/r23, sub_390C ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_38AB: rcall store_Z/Z+3_to_r20/r23 add r20, r16 adc r21, r17 adc r22, r18 adc r23, r19 rjmp sub_390C ;//---------------------------------------------------------------------- ;// Subroutine: sub_38B1 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: store_Z/Z+3_to_r20/r23, POINT_ramZ_011C ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_38B1: rcall sub_3911 rcall Store_r16/r19_to_r0/r3 store_Z/Z+3(0118)_to_r20/r23_and_POINT_ramZ_011C: ldi ZL, 0x18 ldi ZH, 1 ;Point ZH:ZL to 0x0118 rcall store_Z/Z+3_to_r20/r23 rjmp POINT_ramZ_011C ;//---------------------------------------------------------------------- ;// Subroutine: sub_38B7 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: sub_3923, sub_3919 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_38B7: rcall sub_3923 rcall sub_3923 mov ZL, r24 mov ZH, r25 subi ZL, -0x28 sbci ZH, 0xFE rcall sub_3919 eor r0, r16 eor r1, r17 eor r2, r18 eor r3, r19 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_38C3: rcall sub_3923 rcall sub_3923 mov ZL, r24 mov ZH, r25 sub_38C7: subi ZL, -0x28 sbci ZH, 0xFE ret ;//---------------------------------------------------------------------- ;// Subroutine: r25_0_store_r14_to_r24 ;//---------------------------------------------------------------------- ;// Input Parameters: r14 ;// Output Parameters: r24, r25 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- r25_0_store_r14_to_r24: mov r24, r14 ldi r25, 0 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_38CD ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_38CD: rjmp sub_3911 ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_38CE: ldi ZL, 0x14 ldi ZH, 1 st Z, r24 std Z+1, r25 std Z+2, XL std Z+3, XH inc r14 ret ;//---------------------------------------------------------------------- ;// Subroutine: POINT_ramZ_0118 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- POINT_ramZ_0118: ldi ZL, 0x18 ldi ZH, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_38D9 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_38D9: rcall sub_3926 sub_38DA: mov r20, r16 mov r21, r17 mov r22, r18 mov r23, r19 POINT_ramZ_0120: ldi ZL, 0x20 ldi ZH, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_38E1: rcall sub_3926 add r16, r0 adc r17, r1 adc r18, r2 adc r19, r3 sub_38E6: ldi ZL, 0x24 ldi ZH, 1 rcall sub_391E add r24, r16 adc r25, r17 adc XL, r18 adc XH, r19 ret ;//---------------------------------------------------------------------- ;// Subroutine: POINT_ramZ_0124 ;//---------------------------------------------------------------------- ;// Input Parameters: none ;// Output Parameters: ZH:ZL ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- POINT_ramZ_0124: ldi ZL, 0x24 ldi ZH, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_38F1: mov r24, r16 mov r25, r17 mov XL, r18 mov XH, r19 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_38F6: and r16, r20 and r17, r21 and r18, r22 and r19, r23 ret ;//---------------------------------------------------------------------- ;// Subroutine: POINT_ramZ_011C ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- POINT_ramZ_011C: ldi ZL, 0x1C ldi ZH, 1 ret ;//---------------------------------------------------------------------- ;// Subroutine: store_Z/Z+3_to_r20/r23 ;//---------------------------------------------------------------------- ;// Input Parameters: ZH:ZL ;// Output Parameters: r20, r21, r22, r23 ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- store_Z/Z+3_to_r20/r23: ld r20, Z ldd r21, Z+1 ldd r22, Z+2 ldd r23, Z+3 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3903: mov r16, r14 ldi r17, 0 lsl r16 rol r17 lsl r16 rol r17 mov ZL, r16 mov ZH, r17 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_390C ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_390C: st Z, r20 std Z+1, r21 std Z+2, r22 std Z+3, r23 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3911 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: sub_3680, sub_392B ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3911: call sub_3680 rjmp sub_392B ;//---------------------------------------------------------------------- ;// Subroutine: Store_r16/r19_to_r0/r3 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- Store_r16/r19_to_r0/r3: mov r0, r16 mov r1, r17 mov r2, r18 mov r3, r19 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3919: ld r0, Z ldd r1, Z+1 ldd r2, Z+2 ldd r3, Z+3 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_391E: ld r24, Z ldd r25, Z+1 ldd XL, Z+2 ldd XH, Z+3 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3923: lsl r24 rol r25 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3926 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3926: eor r16, r20 eor r17, r21 eor r18, r22 eor r19, r23 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_392B: add r16, r24 adc r17, r25 adc r18, XL adc r19, XH ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- Copy_ramX(r19r18)_to_ramZ(r17r16)_len_r20: mov r2, XL mov r3, XH mov ZL, r16 mov ZH, r17 mov XL, r18 mov XH, r19 mov r18, r24 mov r19, r25 mov r24, r20 mov r25, r21 loc_393A: ld r0, X+ st Z+, r0 sbiw r24, 1 brne loc_393A mov r24, r18 mov r25, r19 mov XL, r2 mov XH, r3 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3943: mov r2, XL mov r3, XH mov ZL, r16 mov ZH, r17 mov XL, r18 mov XH, r19 clr r16 loc_394A: ld r0, X+ ld r17, Z+ eor r17, r0 or r16, r17 dec r20 brne loc_394A mov XL, r2 mov XH, r3 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3953: mov ZL, r16 mov ZH, r17 loc_3955: st Z+, r18 dec r19 brne loc_3955 ret ;//---------------------------------------------------------------------- ;// Subroutine: StoreBYTES_len_r22_X_xor_Y_to_Z ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- StoreBYTES_len_r22_X_xor_Y_to_Z: st -Y, r24 mov r0, YL mov r1, YH mov r2, XL mov r3, XH mov ZL, r16 mov ZH, r17 mov XL, r18 mov XH, r19 mov YL, r20 mov YH, r21 loc_3964: ld r23, X+ ld r24, Y+ eor r24, r23 st Z+, r24 dec r22 brne loc_3964 mov XL, r2 mov XH, r3 mov YL, r0 mov YH, r1 ld r24, Y+ ret ;//---------------------------------------------------------------------- ;// Subroutine: NOT_Routine ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- NOT_Routine: mov r2, XL mov r3, XH mov ZL, r16 mov ZH, r17 mov XL, r18 mov XH, r19 NOT_Routine_loop: ld r0, X+ ser r16 ;Set Register r16 = $FF sub r16, r0 st Z+, r16 dec r20 brne NOT_Routine_loop mov XL, r2 mov XH, r3 ret ;//---------------------------------------------------------------------- ;// Subroutine: SWAP_Routine ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- SWAP_Routine: mov r2, XL mov r3, XH mov ZL, r16 mov ZH, r17 mov XL, r18 mov XH, r19 SWAP_Routine_loop: ld r0, X+ swap r0 st Z+, r0 dec r20 brne SWAP_Routine_loop mov XL, r2 mov XH, r3 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: SendByte ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_398D: st -Y, r24 mov r2, XL mov r3, XH mov r24, r18 mov XL, r16 mov XH, r17 loc_3993: ld r16, X+ call SendByte dec r24 brne loc_3993 mov XL, r2 mov XH, r3 ld r24, Y+ ret ;//---------------------------------------------------------------------- ;// Subroutine: loc_399C ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: SendByte ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- loc_399C: mov r2, r16 mov r3, r17 loc_399C_loop: mov r16, r2 call SendByte dec r3 brne loc_399C_loop ret ;//---------------------------------------------------------------------- ;// Subroutine: RAM_STORE ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ReceiveByte ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- RAM_STORE: st -Y, r24 mov r2, XL mov r3, XH mov XL, r16 mov XH, r17 mov r24, r18 rjmp RAM_STORE_2 ; --------------------------------------------------------------------------- RAM_STORE_loop: call ReceiveByte st X+, r16 RAM_STORE_2: dec r24 brpl RAM_STORE_loop mov XL, r2 mov XH, r3 ld r24, Y+ ret ; --------------------------------------------------------------------------- .dw 2E21 940E 101A E000 E014 2D22 CFE9 2E2A .dw 2E3B 2FA0 2FB1 2FE2 2FF3 2F28 2F39 2F84 .dw 2F95 95C8 9631 920D 9701 F7D9 2F82 2F93 .dw 2DA2 2DA3 9508 2300 F011 940E 3A21 ;//---------------------------------------------------------------------- ;// Subroutine: sub_39D3 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_39D3: clr r0 clr r1 sub_39D3_1: cpi r16, 0 cpc r16, r17 breq sub_39D3_end lsr r17 ror r16 brcc sub_39D3_loop add r0, r20 adc r1, r21 sub_39D3_loop: lsl r20 rol r21 rjmp sub_39D3_1 ; --------------------------------------------------------------------------- sub_39D3_end: mov r16, r0 mov r17, r1 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_39E3 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_39E3: dec r20 brmi sub_39E3_end lsl r16 rol r17 rjmp sub_39E3 ; --------------------------------------------------------------------------- sub_39E3_end: ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_39E9 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_39E9: st -Y, r15 st -Y, r14 st -Y, r13 st -Y, r12 sub_39E9_1: st -Y, r11 sub_39E9_2: st -Y, r10 sub_39E9_3: st -Y, r9 sub_39E9_4: st -Y, r8 st -Y, r7 sub_39E9_5: st -Y, r6 sub_39E9_6: st -Y, r5 st -Y, r4 sub_39E9_7: st -Y, XH st -Y, XL st -Y, r25 st -Y, r24 ret ;//---------------------------------------------------------------------- ;// Subroutine: loc_39FA ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- loc_39FA: ldd r15, Y+0xF ldd r14, Y+0xE ldd r13, Y+0xD ldd r12, Y+0xC loc_39FE: ldd r11, Y+0xB loc_39FF: ldd r10, Y+0xA loc_3A00: ldd r9, Y+9 loc_3A01: ldd r8, Y+8 ldd r7, Y+7 loc_3A03: ldd r6, Y+6 loc_3A04: ldd r5, Y+5 ldd r4, Y+4 loc_3A06: ldd XH, Y+3 ldd XL, Y+2 ldd r25, Y+1 ld r24, Y ldi ZH, 0 in r0, 0x3F cli add YL, ZL adc YH, ZH out 0x3F, r0 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3A11: ldi r18, 0 st X+, r18 rcall sub_3A16 brne sub_3A11 ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3A16 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3A16: subi r16, 1 sbci r17, 0 mov r18, r16 or r18, r17 ret ;//---------------------------------------------------------------------- ;// Subroutine: ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3A1B: lpm adiw ZL, 1 st X+, r0 rcall sub_3A16 brne sub_3A1B ret ;//---------------------------------------------------------------------- ;// Subroutine: sub_3A21 ;//---------------------------------------------------------------------- ;// Input Parameters: ;// Output Parameters: ;//---------------------------------------------------------------------- ;// Routines called: ;//---------------------------------------------------------------------- ;// Description: ;// ;//---------------------------------------------------------------------- sub_3A21: ldi r24, 0 ldi r25, 0x52 sub_3A21_loop: mov ZL, r24 mov ZH, r25 lpm mov r16, r0 adiw ZL, 1 lpm mov r17, r0 mov ZL, r24 mov ZH, r25 adiw ZL, 2 lpm mov XL, r0 adiw ZL, 1 lpm mov XH, r0 mov ZL, r24 mov ZH, r25 adiw ZL, 4 lpm mov r18, r0 adiw ZL, 1 lpm mov r20, r18 or r20, r0 breq sub_3A21_1 mov ZL, r18 mov ZH, r0 rcall sub_3A1B rjmp sub_3A21_end ; --------------------------------------------------------------------------- sub_3A21_1: rcall sub_3A11 sub_3A21_end: adiw r24, 6 ldi r17, 0x52 cpi r24, 6 cpc r25, r17 brcs sub_3A21_loop ret