Jump to content
IGNORED

How to get Spelunker ATR to start?


TheNameOfTheGame

Recommended Posts

 

I read the thread, but not sure how this can help running on the Side2 and U1MB? Any suggestions?

I loaded this atr into the fat32 area of my CF card and it ran okay for me and My Atari 800XL. Also loaded it with RespeQT on Drive one and it loaded and played ok. Also I am including an xex file of this same disk made by Rybags that also runs and plays on my U1M and Side2 from fat32 and loaded with the xex loader supplied by RespeQT ..

 

Spelunking(reg 320k memory).xex

 

Good Luck..

  • Like 1
Link to comment
Share on other sites

From memory, Spelunker uses encryption on most of the disk and generates a key that's stored in the top half of zero page.

I think that in some circumstances if there's non-zero data there initially it can cause the game to fail. Such circumstances can be with deferred booters such as would be used in Side.

 

It was a few years ago though so I'm just going on what I can recall.

Link to comment
Share on other sites

 

I read the thread, but not sure how this can help running on the Side2 and U1MB? Any suggestions?

 

Hi. My point was that I had an Atari with similar symptoms (Spelunker didn't work first time, but it did if I tried again after a brief power off). When I enquired on the forum, at least one other person reproduced the same thing on their machine.

 

However this was with an ATR conversion on an AtariMax cartridge, so its not exactly the same situation as yours.

 

On my machine, changing the base memory fixed the problem completely, but thats a painful solution, and I suspect the problem is really due to code relying on uninitialised RAM locations (i.e. either the cartridge loader, or the game itself).

Link to comment
Share on other sites

From memory, Spelunker uses encryption on most of the disk and generates a key that's stored in the top half of zero page.

I think that in some circumstances if there's non-zero data there initially it can cause the game to fail. Such circumstances can be with deferred booters such as would be used in Side.

Spot on regarding the encryption and location, but even manually clearing out the two bytes which were non-zero prior ($8B and 8C) to the program filling the upper half of page zero doesn't result in a boot. It eventually crashes jumping through $A400, since the expected code isn't there. Quite a lot of other stuff's in the wrong place too, but back-tracing the load in the emulator hasn't yet revealed the cause. The boot process is identical to a normal boot, the only difference being that sector requests are handled by the PBI ROM. The state of RAM should be the same as usual, other than a few bytes in the $3x area which are supposed to be reserved anyway.

 

EDIT: loaded via SIO (using the U1MB HSIO), then jumped into the BIOS, started the loader, then launched the ATR on the SIDE cart. Worked. Cold booted and tried the same thing and it crashed. In any case, I've found it starts reliably (in Altirra, using the U1MB SIDE loader) if you hold Option down during the boot (regardless of the fact the PBI BIOS disables BASIC anyway).

 

Also works on real hardware if you hold down Option. ;)

Edited by flashjazzcat
Link to comment
Share on other sites

You don't have to hold down option when booting from the SIO in the emulator if BASIC is off, and the PBI BIOS disables BASIC when reading the first boot sector if BASIC is "Disabled" in the loader. But holding down Option for the first time following a cold powerup appears to fix everything, and the effect lasts for consecutive reboots (of the game) until the next cold power-up. The game will occasionally boot from cold (actually the second boot: first time into the loader, second from the ATR), but as the OP said: only about 10 per cent of the time.

Edited by flashjazzcat
Link to comment
Share on other sites

The reason for the compatibility issue with the U1MB loader:

  176741:147: 24 | A=00 X=00 Y=03 ( V  Z ) | 29CA: AD 24 02          LDA VVBLKD
  176741:147: 30 | A=8A X=00 Y=03 (NV    ) | 29CD: 8D 22 02          STA VVBLKI
  176741:147: 35 | A=8A X=00 Y=03 (NV    ) | 29D0: AD 25 02          LDA VVBLKD+1
  176741:147: 40 | A=C2 X=00 Y=03 (NV    ) | 29D3: 8D 23 02          STA VVBLKI+1
  176741:147: 46 | A=C2 X=00 Y=03 (NV    ) | 29D6: AD 00 A4          LDA $A400
  176741:147: 51 | A=A7 X=00 Y=03 (NV    ) | 29D9: D0 0D             BNE $29E8
  NEXT         | A=A7 X=00 Y=03 (NV    ) | 29E8: AD FF 36          LDA $36FF

Spelunker tests whether the byte at $A400 is set before it loads more of the game. If it is $00, which it should be on a cold boot due to the OS memory clear, then the load continues; otherwise, the game jumps to $A400 and crashes. This appears to just be part of its warmstart detection code, not the copy protection mechanism. The reason this check fails with the U1MB loader is that the PBI BIOS is not clearing $A000-BFFF when it disables the BASIC ROM... and since that memory was hidden when the OS initialized, it retains DRAM power-up patterns.

  • Like 5
Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

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