    YAZE-AG-2.20 is the final release of version 2.20

    This document describes only the new features of yaze-ag-2.20.

    Look to the document yaze.doc for the other features (yaze-1.00).

    My english is not so good, I hope you understand what I write here.
    ---

    CONTENTS:
    =========

     0. GLOSSARY
     1. FEATURES
     2. DEVELOPMENT
     3. FIXED BUGS
     4. Some words to BOOTSYS (CP/M 3.1 loader)
     5. New option and new monitor command
     6. CP/M disks
     7. Mounting directories with Time Stamps
     8. Serial Lines
     9. Following files are in the yaze-ag package (yaze-ag-2.20.tar.gz)
    10. Optimizing and speedtest
    11. My old real Z80 System

    0. GLOSSARY:
    ===========

    bios	Is the part of the bios which is witten in Z80 assembler. It acts as
    	an interface to the yaze-bios. Here are central definitions (drive
    	tables, yaze control table (YCT), ...) which are essential for the
    	whole system.

    yaze-bios  Is the part of the bios which is written in C.

    1. FEATURES:
    ============

    I took the idea of the page tables from Michael Hardt and built a simulated
    MMU.  The default definitions of the MMU are 16 tables with 16 page pointers
    (page size 4 KB) per table.

    You can run on yaze-ag-2.20 CP/M 2.2 or superdos (file: yaze.boot) with or
    without the MMU and 64 KB like the older version yaze-1.10 or you can run
    CP/M 3.1 or ZPM3 from Simeon Cran (file: yaze-cpm3.boot) always with the
    MMU and RAM up to 1MB.
    You can start CP/M 3.1 by simply executing the file CPM3.COM under CP/M 2.2
    or CP/M 3.1 (for example with a new bios version). The new CP/M 3.1
    loader BOOTSYS (see above) relocates and starts the appended CPM3.SYS and
    if CP/M 3.1 is running firstly all will be transferred from bank 1 (TPA)
    to bank 0 (SYS bank) with an interbank move (XMOVE/MOVE).

    The CP/M 3.1 bios (acts as an interface to the yaze-bios) and the yaze-bios
    (bios.c) uses the MMU intensive like a real Z80 CP/M 3.1 System
    (destination/source bank for read/write disk and interbank moves, multi-i/o
    is also implemented).

    Ten new options are described in the Makefile.

    Following features are implemented:

    	simz80.c	I made some optimizations and made the necessary
    			changes to embed the MMU.
    			(See above the file simz80.c, the option -DMMU and
    			 above "Optimizing".)

    	MMU		with 16 tables to 16 page pointers (page size 4 KB).
    			A bank switch over the bios is simple done with a
    			pointer and very fast (see *mmu in the new module
    			mem_mmu.[hc]).
    			I made a lot of changes in all modules to embed
    			the MMU in the whole system.
    			You can run CP/M 3.1 (bootfile: yaze-cpm3.boot)
    			or CP/M 2.2 (yaze.boot) on yaze-ag-2.20. You
    			can start CP/M 3.1 by simply executing CPM3.COM
    			(bootsys.com+cpm3.sys).
    			(yaze-cpm3.boot is identically with cpm3.com)

    	BOOTSYS		Bootsys is a new CPM3.SYS loader. It was necessary
    			because the CPM3.SYS grows over 32K and the CPMLDR
    			or ZPM3LDR does not load this big file.
    			(See above "Some words to BOOTSYS".)

    	CP/M 3.1	All fundamental and essential functions are made for
    			running CP/M 3.1 .

         The following features are not necessary but CP/M 3.1 supports it:

    	DATE		implemented

    	XMOVE/MOVE	implemented - this supports sector size > 128 Bytes
    			(Default sector size is now 2048 bytes.)

    	MULTIO		multi-i/o is also implemented and runs very well.

    	Mounting Directories
    			special feature to import directories into the
    			emulator by connecting them to CP/M drives. By that
    			way you can easily import files into the emulator.

    			The new feature in version 2.12 is that the update
    			time stamps are imported into the simulated CP/M
    			directory.
    			Look to chapter
    			7. "Mounting directories with Time Stamps"
    			in this document.

    	serial lines	since version 2.20 you can use the serial lines of
    			your computer. Look to chapter 8. Serial Lines.

    Following features are NOT implemented

    	char devices	not yet implemented - Yaze uses the I/O-byte like
    			CP/M 2.2 . I will do this in the future.

    2. DEVELOPMENT:
    ================

    I developed under Solaris 8 (sparcv9) and Linux (kernel 2.4.x/2.6.x) and used
    gcc version 3.x.x also under Solaris. I tested yaze-ag-2.20 on
    FreeBSD and DEC-Unix (alpha processor) - it works also there.
    I have not yet tested yaze-ag-2.20 on FreeBSD or DEC-Unix.

    I tried to use the SPARC-C-Compiler (cc) under Solaris. Everything will be
    compiled but yaze-ag does not run. I don't know why and so I use the gcc also
    for SPARC machines.

    I had a lot of fun in developing the bios and the yaze-bios for CP/M 3.1,
    but sometimes I was stunned - but I found the errors :-) .
    (see above section "My old real Z80 system")

    The known bug of version 2.01 is solved. I add the more feature to import
    the modification time of the unix files as update time under CP/M.
    Look Chapter 7 "Mounting directories with Time Stamps" in this document.

    Since this pre release 2.00 you can use the "cdm" utility (CP/M Disk Manager)
    also under Linux.

    I have finished with this development cycle. Look to Chapter "FIXED BUGS"
    and chapter "Serial Lines".

    Today 08. June 2008 there are no known bugs in version 2.20.

    08. June 2008
    Andreas Gerlich
    (University of Ulm, Germany)

    only text emails please: address removed !!!

    3. Fixed BUGS:
    ==============

    Timothy Wagner and Carl Mascott reports a complex bug in yaze-ag-2.00.
    I found this error also when I work with the emulator (and with drives
    which are connected to a unix directory) and so I test also the old
    version yaze-1.10. This bug is also in yaze-1.10! I take the code to
    access unix directories from yaze-1.10 (see old version on the web page).

    Bug report 1:
    When you use the feature to connect a directory to a CP/M drive (A: - P:)
    this works if you use it to copy files from a directory to a disk-file under
    yaze-ag.
    But if you use it to import files from a Directory to compile sources
    and run programms while you edit source files with vi under Unix/Linux
    the emulator crashes after some time when you often access files on the
    drive which are connected to a directory.

    THIS BUG IS FIXED IN VERSION 2.01 !!!

    Bug report 2:
    When you have two unix files like "Source.z80" and "source.z80" this are
    two different files under unix. CP/M does not handle upper and lower case
    of file names. All file names are holded upper case in the CP/M directories.
    When a unix directory was mounted and there was files like the two z80 files
    yaze-1.10 and yaze-ag-2.00 creates two CP/M directory entries with the name
    "SOURCE.Z80". This was a problem and the emulator crashes.

    THIS BUG IS FIXED IN VERSION 2.01 !!!

    Bug report 3:
    When you use also the feature to mount unix directories to a CP/M drive,
    the problem is that if you edit a file with vi or nedit under unix the
    emulator don't know about this changes or new files until you make a "remount".

    THIS REREAD BUG IS FIXED IN VERSION 2.10 !!!

    See chapter 7 "Mounting directories with Time Stamps".

    Bug 4 which I found:
    When you use also the feature to mount unix directories to a CP/M drive,
    the problem was that when the filesize of a file was multiple of exactly
    16K (16k,32K...) the last 16k can not read. If a file was exactly 16k you
    only get the first 128 Byte when you make a "type" on a source file for
    example. It was a chance to find this bug, The bug was in the simulated
    directory for CP/M when you connect a Unix directory to a CP/M drive.

    THIS SIMULATION DIRECTORY BUG IS FIXED IN VERSION 2.20.1 !!!

    Its recommended to update the executable to this version 2.20.1 !!!

    In yaze-ag-2.20 there are no known bugs! I mean there are no further
    errors but if you find one feel free and send an email to me. If you miss
    a feature feel free and send an email to me, too.

    08. June 2008
    Andreas Gerlich
    (University of Ulm, Germany)

    only text emails please: address removed !!!

    ===========================================
    4. Some words to BOOTSYS (CP/M 3.1 loader):
    ===========================================

    The BIOS3 under Z80 (acts as an interface to the yaze-bios (bios.c) with the
    files BIOSKRNL.Z80, YDRVTBL.Z80, MMU.Z80, YCT.Z80 and SCB.Z80, linked with
    BNKBDOS3.SPR and RESBDOS3.SPR to CPM3.SYS by GENCPM.COM (see drive P:))
    supports all 16 drives from A: to P: .
    All tables for these drives (defined in YDRVTBL) are very big - CPM3.SYS
    is 44KB! All tables are defined to handle disks up to 64 MB. Greater disks
    will not work, but it is possible to create them in the monitor in yaze-ag (and
    cdm) and then you have to change the definitions in YDRVTBL.Z80/SYSDEF.LIB.

    When CPM3.SYS gets over 34KB, CPMLDR (ZPM3LDR cannot run with my loader
    bios ?!?!) cannot load this big file (I don't know why and I don't want to
    debug it). So I had to look for another way to load CPM3.SYS. I search for
    informations of the file structure of CPM3.SYS. So I developed BOOTSYS.Z80.
    It relocates the resident and banked part (if present) held in the joined
    CPM3.SYS and jumps into the bios to start CP/M 3.1.

    | BOOTSYS works very well. BOOTSYS.Z80 is written, so that BOOTSYS runs also
    | on a real CP/M System. If the cp/m vectors are present BOOTSYS prints the
    | messages over the bios (conout), if not, it uses the yaze-bios directly
    | over the HALT instruction. BOOTSYS should be run always under a real
    | Z80 CP/M 2.2 system to start CP/M 3.1 (I use Z80 instructions).

    If CP/M 3.1 is always running BOOTSYS try to move BOOTSYS+CPM3.SYS from
    bank 1 to bank 0 switch to bank 0 and relocates and start CP/M 3.1.
    Under YAZE-AG-2.20 BOOTSYS is in the position to start always CP/M 3.1
    under CP/M 3.1! WHY?
    In YAZE-AG-2.20 the XMOVE and MOVE routines are definded outside the Z80
    memory in C and the short routines to call the yaze-bios are in the resident
    part of the bios, so all works well under YAZE-AG-2.20.
    If in a real Z80 CP/M 3.1 system the XMOVE/MOVE routines are placed in the
    banked part of a bios (possible if a DMA make the interbank transfere) then
    it can be that this parts will be overwritten when bootsys+cpm3.sys are
    transfered from bank 1 to bank 0. In this case you can not make a new start
    of CP/M 3.1 under CP/M 3.1. You must run CPM3.COM from CP/M 2.2 (You generate
    CPM3.COM by "PIP CPM3.COM=BOOTSYS.COM,CPM3.SYS").

    How BOOTSYS works and what conditions are necessary to run under CP/M 3.1
    is described in README_BOOTSYS.

    BOOTSYS+CPM3.SYS is also in the file yaze-cpm3.boot which is loaded instead
    of yaze.boot if the C-compiler option -DBOOTSYS is defined in the Makefile.
    It is the same file like CPM3.COM on drive A: . I transfer it to Unix/Linux
    and name it yaze-cpm3.boot.

    5. New option and new monitor commands
    ======================================

    You can call yaze-ag with the option '-1'. This option force sector size
    128 bytes. Normally sector size is 2048 bytes under CP/M 3.1. Under
    CP/M 2.2 yaze-ag uses always sector size 128 bytes.

    If you go with the sys.com utility into the monitor you can give the new
    command '128'. This forces sector size 128 byte, too.

    This option was necessary because some disk edited utilities (like DED.COM)
    does not work with sektor size 2048.

    The command 'setaccess on/off' switch on/off the access time for mounted
    directories connected to a CP/M drive. The update time is always on.
    Create time stamps are not supported by the host systems.

    I expand the mount command. If you give "mount -v" you will get very detail
    informations about the connected drives/directories if you have started
    CP/M 3.1.

    6. CP/M disks
    =============

    I describe here only the changes in the disk header of a <CPM_Disk>. Look
    for details to chapter 6. "CP/M disks" in yaze.doc.

    The new disk header occupies the first 128 BYTES of the file and has the
    new format:

              0 -   9    <CPM_Disk>
             10 -  15    a null-terminated ascii comment (may be empty)
         new 16          version (0 = yaze-1.06/1.10, 1 = yaze-ag-2.xx)
             17 -  31    a null-terminated ascii comment (may be empty)
             32 -  33    sectors per track
             34          block shift factor
             35          block mask
             36          extent mask
             37 -  38    disk size max
             39 -  40    directory max
             41          al0
             42          al1
             43 -  44    check size (always zero)
             45 -  46    track offset
         new 47          psh (used if version=1 and CP/M 3.1 is running)
         new 48          phm ( "   "    "   "    "   "   "   "    "    )
             49 - 127    unused (zeros)

    If version is 0 the sektor size is set to 128 bytes (psh=0, phm=0) in the DPB
    of the corresponding drive. Psh and phm are only used under CP/M 3.1 if
    version is 1.

    You can alway transfere disk files between an old version of yaze (1.06/1.10)
    and yaze-ag-2.20. The new disks looks under yaze-1.10 like a disk with sektor
    size 128 bytes. The new fields are ignored. You can also use your old disk
    files of yaze-1.10/1.06 under yaze-ag-2.20. The field version is in disk
    files from yaze-1.10/1.06 always 0.

    The fields version, psh and phm are used only in yaze-ag-2.xx and if CP/M 3.1
    is running. The default sektor size is 2048 bytes (psh=4, phm=15).

    I change also the default value of sektors per track to 128. (The old value
    was 26).

    You can set 128 byte sektors (psh=0, phm=0) for all disk with the flag "-1"
    or the new monitor command "128".
    This was necessary because some disk edited utlilities (like DED.COM)
    does not work with sektor size 2048 bytes.

    7. Mounting directories with Time Stamps
    ========================================

    This chapter describes the special feature to import directories into the
    emulator by connecting them to CP/M drives. That way you can easily import
    files into the emulator.

    (An another way to import files is to use the cdm utility (CP/M disk manager).
     Only with cdm you can also export files (see man page cdm.1 or cdm(1)). )

    But you can also use the feature "Mounting Directories" to compile/assemble
    source files which you import over a drive which is connected to a directory.
    That way you can edit files with vi or an another editor under unix and
    compile it inside yaze-ag. You can use the make.com utility which is on A:
    (disk file: BOOT_UTILS) because the update time stamps are imported from
    the host system and are present in the simulated CP/M directory!
    (Look above the submit file examples in this chapter!)

    But you have to take notice of some things:

    1. The mounted directory is always read only.
    2. You have to syncronise the simulated directory inside yaze-ag / CP/M and the
       directory of the host which is connected to a CP/M drive.

    The second point means: If you change a file with an editor under Unix the
    CP/M inside yaze-ag don't knows about these changes --> you must sync the
    simulated directory under CP/M with the connected unix directory.
    At that moment CP/M knows about changed and new files in the unix directory.

    To sync (reread) the mounted directories you have four ways to do this:

    a) CTRL-C at the command prompt (CCP).
    b) to use the utility "resetdsk.com" (see A: disk file BOOT_UTILS).
    c) to use the monitor command "sys remount <drive>"
    d) to use the monitor command "sys mount <drive> <directory-path>"

    'a' is for online use.
    'b', 'c' and 'd' is for use in a submit file.

    To a) (CTRL-C):

     the left side is for CP/M          the right side is the host on which yaze-ag
     inside yaze-ag			    runs (for example an unix host)
     (C: is connected to ./disksort/)

    I make in CP/M:

    A>C:
    C>3dir disksort.c

      NAME                UPDATE
    ----------  ...  ----------------
    DISKSORT.C       14/04/2004 10:20

    notice: the time is 10:20

    				then I make under unix:

    					$ pwd
    					.../disksort
    					$ date
    					Wed Apr 14 17:44:01 MEST 2004
    					$ touch disksort.c

    					  notice: with touch I set the
    					  	  time to 17:44:xx

    then I make in CP/M:

    C>3dir disksort.c

      NAME                UPDATE
    ----------  ...  ----------------
    DISKSORT.C       14/04/2004 10:20

     notice: the time is still 10:20

    C>
    C>
    C>^C   (<--- give CTRL-C !!!)
    C>        (this makes a reread of ./disksort/)
    C>
    C>
    C>3dir disksort.c

      NAME                UPDATE
    ----------  ...  ----------------
    DISKSORT.C       14/04/2004 17:44
    			    ^^^^^
    notice:			      |
    The time of disksort.c is now /

    Technical Background:
    When you give a CTRL-C at the Command prompt CP/M resets the whole disk system.
    At the next bios call of seldsk (select disk) CP/M say in a flag "first
    access to this drive". Any further calls of seldsk to the same drive have not
    set this flag. I use this flag to make a reread of the unix directory.

    If you want to show also the access time stamps of a mounted directory
    see the monitor command "setacces on/off" in the chapter 5
    "New option and new monitor commands".
    (I can not set "access time stamps" in the LabelByte of the disk label
     because CP/M tries to update the access time when you access a file in the
     (unix) directory (directories are always read only). DIR.COM shows the
     access time but say it is the creation time. 3DIR.COM of the ZINC project
     (drive F:) say correctly access time.)

    When you force a reread of a mounted directory also the changed size of each
    file is updated.

    The following submit file examples are on drive D: which is connected to
    the disk file DISKSORT.dsk. It contains the DISKSORT project which is
    described under

    	http://www.mathematik.uni-ulm.de/users/ag/cpm/index.html#disksort

    These disk file is formated with INITDIR.COM (see "HELP INITDIR") and in the
    label "DISKSORT" the update time stamps are set (see "HELP SET LABEL" and
    "HELP SET TIME-STAMPS").
    The source files are in the (unix-)subdirectory ./disksort/ which is
    connected to the CP/M drive C:

    To b):

    To use the "resetdsk.com" utility is like CTRL-C. It resets the disk system
    over the BDOS call no 37 .

    You can use "resetdsk.com" in the following example:

    	D.sub:

    	;
    	resetdsk
    	;
    	; this resets the whole disk system (all disks).
    	;
    	;
    	; Now compile the source
    	;
    	make -f disksort.mak $1
    	;
    	; This makefile makes a time comparison between the source files
    	; on drive C: (connected to unix directory ./disksort, read-only)
    	; and the compiled rel-files on drive D: (connected to the disk file
    	; "DISKSORT.dsk", read-write).
    	; Drive D: (the target) must initialized with INIRDIR.COM
    	; (see "HELP INITDIR") and you must create a label and update time with
    	; "SET [NAME=<LABEL-NAME>,UPDATE=ON] (see "HELP SET").
    	;

    NOTICE: The example D.Sub is on D: and you have to call this submit file from
    	D: (Look to the rules in the make file disksort.mak).

    To c):

    To use the monitor command "sys remount <drive>" is the same as resetdsk.com.
    It's only an another way.

    	DD.sub:

    	;
    	sys remount c
    	;
    	; this resets drive C: (it must be connected to a directory).
    	;
    	;
    	; Now compile the source
    	;
    	make -f disksort.mak $1
    	;
    	; This makefile makes a time comparison between the source files
    	; on drive C: (connected to unix directory ./disksort, read-only)
    	; and the compiled rel-files on drive D: (connected to the disk file
    	; "DISKSORT.dsk", read-write).
    	; Drive D: (the target) must initialized with INIRDIR.COM
    	; (see "HELP INITDIR") and you must create a label and update time with
    	; "SET [NAME=<LABEL-NAME>,UPDATE=ON] (see "HELP SET").
    	;

    NOTICE: The example DD.Sub is on D: and you have to call this submit file
    	from D:

    To d):

    To use the monitor command "sys mount <drive> <directory-path>" is not the
    same as the last examples:

    	DDD.sub:

    	;
    	sys mount c ./disksort/
    	;
    	; this (re)mounts the directory ./disksort to CP/M drive C:
    	; (this is like a remount)
    	;
    	;
    	; Now compile the source
    	;
    	make -f disksort.mak $1
    	;
    	; This makefile makes a time comparison between the source files
    	; on drive C: (connected to unix directory ./disksort, read-only)
    	; and the compiled rel-files on drive D: (connected to the disk file
    	; "DISKSORT.dsk", read-write).
    	; Drive D: (the target) must initialized with INIRDIR.COM
    	; (see "HELP INITDIR") and you must create a label and update time with
    	; "SET [NAME=<LABEL-NAME>,UPDATE=ON] (see "HELP SET").
    	;

    NOTICE: DDD.Sub is on D: and you have to call this submit file from D:

    The difference between this submit file and the previous submit files is
    that you can have different submit files on different drives.
    Each submit file uses an another directory path for drive C: and so you can
    compile different projects on different disk files.

    "sys mount <drive> <directory-path>" (re)mounts a directory.
    The mount command (of the monitor) makes internally first an unmount of the
    <drive> and then reads the whole directory which is give as the second
    parameter <directory-path>.
    CP/M in Yaze-ag knows at this moment about new and changed files in the
    unix directory <directory-path>.

    08. June 2008
    Andreas Gerlich
    (University of Ulm, Germany)

    only text emails please: address removed !!!

    8. Serial Lines:
    ================

    With the "attach"-command in the monitor you can handle the serial lines:
    (You call the monitor with "sys.com" and no parameter.)

    	For Solaris on SUN-Machines the device is
    		/dev/ttya	for the first serial port
    		/dev/ttyb	for the second serial port

    	For Linux (PC) the device is
    		/dev/ttyS0	for COM1
    		/dev/ttyS1	for COM2
    		...

    	For Cygwin the device is
    		/dev/ttyS0 or /dev/com1	for COM1
    		/dev/ttyS1 or /dev/com2 for COM2
    		...

    	How the devices is called on MAC OS X I dont't
    	know.

    You can write the attach command into the .yazerc file (edit it
    with vi in Unix/Linux or with the metapad.exe in Windows).
    Then you have always the serial line connected.
    The command you must write is:

    	attach aux /dev/ttyS0	(for example)

    This connects the aux-device of CP/M 3 with the device in
    Unix/Linux/Windows.

    Then you have to make a Nullmodem cable to connect the two computers.
    (You must see in your technical documentation of your computer.
    I have cables which uses on the PC side the 9-pole connector and on
    the side of the Z280-Computer also a 9-pole connector, but with an
    another pin content)

    On the disk-file "Kermit_SZRZ.ydsk" are the programms kermit.com, sz.com
    and rz.com (ZModem). With them you can connect to the other computer and
    transfere data.

    Baud rate:	You use the "DEVICE.COM" programm under CP/M 3 to set
    		the baud rate. On my Z280 Computer (CPU280 by Reh Designe)
    		I can set the baud rate in the Setup-routine of the
    		boot loader.

    		In Unix/Linux you use the "stty" programm.(see "man stty")
    		Kermit (called ckermit) is available for Unix/Linux.
    		With the kermit.com inside YAZE-AG when yaze_bin runs
    		you can also communicate with a real CP/M computer.

    		Under Windows you can use the Hyperterminal to initialize
    		the COM-Port. I have an Icon with the Baud rate 19200
    		on my desktop, which calls the hypterterminal and initialice
    		the COM-Port to 19200 Baud. By the way Hyperterm understand
    		also the kermit-protocol. So you can exchange Data between
    		a real CP/M Computer and a Windows computer.
    		With the kermit.com inside YAZE-AG when yaze_bin.exe runs
    		you can also communicate with a real CP/M computer.

    	I tried higher transfer rates than 19200, but only 19200 or
    	less works with a CP/M-computer !!!

    	When you connect two PC-Computers with the serial chip which have
    	a FIFO for 10 characters, you can go up to a baud rate of 110000.

    For example I have the following situation to develop for my Z280-System
    (called CPU280 by Reh Design (Tilmann Reh)):

    				   Notebook (Windows XP)
    	Z280 - System		.-----------------------.
    	  (CP/M 3)	    COM1|     .------------.	|
    			+-------=-----| HYPER-Term |	|
    	  Monitor	|serial	|     `------------'	|
    	     |		|line	|			|
    	.---------.	|	|     .-----------.	|
    	|	  |CRT1 |	|     | notepad++ |-----=--------+
    	|CPU-UART-=-----+	|     |  Editor   |	|	 |
    	|  (Z280) |		|     `-----------'	| eth0	 |
    	|CP/M-AUX-=-----+	|     .-------.		|	 |
    	|	  |CRT2	|	|     | PUTTY |---------=-------+|
    	`---------'	|	|     `-------'		|	||
    	     |		|	`-----------------------'	||
    	  keyboard	|					||
    			|					|| LAN
    			|    	  Server (64 Bit Linux)		||
    			|	.-----------------------.	||
    			|	|			|	||
    			|	|	+---------------=-------+|
    			|	|	|      .------.	| eth0	 |
    			|	|	|      |Samba |-=--------+
    		 serial |	|	|      `------'	|
    		 line	|       | .-------------.  |	|
    			|   COM1| |     YAZE-AG |  |	|
    			+-------=-|AUX  (CP/M 3)|  |	|
    				| `-------------'  |	|
    				|	|     .------.	|
    				|	+-----|  HD  |	|
    				|	      `------'	|
    				`-----------------------'

    - I'am sitting at my Notebook. With notepad++ I edit C-sources which I
      put over CIFS/SMB with Samba on the Hard disk(HD) of the Linux-Server.

    - With the function "Mounting directories with Time Stamps" (described
      also in this document) I import the edit files into YAZE-AG. I have
      a connection over the SSH-Client PUTTY to a running YAZE-AG on the
      Linux-Server. So I can compile the C-sources with a make utility with
      the HI-C-Z280-Compiler inside YAZE-AG from my Notebook.
      (The HI-C-Compiler is very slow, but on the Linux-Server with a
       CPU clock of 2.66 GHz it is a little bit faster  )

    - The AUX device of the CP/M inside YAZE-AG is attached to /dev/ttyS0 (COM1)
      of the Linux-System.

    - At the Keyboard/Monitor of the Z280 system I start kermit (it uses AUX of
      CP/M 3 which is connected to the serial Port CRT2).
      I also start kermit inside YAZE-AG on the Linux-Server to transfere the
      compiled programm data from YAZE-AG on the Server to the Z280 system.

    - The software which I write for the Z280 uses the UART which is inside the
      Z280 CPU. I see the output at the UART of the Z280-programm in the
      Hyperterminal at my Notebook and so I can control the software in the
      Z280 system.

    08. June 2008
    Andreas Gerlich
    (University of Ulm,Germany)

    only text emails please: address removed !!!

    9. Following files are in the yaze-ag package (yaze-ag-2.20.tar.gz):
    ====================================================================

        MD5 checksum

    	md5_yaze-ag-2.20	The md5 checksum file of the final release
    				of version 2.20.
    				With this md5 checksum file you can check
    				all files.
    				Use "md5sum -c md5_yaze-ag-2.20" to check
    				all files (see "man md5sum").

    	md5_yaze-ag-2.12.1	The md5 checksum file of the final release
    				of version 2.12.1.

        Documentation (in doc/ and doc_html/)

    	index.html		Click this file to read the documentaion.
    	00-INDEX.doc		A brief index of the documentation of yaze-ag
    	INSTALL-2.20		describes the install process of version 2.20
    	README-2.20		README to final release 2.20
    	yaze-ag.doc		The documentation only of the new features of
    				yaze-ag-2.20

    	yaze.1			Man page to yaze-ag
    	cdm.1			Man page to cdm (CP/M Disk Manager)

    	README_BIOS3_Z80	README of the CP/M 3.1 BIOS files (*.Z80)
    	README_BOOTSYS		README of the new CPM3.SYS loader BOOTSYS

    	README-1.10		README of the features of the old
    				version 1.06/1.10
    	yaze.doc                The documentation of the old
    				version 1.00 to 1.10

        Makefiles

    	Makefile_solaris	Makefile for Solaris (copy it to Makefile)
    	Makefile_linux		Makefile for Linux   (copy it to Makefile)
    	Makefile_freebsd	Makefile for FreeBSD (copy it to Makefile)
    	Makefile_cygwin		Makefile for Cygwin  (copy it to Makefile)
    		(cygwin is a unix like enviroment for windows)

        The different modules (I have made a lot of changes in all modules):

    	yaze.c		Source of the main (only this file is different to
    					    the pre release)
    	yaze.h		belonging to yaze.c

    	mem_mmu.c	Some definitions and routines for usage the emulated
    	(new)		MMU in YAZE-AG-2.20.

    	mem_mmu.h	The central definitions for memory access. All other
    	(new)		modules uses this definitions in dependence of -DMMU
    			if defined or not.

    	simz80.c	The Z80 interpreter. I made a lot of changes for
    			usage the MMU (over mem_mmu.h) because the memory
    			access goes over the interface macros GetBYTE, GetWORD
    			PutBYTE, PutWORD which are defined in mem_mmu.h. This
    			macros uses the selected MMU-table to manipulate the
    			Z80-memory.

    			BUT I DON'T CHANGE THE ALGORITHM OF ANY Z80 INSTRUC-
    			TION !!! I MADE THE CHANGES VERY CAREFULLY !!!

    			The test utilities zexall.com and zexdoc.com works
    			very well !!! Any instruction is OK !!!
    			(see above "Optimizing")

    	simz80.h	Definitions of the Z80-Register and some fundamental
    			macros for simz80.c and other modules.

    	simz80.pl	If you want to experiment with the Z80-simulator you
    	(perl-file)	can use this file.
    			I have transfered all changes which I made
    			in simz80.c !!!
    			This perl-script produce a simz80.c with all changes
    			I made.

    	bios.c		The yaze-bios with CP/M 3.1 extensions. It uses also
    			GetBYTE, GetWORD, PutBYTE, PutWORD to manipulate the
    			Z80 memory.
    			The CP/M 3.1 extensions will be switched on if -DMMU
    			is defined in the Makefile.

    	monitor.c	The monitor for yaze-ag.
    			Now you can mount/unmount disk files under CP/M 3.1.
    			You can mount/unmount UNIX directories to a CP/M
    			drive, too. That was one of the last known bugs in
    			the development version 14.

    			In version 2.00-pre and 2.00 of yaze-ag there gives
    			a version for solaris and a version for linux of
    			monitor.c.

    			Since version 2.01 of yaze-ag there gives only one
    			monitor.c.

    	yaze.boot	It contains Superdos a  CP/M 2.2 replacement. I take it
    			from yaze-1.10. It is used if -DBOOTSYS is NOT defined.
    			You can also boot Superdos (CP/M 2.2) with
    				yaze -l -1 -b yaze.boot

    	yaze-cpm3.boot	This file contains BOOTSYS + CPM3.SYS to start
    	(new)		CP/M 3.1.
    			If -DBOOTSYS is defined this file will be loaded at
    			0100H instead of yaze.boot (CP/M 2.2). It is the same
    			file like CPM3.COM on Drive A:. I transfer it to Unix/
    			Linux and name it yaze-cpm3.boot.
    			It will be generated under CP/M 3.1 by P:Y.SUB with

    				PIP CPM3.COM=BOOTSYS.COM,CPM3.SYS

    			(If -DMMU is not defined while -DBOOTSYS is defined
    			 yaze-ag will exit when the CP/M 3.1 bios starts and
    			 uses funtions for the MMU or CP/M 3.1 of the
    			 yaze-bios.)

    	.yazerc		The startup file for yaze-ag
    			(see above).

    	The other files are the same as in the yaze-1.10 distribution.

        yaze-DISK-Files which are defined in .yazerc:

    	A: BOOT_UTILS.ydsk	BOOT disk with CCP.COM some ZINC- and other
    				utilities.
    				See 0-README.1ST for the contents of this drive.

    	B: CPM3_SYS.ydsk		Disk with all CP/M 3.1 utilities. The command
    				HELP.COM gives help to all CP/M 3.1 utilities.
    				(In the help file HELP.HLP I add the new
    				 section "YAZE-AG".)

    	C: ./disksort/		This drive is connected to the (unix-)sub-
    				directory ./disksort/ .
    				It contains the source files of the DISKSORT
    				project. (Look drive D:)

    	D: DISKSORT.ydsk	Contains the submit files and the make file to
    				compile the DISKSORT project.
    				This disk file will contain the compiled files
    				(*.rel and DISKSORT.COM) when you compile the
    				project. (see chapter
    				     7. Mounting directories with Time Stamps)

    	F: ZINC.ydsk		A copy of the ZINC project from John Elliott

    	G: TEST-UTILS-1.10.ydsk	The test utilities of version yaze-1.10.
    				This test utilities test the Z80 simulator
    				(simz80.c). All changes in simz80.c are OK.

    	H: HI-C-Z280-Compiler.ydsk	A copy of the HI-C-Compiler. The
    					Z280 Optimiser and Z280 Libs are from
    					Stefan Nitschke.

    	I: UNIXLIKE.ydsk	UNIX like utilities. See UTOOL*.MAN and the
    				*.DOC files.

    	K: Kermit_SZRZ.ydsk	Communications software to use a serial line:
    					Kermit is a standard software. There
    					are versions for DOS and Windows.
    					SZ/RZ uses the Zmodem protocol.

    	M: MMU-Utils.ydsk	Here are some test utilties for the simulated
    				MMU in yaze-ag.
    				Use it only under CP/M 2.2 (yaze.boot) or
    				CP/M 3.1 will be crash. Only MMUPRINT does NOT
    				made any changes in the MMU, you can use it to
    				see the status of the MMU under CP/M 3.1 .
    				You start CP/M 2.2 with the options
    					yaze -l -1 -b yaze.boot

    	O: ZPM3N10.ydsk		A copy of ZPM3N10 from Simeon Cran. See there
    				the files VERSION.NOT and ZPM3.TXT. In yaze-ag
    				I use ZPM3. There is also a copy of ZPM3N10.PMA.

    	P: BIOS3.ydsk		The disks with which I developed the CP/M 3.1
    				bios which act as an interface to the yaze-bios.
    				There is also the source of BOOTSYS (Sorry the
    				comments are in the german language ;-)).
    				0-README.1ST declares the files containing
    				in this disks. It is the same file like
    				README_BIOS3_Z80.

    	On every disks are a file with the name 0-README.1ST. This file
    	describes the contents of the disk.

    10. Optimizing and speedtest:
    =============================

    	I made also some work for optimize in simz80.c.
    	If you compile yaze-ag-2.20 without -DMMU and
    	without -DBOOTSYS, yaze-ag-2.20 will be compiled
    	like the last yaze version (yaze-1.10) with only
    	64K and the default use of CP/M 2.2 (yaze.boot).

    	On my machine with 291 MHz (AMD K6-III 3Dnow)

    	  SAVAGE.COM needs:
    		yaze-2.20	    3.690 secs (4.750 secs with MMU)
    		yaze-1.10	    3.980 secs

    	  Zexall.com needs:
    		yaze-2.20	  596.120 secs (774.040 sec with MMU)
    		yaze-1.10	  638.890 secs
    		4.0MHz Z80	11688.000 secs (reference)

    	  That correlates rather a ~ 60.4 MHz Z80 (with MMU)

    	On my 2,66 GHz Linux Server YAZE-AG runs like
    	a Z80 with 1.558 GHz ;-) (Zexall needs only 30 seconds against more
    	than 4 hours on an original Z80 with 4 MHz!!!)
    	Thats very good to compile/develop software for the Z280 system :-)

    	(messured with unix command "time")

    11. My old real Z80 System:
    ===========================

    I have at home an old Z80 ECB-Bus-Sytem (4Mhz) (1982-1989). The terminal
    is an another ECB-BUS-Card and is it's own Z80-System with a CRT-Chip from
    Motorola. To the ECB-Bus it schows like a 8251 Intel Chip and it is very fast.

    For some ECB-Bus cards (CPU-, RAM-, Floppy-Card) of this system exists
    a CP/M 3.1 implementation of a german company, but I made a lot of extensions.
    So I add some ECB-Bus cards:
    	a RAM-disk with 1,2 MB,
    	an EPROM-Disk with 256 KB,
    	a CMOS-RAM-disk with 64KB and a battery (on this is CPM3.SYS),
    	an ECB-Bus-Card as a harddisk interface to an OMTI 5510 (IBM-XT
    	   HD controller) with an old 5 MB HD ;-) ,
    	and a Card with a clock.

    I made the bios extension succesive for this new 4 drives and the clock.

    I think I have through this work a lot of practise to develop a CP/M 3.1 bios
    and this contribute the development of the bios and yaze-bios of yaze-ag.

    --
    08. June 2008
    Andreas Gerlich
    (University of Ulm,Germany)

    only text emails please: address removed !!!

    END of yaze-ag.doc

    Look to the document yaze.doc for the other features (yaze-1.00).