Giter Club home page Giter Club logo

atari-xe-multicart's Introduction

XE Multicart

A multi-game cartridge for the Atari 400/800/XL/XE with software game selection which can hold up to 127 games!

multicart menu

How it works?

A 74HCT373 latch is used for extra address pins, it's accessed by writing to the cartridge control block ($DF00) causing a bank switch. After selecting appropriate ROM bank, the firmare resets the console in turn starting the game. To select another game, reboot your Atari.

Assembly instructions

PCB

Assuming that you already have the PCBs on hand, either by ordering them on-line or creating them yourself, the assembly is pretty simple - just solder the 74HTC373 latch, the transistor and the passive components. It is highly recommended to solder a socket for the memory chip as it makes it much easier to re-program it. Also, keep in mind that the component side goes into the console facing down, so prepare your case accordingly.

Memory chip configuration

The PCB layout of this cartridge is customizable - you can fit any 28/32-pin JEDEC-compliant EPROM chip in the 27C line or compatible flash memory chip with size ranging from as low as 64 kbit up to 8 mbit. Fitting larger chips means you will be able to store more game ROMs (up to 127 total), but you can also use this layout without the game selection firmware to store any single standard 8k/16k game you want.

Jumper settings

There are four jumpers on the PCB - JP1 to JP4 - oriented vertically when looking at the top layer with the edge connector facing down:

      0   0   0   0\ UP
DOWN /0   0   0   0/
     \0   0   0   0
     JP1 JP2 JP3 JP4

These are used to configure the cartridge for the appropriate memory chip. The following table lists jumper settings for various common configurations (UP means "short top two pins", DOWN means "short bottom two pins" and X means "don't care"):

Memory chip size JP1 JP2 JP3 JP4
64k (27C64) X X UP UP
128k (27C128) X X UP UP
256k (27C256) X X UP DOWN
512k (27C512) X X UP DOWN
1m (27C010) UP UP X DOWN
2m (27C020) UP UP DOWN DOWN
4m (27C040) UP DOWN DOWN DOWN
8m (27C080) DOWN DOWN DOWN DOWN

Building the firmware

Prerequisites

To succesfully build the firmware for the multicart, you will need to set up the following dependencies on your system:

  • make - the Make build system,
  • python3 - Python programming language version 3.*,
  • gcc - GNU Compiler Collection,
  • cc65- the CC65 compiler.

Build

In order to build the firmware & a cartridge image you will need some standard 8k/16k ROM files (obtainable freely on the Internet). Install all the dependencies, put your ROMs into the roms/ directory and type:

make

This will run a script that automatically detects and arranges the games, builds the firmware and compiles a cartridge image ready for burning with your favourite EPROM burner.

Alternatively, you can supply a custom ROMs directory like this:

make ROMS=path/to/roms/directory

If you encounter any troubles while building, make sure to rebuild everything cleanly:

make clean && make

Building from a docker container

In order to build the container itself run the following command in project directory

docker build -t atari_xe_multicart:latest .

After the container is ready to use run the following command to create cart.bin file. It assumes that .rom files are inside the /roms directory inside project directory.

docker run -ti --rm -v $(pwd)/roms/:/input/ -v $(pwd):/output/ atari_xe_multicart

Running in an emulator

Multicart images don't work in any emulators that I know of, because they are using a custom (if simplistic) bank-switching mechanism. For testing purposes, you can run just the menu.bin (the game selection firmware) by loading it as a standard 8k cartridge ROM in your favourite Atari 800/XE emulator. For example:

atari800 -xl -xlxe_rom path/to/ATARIXL.ROM -cart menu.bin

It'll display the game selection menu, but any attempts at selecting a game will result in restarting the game selection menu.

License

Software & hardware licensed under the MIT license (see LICENSE file for details). The OSHW logo comes from the BFL library, licensed under CC-BY-SA. Any commercial product names seen on software screenshots are for demonstration purposes only and are not included with this product.

atari-xe-multicart's People

Contributors

idorobots avatar marcin-jozwikowski avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

atari-xe-multicart's Issues

How to setup 27c512 ?

Hi,
I wanted to use 27c512 but how to setup it on pcb. Please look at the my uploaded picture. Is this true? I created 64 KB bin file on linux via make command. I tried it on 600xl and 800xl but it does not work.

How to do? What stage could I have done wrong?

http://i64.tinypic.com/2nip4s7.jpg

How to generate the compiled bin to program?

Hi,
I am struggling in trying to understand how to generate a compiled bin file with my rom selections and menu.
I am using Windows10 and try to use "make" command from the console but it does not work. I tried with buildcart.py and I get the message that no roms have been found despite 8k and 16k roms are copied in the roms folder.
Is there a more detailed guide on steps to perform here? What need to be installed?
Thanks
Rick

Emulation support

Hello.

At my request, Beta version of Altirra now supports "xe-multicart".

I created two cartridges with 8k games and 16k games.

In the first case (8k) everything works fine. But the cartridge with 16k games could not be start. The emulator crashes or atari show self test. Unfortunately, Unfortunately, I'm only in the process of soldering a hardware cartridge so far and can't test rom image at the real atari.

So far, of course, this is still only a beta version, but it is already gratifying that you can test the assembly before flashing the chip.

Perhaps this is some kind of flaw in the emulator, or perhaps I have not assembled something correctly.

In any case, I wanted to inform you about this wonderful news. As soon as full-fledged work in the emulator is implemented, it will be possible to update the documentation.

Link to the post

https://atariage.com/forums/topic/327133-altirra-400-released/?do=findComment&comment=5021103

Cart detection

Hello,
could you please describe how an Atari XL/XE detects if a cart is present in the system? I thought it triggers a low /S4 and checks if RD4 is high (and respectively triggers /S5 and checks RD5) but in this case the 373 provides random output after poweron, so it should not work... ๐Ÿ‘ (but it does at your end).

Thanks!

EDIT: Er... RD5 is always set high, so I guess the machine triggers /S5 and RD5 is high -> cartridge is present.

Does it work for anyone?

I tried different eproms, different 8.16kb files and just the menu and it never worked. I tried to put the eprom into another cartridge and the menu appears there at least. So does it work for anyone?

games.c

The project doesn't have file "games.c", neither it is generated with Makefile.

Am I missing something ?

Makefile:28: recipe for target 'menu.bin' failed

cl65 -v -tatari  src/menu.c -Csrc/menu.cfg -m menu.bin.map -o menu.bin
Opened include file `src/menu.h'
Opened include file `/usr/lib/cc65/include/stdio.h'
Opened include file `/usr/lib/cc65/include/stddef.h'
Opened include file `/usr/lib/cc65/include/stdarg.h'
Opened include file `/usr/lib/cc65/include/stdlib.h'
Opened include file `/usr/lib/cc65/include/string.h'
Opened include file `/usr/lib/cc65/include/stddef.h'
Opened include file `/usr/lib/cc65/include/conio.h'
Opened include file `/usr/lib/cc65/include/atari.h'
Opened include file `/usr/lib/cc65/include/_gtia.h'
Opened include file `/usr/lib/cc65/include/_pbi.h'
Opened include file `/usr/lib/cc65/include/_pokey.h'
Opened include file `/usr/lib/cc65/include/_pia.h'
Opened include file `/usr/lib/cc65/include/_antic.h'
Opened include file `/usr/lib/cc65/include/atari.h'
Opened include file `/usr/lib/cc65/include/unistd.h'
Opened include file `src/games.c'
src/menu.c(42): Error: Size of data type is unknown
Input: const unsigned int num_games = sizeof(games)/sizeof(games[0]);
1 errors, 0 warnings
Makefile:28: recipe for target 'menu.bin' failed
make: *** [menu.bin] Error 1

At last for I can see in the code, its trying to get an array of games and their size, but it cannot generate it...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.