Jump to content
crisalan44

Cavern Fighter and Second Gen Phoenix issues

Recommended Posts

Anyone experiencing any issues with Cavern Fighter on a Second-generation Phoenix? My phoenix is from the last run and has the firmware it was shipped with and I have it running to my tv through HDMI, no upscalers or extra devices. My cart starts automatically and has the fire buttons pressed. If I hold the joystick up or down after pressing start or reset it goes to the menu screen to allow selection for a normal game to start as it should and plays as it should. Even resetting the phoenix does not cure this. I tried with 2 different Colecovision controllers and both controllers work perfectly on their own and I ran contoller tests to make sure they were functioning correctly, so it is not the controllers. It only happens with Cavern Fighter, all my other carts work fine even the Ice World cart that was also just released. I have already asked a friend who owns a first-gen Phoenix and Cavern Fighter cartridge to test it for me and he does not have this issue, his loads fine and works properly. My Cavern Fighter cart works perfect on my Adam, my Colecovision and my RGB modded Colecovision, it is only on my phoenix it has these issues. 

Share this post


Link to post
Share on other sites

Cavern Fighter seems to work correctly on my First Gen Phoenix - but on my Second Gen phoenix - it behaves like the fire button is held down - skips the splash screens straight to the game and is firing.

 

I need to test with a few other cartridge games to confirm the behavior - I might have an hardware issue ..  or it might just be Cavern Fighter .. I'll do more testing ..

Share this post


Link to post
Share on other sites

Interesting - I purchased the Electric Adventures Classics - also from Tony Cruise and it works fine on my 1st Gen Phoenix - but on my 2nd Gen Phoenix it has the same fire button is pressed behavior - and goes straight into Meteor Swarm - I tried several other carts that need to start by pressing the fire button - they seem to be normal - I haven't tried anything yet from the SD card - or any old school cards yet - I suspect they will be fine as they require keypad input .. but I'll go dig out Donkey Kong and Cosmic Avenger and give them a go ...

 

Share this post


Link to post
Share on other sites
Posted (edited)

Did further Cartridge testing - Donkey Kong and Venture - no apparent issues - seem to be in my case both of the Electric Adventure Cartridges I purchased - skip the splash screens and go straight to the game firing - the CollectorVision Club games work just fine.

 

2nd Gen Phoenix

Firmware : A0

CPU : T80SE  V304

VDP - F18A  V1.9

 

Just checked my 1st Gen Phoenix - it has the same Firmware / CPU / VDP as my 2nd Gen Phoenix  - Cavern Fighter works on the 1st Gen

Edited by xdurable
update

Share this post


Link to post
Share on other sites

Looks to be a bug in the game to me. Once a fire button is pressed everything works fine and it no longer has the issue. After game over everything works properly in the menu as well. There is nothing different in the control section between Gen 1 and Gen 2. Loading up the controller tester shows no buttons are being pressed until they are physically pressed on the controller.

22 hours ago, xdurable said:

2nd Gen Phoenix

Firmware : A0

CPU : T80SE  V304

VDP - F18A  V1.9

 

Just checked my 1st Gen Phoenix - it has the same Firmware / CPU / VDP as my 2nd Gen Phoenix  - Cavern Fighter works on the 1st Gen

Those are just the bootloader firmware versions. You would need to check the colecovision core version in the load cores screen or install cores screen. Just FYI don't install old cores on the Gen 2.

Share this post


Link to post
Share on other sites
Posted (edited)
35 minutes ago, Bmack36 said:

Looks to be a bug in the game to me. Once a fire button is pressed everything works fine and it no longer has the issue. After game over everything works properly in the menu as well. There is nothing different in the control section between Gen 1 and Gen 2. Loading up the controller tester shows no buttons are being pressed until they are physically pressed on the controller.

Those are just the bootloader firmware versions. You would need to check the colecovision core version in the load cores screen or install cores screen. Just FYI don't install old cores on the Gen 2.

Colecovision Core - Ver 8 on the 2nd Gen console and Colecovision core Ver 6 on the Gen 1 - I will update the core on the Gen 1 and see what the behavior is.

 

Updated the 1st Gen Core to Ver 7 - works correctly .. are there differences between the Ver 7 and Ver 8 cores  - can the Ver 8 core be installed on the 1st Gen Phoenix ?

Edited by xdurable
update

Share this post


Link to post
Share on other sites
4 hours ago, Bmack36 said:

Looks to be a bug in the game to me.

How it can be considered as a bug in the game?

 

It seems to work correctly on standard CV  (being PAL, NTSC or SECAM),   on Phoenix 1 ,  on HomebrewVision , (i don't know if somebody tested with ADAM  or with SGM plugged?).

 

Could be a bug in the game , if we would observe random behaviors on  other setup , but it seems to be constant here?

 

Share this post


Link to post
Share on other sites
Posted (edited)
8 hours ago, xdurable said:

Colecovision Core - Ver 8 on the 2nd Gen console and Colecovision core Ver 6 on the Gen 1 - I will update the core on the Gen 1 and see what the behavior is.

 

Updated the 1st Gen Core to Ver 7 - works correctly .. are there differences between the Ver 7 and Ver 8 cores  - can the Ver 8 core be installed on the 1st Gen Phoenix ?

You can install core 8 on an old Phoenix, but there is potential that your TV might not like it. Worst case is you revert to 7 if it doesn't work. Just don't mess with the service core and it will be fine.

 

4 hours ago, youki said:

How it can be considered as a bug in the game?

 

It seems to work correctly on standard CV  (being PAL, NTSC or SECAM),   on Phoenix 1 ,  on HomebrewVision , (i don't know if somebody tested with ADAM  or with SGM plugged?).

 

Could be a bug in the game , if we would observe random behaviors on  other setup , but it seems to be constant here?

 

Not saying this is the case for cavern fighter but lots of CV games (even official ones) have issues that really shouldn't work or rely on dumb luck to work. One example is the Heist where it is reading in uninitialized ram and acting upon it when starting the game. Another example is Centipede where it is acting on the spinner input and the controller gets locked out of menu input due to the spinner being in a specific location (with stock CV and stock Super Action Controller)

Edited by Bmack36

Share this post


Link to post
Share on other sites
8 hours ago, youki said:

How it can be considered as a bug in the game?

 

It seems to work correctly on standard CV  (being PAL, NTSC or SECAM),   on Phoenix 1 ,  on HomebrewVision , (i don't know if somebody tested with ADAM  or with SGM plugged?).

 

Could be a bug in the game , if we would observe random behaviors on  other setup , but it seems to be constant here?

 

It works on my Adam, my RGB modded Colecovision with SGM plugged in and my AV modded Colecovision and my RF Colecovision. It is only the Phoenix where it has these issues.

Share this post


Link to post
Share on other sites
47 minutes ago, crisalan44 said:

It works on my Adam, my RGB modded Colecovision with SGM plugged in and my AV modded Colecovision and my RF Colecovision. It is only the Phoenix where it has these issues.

Working for me on my stock NTSC CV, F18A modded CV and my 1st gen Phoenix.

Share this post


Link to post
Share on other sites
Posted (edited)

So I added the Ver 8 core to my Gen1 Phoenix ( works with my monitor) ( Core 4 slot ) - Cavern Fighter auto starts same behavior as on the 2nd Gen Phoenix ( Core Ver 8 )  - upon losing all lives - the Start screen flashes for a moment and the game starts again ... seems from my limited testing using Cavern Fighter and Electric Adventures CLASSICS - both from Tony they have the same behavior on the Ver 8 Core. but both work fine on the Ver 7 core.

 

 

Brian - can the Ver 7 core be used on the 2nd Gen Phoenix  ?

Edited by xdurable
update

Share this post


Link to post
Share on other sites
7 minutes ago, xdurable said:

So I added the Ver 8 core to my Gen1 Phoenix ( works with my monitor) ( Core 4 slot ) - Cavern Fighter auto starts same behavior as on the 2nd Gen Phoenix ( Core Ver 8 )  - upon losing all lives - the Start screen flashes for a moment and the game starts again ... seems from my limited testing using Cavern Fighter and Electric Adventures CLASSICS - both from Tony they have the same behavior on the Ver 8 Core. but both work fine on the Ver 7 core.

 

 

Brian - can the Ver 7 core be used on the 2nd Gen Phoenix  ?

No you can't use anything before Ver 8 on 2nd Gen as the video interface is different.

Share this post


Link to post
Share on other sites
Posted (edited)
47 minutes ago, Bmack36 said:

No you can't use anything before Ver 8 on 2nd Gen as the video interface is different.

OK - so no Ver 7 on the Gen 2 console.

 

 

So the work around you mentioned works for Cavern Fighter ( pressing the fire button then playing - at Game Over it returns to the menu ) but with the Classics Cartridge - it never returns to the main menu - even pressing  2 or 3 to select one of the other games when the console is first turned on doesn't work - the console doesn't except the input unless ( haven't tried it ) the timing has to be perfect.

 

From what I can tell yes there could be a bug with the games ( loading screen ) - however there could also be a minor bug with the Ver 8 core as it seems to be consistent with games from Tony in cartridge form - based on my testing - all other Collectorvision games that I have - seem to work fine on the Ver 8 core on either Gen of console.

 

 

 

Edited by xdurable
typo

Share this post


Link to post
Share on other sites
On 7/21/2021 at 9:54 PM, Bmack36 said:

You can install core 8 on an old Phoenix, but there is potential that your TV might not like it. Worst case is you revert to 7 if it doesn't work. Just don't mess with the service core and it will be fine.

 

Not saying this is the case for cavern fighter but lots of CV games (even official ones) have issues that really shouldn't work or rely on dumb luck to work. One example is the Heist where it is reading in uninitialized ram and acting upon it when starting the game. Another example is Centipede where it is acting on the spinner input and the controller gets locked out of menu input due to the spinner being in a specific location (with stock CV and stock Super Action Controller)

Definitely sounds like the issue is isolated to the version 8 core, the games all work fine on real hardware, all the emulators and version 7 core.

If the core is not simulating the original hardware then it will need an update.

Share this post


Link to post
Share on other sites

Although there may be some difference in the firmware, the fact that no other games, official or homebrew, other then EA games show this issue makes me think something is being done differently in the controller initialization code. Since the game works properly once a button is pressed it isn't an issue with reading the controller in general and just an initialization issue.

 

What we know:

-On bootup on a Rev 8 firmware there are no controller buttons actuated (ie no inputs/no buttons depressed) when running controller test roms

-No other games display a controller press when booting up

-When loading Cavern fighter the game appears to think a button is pressed

-The game correctly identifies and reacts when the button is actually pressed and starts working correctly afterwards even through a new game

-This would lead me to think something is happening in the controller initialization that is different then any other game.

 

If we can find out what this difference in initialization implementation is, we can determine what in the firmware would affect this initialization code.

Share this post


Link to post
Share on other sites
3 minutes ago, Bmack36 said:

Although there may be some difference in the firmware, the fact that no other games, official or homebrew, other then EA games show this issue makes me think something is being done differently in the controller initialization code. Since the game works properly once a button is pressed it isn't an issue with reading the controller in general and just an initialization issue.

 

What we know:

-On bootup on a Rev 8 firmware there are no controller buttons actuated (ie no inputs/no buttons depressed) when running controller test roms

-No other games display a controller press when booting up

-When loading Cavern fighter the game appears to think a button is pressed

-The game correctly identifies and reacts when the button is actually pressed and starts working correctly afterwards even through a new game

-This would lead me to think something is happening in the controller initialization that is different then any other game.

 

If we can find out what this difference in initialization implementation is, we can determine what in the firmware would affect this initialization code.

The A E rom also has this issue on the gen 2 phoenix rev 8. 

You press 1 to start the game then it rapid fires until you press a button.

Share this post


Link to post
Share on other sites
5 minutes ago, Bmack36 said:

Although there may be some difference in the firmware, the fact that no other games, official or homebrew, other then EA games show this issue makes me think something is being done differently in the controller initialization code. Since the game works properly once a button is pressed it isn't an issue with reading the controller in general and just an initialization issue.

 

What we know:

-On bootup on a Rev 8 firmware there are no controller buttons actuated (ie no inputs/no buttons depressed) when running controller test roms

-No other games display a controller press when booting up

-When loading Cavern fighter the game appears to think a button is pressed

-The game correctly identifies and reacts when the button is actually pressed and starts working correctly afterwards even through a new game

-This would lead me to think something is happening in the controller initialization that is different then any other game.

 

If we can find out what this difference in initialization implementation is, we can determine what in the firmware would affect this initialization code.

;

; Set ROM header
           ORG        8000h
;** CARTRIDGE SOFTWARE POINTERS 8000H **
;        --------------------------------------------

;           DB       0AAh,055h       ;Cartridge present:  Colecovision logo
           DB       055h,0AAh       ;Cartridge present:  skip logo, Colecovision logo
           DW       0000           ;Pointer to the sprite name table
           DW       0000           ;Pointer to the sprite order table
           DW       0000           ;Pointer to the working buffer for WR_SPR_NM_TBL
           DW       CONTROLLER_BUFFER ;Pointer to the hand controller input areas
           DW       START      ;Entry point to the user program

;****************************************************************

rst_8:
       reti
       nop
rst_10:
       reti
       nop
rst_18:
       JP    RAND_GEN
rst_20:
       reti
       nop
rst_28:
       reti
       nop
rst_30:
       reti
       nop
rst_38:
       reti
       nop

       jp NMI

        db "Lunar Rescue/ELECTRIC ADVENTURES/2021"
;
; Start of application logic
START:
    ; set stack pointer
    LD    SP,StackTop    ;128 bytes in length at 737fh

    ; enable SGM memory if present
    CALL ENABLE_SGM_MEMORY

    ; Initialise sound
    LD    B,SoundDataCount    ;Max number of active voices+effects
    LD    HL,SoundAddrs
    CALL    SOUND_INIT

    ; initialise clock
    LD    HL,TIMER_TABLE
    LD    DE,TIMER_DATA_BLOCK
    CALL INIT_TIMER

    CALL INITRAM

    ; Set screen mode 2,2
    CALL SETSCREEN2

    ;Enable both joysticks, buttons, keypads
    LD    HL,09b9bh
    LD    (CONTROLLER_BUFFER),HL

    ; Seed random numbers with a fixed number (nothing else to use?)
    LD HL,1967
    CALL SEED_RANDOM

    ;Enable timers
    CALL CREATE_TIMERS

    ; Do all our VRAM setup
    ; NMI is currently disabled

TITLESCREEN:
    ; display our title screen
    CALL DISABLE_NMI
    ; Clear the screen
    CALL CLEARPAT

    ; Clean up in case the game left anything on screen
    CALL CLEARSPRITES
    CALL SPRWRT

    ; Load the character set, make all three sections the same
    CALL LOAD_CHR_SET

    ; now setup the title screen layout
    LD DE,VRAM_NAME
    LD HL,SL_TITLE_D1
    CALL dan1rvram;RLE_TO_VRAM

    CALL DISPLAYMACHINE

    CALL HISPRT

    CALL JOYTST ; clear joystick buffer
       LD HL,OUTPUT_VDP_TITLE
    CALL SET_VDU_HOOK
    CALL ENABLE_NMI
    LD A,15
    LD (LEVEL),A
SPLASH_TITLE2:
    CALL JOYTST
    CP 255
    JR Z,NGAME
    LD    A,(HalfSecTimer)
    CALL    TEST_SIGNAL
    OR    A
    JR Z,SPLASH_TITLE2
    ; Any other actions on the title screen go here
    JR SPLASH_TITLE2

NGAME:

 

;
; Test for the press of a joystick button (0 or 1)
; A = 255 - fire button pressed
JOYTST:
    CALL POLLER
	LD	A,(CONTROLLER_BUFFER+FIRE1)
    OR A
    JR Z,JOYTST2
    LD A,255
    RET
 JOYTST2:
    LD A,(CONTROLLER_BUFFER+5)
    AND 040h
    RET Z
    LD A,255
    RET

That's all pretty standard code.  There are other games that are effected e.g. A.E. has been mentioned as well.

Share this post


Link to post
Share on other sites
9 hours ago, Tony Cruise said:

;

; Set ROM header
           ORG        8000h
;** CARTRIDGE SOFTWARE POINTERS 8000H **
;        --------------------------------------------

;           DB       0AAh,055h       ;Cartridge present:  Colecovision logo
           DB       055h,0AAh       ;Cartridge present:  skip logo, Colecovision logo
           DW       0000           ;Pointer to the sprite name table
           DW       0000           ;Pointer to the sprite order table
           DW       0000           ;Pointer to the working buffer for WR_SPR_NM_TBL
           DW       CONTROLLER_BUFFER ;Pointer to the hand controller input areas
           DW       START      ;Entry point to the user program

;****************************************************************

rst_8:
       reti
       nop
rst_10:
       reti
       nop
rst_18:
       JP    RAND_GEN
rst_20:
       reti
       nop
rst_28:
       reti
       nop
rst_30:
       reti
       nop
rst_38:
       reti
       nop

       jp NMI

        db "Lunar Rescue/ELECTRIC ADVENTURES/2021"
;
; Start of application logic
START:
    ; set stack pointer
    LD    SP,StackTop    ;128 bytes in length at 737fh

    ; enable SGM memory if present
    CALL ENABLE_SGM_MEMORY

    ; Initialise sound
    LD    B,SoundDataCount    ;Max number of active voices+effects
    LD    HL,SoundAddrs
    CALL    SOUND_INIT

    ; initialise clock
    LD    HL,TIMER_TABLE
    LD    DE,TIMER_DATA_BLOCK
    CALL INIT_TIMER

    CALL INITRAM

    ; Set screen mode 2,2
    CALL SETSCREEN2

    ;Enable both joysticks, buttons, keypads
    LD    HL,09b9bh
    LD    (CONTROLLER_BUFFER),HL

    ; Seed random numbers with a fixed number (nothing else to use?)
    LD HL,1967
    CALL SEED_RANDOM

    ;Enable timers
    CALL CREATE_TIMERS

    ; Do all our VRAM setup
    ; NMI is currently disabled

TITLESCREEN:
    ; display our title screen
    CALL DISABLE_NMI
    ; Clear the screen
    CALL CLEARPAT

    ; Clean up in case the game left anything on screen
    CALL CLEARSPRITES
    CALL SPRWRT

    ; Load the character set, make all three sections the same
    CALL LOAD_CHR_SET

    ; now setup the title screen layout
    LD DE,VRAM_NAME
    LD HL,SL_TITLE_D1
    CALL dan1rvram;RLE_TO_VRAM

    CALL DISPLAYMACHINE

    CALL HISPRT

    CALL JOYTST ; clear joystick buffer
       LD HL,OUTPUT_VDP_TITLE
    CALL SET_VDU_HOOK
    CALL ENABLE_NMI
    LD A,15
    LD (LEVEL),A
SPLASH_TITLE2:
    CALL JOYTST
    CP 255
    JR Z,NGAME
    LD    A,(HalfSecTimer)
    CALL    TEST_SIGNAL
    OR    A
    JR Z,SPLASH_TITLE2
    ; Any other actions on the title screen go here
    JR SPLASH_TITLE2

NGAME:

 

;
; Test for the press of a joystick button (0 or 1)
; A = 255 - fire button pressed
JOYTST:
    CALL POLLER
	LD	A,(CONTROLLER_BUFFER+FIRE1)
    OR A
    JR Z,JOYTST2
    LD A,255
    RET
 JOYTST2:
    LD A,(CONTROLLER_BUFFER+5)
    AND 040h
    RET Z
    LD A,255
    RET

That's all pretty standard code.  There are other games that are effected e.g. A.E. has been mentioned as well.

Is the INITRAM a BIOS routine or a separate function? If so can you say what is it doing. 

Share this post


Link to post
Share on other sites

So the issue appears to be that the controller initialization is referencing uninitialized RAM. Changes were made to Phoenix's initial RAM state so it would not have an issue with Risky Rick which looks for specific things in the uninitialized RAM like multiple 00s in a row. So the Phoenix initial ram state has some FFs in the ram.

 

When you run these games through the Atarimax (which initializes all RAM to 00) the game runs as normal. If you hit the reset button on the Phoenix (returns ram to initial phoenix ram state), the problem comes back (Atarimax was not power cycled so ram was not initialized to 00s). 

 

The conclusion then is there something wrong with reading in the initial controller state that is not properly initializing the controller ram space.

Share this post


Link to post
Share on other sites

Risky Rick (cartridge version)  checks the initial state of the Ram  to be sure it is not running on Emulator or AtariMax.  It is part of their "non existent" DRM...

 

 

  • Like 1

Share this post


Link to post
Share on other sites
11 hours ago, Bmack36 said:

So the issue appears to be that the controller initialization is referencing uninitialized RAM. Changes were made to Phoenix's initial RAM state so it would not have an issue with Risky Rick which looks for specific things in the uninitialized RAM like multiple 00s in a row. So the Phoenix initial ram state has some FFs in the ram.

 

When you run these games through the Atarimax (which initializes all RAM to 00) the game runs as normal. If you hit the reset button on the Phoenix (returns ram to initial phoenix ram state), the problem comes back (Atarimax was not power cycled so ram was not initialized to 00s). 

 

The conclusion then is there something wrong with reading in the initial controller state that is not properly initializing the controller ram space.

The addresses you don't want to fill with FF are:

- SPIN_SW0_CT (73EB) : Spinner counter port #1
- SPIN_SW1_CT (73EC) : Spinner counter port #2
- S0_C0 (73EE) : Segment #0 data, port #1
- S0_C1 (73EF) : Segment #0 data, port #2
- S1_C0 (73F0) : Segment #1 data, port #1
- S1_C1 (73F1) : Segment #1 data, port #2

 

And the 12 bytes pointed to by the pointer at 8008h in the cartridge header.

 

Rather than break your emulation to make one cartridge work (that is actively trying to detect emulation) and stop probably quite a few other games from working (that work fine on all versions of real hardware and all the emulators) I think it would be better to go back to your memory initialisation used in version 7 and it would probably be better to figure out which addresses Risky Rick checks to add some values or even detect that it is a Risky Rick cartridge and only do your changed behavior for that cartridge/rom.

 

And look I'm happy to add a call to CONTROLLER_INIT in future titles to make sure, but it's not going to fix existing ones that have an issue (and there will probably be more titles than have been listed so far that will have issues).  The Phoenix Coleco core is supposed to emulate a Coleco after all.

  • Like 2

Share this post


Link to post
Share on other sites
11 hours ago, Tony Cruise said:

And look I'm happy to add a call to CONTROLLER_INIT in future titles to make sure, but it's not going to fix existing ones that have an issue (and there will probably be more titles than have been listed so far that will have issues).  The Phoenix Coleco core is supposed to emulate a Coleco after all.

RAM powerup is random, you should not be relying on it to be any specific value when your software starts, ESPECIALLY when your software specifically skips the BIOS initialization code, which actually DOES init all that for you.

 

Init your hardware, people.

 

  • Like 2

Share this post


Link to post
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...