• Please review our updated Terms and Rules here

Saving a block of memory (ROM) above the end of the TPA

exidyboy

Experienced Member
Joined
May 13, 2018
Messages
301
Location
Melbourne, Australia
I would like to get an interstate Sorcerer owner to provide me with a dump of his specific customised Monitor ROM.

It contains part of the CBIOS for an Australian floppy controller which ultimate I would like to build a copy of and also see emulated in MAME.

The instructions here for the CP/M SAVE command http://www.gaby.de/cpm/manuals/archive/cpm22htm/ch1.htm say it is used to save a block of memory from the TPA disk.

Is there likely to be any restriction on saving an error of ROM to a floppy as a way of preserving this precious code?

ie SAVE 256 ROM.BIN to save the entire 64K address space? Perhaps that could get messy?

I suppose I could first have him MOve the 2K ROM Monitor down into the 2nd page of the TPA at 100H ?
 
What I've done in the past is use DDT, and possibly some custom code, to copy the ROM down/up to somewhere in the TPA, then use SAVE. SAVE starts its save at 0100H, so probably can never do more than 255 pages. Sounds like the ROM is always enabled, which helps, so you won't need special code to carefully enable ROM, copy it, then disable. You should be able to use DDT commands to move the ROM image down to 0100H and then SAVE (if using SID instead of DDT there is a W command to directly write any block of memory to a file - I forget if SID requires CP/M 3 or not).

If the ROM is at the top of memory, you might be able to capture it with "SAVE 255 xxx.yyy" but that is a "large" file for some systems. But once you get it onto a Linux/OSX/BSD system you've got lots of tools to extract the portion with the ROM image and otherwise manipulate it.
 
I would have to pull out my books on CP/M, but I don't think the SAVE utility can read beyond the CP/M "top of memory", which should be the MSIZE variable and RAM only. The idea of using DDT to copy to low RAM and then saving it is a good one.
 
I've used DDT and the move command as durgadas recommended.

As an example, assume a 2K PROM at F000-F7FF, thenin DDT:

-MF000 F7FF 100
-G0

A>SAVE 8 PROM.BIN
A>

Be careful if your PROM runs to FFFF. Many versions of DDT have a bug when hitting the top of memory. To test for this problem, perform this command in DDT:

-DFF00 FFFF

If the dump continues forever, then the move command will clobber RAM if you specify the same range. You'll have to specify a top address of FFFE and then manually copy the byte at FFFF.

Mike
 
I would have to pull out my books on CP/M, but I don't think the SAVE utility can read beyond the CP/M "top of memory", which should be the MSIZE variable and RAM only. The idea of using DDT to copy to low RAM and then saving it is a good one.
DDT won't be available. I'll see if someone with a Sorcerer disk system can do some testing of SAVE above top of memory.
 
Is there a ROM monitor that can be used to key in a very short move loop? This program would copy the data from the PROM location to 100h in RAM. Key in the bytes of the program and run it from the ROM monitor. Then boot CP/M and do the SAVE command (the TPA is not modified by a CP/M boot).

What is the address and length of the PROM?

Mike
 
Is there a ROM monitor that can be used to key in a very short move loop? This program would copy the data from the PROM location to 100h in RAM. Key in the bytes of the program and run it from the ROM monitor. Then boot CP/M and do the SAVE command (the TPA is not modified by a CP/M boot).

What is the address and length of the PROM?

Mike
In the Exidy Sorcerer inbuilt ROM monitor (that I am trying to dump) there is a MOve command so there would be no need to type in a machine language program to copy this ROM into the TPA.
But even if it was necessary it would be too much to ask.

It would be like asking someone who stills owns a motorcycle they bought new in 1978 at age 45 if they wouldn't mind popping the valve cover off and measuring the valve clearances because you're doing up a similar bike.

I was hoping I could keep things as simple as possible,

Ideally:
1. Boot the computer
2. Type one CP/M command
3. Post me the disc

In my experience asking for anything more complex would not be fair due to level of stress and frustration it would create.
 
Perhaps I’m missing something but keeping things simple could you not save the monitor rom to tape (or directly to a PC to convert to WAV)?

You could also do that as a makeshift move tool: save the rom memory block and then load it back at 100H.
 
If it was me I would write a very small 8080 program to copy memory from a specified location to a location just above itself in the TPA (for a specified length) and then exit back to CP/M. You should then be able to use the SAVE command to save the resulting memory image to a defined disk file.

Dave
 
So, something like this (done in DDT), to move the 4KB starting at F000 to 0100:

Code:
DDT VERS 2.2
-a80
0080  lxi d,100
0083  lxi h,f000
0086  lxi b,1000
0089  mov a,m
008A  stax d
008B  inx h
008C  inx d
008D  dcx b
008E  mov a,c
008F  ora b
0090  jnz 89
0093  jmp 0
0096  .
-g80
Then issue your SAVE xx file
 
I was hoping I could keep things as simple as possible,

Ideally:
1. Boot the computer
2. Type one CP/M command
3. Post me the disc

So, he should be able to boot CP/M, type "SAVE 255 filename" and then send you the disk. you can deal with extracting the image from the end of the file later. I'm assuming this machine has the ROM mapped-in all the time, which is why it is in high memory. From looking at the standard CCP source code, it will save anything from 1 to 255 pages - provided there is space on the disk.
 
Perhaps I’m missing something but keeping things simple could you not save the monitor rom to tape (or directly to a PC to convert to WAV)?
It's a disc system. Not a tape system. He would need to dismantle the system to get access to the cassette port. Set up a modern PC (on the floor?) next to it. Purchase and connect audio cables. Install Audacity or similar and learn to use it. Dismantle that entire rig. Absolutely out of the question.

You could also do that as a makeshift move tool: save the rom memory block and then load it back at 100H.
No need. The monitor has a MOve command. But that makes it a multistep process and requires at least one transition between the monitor and CP/M
 
So, he should be able to boot CP/M, type "SAVE 255 filename" and then send you the disk. you can deal with extracting the image from the end of the file later. I'm assuming this machine has the ROM mapped-in all the time, which is why it is in high memory. From looking at the standard CCP source code, it will save anything from 1 to 255 pages - provided there is space on the disk.

You've answered my original question. Thankyou. :)
As there is no skew and side 0 is written in its entirety before side 1 (ie 'sidedness'=1) then putting the object code back together will be straight forward.
 
Back
Top