+Karl G Posted July 19, 2018 Share Posted July 19, 2018 I'm surprised that I wasn't able to find something like this when I searched, but is there a detailed diagram or formula that can be used to know the exact cycle range for each of the GRPx register writes? This would be relative to the position of the leftmost portion of the image (or leftmost digit in the case of a 6-digit score). Bonus points for how the timing would differ for TIA revisions that have "special" timing (which I've confirmed is the case with my Atari Jr.). Thanks in advance for any help! Quote Link to comment Share on other sites More sharing options...
+SpiceWare Posted July 19, 2018 Share Posted July 19, 2018 Don't believe so. The trick page at MiniDig has a moveable 48 pixel routine written by Eckhard Stolberg back in 1998 that you might find useful. The links for it are the source, a ROM, and the original post it appeared in on the old Stella mailing list. 2 Quote Link to comment Share on other sites More sharing options...
vidak Posted July 20, 2018 Share Posted July 20, 2018 I think my compilation of the stella mailing list might have some information on it...https://bootlicker.party/commo-dig/just Ctrl+F the whole page for "48 pixel" etc 2 Quote Link to comment Share on other sites More sharing options...
Joe Musashi Posted July 21, 2018 Share Posted July 21, 2018 David Crane's iphone app had a nice description of the 48 pixel kernel. Unfortunately, it's not on the app store anymore, but you can see some pictures here: http://atariage.com/forums/topic/198577-im-having-a-problem-moving-objects-horizontaly/?do=findComment&comment=2531796 I do not think there is a timing difference for GRP writes depending on the TIA, just the late HMOVEs can have different results on the junior. 1 Quote Link to comment Share on other sites More sharing options...
+Karl G Posted July 22, 2018 Author Share Posted July 22, 2018 Okay, let me test my understanding here in terms of how the normal case works for the 48-pixel image, then narrow the scope of my question. So, to draw a 48 pixel image or a 6-digit score, I would first set each of the players to be 3 copies, close, then horizontally position player0 to the left edge of the desired image placement, and player1 to 8 color clocks to the right of player0. VDELP0 and VDELP1 are set so that writes to the GRPx registers are delayed until the other player's GRPx register is updated. Now, my first write to GRP0 would go to a buffer rather than updating the register. My first write to GRP1 would also go to a buffer, but that same operation then updates the actual GRP0 register with the previously buffered value. Now, presumably each operation that results in updating the actual GRPx register needs to happen before the corresponding copy of the player graphic is displayed, but can this be immediately beforehand? E.g. if the write operation that updated the actual GRP0 register ends on cycle 30, and a copy of the player0 graphic is at position 22 on the visible screen (90 TIA cycles), then will that update be in time for it to be drawn correctly with the updated graphics? I'm wondering if I made the timing for this to be more arcane than it actually is. :-) Quote Link to comment Share on other sites More sharing options...
Thomas Jentzsch Posted July 22, 2018 Share Posted July 22, 2018 There is an one color clock delay when writing to the GRPx registers. So in your example the first pixel would be updated too late. 1 Quote Link to comment Share on other sites More sharing options...
+Karl G Posted July 22, 2018 Author Share Posted July 22, 2018 Thanks! Quote Link to comment Share on other sites More sharing options...
alex_79 Posted July 23, 2018 Share Posted July 23, 2018 You might find useful stepping through the code of games using the 48 pixels routine in the Stella debugger. You'll see how the 2 GRPx registers for each player are updated and also the delays ("Queued Writes" in the bottom area of the TIA tab) 1 Quote Link to comment Share on other sites More sharing options...
NoLand Posted July 25, 2018 Share Posted July 25, 2018 (edited) I tried to provide a bit of an analysis here: http://www.masswerk.at/rc2018/04/10.html (Includes a timing diagram showing when values are passed/copied to any registers.) Edited July 25, 2018 by NoLand 2 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.