mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
Fix clearing of interrupts in 68hc11 simulator
This commit is contained in:
parent
2990a9f484
commit
a8afa79ab6
@ -1,3 +1,9 @@
|
||||
2000-09-10 Stephane Carrez <Stephane.Carrez@worldnet.fr>
|
||||
|
||||
* interrupts.c (interrupts_update_pending): Clear the mask of
|
||||
pending interrupts here.
|
||||
(interrupts_get_current): Don't clear the mask of pending interrupts.
|
||||
|
||||
2000-09-10 Stephane Carrez <Stephane.Carrez@worldnet.fr>
|
||||
|
||||
* sim-main.h: Define cycle_to_string.
|
||||
|
@ -102,13 +102,21 @@ interrupts_update_pending (struct interrupts *interrupts)
|
||||
{
|
||||
data = ioregs[idef->enable_paddr];
|
||||
if (!(data & idef->enabled_mask))
|
||||
continue;
|
||||
{
|
||||
/* Disable it. */
|
||||
interrupts->pending_mask &= ~(1 << idef->int_number);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* Interrupt is enabled, see if it's there. */
|
||||
data = ioregs[idef->int_paddr];
|
||||
if (!(data & idef->int_mask))
|
||||
continue;
|
||||
{
|
||||
/* Disable it. */
|
||||
interrupts->pending_mask &= ~(1 << idef->int_number);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Ok, raise it. */
|
||||
interrupts->pending_mask |= (1 << idef->int_number);
|
||||
@ -159,14 +167,17 @@ interrupts_get_current (struct interrupts *interrupts)
|
||||
}
|
||||
|
||||
/* Returns the first interrupt number which is pending.
|
||||
The interrupt priority is specified by the table `interrupt_order'. */
|
||||
The interrupt priority is specified by the table `interrupt_order'.
|
||||
For these interrupts, the pending mask is cleared when the program
|
||||
performs some actions on the corresponding device. If the device
|
||||
is not reset, the interrupt remains and will be re-raised when
|
||||
we return from the interrupt (see 68HC11 pink book). */
|
||||
for (i = 0; i < M6811_INT_NUMBER; i++)
|
||||
{
|
||||
enum M6811_INT int_number = interrupts->interrupt_order[i];
|
||||
|
||||
if (interrupts->pending_mask & (1 << int_number))
|
||||
{
|
||||
interrupts->pending_mask &= ~(1 << int_number);
|
||||
return int_number;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user