Jump to content
IGNORED

CV Memory Map and programming info?


juice2839

Recommended Posts

I have been looking around for a decent memory map of the CV and didn't see one. I looked at the hardware and came up with the one below. I added in the SGM bank switching too. All the info I have found says the VDS is at 40h - 7Fh, but I didn't get that after looking at the hardware. Are there any programmers out there that can take a look at this and tell me if this would be a pretty good setup for a coleco's memory layout and ports? Also does anyone have any idea were the AY-8910 gets addressed with the SGM? This memory map does not take into account most of the mirroring that happens in the I/O ports. I used the literal addresses that I figured out from the hardware (If they are completely correct). Thanks for any input. Also is BEh and BFh where the Adam maps the VDP?





Super ColecoVision Memory Map


8K 0000h Colecovision Bios or Port 7Fh Bit 1 = 0 Ram

1FFFh Bank Switched 8K Ram Port 7Fh Bit 1 = 1 Rom


24K 2000h 8K above mirrored or Port 53h bit 1=0 mirrored ram

7FFFh Bank switched 24K Ram Port 53h bit 1=1 24k ram enabled


32K 8000h Cartridge Rom

FFFFh


Input/Output Ports


00h Reserved

7Fh


Write 80h Controller_2_Enable


Read/Write A0h Video Display Processor (VDP) DataPort

Read/Write A1h Video Display Processor (VDP) RegisterPort


Write C0h Controller_1_Enable


Read E0h Controller_Read

Write E0h Audio_Write



ADAM COMPUTER?


Read/Write BEh Video Display Processor (VDP) DataPort

Read/Write BFh Video Display Processor (VDP) RegisterPort


Write FFh Sound IC








I have never programmed for the Coleco or the Adam. What am I missing? How do cartridges get around the different address decoding for the CV and Adam or am I missing something. Or do the coleco cartridges work because of how the addresses are mirrored with the address decoding?
Edited by juice2839
Link to comment
Share on other sites

Okay Revamped... This should be correct aside from not having the AY-8910 addresses......




Super ColecoVision Memory Map



8K 0000h Colecovision Bios or Port 7Fh Bit 1 = 0 Ram

1FFFh Bank Switched 8K Ram Port 7Fh Bit 1 = 1 Rom


24K 2000h-5FFFFh Expansion or Bank switched 24k Ram Port 53h bit 1=1 24k ram enabled

6000h -7FFFh 1k Ram mirrored or part of 24K Ram Port 53h bit 1=0 mirrored ram



32K 8000h Cartridge Rom

FFFFh









The I/O addresses again, but shown before mirroring...???



Input/Output Ports


00h Reserved


The Super Game Module AY-3-8912 is mapped in ports 50H (address), 51H (data) and 52H (read data) " THANKS NACHOCHESS


7Fh


Write 9Fh Controller_2_Enable


Read/Write BEh Video Display Processor (VDP) DataPort

Read/Write BFh Video Display Processor (VDP) RegisterPort


Write DFh Controller_1_Enable


Read FFh Controller_Read

Write FFh Audio_Write




Anyone confirm? Or know what the ay-8910 I/O is? Thanks

Edited by juice2839
Link to comment
Share on other sites

VDP ports are mirrored from A0h to BFh both in Colecovision and ADAM. But typically every game out there uses only ports BEh and BFh

 

The Super Game Module AY-3-8912 is mapped in ports 50H (address), 51H (data) and 52H (read data)

 

The Coleco ADAM runs the Colecovision games simply turning off its internal memory mapping and switching to a Colecovision memory mapping.

 

If you write your ROM cartridge with the right layout it will work fine both with Colecovision and ADAM, you don't need to worry about ADAM details.

Link to comment
Share on other sites

VDP ports are mirrored from A0h to BFh both in Colecovision and ADAM. But typically every game out there uses only ports BEh and BFh

 

The Super Game Module AY-3-8912 is mapped in ports 50H (address), 51H (data) and 52H (read data)

 

The Coleco ADAM runs the Colecovision games simply turning off its internal memory mapping and switching to a Colecovision memory mapping.

 

If you write your ROM cartridge with the right layout it will work fine both with Colecovision and ADAM, you don't need to worry about ADAM details.

 

Thanks Nanochess,

 

This is exactly what I wanted to know. It looks like if I were to make some hardware I would need to keep the mirroring just in case some software used a mirrored address. So does the software do a write to port 7Fh just to make sure if it's plugged in an Adam that it puts it into CV memory mode? Sorry if these seem like simple questions. I have never programmed for these platforms and want to be sure exactly how the hardware operates. Also do you know if I were to have the 24K ram enabled all the time in a colecovision if it would still run all the software correctly? I realize that some of the new software will think it is an Adam. What I am trying to accomplish is putting some of the address decoding into programmable logic. I want to make sure it is software compatible.

Edited by juice2839
Link to comment
Share on other sites

None of the original software for Colecovision writes to port 7FH except a prototype of Super Donkey Kong (and that makes it to fail in ADAM)

 

The 24K of RAM enabled all time shouldn't have any side effect, except in Super Cobra, that access two zones of memory and expects it to be same memory, I've wrote a patch a long time ago for this http://atariage.com/forums/topic/208451-super-cobra-patch-for-adam/

 

I don't have idea if any Super Game Module game access the extra 8K of RAM that can be enabled over BIOS area, but as typically these games are ADAM compatible, there should be no problem with the 24K of RAM available always.

Link to comment
Share on other sites

None of the original software for Colecovision writes to port 7FH except a prototype of Super Donkey Kong (and that makes it to fail in ADAM)

 

The 24K of RAM enabled all time shouldn't have any side effect, except in Super Cobra, that access two zones of memory and expects it to be same memory, I've wrote a patch a long time ago for this http://atariage.com/forums/topic/208451-super-cobra-patch-for-adam/

 

I don't have idea if any Super Game Module game access the extra 8K of RAM that can be enabled over BIOS area, but as typically these games are ADAM compatible, there should be no problem with the 24K of RAM available always.

 

YOU ROCK NANOCHESS!!!

 

Thank you for saving me hours with your knowledge. While I luckily have your attention can I ask a just a couple more questions? Do you think the extra hardware on the CV board for the analog input (controllers) is really needed? Would it only effect a couple games? or is it popular enough to keep that circuit. Do you see any reason to keep the front expansion connector if a CV already had 24K ram and a AY8910 mapped in? If you could expand on the CV hardware a little (aside from the 24k ram and ay8910) what would you add? One last question.. As far as I can tell the Ay-8912 is identical to the ay-8910. Does anyone actually use the 8910 for the added port?

Edited by juice2839
Link to comment
Share on other sites

Do you think the extra hardware on the CV board for the analog input (controllers) is really needed? Would it only effect a couple games? or is it popular enough to keep that circuit.

By analog input, do you mean the input sent from such devices as the Roller Controller and the steering wheel module? I wouldn't remove that, if I were you...

 

 

Do you see any reason to keep the front expansion connector if a CV already had 24K ram and a AY8910 mapped in?

There's a surprising number of people out there who are attached to their Expansion Module #1 (a.k.a. the Atari 2600 adaptor) and their Expansion Module #3 (the ADAM).

 

 

If you could expand on the CV hardware a little (aside from the 24k ram and ay8910) what would you add?

A port for a PS2 keyboard. During the design phase of the Super Game Module, there were plans to add a parallel port which was attached to one or more auxiliary port numbers on the MSX sound chip inside the SGM. The parallel port idea was dropped in the final revision of the SGM, but it could have been used to support a PS2 keyboard. :)

 

 

EDIT: If you're planning to develop a ColecoVision motherboard that integrates the components of the SGM, keep in mind that the SGM offers the possibility of remapping the BIOS address range with regular RAM, which means you get 32K of RAM instead of just 24K.

Link to comment
Share on other sites

By analog input, do you mean the input sent from such devices as the Roller Controller and the steering wheel module? I wouldn't remove that, if I were you...

 

 

 

There's a surprising number of people out there who are attached to their Expansion Module #1 (a.k.a. the Atari 2600 adaptor) and their Expansion Module #3 (the ADAM).

 

 

 

A port for a PS2 keyboard. During the design phase of the Super Game Module, there were plans to add a parallel port which was attached to one or more auxiliary port numbers on the MSX sound chip inside the SGM. The parallel port idea was dropped in the final revision of the SGM, but it could have been used to support a PS2 keyboard. :)

 

 

EDIT: If you're planning to develop a ColecoVision motherboard that integrates the components of the SGM, keep in mind that the SGM offers the possibility of remapping the BIOS address range with regular RAM, which means you get 32K of RAM instead of just 24K.

 

Thanks for your input. It's greatly appreciated. The ps2-keyboard is a great and interesting idea. It's probably not super hard to make some simple hardware to interface it, but the CV cpu (z-80) would be taxed with getting the input from a software routine. A more complex circuit could be built that had a key press buffer and took care of more handshaking. This would take pressure off from the z-80.

 

I'll plan to keep the roller controller circuit intact.

 

Adding the front expansion connector would cause a lot of extra space on a pcb. I am not convinced the atari adpater is worth it. Besides with the RGB mod for the Atari itself I would think this would be less popular. I can see the Adam expansion, but this project is more a CV project then a Adam project. So I am undecided if the expansion connector is worth the effort (I'd like a pcb as small as possible so as to make a handheld CV too). Maybe a connector with a much smaller footprint that could be brought out with an adapter?

Link to comment
Share on other sites

Adding the front expansion connector would cause a lot of extra space on a pcb. I am not convinced the atari adpater is worth it. Besides with the RGB mod for the Atari itself I would think this would be less popular. I can see the Adam expansion, but this project is more a CV project then a Adam project. So I am undecided if the expansion connector is worth the effort (I'd like a pcb as small as possible so as to make a handheld CV too). Maybe a connector with a much smaller footprint that could be brought out with an adapter?

If you're considering adding a connector with a smaller footprint, why not simply add a couple of USB ports, which would override the regular DB9 joystick ports? Then people would be able to use modern USB controllers with the ColecoVision. The only problem with that idea is that you'd need a way to configure button mappings between USB fire buttons and CV fire button and keypad keys in a persistent way. There are so many different types of USB controllers out there, some with analog sticks...

Link to comment
Share on other sites

If you're considering adding a connector with a smaller footprint, why not simply add a couple of USB ports, which would override the regular DB9 joystick ports? Then people would be able to use modern USB controllers with the ColecoVision. The only problem with that idea is that you'd need a way to configure button mappings between USB fire buttons and CV fire button and keypad keys in a persistent way. There are so many different types of USB controllers out there, some with analog sticks...

 

No, I was talking about making the expansion connector on the front of the pcb a smaller footprint type connector. It would be difficult to implement USB controllers and keep everything legacy.

Link to comment
Share on other sites

On my thoughts the Expansion Connector isn't really needed if you implement the Super Game Module support.

 

I would prefer to lose it if it's the price is to get a HDMI output ;)

 

I don't think the signal from an Expansion Module #1 (Atari) would be compliant enough for HDMI, so I would discard it.

 

Also I would suggest you to not think in PS/2 or USB until you have the board working.

Link to comment
Share on other sites

On my thoughts the Expansion Connector isn't really needed if you implement the Super Game Module support.

 

I would prefer to lose it if it's the price is to get a HDMI output ;)

 

I don't think the signal from an Expansion Module #1 (Atari) would be compliant enough for HDMI, so I would discard it.

 

Also I would suggest you to not think in PS/2 or USB until you have the board working.

Thanks for the input nacho. I think it should have a small expansion connector with just access to the I/O map and that's it. So other things could possibly be added later.

Link to comment
Share on other sites

 

Thanks Nanochess,

 

This is exactly what I wanted to know. It looks like if I were to make some hardware I would need to keep the mirroring just in case some software used a mirrored address. So does the software do a write to port 7Fh just to make sure if it's plugged in an Adam that it puts it into CV memory mode? Sorry if these seem like simple questions. I have never programmed for these platforms and want to be sure exactly how the hardware operates. Also do you know if I were to have the 24K ram enabled all the time in a colecovision if it would still run all the software correctly? I realize that some of the new software will think it is an Adam. What I am trying to accomplish is putting some of the address decoding into programmable logic. I want to make sure it is software compatible.

What type of hardware are you thinking of building ?

Link to comment
Share on other sites

I've actually got a good grasp on the memory map now thanks guys. I have managed to build a SGM clone that has the ay-3-8912 working and 24K ram working, but I have not been able to get the lower 8k bank switched ram working. I used a flip flop that was triggered with 7F to enable either Ram or Rom, but for some reason I have not got it to work.. Not sure what I am missing because I went over my circuit 10 times and in my head it should works perfect... LOL

Edited by juice2839
Link to comment
Share on other sites

Would the schematics for the ADAM Logic Board be of assistance? I'm not sure how familiar you are with the ADAM, but there are two PCBs in the Stand-Alone ADAM... the CV board which is reconfigured for layout purposes and has a composite mod and then the ADAM Logic Board which contains the extra RAM, etc., etc.

 

The Exp. Mod. #3 Adam Memory Console only contains the Adam Logic Board.

Edited by NIAD
Link to comment
Share on other sites

Would the schematics for the ADAM Logic Board be of assistance? I'm not sure how familiar you are with the ADAM, but there are two PCBs in the Stand-Alone ADAM... the CV board which is reconfigured for layout purposes and has a composite mod and then the ADAM Logic Board which contains the extra RAM, etc., etc.

 

The Exp. Mod. #3 Adam Memory Console only contains the Adam Logic Board.

 

Would the schematics for the ADAM Logic Board be of assistance? I'm not sure how familiar you are with the ADAM, but there are two PCBs in the Stand-Alone ADAM... the CV board which is reconfigured for layout purposes and has a composite mod and then the ADAM Logic Board which contains the extra RAM, etc., etc.

 

The Exp. Mod. #3 Adam Memory Console only contains the Adam Logic Board.

 

Thanks Niad. I took a look at it. Nothing much in it I see with bank switching. I think I might have figured out what my problem is. You have to switch off the internal addressing (74ls138) with the _Aux enable pin on the expansion slot. My problem I think is with my timing. I have to make sure that it is disabled and the external Ram is enabled at just the right time. It's a bit tricky. Has to be just right so there is no bus contention....

Link to comment
Share on other sites

 

 

Thanks Niad. I took a look at it. Nothing much in it I see with bank switching. I think I might have figured out what my problem is. You have to switch off the internal addressing (74ls138) with the _Aux enable pin on the expansion slot. My problem I think is with my timing. I have to make sure that it is disabled and the external Ram is enabled at just the right time. It's a bit tricky. Has to be just right so there is no bus contention....

 

Yep one rising or falling edge makes a difference.. I finally got it working 100% YEAHHHH !!!!!

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