Jump to content

RevEng

+AtariAge Subscriber
  • Content Count

    6,681
  • Joined

  • Last visited

  • Days Won

    10

Everything posted by RevEng

  1. I think that's a great idea. He also needs to add control via the console switches!
  2. Yeah, the usage of those bits is unique to the 7800 running in 7800 mode, and also unique to leaving the INPTCTRL register unlocked. Until the INPTCTRL register is locked, any hits to TIA locations also hit INPTCTRL with the same values. Normally, 7800 games will lock INPTCTRL at boot, making this concern moot. But I sometimes use 7800basic to create utilities that interact with INPTCTRL (e.g. the 7800 utility cart keeps INPTCTRL unlocked at first, so it can peek at the BIOS and generate a CRC signature) so my VBLANK (and other TIA register) usage takes that into account where possible.
  3. I'm not seeing it in the bB standard kernel... am I missing it?
  4. Yeah, don't sweat it. It's some internal access in the emulator tripping them, which I need to track down at some point, but harmless from an emulation standpoint.
  5. I don't have the details at hand right now, but you can tell Defender to ignore everything in a particular folder.
  6. There's always this, which isn't TJ's code, but does have an example of how to write to the avox/savekey eeprom from bB.
  7. Thanks, I'll have a look at it when I get a chance. This weekend is full of family obligations. It may be a matter of the weird wiring on prolines just being incompatible, which would be unfortunate.
  8. I have a QuadTari and plan to integrate it into 7800basic. Are you setting the sticks to one-button mode? QuadTari doesn't support the paddle lines, which the two-button sticks use for the fire buttons.
  9. Good stuff, Andrew. Definitely something that's needed. If you find any value in taking stuff from the 7800 dev wiki TIA guides, help yourself. It already has wiki markup, which might be helpful. I think the "local copy" part of your first post is very important. Stuff tends to go away.
  10. 7800basic v0.17 is now available at the github releases page. Here's what's new since the v0.16 release... support for including and using hiscore.asm in a temporary bank increased maximum number of 8.8 variables to 500. added the "sizeof" statement, which shows the size of a 7800basic routine or data structure at compile time default background color set to black added "drawhiscores player2joy1" to be used when your 2 player mode shares the joy1 stick. hi-score game name or difficulty strings can now display the ' character, by using " in the string added "hiscoreclear" so a game can clear out it's hi-score entry. added a basic hi-score example to the sample directory Enjoy!
  11. RevEng

    AtariVox rev2

    You're welcome. Good luck! The PDF links seem to work for me. Maybe it's a browser thing.
  12. RevEng

    AtariVox rev2

    There's a link to the "Programmer's Guide" in the About the AtariVox topic, in the AtariVox club. I've linked the topic here (and not the Guide itself) because there's other info there you might benefit from.
  13. That's good info for assembly coders, though 7800basic uses it's own HSC/SaveKey unified driver, so it doesn't apply here. The values can be any non-FF value.
  14. newblock should definitely be used to fix a particular situation, as indiscriminate use will burn through your graphics space in the rom. For certain purposes, you need to keep graphics together in the same block - e.g. all tile graphics need to be together in the same block together. e.g. all animation frames for a sprite need to be in the same block. To accomplish that you need to paying attention to where the 7800basic compile message say your graphics went. To group certain graphics together, you put the related incgraphic commands together. When you have a sprite animation straddling two blocks, you can use "newblock" in front of them to shove them all into the new block. (it would be good to see how much space you lost that way, and if it's substantial, then stick some other small graphics before the "newblock") Hopefully that makes sense.
  15. I think Mord was referring to newblock, which ends the current graphics block, and moves on to the next one. Regarding the "WARNING, bad non-variable value" entries, I think it's possible your source code has somehow gotten some weird non-printable characters in it. ADS sometimes does this when you copy and paste text. The problem doesn't seem easily fixed from the ADS side. If you're up to it, you could PM me a zipped copy of your source directory, and I can see if I can get 7800basic to filter out the bad characters. (assuming I'm right here, about the issue you're seeing.)
  16. Impressive! I like the action-infused tilt-maze mechanics. The only suggestion I'd make is to eventually include a difficulty level choice, which would relax the timer.
  17. RevEng

    Popeye 7800

    This one is an oversight on my part. I'll add in " to substitute for '. I should be able to get an updated 7800basic out this weekend, with that change.
  18. My initial thought here was to send a register update to $460 and check how many loops it takes for the ready status to show up in $461, but sometimes the register update is completed in the first loop, so it doesn't appear to be a good heuristic. I was able to reliably get "$60" in the DetectYM variable when XM is there and YM is enabled (and 0 otherwise) using the following code... asm jsr xmym_init_jsr YMDetectRoutine lda #$ff ldx #1 jsr WriteToYM_X ; YM test mode bits all high ldy #255 YMDetectRoutineloop lda $461 bmi YMDetectRoutineloop sta DetectYM ; save the value pulled from the status register lda #0 ldx #1 jsr WriteToYM_X ; reset the YM test mode bits end The init routine just enables the YM within the XM, and clears some program specific memory. The WriteToYM_X sub is at the wiki, though you probably have an equivalent already. I haven't experimented with which test mode bits are important here. It might be good to understand the minimal set required. One problem is the emulators unsurprisingly haven't implemented these test mode bits, since they're undocumented. (beyond the link I provided) So this would be a real-hardware only solution until the emulators catch up.
  19. It's not the HMOVE blanks he's talking about. In the bB standard kernel there's not enough cycles in the blank bit of the scanline, when you enable all of the kernel options he's talking about, so one of colour updates happens during the visible portion of the screen. Freshbrood, this is probably the wrong place to be asking these bB questions, unless you're looking to make your own kernel with priorities that suit you better.
  20. Looks like the kernel code for the "readpaddle" kernel option was compiled in. Double-check your kernel options.
  21. The explanation I've seen, which sounds plausible to me, is that the auto-trading algorithms saw upward movement in the stock and got in on the buying action, which greatly amplified the upward swing. Apparently most of the reddit buyers were using Robinhood for the trades, and Robinhood later blocked all retail users from buying GameStop, but not selling. Buying was, of course, still open to larger non-retail customers who needed to cover their shorts. Now Robinhood is looking at a class action suit, and some congressional reps are calling for an investigation.
  22. It checks for the HSC too. 7800basic uses a unified HSC/SaveKey driver. The issue doesn't seem to manifest on real hardware with CC2 or MPC DevCart, and it's the same routine that's been used in a number of released carts. Not saying the problem isn't fixable in the driver end here, just that I don't see it manifesting anywhere except bupsystem (which is closed source and has no debugger) and now Concerto on real hardware. (which is equally difficulty to extract internal state info from) In BupSystem, the issue is also triggered by the Save Dev Test, though interestingly it reports no device detected before the freeze. This may be a quicker way to replicate the issue in Concerto. Save Dev Test is also in Trebor's Propack, so you may already have it.
  23. You have the dictionary location. (thanks Karl!) The dictionary isn't the speakjet one, since I don't have rights to redistribute that. I took a freely available phoneme dictionary (the CMU one, I think. It's been a while.) and I massaged the phonemes used to the subset of phonemes the AtariVox can produce. The resulting dictionary would have unreasonably ballooned 7800basic, so I culled it to the 2000 most common English words, and then manually added in some common gaming words. When words aren't in the dictionary, a warning to that effect is printed on the console, and 7800basic then runs the word through a very rudimentary english->phoneme converter. The algorithm is my own, and more or less a C conversion of the one I put in my 2600 Spell & Speak. The idea behind this algorithm isn't super accuracy, but rather to allow the coder to spell and misspell words to get the desired speech output. As far as detecting AtariVox vs SaveKey... The Vox functionality is write-only, though in theory I could try to abuse the "Vox ready" line. i..e a detection routine could try to stuff the vox queue, and if the vox ready signal goes away, then it's a vox. Unfortunately there's a few problems with that. The first problem is this approach would take several frames worth of communication, likely causing a noticeable delay during the game's startup. The second problem being a full overflow would knock out the vox; that shouldn't actually happen due to the ready line, but I don't think the benefit is worth tempting fate.
  24. Yes. Like the pokeysound example, there are other statements that affect the header, like "set romsize". Dragonfly is literally the first platform to use this feature of the header, so the majority of assembly games didn't bother. Taking that queue, I didn't put dev time into it, though I may add this in some future release now that Dragonfly is using it. That said, 7800basic includes a program called "7800header". If you run this with an a78 filename (or bin filename) as an argument, it will give you an easy-to-drive menu that allows you to modify/add a header with whatever support you like, including the embedded name. I released tracker tools, namely dmf2asm and xmym tracker. The dmf2asm package includes YM2151 examples for both 7800basic and assembly. So one can add YM2151 music relatively easily to basic and asm games. (you need to learn how to steer the Deflemask tracker, of course, which has it's own learning curve) Given a limited YM2151 audience, I'm not planning on spending dev time on additional YM2151 features. The current level of support was a big lift.
×
×
  • Create New...