Commit e0a9c87532e6e79479113b3b235e678bb4407583
authorRadosław Koppel <r.koppel@k-el.com>
Thu, 4 May 2017 19:58:06 +0000 (21:58 +0200)
committerMichel Pollet <github.com@pollet.net>
Thu, 3 Aug 2017 08:37:49 +0000 (09:37 +0100)
3 files changed:
simavr/cores/sim_core_declare.h
simavr/sim/sim_avr.c
simavr/sim/sim_avr.h

index 32aef3846269aebe27c56c7e31a3b7477b8246d1..1c74dfcfc24eabe8fa039857025bfe19c63cce1a 100644 (file)
@@ -79,6 +79,7 @@
 
 #ifdef SIGNATURE_0
 #define DEFAULT_CORE(_vector_size) \
+       .ioend  = RAMSTART - 1, \
        .ramend = RAMEND, \
        .flashend = FLASHEND, \
        .e2end = E2END, \
@@ -95,6 +96,7 @@
 #else
 // Disable signature when using an old avr toolchain
 #define DEFAULT_CORE(_vector_size) \
+       .ioend  = RAMSTART - 1, \
        .ramend = RAMEND, \
        .flashend = FLASHEND, \
        .e2end = E2END, \
index 63b5a9de0a9e11dc48b01c0ce529afa6a2d5095c..9999a174a4a920b3c22347951efed114f489dfdf 100644 (file)
@@ -137,11 +137,10 @@ void
 avr_reset(
                avr_t * avr)
 {
-       int noof_ios = MAX_IOs > avr->ramend ? avr->ramend : avr->ramend;
        AVR_LOG(avr, LOG_TRACE, "%s reset\n", avr->mmcu);
 
        avr->state = cpu_Running;
-       for(int i = 0x20; i < noof_ios; i++)
+       for(int i = 0x20; i <= avr->ioend; i++)
                avr->data[i] = 0;
        _avr_sp_set(avr, avr->ramend);
        avr->pc = avr->reset_pc;        // Likely to be zero
index edbe7a767c51185c7e090ea522f9adf78c0a3dfb..035e41eeee0ac864cd115dd2a62a9ae16dae473c 100644 (file)
@@ -149,6 +149,7 @@ typedef void (*avr_run_t)(
 typedef struct avr_t {
        const char *            mmcu;   // name of the AVR
        // these are filled by sim_core_declare from constants in /usr/lib/avr/include/avr/io*.h
+       uint16_t                        ioend;
        uint16_t                        ramend;
        uint32_t                        flashend;
        uint32_t                        e2end;