2009-11-12 Tristan Gingold <gingold@adacore.com>
authorTristan Gingold <gingold@adacore.com>
Thu, 12 Nov 2009 15:24:04 +0000 (15:24 +0000)
committerTristan Gingold <gingold@adacore.com>
Thu, 12 Nov 2009 15:24:04 +0000 (15:24 +0000)
* avr/interp.c (sim_write): Allow byte access.
(sim_read): Ditto.

sim/ChangeLog
sim/avr/interp.c

index 18f555cca2f37e3e773ef0a1c383c30b9f5bedf2..35055a90fb8d6c7b53882511b33f58a3ac958625 100644 (file)
@@ -1,3 +1,8 @@
+2009-11-12  Tristan Gingold  <gingold@adacore.com>
+
+       * avr/interp.c (sim_write): Allow byte access.
+       (sim_read): Ditto.
+
 2009-11-12  Tristan Gingold  <gingold@adacore.com>
 
        * avr/interp.c (sim_load): Clear memory before loading.
index 8d267dd853d50be2ada80b7d2fe94bf64aeb80ac..109046b4fd2f1edf3e006b67be91cbc4694b5bf6 100644 (file)
@@ -1628,16 +1628,20 @@ sim_write (SIM_DESC sd, SIM_ADDR addr, unsigned char *buffer, int size)
 
   if (addr >= 0 && addr < SRAM_VADDR)
     {
-      if (addr & 1)
-       return 0;
-      addr /= 2;
-      while (size > 1 && addr < MAX_AVR_FLASH)
+      while (size > 0 && addr < (MAX_AVR_FLASH << 1))
        {
-         flash[addr].op = buffer[0] | (buffer[1] << 8);
-         flash[addr].code = OP_unknown;
+          word val = flash[addr >> 1].op;
+
+          if (addr & 1)
+            val = (val & 0xff) | (buffer[0] << 8);
+          else
+            val = (val & 0xff00) | buffer[0];
+
+         flash[addr >> 1].op = val;
+         flash[addr >> 1].code = OP_unknown;
          addr++;
-         buffer += 2;
-         size -= 2;
+         buffer++;
+         size--;
        }
       return osize - size;
     }
@@ -1660,16 +1664,16 @@ sim_read (SIM_DESC sd, SIM_ADDR addr, unsigned char *buffer, int size)
 
   if (addr >= 0 && addr < SRAM_VADDR)
     {
-      if (addr & 1)
-       return 0;
-      addr /= 2;
-      while (size > 1 && addr < MAX_AVR_FLASH)
+      while (size > 0 && addr < (MAX_AVR_FLASH << 1))
        {
-         buffer[0] = flash[addr].op;
-         buffer[1] = flash[addr].op >> 8;
+          word val = flash[addr >> 1].op;
+
+          if (addr & 1)
+            val >>= 8;
+
+          *buffer++ = val;
          addr++;
-         buffer += 2;
-         size -= 2;
+         size--;
        }
       return osize - size;
     }
This page took 0.025483 seconds and 4 git commands to generate.