| |
Krill
Registered: Apr 2002 Posts: 2839 |
TIL: The instruction after SEI can be executed before a pending IRQ is handled
As described here: http://visual6502.org/wiki/index.php?title=6502_Timing_of_Inter..
I never knew this, after all those years, and thought i'd share this as a heads-up.
Thanks to Bubis for pointing it out to me! |
|
... 89 posts hidden. Click here to view all posts.... |
| |
lft
Registered: Jul 2007 Posts: 369 |
Yes, but the point is that if you do
lda #$7f
sta $dc0d
before turning off interrupts, then you don't have to clear the flag. If there is an interrupt pending, it will be invoked right now, once. Then it will be off.
On a side note, there is no need to disable CIA2 interrupts (NMI) at the beginning of a program that is launched from BASIC. They aren't active in that environment. |
| |
Krill
Registered: Apr 2002 Posts: 2839 |
Quoting MagerValpI think you're reading the trace wrong. The next instruction following an SEI can be fetched, but not executed if an IRQ occurs during the SEI. The instruction will be re-fetched and executed following the RTI. You're probably right, that makes a lot more sense. The text on visual6502.org is a bit ambiguous.
Oswald: I guess it's safe to assume that previously installed interrupt handlers would acknowledge their IRQs until you disable them. So don't exchange one cargo cult for another. :)
But anyhow, SEI/CLI is required when you install interrupt hooks on top of pre-existing handlers, especially if you have no knowledge of which interrupts are currently active and shall remain so. |
| |
Oswald
Registered: Apr 2002 Posts: 5017 |
ah right, my eye didnt catch the instead :)thanks. |
| |
Krill
Registered: Apr 2002 Posts: 2839 |
Quoting lftOn a side note, there is no need to disable CIA2 interrupts (NMI) at the beginning of a program that is launched from BASIC. You do, however, want to trigger one NMI that you never acknowledge, so the pesky restore key won't disrupt your meticulously hand-crafted timing. :) |
| |
Oswald
Registered: Apr 2002 Posts: 5017 |
I dont care about restore, if the user wants to crash the demo let it be. its his own fault :) |
| |
lft
Registered: Jul 2007 Posts: 369 |
The enemy (nmi?) cannot push RESTORE if you disable his hand. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11111 |
Quote:I dont care about restore
i've switched to just pointing the NMI vectors to some silly routine that punishes the bastard who pressed RESTORE accordingly :) |
| |
TWW
Registered: Jul 2009 Posts: 541 |
Ground the fucker ^^ |
| |
MagerValp
Registered: Dec 2001 Posts: 1055 |
For reference, here's a bog standard raster IRQ setup that'll work every time if run from basic:
lda #$7f
sta $dc0d
lda #$35
sta $01
lda #$1b
sta $d011
lda #$fa
sta $d012
lda #<irq
sta $fffe
lda #>irq
sta $ffff
lda #1
sta $d019
sta $d01a
NB: Clearing pending IRQs with $d019 is not strictly necessary if you run from a freshly reset machine (the kernal writes $0f to $d019 on reset), but if something else ran before and exited to the basic prompt there may be an unacknowledged raster IRQ pending. |
| |
Krill
Registered: Apr 2002 Posts: 2839 |
Quoting MagerValpbut if something else ran before and exited to the basic prompt there may be an unacknowledged raster IRQ pending. Hmm, if whatever ran before left unacknowledged interrupts behind, wouldn't they trigger time and again without ever being acknowledged, so the BASIC prompt would never be reached and IRQs be handled in an endless loop? :) |
Previous - 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 - Next |