Friday, May 02, 2014

Running Intelligent Terminals CP/M on Cromemco Computers

This is a tutorial on how to run the CP/M 2.2 Operating System on a physical or Virtualised Cromemco Computer

Virtual ZEMU Emulator
This is a self contained article.  Please see also running CDOS with ZEMU

In this part we will run the 8bit Digital Research CP/M for Intel 8080 inside the  32bit ZEMU emulator running on Microsoft Windows. [In my case my 32bit windows is itself running inside VMware on a Windows 2012 x64 server :-) ]

Step by step, the installation on the 32 bit Windows client. (You can't install ZEMU in a 64 bit environment)

Setup noticed it was about to overwrite some Microsoft libraries with older binaries so I said LEAVE existing binaries  (i.e. don't overwrite) when prompted.

  • Start Emulator Program   (don't press Run yet)
  • Load Cromemco RDOS  (Resident Disk Operating System) version 03.12  from C:\emulator\RDOS\rdos312.hex
  • Load I/O Port ReMap c:\emulator\IOMaps\Cromemco CDOS.iom

  • Load Disk A:, which is a bootable 8" floppy disk in raw sector format

    I used c:\emulator\DiskImages\CPM\280CCPM.DSK

  • Change format of A: disk to Cromemco CDOS Double Sided and Double Density which is C:\emulator\formats\CLDSDDST.fmt
(This CPM emulator uses the CDOS diskette format)

  • Now everything is ready, RUN the emulator by pressing Run Button
It works!

Physical Cromemco System
First I would install the HxC diskette emulator and then

  • Copy the image file 280CCPM.hfe onto a SDcard and insert into your HxC emulator
  • Switch on your Cromemco System and using the HxC front panel buttons select that the A: drive be associated with the 280CCPM file

  • Boot your physical system, and it should work

Some added Printouts
(Hopefully Google will index the following text for future people searching)

Bank 0 > 0 1 2 3 4 5 6 7 8 9 A B C D E F
         ^ ^ ^ ^ ^ ^ ^ ^ X X X X X X X X
Preparing to boot, ESC to abort


     56k CP/M vers 2.2
Intelligent Terminals Corp.
   Release 5b - 03/27/81

System Addresses:
FDC : D000
CRT : DA00



ASM     .COM   8k | CBIOS   .ASM   4k | CDOSCPM .COM   2k | CDOSCPM .HLP   4k

COPYFDC .COM   2k | CPM3355 .SPR   2k | CPM56   .COM  10k | CPM64   .COM  10k
CPMCRT  .ASM  16k | CPMCRT  .PRN  38k | CPMCRT  .SPR   2k | CPMD4ZCP.COM   8k
CPMFDC  .SPR   4k | CPMGEN  .COM  22k | CPMHARD .SPR   6k | CPMLOAD .COM   6k
DDT     .COM   6k | DEBUG   .COM  10k | DEL     .COM   2k | DU314   .COM  12k
DUMP    .COM   6k | ERAQ    .COM   2k | FILES   .TXT   6k | L       .COM   4k
LINK    .COM  16k | LOAD    .COM   2k | LTYPE   .COM   8k | LTYPE   .DOC   2k
LU300   .COM  20k | LU300   .DOC  36k | LUDEF3  .DOC   8k | M7CD    .MSG   2k
M7CD1   .AQM   8k | M7CD1   .ASM  10k | M7NU    .COM  20k | MAC     .COM  12k
MBOOT   .COM   2k | MOVCPM  .COM  10k | NSWEEP  .COM   8k | NSWP    .COM   8k
PIP     .COM   8k | PIPX    .COM   8k | PRINTER .COM   2k | READ    .COM   8k
READ    .HLP   4k | READ-ME .TXT   6k | RMAC    .COM  14k | SD      .COM   4k
SD      .HLP  12k | SD48A   .NTE   6k | SQ      .COM  14k | SQUSQ   .CLU   2k
STAT    .COM   6k | SUBMIT  .COM   2k | SYS64   .COM  12k | SYSGEN  .COM   2k
TUART01 .      2k | TUARTINI.      2k | UNERA   .COM   2k | UNERA   .HLP   4k
USQ     .C    10k | USQ     .COM  14k | USQ     .H     2k | USQ15   .COM  10k
USQ20   .COM  14k | VERIFY  .COM   2k | XSUB    .COM   2k | Z8E     .COM  12k

Drive A, User 0 has 650k in 75 files with 558k free.

A>sd *.asm

CBIOS   .ASM   4k | CPMCRT  .ASM  16k | M7CD1   .ASM  10k | ZCPRD400.ASM  66k

Drive A, User 0 has 96k in 4 files with 558k free.

A>type read-me.txt             8K       assembler          2K       program to print large letters on paper
cbios.asm           3K         2K       public domain - CDOS simulator for running
                             some CDOS programs under cp/m  see help file
cdoscpm.hlp         3K         2K       compares two files - binary or text
                             ex.  A> compare 1 2 <cr>
                                  A> compare a:1 b:1 <cr>        8K       used to convert older ITC cpm disks to new format        8K       see ITC manual---         2K       fast disk copy progam (sector by sector)
cpm3355.spr         2K       used in generating a new system           9K       used in generating a new system
cpmcrt.asm         16K       used in generating a new system
cpmcrt.prn         38K       used in generating a new system
cpmcrt.spr          2K       used in generating a new system
cpmfdc.spr          3K       used in generating a new system         21K       new system generating program
cpmhard.spr         5K       used in generating a new system         6K       used in generating a new system             5K       digital research's debugger (not as good as
                    from Cromemco below          10K       debugger from Cromemco             1K       same as (renamed to be like 'del'
                             or 'delete' in cromix)
                             queries operator before erasing a file            5K              7K       a text editor I never use            1K       see above               4K       same as below (renamed to be like 'l'
                             or 'list' from cromix)
                             alphabeticly list files as well as size and disk
                             space  (SEE HELP FILE)           16K            2K            12K       macro assembler         10K       used in generating a new system             8K            8K       pip with reset feature to allow disk change
                             after pip is loaded  (see ITC manual)         1K       selects any of 4 printers or displays current
                             printer selected
                             ex.  A> PRINTER <CR>   (to list current printer)
                                  A> PRINTER 2 <CR> (to change to printer 2)            7K       a good way to read a file a page at a time
                             see help file below for all the bells and whistles
read.hlp            4K              4K       same as and -GOOD directory pgm.!!
sd.hlp             11K       help file for sd71 (similar to above)
sd48a.nte           5K       note on modification for             14K       file squeezer (used by many bulletin boards to
                             save space)            6K          2K          2K       to transfer system tracks form disk to disk           1K       a program to UNerase a file accidentally erased
                             see help file
unera.hlp           3K            13K       file unsqueezer (used by many bulletin boards to
                             save space)          1K       to set verify on or off in or to view
                             current state of toggle
                             ex.  A> VERIFY <CR> (to view current state)
                                     verify set to on

                                  A> VERIFY OFF <CR> (to change to not
                                                      verifying each file
                                     verify set to off

                             see ITC manual for further info            3K       another alphabetical directory program - not
                             as good as            1K       a public domain submit batch processing program

A>read cdoscpm.hlp
CDOSCPM is a function that allows one to run CDOS functions while
in CPM. The version of CDOS emulated is 2.35 although many of the
CDOS specific functions were left out(at no cost, because
CDOS checks for version number, and then ignores certain functions
if version number is too low). The code, however is easily modified
to include extra functions if you have a time-of-day clock or other
CDOS type extra conveniece. The code is well enough documented to
be readable alone.
        The syntax is    CDOSCPM function argumentlist.
Where function is the CDOS compatible function you wish to run and
argumentlist is whatever the function takes as normal argumentlist.
Thus a typical ASMB run would look like.....
which will assemble the function FOOFN without generating a list file.
(The A> is of course, CPM's prompt). Any trouble with this function
should please be relayed to me as I will then include the offending
calls. It works great with ASMB and DEBUG.

Mark Zachmann
56 Rutgers St. #4
Rochester, N.Y. 14607



128*    Read Console    none                    A = character
        (without echo)

129     Get User        none                    BC = pointer to user
        Register Pointer                        registers

130     Set User        DE = address            none
         ^c abort

131     Read Logical    DE = block #            A = 0 if ok
         Block          B = disk number         A = 1 if I/O error
                        B(7) = 1 if             A = 2 illegal request
                         interleaved            A = 3 if illegal block
132     Write Logical          same as 131         same as 131


134*    Format Name     Hl = address of         HL = address of
         To FCB          string                  terminator
                        DE = address of FCB     DE = address of FCB

135     Update          DE = FCB address        none
         Directory Entry

136*    Link to Program DE = FCB address        A = -1 if error
                                                 else execute at 100H

137*    Multiply        DE = factor 1           DE = product
                        HL = factor 2

138*    Divide          HL = dividend           HL = quotient
                        DE = divisor            DE = remainder

139*    Home Disk       B = disk number         none

140     Eject Disk      E = disk number         none

141#    Get Version     none                    B = version number

142     Set Cursor      D = column address      none
         Address        E = row address

     * -- Implemented in this version

     # -- Incorrectly done, to coerce CDOS into working correctly
               i.e. by believing no sophisticated calls are available.

Running CDOS under the ZEMU Emulator
the HxC Diskette Emulator