| |
Testa Account closed
Registered: Oct 2004 Posts: 197 |
read $dc0d
when i set up a raster irq i always do lda #$7f sta $dc0d lda $dc0d.. no problem but there is one thing i dont get:
at $ea7e there is also a lda $dc0d.. can i savely skip the lda $dc0d in the irq set up and end the irq with a jmp $ea7e... or is there a diffirence??? |
|
| |
Ninja
Registered: Jan 2002 Posts: 411 |
I guess your IRQs are all VIC-based. So, I would recommend to clear the CIA-irq-latch once right after disabling the CIA-IRQs (that's what you seem to do anyhow). Then, you don't need to clear it in every VIC-based IRQ.
Besides this, there is no difference if you read the latch in your code or the ROM does it for you. As long as it gets read somehow somewhere... |
| |
MagerValp
Registered: Dec 2001 Posts: 1078 |
Just do lda #$7f sta $dc0d *without* using SEI. If the IRQ is triggered while you're setting the control register, the kernal IRQ handler will clear $dc0d for you before continuing. |
| |
HCL
Registered: Feb 2003 Posts: 728 |
I have another related question.. I think i've heard something like when you enter an interrupt, you can tell from a certain register flag if you enterer because of a raster interrupt or a timer interrupt (vic or cia).. Something like
tehIrq:
bvs rasterIrq
bvc timerIrq
The above example doesn't work (i tried), but it should be something similar.. The best alternative i've figured out myself is:
tehIrq
pha
lda $dc0d
bpl rasterIrq
bmi timerIrq
..but that's not like the coder pR0n i want to do :/. Anyone? |
| |
Ninja
Registered: Jan 2002 Posts: 411 |
HCL: This is most probably a misunderstanding. You can distingiush between a BRK and an IRQ using the B-flag. But not VIC or CIA.
What I usually use to distinguish is:
ASL $D019
BCS VIC
...CIA here...
Bonus: you get the acked vic_irq for free (and a carry in a consistent state, woohoo!) ;) |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: I have another related question.. I think i've heard something like when you enter an interrupt, you can tell from a certain register flag if you enterer because of a raster interrupt or a timer interrupt (vic or cia).. Something like
tehIrq:
bvs rasterIrq
bvc timerIrq
The above example doesn't work (i tried), but it should be something similar.. The best alternative i've figured out myself is:
tehIrq
pha
lda $dc0d
bpl rasterIrq
bmi timerIrq
..but that's not like the coder pR0n i want to do :/. Anyone?
This is how I normally do it:
lsr $d019 ;ack potential raster irq and move the state to carry.
bcs rasterirq
timerirq:
bit $dc0d ;since it wasn't a raster irq, then it was a timer => ack it.
rti
rasterirq:
rti
|
| |
Ninja
Registered: Jan 2002 Posts: 411 |
JackAsser: You cycle waster; jump to $dc0c after setting it to $40! ;D |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: JackAsser: You cycle waster; jump to $dc0c after setting it to $40! ;D
Ofcourse... but this was the school book example. :D |
| |
Ninja
Registered: Jan 2002 Posts: 411 |
school-book example? for HCL? :) |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: school-book example? for HCL? :)
Well, the "BEST" alternative he came up with was right out lame. ;D Wouldn't wanna raise the bar too high. |
| |
Ninja
Registered: Jan 2002 Posts: 411 |
*rotfl* :) |
... 7 posts hidden. Click here to view all posts.... |
Previous - 1 | 2 - Next |