From ee3adafd2640b00cfe0f40e888b12bee4e19f11f Mon Sep 17 00:00:00 2001 From: Raphael Assenat Date: Wed, 17 Feb 2021 22:40:45 +0900 Subject: [PATCH] Correct the bootloader entry address --- bootloader.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/bootloader.c b/bootloader.c index 4d24202..923bbaa 100644 --- a/bootloader.c +++ b/bootloader.c @@ -1,5 +1,5 @@ /* gc_n64_usb : Gamecube or N64 controller to USB adapter firmware - Copyright (C) 2007-2018 Raphael Assenat + Copyright (C) 2007-2021 Raphael Assenat This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,20 +15,34 @@ along with this program. If not, see . */ #include +#include +#include +#include #include "usb.h" -#include "bootloader.h" void enterBootLoader(void) { + cli(); usb_shutdown(); + _delay_ms(10); +#if defined(__AVR_ATmega32U2__) + // ATmega32u2 : 0x3800 + asm volatile( + "cli \n" + "ldi r30, 0x00 \n" // ZL + "ldi r31, 0x38 \n" // ZH + "ijmp"); +#elif defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) // AT90USB1287/1286 : 0xF000 (word address) - // ATmega32u2 : ??? asm volatile( "cli \n" "ldi r30, 0x00 \n" // ZL "ldi r31, 0xF0 \n" // ZH "ijmp"); +#else + #error Bootloader address unknown for this CPU +#endif } void resetFirmware(void) @@ -38,7 +52,7 @@ void resetFirmware(void) // jump to the application reset vector asm volatile( "cli \n" - "ldi r30, 0x00 \n" - "ldi r31, 0x00 \n" + "ldi r30, 0x00 \n" // ZL + "ldi r31, 0x00 \n" // ZH "ijmp"); }