comment ~

Library:  Z34CMN.LIB
Author:   Joe Wright
Date:     23 March 1988

Modern assemblers provide for the use of up to twelve named common
blocks.  The actual addresses of these blocks need not be known at
the time of assembly, but are supplied later by the linker or loader.
NZ-COM will allow the use of seven of these twelve blocks.

This library is to be included in the assembly of the segments in
place of Z3BASE.LIB.  Note that the seven blocks declared here have
only equates and no code or data.  Only one common (_ID_) is allowed
to contain data.  If it is used, it is declared separately in the
source of the particular segment.  The _ID_ common data is read but
otherwise ignored by NZCOM.


          Assembly Notes for ZCPR3 modules and NZ-COM
                         by Joe Wright
                          26 March 88

NZ-COM uses MicroSoft or SLR .REL modules to build the  Z-System.
The  modules  are written so as to 'stand alone'.  There  are  no
direct  inter-module  references.  Rather the modules  treat  the
ZCPR3   environment  and  obtain  required  data  and   addresses
indirectly.    The  environment  descriptor  now   includes   the
addresses of the CBIOS, CCP, DOS and BIOs. as follows:

Z3ENV+
0000      DB   0C3H      ; As always..
0001      DW   CBIOS     ; For NZ-COM, this is CBIOS+6

0008      DB   80H       ; Env Type.  bit 7 means 'Extended'

0034      DW   DRVEC     ; Valid drive vector allows 'holes'

003F      DW   CCP       ; Address of ZCPR3
0041      DB   CCPS      ; Its size in records (normally 16)
0042      DW   DOS       ; Address of the disk operating system
0044      DB   DOSS      ; Its size (normally 28 records)
0045      DW   BIO       ; Address of NZBIO (no size)


                       Notes on Assembly

NZ-COM  uses Named COMMON blocks to provide direct references  to
the  'minor'  segments,  Z3ENV,  SHSTK,  Z3MSG,  etc.   The  file
Z34CMN.LIB replaces Z3BASE.LIB for all assemblies.  All files are
assembled  to .REL (MicroSoft or SLR).  NZCOM.COM  also  requires
the modules to be specifically named.  This is accomplished  with
the NAME pseudo-op as follows:

    NAME      ('CCP')        ; Declare module name
    MACLIB    Z34CMN.LIB     ; In place of Z3BASE.LIB
    MACLIB    Z34HDR.LIB     ; Configuration header

Assembly conditionals are treated a little differently.   Because
module  addresses  are no longer assigned at  assembly  time,  we
cannot  use the address as an existence test, rather we  use  the
module 'size' indicator.  The old IF FCP NE 0 test is changed  to
IF  FCPS NE 0.  FCPS is defined in Z34CMN.LIB as an absolute  YES
or NO.  Of course, the same holds true for RCP, IOP and Z3NDIR.

Because  they  are defined in Z34CMN.LIB,  direct  references  to
Z3ENV,  SHSTK,  Z3MSG,  Z3CL and the like  are  still  permitted.
Addresses  and  sizes of the dynamic segments  must  be  obtained
indirectly  from Z3ENV.  Instead of LD HL,FCP we use LD  HL,(FCP)
which is defined in Z34CMN.LIB as Z3ENV+18.

                       End of NZASM.NOT


~


; As a replacement for Z3BASE.LIB, some usual equates.

base    equ     0               ; Base Page

false   equ     0
true    equ     not false

no      equ     false
yes     equ     true

off     equ     false
on      equ     true

; Named COMMON declarations start here.  For compatibility, these
; are the same names used by Bridger Mitchell's JetLDR.

       common  /_ENV_/
z3env:                          ; Z3 Environment descriptor
z3envs  equ     yes             ; There is one

expath  equ     z3env+9         ; Address of External Path
expaths equ     10              ; Maximum 10 elements for MPATH

rcp     equ     z3env+12        ; Address of RCP
rcps    equ     yes             ; Used as existence test, not size

fcp     equ     z3env+18        ; Address of FCB
fcps    equ     yes             ; Used as existence test, not size

z3ndir  equ     z3env+21        ; Address of NDR
z3ndirs equ     yes             ; Used as existence test, not size

z3quiet equ     z3env+28h       ; Quiet flag ( 1= quiet )

z3whl   equ     z3env+29h       ; Wheel byte address
z3whls  equ     yes             ; There is a wheel

drvec   equ     z3env+52        ; Valid drive vector

ccp     equ     z3env+63        ; CCP entry
ccps    equ     z3env+65        ; Size

dos     equ     z3env+66        ; DOS entry (+6)
doss    equ     z3env+68        ; Size

bio     equ     z3env+69        ; BIO entry

       common  /_SSTK_/
shstk:                          ; Top of Shell stack
shstks  equ     yes             ; There is a shell stack

       common  /_MSG_/
z3msg:                          ; Message buffer
z3msgs  equ     yes             ; There is one

       common  /_FCB_/
extfcb:                         ; External file control block
extfcbs equ     yes             ; There is one

       common  /_MCL_/
z3cl:                           ; Multiple command line
z3cls   equ     yes             ; There is one

       common  /_XSTK_/
extstk:                         ; External stack
extstks equ     yes             ; There is one

       common  /_BIOS_/
bios:

       cseg                    ; Select Code Segment

; End of Z34CMN.LIB

fcp     equ     z3env+18        ; Address of FCB
fcps    equ     yes             ; Used as existence test, not size

z3n