Jump to content

JeffJetton

Members
  • Content Count

    45
  • Joined

  • Last visited

Community Reputation

24 Excellent

About JeffJetton

  • Rank
    Space Invader

Contact / Social Media

Profile Information

  • Gender
    Male
  • Location
    Nashville, TN
  • Interests
    https://github.com/JeffJetton
  • Currently Playing
    dasm
  1. Some of you might be familiar with Ben Eater. He famously posted a series of videos in which he built a basic, 8-bit computer from scratch using TTL components on a bunch of breadboards, clearly explaining the reasoning behind every step. (And when I say "from scratch", I mean he cobbled together the clock, the registers, the ALU... the whole shebang!) Well now he's building a 6502-based computer. Not quite as far down to the bare metal as the previous project, I'd imagine, since he's using a microprocessor chip this time. But I suspect we'll wind up with more useful device when it's all done. The first video in the series came out a few days ago, and it's fantastic: (Most of us here will be able to guess why he used $EA for his data input value before he reveals the answer, of course. 🙂 )
  2. I believe it does not also. A strike gives you ten points, plus the score of your next two balls. It has nothing to do with the score in the next frame, per se. https://slocums.homestead.com/gamescore.html And yeah, I guess you would need to use some sort of array. Put a special "placeholder" in a location for strikes and spares. After each ball, scan for placeholders and update any that you now have enough throws to calculate a value for. I was thinking you could use the stack, but that's a LIFO data structure, and bowling score placeholders are FIFO. 🙂 Disclaimer: I am not much of a bowler. And the last time I bowled, it was candlepin bowling, which is a whole 'nother kettle of fish...
  3. Yeah, it's like something aliens would say while trying to pass themselves off as human: Disguised Alien: "Hello! Would you like to join me, a perfectly normal human person, in competitive pursuits on the electronic display screen?" Skeptical Invitee: "Uh, like, video games? Yeah, I guess. What sort of console do you have?" Disguised Alien (beginning to panic): "It is... a... uh... Atari type video system!"
  4. Wow! That's very cool. I hope you'll post about your progress on the forum as you go.
  5. Hey, this is a family-friendly forum. Let's keep it clean!
  6. I wound up putting my reply back on the previous thread rather than here (since this isn't in programming). (Short answer? I'm stumped too!)
  7. Okay, DigitalAnthony pointed out that, while using RESP0 alone won't get you right on the left edge, the difference isn't the 5 pixels as I described above, but rather only 3. Well heck, he's right. At least in Stella and Javatari. I've attached a slightly-improved version of my test program. I'm putting in an HMOVE, just to be more complete, although it's set up for "zero" and shouldn't change the coarse positioning. I also changed the way the player is drawn, to make it easier to see where it sits. Anyway, here are my recent findings: Sleep Cycles After RESP0 Color Clocks Trigger Pos Est. Draw Pos Emu Actual 0 3 9 0 5 3 5 8 24 0 5 3 10 13 39 0 5 3 15 18 54 0 5 3 17 20 60 0 5 3 18 21 63 0 5 3 19 22 66 0 5 3 20 23 69 1 6 6 21 24 72 4 9 9 22 25 75 7 12 12 So if you do 20 cycles of SLEEP or more, the player lands just where the math says it would. For example, at 20 cycles, you're at cycle 23 after the RESP0. That's 69 color clocks, or at pixel 1 (the 2nd pixel from the left). Take the 5-pixel draw delay into account, and you should be at x-position 6 (7th pixel over), which is what actually happens. (Yeah, the HMOVE bumps it to the right by 8 pixels, but then the clock stuffing of 8 clocks cancels it out exactly, so you're right back where you started.) But a SLEEP of 19, which I'm thinking should put you at position 5 really puts you at 3. And every value lower than that also puts you at 3. So why is there a delay of only 3 color clocks when RESP0 is hit during HBLANK, but a delay of 5 color clocks when it's not? Is this the way the real hardware would work? Or is this a case of the emulator not getting it quite right (and no one really caring because, really, what game would actually rely only on coarse positioning to put an object on the far left anyway? It's an admittedly weird example.) resptest2.asm
  8. Interesting. Heck, maybe I'm the one who's missing something here. 🙂 Are you sure you're not using HMOVE or anything? That your positioning is merely with RESP0 alone? Could you post a code sample?
  9. DigitalAnthony, We were actually just having a rollicking discussion of horizontal position just the other week. You might want to check it out: But to answer your question, yes, you can strobe RESP0 when the TIA is still in horizontal blank because the counter that controls horizontal positioning for P0 is a different one from the "main" horizontal counter. What's interesting is that the P0 counter isn't (normally) counting during horizontal blank. The clock that feeds it is only (normally) connected during the visible part of the horizontal line. The counter is designed to have 160 "ticks" before cycling around*, so it will hit zero at the same time on every scanline unless you mess with it. And RESP0 is one way to mess with it. All it does is reset the P0 counter to zero at the time you strobe it. It doesn't store the current horizontal position or anything like that. It doesn't have too, because player drawing isn't triggered by referencing an actual stored position. It's only triggered by that cycling counter hitting zero. Anyway, if you do the reset during HBLANK, that's no big deal. It's like setting a clock to midnight while it's unplugged. Once the counter starts up again, the beam will be at the left of the screen and (since the counter is now zero) the drawing of player 0 will be instantly triggered. There is a five-cycle delay** between the triggering of the draw and actual drawing, so you can't actually get to the extreme left using RESP0 alone. - Jeff * Okay, technically it only counts 40 times in a cycle, but the counter (when it's running!) only ticks every four color clocks. So it winds up being a 160-clock cycle anyway. Not really an important distinction from the programmer's perspective. ** Only four cycles for missile and ball objects
  10. Wow, yeah. This is like, QWOP-level difficult for me. My high score is... 3. 😞 I do like the wide variety of obstacles. Maybe a "beginner" game variation where they are introduced one-at-a-time, gradually ramping up in difficulty? So you could get used to handling one before having to learn the next? Cool parallax cityscape!
  11. Love how generic that ad copy is. It reads as if it were written before the game had even been designed. You could pretty much use it, Mad-Lib style, for any tie-in game... For example:
  12. If I understand your question correctly... When the tutorial says that "a zero page address is given, and then the value of the X register is added", it doesn't mean added as in "tacked on to the end". It means added mathematically. The address value is summed with the contents of X. So STA $02, X would be equivalent to STA ($02 + $01) or STA $03. Which, in turn, is equivalent to STA $0003.
  13. Amen. 👍 (Some people are weirded out by the whole "whitespace has significance" thing, but to me that just enforces the sort of stylistically-correct formatting readable code should have anyway, even if Python did require curly braces.)
  14. Wow. All of those tricks are masterclass-level stuff, but this particular one is genius!
×
×
  • Create New...