CP/M Implementation on the MZ-80K
written by Andrew J. Cornish BSc. / Crystal
Electronics
Source: Mike Brinson, SHARPSOFT-magazine November 1982, Volume 6, p.
20 - 25
|
MZ-80 CP/M Notes ( by SHARPSOFT ) |
The development of CP/M for the MZ-80K was an innovative step undertaken
by Crystal Electronics Ltd. A full account of its development was published
in the December 1980 Liverpool Software Gazette. Mr. A. J. Cornish of
Crystal Electronics has given us permission to reprint his article.
We hope our readers find this article as instructive as we did when
first reading it.
|
An Implementation of CP/M on the SHARP MZ-80K
by A.J. Cornish BSc. ( Crystal Electronics Ltd. ) |
The SHARP MZ-80K is arguably one of the most versatile microcomputers
on the market at the present time, being both simple and inexpensive,
while at the same time incorporating a number of useful hardware features.
For those who are unfamiliar, these include the following:
Z80 |
CPU |
8255 |
I/O chip which handles cassette, keyboard, VDU / software synchronisation
and upper / lower case indicator. |
8253 |
Timer chip for real-time clock and musical tones. |
2716 |
EPROM containing character set for VDU, including pixel graphics
and lower-case letters. |
4K Monitor ROM. |
Scanned keyboard with all keys software-definable. VDU 40x25 characters,
memory-mapped. Cassette - Normal audio type, with numeric indicator,
speed approx. 1200 baud, software controlled.
External to the main machine, we have: Floppy discs ( two, expandable
to four ), double-sided, single-density, 140K per disc, 70 tracks, 16
sectors per track, 128 bytes per sector, 5 1/4 disks.
Floppy disc controller - TOSHIBA T3444M.
Printer - 80 column EPSON type, tractor-feed, parallel interface. The
floppy discs and printer interface to the main machine via the MZ80I/O
interface box.
Having already developed our Xtal BASIC on the MZ-80K ( see LSG No.5
), we decided to attempt an implementation of the CP/M Disc Operating
System, in order to allow the MZ-80K to use the wide variety of languages
and software available to other machines already running under CP/M.
Apart from that very important advantage, CP/M also offers a system
which is itself totally independent of any one high-level language,
whereas the operating system normally offered with the MZ-80K is almost
entirely centred around SHARP DISC BASIC.
We decided to set ourselves the following goals in our implementation:
1) The implementation should be as near to standard as possible, while
hopefully including some of the features peculiar to the MZ-80K. At
the same time, it must be possible to run all the existing facilities
and software of the MZ-80K.
ii) The disk operations should be speeded up if at all possible. It
had already been noted that, although the SHARP DISC BASIC booted impressively
quickly, file accesses for loading of programs and data were exceedingly
slow.
iii) All of the SHARP MZ-80 peripherals should be supported ( cassette
recorder, printer, etc. )
iv) It should be reasonably easy to transfer software from another
machine already running CP/M onto the MZ-80K. This is important for
software houses, dealers and programmers with other computers
running software which they might consider offering on the MZ-80K.
|
HARDWARE MODIFICATION |

( Original sketch ) |
Figure 1 shows the memory map of the MZ-80K as it is in normal use,
and, next to it, we see the map of the system required while running
CP/M. The main problem is immediately apparent: How do we put 4K
of RAM in the area from 0000 - 0FFFH to replace the ROM that site
there? It was clear to us that a hardware modification would be
necessary, but it soon became clear that there were many different
solutions to the problem - all expensive ! |
Just as despair was beginning to set in, my colleague, Trevor Brownen
( sometimes referred to in our establishment as The Boss!
), had an inspiration, and the problem was solved within a few days.
Briefly, the solution adopted makes use of the very flexible address
decoding of the MZ-80K, so that the 4K blocks of memory 0000 - 0FFH
and C000 - CFFFH ( the top 4K of RAM space ) could be interchanged by
addressing one of the unused memory-mapped ports. The Monitor ROM and
the RAM can be restored to their normal positions by addressing another
port. Hence the machine can be operated with all SHARP BASIC software
etc., as if no modification had been made. Of course, all of this means
that the CBIOS ( Customised Basic I/I System, the part of the CP/M system
which must be written by the implementor ) must also contain the necessary
monitor routines for scanning the keyboard, driving the VDU, etc. This
means that we actually have a 46K CP/M system, even though we have 48K
RAM.
The hardware modification involves the removal of an IC on the main
board of the MZ-80K replacing it with a socket, and then plugging in
a PCB holding three IC's ( size about 3 inches by 2 ).
The author talks about IC47. Finally, two wires must be soldered to
complete the task. ( SHARP ( UK ) Ltd. have kindly allowed this modification
to be done without invalidating the guarantee so long as it is performed
by a SHARP dealer ( but any user who is in doubt should contact his
or her dealer ).
|
KEYBOARD AND CHARACTER SET |
Another problem is in the character set employed on the MZ-80K. Although
this uses standard ASCII codes for the numerals and upper-case letters,
it jumbles up the codes for the lower-case letters. As a matter of fact,
the character generator chips does not use ASCII at all, but a special
set of display codes, which are generated by means of a look-up table
in the Monitor. This problem was solved by writing a different look-up
table in the CBIOS ( thus removing the need to re-program the character
generator! ). Since the MZ-80 P3 printer also uses the incorrect ASCII
codes, we have also made use of a table within the Monitor ROM, which
converts display codes into the SHARP ASCII codes. Hence,
by applying these two look-up tables one after the other, we convert
the standard ASCII code to drive the printer. This again removes the
need to reprogram the character generator.
While doing all of this, we decided to take the opportunity to redefine
the keyboard and VDU functions. In particular, the MZ-80K does not have
a control key, whereas nearly all terminals do, and CP/M requires it.
After a little thought, we redefined the BREAK key as CTRL.
The SML/CAP key has been changed to allow a toggle
effect ( i.e., hit once to go to lower case, and again to go back to
upper case ). Normally, we have to hit shift-SML/CAP to
go to lower case, but this combination is now redefined as an ESCAPE
( another key used frequently in CP/M software ). Apart from these changes,
the keyboard behaves exactly as shown on the keytops, and the graphics
characters may be used in programs, if desired.
A full list of control-characters is shown at Table 1, together with
their effects if printed from within programs. These are in addition
to those used in the CP/M line editor ( e.g. CTRL-P turns the printer
on and off when typed at the keyboard ). Note the convention of using
"^"an abbreviation for CTRL.
TABLE 1
List of control codes available under CP/M on MZ-80K |
^F ( 06H )
|
Cursor right. |
^G ( 07H )
|
Ring bell. |
^H ( 08H )
|
Cursor left. |
^J ( 0AH )
|
Cursor down. |
^K ( 0BH )
|
Cursor up. |
CLR or ^L ( 0CH )
|
Clear screen, or Form feed on printer. |
CR or ^M ( 0DH )
|
Carriage Return without Line Feed. |
^N ( 0EH )
|
Clear to end of line. |
^O ( 0FH )
|
Clear to end of screen. |
^Q ( 11H )
|
Line-to-line space reduction on printer. |
^R ( 12H )
|
Double-size characters on printer. |
^X ( 18H )
|
Cancel special rnodes on printer. |
HOME ( 1EH )
|
Home cursor on screen, or Form-feed on printer. |
INST ( 1FH )
|
Insert character into 40 character line. |
DEL ( 7FH )
|
Delete character from 40 characters line. |
|
DISC ACCESS SPEED |
A study of the disc operating routines in the SHARP DISC BASIC revealed
that the software was much more geared to loading or saving many sectors
at once, rather than with one sector at a time, as is required under
CP/M. The operating system boots very quickly, since that part of the
disc is never changed and can be loaded as one large block. With programs,
however, a sector does not necessarily set next to the previous one
read from or written to. Hence each sector must be read in separately
and, since the gap between sectors is small compared with the time required
to set up the floppy disc controller for the next sector, the disc has
to spin for a complete revolution before the next sector is loaded -
a 16 to 1 reduction in speed!
An appreciable increase in speed is achieved by means of INTERLACING,
so that, for example, sector 2 of a track actually appears 5 sectors
after sector 1. Although this is still not as fast as it COULD be, it
is three times faster than it was, and this is roughly the improvement
offered by Xtal CP/M over SHARP DISC BASIC.
Since each sector has an indentification mark for the controller, it
is a simple matter to achieve interlacing by means of the FORMAT utility
program. This program writes the sector identifications as the first
stage of initialisation and we can define the order in which the sectors
appear on the disc by means of a table within the program. In fact,
we format the discs with 1 to 1 interlacing for the first five tracks
( those containing the operating system ), and 5 to 1 interlacing for
the directory track and file tracks, thus getting both fast booting
and reasonably fast file transfer.
|
PEHIPHERAL DEVICES |
In order to get the most flexibility in Input/Output facilities, the
IOBYTE feature of CP/M has been implemented in full, and software included
drive the MZ-80 P3 printer as the LPT: device ( the default LST: or
listing device ), and up to two serial interface cards ( one of which
is the TTY: device ). The Xtal Serial Card has been developed primarily
for us with CP/M and is, as far as we know, the first bi-directional
serial interface to be made available for the MZ-80K which may be plugged
into the MZ-80I/O Interface Box. It offers link-selectable baud rates
from 150 - 2400 baud ( adjustable from 110 - 9600 baud ) and is an RS232-compatible
interface, meaning that it will interface nearly all standard terminals
and serial printers. In particular, it is an absolute necessity for
the transfer of software between the MZ-80K and another machine, and
thus fulfills the fourth of our goals.
The cassette recorder may be operated by means of a progran on the
CP/M disc called TAPE.COM. This allows us to load or save programs between
disc and tape.
|
PROGRAMS ON DISC |
All of the usual CP/M utilitles are supplied on the Master discette
( and it IS possible to copy it!! ), except for MOVCPM.COM, the program
used for relocating CP/M systems for different RAM sizes. It was decided
to work with just 48K, since memory prices are not much of a problem
these days, and it also simplifies the effort of determining whether
or not a particular item of software will work with this or that memory
size !
In addition, the following programs are supplied on the disc:
EXIT.COM |
exits from CP/M right back to the SHARP Monitor. |
MUSIC.COM |
allows the user to type tunes into a file under ED, or one of
the many CP/M text editors now available. By typing MUSIC <filename>,
this text file is loaded and played as a tune, the format being
very similar to that used in SHARP BASIC. An example tune is supplied
on the disc. |
TIME.COM |
reads the real-time clock and displays the time. If a time is
typed in as part of the command, that time is set as the current
time. |
These two programs are included to illustrate the use of the extra
BIOS routines for driving the clock and tone GENERATOR.
AUTOGEN.COM |
allows the user to generate a turn-key disc, i.e.
one which runs straight into a particular program that he / she
may wish to run whenever the sytem boots. Although this can be done
without AUTOGEN, it would require a knowledge of machine code and
ASCII codes, so this program is a very useful one. |
The standard CP/M utilities supplied on disc are:
ED.COM |
Context editor. |
DDT.COM |
Dynamic Debugging Tool. |
STAT.COM |
Status of files / devices. |
PIP.COM |
Transfer files, etc. |
SUBMIT.COM |
Batch processing command. |
FORMAT.COM |
Initialise discs. |
ASM.COM |
8080 Assembler. |
DUMP.COM |
Display file. |
LOAD.COM |
Load.HEX file. |
SYSGEN.COM |
Generate system. |
XSUB.COM |
Used with SUBMIT. |
COPY.COM |
Copy discs. |
|
SOFTWARE DEVELOPMENT |
Finally, having described some of the "workings" of the system,
we come to that most important of subjects - what can we do with it
all? The answer should be quite straightforward - all of the software
that runs on a CP/M system of 46K or smaller will run very happily on
the MZ-80K, and will only require modification to take account of the
VDU size and printer width ( the MZ-80K VDU has 40 columns instead of
the more usual 64 or 80 ). Even the Printer presents no great problem,
since the Xtal Serial Card allows the use of many types of printer (
you COULD also use a terminal to replace the VDU for some software!
)
Software transfer is best effected by means of the Serial Card since
it is unlikely that the discs will load or dump discettes from a machine
other than another MZ-80K. A few software houses in this country have
already shown interest in moving their programs onto the MZ-80K, and
we should welcome enquiries from anyone who has developed CP/M software.
For our own part, we shall soon be producing a CP/M version of the
now highly popular Xtal BASIC 2.2 - primarily for the MZ-80K, but also
for Z80 CP/M Systems in general. We already have the well-known CBASIC
compiler adapted for the MZ-80K, and are obtaining licences for many
other languages, including ALGOL, FORTRAN, PASCAL, C, and COBOL.
We feel that the exercise of putting CP/M onto the MZ-80K has been
well worthwhile, and opens up the machine to many other uses.
|