mirror of https://github.com/wwarthen/RomWBW.git
committed by
GitHub
629 changed files with 64289 additions and 4799 deletions
@ -0,0 +1,26 @@ |
|||
name: CI |
|||
|
|||
on: [push] |
|||
|
|||
jobs: |
|||
build: |
|||
|
|||
runs-on: ubuntu-latest |
|||
|
|||
steps: |
|||
- uses: actions/checkout@v2 |
|||
- uses: rlespinasse/github-slug-action@1.1.0 |
|||
|
|||
- name: Install Dependencies |
|||
run: | |
|||
sudo apt-get install libncurses-dev |
|||
- name: Build |
|||
run: | |
|||
make |
|||
make clean |
|||
rm -rf .git |
|||
- name: Upload Archive |
|||
uses: actions/upload-artifact@v1 |
|||
with: |
|||
name: RomWBW-${{env.GITHUB_REF_SLUG}}-${{env.GITHUB_SHA_SHORT}} |
|||
path: . |
|||
@ -0,0 +1,95 @@ |
|||
# Not sure what patterns to apply |
|||
# So ignoring all generated files explicitly |
|||
|
|||
**/*.[Bb][Ii][Nn] |
|||
**/*.[Cc][Oo][Mm] |
|||
**/*.[Rr][Oo][Mm] |
|||
**/*.com |
|||
**/*.eeprom |
|||
**/*.hex |
|||
**/*.img |
|||
**/*.lib |
|||
**/*.lst |
|||
**/*.o |
|||
**/*.prn |
|||
**/*.rel |
|||
**/*.sym |
|||
**/*.sys |
|||
**/*.tmp |
|||
**/*/font*.asm |
|||
|
|||
Binary/**/*.mym |
|||
Binary/**/*.pt3 |
|||
|
|||
Source/**/eeprom |
|||
Source/Apps/Assign.com |
|||
Source/Apps/FDU/FDU.COM |
|||
Source/Apps/Format.com |
|||
Source/Apps/IntTest.com |
|||
Source/Apps/Mode.com |
|||
Source/Apps/OSLdr.com |
|||
Source/Apps/RTC.com |
|||
Source/Apps/SysCopy.com |
|||
Source/Apps/SysGen.com |
|||
Source/Apps/Talk.com |
|||
Source/Apps/Timer.com |
|||
Source/Apps/Tune/Tune.com |
|||
Source/BPBIOS/bpsys.bak |
|||
Source/BPBIOS/bpsys.dat |
|||
Source/BPBIOS/def-ww.lib |
|||
Source/CPM3/bios3.spr |
|||
Source/CPM3/bnkbios3.spr |
|||
Source/CPM3/gencpm.dat |
|||
Source/CPM3/options.lib |
|||
Source/CPM3/zpmbios3.spr |
|||
Source/HBIOS/Blank512KB.dat |
|||
Source/HBIOS/build.inc |
|||
Source/Images/blank144 |
|||
Source/Images/blankhd |
|||
Source/Prop/Spin/ParPortProp.list |
|||
Source/Prop/Spin/PropIO.list |
|||
Source/Prop/Spin/PropIO2.list |
|||
Source/ZPM3/bnkbios3.spr |
|||
Source/ZPM3/gencpm.com |
|||
Source/ZPM3/gencpm.com |
|||
Source/ZPM3/gencpm.dat |
|||
|
|||
Tools/Linux |
|||
Tools/Darwin |
|||
|
|||
Tools/unix/bin2asm/bin2asm |
|||
Tools/unix/cpmtools/cpmchattr |
|||
Tools/unix/cpmtools/cpmchmod |
|||
Tools/unix/cpmtools/cpmcp |
|||
Tools/unix/cpmtools/cpmls |
|||
Tools/unix/cpmtools/cpmrm |
|||
Tools/unix/cpmtools/fsck.cpm |
|||
Tools/unix/cpmtools/fsed.cpm |
|||
Tools/unix/cpmtools/mkfs.cpm |
|||
Tools/unix/lzsa/lzsa |
|||
Tools/unix/uz80as/uz80as |
|||
Tools/unix/zx/config.h |
|||
Tools/unix/zx/zx |
|||
|
|||
!Source/Apps/FAT/FAT.COM |
|||
!Source/BPBIOS/bpbuild.com |
|||
!Source/BPBIOS/movp112.com |
|||
!Source/BPBIOS/Z34RCP11/cledinst.com |
|||
!Source/BPBIOS/Z34RCP11/cledsave.com |
|||
!Source/Fonts |
|||
!Source/Images/**/*.[Cc][Oo][Mm] |
|||
!Source/RomDsk/**/*.[Cc][Oo][Mm] |
|||
!Source/UBIOS/FSFAT.BIN |
|||
!Source/UBIOS/UNA-BIOS.BIN |
|||
!Source/ZCCP/*.[Cc][Oo][Mm] |
|||
!Source/ZCPR-DJ/*.[Cc][Oo][Mm] |
|||
!Source/ZPM3/*.[Cc][Oo][Mm] |
|||
!Source/ZSDOS/*.[Cc][Oo][Mm] |
|||
!Tools/cpm/bin |
|||
!Tools/unix/zx |
|||
!Tools/zx |
|||
|
|||
Source/ZPM3/gencpm.com |
|||
Source/ZPM3/startzpm.com |
|||
Source/ZPM3/zccp.com |
|||
Source/ZPM3/zpmldr.com |
|||
@ -0,0 +1,10 @@ |
|||
TOOLS = ../../Tools |
|||
MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.com Tunes/*) |
|||
|
|||
include $(TOOLS)/Makefile.inc |
|||
|
|||
all:: |
|||
mkdir -p Tunes |
|||
|
|||
clobber:: |
|||
rm -f *.bin *.com *.img *.rom *.pdf *.log *.eeprom *.COM *.BIN Tunes/*.mym Tunes/*.pt? |
|||
@ -1,5 +0,0 @@ |
|||
@echo off |
|||
setlocal |
|||
|
|||
if exist *.pt? del *.pt? |
|||
if exist *.mym del *.mym |
|||
@ -0,0 +1,8 @@ |
|||
TOOLS = ../Tools |
|||
MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.img *.rom *.com *.eeprom) |
|||
SUBDIRS = Apps |
|||
|
|||
include $(TOOLS)/Makefile.inc |
|||
|
|||
clobber:: |
|||
rm -f *.bin *.com *.img *.rom *.pdf *.log *.eeprom |
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,146 +0,0 @@ |
|||
NASCOM 2 BASIC (C) 1978 MICROSOFT AS IMPLEMENTED FOR RETROBREWCOMPUTERS |
|||
|
|||
FUNCTIONS: |
|||
|
|||
SGN |
|||
INT |
|||
ABS |
|||
USR |
|||
FRE |
|||
INP |
|||
POS |
|||
SQR |
|||
RND |
|||
LOG |
|||
EXP |
|||
COS |
|||
SIN |
|||
TAN |
|||
ATN |
|||
PEEK |
|||
DEEK |
|||
POINT |
|||
LEN |
|||
STR |
|||
VAL |
|||
ASC |
|||
CHR$ |
|||
HEX$ |
|||
BIN$ |
|||
LEFT$ |
|||
RIGHT$ |
|||
MID$ |
|||
|
|||
RESERVED WORDS: |
|||
|
|||
END |
|||
FOR |
|||
NEXT |
|||
DATA |
|||
INPUT |
|||
DIM |
|||
READ |
|||
LET |
|||
GOTO |
|||
RUN |
|||
IF |
|||
RESTORE |
|||
GOSUB |
|||
RETURN |
|||
REM |
|||
STOP |
|||
OUT |
|||
ON |
|||
NULL |
|||
WAIT |
|||
DEF |
|||
POKE |
|||
DOKE |
|||
LINES |
|||
CLS |
|||
WIDTH |
|||
BYE |
|||
SET |
|||
RESET |
|||
PRINT |
|||
CONT |
|||
LIST |
|||
CLEAR |
|||
PLAY |
|||
REM |
|||
NEW |
|||
PRINT |
|||
TAB |
|||
TO |
|||
FN |
|||
SPC |
|||
THEN |
|||
NOT |
|||
STEP |
|||
? |
|||
|
|||
OPERATORS: |
|||
|
|||
+ PLUS |
|||
- MINUS |
|||
* MULTIPLY |
|||
/ DIVIDE |
|||
AND LOGICAL AND |
|||
OR LOGICAL OR |
|||
> GREATER THAN |
|||
= EQUALS |
|||
< LESS THAN |
|||
^ POWER |
|||
|
|||
EXPRESSION PRECEDENCE: |
|||
|
|||
() EXPRESSIONS IN () |
|||
^ POWER |
|||
- NEGATION |
|||
* / MULTIPLICATION AND DIVISION |
|||
+ - ADDITION AND SUBTRACTION |
|||
= EQUALS |
|||
<> NOT EQUAL |
|||
< LESS THAN |
|||
> GREATER THAN |
|||
<= =< LESS THAN OR EQUAL TO |
|||
>= => GREATER THAN OR EQUAL TO |
|||
NOT LOGICAL, BITWISE NEGATION |
|||
AND LOGICAL, BITWISE AND |
|||
OR LOGICAL, BITWISE OR |
|||
|
|||
VARIABLES: |
|||
|
|||
NO LENGTH LIMIT BUT ONLY FIRST TWO CHARACTERS ARE SIGNIFICANT. |
|||
CANNOT HAVE THE SAME NAME AS RESERVED WORDS. |
|||
MAY BE AN ARRAY. |
|||
|
|||
ERROR CODE: |
|||
|
|||
NF NEXT without FOR |
|||
SN Syntax error |
|||
RG RETURN without GOSUB |
|||
OD Out of DATA |
|||
FC Illegal function call |
|||
OV Overflow error |
|||
OM Out of memory |
|||
UL Undefined line |
|||
BS Bad subscript |
|||
DD Re-DIMensioned array |
|||
/0 Division by zero |
|||
ID Illegal direct |
|||
TM Type mis-match |
|||
OS Out of string space |
|||
LS String too long |
|||
ST String formula too complex |
|||
CN Can't CONTinue |
|||
UF Undefined FN function |
|||
MO Missing operand |
|||
HX HEX error |
|||
BN BIN error |
|||
|
|||
LINE EDITING COMMANDS: |
|||
|
|||
@ KILL CURRENT LINE |
|||
_ NONDESTRUCTIVE DELETE LAST CHARACTER |
|||
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,19 @@ |
|||
all: |
|||
cd Tools/unix ; make |
|||
cd Source ; make |
|||
cd Source/Images ; make |
|||
|
|||
clean: |
|||
cd Tools/unix ; make clean |
|||
cd Source ; make clean |
|||
cd Binary ; make clean |
|||
|
|||
clobber: |
|||
cd Tools/unix ; make clobber |
|||
cd Source ; make clobber |
|||
cd Binary ; make clobber |
|||
rm -f typescript |
|||
|
|||
diff: |
|||
cd Source ; make diff |
|||
|
|||
@ -0,0 +1,49 @@ |
|||
this tree now contains makefiles and tools to build on Linux and MacosX |
|||
Linux is rather more thoroughly tested compared to os-x. |
|||
|
|||
to get here, TASM and the propeller generation tools needed to be replaced, |
|||
and since the unix filesystem is usually case-sensitive, and CP/M and windows |
|||
are not, the cpm tools were made case-insensitive. |
|||
|
|||
TASM was replaced with uz80as, which implements a subset of TASM and fixes some |
|||
bugs. however, I needed to add some functionality to make it build the sources |
|||
as they exist in this tree. in particular, one thing to be very careful of is |
|||
that TASM is not entirely consistent with respect to the .DS directive. |
|||
it's usually a bad idea to mix .DS, .FILL, .DB with .ORG. |
|||
.DS n is best thought of as .ORG $ + n |
|||
.ORG changes the memory pointer, but does not change the file output point. |
|||
it works a lot more like M80, SLR* .phase |
|||
|
|||
it assumes that you have some standard system tools and libraries installed |
|||
specifically: gcc, gnu make, libncurses |
|||
|
|||
to build: |
|||
cd to the top directory and type make. |
|||
|
|||
heavy use is made of make's include facility and pattern rules. |
|||
the master rule set is in Tools/Makefile.inc. changes here will affect |
|||
almost every Makefile, and where exceptions are needed, the overrides are |
|||
applied in the lower Makefiles. |
|||
|
|||
these tools can run a windows-linux regression test, where all the binaries are |
|||
compared to a baseline windows build. |
|||
|
|||
Credit: |
|||
|
|||
uz80as was written by Jorge Giner Cordero, jorge.giner@hotmail.com, |
|||
and the original source can be found at https://github.com/jorgicor/uz80as |
|||
|
|||
the propeller tools use bstc and openspin, parallax tools from |
|||
http://www.fnarfbargle.com/bst.html https://github.com/parallaxinc/OpenSpin |
|||
note that bst is not open source or even currently maintained, so I could |
|||
not generate a version for 64 bit osx. |
|||
|
|||
cpmtools were the most current I could find, and it has been hacked to do |
|||
case-insensitivity. these are not marked, and are not extensive. |
|||
|
|||
zx is from distributed version, and also has local hacks for case insensitivity. |
|||
both zx and cpmtools ship with an overly complicated makefile generation system |
|||
and this is ignored. |
|||
|
|||
this whole linux build framework is the work of Curt Mayer, curt@zen-room.org. |
|||
use it for whatever you like; this is not my day job. |
|||
@ -0,0 +1,6 @@ |
|||
OBJECTS = FAT.COM |
|||
NODELETE = FAT.COM |
|||
DEST = ../../../Binary/Apps |
|||
|
|||
TOOLS=../../../Tools |
|||
include $(TOOLS)/Makefile.inc |
|||
@ -0,0 +1,10 @@ |
|||
OBJECTS = FDU.COM |
|||
DOCS = FDU.TXT |
|||
DEST = ../../../Binary/Apps |
|||
DOCDEST = ../../../Doc |
|||
TOOLS = ../../../Tools |
|||
include $(TOOLS)/Makefile.inc |
|||
|
|||
%.COM: %.asm |
|||
$(TASM) $< $@ |
|||
|
|||
@ -0,0 +1,14 @@ |
|||
OBJECTS = SysGen.com Survey.com \
|
|||
SysCopy.com Assign.com Format.com Talk.com OSLdr.com Mode.com RTC.com \
|
|||
Timer.com IntTest.com |
|||
OTHERS = *.hex *.com |
|||
SUBDIRS = XM FDU FAT Tune |
|||
DEST = ../../Binary/Apps |
|||
TOOLS =../../Tools |
|||
|
|||
include $(TOOLS)/Makefile.inc |
|||
|
|||
USETASM = 1 |
|||
|
|||
Survey.com: USETASM=0 |
|||
|
|||
@ -0,0 +1,12 @@ |
|||
OBJECTS = Tune.com |
|||
DEST = ../../../Binary/Apps |
|||
TOOLS = ../../../Tools |
|||
|
|||
include $(TOOLS)/Makefile.inc |
|||
|
|||
Tune.com: Tune.asm |
|||
$(TASM) Tune.asm Tune.com |
|||
|
|||
all:: |
|||
mkdir -p $(DEST)/Tunes |
|||
cp Tunes/* $(DEST)/Tunes |
|||
@ -0,0 +1,12 @@ |
|||
OBJECTS = xm.com xmuf.com |
|||
DEST = ../../../Binary/Apps |
|||
TOOLS = ../../../Tools |
|||
OTHERS = *.hex |
|||
|
|||
include $(TOOLS)/Makefile.inc |
|||
|
|||
xm.com: xmdm125.hex xmhb.hex |
|||
$(ZXCC) $(CPM)/MLOAD25 XM=xmdm125,xmhb |
|||
|
|||
xmuf.com: xmdm125.hex xmuf.hex |
|||
$(ZXCC) $(CPM)/MLOAD25 XMUF=xmdm125,xmuf |
|||
@ -0,0 +1,15 @@ |
|||
Loader uses CBIOS Disk I/O prior to CBOOT/WBOOT being run. As a |
|||
result, DIOBUF is not properly initialized. At present, it is |
|||
initialized to $7C00 which will work unless the location of the |
|||
physical disk buffer in HBIOS ever changes! |
|||
|
|||
The clock drivers supplied with BPBIOS (LDDS, LDP2D, and LDNZT) |
|||
load into ZSYS user memory. If the user segment is not at the |
|||
same location as the original BPBIOS ($E900), then the clock |
|||
driver will just overlay other code. At present, the N config |
|||
is OK because it does not relocate the user segment, but the T |
|||
config fails because it uses a user segment at $E700. Note that |
|||
this does not affect ZSDOS2 variants because they do not require |
|||
a loadable clock driver. |
|||
|
|||
BPBIOS needs to assign disk units dynamically via discovery of disk type |
|||
@ -0,0 +1,47 @@ |
|||
VERSIONS = \
|
|||
33t 33tbnk \
|
|||
33n 33nbnk \
|
|||
34t 34tbnk \
|
|||
34n 34nbnk \
|
|||
41tbnk 41nbnk |
|||
|
|||
HD0IMG = ../../Binary/hd_bp.img |
|||
IMGFILES = $(foreach ver,$(VERSIONS),bp$(ver).img) |
|||
DISTFILES = *.zex *.rel myterm.z3t |
|||
|
|||
OTHERS = zcpr33n.rel zcpr33t.rel \
|
|||
bpbio-ww.rel bpsys.dat bpsys.bak bpbio-ww.err def-ww.lib *.img |
|||
|
|||
TOOLS = ../../Tools |
|||
|
|||
SUBDIRS = ZCPR33 NZFCP13 Z34RCP11 |
|||
include $(TOOLS)/Makefile.inc |
|||
|
|||
$(HD0IMG): $(IMGFILES) |
|||
if [ -f $(HD0IMG) ] ; then \
|
|||
for f in $(IMGFILES) $(DISTFILES) ; do \
|
|||
$(BINDIR)/cpmrm -f wbw_hd0 $(HD0IMG) 0:$$f ; \
|
|||
done ; \
|
|||
$(CPMCP) -f wbw_hd0 $(HD0IMG) $(IMGFILES) $(DISTFILES) 0: ; \
|
|||
fi |
|||
|
|||
zcpr33n.rel zcpr33t.rel: |
|||
(cd ZCPR33 ; make) |
|||
|
|||
all:: $(HD0IMG) |
|||
|
|||
clobber:: |
|||
@rm -f $(HD0IMG) |
|||
|
|||
%.img: zcpr33n.rel zcpr33t.rel |
|||
$(eval VER := $(subst .img,,$(subst bp,,$@))) |
|||
cp def-ww-z$(VER).lib def-ww.lib |
|||
rm -f bpbio-ww.rel |
|||
$(ZXCC) $(CPM)/ZMAC -BPBIO-WW -/P |
|||
mv bpbio-ww.prn bp$(VER).prn |
|||
cp bp$(VER).dat bpsys.dat |
|||
$(ZXCC) ./bpbuild.com -bpsys.dat 0 < bpbld1.rsp |
|||
cp bpsys.img bpsys.dat |
|||
$(ZXCC) ./bpbuild.com -bpsys.dat 0 < bpbld2.rsp |
|||
mv bpsys.img bp$(VER).img |
|||
|
|||
@ -0,0 +1,11 @@ |
|||
@echo off |
|||
setlocal |
|||
|
|||
set PATH=%PATH%;..\..\..\Tools\zx;..\..\..\Tools\cpmtools; |
|||
|
|||
set ZXBINDIR=../../../tools/cpm/bin/ |
|||
set ZXLIBDIR=../../../tools/cpm/lib/ |
|||
set ZXINCDIR=../../../tools/cpm/include/ |
|||
|
|||
zx Z80ASM -nzfcp13/MF |
|||
rem zx ZMAC -nzfcp13.z80 -/P |
|||
@ -0,0 +1,7 @@ |
|||
@echo off |
|||
setlocal |
|||
|
|||
if exist *.prn del *.prn |
|||
if exist *.lst del *.lst |
|||
if exist *.err del *.err |
|||
if exist *.rel del *.rel |
|||
@ -0,0 +1,5 @@ |
|||
OBJECTS = nzfcp13.rel |
|||
OTHERS = |
|||
TOOLS = ../../../Tools |
|||
|
|||
include $(TOOLS)/Makefile.inc |
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,89 @@ |
|||
Z-Relocatable Flow Control Packages |
|||
11 October 89 by Carson Wilson |
|||
|
|||
The seven pre-compiled Flow Control Packages (FCP's) in this library may be |
|||
loaded directly to Z System with NZ-COM, Z3PLUS, or JetLDR, provided |
|||
sufficient space has been allocated to the FCP segment. The FCP's come in two |
|||
flavors. Files named FCP-nT.ZRL implement extended flow control processing |
|||
when needed using a program named IF.COM at the root of your path, or at |
|||
directory A0 if there is no path. Files named simply FCP-n.ZRL rely |
|||
exclusively on memory-based processing. The "n" in the filename indicates the |
|||
total number of records required by each package. The standard number of |
|||
records for both NZ-COM and Z3PLUS is currently 5, so if you wish to load a |
|||
larger FCP you must reconfigure your system with MKZCM or by editing your .Z3P |
|||
file. For general help with flow control commands, see the file IF.HLP, or |
|||
section 3.2.2 of your NZ-COM or Z3PLUS manual. |
|||
|
|||
While IF.COM allows options not available in memory-resident flow-control |
|||
processing, fully resident versions free the user from the requirement that |
|||
IF.COM be present during flow control processing. Resident processing is also |
|||
somewhat faster due to the need to load IF.COM from disk for each flow control |
|||
command. Finally, the ability to locate and load the transient IF.COM |
|||
requires considerable code space in the resident code itself. Generally, |
|||
IF.COM is best used on fixed-disk systems, while resident processing is more |
|||
suited to floppy-based systems. |
|||
|
|||
The options included in fully resident versions were selected somewhat |
|||
differently than those of those using IF.COM. Criteria, in order of |
|||
precedence, were as follows: |
|||
|
|||
Transient Versions Resident Versions |
|||
------------------ ----------------- |
|||
1. Is the feature available in 1. How useful is the feature? |
|||
IF.COM? 2. How much memory does the feature |
|||
2. Does the feature require disk require? |
|||
access? |
|||
3. How useful is the feature? |
|||
4. How much memory does the feature |
|||
require? |
|||
|
|||
The tables below summarize the size and features of each flavor of FCP. Each |
|||
package includes only the features appearing above it. For example, |
|||
FCP-5T.ZRL (the default FCP for both NZ-COM and Z3PLUS) contains only ZIF, |
|||
IFQ, OR, AND, negation, ERROR, and NULL. Size is expressed as records plus |
|||
remaining bytes required by the FCP. As FCP space is allocated in record |
|||
units only, I have attempted to include only combinations which leave as |
|||
little remaining space possible. Sizes without corresponding filenames are |
|||
included for reference purposes only. |
|||
|
|||
FEATURES OF TRANSIENT (IF.COM) FCPS SIZE(RECS+BYTES) FILE NAME |
|||
----------------------------------------------------------------------------- |
|||
ZIF - unconditionally clear IF states? |
|||
IFQ - show current if status? 3+124 FCP-4T.ZRL |
|||
OR - set state at current level? 4+25 |
|||
AND - reset state at current level? |
|||
Allow negation of conditions? |
|||
ERROR - test program error flag? |
|||
NULL - test for no file name? 4+84 FCP-5T.ZRL |
|||
REG - test register values? 5+16 |
|||
AMBIG - test for "?" in file spec? |
|||
COMPR - test for compressed filespec? |
|||
= - test tokens for equality? 5+92 FCP-6T.ZRL |
|||
INPUT - test user input? 6+25 |
|||
Allow "IF T" and "IF F" forms? |
|||
WHEEL - test wheel byte? |
|||
TCAP - test whether TCAP loaded? |
|||
EXIST - test for file existence? 6+106 FCP-7T.ZRL |
|||
EMPTY - test files for contents? 7+10 |
|||
|
|||
|
|||
FEATURES OF RESIDENT FCPS SIZE(RECS+BYTES) FILE NAME |
|||
----------------------------------------------------------------------------- |
|||
ZIF - unconditionally clear IF states? |
|||
IFQ - show current if status? |
|||
OR - set state at current level? |
|||
AND - reset state at current level? |
|||
Allow negation of conditions? |
|||
NULL - test for no file name? |
|||
INPUT - test user input? |
|||
= - test tokens for equality? |
|||
ERROR - test program error flag? |
|||
Allow "IF T" and "IF F" forms? |
|||
EXIST - test for file existence? 3+123 FCP-4.ZRL |
|||
AMBIG - test for "?" in file spec? |
|||
COMPR - test for compressed filespec? |
|||
REG - test register values? |
|||
WHEEL - test wheel byte? |
|||
TCAP - test whether TCAP loaded? 4+113 FCP-5.ZRL |
|||
EMPTY - test files for contents? 5+17 FCP-6.ZRL |
|||
|
|||
@ -0,0 +1,161 @@ |
|||
; Module: NZFCP.LIB |
|||
; Author: Carson Wilson |
|||
; Version: 1.3 |
|||
; Date: 9 Oct 89 |
|||
; Changes: Prompts for options if SLR true. |
|||
|
|||
; This module is a set of configuration options for the flow control package |
|||
; code in NZFCP.Z80. The options are not fully commented here; see |
|||
; "ZCPR3, The Manual" for a detailed discussion of most of them. |
|||
|
|||
|
|||
; * * * * * * N O T I C E * * * * * * |
|||
; |
|||
; The main code in Z33FCP.Z80 has been written with relative jump instructions |
|||
; for minimum code size. If the options below are changed, then some of the |
|||
; jumps may become out-of-range. You will then have to change the code based |
|||
; on the error messages you get from your assembler. I cannot think of any |
|||
; way to handle the jumps automatically (macros fail because the jump distances |
|||
; cannot be resolved fully even in two passes of the assembler). If you want |
|||
; to play things really safe, you can do a global search and replace to change |
|||
; all occurrences of the JR instruction to JP (but note that this change is |
|||
; irreversible). I prefer to live with this nuisance so that I can get the |
|||
; most out of the code. |
|||
; |
|||
; Another possible way to clear up a problem with a relative jump that is out |
|||
; of range is to take the block of code with the labels IFCTRUE and IFCFALSE |
|||
; and move it up or down in the code. It is placed somewhere in the middle of |
|||
; the resident options, so that the options can reach those entry points with |
|||
; a relative jump. You should try to place that code near the middle of the |
|||
; options which you have enabled. |
|||
; |
|||
; Jay Sage (May 17, 1987) |
|||
|
|||
;============================================================================= |
|||
; |
|||
; M A C R O S |
|||
; |
|||
;============================================================================= |
|||
|
|||
; SLR assemblers allow selection of options during assembly. |
|||
|
|||
SLR equ no |
|||
|
|||
if SLR |
|||
|
|||
y equ yes |
|||
n equ no |
|||
|
|||
select macro option default comment |
|||
.accept comment,option ; Prompt user for selection |
|||
endm |
|||
|
|||
.printx |
|||
.printx Answer "Y" to include, "N" to exclude commands: |
|||
.printx |
|||
|
|||
else |
|||
|
|||
select macro option default comment |
|||
option equ default ; Use selections from file |
|||
endm |
|||
endif ; SLR |
|||
|
|||
; ------------------------------------------------------------------------- |
|||
|
|||
; Command names |
|||
|
|||
; The CTABLE macro, which constructs the command dispatch table, includes a |
|||
; line for each command, the first parameter of which is the name of the |
|||
; command. These names may be changed if you wish. But make sure that you |
|||
; do not use a name that is longer than the maximum allowed length. If you |
|||
; do, the name will be truncated and a nonfatal error will occur during |
|||
; assembly. DO NOT CHANGE ANY PARAMETER OTHER THAN THE COMMAND NAME. Lower |
|||
; case letters will be converted to upper case. The macro COMMAND is defined |
|||
; in Z34MAC.LIB. |
|||
|
|||
cmdsize equ 4 ; Maximum length of command names |
|||
|
|||
; Command table name, enable, wheel, jump_addr |
|||
; [ DO NOT CHANGE THESE PARAMETERS ] |
|||
ctable macro |
|||
ifcmd: command if, yes, no, ifstart |
|||
command and, andopt, no, andstart |
|||
command or, oropt, no, orstart |
|||
command else, yes, no, ifelse |
|||
command fi, yes, no, ifend |
|||
command ifq, ifqopt, no, ifstat0 |
|||
command xif, yes, no, ifexit |
|||
command zif, zifopt, no, ifzero |
|||
endm |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; General configuration options |
|||
|
|||
NOISE equ no ; Don't display if-state messages |
|||
|
|||
select COMIF no 'Enable transient IF processing? ' |
|||
|
|||
PATHROOT equ yes ; Find transient IF in root of path |
|||
|
|||
ifdrv equ 'A' ; Drive to use if PATHROOT is off or |
|||
; ..if the path is empty |
|||
ifusr equ 0 ; User to use if PATHROOT is off or |
|||
; ..if the path is empty |
|||
|
|||
; --------------------------------------------------------------------- |
|||
|
|||
; Command inclusion options |
|||
|
|||
select ZIFOPT yes 'ZIF - unconditionally clear IF states? ' |
|||
select IFQOPT yes 'IFQ - show current if status? ' |
|||
select OROPT yes 'OR - set state at current level? ' |
|||
select ANDOPT yes 'AND - reset state at current level? ' |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; If Condition Options |
|||
|
|||
if COMIF ; Different precedence if transient IF available. |
|||
select IFONEG yes 'Allow negation of conditions? ' |
|||
negchar equ '~' ; Character to use if negation allowed |
|||
select IFOERROR yes 'ERROR - test program error flag? ' |
|||
select IFONULL yes 'NULL - test for no file name? ' |
|||
select IFOREG yes 'REG - test register values? ' |
|||
select IFAMBIG yes 'AMBIG - test for "?" in file spec? ' |
|||
select IFCOMPR yes 'COMPR - test for compressed filespec? ' |
|||
select IFOEQ yes '= - test tokens for equality? ' |
|||
select IFOINPUT yes 'INPUT - test user input? ' |
|||
XEQOPT equ yes ; Test only first token for equal sign |
|||
select IFOTRUE yes 'Allow "IF T" and "IF F" forms? ' |
|||
select IFOWHEEL no 'WHEEL - test wheel byte? ' |
|||
select IFOTCAP no 'TCAP - test whether TCAP loaded? ' |
|||
select IFOEXIST yes 'EXIST - test for file existence? ' |
|||
select IFOEMPTY yes 'EMPTY - test files for contents? ' |
|||
else |
|||
select IFONEG yes 'Allow negation of conditions? ' |
|||
negchar equ '~' ; Character to use if negation allowed |
|||
select IFONULL yes 'NULL - test for no file name? ' |
|||
select IFOINPUT yes 'INPUT - test user input? ' |
|||
select IFOEQ yes '= - test tokens for equality? ' |
|||
XEQOPT equ yes ; Test only first token for equal sign |
|||
select IFOERROR yes 'ERROR - test program error flag? ' |
|||
select IFOTRUE yes 'Allow "IF T" and "IF F" forms? ' |
|||
select IFOEXIST yes 'EXIST - test for file existence? ' |
|||
select IFAMBIG no 'AMBIG - test for "?" in file spec? ' |
|||
select IFCOMPR no 'COMPR - test for compressed filespec? ' |
|||
select IFOREG no 'REG - test register values? ' |
|||
select IFOWHEEL no 'WHEEL - test wheel byte? ' |
|||
select IFOTCAP no 'TCAP - test whether TCAP loaded? ' |
|||
select IFOEMPTY no 'EMPTY - test files for contents? ' |
|||
endif ; COMIF |
|||
|
|||
; Miscellaneous configuration information |
|||
|
|||
curusr equ z3msg+2eh ; Current logged user address |
|||
curdr equ z3msg+2fh ; Current logged drive address |
|||
curint equ '$' ; Path symbol for current drive/user |
|||
|
|||
; END of NZFCP.LIB |
|||
|
|||
@ -0,0 +1,161 @@ |
|||
; Module: NZFCP.LIB |
|||
; Author: Carson Wilson |
|||
; Version: 1.3 |
|||
; Date: 9 Oct 89 |
|||
; Changes: Prompts for options if SLR true. |
|||
|
|||
; This module is a set of configuration options for the flow control package |
|||
; code in NZFCP.Z80. The options are not fully commented here; see |
|||
; "ZCPR3, The Manual" for a detailed discussion of most of them. |
|||
|
|||
|
|||
; * * * * * * N O T I C E * * * * * * |
|||
; |
|||
; The main code in Z33FCP.Z80 has been written with relative jump instructions |
|||
; for minimum code size. If the options below are changed, then some of the |
|||
; jumps may become out-of-range. You will then have to change the code based |
|||
; on the error messages you get from your assembler. I cannot think of any |
|||
; way to handle the jumps automatically (macros fail because the jump distances |
|||
; cannot be resolved fully even in two passes of the assembler). If you want |
|||
; to play things really safe, you can do a global search and replace to change |
|||
; all occurrences of the JR instruction to JP (but note that this change is |
|||
; irreversible). I prefer to live with this nuisance so that I can get the |
|||
; most out of the code. |
|||
; |
|||
; Another possible way to clear up a problem with a relative jump that is out |
|||
; of range is to take the block of code with the labels IFCTRUE and IFCFALSE |
|||
; and move it up or down in the code. It is placed somewhere in the middle of |
|||
; the resident options, so that the options can reach those entry points with |
|||
; a relative jump. You should try to place that code near the middle of the |
|||
; options which you have enabled. |
|||
; |
|||
; Jay Sage (May 17, 1987) |
|||
|
|||
;============================================================================= |
|||
; |
|||
; M A C R O S |
|||
; |
|||
;============================================================================= |
|||
|
|||
; SLR assemblers allow selection of options during assembly. |
|||
|
|||
SLR equ yes |
|||
|
|||
if SLR |
|||
|
|||
y equ yes |
|||
n equ no |
|||
|
|||
select macro option default comment |
|||
.accept comment,option ; Prompt user for selection |
|||
endm |
|||
|
|||
.printx |
|||
.printx Answer "Y" to include, "N" to exclude commands: |
|||
.printx |
|||
|
|||
else |
|||
|
|||
select macro option default comment |
|||
option equ default ; Use selections from file |
|||
endm |
|||
endif ; SLR |
|||
|
|||
; ------------------------------------------------------------------------- |
|||
|
|||
; Command names |
|||
|
|||
; The CTABLE macro, which constructs the command dispatch table, includes a |
|||
; line for each command, the first parameter of which is the name of the |
|||
; command. These names may be changed if you wish. But make sure that you |
|||
; do not use a name that is longer than the maximum allowed length. If you |
|||
; do, the name will be truncated and a nonfatal error will occur during |
|||
; assembly. DO NOT CHANGE ANY PARAMETER OTHER THAN THE COMMAND NAME. Lower |
|||
; case letters will be converted to upper case. The macro COMMAND is defined |
|||
; in Z34MAC.LIB. |
|||
|
|||
cmdsize equ 4 ; Maximum length of command names |
|||
|
|||
; Command table name, enable, wheel, jump_addr |
|||
; [ DO NOT CHANGE THESE PARAMETERS ] |
|||
ctable macro |
|||
ifcmd: command if, yes, no, ifstart |
|||
command and, andopt, no, andstart |
|||
command or, oropt, no, orstart |
|||
command else, yes, no, ifelse |
|||
command fi, yes, no, ifend |
|||
command ifq, ifqopt, no, ifstat0 |
|||
command xif, yes, no, ifexit |
|||
command zif, zifopt, no, ifzero |
|||
endm |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; General configuration options |
|||
|
|||
NOISE equ no ; Don't display if-state messages |
|||
|
|||
select COMIF no 'Enable transient IF processing? ' |
|||
|
|||
PATHROOT equ yes ; Find transient IF in root of path |
|||
|
|||
ifdrv equ 'A' ; Drive to use if PATHROOT is off or |
|||
; ..if the path is empty |
|||
ifusr equ 0 ; User to use if PATHROOT is off or |
|||
; ..if the path is empty |
|||
|
|||
; --------------------------------------------------------------------- |
|||
|
|||
; Command inclusion options |
|||
|
|||
select ZIFOPT yes 'ZIF - unconditionally clear IF states? ' |
|||
select IFQOPT yes 'IFQ - show current if status? ' |
|||
select OROPT yes 'OR - set state at current level? ' |
|||
select ANDOPT yes 'AND - reset state at current level? ' |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; If Condition Options |
|||
|
|||
if COMIF ; Different precedence if transient IF available. |
|||
select IFONEG yes 'Allow negation of conditions? ' |
|||
negchar equ '~' ; Character to use if negation allowed |
|||
select IFOERROR yes 'ERROR - test program error flag? ' |
|||
select IFONULL yes 'NULL - test for no file name? ' |
|||
select IFOREG yes 'REG - test register values? ' |
|||
select IFAMBIG yes 'AMBIG - test for "?" in file spec? ' |
|||
select IFCOMPR yes 'COMPR - test for compressed filespec? ' |
|||
select IFOEQ yes '= - test tokens for equality? ' |
|||
select IFOINPUT yes 'INPUT - test user input? ' |
|||
XEQOPT equ yes ; Test only first token for equal sign |
|||
select IFOTRUE yes 'Allow "IF T" and "IF F" forms? ' |
|||
select IFOWHEEL no 'WHEEL - test wheel byte? ' |
|||
select IFOTCAP no 'TCAP - test whether TCAP loaded? ' |
|||
select IFOEXIST yes 'EXIST - test for file existence? ' |
|||
select IFOEMPTY yes 'EMPTY - test files for contents? ' |
|||
else |
|||
select IFONEG yes 'Allow negation of conditions? ' |
|||
negchar equ '~' ; Character to use if negation allowed |
|||
select IFONULL yes 'NULL - test for no file name? ' |
|||
select IFOINPUT yes 'INPUT - test user input? ' |
|||
select IFOEQ yes '= - test tokens for equality? ' |
|||
XEQOPT equ yes ; Test only first token for equal sign |
|||
select IFOERROR yes 'ERROR - test program error flag? ' |
|||
select IFOTRUE yes 'Allow "IF T" and "IF F" forms? ' |
|||
select IFOEXIST yes 'EXIST - test for file existence? ' |
|||
select IFAMBIG yes 'AMBIG - test for "?" in file spec? ' |
|||
select IFCOMPR yes 'COMPR - test for compressed filespec? ' |
|||
select IFOREG yes 'REG - test register values? ' |
|||
select IFOWHEEL no 'WHEEL - test wheel byte? ' |
|||
select IFOTCAP no 'TCAP - test whether TCAP loaded? ' |
|||
select IFOEMPTY yes 'EMPTY - test files for contents? ' |
|||
endif ; COMIF |
|||
|
|||
; Miscellaneous configuration information |
|||
|
|||
curusr equ z3msg+2eh ; Current logged user address |
|||
curdr equ z3msg+2fh ; Current logged drive address |
|||
curint equ '$' ; Path symbol for current drive/user |
|||
|
|||
; END of NZFCP.LIB |
|||
|
|||
@ -0,0 +1,9 @@ |
|||
Source code plus the compiled Flow Control Packages (FCP's) |
|||
distributed in FCP.LBR as part of the Z System. The precompiled |
|||
modules are in Z-Relocatable form, and must be loaded with JetLDR, |
|||
NZCOM, or Z3PLUS. Now features interactive assembly of code |
|||
a-la-Z34RCP11 under the SLR or ZMAC assemblers. Macro now reports |
|||
length of resulting FCP in records and bytes following assembly. |
|||
JetLDR signons also automatically generated. 9/15/90 Carson Wilson |
|||
|
|||
|
|||
File diff suppressed because it is too large
@ -0,0 +1,105 @@ |
|||
; |
|||
; Library: Z34CMN.LIB |
|||
; Author: Carson Wilson <crw> |
|||
; Version: 1.2 |
|||
; Date: 16 June 1988 |
|||
; Changes: Renamed CRT0 to LINS for NZCOM compatibility. |
|||
; Added CUSR " " " |
|||
|
|||
; Author: Carson Wilson <crw> |
|||
; Version: 1.1 |
|||
; Date: 12 June 1988 |
|||
; Changes: Added CDRV for various Z34RCP commands. |
|||
; Added CRT0 for Z34RCP TYPE command. |
|||
; Added Z3TCAP and CLRSCR for Z34RCP CLS command. |
|||
; Added QUIET for ZCPR34 time in prompt. |
|||
; Added RSDMSG for ZCPR34 time in prompt. |
|||
|
|||
; Library: Z34CMN.LIB |
|||
; Author: Joe Wright |
|||
; Date: 23 March 1988 |
|||
|
|||
; 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+0ch ; Address of RCP |
|||
rcps equ yes ; Used as existence test, not size |
|||
|
|||
fcp equ z3env+12h ; Address of FCB |
|||
fcps equ yes ; Used as existence test, not size |
|||
|
|||
z3ndir equ z3env+15h ; Address of NDR |
|||
z3ndirs equ yes ; Used as existence test, not size |
|||
|
|||
quiet equ z3env+28h ; Quiet flag address <crw> |
|||
|
|||
z3whl equ z3env+29h ; Wheel byte address |
|||
z3whls equ yes ; There is a wheel |
|||
|
|||
lins equ z3env+33h ; CRT text lines address <crw> |
|||
|
|||
ccp equ z3env+3fh ; CCP entry |
|||
ccps equ z3env+41h ; Size |
|||
|
|||
dos equ z3env+42h ; DOS entry (+6) |
|||
doss equ z3env+44h ; Size |
|||
|
|||
bio equ z3env+45h ; BIO entry |
|||
|
|||
z3tcap equ z3env+80h ; TCAP address <crw> |
|||
|
|||
clrscr equ z3env+97h ; Clear screen string address <crw> |
|||
|
|||
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 |
|||
|
|||
cusr equ z3msg+2eh ; Current user |
|||
cdrv equ z3msg+2fh ; Current drive <crw> |
|||
|
|||
rsdmsg equ z3msg+3ah ; Reserved bytes <crw> |
|||
|
|||
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 |
|||
|
|||
|
|||
@ -0,0 +1,122 @@ |
|||
|
|||
; Z33MAC.LIB : Macros for use with ZCPR33 |
|||
|
|||
; General purpose macros |
|||
|
|||
putreg macro |
|||
push hl ; Save registers in order |
|||
push de |
|||
push bc |
|||
endm |
|||
|
|||
getreg macro |
|||
pop bc ; Restore registers in order |
|||
pop de |
|||
pop hl |
|||
endm |
|||
|
|||
swap macro |
|||
rrca ; Exchange nibbles |
|||
rrca |
|||
rrca |
|||
rrca |
|||
endm |
|||
|
|||
;---------------------------------------- |
|||
|
|||
; Macro for forming option bytes |
|||
|
|||
; This macro generates a byte with bits corresponding to up to 8 option |
|||
; flags. The bits are filled in the order of the parameters and are right |
|||
; justified in the byte. |
|||
|
|||
optflag macro f1,f2,f3,f4,f5,f6,f7,f8 |
|||
|
|||
flag defl 0 ;; initial value |
|||
|
|||
irp temp,<f1,f2,f3,f4,f5,f6,f7,f8> |
|||
|
|||
if not nul temp |
|||
flag defl flag shl 1 |
|||
if temp |
|||
flag defl flag or 1 |
|||
endif ;;temp |
|||
endif ;;not nul temp |
|||
|
|||
endm ;; irp |
|||
|
|||
defb low flag |
|||
|
|||
endm ;; optflag |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; Command table entry definition macro |
|||
|
|||
; Macro to form an entry for one command in the table. The first parameter is |
|||
; the name to be used for the command (no quotes); the second parameter is the |
|||
; flag that indicates whether or not the command is to be enabled; the third |
|||
; parameter is the wheel control flag; and the last parameter is the jump |
|||
; address to the code that carries out the command. The command names are |
|||
; automatically padded out to the correct length (they will be truncated and |
|||
; an error message will result if a command name is too long). The characters |
|||
; in the command name are automatically converted to upper case. |
|||
|
|||
command macro cmdname,enableflag,wheelflag,address |
|||
|
|||
if enableflag ;; Generate command only if enabled |
|||
|
|||
whlmask defl wheelflag ;; Initialize variables |
|||
count defl cmdsize ;; Initialize to size of each command name |
|||
|
|||
irpc char,cmdname ;; Repeat over letters in command name |
|||
|
|||
count defl count - 1 ;; Count down characters in name |
|||
|
|||
if [ count lt cmdsize ] |
|||
|
|||
;; If character is lower case, convert to upper case |
|||
|
|||
if [ '&char' ge 'a' ] and [ '&char' le 'z' ] |
|||
|
|||
if whlmask |
|||
defb [ '&char' and 5fh ] + 80h |
|||
else ;;not whlmask |
|||
defb [ '&char' and 5fh ] |
|||
endif ;;whlmask |
|||
|
|||
else ;;not lower case |
|||
|
|||
if whlmask |
|||
defb '&char' + 80h ;; If controlled by wheel, set high bit |
|||
else ;;not whlmask |
|||
defb '&char' ;; If not restricted, leave high bit clear |
|||
endif ;;whlmask |
|||
|
|||
endif ;;lower case |
|||
|
|||
endif ;;[ count lt cmdsize ] |
|||
|
|||
whlmask defl false ;; Turn off high-bit setting after first char |
|||
|
|||
endm ;irpc |
|||
|
|||
;; Pad command name with blanks |
|||
|
|||
if [ count gt cmdsize ] ;; If we underflowed |
|||
*** Command name "&cmdname" is too long / truncated *** |
|||
else |
|||
rept count |
|||
defb ' ' |
|||
endm |
|||
endif ;[ count gt cmdsize ] |
|||
|
|||
dw address ;; Dispatch address for command |
|||
|
|||
endif ;enable |
|||
|
|||
endm ;command |
|||
|
|||
; End Z33MAC.LIB |
|||
|
|||
|
|||
Binary file not shown.
@ -0,0 +1,11 @@ |
|||
@echo off |
|||
setlocal |
|||
|
|||
set PATH=%PATH%;..\..\..\Tools\zx;..\..\..\Tools\cpmtools; |
|||
|
|||
set ZXBINDIR=../../../tools/cpm/bin/ |
|||
set ZXLIBDIR=../../../tools/cpm/lib/ |
|||
set ZXINCDIR=../../../tools/cpm/include/ |
|||
|
|||
rem zx Z80ASM -z34rcp11/MF |
|||
zx ZMAC -z34rcp11.z80 -/P |
|||
@ -0,0 +1,7 @@ |
|||
@echo off |
|||
setlocal |
|||
|
|||
if exist *.prn del *.prn |
|||
if exist *.lst del *.lst |
|||
if exist *.err del *.err |
|||
if exist *.rel del *.rel |
|||
@ -0,0 +1,5 @@ |
|||
OBJECTS = z34rcp11.rel |
|||
TOOLS = ../../../Tools |
|||
DEST = |
|||
|
|||
include $(TOOLS)/Makefile.inc |
|||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
@ -0,0 +1,33 @@ |
|||
page |
|||
; |
|||
; Library: RCPBASE for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
|
|||
; Comments: Use instead of Z34CMN.LIB to produce absolute RCP's. |
|||
; An absolute RCP will only load to one address, and requires |
|||
; that the message buffer and the environment descriptor |
|||
; remain constant within the environment. |
|||
|
|||
; You must modify the next three addresses to match your system: |
|||
|
|||
z3rcp equ 0ee80h ; RCP address |
|||
z3env equ 0fd00h ; Environment descriptor address |
|||
z3msg equ 0fe30h ; Message buffer address |
|||
|
|||
; The rest of this file should not be changed. |
|||
|
|||
fcp equ z3env+18 ; Address of FCB |
|||
quiet equ z3env+28h ; Quiet flag address |
|||
z3whl equ z3env+29h ; Wheel byte address |
|||
crt0 equ z3env+33h ; CRT 0 text lines address |
|||
ccp equ z3env+63 ; CCP entry |
|||
z3tcap equ z3env+80h ; TCAP address |
|||
clrscr equ z3env+97h ; Clear screen string address |
|||
|
|||
cdrv equ z3msg+2fh ; Current drive |
|||
|
|||
; End RCPBASE.LIB |
|||
|
|||
|
|||
@ -0,0 +1,62 @@ |
|||
RCPCLED - Command Line Editing and History Shell for Z34RCP11 |
|||
Author: Rob Friefeld |
|||
Version: 1.3 |
|||
Date: October 2, 1989 |
|||
|
|||
Command: CLED |
|||
Syntax: CLED [/] |
|||
If "/", run once only (e.g. from a shell such as ZFILER) |
|||
|
|||
Features: |
|||
|
|||
CLED is a memory resident command line editor which extends the minimal |
|||
features of the CCP to include cursor movement, insert/delete, and |
|||
record/recall of command lines. Though part of the RCP, CLED is also a ZCPR |
|||
"shell" which automatically reinvokes itself following any ZCPR command. It |
|||
thus uses up one shell stack entry (normally there are four, which is plenty). |
|||
If a ZS/ZDDOS, DateStamper, or Z3PLUS clock is implemented, the command prompt |
|||
shows the system time. To disable time display under Z3PLUS (if you have no |
|||
clock), set the system date to 01/01/78. |
|||
|
|||
The default control key set includes these important commands: |
|||
|
|||
CR - execute command line |
|||
ESC Q - pop the shell |
|||
ESC S - toggle recording on/off (prompt shows >/>> to indicate state) |
|||
^W - recall command lines from history stack |
|||
^E - recall history in reverse direction |
|||
|
|||
|
|||
Installation: |
|||
|
|||
The installation program, CLEDINST, allows you to set up the editor |
|||
to your preference. The RCP can be installed directly in memory or in a disk |
|||
file -- RCPxxx.ZRL or a system configuration saved with SNAP or NZBLITZ. |
|||
CLEDINST also serves as a "help" utility by displaying the current command |
|||
bindings. Type "CLEDINST //" for help with CLEDINST.COM. |
|||
|
|||
|
|||
History Tool: |
|||
|
|||
CLEDSAVE writes the contents of the history stack to a text file on disk. |
|||
The file can be reloaded later (CLEDSAVE <file> L), or composed in advance |
|||
with a text editor, then loaded. If the file is too large for the history |
|||
stack, as many commmand lines as fit are loaded. |
|||
|
|||
CLEDSAVE is useful as in a startup alias to load frequently used command |
|||
lines from an easily altered file. For example: |
|||
|
|||
Alias: START |
|||
|
|||
A15: |
|||
CLEDSYS <- load SNAP image of ENV,TCAP,RCP,FCP,NDR,QUIET,&PATH |
|||
CLEDSAVE CLED.VAR L <- load precomposed command lines into CLED |
|||
CLED <- turn the shell on |
|||
... <- rest of startup line runs before CLED gets control |
|||
|
|||
For help with CLEDSAVE.COM, type "CLEDSAVE //". |
|||
|
|||
You may also use SNAP or NZBLITZ to save the system segment image with |
|||
command lines already loaded (turn SAVE OFF first.) |
|||
|
|||
|
|||
File diff suppressed because it is too large
@ -0,0 +1,35 @@ |
|||
page |
|||
|
|||
; Library: RCPCLS for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; |
|||
; Command: CLS |
|||
; Function: To clear the CRT screen |
|||
; Comments: The setting of the CLSTCAP equate determines whether this |
|||
; command uses the TCAP information or not. If not, it uses the |
|||
; clear-screen string passed in macro CLSSTR. That string should |
|||
; end with the high bit set. |
|||
|
|||
cls: |
|||
if clstcap ; If using TCAP for clear screen string |
|||
ld a,(z3tcap) ; TCAP address from Z34CMN.LIB |
|||
cp ' '+1 ; See if blank |
|||
jr nc,cls1 ; If not, go to clear screen code |
|||
jp crlf ; If blank, just do CRLF |
|||
cls1: |
|||
ld hl,clrscr ; Address from Z34CMN.LIB |
|||
jp printhl ; Display it |
|||
|
|||
else ; Not using tcap |
|||
|
|||
call print |
|||
clsstr ; String from Z34RCP.LIB |
|||
ret |
|||
|
|||
endif ;clstcap |
|||
|
|||
; End RCPCLS.LIB |
|||
|
|||
|
|||
@ -0,0 +1,56 @@ |
|||
page |
|||
|
|||
; Library: RCPCMD for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; Description: Command Table and Custom Commands for Z34-RCP |
|||
|
|||
; This is the customization file for the ZCPR Version 3.4 resident command |
|||
; package. Use it to add your own custom commands to the RCP. |
|||
|
|||
; Give each of your custom commands a unique label and command name. Then |
|||
; add the command name(s) to the macro CUSTTBL, below, and append the code |
|||
; for the commands to the end of this file. |
|||
|
|||
; CUSTTBL - Custom commands table. |
|||
; |
|||
; Add one line to CUSTTBL for each of your custom commands. Each line |
|||
; must be of the form: |
|||
; |
|||
; COMMAND name, TRUE, wheel, label |
|||
; |
|||
; Where COMMAND and TRUE appear as-is, and "name", "wheel", and "label" |
|||
; are created by the user. "Name" is a name of four characters or less used |
|||
; to invoke the command, in upper case. "Wheel" is "true" to protect the |
|||
; command from non-wheel users, "false" otherwise. "Label" marks the |
|||
; beginning of the custom code. For example, to create a wheel- |
|||
; protected command named "DIR" which calls the code at label "directory", |
|||
; CUSTTBL appears as follows: |
|||
; |
|||
;custtbl macro |
|||
; command DIR, true, true, directory |
|||
; endm |
|||
|
|||
custtbl macro |
|||
;; command ____, true, ____, _______ ; Template for custom commands |
|||
endm |
|||
|
|||
; ------------------------------ |
|||
|
|||
; RCP command dispatch table |
|||
|
|||
db cmdsize ; Length of each command name |
|||
cmdtbl ; Dispatch table from Z34RCP.LIB |
|||
custtbl ; Optional custom commands |
|||
db 0 ; Marks end of command jump table |
|||
|
|||
; -------------------------------------------------- |
|||
|
|||
; Insert label(s) and code for custom RCP commands here: |
|||
|
|||
; |
|||
|
|||
; END RCPCMD.LIB |
|||
|
|||
|
|||
@ -0,0 +1,245 @@ |
|||
page |
|||
|
|||
; Library: RCPCP for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.3 |
|||
; Date: August 11, 1989 |
|||
; Changes: Responds dynamically to QUIET flag, eliminating "noise." |
|||
|
|||
; Version: 1.2 |
|||
; Date: December 30, 1988 |
|||
; Changes: Now works properly with CP/M Plus. |
|||
; Moved SETDMA to common routines. |
|||
|
|||
; Author: Carson Wilson |
|||
; Version: 1.1 |
|||
; Date: August 4, 1988 |
|||
; Changes: Now initializes FCB1 before calling SetFStp, allowing |
|||
; stamp setting of multiple-extent files. |
|||
; |
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; |
|||
; Command: CP |
|||
; Function: Copy a file from one place to another |
|||
; Syntax: If FCBSWAP false: |
|||
; CP destfile=srcfile, CP =srcfile |
|||
; If FCBSWAP true: |
|||
; CP srcfile destfile, CP srcfile |
|||
; If TESTEQ and FCBSWAP true: |
|||
; Both of the above forms work |
|||
; |
|||
; Comments: Both file specifications can include a directory specification. |
|||
; If only one file name is given, then the current directory and |
|||
; the source file name are assumed for the destination. |
|||
|
|||
; |
|||
; New ZSDOS/DosDisk BDOS standard functions: |
|||
; |
|||
GetFStp equ 102 ; Get file stamp function |
|||
SetFStp equ 103 ; Set file stamp function |
|||
|
|||
copy: |
|||
call retsave |
|||
call dirchek ; Test bad directory |
|||
|
|||
if leftright |
|||
call fcbswap ; Exchange fcb1 with fcb2 |
|||
endif |
|||
|
|||
; If new is blank, make it the same name and type as old |
|||
|
|||
ld de,fcb1+1 ; Point to destination file name |
|||
ld a,(de) ; Get first character |
|||
cp ' ' ; If not blank (no name) |
|||
jr nz,copy0 ; ..then branch to copy |
|||
ld hl,fcb2+1 ; Copy source name into destination FCB |
|||
ld b,11 ; Name and type are 11 bytes |
|||
call blkmov |
|||
|
|||
; See if destination is same as source, and abort if so |
|||
|
|||
copy0: |
|||
ld hl,fcb1 ; Set up pointers to two files |
|||
ld de,fcb2 |
|||
push hl |
|||
push de |
|||
inc hl ; Point to names of files |
|||
inc de |
|||
ld b,13 ; Compare 13 bytes (name, type, and user #) |
|||
copy1: call comp |
|||
jr nz,copy2 ; If they differ, go on with copy |
|||
ld a,(cdrv) ; ZCPR current drive |
|||
inc a ; Shift to range 1..16 |
|||
ld b,a ; ..and keep value in B |
|||
pop de ; Restore pointers to FCBs |
|||
pop hl |
|||
ld a,(de) ; Get drive of source file |
|||
ld c,a ; ..and save it in C |
|||
or a ; Is it default drive? |
|||
jr nz,copy1a ; Branch if drive made explicit |
|||
ld c,b ; Otherwise, copy default drive into C |
|||
copy1a: ld a,(hl) ; Get drive of destination file |
|||
or a ; Is it default drive? |
|||
jr nz,copy1b ; Branch if drive made explicit |
|||
ld a,b ; Otherwise, get current drive |
|||
copy1b: cp c ; Compare the two drives specified |
|||
jr nz,copy3 ; Branch if they are different |
|||
jp duperr ; Tell EH duplicate filespecs |
|||
copy2: |
|||
pop de ; Clean up the stack |
|||
pop hl |
|||
|
|||
; Make note of the user numbers of the two files |
|||
|
|||
copy3: |
|||
ld a,(fcb1+13) ; Get destination user number |
|||
ld (usrdest),a |
|||
ld a,(fcb2+13) ; Get source user number |
|||
ld (usrsrc),a |
|||
|
|||
; Set up new FCB for source file and open the source |
|||
|
|||
call define ; Define buffer addresses dynamically |
|||
srcfcb equ $+1 |
|||
ld hl,0 ; Get address to use for new source FCB |
|||
push hl |
|||
ex de,hl ; Copy file data to new FCB |
|||
ld b,12 |
|||
call blkmov |
|||
call logsrc ; Log in user number of source file |
|||
pop hl ; Initialize the source file FCB |
|||
call initfcb2 |
|||
ld c,15 ; Open source file |
|||
call bdos |
|||
inc a ; Check for error |
|||
jp z,noflerr ; File not found error handler |
|||
|
|||
if StpCall |
|||
call cpmver |
|||
jr nc,copy4 ; Don't do this if CP/M Plus |
|||
stpbuf equ $+1 |
|||
ld de,0 |
|||
call setdma ; Set DMA to date buffer |
|||
ld de,(srcfcb) |
|||
ld c,GetFStp ; Get stamp (if any) to DMA |
|||
call bdos |
|||
ld (gotstp),a ; Store result |
|||
ld de,tbuff ; Restore DMA |
|||
call setdma ; ..for search |
|||
copy4: |
|||
endif ; StpCall |
|||
|
|||
; Make sure destination file does not already exist |
|||
|
|||
call logdest ; Log into destination user area |
|||
call extest ; Test for existence of file in fcb1 |
|||
jp z,exit ; Branch if it exists and user says no |
|||
|
|||
; Create destination file |
|||
|
|||
ld de,fcb1 ; Point to destination FCB |
|||
ld c,22 ; BDOS make-file function |
|||
call bdos |
|||
inc a ; Test for error (no directory space) |
|||
jp z,fulerr ; Invoke EH if not OK |
|||
|
|||
; Copy source to destination |
|||
|
|||
copy5: call logsrc ; Log in source user area |
|||
ld b,0 ; Initialize counter |
|||
ld de,(cbuff) ; Initialize buffer pointer |
|||
copy5a: push de ; Save address and counter |
|||
push bc |
|||
call setdma ; Set DMA to cbuff+(b*128) |
|||
ld de,(srcfcb) ; Point to source file FCB |
|||
ld c,20 ; BDOS read-sequential function |
|||
call bdos |
|||
pop bc ; Get counter and address |
|||
pop de |
|||
or a ; Read Ok? |
|||
jr nz,copy5b ; Branch if end of file |
|||
ld hl,128 ; Point DE to next buffer address |
|||
add hl,de |
|||
ex de,hl |
|||
inc b ; Increment counter |
|||
ld a,b ; See if buffer full |
|||
cp cpblocks |
|||
jr nz,copy5a ; If not, go back for more |
|||
copy5b: ld a,b ; Get count of blocks loaded into buffer |
|||
or a ; Are there any? |
|||
jr z,copy6 ; Branch if not (we are done) |
|||
push bc ; Save count |
|||
call logdest ; Log into destination user number |
|||
cbuff equ $+1 ; Pointer for in-the-code modification |
|||
ld de,0 ; Point to beginning of copy buffer |
|||
copy5c: push de ; Save buffer address |
|||
call setdma ; Set dma to buffer |
|||
ld de,fcb1 ; Point to destination file FCB |
|||
ld c,21 ; Sequential write the block |
|||
call bdos |
|||
or a ; Get result |
|||
jp nz,fulerr ; Invoke EH (disk full or write error) |
|||
pop de ; Get buffer address & balance stack |
|||
pop bc ; Get count |
|||
dec b ; Buffer empty? |
|||
jr z,copy5 ; Yes. Back for refill |
|||
push bc ; No. Save count |
|||
ld hl,128 |
|||
add hl,de |
|||
ex de,hl ; DE points to next buffer address |
|||
jr copy5c ; Back for another sector to write |
|||
|
|||
; Close the destination file |
|||
|
|||
copy6: call logdest ; Log into destination user number |
|||
ld de,fcb1 ; Point to destination FCB |
|||
ld c,16 ; Close file |
|||
call bdos |
|||
inc a ; 0ffh --> 0 if error |
|||
jp z,fulerr ; Invoke EH |
|||
|
|||
if StpCall |
|||
gotstp equ $+1 |
|||
ld a,0 ; File had stamp? |
|||
dec a ; 1 --> 0 = yes |
|||
jr nz,noset ; No |
|||
ld de,(stpbuf) ; Point to buffer |
|||
call setdma ; Set DMA |
|||
call initfcb1 ; Init. for SetFStp, point to dest. |
|||
ld c,SetFStp ; Set file's stamp |
|||
call bdos ; CCP restores DMA |
|||
noset: |
|||
endif ; StpCall |
|||
|
|||
ld a,(quiet) |
|||
or a |
|||
jr nz,qcpdone |
|||
call print |
|||
db ' Don','e'+80h |
|||
qcpdone: |
|||
if cpsp and spaceon |
|||
jp spaexit ; Report space remaining on destination drive |
|||
else |
|||
jp exit |
|||
endif ;cpsp and spaceon |
|||
|
|||
; Log into user number of source file |
|||
|
|||
logsrc: |
|||
usrsrc equ $+1 ; Pointer for in-the-code modification |
|||
ld a,0 ; Get user number |
|||
jr setusrrel ; Local jump to save code |
|||
|
|||
; Log into user number of destination file |
|||
|
|||
logdest: |
|||
usrdest equ $+1 ; Pointer for in-the-code modification |
|||
ld a,0 ; Get user number |
|||
setusrrel: |
|||
jp setusr |
|||
|
|||
; End RCPCP.LIB |
|||
|
|||
|
|||
@ -0,0 +1,137 @@ |
|||
page |
|||
|
|||
; Library: RCPDIR for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: August 6, 1989 |
|||
; Changes: Now allows "DIR [dir:].aft" as well as "DIR [dir:]*.aft" |
|||
; to show all files of a given file extentsion, |
|||
; e.g., "d .?80" gives all .Z80 and .180 files. |
|||
; |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; |
|||
; Command: DIR |
|||
; Function: Display a directory of the files on disk |
|||
; Syntax: DIR [dir:afn] Displays the DIR files |
|||
; DIR [dir:afn] S Displays the SYS files |
|||
; DIR [dir:afn] A Display both DIR and SYS files |
|||
; |
|||
; If slashchk is true: |
|||
; |
|||
; DIR [dir:]/S Equivalent to DIR [dir:]*.* S |
|||
; DIR [dir:]/A Equivalent to DIR [dir:]*.* A |
|||
|
|||
dir: |
|||
call retsave ; Save return address and set stack |
|||
|
|||
; See if FCB should be made wild (all '?') |
|||
|
|||
ld hl,fcb1+1 ; Point to file name in FCP |
|||
ld a,(hl) ; Get first character of filename |
|||
|
|||
if slashchk ; Allow "DIR /S" and "DIR /A" formats |
|||
cp '/' ; If name does not start with '/' |
|||
jr nz,dir01 ; ..branch and process normally |
|||
inc hl ; Point to second character |
|||
ld a,(hl) ; Get option character after slash |
|||
ld (fcb2+1),a ; ..and put it into second FCB |
|||
dec hl ; Back to first character |
|||
ld a,' ' ; Simulate empty FCB |
|||
endif ;slashchk |
|||
|
|||
dir01: |
|||
cp ' ' ; See if no file spec given |
|||
jr nz,dir02 ; Spec given |
|||
|
|||
ld b,8 ; Wildcard name |
|||
ld a,(fcb1+9) |
|||
cp ' ' ; Wildcard type? |
|||
jr nz,dir01a ; No |
|||
ld b,11 ; Yes. Fill name and type. |
|||
dir01a: ld a,'?' ; Get ready to fill with '?' |
|||
call fillp ; ..carry out fill |
|||
dir02: |
|||
if nosys ; Suppress-SYS-file-if-no-wheel option |
|||
call getwhl ; Get wheel status |
|||
jr z,dirnly ; If wheel off, ignore options |
|||
endif |
|||
|
|||
ld a,(fcb2+1) ; Get first char of 2nd file name |
|||
ld b,1 ; Set for both dir and sys files |
|||
cp allflag ; SYS and DIR flag specifier? |
|||
jr z,dirpr ; Got system specifier |
|||
dec b ; B=0 for sys files only |
|||
cp sysflag ; SYS only? |
|||
jr z,dirpr |
|||
|
|||
dirnly: ld b,80h ; Must be dir-only selection |
|||
|
|||
; DIRECTORY PRINT ROUTINE |
|||
; On entry, B reg is set as follows: |
|||
; 0 for only system files, 80h for only dir files, 1 for both |
|||
; |
|||
dirpr: |
|||
ld a,b ; Get systst flag |
|||
call getdir ; Load and sort directory |
|||
jp z,prfnf ; Print no file message |
|||
if wide |
|||
ld e,5 |
|||
else |
|||
ld e,4 ; Count down to 0 |
|||
endif ; wide |
|||
; |
|||
; ENTRY PRINT LOOP |
|||
; On entry, HL pts to files selected (terminated by 0) |
|||
; and E is entry counter |
|||
; |
|||
dir3: |
|||
ld a,(hl) ; Check for done |
|||
or a |
|||
if dirsp and spaceon |
|||
jp z,spaexit ; Show space when done |
|||
else |
|||
jp z,exit ; Exit if done |
|||
endif ; Dirsp and spaceon |
|||
ld a,e ; Get entry counter |
|||
or a ; Output CRLF if 4 or 5 entries printed in line |
|||
jr nz,dir3a ; Continue |
|||
call crlf ; New line |
|||
if wide |
|||
ld e,5 |
|||
else |
|||
ld e,4 ; Reset entry count |
|||
endif ; wide |
|||
|
|||
ld a,e ; Get entry count |
|||
dir3a: |
|||
if wide |
|||
cp 5 |
|||
else |
|||
cp 4 ; First entry? |
|||
endif ; wide |
|||
|
|||
jr z,dir4 |
|||
call print |
|||
; |
|||
if wide |
|||
; |
|||
db ' ' ; 2 spaces |
|||
db ' '+80h ; Then 1 more space |
|||
; |
|||
else |
|||
; |
|||
db ' ' ; Space |
|||
db fence+80h ; Then fence char |
|||
; |
|||
endif ; Wide |
|||
; |
|||
dir4: |
|||
call prfn ; Print file name |
|||
call break ; Check for abort |
|||
dec e ; Decrement entry counter |
|||
jr dir3 |
|||
|
|||
; End RCPDIR.LIB |
|||
|
|||
|
|||
@ -0,0 +1,162 @@ |
|||
page |
|||
|
|||
; Library: RCPECHO for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; |
|||
; Command: ECHO |
|||
; Function: Echo text to console or printer |
|||
|
|||
echo: |
|||
xor a ; Lower case/printer off flag setting |
|||
ld (crtfl),a ; Printer off by default |
|||
|
|||
if upcase ; If upper case default |
|||
dec a |
|||
endif ;upcase |
|||
|
|||
ld (casefl),a ; Store flag in code below |
|||
ld hl,tbuff+1 ; Point to first character |
|||
call getchar ; Get first character (should be blank) |
|||
; If none, exit from routine |
|||
|
|||
; Loop to echo chars |
|||
|
|||
echo2: call getchar |
|||
|
|||
if echolst |
|||
cp ff ; Form feed? |
|||
jr z,echo3 |
|||
endif ;echolst |
|||
|
|||
cp '^' |
|||
jr nz,echo2a ; Not control character prefix |
|||
call getchar ; Get next character |
|||
and 1fh ; Convert to control character |
|||
jr echo2e ; Echo it |
|||
echo2a: |
|||
cp cmdchar ; Case shift prefix? |
|||
jr nz,echo2e ; No, normal echo |
|||
call getchar ; Get next character |
|||
|
|||
if echolst |
|||
cp prtchar ; Turn printer on? |
|||
jr z,echo2b ; Store non-zero in crt flag |
|||
cp crtchar ; Turn printer off? |
|||
jr nz,echo2c ; No, test for shift characters |
|||
xor a ; Yes, clear crt flag |
|||
echo2b: ld (crtfl),a |
|||
jr echo2 ; On to next character |
|||
echo2c: |
|||
endif ; echolst |
|||
|
|||
cp ucasechar ; Up-shift character? |
|||
jr z,echo2d ; Store non-zero value in case flag |
|||
cp lcasechar ; Lower-case character? |
|||
jr nz,echo2e ; No, echo the character as is |
|||
xor a ; Else, clear case flag |
|||
echo2d: ld (casefl),a |
|||
jr echo2 ; On to next character |
|||
echo2e: |
|||
call echout ; Send char |
|||
jr echo2 |
|||
|
|||
; Form feed - send new line followed by form feed if printer output |
|||
|
|||
if echolst |
|||
echo3: |
|||
ld a,(crtfl) ; Check for printer output |
|||
or a ; Non-zero? |
|||
jr z,echoff ; No, send form feed normally |
|||
call echonl ; Send new line |
|||
ld a,ff ; Send form feed |
|||
jr echout |
|||
|
|||
; Send form feed char to console |
|||
|
|||
echoff: |
|||
ld a,ff ; Get char |
|||
jr echo2e |
|||
endif ;echolst |
|||
|
|||
; End of print loop - check for printer termination |
|||
|
|||
echo4: |
|||
if not echolst |
|||
ret |
|||
|
|||
else |
|||
ld a,(crtfl) ; Get list mode flag |
|||
or a |
|||
ret z ; Done if no printer output |
|||
|
|||
; Output a new line |
|||
|
|||
echonl: |
|||
ld a,cr ; Output new line on printer |
|||
call echout |
|||
ld a,lf ; Fall thru to echout |
|||
endif ; not echolst |
|||
|
|||
; Output char to printer or console |
|||
|
|||
echout: |
|||
ld c,a ; Char in c |
|||
cp 'A' ; If less than 'A' |
|||
jr c,echouta ; Leave as is |
|||
cp 'Z'+1 ; If greater than 'Z' |
|||
jr nc,echouta ; Leave as is |
|||
add 20h ; Else convert to lower case |
|||
echouta: |
|||
ld d,a ; Save lower case version in d |
|||
casefl equ $+1 ; Pointer for in-the-code modification |
|||
ld a,0 |
|||
or a ; Upper case? |
|||
jr nz,echoutb ; If upper case selected, go on as is |
|||
ld c,d ; Else substitute lower case version |
|||
echoutb: |
|||
|
|||
push hl ; Save hl |
|||
push bc ; Save bc |
|||
ld de,0ch-3 ; Offset for BIOS console output |
|||
|
|||
if echolst |
|||
|
|||
crtfl equ $+1 |
|||
ld a,0 |
|||
or a ; Printer? |
|||
jr z,echout1 ; No |
|||
inc de ; Offset for BIOS printer output |
|||
inc de |
|||
inc de |
|||
endif ;echolst |
|||
|
|||
; Output char in C with BIOS offset in DE |
|||
|
|||
echout1: |
|||
call biout ; Bios output |
|||
pop bc ; Restore bc,hl |
|||
pop hl |
|||
ret |
|||
|
|||
; Get a character from the command tail buffer |
|||
|
|||
getchar: |
|||
ld a,(hl) ; Get character |
|||
inc hl ; Point to next one |
|||
or a ; Check for end of string |
|||
ret nz ; If not end, return |
|||
pop hl ; Else, clean up stack |
|||
jr echo4 ; And exit from routine |
|||
|
|||
; Output char in C to BIOS with offset in DE |
|||
|
|||
biout: |
|||
ld hl,(wboot+1) ; Get address of warm boot |
|||
add hl,de ; Pt to routine |
|||
jp (hl) ; Jump to it |
|||
|
|||
; End RCPECHO.LIB |
|||
|
|||
|
|||
@ -0,0 +1,76 @@ |
|||
page |
|||
|
|||
; Library: RCPERA for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.2 |
|||
; Date: Sept. 15, 1989 |
|||
; Changes: Chains to error handler with flag set to invoke transient ERA |
|||
; if a read only file is encountered. Propose error code |
|||
; 17 decimal for "file read only" error. |
|||
; |
|||
; Version: 1.1 |
|||
; Date: August 12, 1989 |
|||
; Changes: Now responds dynamically to QUIET flag, eliminating "noise". |
|||
; NOTE: if QUIET is active, using the inspect option or trying |
|||
; to erase R/O files will give meaningless messages. Use |
|||
; the PROT command to set R/O files to R/W first in order to |
|||
; erase them quietly. |
|||
; |
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; |
|||
; Command: ERA |
|||
; Function: Erase files |
|||
; Forms: |
|||
; ERA <afn> Erase Specified files and print their names |
|||
; ERA <afn> o Erase Specified files and print their names, but ask |
|||
; for verification before Erase is done |
|||
|
|||
era: |
|||
call retsave |
|||
ld a,(fcb2+1) ; Get eraflg if it's there |
|||
ld (eraflg),a ; Save it as a flag |
|||
ld a,1 ; Dir files only |
|||
call getdir ; Load directory of files |
|||
jp z,prfnf ; Abort if no files |
|||
; |
|||
; Main erase loop |
|||
; |
|||
era1: call break ; See if user wants to stop |
|||
call qplug ; Turn of output if quiet |
|||
push hl ; Save ptr to file |
|||
call prfn ; Print its name |
|||
ld (nxtfile),hl ; Save ptr to next file |
|||
pop hl ; Get ptr to this file |
|||
call unplug ; Turn output on |
|||
call rotest ; Test file pted to by hl for r/o |
|||
ld a,17 ; Proposed file R/O error code |
|||
ld b,00010000b ; EH flag to invoke transient |
|||
jp nz,errex1 ; Chain to transient if R/O |
|||
eraflg equ $+1 ; Address of flag |
|||
ld a,0 ; 2nd byte is flag |
|||
cp ' ' ; Is it an inspect option? |
|||
jr z,era2 ; Skip prompt if it is not |
|||
call eraq ; Erase? |
|||
jr nz,era3 ; Skip if not |
|||
era2: ld de,fcb1+1 ; Copy into fcb1 |
|||
ld b,11 ; 11 bytes |
|||
call blkmov |
|||
call initfcb1 ; Init fcb |
|||
ld c,19 ; Delete file |
|||
call bdos |
|||
era3: ld hl,(nxtfile) ; Hl pts to next file |
|||
ld a,(hl) ; Get char |
|||
or a ; Done? |
|||
if erasp and spaceon |
|||
jp z,spaexit |
|||
else |
|||
jp z,exit |
|||
endif ; Erasp and spaceon |
|||
call crlf ; New line |
|||
jr era1 |
|||
|
|||
; End RCPERA.LIB |
|||
|
|||
|
|||
@ -0,0 +1,119 @@ |
|||
page |
|||
|
|||
; Library: RCPH for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; |
|||
; Command: HELP |
|||
; Function: This command displays a list of all resident commands that |
|||
; are supported, including those in the CPR (command processor), |
|||
; RCP, and FCP. |
|||
; |
|||
; Syntax: H |
|||
|
|||
clist: |
|||
|
|||
; Print the FCP-resident command names |
|||
|
|||
if listfcp |
|||
call print ; Print header for FCP |
|||
db lf |
|||
db 'FC','P'+80h |
|||
ld hl,(fcp) ; Get FCP address dynamically from ENV |
|||
ld a,h ; See if still there |
|||
or l |
|||
jr z,nofcp ; FCP has been removed |
|||
ld bc,5 ; Calculate address of FCP command table |
|||
add hl,bc |
|||
call cmdlist ; Display list of commands |
|||
nofcp: |
|||
endif ;listfcp |
|||
|
|||
; Print the CPR-resident command names |
|||
|
|||
if listcpr |
|||
call print ; Print "CPR" |
|||
db cr,lf ; Need CR if no FCP |
|||
db 'CP','R'+80h |
|||
ld hl,(ccp) ; Get CCP address from ENV |
|||
ld bc,offcmd ; Point to command table in CPR |
|||
add hl,bc |
|||
call cmdlist ; Display the list of commands |
|||
endif ;listcpr |
|||
|
|||
; Print the RCP-resident command names |
|||
|
|||
call crlf ; Skip a line |
|||
ld hl,rcpname ; Print RCP name |
|||
call printhl |
|||
ld hl,RCPbegin+5 ; Point to RCP command table |
|||
; Fall through to CMDLIST |
|||
|
|||
;---------------------------------------- |
|||
|
|||
; Subroutine to display list of commands in a command table (code above |
|||
; falls through to this routine -- do not move it). The commands are |
|||
; displayed 5 per line with 8 character spaces allowed for each command |
|||
; (subject to equates below). |
|||
|
|||
cmdlist: |
|||
call crlf ; Start with new line |
|||
ld e,(hl) ; Get size of each command name into DE |
|||
ld d,0 |
|||
inc hl ; Point to name of first command |
|||
ld c,cmdsline ; Set names-per-line value |
|||
cmdlist1: |
|||
ld a,(hl) ; Get first character of the command name |
|||
or a ; See if it is null |
|||
jr nz,cmdlist1a ; If not, continue |
|||
ld a,cmdsline ; See if we are already on a new line |
|||
cp c |
|||
call nz,crlf ; If not, skip a line |
|||
ret |
|||
|
|||
cmdlist1a: |
|||
if noshow ; Option to suppress wheel-limited cmds |
|||
rla ; Shift high bit of name into carry bit |
|||
jr nc,cmdlist2 ; If not restricted, go on |
|||
call getwhl ; Otherwise, check wheel byte |
|||
or a |
|||
jr nz,cmdlist2 ; If wheel set, continue as usual |
|||
add hl,de ; Otherwise skip this command |
|||
jr cmdlist5 |
|||
endif |
|||
|
|||
; Print leading spaces between names |
|||
|
|||
cmdlist2: |
|||
ld a,cmdspace ; Spacing between command names |
|||
sub e ; Less length of each command name |
|||
ld b,a |
|||
cmdlist3: |
|||
call spac |
|||
djnz cmdlist3 |
|||
|
|||
; Print name of command |
|||
|
|||
ld b,e ; Length of each name into B |
|||
cmdlist4: |
|||
ld a,(hl) ; Get command name character |
|||
call conout |
|||
inc hl ; Point to next |
|||
djnz cmdlist4 |
|||
|
|||
dec c ; Decrement count of names on this line |
|||
jr nz,cmdlist5 ; Branch if room for more names |
|||
call crlf ; Otherwise, end this line and |
|||
ld c,cmdsline ; ..reset count for another line of commands |
|||
|
|||
; Skip to next command name |
|||
|
|||
cmdlist5: |
|||
inc hl ; Skip jump vector |
|||
inc hl |
|||
jr cmdlist1 ; Back to process next name |
|||
|
|||
; End RCPH.LIB |
|||
|
|||
|
|||
@ -0,0 +1,64 @@ |
|||
page |
|||
|
|||
; Library: RCPID for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: September 29, 1989 |
|||
; Changes: ID appended with 'C' if CLED is present |
|||
; |
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: September 14, 1988 |
|||
; |
|||
; Function: Build the name of the RCP and append it at the end of the |
|||
; file at label RCPID. This serves two purposes: first it |
|||
; allows the 'H' command to describe which RCP is active, |
|||
; second, the string identifies the actual end of the RCP |
|||
; in memory. |
|||
; |
|||
; ------------------------------------------------------------------------ |
|||
|
|||
; Macros to build RCP ID for Help command |
|||
|
|||
; Under SLR and compatible assemblers, the RCP name reflects the |
|||
; RCP size, e.g., "RCP-21F" means the RCP occupies 21 records. |
|||
|
|||
if SLR |
|||
rcpid macro |
|||
rcplen defl RCPend - RCPbegin |
|||
fulrecs equ rcplen / 128 ; Full records |
|||
lastr equ [rcplen mod 128 + 127]/128 ; Last record, if any |
|||
ttlrecs equ fulrecs + lastr |
|||
|
|||
db 'RCP-' |
|||
db ttlrecs / 10 + '0' ; Tens of records |
|||
db ttlrecs mod 10 + '0' ; Ones |
|||
db rcptype ; 'F', 'H', etc. from RCP.LIB |
|||
if cledon |
|||
db 'C' ; Distinguish CLED versions |
|||
endif |
|||
db 0 ; ID string terminator |
|||
endm |
|||
|
|||
else ; Non-SLR |
|||
rcpid macro |
|||
db 'RCP-' |
|||
db rcptype |
|||
db 0 |
|||
endm |
|||
endif ; SLR |
|||
|
|||
; ----------------------------------------------------------------------- |
|||
|
|||
; Name of RCP |
|||
|
|||
; This block allows the 'H' command and/or the SHOW utility to display a name |
|||
; and version number for this RCP as well as the commands that are supported. |
|||
; It also generates a unique string marking the end of the RCP module. |
|||
|
|||
rcpname: |
|||
rcpid |
|||
|
|||
; End of RCPID.LIB |
|||
|
|||
|
|||
@ -0,0 +1,296 @@ |
|||
page |
|||
|
|||
; Library: RCPIOM for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.1 |
|||
; Date: August 12, 1989 |
|||
; Changes: POKE and PORT now respond dynamically to QUIET flag, |
|||
; eliminating "noise." |
|||
|
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; |
|||
; Commands: PEEK, POKE, and PORT |
|||
|
|||
; ------------------------------------------------------------------ |
|||
; |
|||
; Command: PEEK |
|||
; Function: Display memory contents |
|||
; |
|||
; Form: |
|||
; PEEK startadr 128 bytes displayed |
|||
; PEEK startadr endadr Range of bytes displayed |
|||
|
|||
if peekon |
|||
peek: |
|||
call retsave |
|||
ld hl,tbuff+1 ; Find first number |
|||
nxtpeek equ $+1 ; Pointer for in-the-code modification |
|||
ld de,100h ; Default peek address if none |
|||
call sksp ; Skip to first token (if any) |
|||
call nz,hexnum ; Get start address if any |
|||
push de ; Save starting address |
|||
ld bc,peeklen ; Compute default ending address |
|||
ex de,hl |
|||
add hl,bc |
|||
|
|||
if peekchk ; Check for overflow |
|||
jr nc,peek0 ; If no overflow past FFFF, go on |
|||
ld hl,0ffffh ; Else use FFFF as ending address |
|||
peek0: |
|||
endif ;peekchk |
|||
|
|||
ex de,hl ; End address in DE |
|||
call sksp ; Skip to next token (if any) |
|||
call nz,hexnum ; Get 2nd number in DE (else default) |
|||
peek1: pop hl ; HL is start address, DE is end address |
|||
|
|||
if peekhdr |
|||
push hl ; Save starting address again |
|||
ld b,8 ; Output leading spaces |
|||
peek0a: call spac |
|||
djnz peek0a |
|||
ld b,16 ; Display 16 column headers |
|||
peek0b: ld a,l ; Get low byte of address |
|||
and 0fh ; Display low hex digit |
|||
call pashc |
|||
inc hl |
|||
djnz peek0b |
|||
; |
|||
; Display header for ASCII area |
|||
; |
|||
call print |
|||
db ' ',' '+80H ; Space over to ASCII area |
|||
pop hl ; Get address |
|||
push hl |
|||
ld b,16 ; Display 16 chars. ASCII header |
|||
peek0b1:ld a,l ; Get byte |
|||
and 0fh ; Mask |
|||
call pah ; Print ASCII char. |
|||
inc hl ; Next byte |
|||
djnz peek0b1 |
|||
|
|||
if peekbdr |
|||
call crlf |
|||
ld b,8 |
|||
peek0c: call spac ; Print leading spaces |
|||
djnz peek0c |
|||
ld b,16 |
|||
peek0d: call print |
|||
db ' -','-'+80h |
|||
djnz peek0d |
|||
|
|||
; Print border at ASCII area |
|||
|
|||
call print |
|||
db ' ',' '+80h ; Space to ASCII border |
|||
ld b,16 ; 16 dashes |
|||
peek0e: call print |
|||
db '-'+80h |
|||
djnz peek0e |
|||
endif ;peekbdr |
|||
|
|||
pop hl ; Restore starting address |
|||
endif ;peekhdr |
|||
|
|||
ld c,0ffh ; Use C as continue flag |
|||
call peek2 ; Do peek |
|||
ld (nxtpeek),hl ; Set continued peek address |
|||
jp exit |
|||
peek2: |
|||
ld a,c ; Check continuation flag |
|||
or a |
|||
ret z |
|||
|
|||
; Print line header |
|||
|
|||
peek2a: call crlf ; New line |
|||
ld a,h ; Print address |
|||
call pashc |
|||
ld a,l |
|||
call pahc |
|||
call dash ; Print leader |
|||
ld b,16 ; 16 bytes to display |
|||
push hl ; Save start address |
|||
|
|||
; Print hex values for 16 bytes |
|||
|
|||
peek3: ld a,(hl) ; Get next byte |
|||
call pashc ; Print with leading space |
|||
|
|||
; Check for last address. If C is already 0, leave it that way. |
|||
; Otherwise check for end address and if so set C to zero. |
|||
|
|||
ld a,c ; See if continue flag already cleared |
|||
or a |
|||
jr z,peek3a ; If so, skip test |
|||
ld a,h |
|||
sub a,d ; See if h = d |
|||
ld c,a |
|||
ld a,l |
|||
sub a,e ; See if l = e |
|||
or c ; Combine two tests |
|||
ld c,a |
|||
peek3a: inc hl ; Pt to next |
|||
djnz peek3 |
|||
|
|||
; Print ASCII equivalents for 16 bytes |
|||
|
|||
pop hl ; Pt to first address again |
|||
ld b,16 ; 16 bytes |
|||
call print ; Space and fence |
|||
db ' ' |
|||
db fence+80h |
|||
push bc ; Save flag in c |
|||
peek4: ld a,(hl) ; Get next byte |
|||
ld c,'.' ; Assume dot |
|||
and 7fh ; Mask it |
|||
cp ' ' ; Dot if less than space |
|||
jr c,peek5 |
|||
cp 7fh ; Don't print del |
|||
jr z,peek5 |
|||
ld c,a ; Char in c |
|||
peek5: ld a,c ; Get char |
|||
call conout ; Send it |
|||
inc hl ; Pt to next |
|||
djnz peek4 |
|||
call print ; Closing fence |
|||
db fence+80h |
|||
pop bc ; Get flag in c back |
|||
call break ; Allow abort |
|||
jr peek2 |
|||
endif ; Peekon |
|||
|
|||
; PAHC - Print A as 2 hex chars |
|||
; PASHC - With leading space |
|||
|
|||
if peekon or pokeon or porton |
|||
pashc: |
|||
push af ; Save A |
|||
call spac |
|||
pop af |
|||
pahc: push bc ; Save bc |
|||
ld c,a ; Byte in c |
|||
rrca ; Exchange nybbles |
|||
rrca |
|||
rrca |
|||
rrca |
|||
call pah ; Print hex char |
|||
ld a,c ; Get low |
|||
pop bc ; Restore bc and fall thru to pah |
|||
pah: and 0fh ; Mask |
|||
add '0' ; Convert to ascii |
|||
cp '9'+1 ; Letter? |
|||
jr c,pah1 |
|||
add 7 ; Adjust to letter |
|||
pah1: jp conout |
|||
endif ; Peekon or pokeon or porton |
|||
|
|||
; -------------------------------------------------------------------- |
|||
; |
|||
; Command: POKE |
|||
; Function: Place Values into Memory |
|||
; |
|||
; Form: |
|||
; POKE startadr val1 val2 ... |
|||
; |
|||
if pokeon |
|||
poke: |
|||
call retsave |
|||
ld hl,tbuff+1 ; Pt to first char |
|||
call sksp ; Skip to non-blank |
|||
jp z,numerr ; Numerical error |
|||
call hexnum ; Convert to number |
|||
call qplug ; Shut off output if quiet |
|||
call print |
|||
db ' Pok','e'+80h |
|||
call adrat ; Print at message (quiet sensitive) |
|||
call unplug ; Turn on output |
|||
|
|||
; Loop for storing hex values sequentially via POKE |
|||
|
|||
poke1: push de ; Save address |
|||
call sksp ; Skip to non-blank |
|||
jp z,exit ; Done |
|||
cp '"' ; Quoted text? |
|||
jr z,poke2 |
|||
call hexnum ; Get number |
|||
ld a,e ; Get low |
|||
pop de ; Get address |
|||
ld (de),a ; Store number |
|||
inc de ; Pt to next |
|||
jr poke1 |
|||
|
|||
; Store ASCII chars. |
|||
|
|||
poke2: pop de ; Get next address |
|||
inc hl ; Pt to next char |
|||
poke3: ld a,(hl) ; Get next char |
|||
or a ; Done? |
|||
jp z,exit |
|||
ld (de),a ; Put char |
|||
inc hl ; Pt to next |
|||
inc de |
|||
jr poke3 |
|||
|
|||
endif ; Pokeon |
|||
|
|||
; ------------------------------------------------------------------- |
|||
; |
|||
; Command: PORT |
|||
; Function: Display or Set I/O Port Data |
|||
; |
|||
; Forms: |
|||
; PORT addr - Read port and display value |
|||
; PORT addr value - Output value to port |
|||
; |
|||
if porton |
|||
port: |
|||
call retsave |
|||
ld hl,tbuff+1 ; Find first number |
|||
call sksp ; Skip to first command-line token |
|||
jp z,numerr ; Numerical error |
|||
call hexnum ; Get start address into de |
|||
push hl ; Save pointer to command tail |
|||
ld hl,portadl ; Modify code |
|||
ld (hl),e ; Move specified port addr into place |
|||
dec hl ; Point to opcode position |
|||
ld (hl),0dbh ; Poke 'in' opcode |
|||
dec hl |
|||
ld (hl),d ; Save MSB for port address |
|||
inc hl |
|||
ex (sp),hl ; Get tail pointer back while saving this one |
|||
call qplug ; Shut off output if quiet |
|||
call print ; Print header |
|||
db ' Por','t'+80h |
|||
ld a,e |
|||
call pashc ; Print port address |
|||
call sksp ; Skip to possible second value |
|||
jr z,portin ; Proceed with port input |
|||
call hexnum ; Get 2nd number in de |
|||
ex (sp),hl ; Get pointer to opcode back |
|||
ld (hl),0d3h ; Poke 'out' opcode |
|||
call print |
|||
db ': OU','T'+80h |
|||
ld a,e ; Get value to output |
|||
jr paddr |
|||
portin: |
|||
call print |
|||
db ': I','N'+80h |
|||
xor a ; Make sure high port address = 0 (for hd64180) |
|||
portadh equ $+1 |
|||
paddr: ld b,0 ; ..for both in and out instructions |
|||
opcode: |
|||
db 0 ; Opcode for in or out inserted by code above |
|||
portadl: |
|||
db 0 ; Port address inserted by code above |
|||
call pashc |
|||
call unplug ; Turn on output |
|||
pop hl ; Clean up stack |
|||
jp exit |
|||
|
|||
endif ; Porton |
|||
|
|||
; End RCPIOM.Z80 |
|||
|
|||
@ -0,0 +1,256 @@ |
|||
page |
|||
|
|||
; Library: RCPLT for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.1 |
|||
; Date: August 26, 1989 |
|||
; Changes: Some WordStar characters caused garbage to appear on the |
|||
; screen. Now filters control characters other than CR, |
|||
; TAB, and LF. Thanks to Gene Pizzetta for this suggestion. |
|||
; |
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; |
|||
; Commands: LIST and TYPE |
|||
|
|||
; ---------------------------------------------------------------- |
|||
; |
|||
; Command: LIST |
|||
; Function: Print out specified file on the LST: Device |
|||
; Forms: |
|||
; LIST Do form feed |
|||
; LIST <afn> Print file(s) (NO Paging) |
|||
; Notes: |
|||
; The flags which apply to TYPE do not take effect with LIST |
|||
; The tab expansion code is required for LST: output. |
|||
|
|||
if liston |
|||
list: |
|||
ld a,(fcb1+1) ; Get filename or ' ' from command |
|||
ld (prflg),a ; List flag (A can't be 0) |
|||
cp ' ' ; Null command? |
|||
jp z,lstff ; Yes, do form feed and return |
|||
jr type0 ; No, send file to LST: |
|||
endif ;liston |
|||
|
|||
; -------------------------------------------------------------------- |
|||
; |
|||
; Command: TYPE |
|||
; Function: Print out specified file on the CON: Device |
|||
; Forms: |
|||
; TYPE <afn> Print file |
|||
; TYPE <afn> P Print file with paging flag |
|||
; Notes: |
|||
; The flag PGDFLG defines the letter which toggles the paging |
|||
; facility (P in the forms section above) |
|||
; The flag PGDFLT determines if TYPE is to page by default |
|||
; (PGDFLT=TRUE if TYPE pages by default); combined with |
|||
; PGDFLG, the following events occur -- |
|||
; If PGDFLT = TRUE, PGDFLG turns OFF paging |
|||
; If PGDFLT = FALSE, PGDFLG turns ON paging |
|||
|
|||
type: |
|||
if liston |
|||
xor a ; Turn off printer flag |
|||
ld (prflg),a ; Set flag |
|||
endif ; Liston |
|||
|
|||
; Entry point for list function (LIST) |
|||
|
|||
type0: call retsave ; Save return address |
|||
ld a,(fcb2+1) ; Get page flag from command |
|||
ld (pgflg),a ; Store it |
|||
ld a,1 ; Select dir files |
|||
call getdir ; Allow ambiguous files (HL points to buffer) |
|||
jp z,noflerr ; EH no files error |
|||
ld a,(lins) ; Set line count |
|||
ld (pagcnt),a |
|||
jr typex1 |
|||
|
|||
; Entry point for successive files |
|||
|
|||
typex0: pop hl ; Balance stack for skip |
|||
pop hl ; ..to next file command (^X) |
|||
typex: ld hl,(nxtfile) ; Get ptr to next file |
|||
ld a,(hl) ; Any files? |
|||
or a |
|||
jp z,exit |
|||
|
|||
if liston |
|||
ld a,(prflg) ; Check for lst: output |
|||
or a ; 0=type |
|||
jr z,typex1 |
|||
ld a,cr ; Bol on printer |
|||
call lcout |
|||
call lstff ; Form feed the printer |
|||
; fall thru |
|||
endif ; Liston |
|||
|
|||
; Entry point for 1st file |
|||
typex1: ld de,fcb1+1 ; Copy into fcb1 |
|||
ld b,11 ; 11 bytes |
|||
call blkmov |
|||
ld (nxtfile),hl ; Set ptr to next file |
|||
call initfcb1 ; Init fcb1 |
|||
ld c,15 ; Open file |
|||
call bdos |
|||
inc a ; Set error flag |
|||
jp z,noflerr ; EH no files error |
|||
ld a,cr ; New line |
|||
call lcout |
|||
ld a,lf |
|||
call lcout |
|||
ld bc,080h ; Set char position and tab count |
|||
; (b=0=tab, c=080h=char position) |
|||
|
|||
; Main loop for loading next block |
|||
|
|||
type2: ld a,c ; Get char count |
|||
cp 80h |
|||
jr c,type3 |
|||
call break |
|||
push bc ; Read next block |
|||
ld de,fcb1 ; Pt to fcb |
|||
ld c,20 ; Read record |
|||
call bdos |
|||
or a ; Set flags |
|||
pop bc |
|||
jr nz,typex ; End of file? |
|||
ld c,0 ; Set char count |
|||
ld hl,tbuff ; Pt to first char |
|||
|
|||
; Main loop for printing chars in tbuff |
|||
|
|||
type3: ld a,(hl) ; Get next char |
|||
and 7fh ; Mask out msb |
|||
cp 1ah ; End of file (^z)? |
|||
jr z,typex ; Next file if so |
|||
|
|||
; Output char to CON: or LST: device with tabulation |
|||
|
|||
cp cr ; Reset tab count? |
|||
jr z,type4 |
|||
cp lf ; Reset tab count? |
|||
jr z,type4 |
|||
cp tab ; Tab? |
|||
jr z,type5 |
|||
cp ' ' ; Skip other ctls. |
|||
jr c,type6 |
|||
|
|||
; Output char and increment char count |
|||
|
|||
call lcout ; Output char |
|||
inc b ; Increment tab count |
|||
jr type6 |
|||
|
|||
; Output <CR> or <LF> and reset tab count |
|||
|
|||
type4: call lcout ; Output <cr> or <lf> |
|||
ld b,0 ; Reset tab counter |
|||
jr type6 |
|||
|
|||
; Tabulate |
|||
|
|||
type5: ld a,' ' ; <sp> |
|||
call lcout |
|||
inc b ; Incr pos count |
|||
ld a,b |
|||
and 7 |
|||
jr nz,type5 |
|||
|
|||
; Continue processing |
|||
|
|||
type6: |
|||
inc c ; Increment char count |
|||
inc hl ; Pt to next char |
|||
jr type2 |
|||
|
|||
; Send a formfeed to LST:. Assumes PRFLG <> 0. |
|||
|
|||
lstff: |
|||
ld a,ff ; formfeed |
|||
; fall thru |
|||
|
|||
; Send output to LST: or CON:, as per the flag |
|||
; Return with Z if abort |
|||
|
|||
lcout: push hl ; Save regs |
|||
push bc |
|||
ld e,a ; Char in e |
|||
ld c,2 ; Output to con: |
|||
|
|||
if liston |
|||
prflg equ $+1 ; Pointer for in-the-code modification |
|||
ld a,0 ; 2nd byte is the print flag |
|||
or a ; 0=type |
|||
jr z,lc1 |
|||
ld c,5 ; Output to lst: |
|||
endif ; Liston |
|||
|
|||
lc1: push de ; Save char |
|||
call bdos ; Output char in e |
|||
pop de ; Get char |
|||
ld a,e |
|||
cp lf ; New line? |
|||
jr nz,lc2 ; No, return |
|||
call break ; Check for abort |
|||
jp z,typex0 ; Skip if ^X |
|||
|
|||
if liston |
|||
ld a,(prflg) ; Output to lst:? |
|||
or a ; Nz = yes |
|||
jr nz,lc2 |
|||
endif ; Liston |
|||
|
|||
; New line, so check for paging |
|||
|
|||
ld hl,pagcnt |
|||
dec (hl) |
|||
jr nz,lc2 ; Jump if not end of page |
|||
ld a,(lins) |
|||
ld (hl),a ; Reset counter |
|||
pgflg equ $+1 ; Pointer to in-the-code buffer |
|||
ld a,0 ; 2nd byte is the paging flag |
|||
cp pgdflg ; Page default override option wanted? |
|||
|
|||
if pgdflt ; If paging is default |
|||
jr z,lc2 ; Pgdflg means no paging |
|||
else |
|||
jr nz,lc2 ; Pgdflg means page |
|||
endif ; Pgdflt |
|||
|
|||
push hl ; Save hl |
|||
call print |
|||
db cr,lf,' Typing',' '+80h |
|||
ld hl,fcb1+1 ; Print file name |
|||
call prfn |
|||
call dash ; Print dash |
|||
call conin ; Get input |
|||
pop hl ; Restore hl |
|||
call break1 ; Set Z flag or abort |
|||
push af ; Save results |
|||
|
|||
if typecls and clson |
|||
call cls ; Clear between screens |
|||
else |
|||
call crlf |
|||
endif |
|||
|
|||
pop af ; Get results |
|||
jp z,typex0 ; Control-X, so skip to next file |
|||
cp ctrlz ; If Control-Z, |
|||
jr nz,lc2 |
|||
ld a,pgdflg ; Switch to non-default |
|||
ld (pgflg),a ; ..paging mode |
|||
lc2: pop bc ; Restore regs |
|||
pop hl |
|||
ret |
|||
|
|||
; Storage for line counter |
|||
|
|||
pagcnt: |
|||
ds 1 |
|||
|
|||
; End RCPLT.LIB |
|||
|
|||
@ -0,0 +1,130 @@ |
|||
page |
|||
|
|||
; Library: RCPPROT for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.1 |
|||
; Date: August 12, 1989 |
|||
; Changes: Now responds dynamically to QUIET flag, eliminating "noise." |
|||
|
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; |
|||
; Command: PROT |
|||
; Function: To set the attributes of a file (R/O, SYS, and ARC) |
|||
; Form: PROT afn RSAI |
|||
; Comments: If R, S, or A are omitted, the file is made R/W, DIR, or |
|||
; modified, respectively. R, S, A, and I may be in any order. |
|||
; If I is present, Inspection is enabled. |
|||
|
|||
att: |
|||
call retsave |
|||
call dirchek ; Test bad directory |
|||
xor a ; Set no inspect |
|||
ld (inspect),a |
|||
ld hl,0 ; Set r/o and sys attributes off |
|||
ld c,0 ; Set Arc attribute off |
|||
ld de,fcb2+1 ; Pt to attributes |
|||
ld b,4 ; 4 chars max |
|||
att1: |
|||
ld a,(de) ; Get char |
|||
inc de ; Pt to next |
|||
cp 'I' ; Inspect? |
|||
jr z,atti |
|||
cp 'R' ; Set r/o? |
|||
jr z,attr |
|||
cp 'S' ; Set sys? |
|||
jr z,atts |
|||
cp 'A' |
|||
jr z,atta |
|||
att2: |
|||
djnz att1 |
|||
jr att3 |
|||
atti: |
|||
ld (inspect),a ; Set flag |
|||
jr att2 |
|||
attr: |
|||
ld h,a ; Save R/O flag |
|||
jr att2 |
|||
atts: |
|||
ld l,a ; Save SYS flag |
|||
jr att2 |
|||
atta: |
|||
ld c,a ; Save ARC |
|||
jr att2 |
|||
att3: |
|||
ld (fatt2),hl ; Save file attributes |
|||
ld a,c |
|||
ld (fatt1),a ; Save Arc attribute |
|||
ld a,1 ; Select dir and sys files |
|||
call getdir ; Load directory |
|||
jp z,noflerr ; Tell error handler no file |
|||
jr att5 |
|||
att4: |
|||
ld hl,(nxtfile) ; Pt to next file |
|||
ld a,(hl) ; End of list? |
|||
or a |
|||
jp z,exit |
|||
call crlf ; New line |
|||
att5: call break ; Check for possible abort |
|||
call qplug ; Turn off output if quiet |
|||
push hl ; Save ptr to current file |
|||
call prfn ; Print its name |
|||
ld (nxtfile),hl ; Save ptr to next file |
|||
call print |
|||
db ' Set to R','/'+80h |
|||
ld hl,(fatt2) ; Get attributes |
|||
ld c,'W' ; Assume r/w |
|||
ld a,h ; Get r/o bit |
|||
or a |
|||
jr z,att6 |
|||
ld c,'O' ; Set r/o |
|||
att6: ld a,c ; Get char |
|||
call conout |
|||
ld a,l ; Get sys flag |
|||
or a ; Set flag |
|||
jr z,att7 |
|||
call print |
|||
db ', SY','S'+80h |
|||
att7: ld a,(fatt1) |
|||
or a |
|||
jr z,att7a |
|||
call print |
|||
db ', AR','C'+80h |
|||
att7a: call unplug ; Turn output on |
|||
inspect equ $+1 ; Ptr for in-the-code modification |
|||
ld a,0 ; Get inspect flag |
|||
or a ; Z=no |
|||
pop hl ; Get ptr to current file |
|||
jr z,att8 |
|||
call eraq1 ; Ask for y/n |
|||
jr nz,att4 ; Advance to next file if not y |
|||
att8: ld de,fcb1+1 ; Copy into fcb1 |
|||
ld b,11 ; 11 bytes |
|||
call blkmov |
|||
ex de,hl |
|||
dec hl ; Pt to archive byte |
|||
fatt1 equ $+1 |
|||
ld a,0 |
|||
call attset |
|||
dec hl ; Pt to sys byte |
|||
fatt2 equ $+1 ; Ptr for in-the-code modification |
|||
ld de,0 ; Get attributes |
|||
ld a,e ; Get sys flag |
|||
call attset ; Set attribute correctly |
|||
dec hl ; Pt to r/o byte |
|||
ld a,d ; Get r/o flag |
|||
call attset |
|||
ld de,fcb1 ; Pt to fcb |
|||
ld c,30 ; Set attributes |
|||
call bdos |
|||
jp att4 |
|||
attset: |
|||
res 7,(hl) ; Clear attribute |
|||
or a |
|||
ret z ; 0=clear attribute |
|||
set 7,(hl) ; Set attribute |
|||
ret |
|||
|
|||
; End RCPPROT.LIB |
|||
|
|||
@ -0,0 +1,49 @@ |
|||
page |
|||
|
|||
; Library: RCPQUIET for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.1 |
|||
; Date: August 6, 1989 |
|||
; Changes: Now "Q R[eset]" and "Q S[et]" just reset and set quiet status |
|||
; without showing it, and Q alone (or with any other character, |
|||
; e.g., "Q ?") always just shows status. |
|||
; Forms: |
|||
; Q - Display quiet flag (always) |
|||
; Q s - Set quiet flag ON |
|||
; Q r - Set quiet flag OFF |
|||
; |
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; |
|||
; Command: Q |
|||
; Function: Set the Quiet flag on or off |
|||
; Comments: If QQUIET equate is true, then RCP does not report |
|||
; quiet status with the Q command. |
|||
; Forms: |
|||
; Q - Display quiet flag (if QQUIET false) |
|||
; Q s - Set quiet flag ON |
|||
; Q r - Set quiet flag OFF |
|||
|
|||
quset: |
|||
ld a,(fcb1+1) ; Get first char |
|||
ld b,1 ; Prepare to turn on |
|||
cp 'S' ; S-et quiet (ON) |
|||
jr z,quset1 |
|||
ld b,0 ; Prepare to turn off |
|||
cp 'R' ; R-eset quiet (OFF) |
|||
jr nz,qmsg ; Neither S nor R, so display |
|||
quset1: |
|||
ld a,b |
|||
ld (quiet),a |
|||
ret |
|||
|
|||
qmsg: |
|||
; Print Quiet Flag Message |
|||
|
|||
ld a,(quiet) |
|||
jp tella ; Say " On" or " Off" and return |
|||
|
|||
; End RCPQUIET.LIB |
|||
|
|||
|
|||
@ -0,0 +1,108 @@ |
|||
page |
|||
|
|||
; Library: RCPR for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.5 |
|||
; Date: August 30, 1989 |
|||
; Changes: Minor bug fix as suggested by Howard Goldstein. |
|||
; |
|||
; Version: 1.4 |
|||
; Date: August 26, 1989 |
|||
; Changes: Now performs reset 37 for ALL drives under CP/M 2.2 or ZRDOS |
|||
; to ensure that fast fixed disks are reset under ZRDOS, then |
|||
; exits with reset 13 to compensate for bugs in ZRDOS/CP/M 2.2 |
|||
; reset 37. Still resets individual drives selectively under |
|||
; CP/M Plus and ZS/ZDDOS. |
|||
|
|||
; Version: 1.3 |
|||
; Date: August 11, 1989 |
|||
; Changes: Now responds dynamically to QUIET flag, eliminating "noise." |
|||
; Now performs reset 37 in ALL cases, reset 13 as well if not |
|||
; CP/M Plus or ZSDOS (per suggestion by Howard Goldstein). |
|||
|
|||
; Version: 1.2 |
|||
; Date: December 30, 1988 |
|||
; Changes: Now resets single drives under Z3PLUS. |
|||
|
|||
; Version: 1.1 |
|||
; Date: September 11, 1988 |
|||
; Changes: Fixed bug which failed to detect ZRDOS. ZRDOS' function |
|||
; 37, like CP/M's, is not reliable. |
|||
|
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; |
|||
; Command: RESET |
|||
; Function: Reset the disk system |
|||
; Forms: R [d: or dir:] - ZSDOS or CP/M Plus |
|||
; R - CP/M 2.2 or ZRDOS |
|||
; Comments: ZRDOS does not require a disk system reset when disks are |
|||
; changed, but directory programs will not show the correct |
|||
; size if this is not done. It is also good practice. Since |
|||
; no warm boot is performed, the disk in drive A need not have |
|||
; the operating system on it. |
|||
; |
|||
; Under ZSDOS or CP/M Plus, individual drives may be reset, and |
|||
; if RESETSP is true, space remaining is also given. If |
|||
; the fast hard disk reset capability is enabled under ZSDOS, |
|||
; any "fast" fixed disks are also reset at this time. |
|||
; |
|||
; NOTE: It is necessary to reset a legal directory or DU when there are |
|||
; protected directories. |
|||
|
|||
reset: ld a,(quiet) |
|||
or a ; Skip message if quiet |
|||
jr nz,QReset |
|||
call print ; Report action |
|||
db ' Rese','t'+80h |
|||
QReset: call cpmver ; CP/M Plus? |
|||
jr nc,reset0 ; Yes |
|||
ld c,48 |
|||
call bdos ; ZRDOS or CP/M? |
|||
ld a,h |
|||
or a |
|||
jr nz,reset0 ; No, assume bug-free F37 |
|||
ld de,0ffffh ; Yes, reset ALL drives, both ways |
|||
ld c,37 |
|||
call bdos |
|||
ld c,13 |
|||
jp bdos ; Yes, do regular reset |
|||
|
|||
; Reset individual drive(s) |
|||
|
|||
reset0: call dirchek ; Abort with error if illegal drivespec |
|||
ld a,(fcb1) ; Use default drive? |
|||
or a |
|||
jr nz,reset1 ; No, use drive from FCB1 |
|||
ld a,(cdrv) ; Yes, get ZCPR 3.3 current drive byte |
|||
inc a ; Shift range to 1..16 |
|||
reset1: ld hl,1 ; Map drive "A:" |
|||
reset2: dec a ; Done yet? |
|||
jr z,reset3 ; Yes |
|||
add hl,hl ; No, shift vector to next drive |
|||
jr reset2 |
|||
|
|||
; Check for fixed disks |
|||
|
|||
reset3: push hl ; Save current or specified vector |
|||
ld c,39 |
|||
call bdos ; ZSDOS return fixed disks in HL |
|||
pop de ; Restore vector |
|||
ld a,d |
|||
or h ; Add any fixed disks |
|||
ld d,a |
|||
ld a,e |
|||
or l |
|||
ld e,a |
|||
ld c,37 ; Reset individual drive(s) |
|||
|
|||
if spaceon and resetsp |
|||
call bdos |
|||
jp crspace ; Show space remaining (QUIET sensitive) |
|||
else |
|||
jp bdos ; Do reset and return |
|||
endif |
|||
|
|||
; End RCPR.LIB |
|||
|
|||
@ -0,0 +1,165 @@ |
|||
page |
|||
|
|||
; Library: RCPREG for Z34RCP |
|||
; Version: 1.1 |
|||
; Date: August 11, 1989 |
|||
; Changes: Register Set, Decrement, and Increment commands now respond |
|||
; dynamically to QUIET flag, eliminating "noise." |
|||
|
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; |
|||
; Command: REG |
|||
; Function: Manipulate Memory Registers |
|||
; |
|||
; Forms: |
|||
; REG D or REG <-- Display 10 Register Values |
|||
; REG Mreg <-- Decrement Register Value |
|||
; REG Preg <-- Increment Register Value |
|||
; REG Sreg value <-- Set Register Value |
|||
; |
|||
; Vers 2.1 Joe Wright |
|||
; |
|||
; REG reg <-- Display a single register value |
|||
; |
|||
; REG numbers now range from 0 to 31, although only the first ten are |
|||
; displayed with REG D. |
|||
; |
|||
; REG now treats the program error byte as register E. |
|||
; |
|||
register: |
|||
ld de,fcb1+2 ; Pt to first arg |
|||
ld a,(de) ; Get possible digit |
|||
call regptr ; Pt hl to potential register |
|||
dec de ; Point to command |
|||
ld a,(de) |
|||
cp 'S' ; Set? |
|||
jr z,rset |
|||
cp 'P' ; Plus? |
|||
jr z,rinc |
|||
cp 'M' ; Minus? |
|||
jr z,rdec |
|||
cp ' ' |
|||
jr z,rshow |
|||
cp 'D' |
|||
jr z,rshow |
|||
call regptr |
|||
jp regout |
|||
|
|||
; Increment register value |
|||
; HL pts to memory register on input |
|||
|
|||
rinc: inc (hl) ; Increment it |
|||
jr Qregout ; Print result |
|||
|
|||
; Decrement register value |
|||
; HL pts to memory register on input |
|||
|
|||
rdec: dec (hl) ; Decrement value |
|||
jr Qregout ; Print result |
|||
|
|||
; Show first ten registers and Program Error byte |
|||
|
|||
rshow: call rshow10 |
|||
ld hl,z3msg+6 |
|||
jp regout |
|||
|
|||
rshow10:xor a ; Select register 0 |
|||
ld b,a ; Counter set to 0 in b |
|||
call regp1 ; Hl pts to register 0 |
|||
rshow1: ld a,b ; Get counter value |
|||
cp 10 ; First ten registers |
|||
ret z ; Exit if done |
|||
push bc ; Save counter |
|||
push hl ; Save pointer |
|||
call regout ; Print register value |
|||
pop hl ; Get pointer |
|||
pop bc ; Get counter |
|||
inc b ; Increment counter |
|||
ld a,b ; Check for new line |
|||
and 3 |
|||
call z,crlf ; Newline after fourth display |
|||
inc hl ; Pt to next register |
|||
jr rshow1 |
|||
|
|||
; Set register value |
|||
; HL pts to register on input |
|||
|
|||
rset: |
|||
ld de,fcb2+1 ; Pt to value |
|||
call de2bin ; Eval string at de to binary in b |
|||
ld (hl),b ; Set value |
|||
|
|||
; Enter with HL pointing to the register. HL is maintained. |
|||
; |
|||
qregout:ld a,(quiet) |
|||
or a |
|||
ret nz |
|||
regout: call print |
|||
db ' Reg',' '+80h |
|||
ld de,z3msg+30h ; Register 0 |
|||
sbc hl,de ; Register number in hl |
|||
ld a,l |
|||
cp 32 ; A numbered register? |
|||
jr c,rego0 ; Yep |
|||
call print |
|||
db ' ','E'+80h |
|||
jr rego1 ; Report |
|||
|
|||
rego0: push hl |
|||
push de |
|||
ld b,0 ; Suppress zeros |
|||
call decdsp2 ; Report register number |
|||
pop de |
|||
pop hl |
|||
rego1: add hl,de ; Hl points to register again |
|||
call print |
|||
db ' =',' '+80h |
|||
ld l,(hl) |
|||
xor a |
|||
ld h,a |
|||
ld b,a ; Suppress leading zeros |
|||
jp decdsp3 ; Display value |
|||
|
|||
; Evaluate decimal string at DE to binary in B |
|||
|
|||
de2bin: ld b,0 ; Init value to zero |
|||
de2b: ld a,(de) ; Get this digit |
|||
inc de ; Pt to next |
|||
sub '0' ; Convert to binary |
|||
ret c ; A space, finished |
|||
cp 10 ; Range? |
|||
ret nc ; Not decimal, finished |
|||
ld c,a ; Digit in c |
|||
ld a,b ; Multiply old by 10 |
|||
add a,a ; *2 |
|||
add a,a ; *4 |
|||
add a,b ; *5 |
|||
add a,a ; *10 |
|||
add a,c ; Add in new digit |
|||
ld b,a ; Result in b |
|||
jr de2b ; Again |
|||
|
|||
; Set HL to point to memory register whose index is pted to by HL |
|||
; On input, A contains register char |
|||
; On output, HL = address of memory register (reg 0 assumed if error) |
|||
|
|||
regptr: ld hl,z3msg+6 ; The e register |
|||
cp 'E' |
|||
ret z |
|||
push de |
|||
call de2bin ; Get register number in b |
|||
pop de |
|||
ld a,b |
|||
cp 32 ; Range 0-31 |
|||
ld a,0 |
|||
jr nc,regp1 ; Out of range, use 0 |
|||
ld a,b ; Value in a |
|||
regp1: ld hl,z3msg+30h ; Pt to memory registers |
|||
add a,l ; Pt to proper register |
|||
ld l,a |
|||
ret ; No chance of crossing page boundary |
|||
|
|||
; End RCPREG.LIB |
|||
|
|||
@ -0,0 +1,100 @@ |
|||
page |
|||
|
|||
; Library: RCPREN for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; |
|||
; Command: REN |
|||
; Function: To change the name of an existing file |
|||
; Forms: |
|||
; LEFTRIGHT false: |
|||
; REN <New [du: or dir:]ufn>=<Old [du: or dir:]ufn> |
|||
; LEFTRIGHT true: |
|||
; REN <Old [du: or dir:]ufn> <New [du: or dir:]ufn> |
|||
; LEFTRIGHT and TESTEQ both true: |
|||
; Either of the above forms may be used. |
|||
|
|||
ren: |
|||
call retsave |
|||
call dirchek ; Test bad dirspec |
|||
|
|||
if leftright |
|||
call fcbswap ; Exchange command line fcb's |
|||
endif |
|||
; |
|||
; STEP 1: See if old name is ambiguous |
|||
; |
|||
ld hl,fcb2+1 ; Can't be ambiguous |
|||
call ambchk1 |
|||
; |
|||
; STEP 2: Log into user area |
|||
; |
|||
; If dirspec given at old name, use it |
|||
; else use dirspec (or default) given at new name. |
|||
|
|||
ld hl,fcb1 ; Pt to new name |
|||
push hl |
|||
ld de,fcb2 ; Pt to old name |
|||
push de ; Save ptr |
|||
ld a,(de) ; Test if dirspec issued |
|||
or a ; ..at old name |
|||
jr z,ren1 ; No, use user at new name |
|||
ld (hl),a ; Stuff drive into new file |
|||
ld a,(fcb2+13) ; Yes, log to user area |
|||
call setusr ; ..of old name |
|||
jr ren2 |
|||
; |
|||
; Use dirspec at new name (none given at old name) |
|||
; |
|||
ren1: |
|||
ld a,(hl) ; Stuff drive of new name |
|||
ld (de),a ; ..into old name |
|||
call logusr ; Log to user at new name |
|||
ren2: |
|||
; |
|||
; STEP 3: See if old file is R/O |
|||
; |
|||
pop de ; Restore ptr to old FCB |
|||
push de ; Save it again |
|||
ld c,17 ; Look for old file |
|||
call bdos |
|||
inc a |
|||
jr z,rnxit |
|||
call getsbit ; Match found, get ptr to entry in tbuff |
|||
ex de,hl ; Hl pts to entry |
|||
inc hl ; Pt to fn |
|||
call rotest ; See if file is r/o |
|||
jr nz,rnxit1 ; Abort if so |
|||
; |
|||
; STEP 4: See if new file already exists |
|||
; EXTEST performs a number of checks: |
|||
; 1) Ambiguity |
|||
; 2) R/O |
|||
; 3) If file exists and not R/O, permission to delete |
|||
; |
|||
call extest |
|||
jr z,rnxit1 ; R/o or no permission |
|||
; |
|||
; STEP 5: Exchange file name fields for rename |
|||
; |
|||
pop de ; Pt to old |
|||
pop hl ; Pt to new |
|||
push hl ; Save ptr |
|||
ld b,12 ; 12 bytes |
|||
call iswap1 |
|||
; |
|||
; STEP 6: Rename the file |
|||
; |
|||
pop de ; Get ptr to FCB |
|||
ld c,23 ; Rename |
|||
call bdos |
|||
inc a ; Set zero flag if error |
|||
rnxit: |
|||
jp z,noflerr ; EH print no source file message |
|||
rnxit1: |
|||
jp exit |
|||
|
|||
; End RCPREN.LIB |
|||
|
|||
|
|||
@ -0,0 +1,163 @@ |
|||
page |
|||
|
|||
; Library: RCPSP for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.2 |
|||
; Date: August 11, 1989 |
|||
; Changes: CRSPACE does nothing if QUIET is true. |
|||
; |
|||
; Author: Carson Wilson |
|||
; Version: 1.1 |
|||
; Date: December 30, 1988 |
|||
; Changes: Calls CPMVER common routine. |
|||
; Sets DMA to TBUFF for CP/M Plus in case we chained to SP. |
|||
|
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; |
|||
; Command: SP |
|||
; Function: Shows space remaining on designated drive |
|||
; Syntax: SP [DIR:|DU:] |
|||
; Comments: This code can be called by several other RCP commands so that |
|||
; they can show the space remaining on the disk after their |
|||
; operation. |
|||
|
|||
; Now works with CP/M Plus. |
|||
|
|||
if [erasp or cpsp or dirsp] |
|||
crspace: ; Used to call space after other subroutines |
|||
ld a,(quiet) |
|||
or a ; Skip if we're being quiet |
|||
ret nz |
|||
call crlf ; Start new line |
|||
jr space0 ; Skip directory check |
|||
endif ;[erasp or cpsp or dirsp] |
|||
space: |
|||
call dirchek ; Abort to EH on bad dirspec |
|||
space0: ld a,(fcb1) ; Determine requested drive |
|||
or a ; If drive explicitly selected |
|||
jr nz,space1 ; ..then skip |
|||
ld a,(cdrv) ; Get current drive from ZCPR 3.4 |
|||
inc a ; Shift to range 1..16 |
|||
|
|||
space1: |
|||
dec a ; Shift to range 0..15 |
|||
ld e,a ; Save in E for selecting disk below |
|||
add a,'A' ; Convert to letter and |
|||
ld (seldrv),a ; save in message string below |
|||
ld c,14 ; BDOS select disk function |
|||
call bdos ; Not needed if no drive selected, but smallest |
|||
; ..possible code size this way. |
|||
|
|||
; Here we extract the following disk parameter information from the disk |
|||
; parameter block (DPB): |
|||
; BLKSHF: block shift factor (1 byte) |
|||
; BLKMAX: max number of blocks on disk (2 bytes) |
|||
|
|||
call cpmver ; What BDOS is running? |
|||
jr nc,isplus |
|||
ld c,31 ; BDOS get disk parameters function |
|||
call bdos |
|||
inc hl ; Advance to block shift factor byte |
|||
inc hl |
|||
ld a,(hl) ; Get value and |
|||
ld (blkshf),a ; ..save it in code below |
|||
inc hl ; Advance to max block number word |
|||
inc hl |
|||
inc hl |
|||
ld e,(hl) ; Get value into HL |
|||
inc hl |
|||
ld d,(hl) |
|||
inc de ; Add 1 for max number of blocks |
|||
|
|||
; Compute amount of free space left on disk |
|||
|
|||
dfree: |
|||
ld c,27 ; BDOS get allocation vector function |
|||
push de ; Save BLKMAX value |
|||
call bdos ; Get allocation vector into HL |
|||
ld b,h ; Copy allocation vector to BC |
|||
ld c,l |
|||
pop hl ; Restore BLKMAX value to HL |
|||
ld de,0 ; Inititialize count of free blocks |
|||
|
|||
; At this point we have |
|||
; BC = allocation vector address |
|||
; DE = free block count |
|||
; HL = number of blocks on disk |
|||
|
|||
free1: push bc ; Save allocation address |
|||
ld a,(bc) ; Get bit pattern of allocation byte |
|||
ld b,8 ; Set to process 8 blocks |
|||
free2: rla ; Rotate allocated block bit into carry flag |
|||
jr c,free3 ; If set (bit=1), block is allocated |
|||
inc de ; If not set, block is not allocated, so |
|||
; ..increment free block count |
|||
free3: ld c,a ; Save remaining allocation bits in C |
|||
dec hl ; Count down number of blocks on disk |
|||
ld a,l ; See if we are down to zero |
|||
or h |
|||
jr z,free4 ; Branch if no more blocks to check |
|||
ld a,c ; Get back current allocation bit pattern |
|||
djnz free2 ; Loop through 8 bits |
|||
pop bc ; Get pointer to allocation vector |
|||
inc bc ; Point to next allocation byte |
|||
jr free1 ; Continue by processing next allocation byte |
|||
|
|||
free4: pop bc ; Clean up stack |
|||
ex de,hl ; Free block count to HL |
|||
blkshf equ $+1 ; Pointer for in-the-code modification |
|||
ld a,0 ; Get block shift factor |
|||
sub 3 ; Convert to log base 2 of K per block |
|||
jr z,free6 ; Done if single density (1k per block) |
|||
|
|||
; Convert for blocks of more than 1K each |
|||
|
|||
free5: add hl,hl |
|||
dec a |
|||
jr nz,free5 |
|||
|
|||
; At this point HL = amount of free space on disk in K |
|||
|
|||
; Display decimal value of HL |
|||
|
|||
free6: ld b,0 ; Initialize count of digits already printed |
|||
ld de,10000 ; Divisor in DE |
|||
call decdsp ; Print digit (or space if leading '0') |
|||
ld de,1000 |
|||
call decdsp |
|||
call decdsp3 ; Display hundreds, tens, and units |
|||
|
|||
call print |
|||
db 'k free on ' |
|||
seldrv: db 0 ; Modified above to contain drive letter |
|||
db ':'+80h |
|||
ret |
|||
|
|||
; CP/M Plus free space calculation |
|||
|
|||
isplus: ld de,tbuff ; We may have chained to SP |
|||
call setdma |
|||
ld a,(seldrv) ; Get drive letter |
|||
sub 'A' ; Convert to BDOS call value |
|||
ld e,a |
|||
ld c,2eh ; Get free space call |
|||
call bdos |
|||
|
|||
; Convert 3 byte count of records to K |
|||
|
|||
ld b,3 ; Total amount to shift |
|||
c3fre1: ld hl,tbuff+2 ; Point to buffer start |
|||
rr (hl) |
|||
dec hl |
|||
rr (hl) |
|||
dec hl |
|||
rr (hl) |
|||
djnz c3fre1 |
|||
ld hl,(tbuff) ; Get free mod 65536k |
|||
jr free6 |
|||
|
|||
; End RCPSP.LIB |
|||
|
|||
|
|||
File diff suppressed because it is too large
@ -0,0 +1,54 @@ |
|||
page |
|||
|
|||
; Library: RCPWHL for Z34RCP |
|||
; Author: Carson Wilson |
|||
; Version: 1.0 |
|||
; Date: June 15, 1988 |
|||
; |
|||
; Command: WHL |
|||
; Function: Set the Wheel Byte on or off |
|||
; Comments: |
|||
; |
|||
; If WHLQUIET equate is true, then RCP does not report wheel status with WHL |
|||
; command. |
|||
; |
|||
; Forms: |
|||
; WHL -- Report Wheel Status |
|||
; WHL password -- Set Wheel ON if password is correct |
|||
; -- Set Wheel OFF if password incorrect |
|||
whl: ld hl,fcb1+1 ; Pt to first char |
|||
ld a,(hl) ; Get it |
|||
cp ' ' |
|||
jr z,whlmsg ; Report wheel status if no password |
|||
ld de,whlpass |
|||
ld b,8 ; Check 8 chars |
|||
call comp ; Compare |
|||
jr nz,whloff ; Set wheel off if incorrect password |
|||
|
|||
; Turn ON wheel byte |
|||
|
|||
ld a,0ffh ; Turn on wheel byte |
|||
jr whlset |
|||
|
|||
; Turn OFF wheel byte |
|||
|
|||
whloff: xor a ; Turn off wheel byte |
|||
whlset: ld hl,(z3whl) ; Get wheel address from ENV |
|||
ld (hl),a ; Set wheel byte |
|||
|
|||
if whlquiet |
|||
ret ; No report if WHLQUIET |
|||
endif |
|||
|
|||
; Print Wheel Byte Message |
|||
|
|||
whlmsg: call getwhl |
|||
jp tella ; Say " On" or " Off" |
|||
|
|||
; Wheel password defined from SYSRCP.LIB file |
|||
|
|||
db 'Z'-'@' ; Leading ^Z to block attempt to type RCP file |
|||
whlpass:wpass ; Use macro |
|||
|
|||
; End RCPWHL.LIB |
|||
|
|||
Binary file not shown.
@ -0,0 +1,105 @@ |
|||
; |
|||
; Library: Z34CMN.LIB |
|||
; Author: Carson Wilson <crw> |
|||
; Version: 1.2 |
|||
; Date: 16 June 1988 |
|||
; Changes: Renamed CRT0 to LINS for NZCOM compatibility. |
|||
; Added CUSR " " " |
|||
|
|||
; Author: Carson Wilson <crw> |
|||
; Version: 1.1 |
|||
; Date: 12 June 1988 |
|||
; Changes: Added CDRV for various Z34RCP commands. |
|||
; Added CRT0 for Z34RCP TYPE command. |
|||
; Added Z3TCAP and CLRSCR for Z34RCP CLS command. |
|||
; Added QUIET for ZCPR34 time in prompt. |
|||
; Added RSDMSG for ZCPR34 time in prompt. |
|||
|
|||
; Library: Z34CMN.LIB |
|||
; Author: Joe Wright |
|||
; Date: 23 March 1988 |
|||
|
|||
; 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+0ch ; Address of RCP |
|||
rcps equ yes ; Used as existence test, not size |
|||
|
|||
fcp equ z3env+12h ; Address of FCB |
|||
fcps equ yes ; Used as existence test, not size |
|||
|
|||
z3ndir equ z3env+15h ; Address of NDR |
|||
z3ndirs equ yes ; Used as existence test, not size |
|||
|
|||
quiet equ z3env+28h ; Quiet flag address <crw> |
|||
|
|||
z3whl equ z3env+29h ; Wheel byte address |
|||
z3whls equ yes ; There is a wheel |
|||
|
|||
lins equ z3env+33h ; CRT text lines address <crw> |
|||
|
|||
ccp equ z3env+3fh ; CCP entry |
|||
ccps equ z3env+41h ; Size |
|||
|
|||
dos equ z3env+42h ; DOS entry (+6) |
|||
doss equ z3env+44h ; Size |
|||
|
|||
bio equ z3env+45h ; BIO entry |
|||
|
|||
z3tcap equ z3env+80h ; TCAP address <crw> |
|||
|
|||
clrscr equ z3env+97h ; Clear screen string address <crw> |
|||
|
|||
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 |
|||
|
|||
cusr equ z3msg+2eh ; Current user |
|||
cdrv equ z3msg+2fh ; Current drive <crw> |
|||
|
|||
rsdmsg equ z3msg+3ah ; Reserved bytes <crw> |
|||
|
|||
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 |
|||
|
|||
|
|||
Binary file not shown.
@ -0,0 +1,122 @@ |
|||
|
|||
; Z33MAC.LIB : Macros for use with ZCPR33 |
|||
|
|||
; General purpose macros |
|||
|
|||
putreg macro |
|||
push hl ; Save registers in order |
|||
push de |
|||
push bc |
|||
endm |
|||
|
|||
getreg macro |
|||
pop bc ; Restore registers in order |
|||
pop de |
|||
pop hl |
|||
endm |
|||
|
|||
swap macro |
|||
rrca ; Exchange nibbles |
|||
rrca |
|||
rrca |
|||
rrca |
|||
endm |
|||
|
|||
;---------------------------------------- |
|||
|
|||
; Macro for forming option bytes |
|||
|
|||
; This macro generates a byte with bits corresponding to up to 8 option |
|||
; flags. The bits are filled in the order of the parameters and are right |
|||
; justified in the byte. |
|||
|
|||
optflag macro f1,f2,f3,f4,f5,f6,f7,f8 |
|||
|
|||
flag defl 0 ;; initial value |
|||
|
|||
irp temp,<f1,f2,f3,f4,f5,f6,f7,f8> |
|||
|
|||
if not nul temp |
|||
flag defl flag shl 1 |
|||
if temp |
|||
flag defl flag or 1 |
|||
endif ;;temp |
|||
endif ;;not nul temp |
|||
|
|||
endm ;; irp |
|||
|
|||
defb low flag |
|||
|
|||
endm ;; optflag |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; Command table entry definition macro |
|||
|
|||
; Macro to form an entry for one command in the table. The first parameter is |
|||
; the name to be used for the command (no quotes); the second parameter is the |
|||
; flag that indicates whether or not the command is to be enabled; the third |
|||
; parameter is the wheel control flag; and the last parameter is the jump |
|||
; address to the code that carries out the command. The command names are |
|||
; automatically padded out to the correct length (they will be truncated and |
|||
; an error message will result if a command name is too long). The characters |
|||
; in the command name are automatically converted to upper case. |
|||
|
|||
command macro cmdname,enableflag,wheelflag,address |
|||
|
|||
if enableflag ;; Generate command only if enabled |
|||
|
|||
whlmask defl wheelflag ;; Initialize variables |
|||
count defl cmdsize ;; Initialize to size of each command name |
|||
|
|||
irpc char,cmdname ;; Repeat over letters in command name |
|||
|
|||
count defl count - 1 ;; Count down characters in name |
|||
|
|||
if [ count lt cmdsize ] |
|||
|
|||
;; If character is lower case, convert to upper case |
|||
|
|||
if [ '&char' ge 'a' ] and [ '&char' le 'z' ] |
|||
|
|||
if whlmask |
|||
defb [ '&char' and 5fh ] + 80h |
|||
else ;;not whlmask |
|||
defb [ '&char' and 5fh ] |
|||
endif ;;whlmask |
|||
|
|||
else ;;not lower case |
|||
|
|||
if whlmask |
|||
defb '&char' + 80h ;; If controlled by wheel, set high bit |
|||
else ;;not whlmask |
|||
defb '&char' ;; If not restricted, leave high bit clear |
|||
endif ;;whlmask |
|||
|
|||
endif ;;lower case |
|||
|
|||
endif ;;[ count lt cmdsize ] |
|||
|
|||
whlmask defl false ;; Turn off high-bit setting after first char |
|||
|
|||
endm ;irpc |
|||
|
|||
;; Pad command name with blanks |
|||
|
|||
if [ count gt cmdsize ] ;; If we underflowed |
|||
*** Command name "&cmdname" is too long / truncated *** |
|||
else |
|||
rept count |
|||
defb ' ' |
|||
endm |
|||
endif ;[ count gt cmdsize ] |
|||
|
|||
dw address ;; Dispatch address for command |
|||
|
|||
endif ;enable |
|||
|
|||
endm ;command |
|||
|
|||
; End Z33MAC.LIB |
|||
|
|||
|
|||
@ -0,0 +1,515 @@ |
|||
|
|||
; File: Z34RCP.LIB |
|||
; Description: Resident Command Package (RCP) for ZCPR34 |
|||
; Version: 1.4 |
|||
; Author: Carson Wilson |
|||
; Date: October 4, 1989 |
|||
; Changes: Added PUSER0 equate suggested by Rob Friefeld. |
|||
; |
|||
; Version: 1.3 |
|||
; Author: Carson Wilson |
|||
; Date: September 29, 1989 |
|||
; Changes: Added CLED (Command Line Editor Shell) command options |
|||
; and equates. |
|||
; |
|||
; Version: 1.2 |
|||
; Author: Carson Wilson |
|||
; Date: August 11, 1989 |
|||
; Changes: Removed several "quiet" conditional assembly equates as |
|||
; we are now sensing the QUIET flag instead. |
|||
; Changed default of WHLQUIET to false. |
|||
; |
|||
; Version: 1.1 |
|||
; Author: Carson Wilson |
|||
; Date: July 10, 1989 |
|||
; Changes: Changed 'S' command name to 'SP'. |
|||
; Removed wheel protection from 'Q' command and set QQUIET |
|||
; on by default. |
|||
; Changed command order. |
|||
|
|||
; Version: 1.0 |
|||
; Author: Carson Wilson |
|||
; Date: June 15, 1988 |
|||
|
|||
; This is the configuration file for the ZCPR Version 3.4 resident command |
|||
; package. You should read through this file and set the equates according |
|||
; to the features you want to implement. Since most systems have a limited |
|||
; amount of space for the resident command package, it will probably be |
|||
; impossible to include all features. |
|||
|
|||
; If you are using an SLR or equivalent assembler, you will be prompted |
|||
; at assembly time for which commands to include in the RCP. |
|||
|
|||
;============================================================================= |
|||
; |
|||
; A S S E M B L Y O P T I O N S |
|||
; |
|||
;============================================================================= |
|||
|
|||
; SLR controls whether special pseudo-ops such as ".printx" and ".accept", |
|||
; and complex macros are used at assembly time. For SLR Systems or compatible |
|||
; macro assemblers, set this equate to true. |
|||
|
|||
SLR equ false |
|||
|
|||
; RCPTYPE is the final character of the RCP name in the H(elp) command, |
|||
; and determines the order in which commands are added. |
|||
|
|||
if SLR |
|||
Y equ true |
|||
N equ false |
|||
H equ 'H' |
|||
F equ 'F' |
|||
|
|||
.accept 'Enter "F" for floppy, "H" for fixed disk version: ',rcptype |
|||
else |
|||
rcptype equ 'H' ; Floppy disk version |
|||
endif ; SLR |
|||
|
|||
; ZRL controls whether named common labels are used in the code. To create |
|||
; absolute code, modify RCPBASE.LIB to reflect your system's addresses, set |
|||
; ZRL to false and instruct your assembler to generate absolute code (either |
|||
; a .COM or .HEX file). |
|||
; |
|||
; To create a relocatable file for use with Bridger Mitchell's JetLDR or |
|||
; Joe Wright's NZCOM, you must use an assembler which recognizes named |
|||
; common blocks. If your assembler has this capability, set ZRL to true |
|||
; and instruct the assembler to generate relocatable (.REL) code. |
|||
|
|||
ZRL equ true |
|||
|
|||
;============================================================================= |
|||
; |
|||
; M A C R O S |
|||
; |
|||
;============================================================================= |
|||
|
|||
; SLR assemblers allow selection of options during assembly. |
|||
|
|||
if SLR |
|||
|
|||
select macro option default comment |
|||
.accept comment,option ; Prompt user for selection |
|||
endm |
|||
|
|||
.printx |
|||
.printx Answer "Y" to include, "N" to exclude commands: |
|||
.printx |
|||
|
|||
else |
|||
|
|||
select macro option default comment |
|||
option equ default ; Use selections from file |
|||
endm |
|||
endif ; SLR |
|||
|
|||
;============================================================================= |
|||
; |
|||
; R E S I D E N T C O M M A N D S S E L E C T I O N |
|||
; |
|||
;============================================================================= |
|||
|
|||
; Commands to include in the resident command package |
|||
|
|||
; There are some interrelations between a number of the possible resident |
|||
; commands. Some are so close (LIST and TYPE) that a single equate controls |
|||
; both functions. Others like DIR and ERA share code (both display file |
|||
; listings). It is efficient to select or deselect them together. |
|||
|
|||
; If you are using an SLR or compatible assembler, you will be prompted |
|||
; at assembly time for command selections. Otherwise, select commands to |
|||
; be included by setting each SELECT macro below to yes or no. |
|||
|
|||
select CLEDON no 'CLED - command line editor shell? ' |
|||
select CLSON yes 'CLS - clear screen? ' |
|||
select RESON yes 'R - reset disk system? ' |
|||
select SPACEON yes 'SP - show space remaining on disk? ' |
|||
|
|||
if RCPTYPE='F' ; Assemble in floppy order |
|||
select DIRON yes 'D - disk directory? ' |
|||
select ERAON yes 'ERA - erase files? ' |
|||
select ECHOON yes 'ECHO - send text to screen or printer? ' |
|||
select RENON yes 'REN - rename files? ' |
|||
select CPON yes 'CP - copy file? ' |
|||
select LTON yes 'TYPE - display file on console? ' |
|||
select POKEON yes 'POKE - set memory? ' |
|||
select PEEKON yes 'PEEK - view memory? ' |
|||
else ; Assemble in fixed-disk order |
|||
select ECHOON yes 'ECHO - send text to screen or printer? ' |
|||
select POKEON yes 'POKE - set memory? ' |
|||
select PEEKON yes 'PEEK - view memory? ' |
|||
select QUIETON yes 'Q - set or clear quiet status? ' |
|||
select DIRON yes 'D - disk directory? ' |
|||
select ERAON no 'ERA - erase files? ' |
|||
select RENON no 'REN - rename files? ' |
|||
select CPON no 'CP - copy file? ' |
|||
select LTON yes 'TYPE - display file on console? ' |
|||
endif ; RCPTYPE='F' |
|||
|
|||
if LTON |
|||
select LISTON no 'LIST - list to printer? ' |
|||
else ; allowed only if TYPE is enabled |
|||
LISTON equ no |
|||
endif |
|||
|
|||
if RCPTYPE='F' ; Assemble in floppy order |
|||
select QUIETON yes 'Q - set or clear quiet status? ' |
|||
endif |
|||
|
|||
select PROTON no 'PROT - set file attributes? ' |
|||
select NOTEON no 'NOTE - command-line comment? ' |
|||
select REGON no 'REG - set and display user registers? ' |
|||
select WHLON no 'WHL - set or clear wheel status? ' |
|||
select PORTON no 'PORT - view and set I/O ports? ' |
|||
|
|||
;============================================================================= |
|||
; |
|||
; W H E E L P R O T E C T I O N |
|||
; |
|||
;============================================================================= |
|||
|
|||
; To prevent unauthorized users from performing certain dangerous or sensitive |
|||
; operations on the computer, ZCPR34 provides the capability of disabling the |
|||
; operation of certain commands when the wheel byte is off. In ZCPR30, an |
|||
; attempt to use one of these wheel-protected commands when the wheel byte was |
|||
; off resulted in an error message. In ZCPR34 things work differently. In the |
|||
; same situation, the command simply disappears. In this way a transient |
|||
; program or extended command processor function can take over and deal with |
|||
; the attempt to use the command in a much more flexible way. |
|||
; |
|||
; Wheel-protected commands in ZCPR30 had extra code to intercept the function |
|||
; and disable it. In ZCPR34, wheel protection is enabled and disabled in a |
|||
; different way. To wheel-protect a command the high bit of the first |
|||
; character in the command name is set. The command table scanner in ZCPR34 |
|||
; will not recognize these commands when the wheel byte is off. Since the same |
|||
; command scanner is used to scan the commands in the RCP and FCP (flow control |
|||
; package), commands there can be wheel protected in the same way. For skilled |
|||
; computer operators it is very easy to use a debugger, file patcher, or disk |
|||
; utility to enable and disable wheel protection without having to reassemble |
|||
; the CPR, RCP, or FCP. |
|||
; |
|||
; Because of the way the command scanner works, once wheel protection is |
|||
; implemented in the CCP, there is no further code penalty in protecting RCP |
|||
; commands. Therefore, we recommend protecting all possibly sensitive |
|||
; commands or none. |
|||
|
|||
wcled equ no ; CLED |
|||
wcp equ yes ; CP |
|||
wdir equ no ; DIR |
|||
wera equ yes ; ERA |
|||
wlist equ yes ; LIST |
|||
wpeek equ yes ; PEEK |
|||
wpoke equ yes ; POKE |
|||
wport equ yes ; PORT |
|||
wprot equ yes ; PROT |
|||
wquiet equ no ; QUIET |
|||
wreg equ yes ; REG |
|||
wren equ yes ; REN |
|||
wspop equ yes ; SPOP |
|||
wtype equ yes ; TYPE |
|||
whrc equ no ; H |
|||
|
|||
wheel defl wcp or wdir or wera or wlist or wpeek or wpoke or wport |
|||
wheel defl wheel or wprot or wreg or wren or wtype or whrc |
|||
|
|||
;============================================================================= |
|||
; |
|||
; C O M M A N D O P T I O N S |
|||
; |
|||
;============================================================================= |
|||
|
|||
; Options affecting several commands |
|||
|
|||
; DSORT includes code to sort file entries for the D, TYPE, LIST, ERA, |
|||
; and PROT commands. |
|||
|
|||
dsort equ yes |
|||
|
|||
; LEFTRIGHT affects the COPY and RENAME commands. If yes, add code to allow |
|||
; CP and REN operations work from left to right, and CP to accept a |
|||
; single filespec as its source. |
|||
; Examples: |
|||
; B0>ren b1:old.nam new.nam Renames B1:old.nam to B1:new.nam |
|||
; B0>cp a15:that.fil Copies A15:that.fil to B0: |
|||
; B0>cp source.fil dest.fil Copies source.fil to dest.fil |
|||
|
|||
leftright equ yes |
|||
|
|||
; If LEFTRIGHT is yes, setting TESTEQ to yes also allows CP and REN commands |
|||
; to be processed from right to left if they contain an equal sign ("="). |
|||
; Costs 11 bytes. |
|||
; Example: |
|||
; B0>cp dest.fil=source.fil Copies source.fil to dest.fil |
|||
|
|||
testeq equ yes |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; 'CLS' command |
|||
|
|||
; This command clears the console screen. It can either use a fixed string |
|||
; (for shorter code if the same terminal is always used) or use the TCAP |
|||
; entry for automatic adaptation to any terminal. |
|||
|
|||
clstcap equ true ; Use TCAP for clear-screen string |
|||
|
|||
; If CLSTCAP is not enabled, then the string below must be provided and |
|||
; it must end with a character with the high bit set |
|||
|
|||
if not clstcap |
|||
clsstr macro |
|||
db 'Z'-'@'+80h ; Control-Z to clear screen |
|||
endm |
|||
endif ;not clstcap |
|||
|
|||
typecls equ true ; Clear between screens when typing files |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; 'CP' command |
|||
|
|||
; This command copies a single file. The destination file can have a different |
|||
; name from the source file. Set the size of the memory buffer in K below (do |
|||
; not change the second definition). The copy buffer is placed at the top of |
|||
; the TPA, where it will generally not interfere with subsequent use of the GO |
|||
; command to rerun a program loaded in the TPA. |
|||
|
|||
cpblocks defl 16 ; Size of copy buffer in K |
|||
|
|||
cpblocks defl cpblocks * 8 ; Convert to number of records |
|||
|
|||
; If you will be using a BDOS or RSX which supports new functions 102 (Get |
|||
; Stamp) and 103 (Set Stamp), set STPCALL to true, and datestamps of files |
|||
; will be preserved across copies. The "last access" stamps of both copies |
|||
; are set to the time the copy took place if access stamping is enabled. |
|||
|
|||
stpcall equ true ; Copy file stamps with functions 102/3 |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; 'DIR' command |
|||
|
|||
; This command displays a sorted listing of the files in a directory. The |
|||
; file name buffer is allocated at the top of the TPA so as not to modify |
|||
; any program loaded in low memory. Consequently, the size of the buffer |
|||
; must be set in advance. |
|||
|
|||
|
|||
maxdirs equ 256 ; Maximum number of names in directory buffer |
|||
|
|||
nosys equ yes ; suppress 'A' and 'S' options if wheel off |
|||
|
|||
slashchk equ yes ; allow "DIR /S" or "DIR /A" formats (costs |
|||
; about 12 bytes) |
|||
|
|||
allflag equ 'A' ; Option character for showing |
|||
; all file (both SYS and DIR) |
|||
sysflag equ 'S' ; Option character for showing |
|||
; SYS files only |
|||
sortnt equ yes ; Sort file by name then type |
|||
wide equ yes ; Make display for 80-column screen |
|||
fence equ '|' ; Character to use as fence between columns |
|||
; ..if WIDE is false. |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; 'ECHO' command |
|||
|
|||
; This command sends characters to the console or list device. If ECHOLST is |
|||
; enabled, then code is included for sending characters to the LST device. |
|||
; Characters normally go the the console device and are normally upper or lower |
|||
; case depending on the setting of UPCASE. The command line can have special |
|||
; command sequences to toggle the case of the output and to change the |
|||
; destination between the console and printer. Any other character following |
|||
; the command character will be sent as is. For the normal setting of the |
|||
; equates below (upcase/yes, cmdchar/%, prtchar/P, crtchar/C, lcasech/>, |
|||
; and ucasech/<) an example command line would be: |
|||
; A0:ROOT>ECHO T%>HIS IS A TEST^M^J^IDONE%PONE, TWO, %<THREE |
|||
; The following text would be echoed to the console (inlcuding carriage return, |
|||
; linefeed, and tab characters, '|' indicates the left margin): |
|||
; |This is a test |
|||
; | done |
|||
; The string "one, two, THREE" would be sent to the printer. |
|||
|
|||
echolst equ yes ; Allow ECHO to LST device |
|||
|
|||
upcase equ yes ; Initial case of output |
|||
|
|||
cmdchar equ '%' ; Character to flag case change |
|||
|
|||
prtchar equ 'P' ; Character to start sending output to |
|||
; the printer (must be upper case) |
|||
crtchar equ 'C' ; Character to start sending output to |
|||
; the CRT (must be upper case) |
|||
ucasechar equ '<' ; Character after CASECHAR that toggles |
|||
; subsequent output to upper case |
|||
lcasechar equ '>' ; Character after CASECHAR that toggles |
|||
; subsequent output to lower case |
|||
|
|||
; ---------------------------------------------------------------------------- |
|||
|
|||
; 'H' command |
|||
|
|||
; This command displays a list of the resident commands implemented in the |
|||
; system. FCP, CPR, and RCP commands can be displayed. The basic command is |
|||
; not optional; it is always included. |
|||
|
|||
listcpr equ yes ; Include list of CPR-resident commands in |
|||
; display (highly recommended) |
|||
|
|||
listfcp equ yes ; Include list of FCP-resident commands in |
|||
; display (recommended if there is room) |
|||
|
|||
noshow equ yes ; Suppress listing commands that are wheel- |
|||
; restricted unless wheel byte is set (i.e., |
|||
; don't show commands that won't run) |
|||
|
|||
cmdsline equ 5 ; Number of commands on each line of display |
|||
|
|||
cmdspace equ 8 ; Space in display for each command name |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; 'LIST' and 'TYPE' commands |
|||
|
|||
pgdflt equ yes ; Default to paging of console output |
|||
|
|||
pgdflg equ 'P' ; Character to toggle paging status |
|||
|
|||
;---------------------------------------- |
|||
|
|||
; 'PEEK' command |
|||
|
|||
peekhdr equ yes ; Label columns in PEEK display |
|||
|
|||
peekbdr equ yes ; Include line of hyphens under labels |
|||
|
|||
peekchk equ yes ; If yes, the ending address will be tested to |
|||
; prevent overflow past FFFF (costs 5 bytes) |
|||
|
|||
peeklen equ 127 ; Display 1 record (128 bytes) as default. |
|||
; PEEK displays in increments of 16 bytes. |
|||
; You may set PEEKLEN for 0 to 65525. |
|||
|
|||
;---------------------------------------- |
|||
|
|||
; 'S' command |
|||
|
|||
; Print disk space with other commands (recommended) |
|||
|
|||
dirsp equ true ; Show space after DIR |
|||
erasp equ true ; Show space after ERA |
|||
cpsp equ true ; Show space after CP |
|||
resetsp equ true ; Show space after R |
|||
|
|||
;---------------------------------------- |
|||
|
|||
; 'WHL' command |
|||
|
|||
whlquiet equ false ; If true, don't report wheel state with |
|||
; .."WHL password" command (costs 1 byte) |
|||
|
|||
wpass macro |
|||
db 'SYSTEM ' |
|||
endm |
|||
|
|||
;---------------------------------------- |
|||
|
|||
; 'CLED' command |
|||
; |
|||
; Command line editing takes place in the line buffer. It does not take up |
|||
; room in the RCP. The editor will handle a 255 byte line. Although that |
|||
; is larger than the maximum command line size, it allows you to edit a long |
|||
; line without deleting something first. The history is kept inside the RCP, |
|||
; so its size will depend upon how many other RCP commands are enabled. |
|||
; HISTSIZE should be at least as large as the multiple command line buffer |
|||
; (204 bytes). |
|||
|
|||
lbufwid equ 255 ; Line buffer size, byte |
|||
histsize equ 204 ; History buffer size, word |
|||
|
|||
; CLERA controls whether to null the internal history when CLED is exited, or |
|||
; to leave it for the next run. Secure systems will want to set it to YES. |
|||
|
|||
clera equ no ; Erase history on terminating shell |
|||
|
|||
; CLMIN sets the cutoff for discarding short lines from history recording. |
|||
; A setting of 3 would discard a command such as DIR. |
|||
|
|||
clmin equ 5 ; Discard lines which do not exceed this |
|||
|
|||
clins equ yes ; Initial insert state ON |
|||
clsav equ yes ; Initial history recording ON |
|||
|
|||
; The appearance of the command line prompt may include the system time if a |
|||
; DateStamper or ZS/ZDDOS clock is implemented. The DU:DIR separator character |
|||
; can be changed to indicate that CLED is running. |
|||
|
|||
dudir_sep equ '/' ; DU:DIR separator char |
|||
puser0 equ no ; Print user #0 in prompt |
|||
systime equ yes ; Include system time in prompt |
|||
|
|||
if systime |
|||
civtim equ yes ; Yes for 12-hr civil time vs. 24-hr military |
|||
timesep equ '.' ; Separator between hours and minutes |
|||
endif |
|||
|
|||
; The editor must use EREOL. The VLIB routine to send the EREOL sequence |
|||
; to the terminal needs to test for a video delay and the presence of the "/" |
|||
; quote character. Most terminals can just print the TCAP sequence as is. If |
|||
; that doesn't work, set ERLQUICK to NO. If you are using only one terminal, |
|||
; it will be most efficient to set ERLTCAP to NO and use the CLR_EOL macro. |
|||
|
|||
erltcap equ yes ; Use TCAP routine vs macro |
|||
|
|||
if erltcap |
|||
erlquick equ yes ; Use simplified TCAP routine |
|||
else |
|||
|
|||
clr_eol macro ; Define terminal specific string |
|||
dc 1bh,'T' ; ...set high bit on last character |
|||
endm |
|||
|
|||
endif ;erltcap |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; Command names |
|||
|
|||
; The CTABLE macro, which constructs the command dispatch table, includes a |
|||
; line for each command, the first parameter of which is the name of the |
|||
; command. These names may be changed if you wish. But make sure that you |
|||
; do not use a name that is longer than the maximum allowed length. If you |
|||
; do, the name will be truncated and a nonfatal error will occur during |
|||
; assembly. DO NOT CHANGE ANY PARAMETER OTHER THAN THE COMMAND NAME. Lower |
|||
; case letters will be converted to upper case. The macro COMMAND is defined |
|||
; in Z34MAC.LIB. |
|||
|
|||
cmdsize equ 4 ; Length of each command name |
|||
|
|||
cmdtbl macro |
|||
command CLED, cledon, wcled, cled |
|||
command CLS, clson, false, cls |
|||
command CP, cpon, wcp, copy |
|||
command D, diron, wdir, dir |
|||
command ECHO, echoon, false, echo |
|||
command ERA, eraon, wera, era |
|||
command H, true, whrc, clist |
|||
command LIST, liston, wlist, list |
|||
command NOTE, noteon, false, note |
|||
command P, peekon, wpeek, peek |
|||
command POKE, pokeon, wpoke, poke |
|||
command PORT, porton, wport, port |
|||
command PROT, proton, wprot, att |
|||
command Q, quieton,wquiet, quset |
|||
command R, reson, false, reset |
|||
command REG, regon, wreg, register |
|||
command REN, renon, wren, ren |
|||
command SP, spaceon,false, space |
|||
command SPOP, cledon, wspop, shpop |
|||
command TYPE, lton, wtype, type |
|||
command WHL, whlon, false, whl |
|||
endm |
|||
|
|||
; END Z34RCP.LIB |
|||
|
|||
@ -0,0 +1,515 @@ |
|||
|
|||
; File: Z34RCP.LIB |
|||
; Description: Resident Command Package (RCP) for ZCPR34 |
|||
; Version: 1.4 |
|||
; Author: Carson Wilson |
|||
; Date: October 4, 1989 |
|||
; Changes: Added PUSER0 equate suggested by Rob Friefeld. |
|||
; |
|||
; Version: 1.3 |
|||
; Author: Carson Wilson |
|||
; Date: September 29, 1989 |
|||
; Changes: Added CLED (Command Line Editor Shell) command options |
|||
; and equates. |
|||
; |
|||
; Version: 1.2 |
|||
; Author: Carson Wilson |
|||
; Date: August 11, 1989 |
|||
; Changes: Removed several "quiet" conditional assembly equates as |
|||
; we are now sensing the QUIET flag instead. |
|||
; Changed default of WHLQUIET to false. |
|||
; |
|||
; Version: 1.1 |
|||
; Author: Carson Wilson |
|||
; Date: July 10, 1989 |
|||
; Changes: Changed 'S' command name to 'SP'. |
|||
; Removed wheel protection from 'Q' command and set QQUIET |
|||
; on by default. |
|||
; Changed command order. |
|||
|
|||
; Version: 1.0 |
|||
; Author: Carson Wilson |
|||
; Date: June 15, 1988 |
|||
|
|||
; This is the configuration file for the ZCPR Version 3.4 resident command |
|||
; package. You should read through this file and set the equates according |
|||
; to the features you want to implement. Since most systems have a limited |
|||
; amount of space for the resident command package, it will probably be |
|||
; impossible to include all features. |
|||
|
|||
; If you are using an SLR or equivalent assembler, you will be prompted |
|||
; at assembly time for which commands to include in the RCP. |
|||
|
|||
;============================================================================= |
|||
; |
|||
; A S S E M B L Y O P T I O N S |
|||
; |
|||
;============================================================================= |
|||
|
|||
; SLR controls whether special pseudo-ops such as ".printx" and ".accept", |
|||
; and complex macros are used at assembly time. For SLR Systems or compatible |
|||
; macro assemblers, set this equate to true. |
|||
|
|||
SLR equ true |
|||
|
|||
; RCPTYPE is the final character of the RCP name in the H(elp) command, |
|||
; and determines the order in which commands are added. |
|||
|
|||
if SLR |
|||
Y equ true |
|||
N equ false |
|||
H equ 'H' |
|||
F equ 'F' |
|||
|
|||
.accept 'Enter "F" for floppy, "H" for fixed disk version: ',rcptype |
|||
else |
|||
rcptype equ 'F' ; Floppy disk version |
|||
endif ; SLR |
|||
|
|||
; ZRL controls whether named common labels are used in the code. To create |
|||
; absolute code, modify RCPBASE.LIB to reflect your system's addresses, set |
|||
; ZRL to false and instruct your assembler to generate absolute code (either |
|||
; a .COM or .HEX file). |
|||
; |
|||
; To create a relocatable file for use with Bridger Mitchell's JetLDR or |
|||
; Joe Wright's NZCOM, you must use an assembler which recognizes named |
|||
; common blocks. If your assembler has this capability, set ZRL to true |
|||
; and instruct the assembler to generate relocatable (.REL) code. |
|||
|
|||
ZRL equ true |
|||
|
|||
;============================================================================= |
|||
; |
|||
; M A C R O S |
|||
; |
|||
;============================================================================= |
|||
|
|||
; SLR assemblers allow selection of options during assembly. |
|||
|
|||
if SLR |
|||
|
|||
select macro option default comment |
|||
.accept comment,option ; Prompt user for selection |
|||
endm |
|||
|
|||
.printx |
|||
.printx Answer "Y" to include, "N" to exclude commands: |
|||
.printx |
|||
|
|||
else |
|||
|
|||
select macro option default comment |
|||
option equ default ; Use selections from file |
|||
endm |
|||
endif ; SLR |
|||
|
|||
;============================================================================= |
|||
; |
|||
; R E S I D E N T C O M M A N D S S E L E C T I O N |
|||
; |
|||
;============================================================================= |
|||
|
|||
; Commands to include in the resident command package |
|||
|
|||
; There are some interrelations between a number of the possible resident |
|||
; commands. Some are so close (LIST and TYPE) that a single equate controls |
|||
; both functions. Others like DIR and ERA share code (both display file |
|||
; listings). It is efficient to select or deselect them together. |
|||
|
|||
; If you are using an SLR or compatible assembler, you will be prompted |
|||
; at assembly time for command selections. Otherwise, select commands to |
|||
; be included by setting each SELECT macro below to yes or no. |
|||
|
|||
select CLEDON no 'CLED - command line editor shell? ' |
|||
select CLSON yes 'CLS - clear screen? ' |
|||
select RESON yes 'R - reset disk system? ' |
|||
select SPACEON yes 'SP - show space remaining on disk? ' |
|||
|
|||
if RCPTYPE='F' ; Assemble in floppy order |
|||
select DIRON yes 'D - disk directory? ' |
|||
select ERAON yes 'ERA - erase files? ' |
|||
select ECHOON yes 'ECHO - send text to screen or printer? ' |
|||
select RENON yes 'REN - rename files? ' |
|||
select CPON yes 'CP - copy file? ' |
|||
select LTON yes 'TYPE - display file on console? ' |
|||
select POKEON yes 'POKE - set memory? ' |
|||
select PEEKON yes 'PEEK - view memory? ' |
|||
else ; Assemble in fixed-disk order |
|||
select ECHOON yes 'ECHO - send text to screen or printer? ' |
|||
select POKEON yes 'POKE - set memory? ' |
|||
select PEEKON yes 'PEEK - view memory? ' |
|||
select QUIETON yes 'Q - set or clear quiet status? ' |
|||
select DIRON yes 'D - disk directory? ' |
|||
select ERAON yes 'ERA - erase files? ' |
|||
select RENON yes 'REN - rename files? ' |
|||
select CPON yes 'CP - copy file? ' |
|||
select LTON yes 'TYPE - display file on console? ' |
|||
endif ; RCPTYPE='F' |
|||
|
|||
if LTON |
|||
select LISTON no 'LIST - list to printer? ' |
|||
else ; allowed only if TYPE is enabled |
|||
LISTON equ no |
|||
endif |
|||
|
|||
if RCPTYPE='F' ; Assemble in floppy order |
|||
select QUIETON yes 'Q - set or clear quiet status? ' |
|||
endif |
|||
|
|||
select PROTON no 'PROT - set file attributes? ' |
|||
select NOTEON no 'NOTE - command-line comment? ' |
|||
select REGON no 'REG - set and display user registers? ' |
|||
select WHLON no 'WHL - set or clear wheel status? ' |
|||
select PORTON no 'PORT - view and set I/O ports? ' |
|||
|
|||
;============================================================================= |
|||
; |
|||
; W H E E L P R O T E C T I O N |
|||
; |
|||
;============================================================================= |
|||
|
|||
; To prevent unauthorized users from performing certain dangerous or sensitive |
|||
; operations on the computer, ZCPR34 provides the capability of disabling the |
|||
; operation of certain commands when the wheel byte is off. In ZCPR30, an |
|||
; attempt to use one of these wheel-protected commands when the wheel byte was |
|||
; off resulted in an error message. In ZCPR34 things work differently. In the |
|||
; same situation, the command simply disappears. In this way a transient |
|||
; program or extended command processor function can take over and deal with |
|||
; the attempt to use the command in a much more flexible way. |
|||
; |
|||
; Wheel-protected commands in ZCPR30 had extra code to intercept the function |
|||
; and disable it. In ZCPR34, wheel protection is enabled and disabled in a |
|||
; different way. To wheel-protect a command the high bit of the first |
|||
; character in the command name is set. The command table scanner in ZCPR34 |
|||
; will not recognize these commands when the wheel byte is off. Since the same |
|||
; command scanner is used to scan the commands in the RCP and FCP (flow control |
|||
; package), commands there can be wheel protected in the same way. For skilled |
|||
; computer operators it is very easy to use a debugger, file patcher, or disk |
|||
; utility to enable and disable wheel protection without having to reassemble |
|||
; the CPR, RCP, or FCP. |
|||
; |
|||
; Because of the way the command scanner works, once wheel protection is |
|||
; implemented in the CCP, there is no further code penalty in protecting RCP |
|||
; commands. Therefore, we recommend protecting all possibly sensitive |
|||
; commands or none. |
|||
|
|||
wcled equ no ; CLED |
|||
wcp equ yes ; CP |
|||
wdir equ no ; DIR |
|||
wera equ yes ; ERA |
|||
wlist equ yes ; LIST |
|||
wpeek equ yes ; PEEK |
|||
wpoke equ yes ; POKE |
|||
wport equ yes ; PORT |
|||
wprot equ yes ; PROT |
|||
wquiet equ no ; QUIET |
|||
wreg equ yes ; REG |
|||
wren equ yes ; REN |
|||
wspop equ yes ; SPOP |
|||
wtype equ yes ; TYPE |
|||
whrc equ no ; H |
|||
|
|||
wheel defl wcp or wdir or wera or wlist or wpeek or wpoke or wport |
|||
wheel defl wheel or wprot or wreg or wren or wtype or whrc |
|||
|
|||
;============================================================================= |
|||
; |
|||
; C O M M A N D O P T I O N S |
|||
; |
|||
;============================================================================= |
|||
|
|||
; Options affecting several commands |
|||
|
|||
; DSORT includes code to sort file entries for the D, TYPE, LIST, ERA, |
|||
; and PROT commands. |
|||
|
|||
dsort equ yes |
|||
|
|||
; LEFTRIGHT affects the COPY and RENAME commands. If yes, add code to allow |
|||
; CP and REN operations work from left to right, and CP to accept a |
|||
; single filespec as its source. |
|||
; Examples: |
|||
; B0>ren b1:old.nam new.nam Renames B1:old.nam to B1:new.nam |
|||
; B0>cp a15:that.fil Copies A15:that.fil to B0: |
|||
; B0>cp source.fil dest.fil Copies source.fil to dest.fil |
|||
|
|||
leftright equ yes |
|||
|
|||
; If LEFTRIGHT is yes, setting TESTEQ to yes also allows CP and REN commands |
|||
; to be processed from right to left if they contain an equal sign ("="). |
|||
; Costs 11 bytes. |
|||
; Example: |
|||
; B0>cp dest.fil=source.fil Copies source.fil to dest.fil |
|||
|
|||
testeq equ yes |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; 'CLS' command |
|||
|
|||
; This command clears the console screen. It can either use a fixed string |
|||
; (for shorter code if the same terminal is always used) or use the TCAP |
|||
; entry for automatic adaptation to any terminal. |
|||
|
|||
clstcap equ true ; Use TCAP for clear-screen string |
|||
|
|||
; If CLSTCAP is not enabled, then the string below must be provided and |
|||
; it must end with a character with the high bit set |
|||
|
|||
if not clstcap |
|||
clsstr macro |
|||
db 'Z'-'@'+80h ; Control-Z to clear screen |
|||
endm |
|||
endif ;not clstcap |
|||
|
|||
typecls equ true ; Clear between screens when typing files |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; 'CP' command |
|||
|
|||
; This command copies a single file. The destination file can have a different |
|||
; name from the source file. Set the size of the memory buffer in K below (do |
|||
; not change the second definition). The copy buffer is placed at the top of |
|||
; the TPA, where it will generally not interfere with subsequent use of the GO |
|||
; command to rerun a program loaded in the TPA. |
|||
|
|||
cpblocks defl 16 ; Size of copy buffer in K |
|||
|
|||
cpblocks defl cpblocks * 8 ; Convert to number of records |
|||
|
|||
; If you will be using a BDOS or RSX which supports new functions 102 (Get |
|||
; Stamp) and 103 (Set Stamp), set STPCALL to true, and datestamps of files |
|||
; will be preserved across copies. The "last access" stamps of both copies |
|||
; are set to the time the copy took place if access stamping is enabled. |
|||
|
|||
stpcall equ true ; Copy file stamps with functions 102/3 |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; 'DIR' command |
|||
|
|||
; This command displays a sorted listing of the files in a directory. The |
|||
; file name buffer is allocated at the top of the TPA so as not to modify |
|||
; any program loaded in low memory. Consequently, the size of the buffer |
|||
; must be set in advance. |
|||
|
|||
|
|||
maxdirs equ 256 ; Maximum number of names in directory buffer |
|||
|
|||
nosys equ yes ; suppress 'A' and 'S' options if wheel off |
|||
|
|||
slashchk equ yes ; allow "DIR /S" or "DIR /A" formats (costs |
|||
; about 12 bytes) |
|||
|
|||
allflag equ 'A' ; Option character for showing |
|||
; all file (both SYS and DIR) |
|||
sysflag equ 'S' ; Option character for showing |
|||
; SYS files only |
|||
sortnt equ yes ; Sort file by name then type |
|||
wide equ yes ; Make display for 80-column screen |
|||
fence equ '|' ; Character to use as fence between columns |
|||
; ..if WIDE is false. |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; 'ECHO' command |
|||
|
|||
; This command sends characters to the console or list device. If ECHOLST is |
|||
; enabled, then code is included for sending characters to the LST device. |
|||
; Characters normally go the the console device and are normally upper or lower |
|||
; case depending on the setting of UPCASE. The command line can have special |
|||
; command sequences to toggle the case of the output and to change the |
|||
; destination between the console and printer. Any other character following |
|||
; the command character will be sent as is. For the normal setting of the |
|||
; equates below (upcase/yes, cmdchar/%, prtchar/P, crtchar/C, lcasech/>, |
|||
; and ucasech/<) an example command line would be: |
|||
; A0:ROOT>ECHO T%>HIS IS A TEST^M^J^IDONE%PONE, TWO, %<THREE |
|||
; The following text would be echoed to the console (inlcuding carriage return, |
|||
; linefeed, and tab characters, '|' indicates the left margin): |
|||
; |This is a test |
|||
; | done |
|||
; The string "one, two, THREE" would be sent to the printer. |
|||
|
|||
echolst equ yes ; Allow ECHO to LST device |
|||
|
|||
upcase equ yes ; Initial case of output |
|||
|
|||
cmdchar equ '%' ; Character to flag case change |
|||
|
|||
prtchar equ 'P' ; Character to start sending output to |
|||
; the printer (must be upper case) |
|||
crtchar equ 'C' ; Character to start sending output to |
|||
; the CRT (must be upper case) |
|||
ucasechar equ '<' ; Character after CASECHAR that toggles |
|||
; subsequent output to upper case |
|||
lcasechar equ '>' ; Character after CASECHAR that toggles |
|||
; subsequent output to lower case |
|||
|
|||
; ---------------------------------------------------------------------------- |
|||
|
|||
; 'H' command |
|||
|
|||
; This command displays a list of the resident commands implemented in the |
|||
; system. FCP, CPR, and RCP commands can be displayed. The basic command is |
|||
; not optional; it is always included. |
|||
|
|||
listcpr equ yes ; Include list of CPR-resident commands in |
|||
; display (highly recommended) |
|||
|
|||
listfcp equ yes ; Include list of FCP-resident commands in |
|||
; display (recommended if there is room) |
|||
|
|||
noshow equ yes ; Suppress listing commands that are wheel- |
|||
; restricted unless wheel byte is set (i.e., |
|||
; don't show commands that won't run) |
|||
|
|||
cmdsline equ 5 ; Number of commands on each line of display |
|||
|
|||
cmdspace equ 8 ; Space in display for each command name |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; 'LIST' and 'TYPE' commands |
|||
|
|||
pgdflt equ yes ; Default to paging of console output |
|||
|
|||
pgdflg equ 'P' ; Character to toggle paging status |
|||
|
|||
;---------------------------------------- |
|||
|
|||
; 'PEEK' command |
|||
|
|||
peekhdr equ yes ; Label columns in PEEK display |
|||
|
|||
peekbdr equ yes ; Include line of hyphens under labels |
|||
|
|||
peekchk equ yes ; If yes, the ending address will be tested to |
|||
; prevent overflow past FFFF (costs 5 bytes) |
|||
|
|||
peeklen equ 127 ; Display 1 record (128 bytes) as default. |
|||
; PEEK displays in increments of 16 bytes. |
|||
; You may set PEEKLEN for 0 to 65525. |
|||
|
|||
;---------------------------------------- |
|||
|
|||
; 'S' command |
|||
|
|||
; Print disk space with other commands (recommended) |
|||
|
|||
dirsp equ true ; Show space after DIR |
|||
erasp equ true ; Show space after ERA |
|||
cpsp equ true ; Show space after CP |
|||
resetsp equ true ; Show space after R |
|||
|
|||
;---------------------------------------- |
|||
|
|||
; 'WHL' command |
|||
|
|||
whlquiet equ false ; If true, don't report wheel state with |
|||
; .."WHL password" command (costs 1 byte) |
|||
|
|||
wpass macro |
|||
db 'SYSTEM ' |
|||
endm |
|||
|
|||
;---------------------------------------- |
|||
|
|||
; 'CLED' command |
|||
; |
|||
; Command line editing takes place in the line buffer. It does not take up |
|||
; room in the RCP. The editor will handle a 255 byte line. Although that |
|||
; is larger than the maximum command line size, it allows you to edit a long |
|||
; line without deleting something first. The history is kept inside the RCP, |
|||
; so its size will depend upon how many other RCP commands are enabled. |
|||
; HISTSIZE should be at least as large as the multiple command line buffer |
|||
; (204 bytes). |
|||
|
|||
lbufwid equ 255 ; Line buffer size, byte |
|||
histsize equ 204 ; History buffer size, word |
|||
|
|||
; CLERA controls whether to null the internal history when CLED is exited, or |
|||
; to leave it for the next run. Secure systems will want to set it to YES. |
|||
|
|||
clera equ no ; Erase history on terminating shell |
|||
|
|||
; CLMIN sets the cutoff for discarding short lines from history recording. |
|||
; A setting of 3 would discard a command such as DIR. |
|||
|
|||
clmin equ 5 ; Discard lines which do not exceed this |
|||
|
|||
clins equ yes ; Initial insert state ON |
|||
clsav equ yes ; Initial history recording ON |
|||
|
|||
; The appearance of the command line prompt may include the system time if a |
|||
; DateStamper or ZS/ZDDOS clock is implemented. The DU:DIR separator character |
|||
; can be changed to indicate that CLED is running. |
|||
|
|||
dudir_sep equ '/' ; DU:DIR separator char |
|||
puser0 equ no ; Print user #0 in prompt |
|||
systime equ yes ; Include system time in prompt |
|||
|
|||
if systime |
|||
civtim equ yes ; Yes for 12-hr civil time vs. 24-hr military |
|||
timesep equ '.' ; Separator between hours and minutes |
|||
endif |
|||
|
|||
; The editor must use EREOL. The VLIB routine to send the EREOL sequence |
|||
; to the terminal needs to test for a video delay and the presence of the "/" |
|||
; quote character. Most terminals can just print the TCAP sequence as is. If |
|||
; that doesn't work, set ERLQUICK to NO. If you are using only one terminal, |
|||
; it will be most efficient to set ERLTCAP to NO and use the CLR_EOL macro. |
|||
|
|||
erltcap equ yes ; Use TCAP routine vs macro |
|||
|
|||
if erltcap |
|||
erlquick equ yes ; Use simplified TCAP routine |
|||
else |
|||
|
|||
clr_eol macro ; Define terminal specific string |
|||
dc 1bh,'T' ; ...set high bit on last character |
|||
endm |
|||
|
|||
endif ;erltcap |
|||
|
|||
;----------------------------------------------------------------------------- |
|||
|
|||
; Command names |
|||
|
|||
; The CTABLE macro, which constructs the command dispatch table, includes a |
|||
; line for each command, the first parameter of which is the name of the |
|||
; command. These names may be changed if you wish. But make sure that you |
|||
; do not use a name that is longer than the maximum allowed length. If you |
|||
; do, the name will be truncated and a nonfatal error will occur during |
|||
; assembly. DO NOT CHANGE ANY PARAMETER OTHER THAN THE COMMAND NAME. Lower |
|||
; case letters will be converted to upper case. The macro COMMAND is defined |
|||
; in Z34MAC.LIB. |
|||
|
|||
cmdsize equ 4 ; Length of each command name |
|||
|
|||
cmdtbl macro |
|||
command CLED, cledon, wcled, cled |
|||
command CLS, clson, false, cls |
|||
command CP, cpon, wcp, copy |
|||
command D, diron, wdir, dir |
|||
command ECHO, echoon, false, echo |
|||
command ERA, eraon, wera, era |
|||
command H, true, whrc, clist |
|||
command LIST, liston, wlist, list |
|||
command NOTE, noteon, false, note |
|||
command P, peekon, wpeek, peek |
|||
command POKE, pokeon, wpoke, poke |
|||
command PORT, porton, wport, port |
|||
command PROT, proton, wprot, att |
|||
command Q, quieton,wquiet, quset |
|||
command R, reson, false, reset |
|||
command REG, regon, wreg, register |
|||
command REN, renon, wren, ren |
|||
command SP, spaceon,false, space |
|||
command SPOP, cledon, wspop, shpop |
|||
command TYPE, lton, wtype, type |
|||
command WHL, whlon, false, whl |
|||
endm |
|||
|
|||
; END Z34RCP.LIB |
|||
|
|||
@ -0,0 +1,429 @@ |
|||
|
|||
ZCPR Version 3.4 Resident Command Package |
|||
Source Code |
|||
|
|||
Revised Documentation for Version 1.1 |
|||
October 7, 1989 by Carson Wilson |
|||
|
|||
Version 1.0 Documentation |
|||
June 17, 1988 by Carson Wilson |
|||
|
|||
|
|||
Contents |
|||
-------- |
|||
|
|||
1. Files in this Library. |
|||
|
|||
2. Purpose of the Resident Command Package. |
|||
|
|||
2.1. "Resident" vs. "Transient" Commands. |
|||
|
|||
2.2. The Z-System Resident Command Package. |
|||
|
|||
2.2.1. Design Philosophy of the Z34 RCP. |
|||
|
|||
3. Structure and Operation of the RCP Segment. |
|||
|
|||
4. Generating an RCP for your System. |
|||
|
|||
4.1. The Z-Relocatable Approach. |
|||
|
|||
4.1.1. NZCOM and JetLDR. |
|||
4.1.2. Z-Relocatable (ZRL) Code |
|||
|
|||
4.2. The Assembly Approach. |
|||
|
|||
4.2.1. Note on Assemblers. |
|||
4.2.2. Assembly to Absolute Code. |
|||
4.2.3. Assembly to Z-Relocatable Code. |
|||
4.2.4. Adding Custom Commands to Z34RCP. |
|||
|
|||
5. Legal Use of These Files. |
|||
|
|||
|
|||
|
|||
1. Files in this Library. |
|||
|
|||
This library of files contains the assembler source code and |
|||
accompanying documentation for the Z-System Resident Command |
|||
Package (RCP). To use Z34RCP you must be running ZCPR versions |
|||
3.3 or above. For pre-assembled Z-Relocatable (ZRL) RCPs, see |
|||
RCPZRL11.LBR. Z34RCP11.LBR consists of the following files |
|||
(uncompress with UNCR.COM, QL.COM or LBRE.COM): |
|||
|
|||
CLEDINST.CZM - Installer for CLED command. |
|||
CLEDSAVE.CZM - Command file utility for CLED. |
|||
RCPCLED .DZC - Documentation on CLED. |
|||
RCPBASE .LZB - Used to assemble an absolute address RCP. |
|||
RCPCMD .LZB - Used to include custom commands in the RCP. |
|||
RCP?????.LZB - Code modules for the standard RCP commands. |
|||
SYSDEF .LZB - Commonly used equates. |
|||
Z34CMN .LZB - Used to assemble Z-Relocatable RCP's. |
|||
Z34DEFN .LZB - Offsets in the ZCPR 3.4 code. |
|||
Z34MAC .LZB - Assembler macros. |
|||
Z34RCP11.DZC - This file. |
|||
Z34RCP11.FOR - Short description of the library. |
|||
Z34RCP11.HZP - Help file for the RCP, gives command syntax and |
|||
examples. |
|||
Z34RCP .LZB - Used to select features when assembling the RCP. |
|||
Z34RCP11.NZW - Changes since Z34RCP10.LBR. Intended for former |
|||
RCP users, this will be only of passing interest |
|||
to new users. |
|||
Z34RCP11.ZZ0 - Main file for assembling the RCP. |
|||
ZSYSTEM .AZ - General information about Z System. |
|||
|
|||
|
|||
2. Purpose of the Resident Command Package. |
|||
|
|||
2.1. "Resident" vs. "Transient" Commands. |
|||
|
|||
Most of the commands used under CP/M and Z-System are "transient" |
|||
commands. The machine code for these commands (or "programs") is |
|||
stored in "command files," whose file type is normally .COM. |
|||
Thus, the machine code for WordStar is stored in a file called |
|||
"WS.COM". |
|||
|
|||
To run WordStar, the user issues the command "WS" at the command |
|||
line, the operating system loads WS.COM from the disk drive to |
|||
memory, and WS.COM takes over control of the computer. If the |
|||
user then exits WordStar and issues another command, the |
|||
operating system can load another command file from the disk, |
|||
reusing the area of memory previously occupied by WordStar. |
|||
|
|||
Recycling memory in this way makes personal computers quite |
|||
versatile, as the number of commands available to the user is |
|||
only limited to the number of command files stored on disk. |
|||
There are some drawbacks to this approach, however. Although |
|||
disk-based commands conserve memory by recycling it, they must be |
|||
loaded from disk each time they operate. This creates its own |
|||
costs in terms of speed of execution, disk storage space, and |
|||
memory reallocation. |
|||
|
|||
The most obvious disadvantage of loading a file from disk each |
|||
time a command is issued is that it takes time to find and load |
|||
disk files. Especially with floppy diskettes, the amount of time |
|||
which elapses after the command is issued and before the command |
|||
executes is significant. A second drawback to disk-based |
|||
commands is that commands will not execute unless their machine |
|||
code is available on the disk system. This means that the user |
|||
must know what command files are available on disk before issuing |
|||
commands. The final disadvantage of disk file based commands is |
|||
that some commands (e.g., SAVE) require that the area of memory |
|||
normally overwritten by command files (known as the "Transient |
|||
Program Area" or TPA) be preserved. |
|||
|
|||
In answer to these difficulties, the creators of CP/M designed |
|||
some of its commands as "built-in" commands. The DIR, REN, SAVE, |
|||
ERA, USER, and TYPE commands of CP/M 2.2 remain in memory and can |
|||
be issued without loading machine code files from disk. Thus, |
|||
the DIR command provides a disk directory regardless of whether |
|||
the command file "DIR.COM" is present on disk, and the SAVE |
|||
command saves the contents of memory at 100 hex to a disk file. |
|||
Residing permanently in memory, these commands are simple in |
|||
order to leave memory for disk-based commands to load in. |
|||
|
|||
2.2. The Z-System Resident Command Package. |
|||
|
|||
The creators of Z-System have followed the resident command |
|||
philosophy of CP/M, extending and enhancing the capabilities of |
|||
resident commands with the Z-System Resident Command Package. |
|||
Under CP/M 2.2, resident commands are tightly integrated with the |
|||
operating system. The user is therefore limited to a fixed set |
|||
of resident commands. The code in the Z-System Resident Command |
|||
Package is much more loosely linked with the operating system. |
|||
|
|||
The RCP occupies a section of protected memory, but how that |
|||
memory is used is only very loosely constrained. The Z-System |
|||
resident command package may be tailored for a wide variety of |
|||
installations, and easily altered within a single installation. |
|||
|
|||
2.2.1. Design Philosophy of the Z34 RCP. |
|||
|
|||
Though any set of commands which will fit in the RCP memory area |
|||
can be loaded as an RCP, a standard set of Z-System RCP commands |
|||
have evolved over the years. Distributed as the standard |
|||
Z-System RCP, this set of commands consists of universal, |
|||
single-purpose commands modeled after the resident command set of |
|||
CP/M 2.2, such as DIR, REN, and ERA. |
|||
|
|||
Keeping these commands simple both conserves memory and allows |
|||
their use in custom command scripts. None of the standard RCP |
|||
commands require interaction on the part of the user--they |
|||
perform a single function and quit. Aliases or other command |
|||
scripts which build complex commands from simple RCP commands |
|||
therefore retain complete control over the user interface. |
|||
|
|||
However, the standard RCP forms only one of many alternative uses |
|||
to which the Z-System RCP memory segment may be put. Since the |
|||
RCP memory is protected, it can be used by background programs |
|||
which continue to function even while other applications have |
|||
been loaded into the transient program area. Several such |
|||
programs, including key-redefiners, screen-trapping programs, |
|||
background numeric calculators, program assembly environments, |
|||
and memory utilities have been developed. |
|||
|
|||
Until Z34RCP, all but the most advanced users had to surrender |
|||
their entire RCP to use the custom commands, even if the commands |
|||
needed far less than the available RCP space. Thus, to use a |
|||
key-redefinition RCP, one was forced to give up all of his other |
|||
RCP commands. Z34RCP solves this problem by acting as a base to |
|||
which programmers may easily add code. By modifying the standard |
|||
file RCPCMD.LIB, programmers can implement and distribute custom |
|||
RCP commands which may be installed by those with only basic |
|||
knowledge of assembly language. See "Adding Custom Commands," |
|||
below, for details. |
|||
|
|||
|
|||
3. Structure and Operation of the RCP Segment. |
|||
|
|||
Typically, the Resident Command Package occupies 2 kilobytes of |
|||
memory, protected above the system's Basic Input Output System |
|||
(BIOS). Its internal structure is very simple, consisting of the |
|||
five byte string "Z3RCP", a table of command names and their |
|||
addresses within the RCP, and the machine code of the commands |
|||
themselves. This means that an RCP of a given length can contain |
|||
any number of resident commands which will fit in 2k, from one |
|||
large program to many shorter programs. |
|||
|
|||
Further, since the RCP is independent of the rest of the |
|||
operating system, the resident commands may be changed at will. |
|||
On system startup, a default RCP is loaded into memory. |
|||
Thereafter the RCP's commands remain active until the system is |
|||
turned off or another RCP is loaded. |
|||
|
|||
Using loader programs to load the RCP to memory allows another |
|||
important ability--it can exchange RCPs during a single session. |
|||
By allowing users to change their RCPs "on-the-fly," loader |
|||
programs provide some of the benefits of transient commands even |
|||
while preserving the benefits of resident commands. In fact, |
|||
even what portion of memory is allocated to the RCP can be |
|||
altered in this way by advanced users! (see the Z-System User's |
|||
Manual for more on this). |
|||
|
|||
|
|||
4. Generating an RCP for your System. |
|||
|
|||
Since Z80 computers come with a wide variety of operating system |
|||
environments, it is impossible for a single segment of machine |
|||
code function as a universal RCP. Due to differences in |
|||
operating system and hardware design, the size and location of |
|||
memory available to the Z-System RCP vary widely. Until |
|||
Z34RCP, this meant that each type of Z80 computer required an RCP |
|||
segment assembled specifically for that computer. |
|||
|
|||
Now, however, there are two basic means by which you may generate |
|||
an RCP for your system. The simplest route is to load already- |
|||
assembled Z-Relocatable code modules. This technique is |
|||
recommended for beginners and those with little experience in |
|||
assembly language. See RCPZRL11.LBR for pre-assembled RCP |
|||
modules. For more experienced users with an interest in |
|||
customizing or their RCPs or adding their own commands, custom |
|||
assembly of the files in this library is also an option. |
|||
|
|||
4.1. The Z-Relocatable Approach. |
|||
|
|||
4.1.1. NZCOM and JetLDR. |
|||
|
|||
LDR.COM, the familiar Z-System segment loader first introduced by |
|||
Rick Conn as a means of loading the various segments of the ZCPR |
|||
environment from disk to memory, required that system segments be |
|||
assembled to run only at system-specific addresses. For example, |
|||
if the system's RCP started at FA00 hex, only an RCP assembled to |
|||
run at that starting address would function on the system. |
|||
Therefore, separate SYS.RCP files were needed for each computer |
|||
installation. |
|||
|
|||
Thanks to several advanced loader utilities, namely NZCOM by Joe |
|||
Wright and JetLDR and Z3PLUS by Bridger Mitchell, custom- |
|||
assembling an RCP for a given target machine is no longer |
|||
necessary. These three programs can load specially assembled RCP |
|||
segments (known as Z-ReLocatable or "ZRL" segments) to any area |
|||
of memory. Z-System users now need only obtain previously |
|||
assembled RCP segments, much as they need only obtain assembled |
|||
.COM or .OBJ files to run transient programs. |
|||
|
|||
Using information in the system's environmental descriptor, |
|||
advanced loaders load pre-assembled segments to the proper |
|||
addresses in any system. The only remaining constraint is the |
|||
amount of memory allocated to the RCP. While the standard RCP |
|||
size is 2 kilobytes, many Z-System installations vary |
|||
considerably from this standard, so it is still necessary to |
|||
ensure that a ZRL segment does not exceed available RCP memory. |
|||
Fortunately, this is taken care of automatically by the advanced |
|||
loader programs. |
|||
|
|||
Using NZCOM or JetLDR, it is possible to load an RCP directly |
|||
from RCPZRL11.LBR. See NZCOM or JetLDR documentation for full |
|||
instructions on how to load Z-Relocatable RCPs with these |
|||
programs. |
|||
|
|||
4.1.2. Z-Relocatable (ZRL) Code |
|||
|
|||
The technique used by NZCOM and JetLDR to load a single RCP to |
|||
any address in memory involves relocatable code. Relocatable |
|||
code has been used for years by the "linker" programs available |
|||
to assembly language programmers. Since only portions of a given |
|||
Z80 machine code routine are specific to one memory address, it |
|||
is possible to create "relocatable" files of Z80 routines (known |
|||
by their file type .REL) containing all but the address-specific |
|||
codes. These files can then be very quickly relocated (or |
|||
"linked") by a linker program to operate at any memory address. |
|||
|
|||
Z-Relocatable code is simply a more sophisticated form of |
|||
relocatable code. ZRL files contain separately labeled segments, |
|||
known as "named common blocks." Where normal relocatable code is |
|||
all linked to operate at one address at a time by the linker |
|||
program, named common blocks allow the linker to distinguish |
|||
between different sections of the file and to link each "block" |
|||
to operate at a different address. |
|||
|
|||
This represents a major step forwards in user convenience, and |
|||
will certainly lead to more innovative work using the ZCPR system |
|||
segments. There is a minor drawback, however, inherent in the |
|||
form of assembly required by NZCOM and JetLDR. Before the advent |
|||
of these two programs, system segments were equivalent to .COM |
|||
files which were assembled to operate at addresses other than the |
|||
standard 100 hex. The ability to load a single system segment to |
|||
any address depends partially on the form of the assembled system |
|||
segment itself. |
|||
|
|||
While public domain assemblers will produce absolute object |
|||
files, more sophisticated assemblers, such as SLR's Z80ASM (a |
|||
bargain at $50) are required to assemble code with named common |
|||
addresses. NZCOM and JetLDR thus greatly reduce the time needed |
|||
by most users to install Z-System segments, but those wishing to |
|||
assemble Z-Relocatable segments will probably need a commercial |
|||
assembler. |
|||
|
|||
4.2. The Assembly Approach. |
|||
|
|||
Those with knowledge of assembly language may opt to assemble |
|||
their own custom RCPs, including only the commands and options |
|||
which match their exact requirements. Z34RCP.LBR contains the |
|||
complete source to the ZCPR 3.4 RCP. The file Z34RCP.Z80 |
|||
contains include statements to combine the various library files |
|||
during assembly. The file Z34RCP.LIB contains all of the equates |
|||
controlling assembly time options, and should be edited before |
|||
assembling Z34RCP.Z80. |
|||
|
|||
4.2.1. Note on Assemblers. |
|||
|
|||
The development work on Z34RCP was done exclusively with the SLR |
|||
Systems line of Z80 assemblers. Hence, some of the source code |
|||
is unavoidably specific to SLR and compatible assemblers. Those |
|||
using incompatible assemblers such as public-domain Z80 |
|||
assemblers should set the SLR equate in Z34RCP.LIB to FALSE. |
|||
This removes most SLR-specific pseudo-ops, but some additional |
|||
editing of the source files may be required for error-free |
|||
assembly. Unless your assembler can handle named common blocks, |
|||
you will also want to set the ZRL equate in Z34RCP.LIB to FALSE. |
|||
|
|||
4.2.2. Assembly to Absolute Code. |
|||
|
|||
If you are assembling a custom RCP for use at one memory address |
|||
only, or if your assembler can't handle named common blocks, you |
|||
can set the ZRL equate in Z34RCP.LIB to FALSE, and instruct your |
|||
assembler to produce absolute code (either a .HEX or a .COM file). |
|||
|
|||
Before generating absolute code you must set addresses in the |
|||
file RCPBASE.LIB for the particular installation. Once you have |
|||
set these addresses, you may proceed to assemble Z34RCP.Z80 to |
|||
either Z34RCP.COM or Z34RCP.HEX. If your assembler generated a |
|||
.HEX file, use LOAD.COM to convert Z34RCP.HEX to Z34RCP.COM. |
|||
|
|||
If you are running a version of ZCPR prior to 3.4, you must now |
|||
alter two bytes in your Z-System environment segment to point to |
|||
your system's CCP address. The bytes at offset 39 and 40 hex |
|||
(formerly containing "width of printer 2" and "lines on printer |
|||
2") should contain a 2-byte address of your system's CCP, most |
|||
significant byte last. |
|||
|
|||
Z34RCP.COM may now be renamed to SYS.RCP and loaded with the Z- |
|||
System loader program LDR.COM or Bridger Mitchell's JetLDR. |
|||
|
|||
4.2.3. Assembly to Z-Relocatable Code. |
|||
|
|||
Unlike absolute RCP segments, Z-Relocatable segments may be |
|||
loaded to ANY address, provided enough RCP space to contain them |
|||
is available. To assemble a Z-Relocatable RCP, you will need an |
|||
assembler which can handle named common blocks (see 4.2.1 above). |
|||
Set the ZRL equate in Z34RCP.LIB to TRUE, and instruct your |
|||
assembler to produce a relocatable (.REL) file. The resulting |
|||
Z34RCP.REL may then be renamed to Z34RCP.ZRL and loaded with |
|||
NZCOM, Z3PLUS, JetLDR. |
|||
|
|||
4.2.4. Adding Custom Commands to Z34RCP. |
|||
|
|||
As mentioned above, I have designed Z34RCP as a base to which |
|||
custom RCP commands may readily be added. All code and command |
|||
names for custom commands may be included in RCPCMD.LIB. |
|||
Thereafter, whenever the RCP is assembled the commands added to |
|||
RCPCMD.LIB will be included automatically. To remove the custom |
|||
commands, just replace the modified RCPCMD.LIB with an unmodified |
|||
copy. See RCPCMD.LIB for detailed instructions on how to add |
|||
code and command names. |
|||
|
|||
RCPCMD.LIB also facilitates distribution of custom commands to be |
|||
included by others in their RCPs. Simply distribute a copy of |
|||
your modified RCPCMD.LIB along with instructions on how to use |
|||
your custom commands. Users may then easily include the new |
|||
commands by substituting your modified RCPCMD.LIB for their |
|||
original copy and reassembling their RCPs. |
|||
|
|||
Of course, users of NZCOM, Z3PLUS, or JetLDR may simply trade |
|||
custom RCPs in Z-Relocatable form and dispense with the need for |
|||
any assembly work on the part of the user. All three of these |
|||
advanced loaders are available from Z Systems Associates (see |
|||
below). |
|||
|
|||
|
|||
5. Legal Use of These Files. |
|||
|
|||
Z34RCP is copyright 1989 by Z Systems Associates (ZSA), all |
|||
rights reserved. Any commercial use of Z34RCP, defined as any |
|||
situation where the duplicator recieves revenue by duplicating or |
|||
distributing Z34RCP by itself or in conjunction with any hardware |
|||
or software product, is expressly prohibited unless authorized in |
|||
writing by ZSA. |
|||
|
|||
Except for the file RCPCMD.LIB (see 4.2.4 above), you may |
|||
redistribute Z34RCP.LBR in its present form only. I encourage |
|||
you to explore the source code, suggest improvements, and |
|||
document errors. However, please obtain permission from Z |
|||
Systems Associates before redistributing any of these files in |
|||
altered form. This will prevent confusion by allowing your work |
|||
to be coordinated with the efforts of others. |
|||
|
|||
The Z Systems Associates are: |
|||
|
|||
Sage Microsystems East |
|||
Selling & Supporting the Best in 8-Bit Software |
|||
1435 Centre St., Newton Centre, MA 02159-2469 |
|||
Voice: 617/965-3552 (9:00am - 11:30pm) |
|||
Modem: 617/965-7259 (password = DDT)(MABOS on PC-Pursuit) |
|||
|
|||
and: |
|||
|
|||
Plu*Perfect Systems |
|||
"==World-Class Software" |
|||
410 23rd Street, Santa Monica, CA 90402 |
|||
Voice: 213/393-6105 (evenings) |
|||
Modem: 213/670-9465 (leave message for "Bridger Mitchell") |
|||
|
|||
For more information on Z System, check at the above bulletin |
|||
board systems, or consult The Computer Journal for excellent |
|||
articles on ZCPR and CP/M. The Computer Journal is published six |
|||
times a year by Publishing Consultants, 190 Sullivan Crossroad, |
|||
Columbia Falls, MT 59912, phone 406/257-9119. An issue averages |
|||
forty pages with few ads. Subscription rates are $16 for one |
|||
year (6 issues), or $28 for two years (12 issues) in the U.S., |
|||
$22 for one year Canada and Mexico, and $24 (surface) for one |
|||
year in other countries. |
|||
|
|||
|
|||
Carson Wilson is the operator of: |
|||
|
|||
Antelope Freeway Remote Access System |
|||
Chicago, 312-764-5162 |
|||
300-1200-2400 Baud, 24 Hours |
|||
|
|||
@ -0,0 +1,7 @@ |
|||
Z-System Resident Command Package (RCP) in source code form, version |
|||
1.1. Complete Z80 source code to the RCP plus documentation, for |
|||
ZCPR versions 3.3 and above. Adds several exciting new commands and |
|||
features and fixes various bugs in the previous release. See |
|||
companion file RCPZRL11.LBR for pre-compiled RCP modules which may |
|||
be loaded with NZ-COM, Z3PLUS, or JetLDR. |
|||
|
|||
@ -0,0 +1,390 @@ |
|||
The RCP Commands |
|||
CLED/SPOP Command Line Editor |
|||
CLS Clear the CRT screen |
|||
CP Copy a File |
|||
D Display Directory |
|||
ECHO Echo Command Tail |
|||
ERA Erase Files |
|||
H Display Available Commands |
|||
LIST/TYPE Display a File on Printer/CRT |
|||
NOTE Comment |
|||
P/POKE Display/Alter Memory |
|||
PORT Input/Output to system ports |
|||
PROT Protect Files |
|||
Q Alter or Query the Quiet Flag |
|||
R Reset Disk |
|||
REG ZCPR3 Register Display/Alter |
|||
REN Rename a File |
|||
SP Display Disk Space Remaining |
|||
WHL Alter or Query Wheel Byte � |
|||
:Thå RCÐ Commands |
|||
|
|||
|
|||
Thå standarä ZCPR³ Systeí Residenô Commanä Packagå (RCP© � |
|||
distributeä witè thå ZCPR³ systeí containó á numbeò oæ residenô � |
|||
commandó whicè maù bå enableä (dependinç oî systeí memorù anä � |
|||
securitù characteristics© aô thå discretioî oæ thå installer® � |
|||
Usagå oæ thå RCÐ commandó ió describeä iî thió HELÐ file. |
|||
|
|||
Thå RCÐ commandó residå iî memorù ratheò thaî beinç loadeä � |
|||
froí disk¬ anä thereforå operatå verù efficientlù anä arå disë � |
|||
independent® Oî thå otheò hand¬ duå tï memorù constraints¬ thå � |
|||
RCÐ commandó arå ofteî lesó powerfuì thaî theiò transienô prograí � |
|||
counterparts® |
|||
|
|||
|
|||
|
|||
Iæ aî erroò occurs¬ thå RCÐ commandó generallù chaiî tï thå � |
|||
installeä erroò handler¬ providinç á detaileä reporô oæ thå erroò � |
|||
anä allowinç thå commanä tï bå editeä oò aborted® Iæ nï erroò � |
|||
handleò ió installed¬ thå commanä whicè causeä thå erroò ió � |
|||
echoeä tï thå screen¬ followeä bù á questioî mark. |
|||
|
|||
Alì RCÐ commandó arå installatioî-dependent¬ anä manù maù bå � |
|||
configureä aô assemblù timå tï perforí iî slightlù differenô � |
|||
ways® Thå exampleó giveî iî thió HELÐ filå arå baseä oî thå � |
|||
distributeä seô oæ options® Seå sourcå codå filå Z34RCP.LIÂ foò � |
|||
morå detailó oî commanä anä optioî selection. |
|||
|
|||
:CLED anä SPOÐ Commands |
|||
Transient Counterparts: LSÈ anä SPOP |
|||
|
|||
Thå CLEÄ commanä invokeó á speciaì prograí whicè provideó � |
|||
WordStaò-likå editinç oæ commandó aô thå systeí prompt® Iô alsï � |
|||
allowó yoõ tï recalì thå lasô severaì commandó invokeä witè onlù � |
|||
onå keystroke® Finally¬ iæ available¬ CLEÄ displayó thå currenô � |
|||
systeí timå tï thå lefô oæ youò prompt® Thå syntaø is: |
|||
|
|||
CLED - invoke as shell |
|||
CLED / - invoke for next command only |
|||
|
|||
|
|||
|
|||
Thå SPOÐ commanä "pops¢ thå toð shelì froí thå shelì stack¬ � |
|||
sï thaô iô nï longeò loadó afteò everù command® Thió commanä ió � |
|||
rarelù needed¬ anä ió includeä onlù witè versionó oæ thå RCÐ � |
|||
includinç CLEÄ (seå above)® Thå syntaø ió simply: |
|||
|
|||
SPOP |
|||
:CLS Command |
|||
Transient Counterpart: None |
|||
|
|||
Thå CLÓ commanä clearó thå terminaì screen¬ removinç � |
|||
displayó whicè mighô havå beeî lefô bù previouó commandó oò � |
|||
programs® Thå syntaø is: |
|||
|
|||
CLS |
|||
|
|||
:CP Command |
|||
Transient Counterpart: MCOPY |
|||
|
|||
Thå CÐ commanä copieó onå filå froí onå DÕ tï anotheò oò � |
|||
intï thå samå DÕ undeò á differenô name® Iæ functionó 10² (geô � |
|||
stamp© anä 10³ (seô stamp© arå supporteä bù aî RSØ oò DOS¬ filå � |
|||
datestampó arå preserveä acrosó copies® Thå syntaø is: |
|||
|
|||
CP dir:ufn1 dir:ufn2 -- ufn1 to ufn2 |
|||
CP dir:ufn1 -- ufn1 to current dir: |
|||
CP dir:ufn2=dir:ufn1 -- ufn1 to ufn2 |
|||
|
|||
Examples: |
|||
|
|||
CP f1.txt f2.txt |
|||
CP b0:f1.txt a15: |
|||
CP root:f1.txt |
|||
|
|||
:D Command |
|||
Transient Counterpart: DIR, XD, XDIR |
|||
|
|||
Thå Ä commanä displayó thå directorù oæ fileó iî � |
|||
alphabeticaì ordeò acrosó thå lineó tï thå user® Thå syntaø is: |
|||
|
|||
D dir:afn.aft o |
|||
D .aft o |
|||
D /o |
|||
|
|||
Options (wheel only) are: |
|||
|
|||
S - Display System Files Only |
|||
A - Display Both Non-System and System Files |
|||
|
|||
Examples: |
|||
|
|||
D /a |
|||
D root:myfile.txt
Š D .com |
|||
|
|||
:ECHO Command |
|||
Transient Counterpart: ECHO |
|||
|
|||
ECHÏ ió usefuì iî issuinç botè messageó (tï thå user¬ � |
|||
saù withiî á commanä filå durinç execution© anä escapå sequences® � |
|||
Bù uså oæ thå %¾ anä %¼ parameters¬ ECHÏ caî senä itó outpuô iî � |
|||
combinationó oæ uppeò anä loweò case® Bù uså oæ thå %Ð anä %Ã � |
|||
parameters¬ ECHÏ outpuô caî bå toggleä betweeî screeî anä � |
|||
printer® ECHÏ useó BIOÓ calls¬ sï alì controì characteró � |
|||
(entereä aó ^character© arå passeä exactly® Hence¬ consolå-leveì � |
|||
programminç oæ sucè deviceó (CRTó anä printers© ió possible. |
|||
|
|||
Examples: |
|||
ECHO %Pthis is a test%Cof echo%P |
|||
-- "THIS IS A TEST" goes to the printer |
|||
"OF ECHO" goes to the console |
|||
(trailing %P flushes printer buffer) |
|||
|
|||
ECHO t%>his is a %<test^j |
|||
-- "This is a TEST", followed by Control-J, |
|||
goes to the console� |
|||
:ERA Command |
|||
Transient Counterpart: ERASE |
|||
|
|||
Thå ERÁ commanä eraseó files® Iæ anù characteò ió entereä � |
|||
afteò thå filespec¬ thå useò ió prompteä beforå eacè erasure® � |
|||
Thå syntaø is: |
|||
|
|||
ERA dir:afn |
|||
or: |
|||
ERA dir:afn o -- Inspect files first |
|||
|
|||
Examples: |
|||
|
|||
ERA b7:*.bak |
|||
ERA text:*.tmp i |
|||
|
|||
:H Command |
|||
Transient Counterpart: SHOW |
|||
|
|||
Thå È (help© commanä displayó tï thå consolå alì oæ thå � |
|||
builô-iî commandó currentlù availablå oî thå system¬ includinç � |
|||
RCP¬ FCP¬ anä CCÐ commands® Iæ á commanä ió wheeì-protected¬ iô � |
|||
ió noô displayeä whilå thå wheeì bytå ió off. |
|||
|
|||
The syntax is simply: |
|||
|
|||
H |
|||
|
|||
:LIST and TYPE Commands |
|||
Transient Counterparts: PRINT and PAGE |
|||
|
|||
Thå TYPÅ commanä displayó á grouð oæ fileó oî thå CRÔ whilå �Šthå LISÔ commanä printó á grouð oæ fileó oî thå printer® Whilå � |
|||
thå fileó arå beinç displayeä oò printed¬ controì-Ø entereä aô � |
|||
thå consolå skipó tï thå nexô filå anä controì-Ã cancels® Whilå � |
|||
TYPEinç á filå oò files¬ paginç maù bå switcheä ofæ witè controì � |
|||
Z® Iæ LISÔ ió giveî withouô parameters¬ á forí feeä ió senô tï � |
|||
thå printer® Thå syntaø is: |
|||
|
|||
TYPE dir:afn o -or- LIST dir:afn -or- LIST |
|||
|
|||
Option to TYPE: |
|||
|
|||
P - Do NOT Page Output to CRT |
|||
|
|||
Examples: |
|||
|
|||
TYPE b7:*.asm p |
|||
LIST text:*.txt� |
|||
:NOTE Command |
|||
Transient Counterpart: NOTE |
|||
|
|||
NOTÅ ió simplù á "dï nothing¢ commanä whicè caî bå useä tï � |
|||
placå commentó intï multiplå commanä lines® Foò instance¬ iî thå � |
|||
followinç line: |
|||
|
|||
d *.com;note this is a dir display;era *.bak |
|||
|
|||
thå Ä anä ERÁ commandó perforí normally¬ anä thå NOTÅ commanä � |
|||
simplù doeó nothinç verù efficiently. |
|||
|
|||
:P and POKE Commands |
|||
Transient Counterparts: None (Subset of DDT) |
|||
|
|||
Thå Ð commanä allowó thå useò tï examinå á chunë oæ memory® � |
|||
Iæ thå useò simplù typeó "P¢ witè nï address¬ thå nexô 12¸ byteó � |
|||
oæ memorù arå displayed® Iæ thå useò typeó "Ð address"¬ 12¸ � |
|||
byteó oæ memorù startinç aô thå indicateä addresó arå displayed® � |
|||
Iæ thå useò typeó "Ð address± address2"¬ memorù iî thió addresó � |
|||
rangå ió displayed® Thå syntax: |
|||
|
|||
P |
|||
or: |
|||
P address |
|||
or: |
|||
P address1 address2� |
|||
|
|||
|
|||
|
|||
Thå POKÅ commanä allowó thå useò tï changå thå contenô oæ � |
|||
memory® Thå useò musô specifù aî addresó tï POKE¬ anä twï basiã � |
|||
formó arå allowed: |
|||
|
|||
POKE address val1 val2 ... valn |
|||
and: |
|||
POKE address "character string |
|||
|
|||
Thå twï formó maù bå intermixeä witè leadinç valueó anä á � |
|||
trailinç characteò string: |
|||
|
|||
POKE address val1 val2 ... valn "character string� |
|||
|
|||
|
|||
|
|||
Examples: |
|||
P |
|||
P f400 |
|||
P f400 f425 |
|||
POKE f400 0 1 2 |
|||
POKE f400 "this is a test |
|||
POKE f400 1 2 3 "hello, world |
|||
|
|||
:PORT Command |
|||
Transient Counterpart: None |
|||
|
|||
Thå PORÔ commanä allowó thå useò tï inpuô anä outpuô valueó � |
|||
tï thå computer'ó input/outpuô ports® Thå syntaø is: |
|||
|
|||
PORT addr -- Read and display value |
|||
PORT addr value -- Send value to port |
|||
|
|||
Examples: |
|||
|
|||
PORT fc |
|||
PORT fd 21 |
|||
|
|||
:PROT Command |
|||
Transient Counterpart: PROTECÔ |
|||
|
|||
Thå PROÔ commanä setó thå filå protectioî attributeó foò á � |
|||
grouð oæ files® Thå R/O¬ System¬ anä Archivå attributeó maù bå � |
|||
seô witè thå R¬ S¬ anä Á options¬ respectively¬ giveî iî anù � |
|||
ordeò aó "RSA¢ oò "ASR"® Omissioî oæ onå oæ theså optionó � |
|||
toggleó thå oppositå (ie¬ omissioî oæ Ò makeó thå fileó R/W)® � |
|||
Thå É optioî allowó onå tï inspecô eacè filenamå beforå settinç � |
|||
itó filå attributes® Thå syntax: |
|||
|
|||
PROT dir:afn - set to read write, directory, modified |
|||
PROT dir:afn R - set to read only, directory, modified |
|||
PROT dir:afn RA - set to read only, directory, archived |
|||
PROT dir:afn RASI - set to read only, system, archived, |
|||
with inspection |
|||
Examples: |
|||
PROT b7:*.com rai |
|||
PROT this.doc� |
|||
:Q Command |
|||
Transient Counterpart: QUIET |
|||
|
|||
Thå Ñ commanä turnó thå ZCPÒ quieô flaç oî oò off® Thå � |
|||
quieô flaç ió useä bù somå programó anä partó oæ thå operatinç � |
|||
systeí tï determinå ho÷ mucè informatioî theù shoulä displaù tï � |
|||
thå screen® Aó á rule¬ wheî thå quieô flaç ió on¬ programó � |
|||
displaù onlù erroò messageó tï thå screen® Thå syntaø is: |
|||
|
|||
"Q" or "Q Dis" -- display quiet flag |
|||
"Q S" or "Q Set" -- turn quiet flag ON
Š "Q R" or "Q Reset" -- turn quiet flag OFF |
|||
|
|||
:R Command |
|||
Transient Counterpart: None |
|||
|
|||
Thå Ò (reset© commanä resetó á floppù disë anä displayó thå � |
|||
amounô oæ spacå remaining® ZSDOÓ doeó noô requirå diskó tï bå � |
|||
reseô witè controì-C¬ buô programó wilì reporô disë spacå � |
|||
properlù untiì á disë ió reset¬ anä iô ió á gooä practice® Ò � |
|||
alsï forceó á reseô oæ alì diskó usinç thå "fasô fixeä disë � |
|||
relog¢ featurå oæ ZSDOS. |
|||
|
|||
Examples: |
|||
|
|||
R -- Reset current disk |
|||
R b: -- Reset disk B |
|||
|
|||
|
|||
:REG Command |
|||
Transient Counterpart: REG |
|||
|
|||
Á registeò ió á ZCPR³ buffer¬ indicateä bù á digiô froí ° tï � |
|||
31¬ oò thå letteò Å foò prograí Erroò byte® Thå registeró arå � |
|||
useä tï pasó informatioî betweeî programó oò portionó oæ thå � |
|||
operatinç system. |
|||
|
|||
The REG command forms are: |
|||
REG D or REG = display values of first 10 registers |
|||
REG Mreg = subtract 1 from a register (Minus) |
|||
REG Preg = add 1 to a register (Plus) |
|||
REG Sreg value = set value of indicated register |
|||
REG reg = display a single register value� |
|||
|
|||
|
|||
|
|||
Examples: |
|||
REG S0 4 -- reg 0 = 4 |
|||
REG S12 -- reg 12 = 0 |
|||
REG P -- reg 0 = reg 0 + 1 |
|||
REG P5 -- reg 5 = reg 5 + 1 |
|||
REG M9 -- reg 9 = reg 9 - 1 |
|||
REG -- show first ten values |
|||
REG SE 0 -- zero program error byte |
|||
|
|||
:REN Command |
|||
Transient Counterpart: RENAME |
|||
|
|||
Thå REÎ commanä changeó thå namå oæ onå filå tï another® � |
|||
Thå filå nameä oî thå lefô wilì bå renameä witè thå namå tï thå � |
|||
right® Iæ aî equaì sigî ("="© ió used¬ thå oldeò CP/Í syntaø ió � |
|||
used¬ anä thå filå nameä oî thå righô ió renameä tï thå namå oî � |
|||
thå left® Iæ anotheò filå alreadù haó thió name¬ thå useò ió � |
|||
askeä whetheò oò noô tï eraså thå olä file® Thå syntaø is: |
|||
|
|||
REN dir:ufn1 ufn2 |
|||
REN ufn1 dir:ufn2 |
|||
REN ufn2=ufn1 |
|||
|
|||
Examples: |
|||
|
|||
REN oldfile.txt newfile.txt |
|||
REN root:sys.rcp sys1.rcp |
|||
REN oldname work:newname |
|||
REN work:newname=oldname� |
|||
:SP Command |
|||
Transient Counterpart: None (Subset of STAT) |
|||
|
|||
Thå Ó commanä displayó spacå remaininç oî thå currenô oò � |
|||
specifieä disk. |
|||
|
|||
Examples: |
|||
|
|||
SP -- Display space on current disk |
|||
SP a: -- Display space on disk A |
|||
:WHL Command |
|||
Transient Counterpart: WHEEL |
|||
|
|||
Thå WHÌ commanä ió useä tï turî ofæ thå Wheeì Bytå (makå � |
|||
thå useò noî-privileged)¬ tï turî oî thå Wheeì Bytå (makå thå � |
|||
useò privileged)¬ oò tï displaù thå Wheeì state® Thå syntaø is: |
|||
|
|||
WHL password - Turn wheel ON if password correct, |
|||
turn wheel OFF if not. |
|||
|
|||
WHL - Display wheel state |
|||
|
|||
Examples:
Š |
|||
WHL |
|||
WHL mypass� |
|||
|
|||
|
|||
|
|||
Bù default¬ thå followinç RCÐ commandó arå noô availablå � |
|||
whilå thå wheeì bytå ió off: |
|||
|
|||
CP Copy a File |
|||
ERA Erase Files |
|||
LIST/TYPE Display a File on Printer/CRT |
|||
P/POKE Display/Alter Memory |
|||
PORT Input/Output to system ports |
|||
PROT Protect Files |
|||
SPOP Pop Shell Stack |
|||
REG ZCPR3 Register Display/Alter |
|||
REN Rename a File |
|||
|
|||
Thå commandó dï noô appeaò iî thå È (help© display¬ anä � |
|||
attemptó tï uså theí invokå thå erroò handleò (iæ present© oò � |
|||
echï thå baä commanä bacë tï thå screeî followeä bù á questioî � |
|||
mark® |
|||
|
|||
@ -0,0 +1,136 @@ |
|||
|
|||
Enhancements to the ZCPR 3.4 Resident Command Package |
|||
October 8, 1989 by Carson Wilson |
|||
|
|||
The following is a description of the functional enhancements I have made |
|||
since Z34RCP10.LBR. Most of the changes are relatively minor, but several |
|||
exciting new capabilities have been added, and a few important bugs have been |
|||
fixed. |
|||
|
|||
New CLED (Command Line EDitor) Command: |
|||
-------------------------------------- |
|||
Rob Friefeld, author of LSH and many other excellent Z System tools, has |
|||
outdone himself with a new RCP command line editor. CLED is different from |
|||
other RCP commands, in that it is the first RCP command which also works as a |
|||
shell. By combining the memory-resident characteristics of the RCP with the |
|||
shell concept, Rob has created a command which significantly transforms the Z |
|||
System environment. CLED greatly expands the user's ability to edit and |
|||
correct command lines with such features as insert and move and delete word |
|||
left and right, but that isn't all--it also stores a queue of previous |
|||
commands (up to 203 bytes total) which can then be recalled (and edited). And |
|||
since CLED is memory-resident, there are NO time disk access penalties |
|||
involved! Please see RCPCLED.DOC for details on this exciting enhancement. |
|||
|
|||
Enhancements Pertaining to Several Commands: |
|||
------------------------------------------- |
|||
1. Dynamic Quiet Flag Sensing. |
|||
|
|||
I have added dynamic QUIET flag sensing to the CP, DIR, ERA, POKE, PORT, PROT, |
|||
REG, and Reset commands. These commands should now only display error |
|||
messages if QUIET is active. Otherwise they should just go about their |
|||
business with as little screen activity as possible. The only change to DIR |
|||
is that it doesn't show SPace remaining if QUIET is on (this is actually just |
|||
a side effect from ERA and CP). Note the anomaly that if QUIET is on, Reset |
|||
now operates somewhat differently on non-default drives: since SPace is no |
|||
longer called, the drive doesn't actually log back (no physical activity) |
|||
until accessed by another command. Also note that using the "Inspect" option |
|||
of ERA will produce odd results if Quiet is on: you will be prompted for each |
|||
file, but no filenames will be displayed. I don't really know an ideal |
|||
solution for this, but in general I think someone who gives their computer |
|||
contradictory instructions should expect contradictory results! |
|||
|
|||
Some confusion has arisen as to the purpose of the Quiet flag. It is not, nor |
|||
was it ever intended to be, a security feature. As Richard Conn, original |
|||
author of ZCPR states on page 77 of _ZCPR3: The Manual_, if the Quiet flag is |
|||
on, certain informative messages are suppressed "in order to cut down on the |
|||
'noise' created by the command." I feel that it is far better in a security |
|||
sensitive situation to simply turn off the remote terminal using the remote |
|||
terminal software than to rely on the QUIET flag. BYE supports two system |
|||
calls which can turn off the remote console altogether (both input AND |
|||
output), and I think this a better solution where sensitive commands are |
|||
concerned than use of QUIET. For one thing, QUIET wasn't designed to disable |
|||
interruption by the remote terminal of commands such as ERA or PROT. |
|||
Additionally, control of console I/O through BYE allows ANY CP/M program to be |
|||
used "quietly." Finally, Z System programs vary somewhat in their treatment |
|||
of QUIET. |
|||
|
|||
For these reasons I now consider QUIET purely a display control flag, rather |
|||
than a security device. For similar reasons, I have changed the default of |
|||
WHLQUIET to FALSE, causing WHL to display the new setting. I realize this is |
|||
a departure from recent practice, but I think the advantages in terms of |
|||
clarity, uniformity, and safety outweigh any disadvantages that may result. |
|||
|
|||
2. Intelligent Error Handling |
|||
|
|||
The CP, ERA, and REN commands now allow an intelligent error handler to act |
|||
differently when certain errors occur. The main idea is to allow larger, more |
|||
powerful transient equivalents of the resident commands to take over when more |
|||
features are required (much the same as CP/M Plus), but the interface also |
|||
allows other actions to be taken if desired. If the CP or REN commands detect |
|||
an ambiguous file specification, or if the ERA command detects a read-only |
|||
file, bit 4 of ZCPR's command status flag (CST) is set before chaining to the |
|||
error handler (if installed). Newer error handlers will bypass normal error |
|||
handling when this bit is set, instead prepending a user-installable string to |
|||
the original command and re-executing the new command. Typically, the new |
|||
string will be a single colon, or a drive, user, or directory name. |
|||
|
|||
For example, in order to save memory, the RCP CP command will not copy |
|||
multiple files, and the command |
|||
|
|||
CP *.* B: |
|||
|
|||
normally results in an error. However, if the error handler is configured to |
|||
recognize CST bit 4, it prepends a ":" to the original command, resulting in |
|||
|
|||
:CP *.* B: |
|||
|
|||
Because a leading colon (or directory specification) causes ZCPR to skip |
|||
resident command processing, a search is now made for a command file named |
|||
"CP". By storing a more powerful copy program under this name at the current |
|||
directory (or along the path if available), you can use this feature to invoke |
|||
the transient program only when needed, using the faster resident command for |
|||
single files. |
|||
|
|||
A similar approach can be used with the ERA and REN commands. |
|||
|
|||
Since any string of up to 9 characters can be installed to prepend the errant |
|||
commands, you can also gain even greater control by prepending the command |
|||
with "/" (or "ARUNZ ") to invoke ARUNZ with an arbitrary command (or no |
|||
command at all) for each CP, ERA, and/or REN. See ZERRxx.LBR for details on |
|||
how to install the error handler. |
|||
|
|||
|
|||
Enhancements Pertaining to Specific Commands: |
|||
-------------------------------------------- |
|||
(Selectable = may be deselected at assembly time) |
|||
|
|||
Cmnd Selectable Enhancement(s): |
|||
---- ---------- -------------------------------------------------------------- |
|||
CLED - New command. |
|||
|
|||
CP - Now works properly with Z3PLUS. |
|||
- Now properly sets destination datestamps of multiple-extent |
|||
files. |
|||
|
|||
D - Now allows the syntax "DIR [dir:].aft" to display all files |
|||
matching a filetype (e.g., "D .COM now the same as "D *.COM"). |
|||
|
|||
H - RCP name now appended with 'C' if CLED is included. |
|||
|
|||
Q - Now "Q R[eset]" and "Q S[et]" just reset and set quiet |
|||
status without showing it, and Q alone (or with any other |
|||
character, e.g., "Q ?") always just shows status. |
|||
* - No longer wheel protected. |
|||
|
|||
R - Revised to work properly with ZRDOS. |
|||
- Now properly resets individual drives under Z3PLUS. |
|||
|
|||
SP * - Command name changed from 'S'. |
|||
|
|||
SPOP - New command. |
|||
|
|||
TYPE - Control characters other than ^I, ^M, and ^J are filtered out, |
|||
allowing legible display of WordStar files. |
|||
|
|||
WHL * - Now always reports Wheel status. |
|||
|
|||
@ -0,0 +1,268 @@ |
|||
|
|||
; Program: Z34RCP |
|||
; Description: Resident Command Package (RCP) for ZCPR34 |
|||
; Version: 1.3 |
|||
; Author: Carson Wilson |
|||
; Date: September 13, 1989 |
|||
; Changes: Added CLED (command line editor shell) command. |
|||
; To save space, JetLDR ID section no longer pads end of each |
|||
; line. (JetLDR allows only 256 bytes maximum in its |
|||
; description field). |
|||
|
|||
; Version: 1.2 |
|||
; Author: Carson Wilson |
|||
; Date: July 9, 1989 |
|||
; Changes: Uses spaces instead of tabs in JetLDR displays. |
|||
; Copyright now ZSA. |
|||
|
|||
; Version: 1.1 |
|||
; Author: Carson Wilson |
|||
; Date: September 14, 1988 |
|||
; Changes: RCPID macro called from RCPID.LIB so that the final INCLUDE |
|||
; macro call gives total size of the RCP, including the ID |
|||
; string, with SLR assemblers. |
|||
; Label WHLQ changed to WHLQUIET in Option macro to match |
|||
; Z34HDR.LIB equate. |
|||
|
|||
; Version: 1.0 |
|||
; Author: Carson Wilson |
|||
; Date: June 15, 1988 |
|||
|
|||
; Derivation: SYSRCP (Richard Conn) |
|||
|
|||
; Z34RCP is copyright 1989 by Z Systems Associates. All rights reserved. |
|||
; End-user distribution and duplication permitted for non-commercial purposes |
|||
; only. Any commercial use of Z34RCP, defined as any situation where the |
|||
; duplicator recieves revenue by duplicating or distributing Z34RCP by itself |
|||
; or in conjunction with any hardware or software product, is expressly |
|||
; prohibited unless authorized in writing by Z Systems Associates. |
|||
|
|||
;============================================================================= |
|||
; |
|||
; D E F I N I T I O N S S E C T I O N |
|||
; |
|||
;============================================================================= |
|||
|
|||
maclib sysdef.lib ; Common logic, sys, ascii defines |
|||
maclib z34defn.lib ; Defines offsets in Z34 command processor |
|||
maclib z34mac.lib ; Macros |
|||
maclib z34rcp.lib ; Defines command options |
|||
|
|||
if ZRL |
|||
maclib z34cmn.lib ; Defines universal ZCPR named common blocks |
|||
else |
|||
maclib rcpbase.lib ; Defines addresses for one system |
|||
endif |
|||
|
|||
name RCP11 ; Declare module name |
|||
|
|||
; ============================================================================ |
|||
|
|||
; M A C R O S S E C T I O N |
|||
|
|||
; ============================================================================ |
|||
|
|||
; Macros to include module file and print module length. |
|||
; Under SLR and compatible assemblers, a running account of current RCP |
|||
; size and bytes added will be given for each module. |
|||
; |
|||
; For other assemblers you may have to either modify the non-SLR include |
|||
; macro or use a text editor to read in the actual contents of each file |
|||
; in place of the include statement. |
|||
|
|||
if SLR |
|||
; |
|||
; General purpose macro to display decimal values and messages |
|||
; |
|||
prtdec macro m1,m2,m3,m4,m5 |
|||
.radix 10 ; Decimal output |
|||
.printx m1 m2 m3 m4 m5 ; Print to screen |
|||
endm |
|||
; |
|||
; Macro to include modules and display lengths. |
|||
; |
|||
include macro filename |
|||
before defl $ |
|||
$include filename&.lib |
|||
after defl $ |
|||
modlen defl after - before ; Module length |
|||
rcplen defl after - RCPbegin ; RCP length |
|||
recs defl rcplen / 128 ; ..in records |
|||
bytes defl rcplen mod 128 ; ..and additional bytes |
|||
prtdec %modlen,<bytes added by filename&> |
|||
prtdec <Current length is>,%recs,<records>,%bytes,<bytes.> |
|||
prtdec ; Trailing CRLF |
|||
endm |
|||
|
|||
else ; Non-SLR assemblers |
|||
include macro filename |
|||
$include filename&.lib |
|||
endm |
|||
endif ; SLR |
|||
|
|||
|
|||
if ZRL |
|||
|
|||
; ============================================================================= |
|||
|
|||
; J e t L D R I D S E C T I O N |
|||
|
|||
; ============================================================================= |
|||
|
|||
; Macro to build ID block message for JetLDR. Max. length is ~256 chars. |
|||
|
|||
optcnt defl 0 ; Options counter |
|||
|
|||
option macro string1,enable1,string2,enable2 |
|||
|
|||
if enable1 ;; Skip if command not present |
|||
if [optcnt mod 4] eq 0 |
|||
db cr,lf ;; New line every four options |
|||
endif |
|||
optcnt defl optcnt + 1 ;; Increment options counter |
|||
count defl 0 ;; Initialize character count |
|||
|
|||
irpc char,string1 ;; Count and define characters |
|||
count defl count + 1 |
|||
db '&char' |
|||
endm ; irpc |
|||
|
|||
if not nul enable2 ;; Sub-option label present |
|||
if enable2 ;; Sub-option enabled |
|||
db ' (' ;; Begin sub-opt description |
|||
irpc char,string2 ;; Count and define characters |
|||
count defl count + 1 |
|||
db '&char' |
|||
endm ; irpc |
|||
db ')' ;; End sub-opt description |
|||
count defl count + 3 ;; For ' ()' |
|||
endif ; enable2 |
|||
endif ; not nul enable2 |
|||
|
|||
if [optcnt mod 4] ne 0 |
|||
count defl 11 - count |
|||
rept count |
|||
db ' ' ;; Pad to 11 spaces |
|||
endm ; rept |
|||
endif ; [optcnt mod 4] ne 0 |
|||
|
|||
endif ; enable1 |
|||
endm ; option macro |
|||
|
|||
; --------------------------------------------------------- |
|||
|
|||
COM /_ID_/ ; JetLDR ID block |
|||
db 'Copr. 1989 ZSA. Enabled Commands:' |
|||
option Cled,cledon |
|||
option Cls,clson,TC,clstcap |
|||
option Cp,cpon,stp,stpcall |
|||
option Dir,diron,sp,<spaceon and dirsp> |
|||
option Echo,echoon,lst,echolst |
|||
option Era,eraon,sp,<spaceon and erasp> |
|||
option Help,true |
|||
option List,liston |
|||
option Note,noteon |
|||
option Peek,peekon,hdr,peekhdr |
|||
; option Poke,pokeon,q,pokeq |
|||
option Poke,pokeon |
|||
option Port,porton |
|||
option Protect,proton |
|||
option Quiet,quieton |
|||
option Register,regon |
|||
option Rename,renon |
|||
option Reset,reson,sp,<spaceon and resetsp> |
|||
option Space,spaceon |
|||
option Spop,cledon |
|||
option Type,lton,cls,<clson and typecls> |
|||
option Wheel,whlon,q,whlquiet |
|||
db 0 ; ID string terminator |
|||
|
|||
;============================================================================= |
|||
; |
|||
; E N T R Y C O D E S E C T I O N |
|||
; |
|||
;============================================================================= |
|||
|
|||
cseg |
|||
else |
|||
org z3rcp |
|||
endif ; ZRL |
|||
|
|||
RCPbegin: |
|||
db 'Z3RCP' ; Package ID |
|||
|
|||
include RCPcmd ; Command table and custom commands |
|||
|
|||
include RCPsubs ; File of subroutines |
|||
|
|||
include RCPh ; 'H' help (command list) command |
|||
|
|||
; Include only selected code sections. |
|||
|
|||
if cledon ; 'CLED' and 'SPOP' commands |
|||
include RCPcled |
|||
endif ;cledon |
|||
|
|||
if clson |
|||
include RCPcls ; 'CLS' clear screen command |
|||
endif ;clson |
|||
|
|||
if reson |
|||
include RCPr ; 'R' disk reset command |
|||
endif ;reson |
|||
|
|||
if spaceon |
|||
include RCPsp ; 'SP' space on disk command |
|||
endif ;spaceon |
|||
|
|||
if diron |
|||
include RCPdir ; 'DIR' directory command |
|||
endif ;diron |
|||
|
|||
if eraon |
|||
include RCPera ; 'ERA' erase command |
|||
endif ;eraon |
|||
|
|||
if renon |
|||
include RCPren ; 'REN' rename command |
|||
endif ;renon |
|||
|
|||
if cpon |
|||
include RCPcp ; 'CP' file copying command |
|||
endif ;cpon |
|||
|
|||
if echoon |
|||
include RCPecho ; 'ECHO' command |
|||
endif ;echoon |
|||
|
|||
if quieton |
|||
include RCPquiet ; 'Q' quiet flag |
|||
endif ;quieton |
|||
|
|||
if lton |
|||
include RCPlt ; 'LIST' and 'TYPE' commands |
|||
endif ;lton |
|||
|
|||
if proton |
|||
include RCPprot ; 'PROT' file attribute setting command |
|||
endif ;proton |
|||
|
|||
if peekon or pokeon or porton |
|||
include RCPiom ; 'PEEK', 'POKE', 'PORT' commands |
|||
endif ;peekon or pokeon or porton |
|||
|
|||
if regon |
|||
include RCPreg ; 'REG' register operation commands |
|||
endif ;regon |
|||
|
|||
if whlon |
|||
include RCPwhl ; 'WHL' command |
|||
endif ;whlon |
|||
|
|||
include RCPid ; Add ID string (must come last) |
|||
|
|||
RCPend: ; Used to calculate length |
|||
end |
|||
|
|||
; End of Z34RCP.Z80 |
|||
|
|||
@ -0,0 +1,267 @@ |
|||
|
|||
; Program: Z34RCP |
|||
; Description: Resident Command Package (RCP) for ZCPR34 |
|||
; Version: 1.3 |
|||
; Author: Carson Wilson |
|||
; Date: September 13, 1989 |
|||
; Changes: Added CLED (command line editor shell) command. |
|||
; To save space, JetLDR ID section no longer pads end of each |
|||
; line. (JetLDR allows only 256 bytes maximum in its |
|||
; description field). |
|||
|
|||
; Version: 1.2 |
|||
; Author: Carson Wilson |
|||
; Date: July 9, 1989 |
|||
; Changes: Uses spaces instead of tabs in JetLDR displays. |
|||
; Copyright now ZSA. |
|||
|
|||
; Version: 1.1 |
|||
; Author: Carson Wilson |
|||
; Date: September 14, 1988 |
|||
; Changes: RCPID macro called from RCPID.LIB so that the final INCLUDE |
|||
; macro call gives total size of the RCP, including the ID |
|||
; string, with SLR assemblers. |
|||
; Label WHLQ changed to WHLQUIET in Option macro to match |
|||
; Z34HDR.LIB equate. |
|||
|
|||
; Version: 1.0 |
|||
; Author: Carson Wilson |
|||
; Date: June 15, 1988 |
|||
|
|||
; Derivation: SYSRCP (Richard Conn) |
|||
|
|||
; Z34RCP is copyright 1989 by Z Systems Associates. All rights reserved. |
|||
; End-user distribution and duplication permitted for non-commercial purposes |
|||
; only. Any commercial use of Z34RCP, defined as any situation where the |
|||
; duplicator recieves revenue by duplicating or distributing Z34RCP by itself |
|||
; or in conjunction with any hardware or software product, is expressly |
|||
; prohibited unless authorized in writing by Z Systems Associates. |
|||
|
|||
;============================================================================= |
|||
; |
|||
; D E F I N I T I O N S S E C T I O N |
|||
; |
|||
;============================================================================= |
|||
|
|||
maclib sysdef.lib ; Common logic, sys, ascii defines |
|||
maclib z34defn.lib ; Defines offsets in Z34 command processor |
|||
maclib z34mac.lib ; Macros |
|||
maclib z34rcp.lib ; Defines command options |
|||
|
|||
if ZRL |
|||
maclib z34cmn.lib ; Defines universal ZCPR named common blocks |
|||
else |
|||
maclib rcpbase.lib ; Defines addresses for one system |
|||
endif |
|||
|
|||
name RCP11 ; Declare module name |
|||
|
|||
; ============================================================================ |
|||
|
|||
; M A C R O S S E C T I O N |
|||
|
|||
; ============================================================================ |
|||
|
|||
; Macros to include module file and print module length. |
|||
; Under SLR and compatible assemblers, a running account of current RCP |
|||
; size and bytes added will be given for each module. |
|||
; |
|||
; For other assemblers you may have to either modify the non-SLR include |
|||
; macro or use a text editor to read in the actual contents of each file |
|||
; in place of the include statement. |
|||
|
|||
if SLR |
|||
; |
|||
; General purpose macro to display decimal values and messages |
|||
; |
|||
prtdec macro m1,m2,m3,m4,m5 |
|||
.radix 10 ; Decimal output |
|||
.printx m1 m2 m3 m4 m5 ; Print to screen |
|||
endm |
|||
; |
|||
; Macro to include modules and display lengths. |
|||
; |
|||
include macro filename |
|||
before defl $ |
|||
$include filename&.lib |
|||
after defl $ |
|||
modlen defl after - before ; Module length |
|||
rcplen defl after - RCPbegin ; RCP length |
|||
recs defl rcplen / 128 ; ..in records |
|||
bytes defl rcplen mod 128 ; ..and additional bytes |
|||
prtdec %modlen,<bytes added by filename&> |
|||
prtdec <Current length is>,%recs,<records>,%bytes,<bytes.> |
|||
prtdec ; Trailing CRLF |
|||
endm |
|||
|
|||
else ; Non-SLR assemblers |
|||
include macro filename |
|||
$include filename&.lib |
|||
endm |
|||
endif ; SLR |
|||
|
|||
|
|||
if ZRL |
|||
|
|||
; ============================================================================= |
|||
|
|||
; J e t L D R I D S E C T I O N |
|||
|
|||
; ============================================================================= |
|||
|
|||
; Macro to build ID block message for JetLDR. Max. length is ~256 chars. |
|||
|
|||
optcnt defl 0 ; Options counter |
|||
|
|||
option macro string1,enable1,string2,enable2 |
|||
|
|||
if enable1 ;; Skip if command not present |
|||
if [optcnt mod 4] eq 0 |
|||
db cr,lf ;; New line every four options |
|||
endif |
|||
optcnt defl optcnt + 1 ;; Increment options counter |
|||
count defl 0 ;; Initialize character count |
|||
|
|||
irpc char,string1 ;; Count and define characters |
|||
count defl count + 1 |
|||
db '&char' |
|||
endm ; irpc |
|||
|
|||
if not nul enable2 ;; Sub-option label present |
|||
if enable2 ;; Sub-option enabled |
|||
db ' (' ;; Begin sub-opt description |
|||
irpc char,string2 ;; Count and define characters |
|||
count defl count + 1 |
|||
db '&char' |
|||
endm ; irpc |
|||
db ')' ;; End sub-opt description |
|||
count defl count + 3 ;; For ' ()' |
|||
endif ; enable2 |
|||
endif ; not nul enable2 |
|||
|
|||
if [optcnt mod 4] ne 0 |
|||
count defl 11 - count |
|||
rept count |
|||
db ' ' ;; Pad to 11 spaces |
|||
endm ; rept |
|||
endif ; [optcnt mod 4] ne 0 |
|||
|
|||
endif ; enable1 |
|||
endm ; option macro |
|||
|
|||
; --------------------------------------------------------- |
|||
|
|||
COM /_ID_/ ; JetLDR ID block |
|||
db 'Copr. 1989 ZSA. Enabled Commands:' |
|||
option Cled,cledon |
|||
option Cls,clson,TC,clstcap |
|||
option Cp,cpon,stp,stpcall |
|||
option Dir,diron,sp,<spaceon and dirsp> |
|||
option Echo,echoon,lst,echolst |
|||
option Era,eraon,sp,<spaceon and erasp> |
|||
option Help,true |
|||
option List,liston |
|||
option Note,noteon |
|||
option Peek,peekon,hdr,peekhdr |
|||
option Poke,pokeon,q,pokeq |
|||
option Port,porton |
|||
option Protect,proton |
|||
option Quiet,quieton |
|||
option Register,regon |
|||
option Rename,renon |
|||
option Reset,reson,sp,<spaceon and resetsp> |
|||
option Space,spaceon |
|||
option Spop,cledon |
|||
option Type,lton,cls,<clson and typecls> |
|||
option Wheel,whlon,q,whlquiet |
|||
db 0 ; ID string terminator |
|||
|
|||
;============================================================================= |
|||
; |
|||
; E N T R Y C O D E S E C T I O N |
|||
; |
|||
;============================================================================= |
|||
|
|||
cseg |
|||
else |
|||
org z3rcp |
|||
endif ; ZRL |
|||
|
|||
RCPbegin: |
|||
db 'Z3RCP' ; Package ID |
|||
|
|||
include RCPcmd ; Command table and custom commands |
|||
|
|||
include RCPsubs ; File of subroutines |
|||
|
|||
include RCPh ; 'H' help (command list) command |
|||
|
|||
; Include only selected code sections. |
|||
|
|||
if cledon ; 'CLED' and 'SPOP' commands |
|||
include RCPcled |
|||
endif ;cledon |
|||
|
|||
if clson |
|||
include RCPcls ; 'CLS' clear screen command |
|||
endif ;clson |
|||
|
|||
if reson |
|||
include RCPr ; 'R' disk reset command |
|||
endif ;reson |
|||
|
|||
if spaceon |
|||
include RCPsp ; 'SP' space on disk command |
|||
endif ;spaceon |
|||
|
|||
if diron |
|||
include RCPdir ; 'DIR' directory command |
|||
endif ;diron |
|||
|
|||
if eraon |
|||
include RCPera ; 'ERA' erase command |
|||
endif ;eraon |
|||
|
|||
if renon |
|||
include RCPren ; 'REN' rename command |
|||
endif ;renon |
|||
|
|||
if cpon |
|||
include RCPcp ; 'CP' file copying command |
|||
endif ;cpon |
|||
|
|||
if echoon |
|||
include RCPecho ; 'ECHO' command |
|||
endif ;echoon |
|||
|
|||
if quieton |
|||
include RCPquiet ; 'Q' quiet flag |
|||
endif ;quieton |
|||
|
|||
if lton |
|||
include RCPlt ; 'LIST' and 'TYPE' commands |
|||
endif ;lton |
|||
|
|||
if proton |
|||
include RCPprot ; 'PROT' file attribute setting command |
|||
endif ;proton |
|||
|
|||
if peekon or pokeon or porton |
|||
include RCPiom ; 'PEEK', 'POKE', 'PORT' commands |
|||
endif ;peekon or pokeon or porton |
|||
|
|||
if regon |
|||
include RCPreg ; 'REG' register operation commands |
|||
endif ;regon |
|||
|
|||
if whlon |
|||
include RCPwhl ; 'WHL' command |
|||
endif ;whlon |
|||
|
|||
include RCPid ; Add ID string (must come last) |
|||
|
|||
RCPend: ; Used to calculate length |
|||
end |
|||
|
|||
; End of Z34RCP.Z80 |
|||
|
|||
@ -0,0 +1,97 @@ |
|||
|
|||
Z System Upgrades CP/M |
|||
|
|||
Z System is first-rate, state-of-the-art software for your CP/M machine. |
|||
ZCPR has been with us for over five years now, and has enhanced computer |
|||
productivity for thousands of CP/M users. Z System is now a mature |
|||
replacement for CP/M 2.2 or CP/M Plus, yet is "backward compatible" with |
|||
almost all programs written for CP/M. This means that you can still run |
|||
the CP/M programs you now use, yet take advantage of greatly increased |
|||
power and performance at the same time. |
|||
|
|||
NZ-COM and Z3PLUS form the heart of Z System. They replace the most |
|||
visible parts of CP/M 2.2 and CP/M Plus respectively, adding enhanced |
|||
command processing, named directories, vastly improved resident |
|||
commands, flow control processing, error handling, and much more. But |
|||
it isn't necessary to master all of these (at least at first!) to take |
|||
advantage of NZ-COM and Z3PLUS. In fact, though both packages come with |
|||
several disks of software and excellent manuals, almost anyone can |
|||
install either of these packages on their CP/M computer in just a few |
|||
minutes' time. The price for either NZ-COM or Z3PLUS is $69.95 plus $3 |
|||
shipping. |
|||
|
|||
The next step up in sophistication for CP/M 2.2 users is ZSDOS. ZSDOS |
|||
replaces the less visible portion of CP/M 2.2 which controls program |
|||
input and output. Through clever coding and exhaustive testing, the |
|||
authors of ZSDOS offer significant improvements in performance, safety, |
|||
and versatility for CP/M 2.2, including file time and date stamping, |
|||
file archiving for faster backups, public files (accessable from all |
|||
user areas), path access to files, and improved error messages and |
|||
handling. As with NZ-COM and Z3PLUS, ZSDOS installation is completely |
|||
menu-driven. ZSDOS comes with a collection of state-of-the-art utility |
|||
programs and a 140 page manual to help you make the most of the extended |
|||
features. ZSDOS costs $75 ($60 when purchased with NZ-COM) plus $3 |
|||
shipping. |
|||
|
|||
Another path to system enhancement for CP/M 2.2 users with hard or RAM |
|||
disks is available in the form of BackGrounder ii (BGii). BGii allows |
|||
you to "suspend" any program at the touch of a button and use a wide |
|||
range of resident commands such as DIR, REN, ERA, CALC, or TYPE. Then |
|||
hit the button again and BGii quickly returns you to the program you |
|||
suspended, right where you left off. Or use BGii's SWAP command and |
|||
you're back at the CP/M prompt, ready to run any other CP/M program. |
|||
When you're through, SWAP again and BGii returns you to your original |
|||
program, exactly as you left it! Advanced "Cut" and "Paste" commands |
|||
are also available for many terminals, allowing you to transfer sections |
|||
of screen directly from one program to another. Print spooling, |
|||
advanced key redefinition and recording capabilities, and a beautifully |
|||
designed 140-page user's manual are included. Installation is |
|||
menu-driven and easy. BGii is compatible with either ZCPR or CP/M 2.2, |
|||
and costs $75.00 plus $3 shipping. |
|||
|
|||
Last but not least is DosDisk, a small but powerful program which allows |
|||
you to read or write DIRECTLY to MS-DOS disks with your CP/M computer. |
|||
No more file transfers--simply insert a standard MS-DOS DSDD diskette in |
|||
your CP/M machine, type "DosDisk <drive>:", and away you go--all files |
|||
on the diskette are now accessable by all of your CP/M programs--even |
|||
files in MS-DOS subdirectories! DosDisk comes with a handsome 38-page |
|||
user's manual, and is available preconfigured for most machines at just |
|||
$30.00 plus $3 shipping. DosDisk is compatible with either ZCPR or |
|||
CP/M 2.2. |
|||
|
|||
These and other fine products for CP/M and CP/M Plus are available from |
|||
users groups around the country, or directly from Z Systems Associates. |
|||
Sizeable discounts for users' groups are also available from Z Systems |
|||
Associates through the Z Plan. The Z Systems Associates are: |
|||
|
|||
Sage Microsystems East |
|||
Selling & Supporting the Best in 8-Bit Software |
|||
1435 Centre St., Newton Centre, MA 02159-2469 |
|||
Voice: 617/965-3552 (9:00am - 11:30pm) |
|||
Modem: 617/965-7259 (password = DDT)(MABOS on PC-Pursuit) |
|||
|
|||
Same-day shipping of most products with modem download and support |
|||
available. Order by phone, mail, or modem. Shipping and handling $4 |
|||
per order (USA). Check, VISA, or MasterCard. Specify exact disk format. |
|||
|
|||
and: |
|||
|
|||
Plu*Perfect Systems |
|||
"==World-Class Software" |
|||
410 23rd Street, Santa Monica, CA 90402 |
|||
Voice: 213/393-6105 (evenings) |
|||
Modem: 213/670-9465 (leave message for "Bridger Mitchell") |
|||
|
|||
To order: Specify product, operating system, computer, 5 1/4" disk |
|||
format. Enclose check, adding $3 shipping ($5 foreign) + 6.5% tax in |
|||
California. Enclose invoice if upgrading BGii or ZRDOS. |
|||
|
|||
For more information on Z System, check at the above bulletin board |
|||
systems, or consult The Computer Journal for excellent articles on ZCPR |
|||
and CP/M. The Computer Journal is published six times a year by |
|||
Publishing Consultants, 190 Sullivan Crossroad, Columbia Falls, MT |
|||
59912, phone 406/257-9119. An issue averages forty pages with few ads. |
|||
Subscription rates are $16 for one year (6 issues), or $28 for two years |
|||
(12 issues) in the U.S., $22 for one year Canada and Mexico, and $24 |
|||
(surface) for one year in other countries. |
|||
|
|||
@ -0,0 +1,18 @@ |
|||
OBJECTS = zcpr33n.rel zcpr33t.rel |
|||
OTHERS = z3basen.lib z3baset.lib |
|||
TOOLS = ../../../Tools |
|||
DEST = .. |
|||
|
|||
include $(TOOLS)/Makefile.inc |
|||
|
|||
DIFFPATH = $(DIFFTO)/Source/BPBIOS |
|||
|
|||
zcpr33t.rel: ../z3baset.lib |
|||
cp ../z3baset.lib z3baset.lib |
|||
$(ZXCC) $(CPM)/ZMAC -zcpr33t.z80 -/P |
|||
rm z3baset.lib |
|||
|
|||
zcpr33n.rel: ../z3basen.lib |
|||
cp ../z3basen.lib z3basen.lib |
|||
$(ZXCC) $(CPM)/ZMAC -zcpr33n.z80 -/P |
|||
rm z3basen.lib |
|||
@ -1,373 +0,0 @@ |
|||
;:::::::::::::::::::::::::::::::::::::::::::::::********************** |
|||
; B/P BIOS Configuration and Equate File. ** System Dependant ** |
|||
; - D-X Designs Pty Ltd P112 CPU Board - ********************** |
|||
; Tailor your system here. |
|||
; |
|||
; 30 Aug 01 - Cleaned up for GPL release. HFB |
|||
; 11 May 97 - Added GIDE and adjusted HD equates. HFB |
|||
; 5 Jan 97 - Reformatted to Standard. HFB |
|||
; 10 Jun 96 - Initial Test Release. HFB |
|||
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
|||
; BIOS Configuration Equates and Macros |
|||
|
|||
DATE MACRO |
|||
DEFB '17 Jan 14' ; Date of this version |
|||
ENDM |
|||
|
|||
AUTOCL MACRO |
|||
DEFB 8,'ZEX Z41 ',0 ; Autostart command line |
|||
ENDM |
|||
|
|||
;--- Basic System and Z-System Section --- |
|||
|
|||
MOVCPM EQU no ; Integrate into MOVCPM "type" loader? |
|||
IF MOVCPM |
|||
VERS EQU 13H ; Version number in BCD (Hex) (Major/Minor) |
|||
ELSE |
|||
VERS EQU 21H ; Version number w/Device Swapping permitted |
|||
ENDIF |
|||
BANKED EQU YES ; Is this a banked BIOS? |
|||
ZSDOS2 EQU YES ; Yes = Banked Dos, No = CP/M 2.2 Compatible |
|||
INROM EQU NO ; Alternate bank in ROM? |
|||
MHZ EQU 18 ; Set to Speed in MHZ (6/9/12/16/18/24) |
|||
FASTWB EQU YES ; Yes if restoring CPR from banked RAM |
|||
; ..No if restoring from Drive A |
|||
Z3 EQU YES ; Include ZCPR init code? |
|||
HAVIOP EQU NO ; Include IOP code into Jump table? |
|||
INTPXY EQU YES ; Internal HBIOS Mini Proxy |
|||
CONF_T EQU NO ; Set for Segment Configuration T |
|||
CONF_N EQU YES ; Set for Segment Configuration N |
|||
|
|||
;--- Memory configuration Section --- (Expansion Memory configured here) |
|||
|
|||
IBMOVS EQU NO ; Yes = Inter-bank Moves allowed (Z180/64180) |
|||
; No = Include Common RAM transfer buffer |
|||
;--- Character Device Section --- |
|||
|
|||
MORDEV EQU NO ; YES = Include any extra Char Device Drivers |
|||
; NO = Only use the 4 defined Char Devices |
|||
ESCC_B EQU no ; Include ESCC Channel B Driver? |
|||
; The following two devices result in non-standard data rates |
|||
; with the standard 16.00 MHz crystal in the P112. If a more |
|||
; "standard" crystal is used (12.288, 18.432, 24.576 MHz etc) |
|||
; is used, the ports become usable. |
|||
; Driver code for ASCI0 and ASCI1 includes an option for |
|||
; assembling Polled or Interrupt-driven buffered input. |
|||
; Select the desired option for ASCI0 with the BUFFA0 flag, |
|||
; and BUFFA1 for ASCI1. |
|||
ASCI_0 EQU false ; Include ASCI0 Driver? |
|||
BUFFA0 EQU false ; Use buffered ASCI0 Input Driver? |
|||
ASCI_1 EQU false ; Include ASCI1 Driver? |
|||
BUFFA1 EQU false ; Use buffered ASCI1 Input Driver? |
|||
|
|||
QSIZE EQU 32 ; size of interrupt typeahead buffers (if used) |
|||
; ..must be 2^n with n<8 |
|||
RTSCTS EQU no ; Include RTS/CTS code on Serial Outputs? |
|||
XONOFF EQU no ; Include Xon/Xoff handshaking in Serial lines? |
|||
|
|||
;--- Clock and Time Section --- |
|||
|
|||
CLOCK EQU YES ; Include ZSDOS Clock Driver Code? |
|||
DS1202 EQU YES ; Use Dallas DS-1202 instead of Interrupt RTC? |
|||
CLKSET EQU YES ; Allow DS-1202 Clock Sets? (Error if No) |
|||
TICTOC EQU NO ;== NOT USED IN P112 ("heartbeat" count) |
|||
|
|||
;--- Floppy Diskette Section --- |
|||
|
|||
BIOERM EQU yes ; Print BIOS error messages? |
|||
CALCSK EQU YES ; Calculate skew table? |
|||
AUTOSL EQU YES ; Auto select floppy formats? |
|||
; If AUTOSL=True, the next two are active... |
|||
FDDMA EQU no ; Use DMA Control for Floppy Drive Transfers? |
|||
FLOPYH EQU no ; Include "Hi-Density" Floppy Formats? |
|||
FLOPY8 EQU no ; Include 8" Floppy Formats? |
|||
MORDPB EQU NO ; Include additional Floppy DPB Formats? |
|||
|
|||
;--- RAM Disk Section --- |
|||
|
|||
RAMDSK EQU YES ; YES = Make RAM-Disk Code, NO = No code made |
|||
|
|||
;--- Hard Disk Section --- |
|||
|
|||
HARDDSK EQU YES ; YES = Add Hard-disk Code, NO = Floppy Only |
|||
; (Pick 1 of 3 options below) |
|||
SCSI EQU NO ; YES = Use SCSI Driver |
|||
IDE EQU NO ; YES = Use IDE Driver |
|||
SIMHDSK EQU NO ; YES = Use SIMH HDSK Driver |
|||
HBDSK EQU YES ; YES = Use HBIOS Disk Driver |
|||
HDDMA EQU NO ; Use DMA-Controlled Hard Disk Data Transfers? |
|||
; (DMA not implemented for GIDE) |
|||
UNIT_0 EQU YES ; Hard Disk Physical Unit 1 |
|||
UNIT_1 EQU YES ; Hard Disk Physical Unit 2 |
|||
UNIT_2 EQU YES ; Hard Disk Physical Unit 3 |
|||
|
|||
;--- Logical Drive Section --- |
|||
|
|||
DRV_A EQU no ; Set each of these equates for the drive and |
|||
DRV_B EQU no ; partition complement of your system. Assume |
|||
DRV_C EQU no ; that A-D are Floppies. |
|||
DRV_D EQU no |
|||
DRV_E EQU yes ; Assume that E-L and N-P are Hard Disk |
|||
DRV_F EQU yes ; Partitions |
|||
DRV_G EQU yes |
|||
DRV_H EQU yes |
|||
DRV_I EQU yes |
|||
DRV_J EQU yes |
|||
DRV_K EQU yes |
|||
DRV_L EQU yes |
|||
DRV_M EQU RAMDSK ; This is Yes for RAM drive |
|||
DRV_N EQU yes |
|||
DRV_O EQU ~RAMDSK ; Use HBIOS RAM disk if BPBIOS RAM disk is not enabled |
|||
DRV_P EQU no |
|||
|
|||
;========== Configuration Unique Equates (P112) =========== |
|||
;>>>>>>>>>>>>>>>>>>>>>>>>>>> W A R N I N G <<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
|||
;>>> Do NOT Alter these unless you KNOW what you're doing <<< |
|||
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
|||
|
|||
REFRSH EQU NO ; Set to NO for only Static RAM, needed for |
|||
; systems with dynamic RAMs. |
|||
NOWAIT EQU NO ; Set to NO to use configured Wait States in |
|||
; Hard Disk Driver. Yes to eliminate Waits. |
|||
|
|||
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|||
; For Z-180/HD64180 systems, The Bank numbers should reflect Physical |
|||
; memory in 32k increments. In P112, the ROM occupies the first 32k |
|||
; increment and is ambiguously addressed occupying 0-1FFFFH. The upper |
|||
; memory bounds (BNKU, BNK3 and BNKM) should be set for your configuration. |
|||
|
|||
BNK0 EQU BID_USR ; First TPA Bank (switched in/out) 40000H |
|||
BNK1 EQU BID_HB ; Second TPA Bank (Common Bank) 48000H |
|||
BNK2 EQU BID_SYS ; System Bank (BIOS, DOS, CPR) 50000H |
|||
BNKU EQU 00H ; User Area Bank 58000H |
|||
; (set to 0 to disable) |
|||
BNK3 EQU BID_RAMD ; First Bank for RAM disk 60000H |
|||
BNKM EQU BID_RAMM ; Maximum Bank # F8000H |
|||
; With both on-board RAMs only (MEM1 or MEM2), |
|||
; the maximum Bank number is 11 (0BH). |
|||
|
|||
;=========== CPU-dependent Equates, Zilog Z-180/Hitachi HD64180 ========== |
|||
|
|||
CNTLA0 EQU 00H ; Control Port ASCI 0 |
|||
CNTLA1 EQU 01H ; Control Port ASCI 1 |
|||
STAT0 EQU 04H ; Serial port 0 Status |
|||
STAT1 EQU 05H ; Serial port 1 Status |
|||
TDR0 EQU 06H ; Serial port 0 Output Data |
|||
TDR1 EQU 07H ; Serial port 1 Output Data |
|||
RDR0 EQU 08H ; Serial port 0 Input Data |
|||
RDR1 EQU 09H ; Serial Port 1 Input Data |
|||
CNTR EQU 0AH ; HD64180 Counter port |
|||
TMDR0L EQU 0CH ; HD64180 DMA channel reg (low) |
|||
TMDR0H EQU 0DH ; HD64180 DMA channel reg (hi) |
|||
RLDR0L EQU 0EH ; CTC0 Reload Count, Low |
|||
RLDR0H EQU 0FH ; CTC0 Reload Count, High |
|||
TCR EQU 10H ; Interrupt Control Register |
|||
TMDR1L EQU 14H ; Timer Data Reg Ch1 (Low) |
|||
TMDR1H EQU 15H ; Timer Data Reg Ch1 (High) |
|||
RLDR1L EQU 16H ; Timer Reload Reg Ch1 (Low) |
|||
RLDR1H EQU 17H ; Timer Reload Reg Ch1 (High) |
|||
FRC EQU 18H ; Free-Running Counter |
|||
CCR EQU 1FH ; CPU Control Register (ZS8180/Z80182) |
|||
SAR0L EQU 20H ; DMA Channel 0 Register start (8 ports) |
|||
MAR1L EQU 28H ; DMA Channel 1 Register start (8 ports) |
|||
DSTAT EQU 30H ; DMA Status/Control port |
|||
DMODE EQU 31H ; DMA Mode Control port |
|||
DCNTL EQU 32H ; DMA/WAIT Control Register |
|||
IL EQU 33H ; Interrupt Segment Register |
|||
ITC EQU 34H ; Interrupt/Trap Control Register |
|||
RCR EQU 36H ; HD64180 Refresh Control register |
|||
CBR EQU 38H ; MMU Common Base Register |
|||
BBR EQU 39H ; MMU Bank Base Register |
|||
CBAR EQU 3AH ; MMU Common/Bank Area Register |
|||
OMCR EQU 3EH ; Operation Mode Control Reg |
|||
ICR EQU 3FH ; I/O Control Register |
|||
|
|||
; Some bit definitions used with the Z-180 on-chip peripherals: |
|||
|
|||
TDRE EQU 02H ; ACSI Transmitter Buffer Empty |
|||
RDRF EQU 80H ; ACSI Received Character available |
|||
|
|||
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|||
; Extended Features of Z80182 for P112 |
|||
|
|||
WSGCS EQU 0D8H ; Wait-State Generator CS |
|||
ENH182 EQU 0D9H ; Z80182 Enhancements Register |
|||
PINMUX EQU 0DFH ; Interrupt Edge/Pin Mux Register |
|||
RAMUBR EQU 0E6H ; RAM End Boundary |
|||
RAMLBR EQU 0E7H ; RAM Start Boundary |
|||
ROMBR EQU 0E8H ; ROM Boundary |
|||
FIFOCTL EQU 0E9H ; FIFO Control Register |
|||
RTOTC EQU 0EAH ; RX Time-Out Time Constant |
|||
TTOTC EQU 0EBH ; TX Time-Out Time Constant |
|||
FCR EQU 0ECH ; FIFO Register |
|||
SCR EQU 0EFH ; System Pin Control |
|||
RBR EQU 0F0H ; MIMIC RX Buffer Register (R) |
|||
THR EQU 0F0H ; MIMIN TX Holding Register (W) |
|||
IER EQU 0F1H ; Interrupt Enable Register |
|||
LCR EQU 0F3H ; Line Control Register |
|||
MCR EQU 0F4H ; Modem Control Register |
|||
LSR EQU 0F5H ; Line Status Register |
|||
MDMSR EQU 0F6H ; Modem Status Register |
|||
MSCR EQU 0F7H ; MIMIC Scratch Register |
|||
DLATL EQU 0F8H ; Divisor Latch (Low) |
|||
DLATM EQU 0F9H ; Divisor Latch (High) |
|||
TTCR EQU 0FAH ; TX Time Constant |
|||
RTCR EQU 0FBH ; RX Time Constant |
|||
IVEC EQU 0FCH ; MIMIC Interrupt Vector |
|||
MIMIE EQU 0FDH ; MIMIC Interrupt Enable Register |
|||
IUSIP EQU 0FEH ; MIMIC Interrupt Under-Service Register |
|||
MMCR EQU 0FFH ; MIMIC Master Control Register |
|||
|
|||
; Z80182 PIO Registers |
|||
|
|||
DDRA EQU 0EDH ; Data Direction Register A |
|||
DRA EQU 0EEH ; Port A Data |
|||
DDRB EQU 0E4H ; Data Direction Register B |
|||
DRB EQU 0E5H ; Data B Data |
|||
DDRC EQU 0DDH ; Data Direction Register C |
|||
DRC EQU 0DEH ; Data C Data |
|||
|
|||
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|||
; ESCC Registers on Z80182 |
|||
|
|||
SCCACNT EQU 0E0H ; ESCC Control Channel A |
|||
SCCAD EQU 0E1H ; ESCC Data Channel A |
|||
SCCBCNT EQU 0E2H ; ESCC Control Channel B |
|||
SCCBD EQU 0E3H ; ESCC Data Channel B |
|||
|
|||
; [E]SCC Internal Register Definitions |
|||
|
|||
RR0 EQU 00H |
|||
RR1 EQU 01H |
|||
RR2 EQU 02H |
|||
RR3 EQU 03H |
|||
RR6 EQU 06H |
|||
RR7 EQU 07H |
|||
RR10 EQU 0AH |
|||
RR12 EQU 0CH |
|||
RR13 EQU 0DH |
|||
RR15 EQU 0FH |
|||
|
|||
WR0 EQU 00H |
|||
WR1 EQU 01H |
|||
WR2 EQU 02H |
|||
WR3 EQU 03H |
|||
WR4 EQU 04H |
|||
WR5 EQU 05H |
|||
WR6 EQU 06H |
|||
WR7 EQU 07H |
|||
WR9 EQU 09H |
|||
WR10 EQU 0AH |
|||
WR11 EQU 0BH |
|||
WR12 EQU 0CH |
|||
WR13 EQU 0DH |
|||
WR14 EQU 0EH |
|||
WR15 EQU 0FH |
|||
|
|||
; FDC37C665/6 Parallel Port in Standard AT Mode |
|||
|
|||
DPORT EQU 8CH ; Data Port |
|||
SPORT EQU 8DH ; Status Port |
|||
CPORT EQU 8EH ; Control Port |
|||
|
|||
; FDC37C665/6 Configuration Control (access internal registers) |
|||
|
|||
CFCNTL EQU 90H ; Configuration control port |
|||
CFDATA EQU 91H ; Configuration data port |
|||
|
|||
; FDC37C665/6 Floppy Controller on P112 (Intel 80277 compatible) |
|||
|
|||
DCR EQU 92H ; Drive Control Register (Digital Output) |
|||
MSR EQU 94H ; Main Status Register |
|||
DR EQU 95H ; Data/Command Register |
|||
DRR EQU 97H ; Data Rate Register/Disk Changed Bit in B7 |
|||
|
|||
_DMA EQU 0A0H ; Diskette DMA Address |
|||
|
|||
; FDC37C665/6 Serial Port (National 16550 compatible) |
|||
|
|||
_RBR EQU 68H ;R Receiver Buffer |
|||
_THR EQU 68H ;W Transmit Holding Reg |
|||
_IER EQU 69H ;RW Interrupt-Enable Reg |
|||
_IIR EQU 6AH ;R Interrupt Ident. Reg |
|||
_FCR EQU 6AH ;W FIFO Control Reg |
|||
_LCR EQU 6BH ;RW Line Control Reg |
|||
_MCR EQU 6CH ;RW Modem Control Reg |
|||
_LSR EQU 6DH ;RW Line Status Reg |
|||
_MMSR EQU 6EH ;RW Modem Status Reg |
|||
_SCR EQU 6FH ;N/A Scratch Reg. (not avail in XT) |
|||
_DDL EQU 68H ;RW Divisor LSB | wih DLAB |
|||
_DLM EQU 69H ;RW Divisor MSB | set High |
|||
|
|||
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|||
; Equates for the National DP8490/NCR 5380 Prototype SCSI controller |
|||
|
|||
IF HARDDSK |
|||
NCR EQU 40H ; Base of NCR 5380 |
|||
|
|||
; 5380 Chip Registers |
|||
|
|||
NCRDAT EQU NCR ; Current SCSI Data (Read) |
|||
; Output Data Register (Write) |
|||
NCRCMD EQU NCR+1 ; Initiator Command Register (Read/Write) |
|||
NCRMOD EQU NCR+2 ; Mode Register (Read/Write) |
|||
NCRTGT EQU NCR+3 ; Target Command Register (Read/Write) |
|||
NCRBUS EQU NCR+4 ; Current SCSI Bus Status (Read) |
|||
NCRST EQU NCR+5 ; Bus & Status Register (Read) |
|||
; Start DMA Send (Write) |
|||
NCRINT EQU NCR+7 ; Reset Parity/Interrupt (Read) |
|||
; Start DMA Initiator Receive (Write) |
|||
DMAACK EQU NCR+8 ; SCSI Dack IO Port (Read/Write) |
|||
|
|||
; Bit Assignments for NCR 5380 Ports as indicated |
|||
|
|||
B_ARST EQU 10000000B ; Assert *RST (NCRCMD) |
|||
B_AACK EQU 00010000B ; Assert *ACK (NCRCMD) |
|||
B_ASEL EQU 00000100B ; Assert *SEL (NCRCMD) |
|||
B_ABUS EQU 00000001B ; Assert *Data Bus (NCRCMD) |
|||
|
|||
B_BSY EQU 01000000B ; *Busy (NCRBUS) |
|||
B_REQ EQU 00100000B ; *Request (NCRBUS) |
|||
B_MSG EQU 00010000B ; *Message (NCRBUS) |
|||
B_CD EQU 00001000B ; *Command/Data (NCRBUS) |
|||
B_IO EQU 00000100B ; *I/O (NCRBUS) |
|||
B_SEL EQU 00000010B ; *Select (NCRBUS) |
|||
|
|||
B_PHAS EQU 00001000B ; Phase Match (NCRST) |
|||
B_BBSY EQU 00000100B ; Bus Busy (NCRST) |
|||
|
|||
B_MBSY EQU 00000100B ; Monitor Busy Flag (NCRMOD) |
|||
B_DMA EQU 00000010B ; DMA Mode of transfer (NCRMOD) |
|||
ENDIF ;harddsk |
|||
|
|||
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|||
; Equates reflecting GIDE Base address from Address Jumpers (if GIDE added) |
|||
; Set the base GIDE equate to the jumper setting on the GIDE board. |
|||
|
|||
IF IDE |
|||
GIDE EQU 50H ; Set base of 16 byte address range |
|||
|
|||
IDEDOR EQU GIDE+6 ; Digital Output Register |
|||
IDEDat EQU GIDE+8 ; IDE Data Register (16-bit wide) |
|||
IDEErr EQU GIDE+9 ; IDE Error Register |
|||
IDESCnt EQU GIDE+0AH ; IDE Sector Count Register |
|||
IDESNum EQU GIDE+0BH ; IDE Sector Number Register |
|||
IDECLo EQU GIDE+0CH ; IDE Cylinder Number (Low) |
|||
IDECHi EQU GIDE+0DH ; IDE Cylinter Number (High) |
|||
IDESDH EQU GIDE+0EH ; IDE S-Drive-Head Register |
|||
IDECmd EQU GIDE+0FH ; IDE Command/Status Register |
|||
|
|||
CMDHOM EQU 10H ; Home Drive Heads |
|||
CMDRD EQU 20H ; Read Sector Command (w/retry) |
|||
CMDWR EQU 30H ; Write Sector Command (w/retry) |
|||
CMDVER EQU 40H ; Verify Sector(s) Command (w/retry) |
|||
CMDFMT EQU 50H ; Format Track Command |
|||
CMDDIAG EQU 90H ; Execute Diagnostics Command |
|||
CMDINIT EQU 91H ; Initialize Drive Params Command |
|||
CMDPW0 EQU 0E0H ; Low Range of Power Control Commands |
|||
CMDPW3 EQU 0E3H ; High Range of Power Control Commands |
|||
CMDPWQ EQU 0E5H ; Power Status Query Command |
|||
CMDID EQU 0ECH ; Read Drive Ident Data Command |
|||
ENDIF ;ide |
|||
;=================== End Unique Equates ======================= |
|||
|
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue