Path: utzoo!mnetor!uunet!lll-winken!lll-tis!ames!umd5!purdue!i.cc.purdue.edu!j.cc.purdue.edu!pur-ee!iuvax!bsu-cs!cfchiesa From: cfchiesa@bsu-cs.UUCP (Christopher Chiesa) Newsgroups: comp.sys.atari.8bit Subject: 16K cartridge - How? Message-ID: <2806@bsu-cs.UUCP> Date: 29 Apr 88 17:42:37 GMT Organization: CS Dept, Ball St U, Muncie, Indiana Lines: 62 Keywords: Cartridge 16K ROM RAM I've recently been trying to learn about the innards of one of my game cart- ridges (CENTIPEDE, to be specific). I find that I can go into BUG/65, move the display list and display data "out of the way" of the Cartridge memory areas, then snap the cartridge into the slot and have its ROM suddenly appear in the appropriate address space. Using this arrangement, and assuming for convenience that I plug CENTIPEDE into the LEFT cartridge slot on my 800, I find that 8K of address space switches from RAM to Cartridge ROM. I can then copy this 8K of data down into RAM, unplug CENTIPEDE, and copy the data back to its original addresses which are now RAM again. The same bytes are now in the same addresses as when CENTIPEDE was there "in person." So far, so good. If I execute at the "cartridge run address," with CENTIPEDE plugged in, it works. I can play CENTIPEDE. But when I go through the above procedure, and try executing the SAME code in RAM, it DOESN'T work! I get a display of the title screen, and the "demo mode" makes a fair attempt at execution, but the P/M graphics are totally garbled, and you can't get beyond the title screen to try playing the game. I have several theories about this phenomenon, which I'd like to bounce off you of the Net. 1) Centipede is a 16K cartridge and I'm just not getting all the code. Support: opening the cartridge, there are TWO chips inside, as opposed to ONE chip inside Atari BASIC; Atari BASIC DOES work properly under the ROM- to-RAM copy scheme described above. Questions: How do I get at the other 8K ? Is there a "switch" address in the ROM that toggles in the second half "upon request"? Or does it appear in some other, hidden memory block that I haven't found yet? 2) Centipede is an 8K cartridge but detects RAM-vs-ROM execution and bungs up if you've moved it to RAM. No real proof OR disproof of this one, except that "that's something I'd probably do if I were Atari." There ARE a few places in the code where an LSR (logical shift right) is per- formed on memory addresses WITHIN the Cartridge ROM. I haven't been able to determine whether these operations are part of "detecting ROM vs RAM" or "swap- ping in a second 8K". I also haven't looked at the WHOLE 8K yet, of course; it's an ongoing effort and your responses here will be helpful in "pruning" paths of inquiry that are in the wrong direction. Please post or e-mail anything you may know on this type of thing; the manuals are amazingly sparse. The only comment I've ever even SEEN about 16K cart- ridges was something to the effect that "...Atari designed a second slot into the 800 with the intent of marketing larger-than-8K programs as TWO cartridges, but then they discovered a way of putting 16K programs into ONE cartridge, ..." This implies that I'm on the right track, but this is ALL the documentation there seems to be. Thanks in advance for any info you Netpeople can provide! Chris Chiesa -- UUCP: !{iuvax,pur-ee,uunet}!bsu-cs!cfchiesa cfchiesa@bsu-cs.UUCP