Jump to content
IGNORED

PAL 7800, bug with all multi screen lists


marauder666

Recommended Posts

Placing this here from the thread in 7800 touching on this subject...

batari wrote...

 

Quote

As for the issue, one difference with the PAL 7800 is how it detects a 2600 cart. It doesn't run the signature check but instead reads a range of addresses from the cart to check whether a 7800 cart or a 2600 cart is installed, and whether to run the built-in game Asteroids or not. It also runs through a few addresses that we typically use as hotspots. I am wondering if the cart is responding to these hotspots? If so then a possible fix is to ignore hotspots until we are sure the 2600 code is actually running.

I think we should look at this closely.

Link to comment
Share on other sites

 

26 minutes ago, Andrew Davie said:

Placing this here from the thread in 7800 touching on this subject...

batari wrote...

 

I think we should look at this closely.

The UnoCart and the PlusCart ignore these initial 7800 reads.
Additionally the PlusCart menu has much less hotspots than the UnoCart menu..

Link to comment
Share on other sites

4 hours ago, Andrew Davie said:

Actually... the above is rubbish.  How about this...

 


timestart = now
while (now-timestart < MINTIME) {}
addr = ADDR_IN
                               

 

I just tried the "more robust" address test (that is used in several bankswitching of the UnoCart and PlusCart) for the firmware ROM too. But then the PlusCart doesn't boot anymore (tested with PAL 2600Jr)

?

 

Link to comment
Share on other sites

On 10/5/2020 at 5:11 PM, marauder666 said:

I've had a chance to test with a NTSC 7800 I'm modding for someone. and it works as expected.

Seems just a PAL issue, also tested with a friends PAL 7800 with the same problem.

I am said friend ;)

 

Though I'm now on an older firmware than Cleggy we still are both experiencing the same issues on our PAL 7800s.

Link to comment
Share on other sites

Just now, juansolo said:

I am said friend ;)

 

Though I'm now on an older firmware than Cleggy we still are both experiencing the same issues on our PAL 7800s.

The issue is not forgotten.

Apparently the PAL and NTSC '7800 machines start up differently.

I am trying to find a '7800 so that I can do some testing/fixes.

 

Link to comment
Share on other sites

I just bought this one:

https://www.ebay.de/itm/Atari-7800-Konsole-Spielekonsole-PAL-ohne-Zubehor/174329415163

 

But it is missing the powersupply ?

 

I'll look at my electronic scrap box or maybe I'll also buy this:

https://www.ebay.de/itm/Atari-7800-Netzteil-Adapter/254347183672

 

 

 

Link to comment
Share on other sites

21 minutes ago, marauder666 said:

Easy enough to wire up a 2.1mm DC socket onto the board in the power input area, and use a sensible 9V PSU with barrel jack.

It is, but as we saw in the other thread where somebody did this on my behalf, it's also easy enough to blow up your 7800.

Me, I'd buy that converter linked in the post above - it looks neat, and isn't too expensive.

 

Link to comment
Share on other sites

@Andrew Davie

I was able to track done the issue to the point where the VCS writes to the PlusCart command hotspot:

https://gitlab.com/firmaplus/atari-2600-pluscart/-/blob/master/source/STM32firmware/PlusCart/Src/cartridge_firmware.c#L342

 

here the wrong value is read. It should be 32 ($20) for page up, but it is 47 ($2F) or in my case 37 ($25). Maybe it is the hotspot address ($1FE6 ) or maybe it is because the write is done from code in the VCS RAM?

I was able to setup a workaround in main.c main function:

  while (1){
    int ret = emulate_firmware_cartridge();
    enum e_status_message menu_status = none, main_status = none;
    if (ret == CART_CMD_ROOT_DIR){
	  system_secondary_init();

	  d->type = Root_Menu;
      d->filesize = 0;

   	  input_field[0] = 0;
      curPath[0] = 0;
      menu_status = buildMenuFromPath( d );
    } else if((ret & CART_CMD_PAGE_DOWN)== CART_CMD_PAGE_DOWN ) {
    	act_page--;
    } else if((ret & CART_CMD_PAGE_UP) == CART_CMD_PAGE_UP ) {
    	act_page++;
    } else {
  .
  .
  .
  

But what scares me a bit is, that the code for reading the VCS write was the same than in every bankswitching with writes (e.g. SC RAM). So they may fail too and the workaround only works in this special situation.

We better find out why the wrong value is transmitted..

 

 

Edited by Al_Nafuur
Link to comment
Share on other sites

39 minutes ago, Al_Nafuur said:

@Andrew Davie

I was able to track done the issue to the point where the VCS writes to the PlusCart command hotspot:

 

The DEV version has some changes to the timing of emulation address changing.

Did you try release or dev in your testing?  If not DEV, I would like to know if it behaves the same.

 

Link to comment
Share on other sites

2 minutes ago, Andrew Davie said:

The DEV version has some changes to the timing of emulation address changing.

Did you try release or dev in your testing?  If not DEV, I would like to know if it behaves the same.

 

tried Dev and Release, same issue

Edited by Al_Nafuur
Link to comment
Share on other sites

On 10/20/2020 at 12:59 PM, Al_Nafuur said:

Does the NTSC 7800 also has a inbuild Asteroids ROM?

can someone check whats at address $1FE6 in the inbuild PAL Asteroids ROM, or where I can find the binary?

NTSC 7800 does not have the Asteroids inbuilt as standard, but theres a later eprom, which does, but was never officialy released.  

 

The NTSC 7800 I video modded a few weeks ago, owned by mimo, had this eprom, and it worked with the pluscart

Link to comment
Share on other sites

1 minute ago, marauder666 said:

Menus now working on both 7800s with latest firmware.

Now I can select other titles, i’ve discovered some other issues, posted these in another thread.

 

 

 

I believe you have a version which is a workaround for the issue.

Since that release, the *actual* bug has been discovered and fixed.  That will be in the next release, hopefully soon.

The issue was a "lda VALUE" instead of "lda #VALUE" in the menu/page switching code.

 

 

 

  • Like 1
Link to comment
Share on other sites

Just now, marauder666 said:

I do have the workaround version.

 

Great news on finding the actual bug,  any reason it worked on ntsc, and the eprom pal i tried it on?  Or just a fluke?

 

 

IMHO a complete fluke that it ever worked on anything ever. (!)

 

Link to comment
Share on other sites

1 hour ago, Andrew Davie said:

IMHO a complete fluke that it ever worked on anything ever. (!)

 

"lda VALUE" instead of "lda #VALUE" is indeed a bug. But the nasty thing about that bug is, that it mostly works as expect (for zeropage write addresses).

 

The value the 6507 reads on the data bus is the fading shadow of the zeropage address that has been set by the "Cart" because of the 6507 last address bus request.

 

What happen on the data bus in that situation is totally unreliable, and may also depend on the used cartridge, hardware or peripherals:

 

CPU Cycle 1 2 3
ROM data LDA $10 -
Data Bus A5 10  
Data Bus set by Cart Cart (no one)
Address Bus (6507 PC) $1800 $1801 $10

 

@Mr SQL has made a test ROM that steps through all zeropage values. As far as I remember it might be used for paddle detection.

Edited by Al_Nafuur
Link to comment
Share on other sites

5 hours ago, Al_Nafuur said:

@Mr SQL has made a test ROM that steps through all zeropage values. As far as I remember it might be used for paddle detection.

 

I think it would work -there is one low zeropage value that changes immediately when the paddle is plugged in and the value would stick on the PlusCart, paddle cap stayed charged I think. I haven't checked if this is resolved in the latest build for it.  

 

EDIT: Meant to say the value would stick on the UnoCart.

 

I noticed I also saw this same issue Andrew observed on the other thread with the SuperCharger (bidirectional loading is actually working as long as the button press is light, it seems to be only the button latching and one other issue I can't figure out where KC proto should just load KC II after all lives are exhausted but it does not).

 

I think the latching is definitely an issue too though:

 

On 10/10/2020 at 10:59 AM, Andrew Davie said:

"12.2 Latched Input Ports (INPT4, INPT5) These two ports have latches that are both enabled by writing a "1" or disabled by writing a "0" to D6 of VBLANK. When disabled the microprocessor reads the logic level of the port directly. When enabled, the latch is set for logic one and remains that way until its' port goes LO. When the port goes LO the latch goes LO and remains that way regardless of what the port does. The trigger buttons of the joystick controllers connect to these ports."

 

 

Edited by Mr SQL
typo
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...