[Coco] Pyramid-2000 and Re: Cassette I/O Error Question

Robert Gault robert.gault at worldnet.att.net
Mon Feb 18 20:43:20 EST 2008


George Ramsower wrote:
> I'm reminded of a question I had years ago about loading and saving 
> machine language programs... At one time, I knew the peeks to find the 
> start/end/execution addresses. Now I don't.
> How about the "auto execute programs"? How woud you copy those?
> 
> If you cloadm a program... errors or not, how do you csavem that same 
> program to make a backup copy? Better yet, how would you save it to disk?
> 
> I think this is a critical issue at this point in time.
> 
> George
> 
> ps: I would love to play some of those old text adventure games again. 
> My tapes have all been wasted due to time.
> 
> 

Start address:  PRINT PEEK(487)*256+PEEK(488)
End address:    PRINT PEEK(126)*256+PEEK(127)
EXEC address:   PRINT PEEK(157)*256+PEEK(158)

So, CLOADM the program, find the above addresses, and see where the 
program loads. If the program does not clobber the Disk system from 
$600-$DFF, then you can just do the CLOADM with the disk controller 
working and then SAVEM"Name",start,end,exec. However, the game may still 
not run under a disk system as it may expect Extended Basic interrupt 
vectors not Disk Basic vectors.

The process gets more involved if the game clobbers the disk system in 
low RAM. Then you will need to relocate the game during the CLOADM 
process and create an ml program to shift it into the required location 
after a disk load. Let's take the specific game Pyramid-2000 as an example.

Pyramid-2000 loads at $600 and trashes the disk system. It also needs 
the interrupt vectors altered. So here is how I have moved the game to a 
disk system.

Boot into a Disk system, setup the tape, and enter the following.
10 WIDTH32
20 PCLEAR8
30 CLOADM"",&H800
40 SAVEM"PYRAMID",&HE00,&H4721,0

The above will free low RAM for the game, load it with an offset, and 
save it to disk. You could also PCLEAR0 and load the game above Basic if 
there is room.

Now to get the game to run you need the following ml program, RELOC.BIN.
  org $7d00
start ldx #$e00
  ldy #$600
a@ ldd ,x++
  std ,y++
  cmpx #$7421
  blo a@
  ldx #$894c
  stx $10d
  ldx #$a0f6
  stx $110
  jmp $600
  end start

You LOADM"PYRAMID":LOADM"RELOC":EXEC

If the tape game is an auto-start type, an offset CLOADM will prevent 
the auto-start from working. However, there could be memory corruption 
depending on where the auto-start routine ends up. It's a crap shoot 
where success will be trial and much error.



More information about the Coco mailing list