prokushev / zinc

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

The ZINC project
----------------

The ZINC project is an attempt to replicate 8-bit CP/M 3.1 and some other DRI programs under the GNU General
Public License.

ZINC stands for ZINC Is Not CP/M.

Originally project started by John Elliott (https://www.seasip.info/Cpm/Zinc/index.html). Last
version by John is version 3.1.1 (3-1-2000). Since last version was some thing published under
GPL license, so ZINC can be extended to be closer to ZINC goals. ZSDOS (GPL), ZCPR1(Public domain)
and some other code was added and adopted to ZINC environment. So, version 3.2.0 was born in 2018.

Design choices
--------------

The idea is to come as close as possible to CP/M 3 in option syntax and functionality. There are many
programs in existence to list a directory, but much fewer that let you type DIR [EXCLUDE] *.COM.

Most of current ZINC components are written in Z80 assembly language and requires a Z80 processor.

The idea is to keep a lot of the necessary functionality in code libraries. SYSLIB is used for some
functions, and two further libraries (CPM3LIB and CFCB) provide functionality specific to CP/M 3.
A fourth library (STRLIB) provides some string functions. A fifth  library (NETLIB) provides
CP/NET support.

This will not apply to programs that have a use outside CP/M; for example, the development tools. Since
these could be used for cross-development, they would be written in C. The same goes for the help system.

Don't use BIOS. Use BDOS!

Current status (version 3.2.0)
------------------------------

The following programs have been done:

DATE.PRL
    Complete. Is Year 2000 compliant and supports date entry in US, UK and ISO formats.
DEVICE.PRL
    Complete. Optionally supports the Amstrad TIMEOUT extension so that it can also replace TIMEOUT.COM on
    Amstrad computers.
DIR.RPL
    Complete. Is Year 2000 compliant and supports I/O redirection. Several new output formats and sorting
    options.
DUMP.RPL
    Complete. A version exists, but the CFCB library seems to produce bloated code; DUMP.COM is actually bigger than
    the DRI original.
ERASE.RPL
    Complete. Can take more than one filespec on the command line (eg: ERASE *.PRN *.SYM )
SETDEF.PRL
    Complete. Supports the multiple date formats used by DATE, DIR and SHOW.
SHOW.PRL
    Complete. Year 2000 compliant and supports I/O redirection.
TYPE.PRL
    Same caveat as for DUMP.COM - it's bloated.
ENDLIST.PRL
    Complete.
LOGOFF.PRL
    Complete.
ASM.PRL
    Alpha.
LOAD.PRL
    Alpha. Based on load.c from ftp://oak.oakland.edu/pub/unix-c/cpm
PIP.PRL
    Alpha. Based on ppip.c from https://github.com/ptrrkssn/ppip
STAT.PRL
    Alpha. Based on XSTAT2.ASM from CPMUG vol008
SUBMIT.PRL
    Alpha. Based on SUPERSUB.ASM from CPMUG vol081
BDOS
    Alpha. Based on ZSDOS
CCP
    Alpha. Based on ZCPR1
BIOS
    Alpha. Based on B/P BIOS

The Grandiose Vision
--------------------

A ZINC program should:

    Support user numbers in filenames (part of CFCB)
    Support exact file sizes (part of CFCB)
    Support piping and redirection of I/O, if appropriate (done with PIPEMGR)
    Return error codes if it encounters a fatal error (CPM3LIB)
    Support paged output, if appropriate (CPM3LIB)
    If possible, be smaller than its CP/M counterpart.

Build environment
-----------------

!!TODO!! Mostly cross-development environment used for 3.2.0.

The Submit files provided with the source assume a MYZ80 environment running CP/M 3. They assume that
B0: contains library files, C0: contains the program source, C1: contains CFCB source, C2: contains
C3LIB source and C4: contains STRLIB source.

To build ZINC, you will need:

    CP/M 3
    A recent CCP (eg from the November 1998 update of CP/M 3)
    M80, and the Digital Research LINK.COM and LIB.COM.
    patches to M80 to make it return CP/M 3 error codes.
    PIPEMGR
    BDS C

Why? (John Elliott, 3-1-2000)
-----------------------------

    Because I want to.
    CP/M emulators cannot include the CP/M utilities, because of copyright problems. I happen to have written 
    some CP/M emulators, and I would like to include workalikes for the utilities.
    The original 151282 release of CP/M 3.1 is not Year 2000 compliant. I have fixed this (November 1998 update)
    but some programs still use two-digit year numbers, which looks untidy.


To do/ideas
-----------

1. Replace SYSLIB routines by LGPL code(?)
2. Rewrite C3BIOS to use SBIOS (because SBIOS now portable)
3. Add ROM define to prevent code self-modification and allow to have CP/M in ROM
4. Add PRL support to CCP
5. Downgrade CCP to hold only CCP 2.2 and CCP 3 resident commands
6. Downgrade BDOS to support only CP/M 2.2 and CP/M 3 functions
7. Use ZINC.INC for B/P BIOS config
8. Rumor ZX Interface 1 can be used on +2A/+3 machines. If so then think about microdrive support.

Platform specific distributions of ZINC
=======================================

+2A ZINC
--------

+2A ZINC is a ZX Spectrum +3 build of ZINC system. +2A ZINC is a diskless CP/M with only tape and memdisk
support. If external drive detected then works as +3 ZINC.

+3 ZINC
-------

+3 ZINC is a ZX Spectrum +3 build of ZINC system. Works fine on ZX Spectrum +3e and ZX
Spectrum Next too.

+3e ZINC
-------

+3e ZINC is a ZX Spectrum +3e build of ZINC system. IDE support added.

ZX Library
----------

ZXLIB is a library for ZX Spectrum development. ZX Library is external package which you can
download from http://????????

Amstrad XBIOS
-------------

Follow table says about implementation status

| Function name    | +2A ZINC | +3 ZINC |
| DD_INIT (2)      |   Done   |  Done   |
| DD_SETUP         |   Done   |  Done   |
| DD_READ_SECTOR   |   Done   |  Done   |
| DD_WRITE_SECTOR  |   Done   |  Done   |
| DD_CHECK_SECTOR  |          |         |
| DD_FORMAT        |          |         |
| DD_LOGIN         |          |         |
| DD_SEL_FORMAT    |          |         |
| DD_DRIVE_STATUS  |          |         |
| DD_READ_ID       |          |         |
| DD_L_DPB         |          |         |
| DD_L_XDPB        |          |         |
| DD_L_ON_MOTOR    |          |         |
| DD_L_T_OFF_MOTOR |          |         |
| DD_L_OFF_MOTOR   |          |         |
| DD_L_READ        |          |         |
| DD_L_WRITE       |          |         |
| DD_L_SEEK        |          |         |
| CD_SA_INIT       |          |         |
| CD_SA_BAUD       |          |         |
| CD_SA_PARAMS     |          |         |
| TE_ASK           |          |         |
| TE_RESET         |          |         |
| TE_STL_ASK       |          |         |
| TE_STL_ON_OFF    |          |         |
| TE_SET_INK       |          |         |
| TE_SET_BORDER    |          |         |
| TE_SET_SPEED     |   Done   |  Done   |
| KM_SET_EXPAND    |          |         |
| KM_SET_KEY       |          |         |
| KM_KT_GET        |          |         |
| KM_KT_PUT        |          |         |
| KM_SET_SPEED     |          |         |
| CD_VERSION       |   Done   |  Done   |
| CD_INFO          |          |         |
| SCR_RUN_ROUTINE  |          |         |
| FIND_FID         |          |         |

| CD_COLDBOOT (1)  |   Done   |  Done   |

1 - No clock tick call are implemented
2 - If no disk drive interface presented then all DD_* functions patched to return NO DRIVE error.

About

License:GNU General Public License v2.0


Languages

Language:Assembly 45.3%Language:Batchfile 31.9%Language:C 14.3%Language:C++ 6.9%Language:Forth 0.7%Language:Roff 0.4%Language:Visual Basic 0.2%Language:DIGITAL Command Language 0.2%