Found it.
So there's nothing wrong with the actual code as far as I can tell.
The problem of it dropping a scanline seems to be based on how it exits the timer-based overscan section. Enabling or disabling the various demo subroutines alter how the extra line is dropped obviously, but so does adding nop's and/or WSYNC's right before it enters the:
; ------------- Enter Overscan Logic Above ------------------- DisplayOverScanLoop lda INTIM ; 2, 3 ; bne DisplayOverScanLoop ; 2, 2/3; wait for Overscan timer sta WSYNC ; 2, 3 ; finish waiting for the current line jmp StartOfFrame ; 3, 3 ;
at the end of it.
For instance, adding a sta WSYNC + nop right before entering that gives a fairly stable-looking scanline count in z26 - except when I push against a vertical wall (as I try to go left or right) at which point it alternates between 261/262.
Alternately, if I just remove that nop and hit a WSYNC prior to entering the code above, the screen appears to ALWAYS give out a 261 count - but turns full-circle and gives a constant 262 so long as I'm moving in ANY direction on the controller. (regardless of if it hits a wall or not)
This is with the demo programs off of course.
...
*turns them on and checks hardware*
Ok... so z26 tries to tell me it's giving a solid 262 (I don't see a blinking 1 in there) but at the same time it's still rolling on hardware. Is there something special about timer-based overscan/vblank's that I'm not aware of? ![]()

0 Comments
Recommended Comments
There are no comments to display.