Commit a865759ce131dd4829e77416a9f08c008f85aa0c
authorMichel Pollet <buserror@gmail.com>
Tue, 16 Jun 2015 18:05:21 +0000 (19:05 +0100)
committerMichel Pollet <buserror@gmail.com>
Thu, 2 Jul 2015 18:02:54 +0000 (19:02 +0100)
This allows the AVR to soft reset into the bootloader for example.

A watchdog reset will re-run the bootloader with the correct flag.

Signed-off-by: Michel Pollet <buserror@gmail.com>
2 files changed:
simavr/sim/sim_avr.c
simavr/sim/sim_avr.h

index 549e36d2fa874613f003d081f806d55d63c5d287..674424271dc857c5d3021fb295cc4c52a4061a8b 100644 (file)
@@ -125,7 +125,7 @@ void avr_reset(avr_t * avr)
        for(int i = 0x20; i < noof_ios; i++)
                avr->data[i] = 0;
        _avr_sp_set(avr, avr->ramend);
-       avr->pc = 0;
+       avr->pc = avr->reset_pc;        // Likely to be zero
        for (int i = 0; i < 8; i++)
                avr->sreg[i] = 0;
        avr_interrupt_reset(avr);
index aad19b5b3bb097a4da28b0e723c7e982514e06e8..038b893c7aa352ee0a300a9a1223785e02157d44 100644 (file)
@@ -232,6 +232,11 @@ typedef struct avr_t {
         * It CAN be a little confusing, so concentrate, young grasshopper.
         */
        avr_flashaddr_t pc;
+       /*
+        * Reset PC, this is the value used to jump to at reset time, this
+        * allow support for bootloaders
+        */
+       avr_flashaddr_t reset_pc;
 
        /*
         * callback when specific IO registers are read/written.