Jump to content
IGNORED

bankswitching F8


Thelen

Recommended Posts

well i've made an sram programmer, but for now i only can program 4K games, and i want to add bankswitching method F8. so i've looked at a ms-pacman cartridge board and i've drawn the schematic (there are two types of ms-pacman carts, one with the bankswitching outside and one with only the prom) and found out that there are only 12 adress lines are connected to the prom, but for 8K you'll need 13 lines i thought

 

2^12=4096 4K

2^13=8192 8K

 

but how can the atari give an adress like 8184 or 8185, the highest adress line out is 4096 ?? i thought..

Link to comment
Share on other sites

Hi thelen,

 

The 2600 actually has 13 address lines, A[12:0]. A12 is used to enable the ROM inside the cartridge. So when Eckhard refers to address $1FF8 it means A12 is high, and A[11:0] = $FF8, or A[11:0] = 4088 (decimal).

 

I don't have a Ms. Pacman cart here, but if you look closely, I'll bet you see the ROM's chip enable line (/CE) going to the cartridge port. If memory serves, it should be between A11 and A10 on the connector???

 

Hope this helps!

 

-Chris

Link to comment
Share on other sites

Thelen,

 

A12 essentially select between the cartridge and the deck. If A12 is high, you're reading from the deck. If it's low, you're reading/writing to something inside the console. These are mutually exclusive. You can't do both at the same time. In summary:

 

$0000-$0fff = internal addresses

$1000-$1fff = cartridge addresses

 

If you want *detailed* information about the 2600's memory architecture, check out the following URL.

 

Chris Wilkson's Atari VCS hardware page

 

You'll find complete memory maps there.

 

-Chris

 

[ 10-08-2001: Message edited by: Chris Wilkson ]

Link to comment
Share on other sites

quote:


Originally posted by John Soper:

I just posted my F8/F9 bankswitch circuit on rec.games.video.classic (this site does some nasty things to ascii graphics, at least on my sparc). It may take a few hours to show up. The easiest way to go there is:
www.deja.com


 

Hi John,

 

If you enclose the ASCII text inside of List-Start and List-End UBB code, then your circuit should look okay. If you email it to me ( albert@atariage.com ) then I can post it here and it'd also be great to add it to our archives (and the 2600 FAQ).

 

..Al

Link to comment
Share on other sites

Okay Albert, I'm trusting you on this one.

 

code:


ONE APROACH TO ATARI 2600 F8/F9 BANKSWITCH CIRCUITRY

 

John Soper (john-soper-1991@alumni.calpoly.edu)

Oct 8 2001

 

The F8 bankswitch convention works the following way:

 

Address 1 1111 1111 1000 Go to bank 0

1 1111 1111 1001 Go to bank 1

----------------

PinName A AAAA AAAA AAAA

1 1198 7654 3210

2 10

 

One way to do this is to put a detection circuit on

A1-A12 which clocks A0 into a flip-flop as the bank

value. There may be easier/cleaner ways to do this

but I think three chips (7404,7474,74133) isn't that

bad.

 

If you build this, you do so at you own risk.

 

 

|

-------------| >()-------------- Eprom

| |/ Enable

|

A12 -+-|- ________

A11 ---| | Set Rst|

A10 ---| | |

A9 ---| 7 A0--|D 7 Q|-- A12

A8 ---| 4 N | 4 | of eprom

A7 ---| 1 A | | | 7 |

A6 ---| 3 N |()---| >()---|> 4 |

A5 ---| 3 D | |/ |________|

A4 ---| /

A3 ---| /

/A2 ---| /

/A1 ---| /

--|_/

 

Eprom must be tied to 2600 D0-D7 and A0-A11 directly

 

/A1, /A2, A12, Nand output inversions done with 7404 chip

 

/A1 goes to two pins on the NAND gate because it has 13

inputs. You can use some other signal though

 

The 2600 A12(cart enable) and eprom A12 are completely

separate animals

 

The 7474 is a dual D flip-flop, you can use something

equivalent

 

Tie the 7474 Set and Reset signals to VCC.

 

This circuit was had a setup time issue last time I used

it. Solved it by adding two more inverters (three total)

after the NAND gate, then sticking a 300pf cap to ground

in the middle somewhere.


 

[ 10-08-2001: Message edited by: Albert ]

Link to comment
Share on other sites

Well, I screwed up. I meant to say "code" when I said "list". So I edited your post to use the Code tags, which does fix the formatting but the font is tiny when I'm looking at it. Looks like UBB is setting the font size to "1", I need to see if there's some way I can fix that in the UBB settings (or by hacking the "code", so to speak).

 

..Al

Link to comment
Share on other sites

  • 10 months later...

Hi,

I've been looking at the solution that jsoper came up with. I think that I understand how it works which actually brings the following question to mind: What happens during system reset?

 

If I understand correctly, the uP seeks for the JMP address (start of the code) at $FFFC -> A2=1 and A1=0, this will cause the 74133 to have '1' on its output which will cause '0' on the clock input to the FF. Now, what gurantees that the FF's Q is '0' at this time? it may be either at '0' or '1' (since there is no RESET connected to it) which means that your A12 of the EPROM will either point to the upper bank (if = '1') or to the lower bank (if = '0'). That means that to be safe, you have to duplicate some parts of the code in the two segments (to set the current bank to 0, for example)... right? How do you do that? Do you have to create a special linker for that purpose?

 

Thanks,

OG.

Link to comment
Share on other sites

Hi,

I've been looking at the solution that jsoper came up with. I think that I understand how it works which actually brings the following question to mind: What happens during system reset?

 

If I understand correctly, the uP seeks for the JMP address (start of the code) at $FFFC -> A2=1 and A1=0, this will cause the 74133 to have '1' on its output which will cause '0' on the clock input to the FF. Now, what gurantees that the FF's Q is '0' at this time? it may be either at '0' or '1' (since there is no RESET connected to it) which means that your A12 of the EPROM will either point to the upper bank (if = '1') or to the lower bank (if = '0'). That means that to be safe, you have to duplicate some parts of the code in the two segments (to set the current bank to 0, for example)... right? How do you do that? Do you have to create a special linker for that purpose?

 

Thanks,

OG.

Link to comment
Share on other sites

I think the F8 games were written so they'd work correctly no matter which bank was active after a 2600 reset. It'd be interesting if someone switched the two 4k blocks around and tried to run them (2600 or emulator). Kevin Horton talked about this in his bankswitching document, seems like one cart worked better after the switch.

JOhn

Link to comment
Share on other sites

F8 games are supposed to be programmed such that they can start in either bank, however there are a few ROMs out there that require that they be started in a particular bank (thus the reason you can now specify the starting bank on the Cuttle Cart.)

 

You can't just swap the banks unless you also swap the behavior of 1FF8 and 1FF9, otherwise the bankswitch commands will try to jump to the current bank and thus bankswitching will be broken.

 

I believe it's Time Pilot that uses this reversed behavior. That's what Kevin Horton talks about, that he had to swap the two banks to make it work because of the reversed logic it used compared to standard F8 bankswitching.

 

Chad

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