Ejemplo n.º 1
0
void IntrHandler::queueUp(int subintr) {
	if (subintr == PSP_INTR_SUB_NONE) {
		pendingInterrupts.push_back(PendingInterrupt(intrNumber, subintr));
	} else {
		// Just call execute on all the subintr handlers for this interrupt.
		// They will get queued up.
		for (auto iter = subIntrHandlers.begin(); iter != subIntrHandlers.end(); ++iter) {
			if ((subintr == PSP_INTR_SUB_ALL || iter->first == subintr) && iter->second.enabled && iter->second.handlerAddress != 0) {
				pendingInterrupts.push_back(PendingInterrupt(intrNumber, iter->first));
			}
		}
	}
}
Ejemplo n.º 2
0
void SubIntrHandler::queueUpWithArg(int arg)
{
	if (!enabled)
		return;

	pendingInterrupts.push_back(PendingInterrupt(intrNumber, number, arg));
}
Ejemplo n.º 3
0
void SubIntrHandler::queueUp()
{
	if (!enabled)
		return;

	pendingInterrupts.push_back(PendingInterrupt(intrNumber, number));
};
Ejemplo n.º 4
0
// Handle an interrupt request from a device
void m68000::InterruptRequest(BasicDevice *device, int level) {
  // The 68000 has seven levels of interrupts
  if (level > 7)
    level = 7;
  else if (level < 1)
    level = 1;

  pending_interrupts.push(PendingInterrupt(level, device));
}