qemu-2.1.0-m68k.patch 987 B

1234567891011121314151617181920212223242526272829303132333435
  1. --- qemu-2.1.0/hw/m68k/mcf_intc.c 2014-08-01 16:12:17.000000000 +0200
  2. +++ qemu-2.1.0.m68k/hw/m68k/mcf_intc.c 2014-08-12 11:41:52.416975339 +0200
  3. @@ -65,6 +65,10 @@
  4. return (uint32_t)(s->ifr >> 32);
  5. case 0x14:
  6. return (uint32_t)s->ifr;
  7. + /* Reading from SIMR and CIMR return 0 */
  8. + case 0x1c:
  9. + case 0x1d:
  10. + return 0;
  11. case 0xe0: /* SWIACK. */
  12. return s->active_vector;
  13. case 0xe1: case 0xe2: case 0xe3: case 0xe4:
  14. @@ -102,6 +106,20 @@
  15. case 0x0c:
  16. s->imr = (s->imr & 0xffffffff00000000ull) | (uint32_t)val;
  17. break;
  18. + /* SIMR allows to easily mask interrupts */
  19. + case 0x1c:
  20. + if (val & 0x40)
  21. + s->imr = ~0ull;
  22. + else
  23. + s->imr |= (1 << (val & 0x3f));
  24. + break;
  25. + /* CIMR allows to easily unmask interrupts */
  26. + case 0x1d:
  27. + if (val & 0x40)
  28. + s->imr = 0ull;
  29. + else
  30. + s->imr &= ~(1 << (val & 0x3f));
  31. + break;
  32. default:
  33. hw_error("mcf_intc_write: Bad write offset %d\n", offset);
  34. break;