millfork/examples/c64/rasterbar.mfk

46 lines
1.0 KiB
Plaintext

void main() {
byte colour
byte colour_index
byte wait_for
byte bar_start
byte direction
colour = 0
disable_irq()
vic_cr1 = 0
vic_border = black
bar_start = $50
direction = 1
while true {
wait_for = bar_start
for colour_index, 0, until, colours.length {
colour = colours[colour_index]
while wait_for != vic_raster { }
stabilize(10)
vic_border = colour
wait_for += 2
}
bar_start += direction
if bar_start == $50 { direction = 1 }
if bar_start == $A0 { direction = $ff }
}
}
inline asm void stabilize(byte x){
burn:
DEX
BNE burn
? RTS
}
const array colours = [
$06, $06, $06, $0e, $06, $0e,
$0e, $06, $0e, $0e, $0e, $03,
$0e, $03, $03, $0e, $03, $03,
$03, $01, $03, $01, $01, $03,
$01, $01, $01, $03, $01, $01,
$03, $01, $03, $03, $03, $0e,
$03, $03, $0e, $03, $0e, $0e,
$0e, $06, $0e, $0e, $06, $0e,
$06, $06, $06, $00, $00, $00
]