| |
MC Account closed
Registered: Jul 2009 Posts: 71 |
Is this a proper stable raster?
I was searching for stable raster interrupts and only found ugly looking code tbh. I came up with this little trick and wonder if it will be stable under all conditions...
It is on VICE but I haven't had the chance to test this interrupt on a real machine yet... This is what I do in the IRQ:
raster1: lda #rast1
br1: cmp $d012
bne br1
nop
nop
nop
nop
nop
lda #$00
sta $d020
sta $d021
(rest of interrupt stuff goes here)
The code simply compares the value in $d012 with the value stored in there by the last IRQ call and waits until the raster makes the switch, then a built in delay of 5 x nop makes sure we are in between the left and right border flip. (4 x nop and 6x nop also seem to work so I chose the safe value of 5 nops).
It SEEMS to work properly but I forgot how I used to do stuff before my 20 year lunchbreak...
I managed to open up the border with my second attempt at an all dancing & singing piece of raster interrupts with music-assembler tunes playing. Next up is a bouncy sprite scroller in the lower (and side) border area.
|
|
... 3 posts hidden. Click here to view all posts.... |
| |
Mr. SID
Registered: Jan 2003 Posts: 424 |
With that you probably only were able to open the top/bottom border, not the sideborder, right?
Btw, in VICE you can set the VIC border size to Normal, Full or Debug. The latter option will show you that your raster is not stable, but flickering somewhere off-screen. Good enough for a lot of things, but not perfectly stable.
|
| |
TPM
Registered: Jan 2004 Posts: 110 |
heheh.. that's exactly the way i did back then. Put some nops here and there, have a jmp * for the main program and voila.
I didn't know it was unstable like hell (well, i did know, but had no solution for it), but by playing with those nops it became stable enough to do the thing.
maybe that's why i hated to open borders.. i couldn't manage it, now i know why :D |
| |
daison
Registered: May 2005 Posts: 90 |
There's a forum post floating around here in which I make the same mistake based on the confusion of what a stable raster actually is ;)
A stable raster is basically the luxury of having an exact X position on where your IRQ execution starts.
Your raster starts 'somewhere' off screen. Which is nice for rasterbars and many other cool fx, but this is not yet what stable means.
With a stable raster you should be able to see a non flickering line starting somewhere on-screen.
This way you can for example open the sideborder by adjusting the 38/40 column setting *exactly* in the 40th column. Without a stable raster, you'll never hit the 40th column each frame.
|
| |
Frantic
Registered: Mar 2003 Posts: 1648 |
Imagine the amount of effort that would have been spared throughout the years if Commodore had simply included a switch in the VIC to disable the border. ;) |
| |
wacek
Registered: Nov 2007 Posts: 513 |
Quote: Imagine the amount of effort that would have been spared throughout the years if Commodore had simply included a switch in the VIC to disable the border. ;)
Imagine how much poorer the scene history would have been if they did :) |
| |
enthusi
Registered: May 2004 Posts: 677 |
IMHO it always helps to have SOME SID tune playing inbetween.
You can more less be certain of something being stable or not.
JMP * oder BVC * wont do any good there. |
| |
MC Account closed
Registered: Jul 2009 Posts: 71 |
well my last raster plays music and jumps to $ea31... It seems stable enoug to start outside screen but it does flicker one cycle.
Thanks for the infos |
| |
Mr. SID
Registered: Jan 2003 Posts: 424 |
Have a look at Fungus' double irq stable raster, it's pretty simple:
http://codebase64.org/doku.php?id=base:double_irq |
| |
MC Account closed
Registered: Jul 2009 Posts: 71 |
Thanks. I dropped the idea of having a stable raster running as I'm now using two interrupts (experimenting with the NMI to handle sfx like vibrato, pulse modulation and really fast arps ) while the raster IRQ handles the music tracking.
Experiments experiments I do love em...
|
| |
Testa Account closed
Registered: Oct 2004 Posts: 197 |
I always do this:
Init interrupt:
Disable timer interrupts
Enable raster interrupt
Interrupt vector $ffffe/$ffff
$01 = $35
$d012 = $2c
ack interrupt before clear the interrupt flag
Stable1:
inc $d012
inc $d019
cli
stable2:
nop
nop
nop
nop
nop
nop
nop
nop
jmp stable2
irq
ldx #$2c
cpx $d012
beq stable1
dec $d012
inc $d019
ldy #5
dey
bne *-1
nop
inx
cpx $d012
beq stable3
stable3
raster is stable here
don't know if it is sloppy code, but it seems to work...
|
Previous - 1 | 2 - Next |