Hi Fabrice,

i finally found time to redesign the irq stuff.

Am Friday 05 March 2010 00:19:46 schrieben Sie:
> In order to have a clearer view, you should consider the PIC as external
>   to the CPU and IM/IP/irq_state as a state of the PIC, not the CPU (you
> can implement CSR_IM and CSR_IP as callbacks to the PIC code).
>
> The CPU only "sees" CPU_INTERRUPT_HARD = ((im & ip) != 0), which is set
> by the PIC as in your code. It also sees "IE".
>
> In order to let IRQs be handled by the CPU, then you must terminate the
> translated block after instructions modifying IE/IP/IM (this is another
> problem in your code I forgot to spot).
Could you please have a quick look at the sources again. I changed the irq 
handling according to your suggestions.

The lm32_pic.c now handles the IM and IP registers. There are four new op 
helper functions, calling the approriate methods within the lm32_pic module. 
These need the lm32_pic state object, which is referenced in the CPUState.

Is there any better way than doing the following in the machine initializer:
  dev = sysbus_create_simple("lm32,pic", -1, *cpu_irq);
  env->pic_handle = (struct lm32_pic*)dev;

> Then helper_update_interrupt() can be removed.
it is now ;)

-- 
wkr,
  Michael
_______________________________________________
http://lists.milkymist.org/listinfo.cgi/devel-milkymist.org
IRC: #milkym...@freenode
Webchat: www.milkymist.org/irc.html
Wiki: www.milkymist.org/wiki

Reply via email to