IRQ1V will be entered on *any* interrupt which is enabled - not just the timers (of which there are 4!), but also other periodic things like VSync, and non-periodic things like keyboard interrupts or the analogue to digital converter finishing a conversion.
So, the first thing your interrupt code needs to do is check if the interrupt has come from the thing you're interested in (e.g. a timer), then you have to acknowledge the interrupt (otherwise as soon as your IRQ routine exits, it'll generate another interrupt immediately), and then you can do whatever update you need.
The Beeb OS uses timer 1 of the System VIA as a 100Hz timer (for processing sound, keyboard, system timers, and probably some other stuff). While you
could alter the period of this timer, it's probably best to leave it alone, otherwise other things in the OS might start to go wrong.
The best thing is to choose a timer of your own in the User VIA, and use that as your interval timer. The way the OS would like you to do this is to intercept IRQ2V (which is entered for unknown interrupts) and service the interrupt there.
Suppose you wanted an interrupt to occur at 60Hz (60 times a second) for some reason. Timer 1 of the User VIA can be set to automatically reload and generate an interrupt with a given period. Here's how you'd set up the timer:
Code:
\ Set interval time in microseconds
interval = 1000000/60
SEI
\ Disable all User VIA interrupts
LDA #&7F
STA &FE6E
\ Enable just Timer 1 interrupt
LDA #&C0
STA &FE6E
\ Set Timer 1 to free-run mode
LDA #&40
STA &FE6B
\ Set Timer 1 interval
LDA #(interval-2) MOD 256
STA &FE64
LDA #(interval-2) DIV 256
STA &FE65
\ Set IRQ2V
LDA #irqhandler MOD 256
STA &206
LDA #irqhandler DIV 256
STA &207
CLI
RTS
Code:
\ Example IRQ handler
.irqhandler
\ Check if it's our interrupt
LDA &FE6D
AND #&40
BEQ exit
\ Acknowledge interrupt
STA &FE6D
\
\ Do something here
\
.exit
LDA &FC
RTI
Well, that's more or less the trick. Hope that's some help!