diff options
author | 2016-04-27 21:54:19 +0200 | |
---|---|---|
committer | 2016-04-27 21:55:58 +0200 | |
commit | 5607ec442e87d65df36fde30ee5e4dc3a22aee81 (patch) | |
tree | 4f0bdd8d3d820591c111e280973ea52076f02798 /src/devices/cpu/h8/h8_intc.cpp | |
parent | 04f0d72045f996f3d973ffe456e6d428e5c31626 (diff) |
h8: Add dtc, dma, watchdog (WIP) [O. Galibert]
h8: Fixes, lots of [O. Galibert]
cybiko: Make work a little emore, add v1 flash [O. Galibert]
Diffstat (limited to 'src/devices/cpu/h8/h8_intc.cpp')
-rw-r--r-- | src/devices/cpu/h8/h8_intc.cpp | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/devices/cpu/h8/h8_intc.cpp b/src/devices/cpu/h8/h8_intc.cpp index 7a77a988aa0..ad41b2cc2cd 100644 --- a/src/devices/cpu/h8/h8_intc.cpp +++ b/src/devices/cpu/h8/h8_intc.cpp @@ -46,7 +46,7 @@ void h8_intc_device::device_reset() int h8_intc_device::interrupt_taken(int vector) { if(0) - logerror("%s: taking internal interrupt %d\n", tag(), vector); + logerror("taking internal interrupt %d\n", vector); pending_irqs[vector >> 5] &= ~(1 << (vector & 31)); if(vector >= irq_vector_base && vector < irq_vector_base + 8) { int irq = vector - irq_vector_base; @@ -64,9 +64,11 @@ int h8_intc_device::interrupt_taken(int vector) void h8_intc_device::internal_interrupt(int vector) { if(0) - logerror("%s: internal interrupt %d\n", tag(), vector); - pending_irqs[vector >> 5] |= 1 << (vector & 31); - update_irq_state(); + logerror("internal interrupt %d\n", vector); + if(!cpu->trigger_dma(vector)) { + pending_irqs[vector >> 5] |= 1 << (vector & 31); + update_irq_state(); + } } void h8_intc_device::set_input(int inputnum, int state) @@ -110,13 +112,13 @@ READ8_MEMBER(h8_intc_device::ier_r) WRITE8_MEMBER(h8_intc_device::ier_w) { ier = data; - logerror("%s: ier = %02x\n", tag(), data); + logerror("ier = %02x\n", data); update_irq_state(); } void h8_intc_device::check_level_irqs(bool force_update) { - logerror("%s: irq_input=%02x\n", tag(), irq_input); + logerror("irq_input=%02x\n", irq_input); bool update = force_update; for(int i=0; i<8; i++) { unsigned char mask = 1 << i; @@ -138,7 +140,7 @@ READ8_MEMBER(h8_intc_device::iscr_r) WRITE8_MEMBER(h8_intc_device::iscr_w) { iscr = data; - logerror("%s: iscr = %02x\n", tag(), iscr); + logerror("iscr = %02x\n", iscr); update_irq_types(); } @@ -223,7 +225,7 @@ READ8_MEMBER(h8h_intc_device::isr_r) WRITE8_MEMBER(h8h_intc_device::isr_w) { isr &= data; // edge/level - logerror("%s: isr = %02x / %02x\n", tag(), data, isr); + logerror("isr = %02x / %02x\n", data, isr); check_level_irqs(true); } @@ -235,7 +237,7 @@ READ8_MEMBER(h8h_intc_device::icr_r) WRITE8_MEMBER(h8h_intc_device::icr_w) { icr = (icr & (0xff << (8*offset))) | (data << (8*offset)); - logerror("%s: icr %d = %02x\n", tag(), offset, data); + logerror("icr %d = %02x\n", offset, data); } READ8_MEMBER(h8h_intc_device::icrc_r) @@ -256,7 +258,7 @@ READ8_MEMBER(h8h_intc_device::iscrh_r) WRITE8_MEMBER(h8h_intc_device::iscrh_w) { iscr = (iscr & 0x00ff) | (data << 8); - logerror("%s: iscr = %04x\n", tag(), iscr); + logerror("iscr = %04x\n", iscr); update_irq_types(); } @@ -268,7 +270,7 @@ READ8_MEMBER(h8h_intc_device::iscrl_r) WRITE8_MEMBER(h8h_intc_device::iscrl_w) { iscr = (iscr & 0xff00) | data; - logerror("%s: iscr = %04x\n", tag(), iscr); + logerror("iscr = %04x\n", iscr); update_irq_types(); } @@ -338,7 +340,7 @@ READ8_MEMBER(h8s_intc_device::ipr_r) WRITE8_MEMBER(h8s_intc_device::ipr_w) { ipr[offset] = data; - logerror("%s: ipr %d = %02x\n", tag(), offset, data); + logerror("ipr %d = %02x\n", offset, data); } READ8_MEMBER(h8s_intc_device::iprk_r) |