Jump to content
IGNORED

Starpath games: is it now possible to put them on carts?


lucifershalo

Recommended Posts

I've always thought Supercharger games could be put on carts since carts have way more memory now than they did then! Also extra ram chips if needed!

 

 

The way Superchargers RAM is accessed is quite a bit more complicated than the other RAM formats used in 2600 games. The usual method involves having the RAM appear twice in memory, one range of addresses for reading and another range for writing. The Supercharger uses a control register and multiple instructions to update RAM. From Eric Ball's series SuperCharger jumpstart 1/2 and SuperCharger jumpstart 2/2:

 

Hopefully this will help those people interested in creating a SuperCharger homebrew for Glenn's contest. Part 2 will be about the SC header (but first I have to re-learn it myself.)

 

The SuperCharger contains 6K of RAM organized as three 2K banks. These three banks (and the 2K internal ROM) can be mapped in various combinations into the 4K cartridge address space ($1000-$1FF8) via the SuperCharger control register. (Note: Since the 6507 inside the 2600 only has 12 address lines, $1000 is equivalent to $F000.)

 

The SuperCharger control register also controls whether write mode is enabled. Once write mode is enabled, any RAM mapped to the the cartridge address space may be written to. Unfortunately, since the 2600 cartridge slot doesn't have the necessary control signals to allow direct writes (e.g. STA) to work, writes to the SuperCharger RAM require multiple reads to implement a write. First the program generates an access to address $10xx to select the value to write. This value is then written to the fifth address bus value after the $10xx access. For example

	CMP	$1000
	CMP	(PTR), Y
stores $00 in the address pointed to by (PTR),Y

	CMP	$1000,Y
	NOP
	CMP	BASE,X
stores the value in Y into the address BASE+X (i.e. POKE BASE+X,Y), the NOP is to generate an additional address cycle. It's very important not to store code or data which will be accessed while write mode is enabled at $10xx, since it will generate spurrious writes.

 

So to convert a Supercharger game to one that uses one of the available cartridge formats with RAM would require finding all of those sections of code and rewriting them. Another potential problem is because the Supercharger games are loaded into RAM they can use self-modifying code - that'd be difficult to do with the game code burned onto a ROM chip.

  • Like 1
Link to comment
Share on other sites

Self-modifying code is rare, but because any memory structure can be treated as static RAM, tables that would normally be ROM only can be leveraged as RAM arrays.

 

There is a new RAM based BASIC for the SuperCharger where unlimited array variables are made possible by this feature.

 

Here's an awesome SuperCharger RPG demo from Papa with detailed descriptions of vwBASIC's features.

 

I've been working on a version of vwBASIC for the Atari Portable using CBS RAM (extra 256 bytes of RAM) but unlimited array variables are one of the features that had to be dropped because they are not possible with other memory schemes.

 

 

 

Link to comment
Share on other sites

Another potential problem is because the Supercharger games are loaded into RAM they can use self-modifying code - that'd be difficult to do with the game code burned onto a ROM chip.

 

After writing that I was curious if they did use it or not, so started to look for Supercharger disassemblies. Couldn't find any online, but then remembered I have a Stella Gets a New Brain! CD - it has data along with all the audio tracks of Supercharger games. Popped it in and there's final source for 3 Supercharger programs(and pre-release code for a few other games). I took a quick look at the finished games - did not spot any self modifying code in Suicide Mission, but did in the other two!

 

 

From Communist Mutants from Space:

PSCOR0	TAX   <--- score kernel
	LDA #6
	STA P2CONT
DIG6	LDA DA,X    <--- DA overwritten by ??? (update - see next reply)
	STA P2
DIG1	LDA DA,X    <--- DA overwritten by code below
	STA P1
	LDY #3
DIG2	LDA DA,X    <--- DA overwritten by code below
	STY P2CONT
	STA P2
DIG3	LDA DA,X    <--- DA overwritten by code below
	STA P1
DIG4	LDY DA,X    <--- DA overwritten by code below
DIG5	LDA DA,X    <--- DA overwritten by code below
	TAX
	PLA
	STY ABS+P2
	STX P1
	STA P2
	STA P1
	TSX
	TXA
	EOR #$DF
	BNE PSCOR0

...

UPDSCR	LDX #DA  <--- UPDSCR = update score, back then the compilers didn't support long labels
	LDA SC3
	JSR DIG
	CMP RAM+$FF,Y
	CMP DIG1+1   ; R <--- replaces one of the DA above
	LDA SC2
	JSR HIDIG
	CMP RAM+$FF,Y
	CMP DIG2+1   ; R <--- replaces one of the DA above
	LDA SC2
	JSR DIG
	CMP RAM+$FF,Y
	CMP DIG3+1   ; R <--- replaces one of the DA above
	LDA SC1
	JSR HIDIG
	CMP RAM+$FF,Y
	CMP DIG4+1   ; R <--- replaces one of the DA above
	LDA SC1
	JSR DIG
	CMP RAM+$FF,Y
	CMP DIG5+1   ; R <--- replaces one of the DA above
	RTS 

The <--- denote my comments. The first bit of code is the 6 digit kernel, they used the constants P0 and P1 for the players instead of GRP0 and GRP1. The second bit of code modifies the digits to be displayed. This programmer used ; R to denote when RAM was written to.

 

 

From Frogger:

FLASHROW
    CMP RAM+$FF,Y
    CMP FR.2+1   ; WR   <--- replaces ROW1 below
    LDY VVL,X
    CMP RAM+$FF,Y
    CMP FR.0+1   ; WR   <--- replaces R1VAL below
    LDX SAVE+2
*
FR.0    LDY R1VAL,X   ; <--- R1VAL changed by the code above 
FR.2    LDA ROW1,X    ; <--- ROW1 changed by the code above
    CMP RAM,Y
    TAY
FR.9    CMP $FF00,Y  ; WR
    DEX
    BPL FR.0
*
    RTS

This programmer used ; WR to denote when RAM was written to.

 

The programmer for Suicide Mission used ; RAM!

  • Like 2
Link to comment
Share on other sites

Was wondering why the score routine in Communist Mutants only updated 5 of the digits so took a look in Stella:

 

post-3056-0-70806600-1486759920_thumb.png

 


They have the 6 digit display aligned so the last copy of player 1 wraps around to the left side of the screen (using mid-screen changes to NUSIZ1) for use as the current player indicator. It's modified by this bit of code:

	LDY PLYRUP <--- player up
	INY
	TYA
	JSR DIG
	CMP RAM+$FF,Y
	CMP DIG6+1   ; R
  • Like 1
Link to comment
Share on other sites

CPUWIZ did a small run of Rabbit Transit cartridges several years back, although they were actually based on an Atari prototype version that was slightly different from the Starpath released version. I don't know if he has any left, or if he's in any position to make more (based on his current health situation) but I suppose you can ask him.

Link to comment
Share on other sites

To do SuperCharger games directly the Melody boards would have to have at least 6k of RAM, right?

 

I've always had to limit myself to not using SARA RAM as everyone always had to scavenge for the chips. Is this no longer an issue?

 

Nope. The ARM based boards can emulate SARA RAM.

  • Like 1
Link to comment
Share on other sites

To do SuperCharger games directly the Melody boards would have to have at least 6k of RAM, right?

There's 8K of RAM in the Harmony/Melody. For DPC+ and BUS the Harmony/Melody driver gets loaded into RAM for performance reasons so the games only get to use 5K and 6K of RAM respectively. I cover that for DPC+ in this blog entry. I'm sure that RAM's used by all the other bankswitch drivers as well, though I don't know the specifics.

 

The Melody can be upgraded to 64K.

  • Like 1
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...