Jump to content
Sdw

What bankswitching can I use if I want to be historically correct?

Recommended Posts

I have been messing around a bit with 2600 development. At first I used only normal 4k cart as target, now I've moved on to a F8-style bankswitched 8k cart target as I needed some more space.

 

Lately I've been reading up a bit about the different bankswitching schemes and the fact that some of them also had extra RAM.

And some extra RAM would open up some interesting possibilities, that's for sure!

 

I do my testing in Stella and then on a real 2600 with a Harmony cart, so almost all bankswitching modes are available to me - however, I'd like to stay "historically correct", that is, not use any fancy features that has been invented after the commercial life of the 2600, or that would not have been commercially viable to produce back then.

 

I've been looking at:

FA (CBS RAM+, 12kb ROM and 256 bytes RAM)

E7 (M-network, ??kb ROM and a whopping 2kb of RAM)

 

Were any of these widely used back in the day (say up to the mid-80ies or so) so that I can use them with a clean conscience?

Share this post


Link to post
Share on other sites

Thanks for this post - due to it I just found out that there is something like a Harmony card ;-)

I'm also getting into VCS coding these days, and I wondered how I could modify cards to run my stuff.

Share this post


Link to post
Share on other sites

I've been looking at:

FA (CBS RAM+, 12kb ROM and 256 bytes RAM)

E7 (M-network, ??kb ROM and a whopping 2kb of RAM)

IMO both are fair to use in your case.

Share this post


Link to post
Share on other sites

Emphasis mine :-

 

I'd like to stay "historically correct", that is, not use any fancy features that has been invented after the commercial life of the 2600, or that would not have been commercially viable to produce back then.

 

You'd better stop using the Stella emulator and a Harmony cart in that case ;). A more widely used RAM system back in the day was SARA which added another 128 bytes of RAM.

Share this post


Link to post
Share on other sites
. . . however, I'd like to stay "historically correct", that is, not use any fancy features that has been invented after the commercial life of the 2600, or that would not have been commercially viable to produce back then.

The following is adapted from a reply I posted last month:

 

If Atari would have been able to keep their promise, with new tricks discovered and constant advancements in cartridge technology over the years, the Atari 2600 really could have been what they promised:

 

http://www.atarimania.com/pubs/hi_res/pub_everything_you_always_wanted_to_know.jpg

Are they a passing fancy,

like Hula Hoops?

 

They're exactly the opposite. The ATARI

Video Computer System™ Game is not a toy

to be put in the closet and forgotten. It's a

permanent part of a home entertainment

center. And just as there are constantly new

records available for your stereo, Atari will

constantly offer new Game Program™

cartridges for your system.

 

If the Atari 2600 is supposed to be a permanent part of our home entertainment centers, the cartridges would have become more advanced over time. Atari cartridges grew with us. As we demanded more complex games with better graphics, Atari and some third-party companies delivered. If Atari could have kept their promise, who knows how advanced Atari 2600 cartridges might be today with nonstop advancements through the 1990s and 2000s?

 

Instead of trying to limit yourself, why not use the Harmony cart for testing and use Melody boards when you go to sell your game and give Atari 2600 gamers an eye candy overload and an extreme replayability joygasm?

Share this post


Link to post
Share on other sites

Not a definitive list, but out of the 520 roms I had, there were 3 FA games and 3 E7 games.

 

FA


  • Mountain King (1983)
    Omega Race (1983)
    Tunnel Runner (1983)

 

E7


  • Bump'n'Jump (1983)
    BurgerTime (1983)
    Masters of the Universe, The Power of He-Man (1983)

Share this post


Link to post
Share on other sites

Does anyone have an accurate description of E7 (M-Network) bank-switching? I remember reading that there were some errors in Kevin Horton's E7 description, but I have been unable to find a corrected version.

 

Thanks,

Chris

Share this post


Link to post
Share on other sites

Does anyone have an accurate description of E7 (M-Network) bank-switching? I remember reading that there were some errors in Kevin Horton's E7 description, but I have been unable to find a corrected version.

My Elite demos are using this bankswitching. IIRC I found some bugs, but I can't remember which.

Share this post


Link to post
Share on other sites

Here is some doc from the source code:

;M-Network's E7 Scheme. 8 2K Banks + 2K RAM
;
;7 ROM Banks are selected by $ffe0-$ffe6 and mapped at $f000-$f7ff.
; The 8th bank is fixed at $f800-$ffff.
;The 1st 1K RAM block is selected by $ffe7 and mapped at $f000-$f7ff
; Writing to $f000-$f3ff, reading from $f400-$f7ff
;The 2nd 1K RAM block is split up into 256b parts, selected by $ffe8-$ffeb
; The 256b chuncks are mapped at $f800-$f9ff
; Writing to $f800-$f8ff, reading from $f900-$f9ff

;+-----------------------------------+-----------+-----------------------+
;|ROM: ffe0-ffe6, RAM: ffe7          |ffe8-ffeb  |                       |
;+-----------------------------------+-----+-----+-----------------------+
;|7 ROM banks                        |write|read |fixed ROM              |
;|f000                           f7ff|RAM  |RAM  |fa00               ffff|
;+-----------------+-----------------+     |     +-----------------------+
;|write RAM        |read RAM         |     |     |                       |
;|f000         f3ff|f400         f7ff|f8xx |f9xx |                       |
;+-----------------+-----------------+-----+-----+-----------------------+ 

Share this post


Link to post
Share on other sites

Here is some doc from the source code ...

 

Thanks - that makes things much clearer. I assume that the first 512 bytes of the 8th ROM bank are inaccessible, as they are overlapped by the RAM?

 

Chris

Share this post


Link to post
Share on other sites

Thanks - that makes things much clearer. I assume that the first 512 bytes of the 8th ROM bank are inaccessible, as they are overlapped by the RAM?

Seems so. And my code doesn't use them too.

Share this post


Link to post
Share on other sites

Does anyone have an accurate description of E7 (M-Network) bank-switching? I remember reading that there were some errors in Kevin Horton's E7 description, but I have been unable to find a corrected version.

 

Thanks,

Chris

You can take a look at the CartE7 source code in Stella, as follows:

 

CartE7.hxx

CartE7.cxx

 

Some of the comments will help in understanding this format.

Share this post


Link to post
Share on other sites

BTW: E7 is even a bit more tricky than it seems. During development I often had to move around code in the last bank. It wasn't always clear what happened, but IIRC branches and data accesses caused unintended bankswitchings.

Share this post


Link to post
Share on other sites

BTW: E7 is even a bit more tricky than it seems. During development I often had to move around code in the last bank. It wasn't always clear what happened, but IIRC branches and data accesses caused unintended bankswitchings.

From your diagram this could easily happen if you are in the $FF page and branching to somewhere in $FEE0-$FEEB. This will trigger a hotspot.

Share this post


Link to post
Share on other sites

From your diagram this could easily happen if you are in the $FF page and branching to somewhere in $FEE0-$FEEB. This will trigger a hotspot.

Yes, it was a branch in some code at the end of the last bank.

Share this post


Link to post
Share on other sites

Thanks for your comments.

 

Maybe I should have mentioned that this was for a demo, because I agree that for a game there is no need to hold back, just use whatever is necessary.

However, when doing a demo the goal is often is about stretching an old machine to see what can be done and then it might be considered cheating to utilize modern hardware.

 

But it seems like both those bankswitching methods were available back then, even if not used extensively.

 

I think I'll start with the FA one as it was much more straightforward. 256 bytes should hold me over for a while anyway! :)

 

Btw. nice to see you here as well JAC! I heard that maybe you were working on a 2600 demo as well, seems like there were some truths to those rumors then! :)

Share this post


Link to post
Share on other sites

 

Thanks - that makes things much clearer. I assume that the first 512 bytes of the 8th ROM bank are inaccessible, as they are overlapped by the RAM?

 

Chris

Yes, that was my experience. Of course you can copy instructions into the first 256 bytes, which may be useful since space in the 8th bank is scarce.

Share this post


Link to post
Share on other sites

From your diagram this could easily happen if you are in the $FF page and branching to somewhere in $FEE0-$FEEB. This will trigger a hotspot.

Yes, it was a branch in some code at the end of the last bank.

Could someone create a test ROM that illustrates this behaviour? I'd like to test in Stella, and improve the emulation if it isn't accurate.

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.

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...