Login
Back to forumReply to this topicGo to last reply

Posted By

KiCHY
on 2016-12-26
08:23:08
 IRQs from different sources

Hi,

I never implemented multiple IRQs from different sources before. How to handle a timer interrupt ($ff00/01) and a raster interrupt simultaneously? My IRQ handler routine starts when any of these happens and I can find the interrupt cause in $ff09. But what happens if, for example, I'm handling the raster interrupt and during doing this, the timer reaches its value and another interrupt wants to occur?
- Is it skipped entirely?
- After done the current interrupt, it fires again with the new flag in ff09?
- My IRQ handler fires again, breaking the currently handled interrupt?
- Other?

Posted By

Litwr
on 2016-12-26
08:59:31
 Re: IRQs from different sources

Just look at $ff09. It keeps the interrupt request flags. You should reset the flag manually in the end of your interrupt handler. So it is easy, just work with $ff09. You may lose interrupt only if your handler is too slow and continues to work when the next two the same interrupts happen.

Posted By

JamesC
on 2016-12-26
09:07:55
 Re: IRQs from different sources

Are you SEI (stopping interrupts) and then CLI (restoring interrupts) in your IRQ handler?

If IRQs are still on, they will still occur. wink

Posted By

Litwr
on 2016-12-26
09:49:58
 Re: IRQs from different sources

>Are you SEI (stopping interrupts) and then CLI (restoring interrupts) in your IRQ handler?
It is done automatically. wink Someone needs only to check and to reset $ff09 and doesn't forget RTI.

Posted By

JamesC
on 2016-12-26
19:53:53
 Re: IRQs from different sources

Ha. I grabbed my Programmer's Reference Guide and looked up SEI and CLI ... then realized you're talking about TED interrupts, not CPU interrupts. My apologies for not catching this originally.

Posted By

Litwr
on 2016-12-28
10:21:20
 Re: IRQs from different sources

I was about interrupt handler structure and I can think that SEI/CLI are useful to install this handler.



Back to topReply to this topic


Copyright © Plus/4 World Team, 2001-2024. Support Plus/4 World on Patreon