Jump to content
IGNORED

Cart Copy for the > XL/XE <


Larry

Recommended Posts

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

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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/

Link to comment
Share on other sites

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 by Larry
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

If you're switching in/out of Basic/AsmEd, you need to clear the WARMST flag (8) 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.

Link to comment
Share on other sites

  • 9 years later...

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

 

 

Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

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