Commit 14d1c0ae13a659f049bf5907eaaeb6a6c40af27a
authorMichel Pollet <buserror@gmail.com>
Sat, 10 Apr 2010 10:35:32 +0000 (11:35 +0100)
committerMichel Pollet <buserror@gmail.com>
Sat, 10 Apr 2010 10:35:32 +0000 (11:35 +0100)
IRQ callback changes the AVR memory even if the pcint is
not present.

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

index f9af6348add1ab1b737fa9ab50c1bfd417a0a560..32cf5f919a90a28c16505622d0beaa7c21c4c7d9 100644 (file)
@@ -69,13 +69,12 @@ void avr_ioport_irq_notify(struct avr_irq_t * irq, uint32_t value, void * param)
        avr_ioport_t * p = (avr_ioport_t *)param;
        avr_t * avr = p->io.avr;
 
-       //      printf("pcint port%c pcint %02x:%02x\n", p->name, p->r_pcint, avr->data[p->r_pcint]);
-       if (p->r_pcint) {
-               uint8_t mask = 1 << irq->irq;
+       uint8_t mask = 1 << irq->irq;
                // set the real PIN bit. ddr doesn't matter here as it's masked when read.
-               avr->data[p->r_pin] &= ~mask;
-               if (value)
-                       avr->data[p->r_pin] |= mask;
+       avr->data[p->r_pin] &= ~mask;
+       if (value)
+               avr->data[p->r_pin] |= mask;
+       if (p->r_pcint) {
                // if the pcint bit is on, try to raise it
                int raise = avr->data[p->r_pcint] & mask;
                if (raise)