+Larry Posted November 5, 2010 Share Posted November 5, 2010 Does anyone know of a version of C. David Young's "CARTCOPY.BAS" or work-alike program that functions correctly with the XL/XE? The original program was written about 1981 and of course the XL was at best a "twinkle" in Atari's eyes. All of similar programs that I've found only will properly load a cart image into the 800-type OS (that includes the Utilities disk from Atarmania). I even wrote one myself, called CART816.BAS, but it has the same issues. To add insult, I've apparently lost my source code! I thought before I "reinvented the wheel," I'd check... Thanks, -Larry Quote Link to comment Share on other sites More sharing options...
russg Posted November 6, 2010 Share Posted November 6, 2010 Does anyone know of a version of C. David Young's "CARTCOPY.BAS" or work-alike program that functions correctly with the XL/XE? The original program was written about 1981 and of course the XL was at best a "twinkle" in Atari's eyes. All of similar programs that I've found only will properly load a cart image into the 800-type OS (that includes the Utilities disk from Atarmania). I even wrote one myself, called CART816.BAS, but it has the same issues. To add insult, I've apparently lost my source code! I thought before I "reinvented the wheel," I'd check... Thanks, -Larry I remember one, called 'Impersonator'. You ran it from disk and then hot insert the cart. It made a dump of the cart and then you could load your resulting file using a dummy cart. I don't know what you're looking for. I guess something along the lines of 'Impersonator'. You can dump carts using Omnimon OS. Insert the cart then hit RESET SELECT and you enter the monitor. From there you can dump a memory range, usually $A000 to $BFFF to sectors on a single density disk. Then you need to dump the sectors to a file, I made my own program to do this. After making a file you could make it a load file sometimes, or run it as a ROM file in an emulator. I think I lost my dummy cart. If I remember, I tried dumping 'Star Raiders' cart. I don't think it worked. I don't know if the Impersonator disk is around or not, it was probably copy protected, but like most it may have been cracked. Uhmm... Just about every cart made for A8 has already been made into a load file, whatcha trying to do? Quote Link to comment Share on other sites More sharing options...
Mirage Posted November 6, 2010 Share Posted November 6, 2010 In post #12 in this thread, I posted a scan of my Impersonator manual if you're curious. I think the disk image is out there somewhere (probably mine) which may be useful to hack I suppose? I don't know, but it would not be directly useful without the Impersonator cart, I wouldn't think. http://www.atariage.com/forums/topic/158723-how-does-copy-protection-work/ Quote Link to comment Share on other sites More sharing options...
+Larry Posted November 6, 2010 Author Share Posted November 6, 2010 (edited) Thanks, guys. My needs are pretty modest, since I'm not a gamer. I need to get the unprotected BASIC and the AsmEd. cart images running with an unexpanded 1200XL. Unfortunately with the setup that I am using, I need to plug in two carts. SDX w/MyIDE and BASIC (or AsmEd). With the particular hardware of this system, there is no alternative way -- none. So BASIC must run from ram. Thanks for the info on the Impersonator. It looks similar to the PILL which I have. I think in the short-run the PILL's saver/loader may be the answer to my needs. Unfortunately, I can't use the PILL itself -- the PILL is a cartridge, and with a couple of exceptions (R-Time8 being one), you can't have two carts active at once. I'd also still like to understand why CARTCOPY or CART816 doesn't run on the XL/XE, and it's probably quite simple. But first, I need to get this 1200XL system working as I plan. -Larry Edit: I found my Cart816.BAS source this AM (lots of REMs) so that should make it a lot easier to fix this XL/XE incompatibility. Edited November 6, 2010 by Larry Quote Link to comment Share on other sites More sharing options...
Rybags Posted November 6, 2010 Share Posted November 6, 2010 filecopy.zip This old Basic program I wrote will copy the non-banked 8/16K cartridges. Been a long time since I used it, IIRC it'll save them as binary file with Init/Run addresses as per the cartridge vectors. But it doesn't do anything like recovering the RAM wiped by the screen when you press Reset, so it won't be much use for Basic or the AsmEd cart. I've got an XEX version of the AsmEd that runs from RAM... although it relies on Basic being enabled (XL-banking style) to work properly. The problem you'll find running any RAM-based cart images on the 1200XL is that when you press Reset, the screen will wipe what's at $BC00-$BFFF. The way around it is to keep a copy of that area somewhere else in RAM and restore it each time, as well as Opening another screen with RAMTOP set lower. Of course that introduces it's own problem, you don't really want to lose a chunk of RAM in low memory, probably the best place to keep the backup 1K copy is in RAM under the OS, but that can conflict with some DOSes. Quote Link to comment Share on other sites More sharing options...
russg Posted November 6, 2010 Share Posted November 6, 2010 Thanks, guys. My needs are pretty modest, since I'm not a gamer. I need to get the unprotected BASIC and the AsmEd. cart images running with an unexpanded 1200XL. Unfortunately with the setup that I am using, I need to plug in two carts. SDX w/MyIDE and BASIC (or AsmEd). With the particular hardware of this system, there is no alternative way -- none. So BASIC must run from ram. Thanks for the info on the Impersonator. It looks similar to the PILL which I have. I think in the short-run the PILL's saver/loader may be the answer to my needs. Unfortunately, I can't use the PILL itself -- the PILL is a cartridge, and with a couple of exceptions (R-Time8 being one), you can't have two carts active at once. I'd also still like to understand why CARTCOPY or CART816 doesn't run on the XL/XE, and it's probably quite simple. But first, I need to get this 1200XL system working as I plan. -Larry Edit: I found my Cart816.BAS source this AM (lots of REMs) so that should make it a lot easier to fix this XL/XE incompatibility. If you're looking for binary load BASIC and ASMED, here they are. ASMBAS.ZIP Quote Link to comment Share on other sites More sharing options...
+Larry Posted November 6, 2010 Author Share Posted November 6, 2010 Hi Russ- Thanks! These appear to work perfectly -- even "B." heheh! Perhaps I can even get these to survive a RESET with a little AsmEd work. Thanks again, Larry If you're looking for binary load BASIC and ASMED, here they are. Quote Link to comment Share on other sites More sharing options...
russg Posted November 6, 2010 Share Posted November 6, 2010 Hi Russ- Thanks! These appear to work perfectly -- even "B." heheh! Perhaps I can even get these to survive a RESET with a little AsmEd work. Thanks again, Larry If you're looking for binary load BASIC and ASMED, here they are. I can't make them RESET proof, not presently anyhow. You should SAVE or LIST before going to DOS. You can do that and then RUN A000 in Sparta or 'M' run at $A000 in MyDOS and get back to BASIC or ASMED, but your program is gone. It might work best to 'NEW' if you do that. Quote Link to comment Share on other sites More sharing options...
Rybags Posted November 7, 2010 Share Posted November 7, 2010 I should have mentioned before... to reset-proof your Basic or Asmed, you need to use the cassette init vector (2,3) to point to your own init routine. Set the BOOT (9) flags to it's value OR 2 (1 = disk software booted, 2=cassette, 3=both). Then your init routine will need to: . Set the OS top of RAM pointers to $A0. The decimal locations to change are 106 and 740. . Close and re-open the "E:" device so that the screen is re-established around $9C00. . Restore the ROM-copy contents of $BC00-$BFFF. Good idea is to keep this copy under the OS, maybe try $CC00-$CFFF. . Call the cartridge INIT vector by indirect JSR through ($BFFE) . Test BOOT flag. If bit 0 set indicating DOS present, then do an indirect JSR through ($0C). . Run the cartridge by JMP ($BFFA). You might want to put a keycheck in, e.g. with my 800XL AsmEd I check for SHIFT and if it's held during Reset I switch between Basic and Assembler. For the 1200XL you might use it to bypass Basic and just run DOS instead - for that to happen, just bypass everything above and DOS should run instead. It's handy to have in case you corrupt/crash your cartridge copy. You need to put your init routine somewhere. My AsmEd has it right below the screen ($9B80 ?) but that's not a real good place because it will be wiped as soon as you open any graphics screen that uses > 1K. There are a few places in low RAM where there's bytes free. Another place is somewhere low in the stack - $110-$17F usually never gets touched so you could use that. Quote Link to comment Share on other sites More sharing options...
russg Posted November 7, 2010 Share Posted November 7, 2010 I should have mentioned before... to reset-proof your Basic or Asmed, you need to use the cassette init vector (2,3) to point to your own init routine. Set the BOOT (9) flags to it's value OR 2 (1 = disk software booted, 2=cassette, 3=both). Then your init routine will need to: . Set the OS top of RAM pointers to $A0. The decimal locations to change are 106 and 740. . Close and re-open the "E:" device so that the screen is re-established around $9C00. . Restore the ROM-copy contents of $BC00-$BFFF. Good idea is to keep this copy under the OS, maybe try $CC00-$CFFF. . Call the cartridge INIT vector by indirect JSR through ($BFFE) . Test BOOT flag. If bit 0 set indicating DOS present, then do an indirect JSR through ($0C). . Run the cartridge by JMP ($BFFA). You might want to put a keycheck in, e.g. with my 800XL AsmEd I check for SHIFT and if it's held during Reset I switch between Basic and Assembler. For the 1200XL you might use it to bypass Basic and just run DOS instead - for that to happen, just bypass everything above and DOS should run instead. It's handy to have in case you corrupt/crash your cartridge copy. You need to put your init routine somewhere. My AsmEd has it right below the screen ($9B80 ?) but that's not a real good place because it will be wiped as soon as you open any graphics screen that uses > 1K. There are a few places in low RAM where there's bytes free. Another place is somewhere low in the stack - $110-$17F usually never gets touched so you could use that. The BASIC and ASMED binary load I put here has a simple preparation on page six, put $A0 in $6A (RAMTOP) and close and open the E: device using CIOV ($E456) to move the display list and screen memory down below $A000 then just jmp to $A000, there's no need to init the cart as $BFFE just points to a RTS. I take it the $BC00 to $BFFF gets wiped out when you hit RESET. I briefly tried to figure what happens when RESET is hit, but didn't figure it out, basically it does a warmstart and then loads DOS. I never had much call to hit RESET anyway. A SAVE or LIST and then call DOS, do whatever you wanted to in DOS and then RUN A000 in Sparta or 'M' A000 in MyDOS puts you back in ASMED or BASIC, with your code gone, which you promptly ENTER or LOAD. What I'm saying is I still don't understand how to keep RESET from loading DOS and wiping out the BASIC or ASMED, such that it would have to be reloaded. Quote Link to comment Share on other sites More sharing options...
russg Posted November 7, 2010 Share Posted November 7, 2010 I mean, I use RESET to exit from BASIC or ASMED. The only program I remember being RESET proof was SpeedScript. I found it annoying that I couldn't figure how to exit SpeedScript. I still don't know how, so I modified it by keeping DOSINI pointed at DOS instead of the RESET vector. You can also exit BASIC or ASMED just by typing 'DOS'. And that doesn't mess up $A000 to $BFFF, you can just run at $A000 and get back to BASIC or ASMED, but with your code wiped out. Quote Link to comment Share on other sites More sharing options...
Rybags Posted November 7, 2010 Share Posted November 7, 2010 If you're switching in/out of Basic/AsmEd, you need to clear the WARMST flag ( when re-entering either, because each one uses similar z-page locations for their pointers and will corrupt the other one. That's also equivalent to entering "NEW". The problem though is that if WARMST is clear after the CASINI (2) vector is called, the OS will boot the disk again. That can be an advantage but we don't really want it happening here. The trick is to have your routine do the stuff the OS would normally do so that it doesn't get the chance to reboot the disk. So, you've got your routine with the BOOT flag (9) with bit 1 set. You'd need something like: jsr initdos lda #0 sta WARMST ; 8 jsr initcart jmp ($bffa) initdos jmp ($c) initcart jmp ($bffe) You only set WARMST to zero if changing to a different language environment, otherwise leave it alone. Doing this means the stack will have some stuff left on it, but it doesn't matter. Quote Link to comment Share on other sites More sharing options...
Scooter83 Posted October 18, 2020 Share Posted October 18, 2020 I came into possession of this cart and working on figuring out what software would work with it. Came across this post hoping someone here might be able to shed some light on things 1 Quote Link to comment Share on other sites More sharing options...
+Larry Posted October 18, 2020 Author Share Posted October 18, 2020 I'm going to guess that it is some version of a "blocking" cartridge which allows you to binary load a cart image into ram. Then you switch the device "on" to prevent the copy protection in the code from overwriting and destroying the program. Probably the most popular one of these was "The Pill" from CSS. The docs for it are online at www.nleaudio.com/css It can be found under Product Manuals (Super Pill). Some more pictures might get us closer to what you actually have. I'm going mainly by the "off on" on the label. Larry Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.