Jump to content
IGNORED

Need some help with ANTIC screen modes on the 5200, etc.


icbrkr

Recommended Posts

The most faithful emulator I've seen (and the one I've been using for 5200 programming) is Atari800 for MS-DOS, but I'd guess the Windows version is similar. It does the best job I've seen with music & sound effects, and also properly emulates the weird GTIA trick modes. It still has problems, they all do... it just seems to have less of them. And it's also open source, so if I wasn't so lazy I guess I could fix the bugs.

 

calamari

Link to comment
Share on other sites

Speaking as a 5200 programmer, I use VSS in MSDOS mode and Atari800win 3.0 (used to use 2.7 too) in 5200 mode.

 

Atari800win 3.0 is the more accurate of the two.

 

COLORS -- Atari800win is the more accurate, slightly. Both have incorrect palettes though -- Koffi's blue raindrops and eyes are green on the emulators using colors in the $70's or $80's I believe. VSS is more brilliant appearing, which caused me to use darker luminosities until I saw how dark they appeared on the actual 5200.

 

Timing -- Atari800win seems very, very accurate in counting cycles. For an example of this, play the latest Koffi Yellow Kopter demo in both VSS and Atari800win 3.0. The brown mountains in the 'background' on stage 1 -- their peaks are disjointed from the body of the mountains in VSS only. This is because I change COLBK via a DLI, and the timing of which scanline it should start on is different between the 2 emulators. Atari800win's choice of scanline is the accurate one.

 

Speed -- VSS runs a bit faster than Atari800win. Again, I think Atari800win's slightly slower speed is the more accurate one.

 

That being said, I like playing Koffi in VSS more -- it's more bold and faster and louder. But I don't feel comfortable with new revisions until I've tested them on both Emulators.

Link to comment
Share on other sites

When I get back from the CinciClassic I'll have to try them both out.. of course, this is when I recode part of the game I'm working on. Nothing worse than spending hours bughunting and finding *nothing* wrong :? I figure I just did something way wrong and should probably find a better way of coding a routine.

 

Brian

Link to comment
Share on other sites

  • 3 weeks later...

Calamari: Could you give an example on how the Randomizer (RND) works? I see it being used but I don't quite get it. Where I'm having the issue is:

 

DO 'return a random number from 0 to 9.

A=RND

A=A AND 16

LOOP UNTIL A<10

 

A=A AND 16 ... how does that produce a number thats between 0 and 9?

 

Brian

Link to comment
Share on other sites

Calamari:  Could you give an example on how the Randomizer (RND) works?  I see it being used but I don't quite get it.  Where I'm having the issue is:

 

DO 'return a random number from 0 to 9.

 A=RND

 A=A AND 16

LOOP UNTIL A<10

 

A=A AND 16 ... how does that produce a number thats between 0 and 9?

 

Brian

I don't know 5200BAS but I assume the loop will keep going to the DO line. If so, then it will continue to get a random value until it's AND value is less than 10.

Link to comment
Share on other sites

DO 'return a random number from 0 to 9.

 A=RND

 A=A AND 16

LOOP UNTIL A<10

 

A=A AND 16 ... how does that produce a number thats between 0 and 9?

 

A=A AND 16 is actually an error, it should be A=A AND 15, I have corrected it in the command reference, sorry about that. In any case that line isn't the one producing the random number. You could leave the A=A AND 15 out and you'd get a random number from 0 to 9, it would just take longer.

 

Some background: I made RND with a simple equate to RANDOM. So A=RND is the same as A=RANDOM or A=PEEK($E80A). The memory address $E80A is the POKEY random number generator, and it returns values from 0-255.

 

The above code (minus the A=A AND 15 line) gets a random number from 0 through 255. If the number is less than 10 (meaning 0 through 9), it exits the loop, otherwise it gets another number, etc.

 

We don't want to keep testing values from 0 through 255, because there is only a 10/256=3.9% chance of getting a number that is in the 0 through 9 range, so it's slow. In QuickBasic we might use something like A=A MOD 10 to force the number into range, but on the 6502 that would involve division and that's slow too.

 

You can quickly turn bits off with AND. The A=A AND 15 only allows the lower 4 bits to be on (15 decimal=00001111 binary) so it cuts down the possible values of A to 0 through 15. That gives us a 10/16=62.5% chance of getting a number that is in range. Not perfect, but good enough. It won't have to throw away as many values before returning a number in the requested range.

 

Just as a sidenote, 16 decimal=00010000 binary, so the original A=A AND 16 would return values of either 0 or 16. Since 0 is the only one in the range 0 to 9, I'm guessing that you always got 0 as your "random" number :)

 

calamari

Link to comment
Share on other sites

Just as a sidenote, 16 decimal=00010000 binary, so the original A=A AND 16 would return values of either 0 or 16. Since 0 is the only one in the range 0 to 9, I'm guessing that you always got 0 as your "random" number

 

Something like that :) Thanks for the help, it seems to be working. I needed a random generator for the AI in my game.

 

Brian

Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

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...