# bankswitching F8

13 replies to this topic

### #1 ThelenOFFLINE

Thelen

Dragonstomper

• 546 posts
• Location:Holland

Posted Sat Oct 6, 2001 4:46 PM

could anybody tell me at which adresses the cartridge will switch from bank 1 to bank 2 and from bank 2 to 1 with F8 bankswitching
. could you tell the adresses in decimal ??

thanks , TheleN

### #2 Eckhard StolbergOFFLINE

Eckhard Stolberg

Dragonstomper

• 957 posts
• Location:Germany

Posted Sun Oct 7, 2001 6:24 AM

switch to bank 1: \$1ff8 = 8184
switch to bank 2: \$1ff9 = 8185

What do you need the decimal addresses for?

Ciao, Eckhard Stolberg

### #3 ThelenOFFLINE

Thelen

Dragonstomper

• Topic Starter
• 546 posts
• Location:Holland

Posted Sun Oct 7, 2001 2:36 PM

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

### #4 cwilksonOFFLINE

cwilkson

Dragonstomper

• 535 posts
• Location:Novi, MI

Posted Mon Oct 8, 2001 2:33 AM

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

### #5 ThelenOFFLINE

Thelen

Dragonstomper

• Topic Starter
• 546 posts
• Location:Holland

Posted Mon Oct 8, 2001 3:09 PM

Hi Cris,

well i'm getting it a little bit, but i don't understand how then the rom is chip dis/enabled(ce line), it can't be always enabled

thanks, TheleN

### #6 jsoperOFFLINE

jsoper

Stargunner

• 1,527 posts
• Location:San Jose Ca

Posted Mon Oct 8, 2001 5:32 PM

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

Regards, John

### #7 cwilksonOFFLINE

cwilkson

Dragonstomper

• 535 posts
• Location:Novi, MI

Posted Mon Oct 8, 2001 5:33 PM

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 ]

### #8 AlbertOFFLINE

Albert

Quadrunner

• 35,256 posts

Posted Mon Oct 8, 2001 5:45 PM

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

### #9 jsoperOFFLINE

jsoper

Stargunner

• 1,527 posts
• Location:San Jose Ca

Posted Mon Oct 8, 2001 6:22 PM

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 ]

### #10 AlbertOFFLINE

Albert

Quadrunner

• 35,256 posts

Posted Mon Oct 8, 2001 6:40 PM

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

### #11 OldGuruOFFLINE

OldGuru

Chopper Commander

• 128 posts
• Location:NJ

Posted Wed Sep 4, 2002 4:02 PM

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.

### #12 OldGuruOFFLINE

OldGuru

Chopper Commander

• 128 posts
• Location:NJ

Posted Wed Sep 4, 2002 4:02 PM

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.

### #13 jsoperOFFLINE

jsoper

Stargunner

• 1,527 posts
• Location:San Jose Ca

Posted Fri Sep 6, 2002 11:14 AM

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

### #14 cschellOFFLINE

cschell

Dragonstomper

• 526 posts
• Location:Tucson

Posted Fri Sep 6, 2002 12:04 PM

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

#### 0 user(s) are browsing this forum

0 members, 0 guests, 0 anonymous users