I have a file transfer program (sterm) that I want to load from audio cassette, but I need to load it into CP/M.

Is this possible?

Any suggestions how to do it? When CP/M is running either I don't have access to the monitor commands, or I don't know how to get access to the monitor commands.

Normally I would do:

SE T=1


and the program then starts loading from cassette.

1 Answer 1


I want to load from audio cassette, but I need to load it into CP/M.

Is this possible?

Everything is possible with a computer :)

Of course, much depends on your meaning of 'load it into CP/M'

First try:

What about using the Monitor from CP/M's DDT?

Caveat: This is no definite way, just an idea how it could work. Also, as so often, there are traps in details - and of course many more ways to do so. This seems to be the least complicated I can think of.

This would go roughly along the lines of

  • Boot CP/M
  • Start DDT
  • Save the low storage below DDT (Address at 0006h) (*1)

    D6,7 To get the DDT base address (top of TPA)

    Calculate new Highmem for the Exidy Monitor as address-100h

    M0,FF,<Highmem> Save low storage

  • Warmstart the Monitor with a Highmem setting below that

    XH Display and ...

    <Highmem> ... change HL to hold Highmem

    GE006 Start the Exidy Monitor

  • Load your program

    SE T=1 Tape Spee 300 Bd

    LO Load the program

    Here lies the first big hurdle, if the program loads below 0100h, or above what has been set as Highmem (later being rather unlikely - as the machine does have large RAM, does it?) - It is assumed neither applies

  • Restore low storage

    MO <Highmem> 0 100

  • Execute RST 7 to restart Debug.

    G38 (*2)

  • Examine/Change/Save your program

I would most definitely start here with saving the program to disk (*3) so you may restart for here with just loading from disk

Normally I would do:


That would mean you want to run that program right away? Hmm. Well, that might hold plenty of possible traps. Most around memory usage. At least if you intend to return to CP/M afterwards.

*1 - DDT replaces CCP after start, and sets the BDOS entry address (JMP at 0005h) to its lowest address.

*2 - Note these two steps could be replaced by just G+38. IIRC

*3 - Terminate DDT by G0 (or ctrl-C) and write its memory with SAVE <number of pages> prog.COM

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .