mirror of
https://github.com/irmen/prog8.git
synced 2024-12-30 11:30:15 +00:00
52 lines
1.4 KiB
Lua
52 lines
1.4 KiB
Lua
%import palette
|
|
%import textio
|
|
%import syslib
|
|
%zeropage basicsafe
|
|
|
|
; Example that shows a way to handle multiple IRQ sources on the X16.
|
|
; This uses the "NEW" way using the X16 specific interrupt handler routines in cx16.
|
|
; Currently only Vera interrupts are supported. VIA irqs are an exercise for the reader.
|
|
|
|
main {
|
|
sub start() {
|
|
cx16.enable_irq_handlers(true)
|
|
cx16.set_line_irq_handler(150, &irq.line_irq)
|
|
cx16.set_vsync_irq_handler(&irq.vsync_irq)
|
|
|
|
txt.print("\n\n\nx16 irq handlers installed (new style)\n")
|
|
txt.print("red = vsync irq\n")
|
|
txt.print("green = first line irq\n")
|
|
txt.print("blue = second line irq\n")
|
|
}
|
|
}
|
|
|
|
irq {
|
|
sub vsync_irq() -> bool {
|
|
cx16.save_vera_context()
|
|
palette.set_color(0, $f00)
|
|
repeat 1000 {
|
|
cx16.r0++
|
|
}
|
|
palette.set_color(0, $000)
|
|
cx16.restore_vera_context()
|
|
return true
|
|
}
|
|
|
|
sub line_irq() -> bool {
|
|
cx16.save_vera_context()
|
|
if cx16.VERA_SCANLINE_L==150 {
|
|
palette.set_color(0, $0f0)
|
|
sys.set_rasterline(200) ; prepare next line irq
|
|
} else {
|
|
palette.set_color(0, $00f)
|
|
sys.set_rasterline(150) ; back to first line irq
|
|
}
|
|
repeat 500 {
|
|
cx16.r0++
|
|
}
|
|
palette.set_color(0, $000)
|
|
cx16.restore_vera_context()
|
|
return false
|
|
}
|
|
}
|