Jump to content
OriginalJohn

Colecovision Cartridge reader (read > 32k?)

Recommended Posts

Hi Team,

 

I was hoping someone could help me with this, as I've hit a wall.

 

I recently built this project and it works perfectly with standard Colecovision cartridges: https://www.instructables.com/Arduino-ColecoVision-Cartridge-Reader/

 

I wanted to expand the capabilities beyond the 32k realm (for the halfmega and other cartridges) and for the last couple of months I've been researching/changing values/researching/changing code etc, but have been largely unsuccessful.  What is happening at the moment is that I've changed the cartridge size to 128k and trying to do a 'straight' read just using a loop that runs through addresses, I've tried breaking the 128k up into 32k 'chunks' and switching the chipselect, but every time I get the same result - 32k blocks which repeat over and over up to the 128k loop ending.

 

I thought that in the vs code that the actual results that are sent to the windows program was just looping the buffer but after analysis, don't see how the code might do this.

 

I would be grateful if anyone could take a look at the code (in the arduino .ino file and vscode) and make any recommendations on how I might get this to happen, or offer any suggestions, it would be greatly appreciated.

 

Thanks!

Share this post


Link to post
Share on other sites

the bigger cartridge uses bank switching.

the arduino code that read the cartridge only read.

But i think on these cartridges , you have to write to the cartridge to switch the bank.

the colecovision always see only 32k on the cart  even if it is a 128k one... but something in the cart , when you write to a given address switch the bank and will replace one part of the 32k by another one.

Once it is switched, you can read again the 32k (or just the part that has been switched) and you will get new data.

How to perform the switch depends on the type of super cart.  

 

I can not help much here, but i guess some others will be able to help you with more precise explanation.

 

 

Share this post


Link to post
Share on other sites

You would have to search for the CV MegaCart tech files that were made available years ago to add proper support much the same way AtariMax and some emulator authors had to add support to there products for games that use the MegaCart PCB. 

Share this post


Link to post
Share on other sites
On 9/22/2021 at 8:50 AM, NIAD said:

You would have to search for the CV MegaCart tech files that were made available years ago to add proper support much the same way AtariMax and some emulator authors had to add support to there products for games that use the MegaCart PCB. 

I did try to search for the files, but it appears that they are obscure.   There is, however the thread I linked below.   I'm not sure if this is the doc you are referencing?  If not, does anyone have the original files being referenced?

 

Thanks!

 

Share this post


Link to post
Share on other sites
On 9/21/2021 at 2:01 PM, OriginalJohn said:

Hi Team,

 

I was hoping someone could help me with this, as I've hit a wall.

 

I recently built this project and it works perfectly with standard Colecovision cartridges: https://www.instructables.com/Arduino-ColecoVision-Cartridge-Reader/

 

I wanted to expand the capabilities beyond the 32k realm (for the halfmega and other cartridges) and for the last couple of months I've been researching/changing values/researching/changing code etc, but have been largely unsuccessful.  What is happening at the moment is that I've changed the cartridge size to 128k and trying to do a 'straight' read just using a loop that runs through addresses, I've tried breaking the 128k up into 32k 'chunks' and switching the chipselect, but every time I get the same result - 32k blocks which repeat over and over up to the 128k loop ending.

 

I thought that in the vs code that the actual results that are sent to the windows program was just looping the buffer but after analysis, don't see how the code might do this.

 

I would be grateful if anyone could take a look at the code (in the arduino .ino file and vscode) and make any recommendations on how I might get this to happen, or offer any suggestions, it would be greatly appreciated.

 

Thanks!

128k and up bank are 16k   .. you need to manage a14 a15 a16 a17 a18 to read them...  you cant only put en_80,A0,C0,E0 low and read...

Share this post


Link to post
Share on other sites

Megacart splits the cartridge space into two 16k segments - the first 16k (at 0x8000) is fixed and comes from the end of the EPROM. The second 16k (at 0xC000) is banked, and is selected by accessing memory locations 0xFFC0 through 0xFFFF (just a read is fine, the address sets the page). That gives you 64 possible banks for a total maximum size of 1MB. It's "reversed" in that 0xffff will map the first 16k of the EPROM, 0xfffe maps the second, etc. Since it includes the fixed bank, you can read the whole thing by banking from 0xFFFF through 0xFFC0 and saving the 16k at 0xC000 each time. There's no easy way to tell the size of the ROM, you can check for duplication after saving. 

 

Make sure you don't read those addresses while saving, just write zeros to the file. If you read them, the bank will change.

 

The info in that thread above came from my work. Can't speak to the original files, but I wrote a whole bank switching tutorial which is here (you can just read the PDF included): 

https://harmlesslion.com/cgi-bin/onesoft.cgi?3

 

SGM carts use a different scheme. The cartridge space is split into 4 8k segments (at 0x8000, 0xA000, 0xC000 and 0xE000) and potentially includes an EEPROM. There are three or four separate registers at the top of the memory space (0xFFFC and up) which are written to to select the page you want in each segment. There's only scattered public information about this scheme.

 

Not aware of any other common schemes.

Edited by Tursi

Share this post


Link to post
Share on other sites

I did check coleco.dk but unless I do a site dump and then search it, the only thing I was able to find was a picture of the pcb on the Harvey deKleine page... Thanks Tursi, I hope to dig into your examples sometime this week.

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