From b3c8d599b16f50aff21938c4ee0dcf3d4a0e47d4 Mon Sep 17 00:00:00 2001 From: cpldcpu Date: Tue, 18 Feb 2014 14:35:33 +0100 Subject: firmware: far jmp support for reset vector patching --- firmware/main.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/firmware/main.c b/firmware/main.c index 981c8c1..5342498 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -124,6 +124,9 @@ static inline void eraseApplication(void) { // Write reset vector into first page. currentAddress.w = 0; writeWordToPageBuffer(0xffff); +#if BOOTLOADER_ADDRESS >= 8192 + writeWordToPageBuffer(0xffff); // far jmp +#endif command=cmd_write_page; } @@ -140,10 +143,19 @@ static void writeWordToPageBuffer(uint16_t data) { // the device can not be bricked. // Saving user-reset-vector is done in the host tool, starting with // firmware V2 - +#if BOOTLOADER_ADDRESS < 8192 + // rjmp if (currentAddress.w == RESET_VECTOR_OFFSET * 2) { data = 0xC000 + (BOOTLOADER_ADDRESS/2) - 1; } +#else + // far jmp + if (currentAddress.w == RESET_VECTOR_OFFSET * 2) { + data = 0x940c; + } else if (currentAddress.w == (RESET_VECTOR_OFFSET +1 ) * 2) { + data = (BOOTLOADER_ADDRESS/2); + } +#endif #if (!OSCCAL_RESTORE) && OSCCAL_16_5MHz if (currentAddress.w == BOOTLOADER_ADDRESS - TINYVECTOR_OSCCAL_OFFSET) { -- cgit v1.2.3