core: Increased the number of possible IOs
authorMichel Pollet <buserror@gmail.com>
Fri, 6 Apr 2012 17:25:10 +0000 (18:25 +0100)
committerMichel Pollet <buserror@gmail.com>
Fri, 6 Apr 2012 17:25:10 +0000 (18:25 +0100)
Also added a sanity check

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

index 6c0fc03..bcc5898 100644 (file)
@@ -53,7 +53,7 @@ enum {
        R_SREG  = 32+0x3f,
 
        // maximum number of IO registers, on normal AVRs
-       MAX_IOs = 256 - 32,     // minus 32 GP registers
+       MAX_IOs = 256,  // Bigger AVRs need more than 256-32 (mega1280)
 };
 
 #define AVR_DATA_TO_IO(v) ((v) - 32)
index 2fa455b..7edb786 100644 (file)
@@ -99,6 +99,12 @@ avr_register_io_write(
 {
        avr_io_addr_t a = AVR_DATA_TO_IO(addr);
 
+       if (a >= MAX_IOs) {
+               fprintf(stderr,
+                               "Error: avr_register_io_write(): IO address 0x%04x out of range (max 0x%04x).\n",
+                                       a, MAX_IOs);
+               abort();
+       }
        /*
         * Verifying that some other piece of code is not installed to watch write
         * on this address. If there is, this code installs a "dispatcher" callback