Jump to content
Random Terrain

Keeping Track of the Scanline Count with Stella

Recommended Posts

There are 4 ways you can use Stella (the Atari 2600 emulator) to make sure your program isn't taking too long and has a scanline count at a steady 262 for NTSC and PAL/60 games or 312 for PAL/50 games:


The Fast, On the Fly Way

Hit Alt + L while a game is running in Stella to toggle the frame stats. It displays the scanline count, frames per second, display format, and bankswitch type. It's very useful and it might be all you'll need. Sometimes a game will have little sneaky spots you could miss with Alt + L, so you might want to scroll down and try the Faster, Easier Way that uses the debugger to automatically stop the game any time the scanline count goes above 262 (or 312 for PAL/50 games).



The Slow and Clunky Way

Run your program using Stella and hit the key above Tab (`) for the debugger. Watch the box next to Scanline: while holding down Alt + f and see if the number changes from frame to frame. (Holding down Alt + f is like quickly clicking on the Frame +1 button.) If it stays at 262, there's no problem, at least for the moment. The problem with using Alt + f is that it's still kind of slow and you could miss something. The good news is that there is a better way to make sure that no frame ever goes over 262 scanlines (or 312 for PAL/50 games).



The Typing is Fun Way

The next fastest way to check if you're going over 262 is to type breakif {_scan>#262} in the Prompt display, hit the Enter key, then hit the key above Tab (`) to exit the debugger. If your program goes over 262, the debugger will automatically reopen. (Replace 262 with 312 for PAL/50 games.)



The Faster, Easier Way

For an even easier way to do this with no tedious typing, you can make a file that will run every time you open the debugger. This is how to do it using a Windows PC:

  • Open Notepad, then copy and paste breakif {_scan>#262} in there.
    _
  • Select Save As under the File menu and locate the Stella folder which is now in your User folder under AppData > Roaming.
    _
  • Copy and paste autoexec.stella into the Save As file name box and select All Files (*.*) from the Save as type drop down menu. (That fixes it so you don't have to go back and remove ".txt" from the file name when you're finished.)

That's it. You're done. Now when you test a game you're working on, all you have to do is run it in Stella, hit the key above Tab (`) for the debugger, which activates the code in the autoexec.stella file, then hit the key above Tab (`) again to exit the debugger. From then on (until you close Stella) the debugger will automatically reopen if your program goes over 262. The file only runs after you open and close the debugger, so you can play other games normally as long as you don't open the debugger. (Replace 262 with 312 for PAL/50 games.)

 

Update:


To make it even easier, I zipped up the autoexec.stella file, so all you have to do is unzip it and put it in the Stella folder under AppData > Roaming:

autoexec.zip


Here is a program that goes over 262 when you move the sprite. You can use it to see if the Faster, Easier Way is working correctly:

test_over_262_find_border_coordinates.bin



Related Links:

How to Attach Files and Images

Posting Tips for New bB Users


Easy Software Versioning

  • Like 4

Share this post


Link to post
Share on other sites

Detecting Too Few Scanlines

 

Start the game, and hit ~ to enter the debugger. Scroll up just a little bit and look for some code similar to these two examples:

 

Example 1

post-7074-0-23630200-1352665331_thumb.png

 

Example 2

post-7074-0-81463300-1352665777_thumb.png

 

 

Using the address (the line that the very first VSYNC is on), enter the following "breakif" statement in the prompt tab inside of the debugger, and then hit enter.

 

For example 1, the address is 194E, and you would enter:

breakif {pc==194E && _scan<#259}

 

For example 1, the address is B08E, and you would enter:

breakif {pc==B08E && _scan<#259}

 

 

FYI, these scanline settings are tuned for NTSC, VSYNC takes 3 lines or the 262 lines total. So 262 - 3 = 259.

  • Like 1

Share this post


Link to post
Share on other sites

Detecting Too Few Scanlines

 

FYI, these scanline settings are tuned for NTSC, VSYNC takes 3 lines or the 262 lines total. So 262 - 3 = 259.

 

At some point, I plan to add a 'pseudo-op' specifically for this case (so you wouldn't have to figure out the actual PC to use). When I find the time ...

Share this post


Link to post
Share on other sites

This comment was made before Stella was at Github. Now that it is, the proper way to address it is to create an issue here. The fact that it wasn't mentioned anywhere else is why I forgot about it for 6 years :(

Share this post


Link to post
Share on other sites

OK, fair enough. That being said, if anyone want the functionality to detect undercycling (is that even a word), I still suggest adding an issue for it on Stella Github.

Share this post


Link to post
Share on other sites

OK, fair enough. That being said, if anyone want the functionality to detect undercycling (is that even a word), I still suggest adding an issue for it on Stella Github.

So is the symptom of under cycling a black screen?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...