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)); } } } }
void SubIntrHandler::queueUpWithArg(int arg) { if (!enabled) return; pendingInterrupts.push_back(PendingInterrupt(intrNumber, number, arg)); }
void SubIntrHandler::queueUp() { if (!enabled) return; pendingInterrupts.push_back(PendingInterrupt(intrNumber, number)); };
// 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)); }