Jump to content
Blinky

Cheap 2K/4K X-in-1 menu driven Multicart for Atari 2600

Recommended Posts

thank you,

Only one thing that I'm not sure about:

        ldx #4  ; 11        ; JTZ: fine tuning to 262 scan lines, only for NTSC

what do you mean with that comment?

Should I remove that line in case of PAL?

Edited by DrWho198

Share this post


Link to post
Share on other sites

The whole loop can be removed for PAL.

 

Use ALT+i to see the scanlines in Stella.

Share this post


Link to post
Share on other sites

I think it is ALT+L, that gives you the linecount, fps, Screenmode and Bankswitching type.

 

Nice PCB you made there! :thumbsup:

Share this post


Link to post
Share on other sites

 

Nice PCB you made there! :thumbsup:

Thank you, it was my first PCB ever. First thing I learned was that autorouting is pretty useless when you don't have much space.

it fits in a shell with dust cover. Although I did not include enough space around the PCB.

They do fit, but it is a close one. But after making some very small trimmings at the right spots with a utility knife, putting things together is a breeze.

If anyone is interested I don't mind sharing the gerbers or even eagle files.

Edited by DrWho198

Share this post


Link to post
Share on other sites

Thanks to DrWho198 I'm tinkering with my atari 2600 again :) After he sent me one of his PCBs (Thanks again :) ). His PCB is pretty good. But I wanted to add one of these cool 'pixel' pushbuttons I have lying around so I had to cut of part of the PCB off to make space for the button then after having no sockets lying around and also realizing that there is no space to mount a EPROM on a socket. I wondered If I couldn't use a 5V FLASH chip that can be reprogrammed through the carts connector. So there I went again making some more modifications to the PCB.

All it needs are a few modifications to the PCB and a DPDT (Double Pole Double Throw) switch to turn it into an el cheapo flash cart :D

 

I've attached a new schematic for the new design. The cart uses a 256Kbyte FLASH chip that can be reprogrammed at 5V. The switch selects the carts mode. In Normal play mode. The cart is pretty much the same as the MDM cart (except that BA18 must now always be 0) and in Program mode BA18 and BA19 are used to program the cart.

 

For the programmer I'm planning to solder a card edge connector and a latch chip to an arduino proto shield so it can be be connected to basic arduino(uno). By using these parts the programmer will probably cost not more than $10. Time to order some parts now!

 

to be continued.

 

 

 

 

post-5461-0-69965700-1442169234_thumb.gif

post-5461-0-50056100-1442169303_thumb.jpg

post-5461-0-87369500-1442169339_thumb.jpg

post-5461-0-49014600-1442169355_thumb.jpg

  • Like 1

Share this post


Link to post
Share on other sites

Update: Well it's no longer a concept Idea but a working design :D

 

Instead of using an Arduino Uno I decided to use my Arduino Mega I had lying around and purchased a proto shield for it. It has more I/O ports then the Uno so it's easier to develop the flash linker on and it's also a bit less soldering since no latch chip is required (I'll probably make Uno version later when I've recieved the parts. It takes 60 days for them) I also used the connector from my dead Vader 2600 including the cart mount.

 

Basically the flash linker is nothing more than an Arduino + proto shield + 24 pin Card edge connector and some wire to wire the connector to the proto shield. I've attached some pictures including the wiring I used. I still need to improve the Arduino coding and will write a python script to send roms to the linker so those are not attached yet.

 

To test the flashing function, I embedded my Vader vs Luke rom hack into the arduino source so I could program the cart. It's great to play it on real hardware again :)

 

post-5461-0-35697200-1442770465_thumb.jpg

post-5461-0-81842000-1442770480_thumb.jpg

post-5461-0-24566000-1442770511_thumb.jpg

post-5461-0-23620200-1442770525_thumb.jpg

post-5461-0-74986300-1442770543_thumb.jpg

post-5461-0-55827800-1442770553_thumb.png

  • Like 2

Share this post


Link to post
Share on other sites

If the software on the linker/programmer improves then this might be one of the cheapest dumpers around. But some of the bankswitching shemes are really pretty complex.

Share this post


Link to post
Share on other sites

If the software on the linker/programmer improves then this might be one of the cheapest dumpers around. But some of the bankswitching shemes are really pretty complex.

 

Dumping any other roms then standard 4K ROMs and MDM (flash)carts > 256K wil be something to look into later.

 

Update:

I've attached the sketch for an Arduino Mega and python scripts needed for dumping and flashing the MDM (flash)cart.

 

If your new to Arduino and /or python you need also the following:

 

Install Arduino IDE https://www.arduino.cc/en/Main/Software

Install Python 2.7 from https://www.python.org/

Install Pyserial https://pypi.python.org/pypi/pyserial

 

The Arduino MDM-Linker has a few built in test functions for troubleshooting/testing:

  • i - show cart info
  • n - flash Vader vs Luke NTSC ROM
  • p - flash Vader vs Luke PAL ROM
  • b - select bank 0
  • bXX - select bank XX
  • d - dump currently selected 4K bank to monitor
  • dXX - dump 4K bank XX to monitor

To dump or flash rom files you need to run the python script from the command line

 

For dumping:

  • mdm-linker.py -r serialPort startBank numberOfBanks romFilename

For Flashing:

  • mdm-linker.py -w serialPort startBank romFilename

 

Next up will be working on the menu.

Edited by Blinky

Share this post


Link to post
Share on other sites

Thank you for sharing Blinky,

 

For anyone interested, here is the menu I've been working with so far. All has been tested on real hardware (NTSC & PAL).

I tried documenting it as much as possible, but there might still be some errors in it.

If anyone has any question please ask.

 

On a grade from 1 to 10 I would give this menu a 8 for adaptability. I hope someone has use for it.

 

With this menu comes the code and binary that needs to be used as bank 0 in case you plan on using a reset button on your cartridge.

If you don't need the button then the menu will be bank 0 instead.

 

Safe net ROM:

MDMC_Bank0.asm

MDMC_Bank0.BIN

 

Menu ROM:

MegacardMenu v2-0.asm

MegacardMenu v2-0.BIN

Edited by DrWho198
  • Like 3

Share this post


Link to post
Share on other sites

Thanks for sharing your menu code DrWho198 I'm sure they will be helpful for getting back into it again after all these years.

 

I think with my previous post I forgot to click the "Attach This File Button' as I saw that the Arduino sketch and linker Python script where not attached. So they are attached with this post now.

 

 

 

 

mdm-linker.zip

Edited by Blinky

Share this post


Link to post
Share on other sites

To All / Mods:

Sorry for the Dutch post. It wasn't meant to be here, but as a private post. I kind of mixed up the windows. If someone can remove it, please do. It is irrelevant to the topic

Share this post


Link to post
Share on other sites

Thank you Blinky and DrWho198 for sharing schematics and code for this project. I plan to build this when I find the time. Meanwhile I tinkered a bit with the menu and I post here the results in case someone is interested (If you look at the source, keep in mind I'm just an amateur programmer!).


I did a small modification to DrWho198's code so that the screen doesn't blank out while the firebutton if pressed. I also added some conditionals in the source so that a PAL version can be automatically generated by setting a flag. The number of menu entries in a page is also automatically adjusted depending on the nr of total games and the TV format selected (PAL has higher vertical resolution, so it can display more lines of text).
megacardmenu_v2_1.asm

post-10599-0-90963300-1446481074_thumb.png

I also hacked 2 old era menus to work with this bank scheme, in case someone wants a more retro look (including having the game list printed on paper as those menus only display the game number...)

The first is the menu for the "208 in 1" multicart, dumped and fully disassembled by Omegamatrix some years ago (http://atariage.com/forums/topic/129916-208-in-1-multicart/) This was also found, sometimes with small graphic changes, in clone consoles with built-in games.

208in1_MDMC.asm

post-10599-0-38091200-1446481158_thumb.png

The other one is the menu for the official Atari POP (Point Of Purchase) Demo Kiosk. The kiosk contained a board with a modified VCS hardware and up to 47 game roms. (http://atariage.com/forums/topic/208192-atari-2600-store-kiosk-display-all-restored/). There was also a Sears version hacked to remove the Atari logo (http://www.8-bitcentral.com/blog/2014/vgSelectionCenter.html). The Sears version has not been dumped yet AFAIK.
POP_MDMC.asm

post-10599-0-21435400-1446481159_thumb.pngpost-10599-0-96775700-1446481159_thumb.pngpost-10599-0-68795000-1446481160_thumb.png

 

Both hacks have some flags and constants that can be set in the source to choose the number of games, the tv format and whether a Reset button is going to be installed on the cart.

 

Here are a couple of test roms to run in stella. I used the roms from the pirate clone console shown in this post to generate these (because I already had the roms in a single file). The first time you run them you must set the correct bankswitching schema (MDM) in stella. To do so hit TAB, then select "Game Properies" and change "Type" from "Auto-detect" to "MDM (Menu Driven Megacart). You only need to do this once, because Stella will remember the setting for the rom.

208in1_MDMC_test_PAL-127games.bin

POP_MDMC_test_PAL_63gamees.bin

Edited by alex_79
  • Like 1

Share this post


Link to post
Share on other sites

Nice to see someone else interested in this project.

I will look at your modifications later. I'm interested how you changed the blanking when pressing the fire button. The blanking only happens because of a loop that prevents you from entering another bank while holding the fire button. If you just removed that loop instead of improving it then some games might hang or act strange when started.

thanks for sharing!

Edited by DrWho198

Share this post


Link to post
Share on other sites

I compare INPT4 with its previous value (stored in ram) and only jump to the bankswitch routine when the joystick button is released after it has been pressed (that is, if previous value of INPT4 was 0 and current one is 1).

Share this post


Link to post
Share on other sites

Update: Well it's no longer a concept Idea but a working design :D

 

Instead of using an Arduino Uno I decided to use my Arduino Mega I had lying around and purchased a proto shield for it. It has more I/O ports then the Uno so it's easier to develop the flash linker on and it's also a bit less soldering since no latch chip is required (I'll probably make Uno version later when I've recieved the parts. It takes 60 days for them) I also used the connector from my dead Vader 2600 including the cart mount.

 

Basically the flash linker is nothing more than an Arduino + proto shield + 24 pin Card edge connector and some wire to wire the connector to the proto shield. I've attached some pictures including the wiring I used. I still need to improve the Arduino coding and will write a python script to send roms to the linker so those are not attached yet.

 

To test the flashing function, I embedded my Vader vs Luke rom hack into the arduino source so I could program the cart. It's great to play it on real hardware again :)

 

 

I used a Mega a while back, to program my MCP devcart and dump 7800 carts, went a little further and added USB programming and SD cart (for writing or reading cart images). :D

 

Share this post


Link to post
Share on other sites

I'm currently working on my own version of the linker/dumper because I wanted to learn more about arduino and I have partially different goals than Blinky. Right now I'm working on a client program (in windows) that will detect what the bankswitching is on the cartridge and then dumps the rom. Optionaly it will boot stella with the dumped rom. It's turning out great, all my carts boot up fine, but I only have 4K, F6, F8 and FE carts. There is still a bug in F6 but it will probably be something stupid and I will probably remove the bug one of these days. FE is a big puzzle though... it works, but I did not use exact sience.

 

PS: unlike yours, Blinky's design uses the same cable that you use to power the device as data usb cable. Eliminating the second cable and extra module.

Edited by DrWho198

Share this post


Link to post
Share on other sites

@MadHatter: I've tested your rom both in stella as on real hardware, it does run, but you made some mistakes:

  • Online 8 titles on screen, was this your choice or did something go wrong while you changed the menu?
  • A lot of games trigger bankswitches. These are often accidental triggers that happen in the original code. One common problem is for example this piece of code:
    ...
    F145   CMP  #$00
    F147   BEQ  $F14C
    F149   LDY  #$06
    F14B   BIT  $8AA4
    F14E   LDA  $FD0E,Y
    ...
    
    In this code the BIT command is used to skip the next 2 bytes "A4 8A".
    So when the branch is taken it skips the "BIT" opcode byte and reads opcode A4 which is a zero page LDY "LDY $8A"
    No problem there... but if the branch is not taken then he does the "BIT $8AA4" which is equal to "BIT $0AA4".
    Since BIT commands actually fetch/read the address, this triggers a bankswich. Situations like this might need patching.
    Luckily in your case with 4K games the easiest way to fix this is to lock the banks.
    This will prevent any bankwitching after you selected the menu

    Check this part:
    BankList
        .byte   0,  1,  2,  3,  4,  5,  6,  7,  8,  9
        .byte  10, 11, 12, 13, 14, 15, 16, 17, 18, 19
        .byte  20, 21, 22, 23, 24, 25, 26, 27, 28, 29
        .byte  30, 31, 32, 33, 34, 35, 36, 37, 38, 39
        .byte  40, 41, 42, 43, 44, 45, 46, 47, 48, 49
        .byte  50, 51, 52, 53, 54, 55, 56, 57, 58, 59
        .byte  60, 61, 62, 63, 64, 65, 66, 67, 68, 69
        .byte  70, 71, 72, 73, 74, 75, 76, 77, 78, 79
        .byte  80, 81, 82, 83, 84, 85, 86, 87, 88, 89
        .byte  90, 91, 92, 93, 94, 95, 96, 97, 98, 99
        .byte 100,101,102,103,104,105,106,107,108,109
        .byte 110,111,112,113,114,115,116,117,118,119
        .byte 120,121,122,123,124,125,126,127
    Now add 128 to the first 15 entries (0,1,2...,14), so it will become
    BankList
        .byte  128, 129, 130, 131, 132, 133, 134, 135, 136, 137
        .byte  138, 139, 140, 141, 142, 15, 16, 17, 18, 19
    
    You can leave the rest unchanged, since you only use 15 entries.
  • You only use 15 entries but your menu still works as if it has 128. Look for this part in the code and adapt it:
    NrTitles        = 128                  ; The actual number of menu items, currently a range of 8 to 230,
                                           ; But since bank 128 to 255 are mirrors of 0-127, this number of
                                           ; Entries/Titles will not be needed.

Share this post


Link to post
Share on other sites

I also wanted to mention that as far as I know, only Stella supports MDM.

Every adaption or emulation error I find will be reported to Stephen from Stella, which makes it very accurate.

 

@alex_79:

I forgot to mention that I'm not able to test your roms on real hardware since I don't have such large eproms or eeproms by hand.

Blinky uses a bigger flash chip, so maybe he can test it. I'm unsure how big the flash chip is that he uses though.

I have not tested your rom on stella either, but for you the same advice.

Check if the games run like they should, and if they are 4K games then lock the bank to be sure.

Just let the menu call bank 128-255 instead of 0-127.

But you might already have done that.

 

 

Oh, and to all... thanks for supporting this project! its great that others are joining in.

For now I have about 8 PCB's that I don't mind selling without components I will ask €10+shipping.

(I think shipping will be about 5 or 6 euro's to most western european countries, I'll have to check to be sure)

I know it's not cheap, but had some bad luck importing these PCB's (stupid customs).

I'm sure someone can get them cheaper to the US if you have them made yourself, but that's the deal I can offer.

But do keep in mind that because of the error I made with putting the eprom on the wrong side, the PCB will not fit in a shell if you socket the eprom/eeprom.

Edited by DrWho198

Share this post


Link to post
Share on other sites
oops :?


Sorry , not my file menu, I just modified .

To change the titles , only replaced the TITLE 00000x by the name of the game , to obtain 8 games per screen.


Indeed , Invaders, Keystone Kapers and Q * Bert games are bad. I'll try your solution.


I look forward for someone to do a good menu, or fix the MegacardMenu v2-0.BIN .

Edited by Madhatter

Share this post


Link to post
Share on other sites
Madhatter, on 11 Nov 2015 - 02:59 AM, said:

oops :?

 

Sorry , not my file menu, I just modified .

To change the titles , only replaced the TITLE 00000x by the name of the game , to obtain 8 games per screen.

Yep, I know since I made it, but it should not have only 8 lines if you used v2.0.

I'll add the source for your menu, just compile one of these files and it should work.

I'll use alex_79 v2.1 version as a basis, but I have not checked that one for errors.

 

Madhatter, on 11 Nov 2015 - 02:59 AM, said:

Indeed , Invaders, Keystone Kapers and Q * Bert games are bad. I'll try your solution.

I think there are more games that crash, but locking all of them to be safe won't hurt.

 

Madhatter, on 11 Nov 2015 - 02:59 AM, said:

I look forward for someone to do a good menu, or fix the MegacardMenu v2-0.BIN

The menu works, I just wonder if you really used v2.0... in fact, I'm pretty sure you didn't :)

 

 

Use one of these:

 

(In this menu the text is exacly like your menu)

megacardmenu 15 games 4K_Madhatter.asm

 

(Removed the numbers since they have no use and save characters for longer names)

megacardmenu 15 games 4K_Madhatter_b.asm

Share this post


Link to post
Share on other sites
Ok , my mistake, I used MDMCMenu.bin


I can not easily change the games names with MegacardMenu v2-0.bin. Too much code for me...

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