home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
ZSYS
/
SIMTEL20
/
DOC
/
Z-NODE.CQG
/
Z-NODE.CFG
Wrap
Text File
|
2000-06-30
|
41KB
|
953 lines
.cw 11
.po 11
*****************************************************************
* Z-Node Configuration *
* *
* by David McCord, SYSOP, the ZCPR3 BBS *
* *
* (415)489-9005 24 hrs. 300/1200 *
* *
* Date: 27 Feb 1985 *
* *
*****************************************************************
.pa
.he Z-Node Configuration
Introduction
Philosophy
A Z-Node is an expression to the world. It says, "Eight bit
is not dead!" Such is our rallying cry. Personally I agree; and
I do what I can to promote eight bit. It is my hope that there
are many more like me with their Z80 and Hitachi microprocessors.
Personally, also, I dislike what IBM has done to the
microcomputer environment. The intellectual stagnation and "me-
too"-ism is painful for me to see. The major shame of what IBM
has done, in my opinion, is to make micros mediocre. With the
potential power of their machine, they settled on MSDOS...what a
kludge it is! ZCPR3 beats the pants off of it in every
conceiveable aspect (except hierarchical directories). So, in
conclusion, I want people to realize that there are alternatives.
Z-Nodes are an excellent way of promoting those alternatives.
This document is on the topic of how to bring up a Z-NODE.
I basically have taken the approach of documenting how my system
is configured, hoping that you will follow in my footsteps.
Please remember as you read through this document that most of
what I present may always be modified or changed as necessary to
suit your needs; and that this document is a guide, not a
dogmatic treatise. Feel free to vary from what I have said
herein wherever and whenever you find something that works
better.
I can only give a small amount of advice regarding being a
sysop (SYStem OPerator) to those of you who do not have the
experience. The first, and most important, rule is to remember
that you are responsible for everything that occurs on your
remote access computer. So, right at the outset you will need to
have a decision made as to whether you will be running an open
system (anyone can access), or a closed ("registration") system.
My personal preference is an open system because I feel that a
remote access computer system has intrinsic worth to the
community, and that worth is greatly diminished when the public
as a whole can no longer access it.
But there are certainly many sysops who can tell you horror
stories about ill-mannered users, and how they think registration
is "the only way to go".
Bottom line: you are legally reponsible for what happens on
your Z-Node.
Installation Overview
At present, TERM3 and EMSG are not available. Therefore, it
is necessary to use some of the old RCP/M programs on your Z-Node
until they can be replaced with their ZCPR3 equivalents. The old
RCP/M software we will use includes BYE and XMODEM. If a message
system is to be used until EMSG is available, I suggest the METAL
message system. However, anything you find acceptable is OK as
an interim solution.
A suggested plan of attack is to install things in the
following order:
- ZCPR3 (manual or auto install)
- ZRDOS
- BYE
- XMODEM
- SD (renamed DIR)
- TYPEL (renamed TYPE)
Throughout this document, I will be listing assembly-time
options for each program under discussion.
.pa
Files Required
You will need the following files to duplicate my system.
The files you need are usually available on larger RCP/M's or Z-
Nodes. A recommended minimum:
- BYE329.ASM (BYE program)
- A BYE insert for your machine. Sometimes incorrectly
called a BYE "overlay".
- XMDM105.ASM (XMODEM program)
- An XMODEM overlay for your machine.
- TYPEL36.COM (TYPE, LTYPE program)
- SD97.ASM (DIR program)
- PWD11 (Modified to be used with BYE)
- A Z3BASE.LIB file OR a Z3ENV.LIB file for assembly of
BYE329 (support of initializing Z3 segments)
- The MAC or ZAS assembler
- MLOADxx.COM
- A message system such as RBBS, METAL, et. al.
- And, of course, ZCPR3 and ZRDOS
Version numbers are not absolute: subsequent versions should
be acceptable. Previous versions may require extensive
modifications. All examples of assembly time options are
extracted from the versions listed above: other versions may
vary.
.pa
Notes on ZCPR3 for Z-Nodes
DU: Disabled Operation
The distinguishing characteristic of a Z-Node is that it
does not recognize the DU: form when in the operating system.
Although I have heard of systems where they have managed to keep
the DU: form (security is enforced by non-ZCPR means), I
recommend that you use the DIR: form only. This is because TERM3
and EMSG will expect this to be the way system security will be
enforced.
One of the things that can make using named directories much
easier is a terminal (or software emulation) that has
programmable function keys. This is very convienent for
responding to the PW? prompt when logging into a passworded
directory, just hit one key to enter the password and that's it!
Function keys are also very useful in invoking ALIASes, and if
your function keys are programmable, then DPROG.COM will give
you flexibility in redefining them. For instance, use one set of
definitions for use with the Z-Node, and another for WordStar,
another for WordMaster, another for MEX, etc.
Manual-Install ZCPR3 Options
(Users of Z-Com can skip to the next section.)
The following options should be duplicated in your Z3HDR.LIB
file if you are using the manual-install version. People using
Z-Com can skip this.
COMTYP MACRO
DB 'COM'
ENDM
SUBTYP MACRO
DB 'SUB'
ENDM
SUBON EQU TRUE
DRVPREFIX equ TRUE
COMATT equ 01H
DIRON equ FALSE ;DIR COMMAND
LTON equ FALSE ;LIST, TYPE COMMANDS
GOON equ TRUE ;GO COMMAND
ERAON equ FALSE ;ERA COMMAND
SAVEON equ TRUE ;SAVE COMMAND
RENON equ FALSE ;REN COMMAND
GETON equ FALSE ;GET COMMAND
JUMPON equ FALSE ;JUMP COMMAND
NOTEON equ FALSE ;NOTE COMMAND
IF Z3WHL NE 0 ;IF A WHEEL BYTE ADDRESS IS DEFINED
WERA equ TRUE ;Make ERA a Wheel-Oriented Command
WREN equ TRUE ; " REN " " " "
WLT equ TRUE ; " L/T " " " " (LIST/TYPE)
WGO equ TRUE ; " GO " " " "
WSAVE equ TRUE ; " SAVE " " " "
WGET equ TRUE ; " GET " " " "
WJUMP equ TRUE ; " JUMP " " " "
WDU equ FALSE ; " DU: " " " " (DU/DIR Change)
WHEEL equ WERA OR WREN OR WLT OR WGO OR WSAVE OR WGET OR WJUMP OR WDU
ENDIF ;Z3WHL
ERAOK equ FALSE
ERAV equ FALSE
ERDFLG equ 'V'
PGDFLT EQU TRUE
PGDFLG EQU 'P'
NLINES EQU 24
SECTFLG EQU 'S'
MINPATH EQU TRUE
SCANCUR EQU TRUE
INCLDU equ TRUE
ACCPTDU EQU FALSE
NDINCP EQU TRUE
INCLNDR EQU TRUE
ACCPTND EQU TRUE
DUFIRST EQU FALSE
PWCHECK EQU TRUE
CMDSEP equ ';'
CMDRUN equ FALSE ; Enable the Facility
IFON EQU TRUE
MAXUSR EQU 31 ;MAXIMUM USER NUMBER ACCESSABLE
MAXDISK EQU 3 ;MAXIMUM NUMBER OF DISKS ACCESSABLE
SUPRES EQU FALSE ;SUPRESSES USER # REPORT FOR USER 0
SPRMPT EQU '$' ;CPR PROMPT INDICATING SUBMIT COMMAND
CPRMPT EQU '>' ;CPR PROMPT INDICATING USER COMMAND
NUMBASE EQU 'H' ;CHAR USED TO SWITCH FROM DEFAULT NUMBER BASE
CURIND EQU '$' ;SYMBOL FOR CURRENT DISK OR USER
COMMENT EQU ';' ;LINES BEGINNING WITH THIS CHAR ARE COMMENTS
And don't forget to turn on the wheel check options for the
commands you select in Z3HDR.LIB!
.pa
ZCPR3 System Segments
The following discussion about system segments applies only
if you are using them. All RCP's, FCP's, and IOP's are optional
at this point in time.
SYSENV.LIB
Your system's environment descriptor should have the "don't
accept DU: option enabled. The Z3 utilities will then read this
and ignore the DU: form.
RCP
For folks that are doing a manual-install version of ZCPR3,
an RCP that I believe was intended for use under a remote system
is found in SYSRCP3.LIB. This will require practically no
modification to be used in the secure environment, as all of the
commands contained in it respond to the wheel byte. My
associate, Joe Wright, suggests that you disable the WHL command
that is enabled as the default.
FCP
At present I am using SYSFCP1.LIB as the system's FCP. I
have not as yet discovered a good use of the FCP for remote
callers, but I find it useful in some sysop-oriented tasks.
IOP
There is not an IOP implemented on Z-Node Central at this
time. I see no use for it, either. (of course, the AMPRO box I
use doesn't have a lot of ports, that's why I'm not using an IOP)
.pa
Notes on BYE
Getting BYE running will probably be the most challenging
task involved in getting your Z-Node going. However, it is not
any easier under standard CP/M either! BYE329 or later (Sorry, I
can't comment on MBYE, don't know anything about it or any other
BYE versions) is recommended because it has special support for
the ZCPR3 segments that should be initialized when a new caller
comes on or BYE terminates. See my document Z3&BYE#2.DOC for
further information on the subject of modifying BYE for ZCPR3 if
you do not intend to use BYE329 as BYE.COM on your system.
BYE Overlay
The BYE3xx.ASM file is not complete. This means that if you
try to assemble it, you will get a lot of assembly errors. What
must be done is a BYE "overlay" must be INSERTED INTO THE
BYE3xx.ASM FILE. Use a word processor to do this. If you scan
down about a third of the way into the BYE3xx.ASM file, you will
find a section labeled "Insert your modem routines here". Using
a command to read from a file (like WS ^Kr, or WM y commands),
insert the bye "overlay" file at that point.
The BYE overlay contains options for selecting which baud
rates your system can support. It also contains the code
necessary to do software changing of baud rates if you will be
supporting more than one speed. Generally speaking, there are
overlays available for most computers, but in case you need to
make up one of your own, you'd better have the tech manuals for
the I/O ports of your machine available.
BYE Options
BYE329 has about a million assembly-time options that you
must have set properly. Some of these may vary from what I have
shown below. Please note that my system is set up for use with a
non-intelligent modem. Many of you will have to change this.
BYELOW EQU YES ; Yes, for BYE3 below CCP; no for above BIOS
RAMTOP EQU 0FFFFH ; Last available RAM if BYELOW is 'NO'
CCPL EQU 8 ; Number of sectors for CCP size (norm=8)
IMODEM EQU NO ; Yes, for intelligent modem, including Hayes
B2400 EQU NO ; Yes if your modem supports 2400 baud. Leave
; as EQU until more port I/O inserts catch up
DEBUG EQU NO ; Yes, to see helpful info while debugging
IOVAL EQU 0 ; Initial value for IOBYTE (only if MINICK YES)
OXGATE EQU NO ; Yes, running OxGate RCPM-BBS system
RBBSCK EQU NO ; Yes, running RBBS - sets/resets 'WRTLOC' flag
MINICK EQU NO ; Yes, running MINICBBS
TIMEON EQU NO ; If YES, add your clock reader code at the
; Start of label TIME: and store binary values
; in CHOUR and CMIN
RSPEED EQU NO ; Yes, if restricting primetime to a min. speed
; (a clock read routine is required if YES -
; See TIMEON)
IF RSPEED OR TIMEON ; Use these bytes in low memory
LHOUR EQU 050H ; Set by BBS (or BYE) in binary
LMIN EQU 051H ; When user logs on
STATUS EQU 053H ; And his status
MAXMIN EQU 60 ; Minutes for maximum time allowed on system.
; This should be set to 60 if TIMEON is YES
; (255 minutes maximum.)
ENDIF ; RSPEED OR TIMEON
IF RSPEED ; 24 hour clock-- 00 = midnight, 23 = 11PM
HOUR1 EQU 19 ; Start of prime-time (19=7:00 PM)
HOUR2 EQU 23 ; End of prime-time (23=11:00 PM)
SPEED EQU 5 ; Minimum speed accepted (5=1200 baud) Change
; OFFMSG to match your times, baud rate and
; time zone. OFFMSG is a message at code end
ENDIF ; RSPEED
ALLDEV EQU NO ; Yes, retain PUN: RDR: and LST: devices
CALLBAK EQU NO ; Yes, allow callback feature
COMFILE EQU YES ; Yes, chain a .COM file upon carrier reception
DECIMAL EQU NO ; Yes, decimal value for userlog
DUAL$IO EQU YES ; Yes, console/modem linked together
EXFILE EQU NO ; Yes, chain a .COM file upon loss of carrier
FKEYS EQU YES ; Yes, local console has special function keys
HARDLOG EQU NO ; Yes, echo remote input to printer
PRINTER EQU NO ; Yes, retain list device
PRNTGB EQU YES ; Yes, print "Goodbye..." message
PRNTWB EQU NO ; Yes, print a string for each warm boot
PWRQD EQU NO ; Yes, password needed to login
RKEYS EQU NO ; Yes, remote console has special function keys
TIMEOUT EQU YES ; Yes, auto logout for sleepy callers
TOVALUE EQU 5 ; Minutes to auto logout
USRLOG EQU NO ; Yes, count number of users
WBRTN EQU NO ; Yes, do function each time system warm boots
BLKOUT EQU YES ; Turn off remote send
BLNKKEY EQU 'B'-40H ; Keycode to "blank out" remote terminal
CCSDISK EQU NO ; Yes, CCS disk controller
CLOSS EQU 1 ; If carrier dies, wait 1 sec. before hanging up
COMDRV EQU 'A' ; Drive to look for .COM file on
COMUSR EQU 14 ; User # of .COM file to be called after answer
CPM2 EQU YES ; Yes, using CP/M 2.2
CTRLC EQU 'K'-40H ; Map ^C to this charactero
CWAIT EQU 20 ; Wait up to 20 seconds for carrier at first
EXDRV EQU 'A' ; Drive to look for exit .COM file on
EXUSR EQU 15 ; User # of .COM file to be called upon exit
IMSAI EQU NO ; Yes, if using IMSAI computer with front panel
LOSER EQU NO ; Yes, warm boot overwrites part of the BIOS
LXID EQU 11H ; Define byte of LIX D,nnnn to fake loader
LXIH EQU 21H ; Define byte of LXI H,nnnn to fake loader
MHZ EQU 4 ; Processor clock in MHz
MSGKEY EQU 'W'-40H ; Keycode to print "Message from SYSOP: "
MSPEED EQU 003CH ; Baud rate pointer
NORING EQU YES ; Yes, UART ring indicator NOT available
SELPASS EQU NO ; Require a password
SENSE EQU 0FFH ; Sense switch port number
SYSDKEY EQU 'O'-40H ; Char. to print "System going down in 5 min.."
TWITKEY EQU 'N'-40H ; Keycode to hangup modem manually
WELFILE EQU YES ; Yes, to send a WELCOME file
WELUSR EQU 14 ; User # of WELCOME file
ZILOG EQU YES ; Yes, using a Z-80 or Z-800
ZCPR2 EQU NO ; Yes, if running ZCPR or ZCMD2 or ZCMD or ZCPR
ZCPR3 EQU YES ; Yes, if running ZCPR3
IF ZCPR3
MACLIB Z3BASE ; Requires MAC to assemble...otherwise enter
; constants directly..see label DOZ3 for
; required EQU's
ENDIF ; ZCPR3
USEZCPR EQU NO ; Yes, if using ZCPR or BBS to set max drive
; And user #
MAXDRIV EQU 003DH ; ZCPR lolcation of MAXDRIV byte
WHEEL EQU 004BH ; Location of ZCPR's wheel flag
MAXUSER EQU 003FH ; ZCPR location of MAXUSR byte
MAXDRV EQU 7 ; Highest drive supported (2=B:)
MAXUSR EQU 6 ; Highest user area
SYSDRV EQU 7 ; Highest local drive supported (2=B:)
SYSUSR EQU 15 ; Highest local user area (0-15)
CHGPATH EQU YES ; Yes, if changing ZCPR's external path
EXTPATH EQU 0040H ; ZCPR external path default location
.pa
BYE parameter block
What follows is how the BYE parameter block looks in RAM.
Because BYE relocates itself into high RAM at run time, you may
find out where this block resides using the P(eek) RCP command.
The key is the three characters "BYE" at the end of the block.
;-----------------------------------------------------------------------
;
; Here is a quickie handy reference table to use so we do not get mixed
; up. Please it in any future changes.
;
; |mxusr|mxdrv|toval|nulls|ulcsw|lfeeds|wrtloc|hardon|lostflg|covect|
; |1 byt|1 byt|1 byt|1 byt|1 byt|1 byte|1 byte|1 byte|1 byte |2 byes|
;
;-----------------------------------------------------------------------
;
MXUSR: DB MAXUSR ; Runtime maximum user area available
MXDRV: DB MAXDRV ; Runtime maximum drive available
TOVAL: DB TOVALUE ; Number of minutes to wait before timeout
NULLS: DB 0 ; Number of nulls after <cr>
ULCSW: DB 0 ; Upper case only switch (32=upper case)
LFEEDS: DB 0 ; Line feed mask (0=don't mask)
WRTLOC: DB 0 ; Location RBBS pokes so bye doesn't hang
HARDON: DB YES ; If 0, hardlog is de-activated
LOSTFLG:DB 0 ; If non-zero, do not output to console
COVECT: DW VCONOUT+1 ; Console output vector for XMODEM
HDROFF EQU $-MCBOOT ; Offset to 'BYE' that follows
DB 'BYE' ; Tells XMODEM that BYE is being used
.pa
Notes on XMODEM
XMODEM requires that you overlay the program with a machine-
specific overlay, very similar to MDM7xx or MEX. I have
recommended XMDM105, but earlier versions are just as suitable.
XMODEM Options
The following is an example of how my xmodem options are
set:
MHZ EQU 4 ; Clock speed, use integer (2,4,5,8, etc.)
CPMPLUS EQU NO ; Yes, if operating in CP/M Plus environment
STOPBIT EQU YES ; Yes, if using 1 stop bit, no if using 2
ZCPR2 EQU YES ; Yes, if using N/ZCPR/1/2/3 with WHEEL byte
WHEEL EQU 4BH ; Location of ZCPR wheel byte (normally 03EH)
NOCOMR EQU YES ; Yes, change .COM to .OBJ on receive
NOCOMS EQU YES ; Yes, .COM files not sent
NOLBS EQU YES ; Yes, .??# files not sent
NOSYS EQU YES ; Yes, no $SYS files sent or reported
USEMAX EQU NO ; Yes if using ZCPR for DRIVMAX & USRMAX values
; No to use MAXDRV and MAXUSR specified next
DRIVMAX EQU 03DH ; Location of MAXDRIV byte
USRMAX EQU 03FH ; Location of MAXUSER byte
MAXDRV EQU 7 ; Number of disk drives used
MAXUSR EQU 8 ; Maximum 'SEND' user allowed
BUFSIZ EQU 16 ; File transfer buffer size in Kbytes
DESCRIB EQU YES ; Yes asks for a description of uploaded file
DRIVE EQU 'A' ; Drive area for description of upload
USER EQU 14 ; User area for description of upload
BSIZE EQU 32*1024 ; Set for 16k, 32k or 48k as desired for DESCRIB
LARGEIO EQU NO ; Yes, if modem patch area over 128 bytes
LARSIZE EQU 0 ; If 'LARGEIO' set patch area size here
LOGCAL EQU YES ; Yes, logs XMODEM transfers
LOGUSR EQU 14 ; User area to put 'XMODEM.LOG' file
LOGDRV EQU 'A' ; Drive to place 'XMODEM.LOG' file
LASTUSR EQU 14 ; User area of 'LASTCALR' file, if 'LOGCAL' yes
LASTDRV EQU 'A' ; Drive to read 'LASTCALR' file from
OLDRBBS EQU YES ; Yes, look for 'LASTCALR' file - no, look for
; 'LASTCALR.DAT' file
PRDRV EQU 'G' ; Private drive for SYSOP to receive file
PRUSR EQU 15 ; Private user area for SYSOP to receive file
RETRY EQU YES ; Yes requires a valid NAK to resend a record
; No resends a record after any non-ACK
SETAREA EQU YES ; Yes, if using designated area to receive files
SPCDU EQU YES ; Yes=upload to normal area even with wheel byte
DRV EQU 'G' ; Drive to receive file on
USR EQU 0 ; User area to receive file in
SPLDRV EQU 'G' ; Special drive area for downloading SYSOP files
SPLUSR EQU 15 ; Special user area for downloading SYSOP files
TAGLBR EQU NO ; Yes tagged .LBR files not sent
TIMOUT EQU 1 ; Seconds to abort after carrier loss
USECON EQU YES ; Yes to get the original CONOUT address from
; BYE3 or MBYE-3. 'NO' to get the CONOUT
; address the value set in the XMODEM overlay.
CONOFF EQU 15 ; Offset to COVECT where original console output
; routine address is stored in BYE3/MBYE
; versions immediately followed by BYE as a
; check to insure BYE is running.
RTC EQU NO ; If YES, add clock and date reader code at
; start of GETTIME: and GETDATE: below
TIMEON EQU NO ; If YES, add your clock reader code at the start
; of label GETTIME: and return time in regs A & B
IF TIMEON AND NOT CPMPLUS
; Use these bytes in low memory
LHOUR EQU 050H ; Set by BBS (or BYE) in binary
LMIN EQU 051H ; when user logs on
STATUS EQU 053H ; and his status
ENDIF ; TIMEON AND NOT CPMPLUS
IF TIMEON AND CPMPLUS
; Use these bytes in low memory
LHOUR EQU 022H ; Set by BBS (or BYE) in binary
LMIN EQU 023H ; when user logs on
STATUS EQU 024H ; and his status
ENDIF ; TIMEON AND CPMPLUS
LOGLDS EQU NO ; Count number of up/down loads since login.
; Your BBS program can check UPLDS and DNLDS
; when user logs out and update either the
; user's file or a file for this purpose.
; You can either modify your BBS entry program
; to check the LASTCALR file before updating
; it and then update (risky), or make a sepa-
; rate program that BYE calls when logging
; off a user (preferred).
IF LOGLDS
UPLDS EQU 054H ; Clear these values to Zero from your BBS pro-
DNLDS EQU 055H ; gram when somebody logs in. NOTE: Clear
; ONLY when a user logs in. Not when he re-
; enters the BBS program for CP/M.
ENDIF ;LOGLDS
MAXTIM EQU YES ; Yes if limiting transmission time
MAXMIN EQU 45 ; Minutes for maximum file transfer time
; this should be set to 60 if TIMEON is YES
; (99 minutes maximum.)
XMODEM Overlay
XMODEM is overlayed by an XMODEM overlay, similar to MDM7xx
and it's overlays. The overlay is assembled seperately, and then
the object code is overlayed onto the main XMODEM program through
the use of MLOAD or DDT/SID/etc. Both the main XMDM105.ASM file
and most overlays contain instructions on how to do this. This
overlay is very easy to work with, compared to BYE's overlay.
.pa
Notes on TYPEL
Typel has a patch area near the front of the program that
should be set appropriately for your system. This area should be
patched with the max drive and user that a non-wheel user can
access. See the .DQC file on TYPEL for further patch info.
TYPEL should be renamed to TYPE.COM
TYPEL Patches
The following is an extract from TYPEL.DOC file:
OPTIONS:
TYPEL can be fully configured from the .COM file without need for reas-
sembly. The following are the relevant patch locations:
0103 MAXDRV enter highest drive allowed PLUS 1 (A=2, B=3...)
0104 MAXUSR enter highest allowable user area PLUS 1
0105 MAXLIN enter maximum number of lines before TYPEL
aborts, or enter 0 for no limit.
0106 MAXLPS enter number of lines on screen MINUS 1, or 0
for continuous display ($N command line option
overrides the setting).
0107 LSTEN enables LST output. Set to 1 to enable LST op-
tion (default) or set to 0 if LST undesired.
0108 SYSEN enables $SYS type. Set to 0 to disallow $SYS or
to 1 (default) to allow $SYS.
0109 EJECTP enter number of lines per printed page or 0 if
page eject is not desired.
010A ... The exclusion table starts here. Each entry has
3 bytes. A "?" denotes an ambiguous byte i.e.,
"OV?" matches "OVR", "OVL", etc. There is room
for an additional 9 entries. If you wish to
DELETE an entry, use DDT to set all high bits.
.pa
Notes on SD
Sysops who will be running ZRDOS must use SD97 and
subsequent versions. SD96 and previous will cause ZRDOS to crash
if a command line option of D (all disks) is used. This is
because SD96 and previous actually modify the Digital Research
BDOS, something that is a big no-no, and is unnecessary under
ZRDOS. Joe Wright modified SD to work properly with ZRDOS,
beginning with SD97.
SD is a oversized mess of spaghetti code that somehow
manages to work very nicely. It is renamed to DIR.COM after
assembly and serves as the system's DIR command. There are two
major advantages of using SD instead of any of the many ZCPR3 DIR
commands, 1) SD can display library file directories, and 2) SD
supports BYE features that limit access to higher user numbers
and disks. There is one disadvantage of using SD, in that it
does not understand named directory references as the many ZCPR3
DIR commands would. So that's one disadvantage compared with two
advantages, so that is why I recommend it. And when you get to
the subsequent section of this document discussing useful ALIASes
for use on a Z-Node, you will see how useful SD is.
SD Options
SD requires that you set a bunch of assembly-time options.
There is also a table of drive/user areas that must be edited
before assembly. The following options are what is used on my
system:
DIRCON EQU NO ; Yes for direct console output
LOWCCP EQU YES ; Yes only if you are running with byelow
[Note: the following equate must be set to the base page of your BDOS]
BDOSPG EQU 0C8H ; Set properly if lowccp is yes
CPM3 EQU NO ; Set to yes if running cp/m 3 or above
TIMEON EQU NO ; If yes, add your clock reader code at
; Start of label time: and store binary
; Values in chour and cmin
QUITE EQU YES ; Yes if "Time on System is xx minutes" suppressed
IF NOT CPM3
CHOUR EQU 043H ; Some bios clocks keep time
CMIN EQU 044H ; Here anyway
LHOUR EQU 050H ; Set by bbs (or bye) in binary
LMIN EQU 051H ; When user logs on
STATUS EQU 053H ; And his status
ENDIF ; Not cpm3
IF CPM3
CHOUR EQU 020H ; Some bios clocks keep time
CMIN EQU 021H ; Here anyway.
LHOUR EQU 022H ; Set by bbs (or bye) in binary
LMIN EQU 023H ; When user logs on
STATUS EQU 024H ; And his status
ENDIF ; Cpm3
MAXMIN EQU 60 ; Minutes for maximum file transfer time
; This should be set to 60. (99 max)
ZCPR2 EQU YES ; Yes if nzcpr/zcpr2 (wheel byte enabled)
MAXUR EQU YES ; Yes if using maxusr in nzcpr/zcpr2
MAXDR EQU YES ; Yes if using maxdrv in nzcpr/zcpr2
MAXCL EQU NO ; Yes if storing mnpl value at maxc
WHEEL EQU 4BH ; Set to wheel location if zcpr2 is yes
; Use 3eh if using nzcpr or zcmd
; Use 3bh if using unmodified zcprhdr file
MAXU EQU 0B6D4H ; Set to max user location if maxur is yes
MAXD EQU 0B6D5H ; Set to max drive location for maxdr=yes
MAXC EQU 3BH ; Set to # of names per line location
MXZUSR EQU 15 ; Maximum user # allowed whlusr=yes/wheel set
WHLUSR EQU YES ; Yes to allow search 0-mxzusr if wheel set
WHLA EQU NO ; Yes to disallow a option if wheel zero
WHLC EQU YES ; Yes to disallow c option if wheel zero
WHLCL EQU NO ; Yes to disallow 4,6 or 8 options if wheel = 0
WHLD EQU NO ; Yes to disallow d option if wheel zero
WHLF EQU YES ; Yes to disallow f option if wheel zero
WHLL EQU NO ; Yes to disallow l option if wheel zero
WHLP EQU YES ; Yes to disallow p option if wheel zero
WHLR EQU YES ; Yes to disallow r option if wheel zero
WHLS EQU YES ; Yes to disallow s option if wheel zero
WHLU EQU NO ; Yes to disallow u option if wheel zero
AOPT EQU YES ; Yes to allow searching all user areas
COPT EQU NO ; Yes to allow clear screen
CLOPT EQU YES ; Yes allows a 40, 64 or 80 column display
DOPT EQU YES ; Yes to allow searching all drives on-line
FOPT EQU YES ; Yes to allow file output option
LOPREV EQU NO ; No to reverse the "L" option and not print
LOPT EQU YES ; Yes to allow library file member printing
NOPT EQU YES ; Yes to allow disabling page pause option
PGPAWS EQU YES ; Yes for pause after each page
POPT EQU YES ; Yes to allow printer option
ROPT EQU YES ; Yes to allow reset option
SOPT EQU YES ; Yes to allow system file option
UOPT EQU YES ; Yes to allow user number option
VOPT EQU YES ; Yes to allow version number display
REVIDEO EQU NO ; Use reverse video sequences
; If no, the rest of the equates are disabled
LEADIN EQU ESC ; Escape lead-in (try a null if not required)
INTOREV EQU '4' ; Toggle background (enter your value here)
OUTAREV EQU '3' ; Toggle foreground (enter your value here)
VECTOR EQU NO ; Yes to display attributes on flashwriter ii
VIDEO EQU 0E009H ; Entry to flashwriter video driver prom
IF NOT (ZCPR2 AND MAXCL)
NPL EQU 4 ; # of names per line max values are:
; 2 for 40 x xx, 3 for 64 x 16, & 4 for 80 x 24
ENDIF
LPS EQU 24 ; # of lines per screen max values are:
; ? for 40 x xx, 16 for 64 x 16, 24 for 80x24
LPS1 EQU 16 ; # of lines per screen if names per line = 3
LPS2 EQU 16 ; # of lines per screen if names per line < 3
FENCEC EQU '|' ; Use 00h for none
KTHREE EQU NO ; Yes limits file size columns to 3 digits to
; Gain an additional print colomn. allows
; Fence to be used with four files per line.
PRDI EQU NO ; Yes to print drive # on each line
PRUS EQU NO ; Yes to print user # on each line
PRLIBD EQU NO ; If yes and prus & prdi are yes then drive and
; User numbers will be displayed on library
; Listing lines
PRBRDR EQU NO ; Yes to print a quasi-border for library files
DORST EQU YES ; Yes to always reset disks when d option active
DUOPT EQU NO ; Yes, allow drive/user spec zcpr2 style
NODISK EQU YES ; Yes if you do not want to specify disk drive
; When asking for options and using default drv
REPERR EQU YES ; Yes to report command line option errors
REPUSR EQU YES ; Yes to report user numbers
VCODE EQU YES ; Yes if files are to be alphabetized vertically
Don't forget to edit the drive/user table you will find a
small way into the actual code of the program!
.pa
METAL and SD
If you are using METAL as your message system software, the
following statements apply to you. SD needs to know where it can
find parameters describing what maximum user # and disk drive are
available to the caller. The BYE "parameter block" must be
located in RAM and the MAXD and MAXU values must be extracted
from it. Then, the addresses of the parameters are set into SD
before assembly. By default, SD is set up to expect these
parameters in the wrong place, SO THIS MUST BE CHANGED IF YOU ARE
USING METAL. METAL is different than other message systems in
that it sets the values directly in the BYE parameter block,
unlike RBBS and others which fool around with locations in page 0
of RAM. These parameters are altered by METAL to allow different
usertypes different levels of access. For instance, when I, the
sysop, go to the operating system from METAL, it will set the
MAXU parameter to 15. I can therefore access user 15 without BYE
sending me back to user 0. However, if an ordinary user who's
MAXU is set to 6 goes to the operating system, BYE will send him
back to user 0 if somehow he managed to get to user 15. (He
couldn't get into user 15 anyway, because he doesn't have the
password for the Named Directory, but that's beside the point.)
The bottom line is that you the sysop have to figure out where
these values in the BYE parameter block are located in RAM, and
set the corresponding EQUate statements in the SDxx.ASM file in
order for SD to follow the right MAXD and MAXU values. I should
also point out that if you change BYE at all that this procedure
will need to be done all over again. I know that this is a big
pain but it is what you must do in these circumstances to prevent
callers from seeing directories of A15: and all the nasty COM
files that sysops keep there. Not that they could invoke them
(as long as DU: is disabled and the directory is passworded), but
why give people the temptation? If anyone has a better way, I'll
be glad to hear it! Now, to find the BYE parameter block, I
suggest that you the sysop come in as a remote caller, i.e.,
while BYE is active. Call in from someplace. Then enter the
operating system, enable the WHEEL byte, and use the peek command
of your RCP. See the description of the BYE parameter block in
BYE329.ASM, and for an example of how to find the parameter
block (when BYE is active in RAM), see the findbye routine in
PWD11.MQC. If you follow the same steps, you can find it too.
I disable the DU: recognition in SD through EQUate selections, in
order for it to behave more like a Z3 utility.
.pa
ALIASes
Convienent ALIASes on a Z-Node
First a note about BYE329 and the path: BYE329 has the
capability of changing the path when being invoked or terminated.
I suggest you use this feature, making the path simply A0: when
BYE is invoked and A0: A15: when terminated. These parameters
are all set in the BYE329.ASM file. The convienence of having
the path set automatically is very nice; however, you (the sysop)
will have to set the path manually to A0: A15: when you call in
remotely. I mention this because some of the following ALIASes
are only found in A15:.
ALIAS Name: CHBBS.COM
Typically located in: A15:SYSOP>
Command line contained:
METAL:;TYPE CALLERS $$N;TYPE XMODEM.LOG $$N;COMMAND:
Typically the METAL directory is passworded, so you must
respond to the PW? prompt you will recieve with the password for
the METAL directory. This ALIAS does a quick check of the
callers log and xmodem log.
ALIAS Name: STARTBBS.COM
Typically located in: A14:METAL>
Command line contained:
METAL R;TCSELECT
This program is not normally used by the sysop at all. This
ALIAS is the COM file loaded by BYE and executed after BYE types
the WELCOME file to the user. (This is how users on my system
are forced into TCSELECT before entering ZRDOS - They are
actually completing this ALIAS).
.pa
ALIAS Name: EXITBBS.COM
Typically located in A15:SYSOP>
Command line contained:
LDR SYS.ENV;COMMAND:
I have modified my BYE329 to load the command buffer of
ZCPR3 with the command EXITBBS. This LDR command re-loads the
entire .ENV file, but the real purpose is to re-load the TCAP
with my terminal's control sequences. Because BYE329 zeroes out
the TCAP on termination (who knows what might be in there...), it
is necessary to reload it like this, so if you have WS patched to
use the TCAP, you can then use WS. It is not necessary to have
this ALIAS, as a manual command is almost as easy, but I found it
sure gets repetitive. It is placed in A15: because that is where
the SYS.ENV file is located, and for some reason LDR doesn't
understand the DIR: prefix, so I have BYE exit to A15:.
ALIAS Name: LDIR.COM
Typically located in: A0:COMMAND>
Command line contained:
DIR $1.LBR $$L
This ALIAS is a nifty way to eliminate needing to maintain a
bonafide LDIR program. It uses SD (renamed to DIR) to show the
directory of a library file. It is actually better than the
conventional LDIR as it can accept ambiguous filenames.
ALIAS Name: LTYPE.COM
Typically found in: A0:COMMAND>
Command line contained:
TYPE $1 $2
This uses TYPEL (renamed to TYPE) and it's support of typing
library members. Eliminates the need to maintain a genuine LTYPE
program on your system.
.pa
ALIAS Name: BIGDIR.COM
Typically found in: A0:COMMAND>
Command line contained:
DIR *.* $$u0adl
This ALIAS is usually used by new callers to see
"everything". And boy, do we mean everything. Uses SD (renamed
to DIR).
ALIAS Name: FIND.COM
Typically found in: A0:COMMAND>
Command line contained:
DIR $1 $$u0ad
This ALIAS allows callers to find which area of the system a
file may be located at. I invented this as a temporary measure,
because it does not search library file directories. Well, I
still haven't gotten around to getting a better version yet. SD
will search all accessible user areas, and will report when it
finds a matching filename. If an entire (accessible) disk is
searched, then a "No File on x:" message is printed.
ALIAS Name: ARCHIVE.COM
Typically found in A15:SYSOP>
Command line contained:
AC Z3CORE:*.*=$1:*.* /A
This ALIAS is probably only of interest to systems using a
hard disk. This uses the ZRDOS AC utility to copy only files
that have changed. The directory Z3CORE: on my system is one of
the floppy drives, which is probably something different on your
system. Change the destination DIR: as appropriate. The usage
is ARCHIVE <source DIR:>, as ARCHIVE SYSOP. Passworded DIRs like
"SYSOP" will require a response to the PW? prompt.
.pa
ALIAS Name: M8.COM
Typically found in A15:SYSOP>
Command line contained:
M80 =$1;L80 $1/P:100,VLIB/S,Z3LIB/S,SYSLIB/S,$1/N/E
A great way to assemble ZCPR3 utilities. No muss, no fuss.
Of course, the *.REL files called out should be in the same
directory as L80.
ALIAS "Breaking"
I was suprised to find out ALIASes can be prematurely
terminated under certain conditions. What this means is that you
must never assume that an ALIAS is secure; it can be prematurely
terminated. All that it requires is a ctl-S ctl-C sequence if
any characters are being printed to the console. So, don't do
things like setting the WHEEL byte from within an ALIAS, because
it might not get reset!
Notes on System Organization
The first thing you should realize is that all .COM files
that are to be accessible to ordinary callers should be placed in
A0:. This way, a caller can invoke them from any directory and
they will be found and executed via the PATH function of ZCPR3.
All directories that are to be inaccessible to ordinary
callers should be passworded. Although BYE contains an excellent
security routine that limits the highest user that a caller may
access, when TERM3 replaces BYE this will no longer be available.
If you are going to need more than 14 named directories,
there will have to be some work done. Although Echelon's advice
that LDR can simply load a different .NDR segment to expand to a
different set of 14 directories is valid for single-user systems,
this is of little value on a Z-Node. The reason: You do not want
LDR.COM available to callers...if it were available to callers,
they may be able to upload their own segments and use LDR to load
them. What this means is that a caller could (for instance)
replace the usual RCP for a Z-Node that has all dangerous
commands responding to the WHEEL byte with one that doesn't.
Very bad situation. Probably the best way to handle the
situation of needing more than 14 named directories could be
handled by expanding the Named Directory Segment in RAM. Since I
have not needed to do this, I am not sure if there are any
special difficulties. LDR and/or MKDIR may need to be changed to
cope with a larger .NDR file. If someone comes up with a
solution, please forward it to me at the ZCPR3 BBS for everyone's
mutual edification.
.pa
There are some directory names that I think should be
standard on a Z-Node. Examples:
- UPLOADS: A collection point of uploads to the Z-Node.
- HELP: Where *.HLP files are found easily by the ZCPR3 HELP
program.
- COMMAND: Where all .COM files (accessible to callers) are
stored. Usually the A0: drive/user area.
- SYSOP: Where the sysop stores files on the system that are
for his use ONLY. Usually this is A15:, and the directory is
passworded. Examples of nice programs to have here are NSWEEP,
NULU, ALIAS, etc.