/* uSim readme.txt
 * Copyright (C) 2000, Tsurishaddai Williamson, tsuri@earthlink.net
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

/**********************************************************************/

What is uSim?  uSim is a system simulator that runs CP/M.  It emulates
either an i8080 or Z80 cpu with 64K RAM/ROM, a Console, various disk
drives and character I/O devices.  The "C" source is suitable for a
teaching tool.  Everything from the assembler to the console window is
available to the programming student.  The system is quite fast and
robust as a CP/M workstation.  Other i8080 or Z80 system software can
be developed as well using the builtin assembler/disassembler/debugger.
CP/M can be run directly from ROM, or from the system tracks on a disk.
Complete BOOT and BIOS sources are provided for a 63.5K CP/M.  A CP/M
distribution has been serialized for uSim.

/**********************************************************************/

VERSION 1.0

Things to do:
1) Finish the Directory Disk device.
2) Add macros to the assembler.
3) Implement DOS, WINDOWS and UNIX consoles.

/**********************************************************************/

VERSION 0.9

Changed BDEV to use low byte of track/sector number for small disks.
Add DDT command syntax help.
Allow .SOURCE and .OPCODES to take non-quoted arguments.
Introduced INVOICE.TXT
The Cursor Blinks!
Build CPM.DSK for distribution.
Rename .USIMRC to BOOT.BAT
Rename CPUTABLES.H to CPUTAB.H, ASMTABLES.H to ASMTAB.H
Implement ASCII read-only file disk.

/**********************************************************************/

VERSION 0.8

Cleaned up number conversion routines.
Added -K option to ASM monitor command.
Removed char * return from DisassembleInstruction().
Clean up and comment main.c.
Set kMaxFileName to 64.
Clean up the PRINT monitor command output.
Rename TIME device to be CLOCK.
Split main.c into several files.
Implement interactive assembly.
Implement DDT syntax to monitor commands.
Reorganize console source.
Rename File*() to be HostFile*().
Divide sources between utilties and uSim specific.
Implemented Sort().
Implemented EXAMINE command.
Implemented COUNT for DISPLAY command.
Reimplemented the TRACE and UNTRACE commands.

/**********************************************************************/

VERSION 0.7

Finished the Z80 Assembler. :)
Made ASM, IMPORT, LOAD and UNLOAD understand file extensions.
Changed the syntax of the ASM monitor command, use -L for listings.
Cleaned up the LOAD from internal code.
Fixed a syntax bug in boot64.asm found by the new assembler parser.
Commented the assembler sources.

/**********************************************************************/

VERSION 0.6

Cleaned up cpu.h and made lots of comments.
Implemented a console input ring in main.c.
Implemented sprintf(), vsprintf() in console.c.
Implemented snprintf(), vsnprintf() in console.c.
Debugged ConsolePushInput().
Created IMPORT monitor command to import progams and files to CP/M.
Clean up and verify the monitor HELP texts.
Implement a BOOT monitor command that runs the ".usimrc".
Fix up the MAP monitor command to also do physical->logical.
Change BOOT64.ASM to use RAMDISK if no disk is mounted.
Change default .usimrc to try and mount A:DISKA.DSK.
Removed SYSTEM monitor command, added -Z option to MOUNT command.
Make cpu tables, asm tables and rom "const".
SystemMonitor() now formats its arguments.
Change the implementation of GENERATE_ROM.
Add -C option to UNLOAD monitor command for CALCULATE_ROM.

/**********************************************************************/

VERSION 0.5

Revise BREAK montitor command.
Clean up cpu.h, remove silly options.
Clean up dasm.c and comment the static disassembler.
Created PRINT monitor command to access assembler expression evaluator.
The ADM31 emulator will not blink.
Increased CP/M memory size to 64K (actually 63.5K).
Patched MOVCPM to generated latest CP/M.
Changed CP/M serial number to ' USIM '.
Cleaned up CPM64.DOC, GETSYS, PUTSYS.
Changed disk emulator to allow all 16 drives, 5MB max per drive.
Changed CBIO64.ASM and BIOS64.ASM to allow all 16 drives.
Monitor commands can be read from a file.
Look for ".usimrc" at startup.
Remove BOOT monitor command.  Use a custom command file instead.

/**********************************************************************/

VERSION 0.4

Build CP/M with MOVCPM, 20K base is 3200H instead of 3400H
Modified GETSYS and PUTSYS to use a drive specifications.
Fixed About... message.
Renamed SYSGEN monitor command to SYSTEM.
Removed ERASYS.ASM, use the SYSTEM monitor command instead.
Replaced CPM60.SUB with CBOOT60.SUB and CBIOS60.SUB.
Updated CPM60.DOC.
Renamed BOOT.ASM and BIOS.ASM to be BOOT60.ASM, BIOS60.ASM.
Cleaned up *.ASM sources.

/**********************************************************************/

VERSION 0.3

Implemented ASM PATH.
Implemented default ROM.ASM.
Revised GENERATE_ROM and CALCULATE_ROM.
CP/M source CCP.ASM and BDOS.ASM built from CPM directory.
Updated GETFILE.ASM and PUTFILE.ASM utilities.
Created GETSYS.ASM, PUTSYS.ASM, ERASYS.ASM.
Boot from DISK or ROM.
Created CBOOT60.ASM and CBIOS60.ASM.
Implemented SYSGEN monitor command.
All files in uSimSrc directory are copyleft.
Created CPM60.DOC and CPM60.SUB to document DISK boot.

/**********************************************************************/

VERSION 0.2

The Monitor UNLOAD command now is the inverse of the LOAD command.
The Copyright Notices are in place.
The Assembler has been rewritten.  Still only 8080.
Lots of source cosmetics.

/**********************************************************************/

VERSION 0.1

This is a debug release of my uSim microprocessor system simulator.
It is currently configured as an 8080.  The Z80 functionality works,
except for the assembler.

I have been developing it using CodeWarrior on a Macintosh, but with
the appropriate additions to "console.c", it should build an run on
most anything.

I usually give it a 4MB memory partition with a 2MB stack.  I am sure
that this is overkill, but I have not taken the time to determine
the actual minimum requirements.

Note that this might look a bit like your favorite emulator, I have
studied many looking for neat design features.  I don't think that
I am stepping on anyones toes...  I will be GNUizing the source as
soon as it is complete.

In a nutshell, uSim consists of a cpu+peripherals simulator with an
interactive monitor and CP/M in ROM.

When executed, CP/M will load and try to mount a disk file.  Press
any key during the boot sequence to drop into the monitor.  You will
want to do this the first time through since you won't have any disk
file to mount!

Use the monitor to assemble and load code, format disk files and for
debugging.  The HELP command will list all of the monitor commands.
Use "HELP HELP" for more details.

The CPU emulation passes the tests distributed with YAZE.  I have run
MBASIC and other CP/M standards with no problem.  The emulated terminal
is an ADM31.

If I said any more, that would take away the adventure!  Enjoy!
Note that this is a debug release, please send me comments, bugs and
suggestions.

Tsurishaddai Williamson
tsuri@earthlink.net
