sanni / cartreader

A shield for the Arduino Mega that can back up video game cartridges.
GNU General Public License v3.0
2.23k stars 226 forks source link

Atari 2600 menu broken #929

Closed plaidpants closed 5 months ago

plaidpants commented 7 months ago

OSCR firmware version

built latest from github and V13.1

OSCR hardware version

HW3

Attach OSCR_LOG.txt file here

NA

System used

Atari 2600

Describe the issue.

Atari2600 menu does not work, cannot move menu selection dot to next item, present in V13.1 and latest github release. Last working version was V12.8

smesgr9000 commented 7 months ago

I have reworked cart selection today. Could you retest - please update your SD card with the newest files. If not could you describe your issue in more detail. I see no change between 12.8 and 13.1 with menu interaction.

plaidpants commented 7 months ago

Thanks, I will give it a go tomorrow.

plaidpants commented 6 months ago

Sill not working, here is a video of both the atari2600 menu not working and the SNES menu working from the same build.

https://github.com/sanni/cartreader/assets/8979271/38e9b746-215b-4ded-8c2b-d0e6e8709adf

https://github.com/sanni/cartreader/assets/8979271/9696f09c-b4f4-462e-ad48-2b591bda2d98

smesgr9000 commented 6 months ago

thats odd. The code handling the menu is the same for SNES and Atari 2600. Could you please check if all other systems are working. Sadly I don't have the hardware to debug this issue. Another solution to pinpoint the issue would be to https://git-scm.com/docs/git-bisect this issue until the commit can be narrowed down.

sanni commented 6 months ago

I am not able to recreate this issue with my HW3. Both V13.1 and the current GitHub code work fine. Also the Atari 2600 module was not changed between V12.8 and V13.1, it's the same file.

Have you enabled any other additional modules or options besides Atari 2600? If not try disabling a big module like NES to see if it's a memory issue.

Are you using the portable Arduino IDE from the release section or your own Arduino IDE setup? If you're using your own Arduino IDE try using the libraries from of the portable release.

plaidpants commented 6 months ago

Gameboy menu works NES menu does not work SNES menu works N64 menu works Genesis menu works Sega Master System menu works Atari 2600 menu does not work

plaidpants commented 6 months ago

Config.h.txt Here is the modified config.h file I used.

plaidpants commented 6 months ago

OK, I think I figured it out, if I turn off ENABLE_VSELECT the atari 2600 menu works, now the question is do I have the ENABLE_VSELECT or not?

PsychoFox11 commented 6 months ago

Not sure what you're asking, but if you have a voltage switch, vselect is off. Vselect is an optional board that sets the voltage for you. If you don't have a voltage switch you probably have one, and can test its functionality with a multimeter, should be 5v on most and 3.3v on GBA/N64. I have no idea what happens if you configure it incorrectly. I have one unit with it, one without it, but always set it for the specific one.

smesgr9000 commented 6 months ago

@PsychoFox11 could you check with his configuration on your device? I think @sanni is right and has properly something to do with memory used. VOLTAGE_SELECT does require more program memory than without.

PsychoFox11 commented 6 months ago

@PsychoFox11 could you check with his configuration on your device? I think @sanni is right and has properly something to do with memory used. VOLTAGE_SELECT does require more program memory than without.

@smesgr9000 Sure, though I'm on HW5 - is vSelect a HW3 option? (I haven't really paid attention to pre-HW5 stuff as it is where I came in).

I can try with vSelect enabled when it shouldn't be though, and use the config file but changing the HW version. Will try to look into that tomorrow (well much later today as it is 4am) most likely.

smesgr9000 commented 6 months ago

ah ok sorry thought you had a HW3 - no i don't think this is useful.

PsychoFox11 commented 6 months ago

@smesgr9000 @plaidpants From the page on vSelect - https://github.com/sanni/cartreader/wiki/Automatic-Voltage-Selection - it is only an option for HW5, so if it works when disabled, on HW3, it sounds like working as intended...

PsychoFox11 commented 6 months ago

It does seem like a good update to throw a compile error of some sort if vselect is enabled and HW is <5 I'd prefer that over having the code ignore it cause people need to know what they are setting.

plaidpants commented 6 months ago

@PsychoFox11 could you check with his configuration on your device? I think @sanni is right and has properly something to do with memory used. VOLTAGE_SELECT does require more program memory than without.

I did try it with only the atari2600 enabled and the problem persisted with the vselect enabled, so seems like there should have been enough memory.

Ancyker commented 6 months ago

It does seem like a good update to throw a compile error of some sort if vselect is enabled and HW is <5 I'd prefer that over having the code ignore it cause people need to know what they are setting.

A warning would also work, i.e.

#warning VSELECT enabled but is only supported on HW5, disabling.
Ancyker commented 6 months ago

@smesgr9000 @plaidpants From the page on vSelect - https://github.com/sanni/cartreader/wiki/Automatic-Voltage-Selection - it is only an option for HW5, so if it works when disabled, on HW3, it sounds like working as intended...

There's nothing technically preventing someone from using VSELECT on HW3, it's just that it doesn't make much sense to since you'd still need to switch the clock. I targeted HW5 with it because it was the only switch left on it other than the power switch.

Ancyker commented 6 months ago

@plaidpants I'm curious, what happens if you update with https://oscr.tools/update ?

Edit: Oh right the Atari menu isn't enabled in that build, well that won't be useful derp 😅

plaidpants commented 6 months ago

@plaidpants I'm curious, what happens if you update with https://oscr.tools/update ?

Edit: Oh right the Atari menu isn't enabled in that build, well that won't be useful derp 😅

I am able to update and the NES menu that did not work previously works now however like you said the atari2600 menu is not enabled in that build.

Ancyker commented 6 months ago

@plaidpants I'm curious, what happens if you update with https://oscr.tools/update ? Edit: Oh right the Atari menu isn't enabled in that build, well that won't be useful derp 😅

I am able to update and the NES menu that did not work previously works now however like you said the atari2600 menu is not enabled in that build.

Reset your Config.h to untouched and only enable the options you checked in the updater.

Specifically, you probably want HW3, ENABLE_UPDATER, and clockgen_installed (if you have the clock generator). Don't enable anything else.

Once you do that, see if it still works. If it does, enable the Atari core (ENABLE_2600) and see if it continues to work.

Don't touch anything other than those options while testing. Enable things one at a time so that if it breaks you know the last option you enabled is what broke it.


The Firmware Updater on OSCR.Tools is a good test because the binaries are cached forever once built -- that means anyone selecting the same options as you is getting literally the exact same binary. This helps rule out a compilation bug specific to your system.

plaidpants commented 6 months ago

Rebuild with HW3, ENABLE_UPDATER, and clockgen_installed, all menus work, added ENABLE_2600, still works.

smesgr9000 commented 6 months ago

is there a TODO open?

plaidpants commented 6 months ago

There was a discussion about adding a compile warning or error if the wrong combinations of defines was encountered. That's all I think was to-do.

On Mon, May 20, 2024, 2:41 AM smesgr9000 @.***> wrote:

is there a TODO open?

— Reply to this email directly, view it on GitHub https://github.com/sanni/cartreader/issues/929#issuecomment-2120073321, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACEQGRY5KKXOFYMZTFXGPRDZDHAMJAVCNFSM6AAAAABGQYQ7SCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMRQGA3TGMZSGE . You are receiving this because you were mentioned.Message ID: @.***>

Ancyker commented 6 months ago

Yeah, there's not much to do here. They enabled a hardware option in the firmware that their hardware doesn't have.

Ancyker commented 6 months ago

Btw, the reason it caused that is VSELECT on HW5 connects to PD7 for toggling the voltages. On HW5 this was the status LED, but on HW3 it's the input button:

# if defined(HW5) && !defined(ENABLE_VSELECT)
  /**
   * HW5 has status LED connected to PD7
   * Set LED Pin PD7 to Output
   **/
  DDRD |= (1 << 7);
  PORTD |= (1 << 7);
# elif defined(ENABLE_VSELECT)
  /**
   * VSELECT uses pin PD7
   * Set LED Pin PD7 to Output
   **/
  DDRD |= (1 << 7);
# else /* !defined(HW5) && !defined(HW5) */
  /**
   * HW1-3 have button connected to PD7
   * Set pin PD7 to input for button
   **/
  DDRD &= ~(1 << 7);
# endif /* HW5 &| ENABLE_VSELECT */

So on HW3, a different pin would need to be chosen for VSELECT's toggle if we were to want to add support for it on HW3.