Digital Research
This commit is contained in:
2020-11-06 18:50:37 +01:00
parent 621ed8ccaf
commit 31738079c4
8481 changed files with 1888323 additions and 0 deletions

View File

@@ -0,0 +1,806 @@
General Information on CP/M
CP/M File References
CP/M Line Editing and Output Control
CP/M Built-In Commands
CP/M Transient Commands
Physical Device Assignments for ARIES-1
CP/M STAT Command
CP/M PIP Command
CP/M ED Command
CP/M ASM Command
CP/M LOAD Command
The UNLOAD Command
CP/M DDT Command
The ZDT Command
CP/M SYSGEN Command
CP/M SUBMIT and XSUB Commands
CP/M BDOS -- Basic I/O Operations
CP/M BDOS -- Basic Disk Operations
CP/M File Types
CP/M BIOS Jump Vector
:General Information on CP/M
CP/M is a monitor control program for microcomputer software
development which uses IBM-compatible flexible disks (floppy disks) for
mass storage. Using a microcomputer mainframe based on Intel's 8080 or
Zilog's Z80 microprocessor, CP/M provides a general environment for program
construction, storage, and editing, along with assembly and program debug
facilities. An important feature of CP/M is that it can be easily altered
to execute with any computer configuration which uses an Intel 8080 or
Zilog Z80 Microprocessor and has at least 20K bytes of main memory with up
to eight IBM-compatable diskette drives.
The CP/M monitor provides access to programs through a comprehensive
file management system. The file subsystem supports a named file
structure, allowing dynamic allocation of file space as well as sequential
and random file access. Using this file system, up to 128 distinct
programs can be stored in both source and machine-executable form.
Digital Research, the designer of CP/M, has provided a set of nine
manuals which describe the use and operation of CP/M in detail.
These manuals are:
1. An Introduction to CP/M Features and Facilities
2. ED: A Context Editor for the CP/M Disk System
3. ASM: CP/M Assembler User's Manual
4. DDT: CP/M Dynamic Debugging Tool User's Manual
5. CP/M 1.4 Interface Guide
6. CP/M 1.4 System Alteration Guide
7. CP/M 2.0 User's Guide
8. CP/M 2.0 Interface Guide
9. CP/M 2.0 System Alteration Guide
As the reader can see, CP/M supports a context editor, an assembler
(Intel-compatable), and a debugger system. These are available in the
basic CP/M package. There is a large variety of other software available
which can run under CP/M with little or no modification. Such software
includes several assemblers (both 8080 and Z80), a symbolic debugger,
several high-level languages (including FORTRAN IV {compiler}, BASIC-E
{translator}, CBASIC {translator}, many interpretive BASICs, ALGOL, FOCAL,
and C), and several special-purpose applications programs (such as text
formatting systems and accounting systems).
This HELP File addresses itself specifically to the CP/M 2.x Operating
Systems.
:CP/M File References
A file reference identifies a particular file or group of files on a
particular disk attached to CP/M. These file references can be either
unambiguous (ufn) or ambiguous (afn). An unambiguous file reference
uniquely identifies a single file, while an ambiguous file reference may be
satisfied by a number of different files.
An unambiguous file reference is an exact name of the specified file.
It consists of up to eight characters in the file name and three characters
in the file type. An unambiguous file reference is of the form --
pppppppp.sss
The characters used in specifying an unambiguous file reference may
not contain any of --
< > . , ; : = ? * [ ]
An ambiguous file reference is used for directory search and pattern
matching. The form of an ambiguous file reference is similar to an
unambiguous reference, except the symbol '?' may be interspersed throughout
the file reference. In various commands throughout CP/M, the '?' symbol
matches any character of a file name in the '?' position. For example,
X?Y.C?M will match XZY.COM and X3Y.CEM. The '*' symbol is used to match
all characters of a file name or file type. For example, *.COM will match
XZY.COM and HELP.COM, while HELP.* will match HELP.COM and HELP.HLP.
:CP/M Line Editing and Output Control
The following are the line editing functions supported by CP/M --
rubout Delete and echo the last character typed at the
console.
Ctrl-H Delete the last character typed; Backspace one
character; CRT-oriented
Ctrl-U Delete the entire line typed at the console.
Ctrl-X Delete the entire line typed at the console; Backspace
to the beginning of the current line; CRT-oriented.
Ctrl-R Retype current command line: types a "clean line"
following character deletion with rubouts.
Ctrl-E Physical end of line: carriage is returned, but
line is not sent until the carriage return key is
depressed.
Ctrl-M Terminates input (carriage return).
Ctrl-J Terminates current input (line feed); CRT-oriented
Ctrl-C CP/M system reboot (warm start).
Ctrl-Z End input from the console (used in PIP and ED).
Other control functions affect console output --
Ctrl-P Copy all subsequent console output to the currently-
assigned list device (LST:). Output is sent to both
the list device and the console device until the next
Ctrl-P is typed.
Ctrl-S Stop the console output temporarily. Program execution
and output continue when the next character is typed
at the console. Typing Ctrl-C returns control to CP/M.
Input lines can generally be up to 255 characters in length. They are
not acted upon until the carriage return key is typed.
:CP/M Built-In Commands
ERA afn -- The ERA (erase) command removes files from the
currently logged-in disk.
DIR afn -- The DIR (directory) command causes the names of all
files which satisfy the ambiguous file name afn to be listed
on the console device. All files are listed if no afn is
given.
REN ufn1=ufn2 -- The REN (rename) command allows the user to
change the names of files on disk. The file satisfying ufn2
is changed to ufn1.
SAVE n ufn -- The SAVE command places n pages (256-byte blocks)
onto disk from the TPA and names this file ufn.
TYPE ufn -- The TYPE command displays the contents of the ASCII
source file ufn on the currently logged-in disk at the
console device.
USER n -- Upon cold boot, the user is automatically logged in to
User Area 0, which is compatable with CP/M 1.4 directories.
The USER command allows the user to move to another logical
area within the same directory; areas are numbered 0-15.
The ERA, DIR, REN, SAVE, and TYPE commands apply to the
current User Area.
:CP/M Transient Commands
The CP/M standard transient commands are --
STAT List the number of bytes of storage and data on the
currently logged-in disk, provide statistical
information about particular files, and display or
alter device assignment.
PIP Load the Peripheral Interchange Program for subsequent
disk file and peripheral transfer operations.
ED Load and execute the CP/M text editor program.
SUBMIT Submit a file of commands for batch processing.
XSUB Used in conjunction with SUBMIT, transfers all buffered
console input from CON: to the SUBMIT File.
ASM Load the CP/M assembler and assemble the specified
program from disk.
LOAD Load the file in Intel "hex" machine code format and
produce a file in machine executable form which can be
loaded into the TPA (this loaded program becomes a new
command under the CCP).
DDT Load the CP/M debugger into the TPA and execute it.
DUMP Dump the contents of a file in hex.
SYSGEN Create a new CP/M system diskette.
MOVCPM Regenerate the CP/M system for a particular memory
size.
:Physical Device Assignments for ARIES-1
Logical Device Physical Device
CON: TTY: Model 43 Teletype
CRT: Hazeltine 1500 CRT
BAT: CRT and Modem
UC1: In=CRT, Out=CRT and Modem
RDR: TTY: Model 43 Teletype
PTR: Modem
UR1: CRT and Modem w/CRT Output
UR2: CRT and Modem
PUN: TTY: Model 43 Teletype
PTP: Modem
UP1: CRT and Modem
UP2: CRT and Modem
LST: TTY: Model 43 Teletype
CRT: Hazeltine 1500 CRT
LPT: Modem
UL1: CRT and Modem
:CP/M STAT Command
The STAT Command takes any of the following forms --
STAT Calculate the storage remaining on all active drives and print a
message like
x: R/W, SPACE: nnnK -- if disk is Read/Write
x: R/O, SPACE: nnnK -- if disk is Read Only
STAT x: Calculate the storage remaining on the specified drive and print
BYTES REMAINING ON x: nnnK
STAT x:afn [$S]
Scan the specified files on the specified drive (x: is optional),
and list all files which satisfy the unambiguous reference in
alphabetical order with storage requirements. A table like the
following is generated --
Size Recs Bytes Ext Acc
sssss rrrr nnnk ee a/b d:pppppppp.sss
where
sssss -- number of virtual 128-byte records in file
This field is display if the optional $S is given
rrrr -- number of 128-byte records in each extent of the file
nnnK -- number of bytes (in K, K=1024) allocated to the file
ee -- number of 16K extensions
a/b -- access mode of file; R/O or R/W
d:pppppppp.sss -- drive name (d may be A, B, C, D) and file
name
STAT x:=R/O
Set the specified drive to Read Only. This is cleared by a warm
boot. When a disk is Read Only, the message
BDOS ERR ON x: READ ONLY
will appear if there is an attempt to write to it.
STAT VAL:
Summarize the status commands. STAT VAL: will print the list --
Temp R/O Disk: d:=R/O
Set Indicator: d:filename.typ $R/O $R/W $SYS $DIR
Disk Status : DSK: d:DSK:
User Status : USR:
Iobyte Assign:
CON: = TTY: CRT: BAT: UC1:
RDR: = TTY: PTR: UR1: UR2:
PUN: = TTY: PTP: UP1: UP2:
LST: = TTY: CRT: LPT: UL1:
STAT DEV:
Display the current logical to physical device mapping. For
example, the list may appear as --
CON: = CRT: PUN: = PTP:
RDR: = UR1: LST: = TTY:
STAT d:afn [$R/O or $R/W or $SYS or $DIR]
Set the various permanent file indicators. R/O=Read/Only,
R/W=Read/Write, SYS=System, DIR=Non-System
STAT ld1=pd1, ld2=pd2, ...
Change the logical to physical device assignments. Logical
device ld1 is assigned to physical device pd1, etc. The valid
logical device names are --
CON: The system console device
RDR: The paper tape reader device
PUN: The paper tape punch device
LST: The output list device
The valid physical device names are --
TTY: Slow speed output device (teletype)
CRT: High speed output device (cathode ray tube)
BAT: Batch processing (CON: input is RDR:, CON: output
is LST:)
UC1: User-defined console
PTR: Paper tape reader
PTP: Paper tape punch
UR1: User-defined reader #1
UR2: User-defined reader #2
UP1: User-defined punch #1
UP2: User-defined punch #2
LPT: Line printer
UL1: User-defined list device #1
STAT d:DSK:
List the characteristics of the disk named "d:"; if "d:" is not
specified, list the characteristics of all active disks. A sample listing:
d: Drive Characteristics
65536: 128 Byte Record Capacity
8192: Kilobyte Drive Capacity
128: 32 Byte Directory Entries
0: Checked Directory Entries
1024: Records/ Extent
128: Records/ Block
58: Sectors/ Track
2: Reserved Tracks
STAT USR:
List the User Number the user is currently in and the User
Numbers which have files on the currently addressed disk. A sample
listing:
Active User : 0
Active Files: 0 1 3
:CP/M PIP Command
PIP (Peripheral Interchange Program) is the CP/M transient which
implements the basic media conversion operations necessary to load, print,
punch, copy, and combine disk files. PIP is initiated by one of the
following forms --
PIP Engage PIP, prompt the user with '*', and read
command lines directly from the console. PIP used
in this way is exited by either typing an empty
command line (just a carriage return) or a Ctrl-C
as the first character of the line.
PIP cmnd Engage PIP, execute the specified command, and
return to CP/M.
The form of each command line in PIP is --
destination = source#1, source#2, source#3, ..., source#n
The general forms of PIP command lines are --
x:=y:afn Copy all files satisfying afn from drive y to
drive x. 'y' may be omitted, and, if so, the
currently logged-in drive is selected.
x:ufn=y: Copy the file given by ufn from y to x. 'x' may
be omitted, and, if so, the currently logged-in
drive is selected.
x:afn=y:afn Like the above, but x and/or y may be omitted; the
default drive is selected for the omitted
drive(s).
ld=pd Copy from the specified physical device to the
specified logical device. Valid logical devices
are --
CON:, RDR:, PUN:, LST:
Valid physical devices are --
TTY:, CRT:, UC1:, PTR:, PTP:, UR1:, UR2:,
UP1:, UP2:, LPT:, UL1:
Additional device names which may be used in PIP commands are --
NUL: Send 40 Nulls (ASCII 0) to the device.
EOF: Send a CP/M End of File character (ASCII Ctrl-Z).
INP: Special PIP input source to be patched (see manual).
OUT: Special PIP output destination to be patched (see
manual).
PRN: Same as LST:, but tabs are expanded at every eighth
character position, lines are numbered, and page ejects
are inserted every 60 lines with an initial eject.
The user can also specify one or more PIP parameters enclosed in
square brackets separated by zero or more blanks. These parameters are --
B Block mode transfer. Data is buffered by PIP until an ASCII X-
Off character (Ctrl-S) is received from the source device.
Dn Delete characters which extend past column n in the transfer of
data to the destination from the character source.
E Echo all transfer operations to the console.
F Filter (remove) form feeds from the file.
Gn Get File from User Number n (n in the range 0 - 15)
H Hex data transfer. All data is checked for proper Intel hex file
format.
I Ignore ':00' records in the transfer of Intel hex format file.
L Translate upper case to lower case alphabetics.
N Add line numbers to each line transferred to the destination.
O Object file (non-ASCII) transfer. Ignore End of File.
Pn Include page ejects at every n lines.
Qs^Z Quit copying from the source device or file when the string s
(terminated by Ctrl-Z) is encountered.
R Read system files
Ss^Z Start copying from the source file when the string s is seen.
Tn Expand tabs to every nth column.
U Translate lower case to upper case alphabetics.
V Verify that data has been copied correctly.
W Write over R/O files without console interrogation
Z Zero the parity bit on input for each ASCII character.
:CP/M ED Command
The ED Program is the CP/M system context editor, which allows
creation and alteration of ASCII files. Complete details are given in the
user's manual.
The following are the error indicators given by ED --
? Unrecognized Command
> Memory buffer full
# Cannot apply command the number of times specified
O Cannot open LIB file in R command
The following are the control characters recognized by ED --
^C System reboot
^E Physical <CR> <LF> (not entered in command)
^H Character delete (backspace)
^I Logical tab
^J New line (line feed)
^L Logical <CR> <LF> in search and substitute strings
^M New line (carriage return)
^U Line delete
^X Line delete and backspace
^Z String terminator
Rubout Character delete
Break Discontinue command
The following are the commands recognized by ED --
nA Append lines
+/- B Beginning/Bottom of buffer
+/- nC Move character positions
+/- nD Delete characters
E Exit
nFs^Z Find string
H End edit, close and reopen files
Is^Z Insert characters
nJ Place strings in juxtaposition
+/- nK Kill (delete) lines
+/- nL Move down/up lines
nM Macro definition
O Return to original file
+/- nP Move and print pages
Q Quit with no file changes
R Read library file
nSs1^Zs2^Z
Substitute s2 for s1
+/- nT Type lines
+/- U Translate lower to upper case if U; none if -U
+/- V Engage/disengage line numbers (verify)
0V Print memory buffer info (free/total usage)
nW Write lines
nX Transfer n lines to X$$$$$$$.LIB
0X Empty X$$$$$$$.LIB
nZ Sleep
+/- n Move and type (+/- nLT)
n: Move to absolute line (V engaged)
:n Process from current line to specified line (V engaged)
:CP/M ASM Command
The ASM Command loads and executes the CP/M 8080 assembler. It is of
the form --
ASM filename.xyz
where
filename ... is the name of the file 'filename.ASM' to assemble
x ... designates the disk name which contains the source
y ... designates the disk name to contain the hex file
(y=Z suppresses generation of the hex file)
z ... designates the disk name to contain the print file
(y=X lists on CON:, y=Z suppresses listing)
Refer to the ASM Manual for further details.
:CP/M LOAD Command
The LOAD Command reads the file specified, which is assumed to contain
Intel hex format machine code and produces a memory image file which can be
subsequently executed (converts .HEX to .COM files). It is of the form --
LOAD filename
where filename is the name of the file 'filename.HEX'.
:The UNLOAD Command
The UNLOAD Command does the reverse of the LOAD Command -- it converts
COM files to HEX files. It is of the form --
UNLOAD filename
where filename is the name of the file 'filename.COM'.
:CP/M DDT Command
The DDT Program allows dynamic interactive testing and debugging of
programs generated in the CP/M environment. It is invoked by --
DDT
DDT filename.HEX
DDT filename.COM
where 'filename' is the name of the program to be loaded or tested.
DDT responds to the normal CP/M input line editing characters.
DDT responds to the following commands --
As Perform inline assembly starting at the specified address s.
D Display memory from the current address for 16 display lines.
Ds Display memory from address s for 16 display lines.
Ds,f Display memory from address s to address f.
Fs,f,c
Fill memory from start address s to final address f with byte c.
G Start execution at the current value of the PC.
Gs Start execution at the specified address s.
Gs,b Start execution at the specified address s and set a breakpoint
at the address b.
Gs,b,c
Same as above with breakpoints at b and c.
G,b Start execution at the current value of the PC with breakpoint b.
G,b,c
Same as above with breakpoints at b and c.
If Insert a file name f into the default FCB.
L List 12 lines of disassembled code from the current address.
Ls List 12 lines from the specified address s.
Ls,f List lines of disassembled code from s to f.
Ms,f,d
Move the block from address s to f to destination at address d.
R Read file in FCB into memory at 100H.
Rb Read file in FCB into memory with offset b from 100H.
Ss Set (examine and alter) memory starting at address s.
T Trace the next instruction.
Tn Trace the next n instructions.
U Untrace -- like Trace, but intermediate steps are not displayed.
X Examine all registers and flags.
Xr Examine specified registers or flag, where r may be --
C Carry flag
Z Zero flag
M Minus (sign) flag
I Interdigit Carry flag
A Accumulator
B BC Reg pair
D DE Reg pair
H HL Reg pair
S Stack pointer
P PC
:The ZDT Command
ZDT is a Z80 version of DDT. It is invoked by typing --
ZDT
The commands recognized by ZDT are input in single-character input
mode. No input line editing is done, and each command expects an exact
input. All byte values are exactly two characters, and all addresses are
exactly four characters.
The commands recognized by ZDT are --
A bbbb
Enter ASCII characters into memory from keyboard starting at
address bbbb.
B
Warm Boot -- Return to CP/M.
C bbbb eeee nnnn
Compare memory from address bbbb to address eeee to block
starting at nnnn.
D bbbb eeee
Dump memory from bbbb to eeee.
E bbbb eeee <ASCII string>
Search for ASCII string from bbbb to eeee. String is at
most 16 characters. String is terminated by <CR>.
F bbbb eeee <hex string>
Search for hex string from bbbb to eeee. String is
terminated by <CR>.
G
Go to next breakpoint.
H aaaa nnnn
Hex add and subtract. Computes aaaa+nnnn and aaaa-nnnn.
I nn
Input. Prints value at port nn.
J nnnn
Jump to and execute at location nnnn.
K
Keyboard echo.
L filename.typ nnnn
Loads specified disk file into location nnnn.
M bbbb eeee nnnn
Move block from bbbb to eeee-1 to nnnn.
N aaaa
Enter offset aaaa for loading.
O nn dd
Output byte dd to port nn.
P bbbb
Input hex into memory from keyboard starting at bbbb. <sp>
advances pointer, <rub> or <del> backs pointer.
Q bbbb eeee
Dumps from bbbb to eeee in ASCII.
R n ll tt ss bbbb
Read block of data from disk n of length ll (256-byte pages)
starting at track tt and sector ss placing the data at bbbb.
S bbbb eeee
Disassembly (symbolic dump) from bbbb to eeee.
T bbbb eeee
Destructive memory test from bbbb to eeee-1.
U bbbb
Set breakpoint at bbbb.
V
Display all currently-set breakpoints.
W n ll tt ss bbbb
Write on disk n the data at bbbb for a length of ll starting
at track tt, sector ss. ll is in 256-byte pages.
X
Display registers.
Z bbbb eeee dd
Zero or set memory from bbbb to eeee-1 with byte dd.
:CP/M SYSGEN Command
The SYSGEN transient command allows generation of an initialized disk
containing the CP/M Operating System.
It is invoked by typing
SYSGEN
Once invoked, the user is prompted through the session. Refer to the
CP/M Manual for further details.
:CP/M SUBMIT and XSUB Commands
The SUBMIT command allows CP/M commands to be batched together for
automatic processing. The form of this command is
SUBMIT ufn parm1 parm2 ... parmn
The ufn given in the SUBMIT command must be the filename (not type) of
a file which exists on the currently logged-in disk with an assumed file
type of '.SUB'. Refer to the CP/M Manual for further details.
The XSUB command extends the power of the SUBMIT facility. When
specified as the first line of a SUBMIT File, it self-relocates directly
below the CCP. All subsequent SUBMIT command lines are processed by XSUB,
so that programs which read buffered console input (BDOS Function 10)
receive input directly from the SUBMIT File. While XSUB is in memory, it
prints the message "(xsub active)" on each warm boot. An example of the
use of XSUB to display memory from 100H to 1FFH is --
XSUB
DDT
D100,1FF
G0
:CP/M BDOS -- Basic I/O Operations
Function and Number Input Parameters Output Parameters
System Reset 0 None None
Read Console 1 None ASCII Char in A
Write Console 2 ASCII Char in E None
Read Reader 3 None ASCII Char in A
Write Punch 4 ASCII Char in E None
Write List 5 ASCII Char in E None
Direct Con I/O 6 ASCII Char in E I/O Status in A if E=0FFH
Get I/O Status 7 None I/O Status in A
Put I/O Status 8 I/O Status in E None
Print Buffer 9 Address of string None
terminated by $
in DE
Read Buffer 10 Address of Read Read Buffer is filled
Buffer in DE
Console Ready 11 None LSB of A is 1 if char
ready
*All function numbers are passed in Reg C.
I/O Status Byte --
Value Bits 6&7 Bits 4&5 Bits 2&3 Bits 0&1
00 CON:=TTY: RDR:=TTY: PUN:=TTY: LST:=TTY:
01 CRT: PTR: PTP: CRT:
10 BAT: UR1: UP1: LPT:
11 UC1: UR2: UP2: UL1:
Read Buffer --
Byte Function
1 Maximum Buffer Length
2 Current Buffer Length (returned value)
3-n Data (returned values)
:CP/M BIOS -- Basic Disk Operations
Function and Number Input Parameters Output Parameters
Return Version # 12 None Version Info in HL
H=0 CP/M, H=1 MP/M
L=00 CP/M 1.x, 2x 2.x
Init BDOS 13 None None
Log-In Disk 14 Value in Reg E None
A=0, B=1, C=2,
D=3
Open File 15 Address of FCB Byte address of FCB
in DE if found or 0FFH if not
Close File 16 Address of FCB Byte address of FCB
in DE if found or 0FFH if not
Search for File 17 Address of FCB Byte address of FCB (0-3)
in DE if found or 0FFH if not
Search for Next 18 Address of FCB Byte address of next FCB
in DE if found or 0FFH if not
Delete File 19 Address of FCB Byte address of FCB (0-3)
in DE if found or 0FFH if not
Function and Number Input Parameters Output Parameters
Read Next Record 20 Address of FCB 0=successful read
in DE 1=read past EOF
2=reading random data
Write Next Rec 21 Address of FCB 0=successful write
in DE 1=error in extending
2=end of disk data
255=no more dir space
Make File 22 Address of FCB Byte address of FCB or
in DE 255 if no more dir space
Rename FCB 23 Address of FCB Byte Address of Dir entry
in DE or 255 if no match
Return Log Code 24 None Login vector in HL
Read Drive No 25 None Number of logged-in drive
(A=0, B=1, C=2, D=3)
Set DMA Address 26 Address of 128 None
byte buffer in DE
Function and Number Input Parameters Output Parameters
Get Alloc Vect 27 None Allocation Vect Addr in
HL
Write Prot Disk 28 None None
Get R/O Vect 29 None HL=R/O Vect Val
Set File Attrib 30 Ptr to FCB in DE Dir code in A
Get Disk Parms 31 None HL=DPB Address
Set/Get Usr Code 32 E=0FFH (get)/Code A=Current code (get)/no
(set) value (set)
Read Random 33 DE=FCB addr A=return code
1=reading unwritten data
2=(not used)
3=can't close curr ext
4=seek to unwritten ext
5=(not used)
6=seek past end of disk
Function and Number Input Parameters Output Parameters
Write Random 34 DE=FCB addr A=return code
1=reading unwritten data
2=(not used)
3=can't close curr ext
4=seek to unwritten ext
5=dir overflow
6=seek past end of disk
Compute File Siz 35 DE=FCB addr Random Rec Field set
to file size
Set Random Rec 36 DE=FCB addr Random Rec Field set
*All function numbers are passed in Reg C
:CP/M File Types
AIN ALGOL 60 Intermediate ALG ALGOL 60 Source File
ASM Assembler Source File BAK Backup File
BAS BASIC Source File C C Source File
COB COBOL Source File COM "Command" File
FOR FORTRAN IV Source File HEX Intel "hex" code file
HLP HELP File INT BASIC Intermediate File
LST Listing File MAC MACRO-80 Source File
PAS PASCAL Source File PRN Assembler Listing File
REL Relocatable Module SRC PASCAL/MT Source File
SUB SUBMIT File SYM Symbol File
TC Tiny-C Source File TFS TFS Source File
TXT Text File $$$ Temporary File
:CP/M BIOS Jump Vector
The following is a table representing the entry points into the CP/M
BIOS of the major routines accessable to the user --
Routine Relative Offset Comment
BOOT 00H Cold Start
WBOOT 03H Warm Start
CONST 06H Console Status
Reg A = 00 if no char ready
Reg A = FF if char ready
CONIN 09H Console char in (Reg A)
CONOUT 0CH Console char out (Reg C)
LIST 0FH List out (Reg C)
PUNCH 12H Punch out (Reg C)
READER 15H Reader in (Reg A)
Routine Relative Offset Comment
HOME 18H Move to track 00
SELDSK 1BH Select disk given by Reg C (A=0,B=1,...)
SETTRK 1EH Set track address given by Reg C
(0...76)
SETSEC 21H Set sector address given by Reg C
(1...26)
SETDMA 24H Set subsequent DMA address (RP B&C)
READ 27H Read track/sector (block)
WRITE 2AH Write track/sector (block)
LISTST 2DH List Device Status
Reg A = 00 if no char ready
Reg A = FF if char ready
SECTRAN 30H Translate sector number in Reg C using
table pointed to by DE; physical sector
number returned in Reg L


View File

@@ -0,0 +1,40 @@
CP/M 2.2 SOFTWARE PERFORMANCE REPORT SUMMARY
KNOWN PROBLEMS IN CP/M 2.2
CP/M 2.2 IS A REGISTERED TRADEMARK OF DIGITAL RESEARCH
UTILITY VER PATCH SYMPTOM\PROBLEM DESCRIPTION
------- --- ----- -------------------------------------------------------
ASM V 2 An erroneous phase error occurs when the identifier in
a SET statement appears within an expression from
another statement.
MOVCPM V 1 For systems that use the blocking and deblocking
algorithms listed in the CP/M manual, when a file is
updated, the last block of updated records is not
written to the file.
PIP V 4 A problem occurs when the start and quit strings are
of equal length.
V 5 A problem occurs with the PIP object file transfer
options when copying file to file.
V 6 When you use PIP to copy to the PRN logical device, the
LPT physical device is automatically selected.
SUBMIT V 3 IF drive A is not the default drive when you run the
SUBMIT program, the $$$.SUB file is created on the
currently logged-in disk.
V - Problem has been verified by a Technical Support Analyst.
U - Unofficial patch has been developed, but not yet published by DRI.
N - No patch exists for this problem.
COPYRIGHT (C) 1984 by DIGITAL RESEARCH, Pacific Grove, CA.


View File

@@ -0,0 +1,117 @@
CP/M V2.2
Application Note 01, 2/20/82
The CCP Auto-Load Feature
Copyright 1982 by Digital Reserch
CP/M is a registered trademark of Digital Research.
DDT is a trademark of Digital Research.
Compiled November 1982
Applicable products and version numbers: CP/M V1.4, V2.0, V2.1,
and V2.2
Program: CCP (Console Command Processor)
Usually, you interact with the CP/M CCP following the sign-on
prompt. With the CCP Auto Load feature, CP/M executes an initial
program immediately after loading the operating system.
Under usual operation, the CCP receives control from the BIOS
upon a warm or cold boot. The beginning of the CCP module
contains a two-element jump vector and a command line that takes
the form:
CCP: JMP CCPSTART ;START THE CONSOLE PROCESSOR
JMP CCPCLEAR ;CLEAR THE INITIAL COMMAND
DB 127 ;MAXIMUM COMMAND LENGTH
CL: DB 0 ;COMMAND LENGTH
DB ' ' ;8 BLANK CHARACTERS
DB ' ' ; "
DB 'COPYRIGHT...' ;COPYRIGHT NOTICE
If control is transferred to location CCP (address 3400H in a
20K CP/M), the console processor examines the command length at
location CL (3407H in a 20K CP/M). If the command length byte is
zero, then you receive the sign-on prompt and the CCP waits for
console input. If the command length byte is not zero, the CCP
assumes an initial command has already been entered. The CCP
executes the command on each cold or warm boot if control is
transferred to location CCP. However, if control is transferred
to location CCP+3 (JMP CCPCLEAR), the initial command is cleared
and the program enters the CCP at the command line level,
displaying the default drive prompt.
Specify the length of the initial command using a nonzero CL
byte. The command must be followed by a terminating zero. CP/M
executes the command following that CL byte. Although only 16
blank spaces are provided, you can move the Digital Research
copyright notice for more spaces.
You can initialize the command line of the CCP on the
operating system tracks or in the relocatable image within the
MOVCPM data area. The initial command executes in distributed or
reconfigured CP/M systems.
Following SYSGEN and SAVE commands, save the CP/M memory
image above the cold boot loader code starting at location (980H).
If the system boot routines require more than 80H bytes, the CCP
code begins at location 0A00H.
Modifying MOVCPM.COM is similar to modifying the CCP. The
difference is that the CCP always begins at location 0A00H.
The following procedure uses DDT to modify the CCP,
allowing execution of the initial command DIR after each warm or
cold boot.
A>movcpm * *
CONSTRUCTING 64K CP/M Vers. 2.2
READY FOR "SYSGEN" OR
"SAVE 35 CPM64.COM
A>save 35 cpm64.com
A>ddt cpm64.com
DDT VERS 2.2
NEXT PC
2400 0100
-d980
0980 C3 5C E7 C3 58 E7 7F 00 20 20 20 20 20 20 20 20 ...X...
0990 20 20 20 20 20 20 20 20 43 4F 50 59 52 49 47 48 COPYRIGH
09A0 54 20 28 43 29 20 31 39 37 39 2C 20 44 49 47 49 T (C) 1979, DIGI
09B0 54 41 4C 20 52 45 53 45 41 52 43 48 20 20 00 00 TAL RESEARCH ..
09C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
-s987
0987 00 3
0988 20 44
0989 20 49
098A 20 52
098B 20 0
098C 20 .
-d980
0980 C3 5C E7 C3 58 E7 7F 03 44 49 52 00 20 20 20 20 ...X...DIR.
0990 20 20 20 20 20 20 20 20 43 4F 50 59 52 49 47 48 COPYRIGH
09A0 54 20 28 43 29 20 31 39 37 39 2C 20 44 49 47 49 T (C) 1979, DIGI
09B0 54 41 4C 20 52 45 53 45 41 52 43 48 20 20 00 00 TAL RESEARCH ..
09C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
-g0
A>save 35 cpm64.com
A>sysgen cpm64.com
SYSGEN VER 2.0
DESTINATION DRIVE NAME (OR RETURN TO REBOOT)b
DESTINATION ON B, THEN TYPE RETURN
FUNCTION COMPLETE
DESTINATION DRIVE NAME (OR RETURN TO REBOOT)
Licensed users are granted the right to include these
modifications in CP/M software.

View File

@@ -0,0 +1,158 @@
CP/M V2.2
Application Note 02, 2/20/82
Reversing the BACKSPACE and RUBOUT Key Functions and
Making RUBOUT Identical to BACKSPACE
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT and SID are trademarks of Digital Research.
Compiled November 1982
Applicable products and version numbers: CP/M V2.1 and V2.2
Program: BDOS
In the following code segment procedures, addresses given are
hexadecimal offsets from the base of the CP/M system. The CCP is
usually located at 980H but can be located at A00H if a two-sector
boot is used.
You can assemble the patch for your size memory system. The
cpmbase equals the BDOS entry point address at locations 6 and 7
in the base page of memory minus 806H. You must change this entry
point address when you load DDT or SID . Under DDT or SID,
follow the jump at location 5 until an address is found with a
least significant digit of 6. In the following example, the
cpmbase would be E506H-806H or DD00H.
0005 JMP CD00
CD00 JMP D3A4
D3A4 XTHL
D3A5 SHLD E452
D3A8 XTHL
D3A9 JMP E506
Procedure to reverse the BACKSPACE and RUBOUT key functions:
Patch into the SYSGEN or MOVCPM image exactly as you would
patch in a new version of your BIOS, using the DDT i command
followed by the DDT r command. You can use the same offset as
your custom BIOS and install the following code:
cpmbase equ ? ;subtrack 806h from address at location 6
org cpmbase + 0A02h
cpi 7fh ;was cpi 08h
org cpmbase + 0A16h
cpi 08h ;was cpi 7fh
Or, you can install the above procedure directly into MOVCPM
if you have MOVCPM.COM on your system disk. The patch is applied
automatically to any size system that you build using MOVCPM.
Make a back-up copy of MOVCPM.COM before using DDT to make the
following changes:
A>ddt movcpm.com
DDT VERS 2.2
NEXT PC
2700 0100
-l1402
1402 CPI 08
1404 JNZ 0A16
1407 MOV A,B
1408 ORA A
1409 JZ 09EF
140C DCR B
140D LDA 0B0C
1410 STA 0B0A
1413 JMP 0A70
1416 CPI 7F
1418 JNZ 0A26
-s1403
1403 08 7f
1404 C2 .
-s1417
1417 7f 8
1418 C2 .
-g0
A>save 38 movcpm1.com
Use the new program MOVCPM1.COM in place of MOVCPM.COM. The
BACKSPACE and RUBOUT key functions are reversed for any CP/M
system generated with MOVCPM1.COM.
Procedure to make RUBOUT identical to BACKSPACE:
Before you install this patch, the code at cpmbase + 0A1Bh
should read:
mov a,b
ora a
jz cpmbase + 09EFh
mov a,m
dcr b
dcx h
jmp cpmbase + 0AA9h
Patch into the SYSGEN or MOVCPM image exactly as you would
patch in a new version of your BIOS, using the DDT i command
followed by the DDT r command. Use the same offset as your custom
BIOS and install the following code:
cpmbase equ ?
;
;
org cpmbase + 0A1Bh
;
mvi a,8h
jmp cpmbase + 0A07h
end
Or, you can install the above procedure directly into MOVCPM
if you have MOVCPM.COM on your system disk. The patch is
installed automatically in any size system that you build using
MOVCPM. Make a back-up copy of MOVCPM.COM before using DDT to
make the following changes.
A>ddt movcpm.com
DDT VERS 2.2
NEXT PC
2700 0100
-l141b
141B MOV A,B
141C ORA A
141D JZ 09EF
1420 MOV A,M
1421 DCR B
. . .
-a141b
141B mvi a,8
141D jmp a07
1420 .
-g0
A>save 38 movcpm1.com
Use the new program MOVCPM1.COM in place of MOVCPM.COM. The
RUBOUT and BACKSPACE key functions are identical in any CP/M
system generated with MOVCPM1.COM.
Licensed users are granted the right to include these
modifications in CP/M V2.2 software.

View File

@@ -0,0 +1,50 @@
CP/M 2.2
Application Note 03, 06/25/81
Sample BIOS for a Serial Printer Device
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
Compiled November 1982
Applicable products and version numbers: CP/M V1.4, V2.0, V2.1,
and V2.2
Program: BIOS
The following code fragment drives Diablo serial interface
printers or other serial devices that use the X ON/X OFF protocol
for synchronization. A device that uses this protocol receives data
faster than it can print. The device transmits a CTRL-S character
when its buffer becomes full, and a CTRL-Q to receive more data
after the buffer is emptied.
LIST$STAT EQU 00H
LIST$DATA EQU 01H
IN$MASK EQU 02H
OUT$MASK EQU 01H
LIST:
CALL LISTST ! JZ LIST
MOV A,C ! OUT LIST$DATA
RET
LISTST
;return list status (0 if not ready, FF if ready)
LXI H,LST$FLAG
IN LIST$STAT ! ANI INS$MASK ! JZ NO$INPUT
IN LIST$DATA ! ANI 7FH ! CPI 'Q'-'@' ! JNZ S?
MVI M OFFH
S? CPI 'S'-'@' ! JNZ NO$INPUT
MVI M,O
NO$INPUT:
IN LIST$STAT ! ANI OUT$MASK ! ANA M ! RZ
ORI 255
RET
LST$FLAG:
DB 255 ;must be 255 initially
Licensed users are granted the right to include these
modifications in CP/M software.

View File

@@ -0,0 +1,109 @@
CP/M V2.2
Application Note 04, 2/20/82
BIOS Error Return Code Options
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Trademark.
DDT and SID are trademarks of Digital Research.
Compiled November 1982
Applicable products and version numbers: CP/M V2.2
Program: BIOS
Usually, CP/M responds only to a zero or nonzero value as the
return code from the BIOS READ and WRITE entry points. If the value
in register A is zero, CP/M assumes that the disk operation was
completed successfully. If a nonzero value is in register A, the
BDOS returns the message BDOS ERR ON x: BAD SECTOR. You then have
the option of pressing the RETURN key to ignore the error, or CTRL-C
to abort.
This modification interjects three additional return codes for
the BIOS READ and WRITE routines in register A as shown below.
0 The disk Read or Write operation was successful.
1 Bad Sector--indicates permanent disk error.
2 Select Error--indicates the drive is not ready.
3 R/O--the disk is Read-Only (used by WRITE).
4 File R/O--not normally used.
In the following code segment, addresses given are hexadecimal
offsets from the base of the CP/M system. The CCP is usually located
at 980H, but can be located at A00H if you use a two-sector boot.
After modifying your BIOS READ and WRITE routines to pass the
extended error codes to the BDOS, you can assemble the BDOS patch for
your size memory system. The cpmbase equals the BDOS entry point
address at locations 6 and 7 in the base page of memory minus 806H.
You must change this entry point address when you load DDT or
SID . Under DDT or SID, follow the jump at location 5 until you
find an address with a least significant digit of 6. In the
following example, the cpmbase would be E506H-806H or DD00H.
0005 JMP CD00
CD00 JMP D3A4
D3A4 XTHL
D3A5 SHLD E452
D3A8 XTHL
D3A9 JMP E506
1
CP/M V2.2 Application Note 04
Patch into the SYSGEN or MOVCPM image exactly as you would patch
in a new version of your BIOS, using the DDT i command followed by
the DDT r command. Use the same offset as your custom BIOS.
Before installing this patch, the code at the cpmbase + BBDh
should read:
lxi h,cpmbase +809H
jmp cpmbase + B4AH
Replace the preceding code with the following code:
cpmbase equ ?
;
;
org cpmbase + BBDH
;
lxi h,cpmbase + 807H
jmp cpmbase + 83AH
end
Or, you can install this change directly into MOVCPM, if
MOVCPM.COM is on your system disk. The patch is installed in any
size system that you build using MOVCPM. Make a back-up copy of
MOVCPM.COM before using DDT to install the following procedure:
A>ddt movcpm.com
DDT VERS 2.2
NEXT PC
2700 0100
-l15bd
15BD LXI H,0809
15C0 JMP 0B4A
15C3 LHLD 15EA
. . .
-a15bd
15BD lxi h,807
15C0 jmp 83a
15C3 .
-g0
A>save 38 movcpm1.com
Use the new program MOVCPM1.COM in place of MOVCPM.COM.
Additional error return codes for the BIOS READ and WRITE routines
are supported in any CP/M system generated with MOVCPM1.COM.
Licensed users are granted the right to include these
modifications in CP/M V2.2 software.

View File

@@ -0,0 +1,90 @@
CP/M V2.2
Application Note 05, 2/20/82
Improving the CTRL-S Function
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT and SID are trademarks of Digital Research.
Compiled November 1982
Applicable products and version numbers: CP/M V2.2
Program: BDOS
The CTRL-S function controls screen scrolling during CRT output.
However, the system does not recognize CTRL-S if you type another
character before it.
In the following code segment procedures, addresses given are
hexadecimal offsets from the base of the CP/M system. The CCP is
usually located at 980H, but can be located at A00H if a two-sector
boot is used.
You can assemble the patch for your size memory system. The
cpmbase equals the BDOS entry point address at locations 6 and 7 in
the base page of memory minus 806H. You must change this entry point
address when you load DDT or SID . Under DDT or SID, follow the
jump at location 5 until you find an address with a least significant
digit of 6. In the following example, the cpmbase is E506H-806H or
DD00H.
0005 JMP CD00
CD00 JMP D3A4
D3A4 XTHL
D3A5 SHLD E452
D3A8 XTHL
D3A9 JMP E506
Patch into the SYSGEN or MOVCPM image exactly as you would patch
in a new version of your BIOS, using the DDT i command followed by
the DDT r command. Use the same offset as your custom BIOS. The
call at cpmbase + 950H should be cpmbase + 923H before installing the
following code:
cpmbase equ ?
;
;
org cpmbase + 950h
;
call cpmbase + 92Ah
end
1
CP/M V2.2 Application Note 05
Or, you can install the above procedure directly into MOVCPM, if
MOVCPM.COM is on your system disk. The patch is applied
automatically to any size system that you build using MOVCPM.
Make a back-up copy of MOVCPM.COM before using DDT to make the
following changes:
A>ddt movcpm.com
DDT VERS 2.2
NEXT PC
2700 0100
-l1350
1350 CALL 0923
1353 POP B
1354 PUSH B
. . .
-a1350
1350 call 92a
1353 .
-g0
A>save 38 movcpm1.com
Use the new program MOVCPM1.COM in place of MOVCPM.COM. Any
CP/M system generated with MOVCPM1.COM has the improved CTRL-S
function.
Licensed users are granted the right to include these
modifications in CP/M V2.2 software.

View File

@@ -0,0 +1,38 @@
CP/M V2.2
Application Note 06, 2/20/82
Changing the Lines Per Page
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT is a trademark of Digital Research.
Compiled November 1982
Applicable products and version numbers: CP/M V2.2 and V2.2 4200H
Program: ED.COM
This modification changes the number of lines scrolled by the P
command in ED.COM from 23 to 14. Add 4200H to each address shown
below for 4200H-based systems. Make a back-up copy of ED.COM before
you use DDT to make the following changes:
A>ddt ed.com
DDT VERS 2.2
NEXT PC
1B00 0100
-l17da
17DA LXI H,0017
17DD SHLD 1D1C
17E0 RET
.
.
.
-s17db
17DB 17 e
17DC 00 .
-^C
A>save 26 ed.com
Licensed users are granted the right to include these
modifications in CP/M V2.2 and V2.2 4200H software.

View File

@@ -0,0 +1,77 @@
CP/M V2.2
Application Note 07, 2/20/82
Changing the Restart Number in DDT
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT is a trademark of Digital Research.
Compiled November 1982
Applicable products and version numbers: CP/M V1.4, V2.0, V2.1,
and V2.2
Program: DDT.COM
DDT uses RST 7 (machine instruction 0FFH) to set break points.
To change the restart number, modify the three bytes indicated by ??
in the following procedure for a new restart instruction and
location. The restart instruction uses the bit pattern 11XXX111,
where XXX is the restart number you use. (AFH is RST 1, B7H is RST
2, and BFH is RST 3.) The restart location is usually the restart
number times 8. Do not use RST 0 because it is reserved for CP/M.
The following procedure applies to DDT supplied with CP/M V2.1
and V2.2. For V1.4 and V2.0, change the instructions at 19B and 19E
to the following:
019B sta fe4
019E sta 10ee
Make a back-up copy of DDT.COM before you use DDT to make the
following changes:
A>ddt ddt.com
DDT VERS 2.2
NEXT PC
1400 0100
-l103
103 JMP 013D
.
.
.
-a103
0103 jmp 18b
-a18b
018B lhld 1ec
018E shld 8e7
0191 inx h
0192 shld 8ed
0195 lda 1eb
0198 sta ad5
1
CP/M V2.2 Application Note 07
019B sta fea
019E sta 10f4
01A1 jmp 13d
- s1ec
01EB ?? f7
01EC ?? 30
01ED ?? 00
01EE ?? .
-g0
A>save 19 ddt6.com
To change the restart number for DDT in the future, modify only
the 3 bytes 1EBH, 1ECH and 1EDH.
Licensed users are granted the right to include these
modifications in CP/M software.

View File

@@ -0,0 +1,81 @@
CP/M V2.2
Application Note 08, 2/20/82
Nested SUBMIT Files
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT is a trademark of Digital Research.
Compiled November 1982
Applicable products and version numbers: CP/M V2.1 and V2.2
Program: SUBMIT.COM
The CP/M SUBMIT program allows you to embed another SUBMIT
command within a submit file. However, control does not return to
the original SUBMIT file after executing the nested SUBMIT command.
To return control to the original SUBMIT command, use any standard
editor to type the following procedure into a file named
SUBPATCH.ASM:
;
;
subfcb: equ 5bbh
bdos: equ 5
open: equ 211h
;
org 22dh ;submit erase subroutine
;
opsl: lda subfcb+15 ;file open ok if ext not full
ral
rnc
lxi h,subfcb+12 ;try next extent
inr m
ops: lxi d,subfcb ;open extent
jmp create
;
org 25dh ;submit create subroutine
create: call open
inr a
jnz opsl ;loop if open ok
lxi d,subfcb
mvi c,22
call bdos
adi 1
ret
;
; the following code calls the above routines
;
org 4feh
;
call ops ;open the $$$.sub file
jc 517h ;jump if not opened ok
lda subfcb+15 ;set current record to end
sta subfcb+32
jmp 51dh ;jump if open ok
;
org subfcb
db 1 ;force $$$.sub file to A:
;
end
Assemble SUBPATCH ASM to create the file SUBPATCH.HEX. Then use
DDT to insert SUBPATCH.HEX into the SUBMIT.COM program, as shown
below.
A>ddt submit.com
DDT VERS 2.2
NEXT PC
0600 0100
-isubpatch.hex
-r
-g0
A>save 5 submit1.com
In the new program SUBMIT1.COM, control returns to the original
SUBMIT file after the system executes embedded SUBMIT commands.
Licensed users are granted the right to include these
modifications in CP/M V2.1 and V2.2 software.

View File

@@ -0,0 +1,52 @@
CP/M V2.2
Application Note 09, 2/02/82
Configuring CP/M for Page Boundaries
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT is a trademark of Digital Research.
Compiled November 1982
Applicable products and version numbers: CP/M V2.2
Program: MOVCPM.COM
You can modify MOVCPM.COM to configure CP/M V2.2 for page
boundaries (256 bytes) instead of kilobyte boundaries.
Make a back-up copy of MOVCPM.COM before you use DDT to make
the following changes. Save the changes in a new file named
PGMOV.COM. The first argument designates the size of the system in
pages that PGMOV is to construct. The first argument is optional,
but must range between 64 and 255 (decimal) if used.
A>ddt movcpm.com
DDT VERS 2.2
NEXT PC
2700 0100
-l165
0165 CPI 10
0167 JC 0172
016A MVI L,00
016C MOV H,A
016D DAD H
-s166
0166 10 40
0167 DA .
-a16d
016D nop
016E nop
016F .
-l1a2
01A2 ANI FC
01A4 MOV H,A
01A5 PUSH H
01A6 LHLD 0006
-ala2
01A2 ani fe
01A4 .
-g0
A>save 38 pgmov.com
Licensed users are granted the right to include these
modifications in CP/M V2.2 software.

View File

@@ -0,0 +1,57 @@
CP/M V2.2
Application Note 10, BDOS, 03/12/82
Booting CP/M on Drives Other Than Drive A
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT is a trademark of Digital Research.
Compiled November 1982
Applicable products and version numbers: CP/M V2.2
Module: BDOS
Booting CP/M on a drive other than drive A changes the initial
prompt displayed after a cold boot. Instead of A>, you must specify
the drive intended to follow the cold boot in the following patch
procedure. Also, your BIOS must pass the intended boot drive to
register C in the CCP upon cold boots (see the CP/M Operating System
Manual). The intended boot drive in this patch procedure and in your
BIOS is indicated by a number relative to zero. (A=0, B=1, C=2, ...,
P=15.) This procedure changes the drive selected by BDOS Function 13
(Reset Disk System).
Use caution installing this patch because it requires
modification to the CP/M submit processor (SUBMIT.COM). SUBMIT must
write the $$$.SUB file to the boot drive you specify in this patch.
The procedure to modify SUBMIT is described in CP/M V2.2, Patch 03,
dated 1/21/82. Instead of setting the byte at 5BBH to 1, as
described in Patch 03, set the byte to the specified boot drive plus
1. For example, if the boot drive is 1 (the B drive), then set the
byte in SUBMIT.COM at 5BBH to 2.
Place the following code in a file named CPMxx.COM (xx = memory
size). Determine the CP/M base for your size memory and include it
in the code. Assemble and insert CPMxx.COM into the SYSGEN or MOVCPM
image exactly as you would patch in a new version of your BIOS. Use
the DDT i command followed by the DDT r command. Use the same
offset as your custom BIOS. Make a back-up copy of CPMxx.COM before
you make the changes.
cpmbase equ ?
drive equ ? ;boot drive
;0=A, 1=B, ..., 15=P
org cpmbase + 0148Ch
jmp cpmbase + 15EEh ;was "xra a"
org cpmbase + 15EEh
mvi a,drive ;was "nop"
sta cpmbase + 0B42h ;was "nop"
jmp cpmbase + 1490h ;was "nop"
Licensed users are granted the right to include these changes in
CP/M V2.2 software.

View File

@@ -0,0 +1,214 @@
CP/M V2.2
Application Note 11 9/30/82
Chaining Programs
Copyright 1982 by Digital Research
CP/M and CP/NET are registered trademarks of Digital Research.
MP/M II and PL/I-80 are trademarks of Digital Research.
Compiled October 1982
Applicable products and version numbers: CP/M V2.2, CP/NET ,
and MP/M II .
Program: CHAIN1.COM and CHAIN2.COM
Menu-driven applications can be written to run under CP/M.
If you develop applications using PL/I-80 , you can write the
programs as a set of overlays. Often, the programs are written in
assembly language, or require too much memory to make the overlay
feature of PL/I-80 appropriate. Without using overlays, there are
only two effective methods of chaining under CP/M V2.2.
The first method uses the CP/M SUBMIT facility, in which the
main menu program creates a SUBMIT file that lists the programs to
be chained. The file must be written to drive A, and have the name
$$$.SUB.
The SUBMIT file consists of compatible lines, exactly like
those you type at the console, following the system prompt. The
commands are placed in reverse order, so the last command in the
file is the first to be executed. Each command is placed in a 128-
byte record with the following format:
:n:C1:C2:...:cn:0:...:
The first byte of the record contains the number of
characters in the command (n), followed by the characters (c1-cn),
and terminated with a zero. The number of characters in the command
is written as a binary number and each character is represented in
ASCII format. It does not matter what follows the terminating zero
in the record. For example, if the command was STAT*.*, the first
byte would be a binary 8, followed by the letters STAT*.* and
terminated with a zero.
The second method of program chaining is simpler. You
include a procedure in the menu program that loads the next program
and chains to it. Each program that might chain to another program
must include a copy of the procedure. The procedure must first move
itself out of the way so that it is not overwritten by the program
it is loading.
The example assembly language procedure is written to link
with PL/I-80 modules as an external procedure. It can also be used
in an assembly language menu program. To link to a PL/I-80 program,
the following entry declaration must be included in the PL/I-80
program that does the chaining:
<EFBFBD>
dcl chain entry (char(12));
The character 12 variable consists of the standard CP/M File
Control Block (FCB) format. The format can be created in the PL/I-
80 program as a structure. A char(12) variable can then be based at
the same address as the structure for interfacing to the chain
procedure. (See the following PL/I-80 program.)
Note: the drive is not an ASCII character, but a binary number
between 0 and 16, where 0 is the current default drive and 1 through
16 represent the CP/M drives A through P, respectively.
chain 1: proc options(main);
/* chain subroutine tester */
dcl 1 fcb static
2 drive fixed(7) init(0),
2 name char(8) init('CHAIN2');
2 type char(3) init('COM'),
dummy char(12) based(db),
dp pointer,
chain entry(char(12));
put skip list('Chain Text program 1');
dp = addr(fcb);
call chain(dummy);
put skip(2) list('Shouldn''t be here!!);
end chain 1;
This program prints the message Chain Test program 1, and
chains to the program CHAIN2.COM on the default drive. CHAIN2 is a
program identical to CHAIN1, except that it prints Chain Test
Program 2 and chains to CHAIN1.COM. CHAIN1 and CHAIN2 then continue
to chain back and forth to each other.
Note: any statements following the call to the chain procedure are
not executed because the chain procedure never returns.
The chain procedure consists of two routines. An
initialization routine initializes the FCB for the program to be
loaded. Then, the initialization routine relocates the loader and
FCB to the very top of the Transient Program Area (TPA), immediately
below the BDOS, so it will not be overwritten by the loaded program.
The loader begins at the label, code:, and ends at the end of the
FCB, at the statement, codelen equ $-code.
The loader routine sets the DMA address, reads a sector,
checks for an end-of-file, increments the DMA addresses by 128
bytes, and repeats the process. When the end-of-file is detected,
it jumps to the chained program. The code is as follows:
public chain char(12)
extrn ?signal
,/* loads another COM file, and
executes it */
bdos equ 5
<EFBFBD> openf equ 15
readf equ 20
dmaf equ 26
cseq
chain. mov e,m ! inx h ! mov d, m ! xchg ;get first arg address
lxi d, fcb ! mvi c, 12 ! call move ;move string to FCB
lxi d, fcb+12 ! mvi a, 0 ! mvi c, 21
call fill ;zero rest of FCB
lhld bdos+1 ! lxi b, -code$len
dad b ;make space at
;top of TPA
shld jmpr + 1 ;jump address
push h ;save code address
;for RET
xchg ! lxi h, fcb-code ! dad d ;make address of FCB
shld FCBR+1 ;and fix LXI
push h ;save FCB
;destination address
lxi h, code ! mvi c, code$len
call move ;dest in DE
pop d ;recover address of FCB
mvi c, openf ! call BDOS ;open file
inr a ! jz sig ;if any error,
;signal error
pop h ! sphl ! push h ;point stack to top
;of TPA
;and save code addr
lxi h, 100h ;point to start of
;TPA
ret ;to loader "code"
code: push h ! xchg ! mvi c, dmaf
call BDOS ;set the DMA address
FCBR lxi d, $-$ ! mvi c, readf !
call BDOS ;read the next record
ora a ! jnz 100h ;EOF -| start TPA
pop h ! lxi d, 128 ! dad D ;recover and bump DMA
jmpr jmp $-$ ;jump to code
FCB: ds 1 ;drive code
ds 8 ;filename
ds 3 ;filetype
ds 4 ;control info
ds 16 ;disk map
ds 1 ;rrec
codelen equ $-code
move: ;c = # bytes, hi = source, de = desti-
nation
mov a,m ! stax d
inx h ! inx d ! dcr c
jnz move
<EFBFBD> ret
fill: ;a = byte to fill, c = # bytes, de = start ad-
dress
stax d ! inx d
dcr c ! jnz fill
ret
sig: lxi h, siglist ! call ?signal ! jmp 0;signal error
siglist: ;(fixed(6),
;bit(8),ptr,ptr)
dw sigcode, sigsub, sigfil, message
sigcode db 6 ;undefined file
;error
sigsub db 2 ;arbitrary subcode
;for id
sigfil dw fpb ;ptr to file
;parameter block
message dw quack ;auxiliary
;operator message
fpb ;PL/I fuke
;oaraneter bkicj
fcbptr dw FCB-1 ;fcb-1
fpblst dw 0 ;(unused)ptr
column dw 0 ;current column
;fixed(15)
curline dw 0 ;current line
;fixed(15)
curpage dw 0 ;current page
;fixed(15)
currec dw 0 ;(unused)fixed(15)
lookchr db 0 ;look ahead char
;char(1)
ioend dw 0 ;i/o end address
iostk dw 0 ;user stack upon
;sio entry
spacer ds 4 ;spacer
linesz dw 0 ;line size
;fixed(15)
pagesz dw 0 ;page size
;fixed(15)
fixedsz dw 0 ;fixed size
;fixed(15)
blocksz dw 0 ;block size
;fixed(15)
filedes dw 0 ;block size
;fixed(15)
dtitle db 0 ;default title
;char(14)varying
quack db 17,'Bad Chain Attempt',0 ;error message

View File

@@ -0,0 +1,49 @@
CP/M V2.2
Application Note 12, 11/1/82
Interpreting CTRL-Z in SUBMIT Files
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT is a trademark of Digital Research.
Compiled November 1982
Applicable products and version numbers: CP/M V2.2
Program: SUBMIT.COM
SUBMIT does not accept control characters in SUB files. SUBMIT
recognizes certain control characters when preceded by an up arrow.
SUBMIT should interpret the two characters ^z as CTRL-Z.
Procedure:
Make a back-up copy of SUBMIT.COM before you use DDT to make
the following changes.
A>ddt submit.com
DDT V2.2
NEXT PC
0600 0100
-l0441
0441 SUI 61
0443 STA 0E7D
0446 MOV C,A
0447 MVI A,19
0449 CMP C
044A JNC 0456
044D LXI B,019D
0450 CALL 02A7
045 JMP 045E
0456 LDA 0E7D
0459 INR A
-s442
0442 61 41
0443 32 .
-g0
A>save 5 submit.com
Licensed users are granted the right to include these changes in
CP/M V2.2 software.

View File

@@ -0,0 +1,49 @@
CP/M V2.2
Application Note 13, 01/21/82
Exiting PIP When Using SUBMIT and XSUB
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT is a trademark of Digital Research.
Compiled November 1982
Applicable products and version numbers: CP/M V2.2
Program: PIP.COM
When using the SUBMIT and XSUB utilities to execute multiple
PIP commands from a SUBMIT file, it is not possible to exit from
PIP automatically. The SUBMIT utility does not accept lines with
only a carriage return.
This application note patch modifies PIP so a period can be
used to exit from PIP instead of a carriage return. In the submit
file, place a single period (.) on a line by itself after the last
PIP command to be executed.
Procedure:
Make a back-up copy of PIP.COM before you make any changes.
The program DDT is required to make the changes. Use the
following sequence of commands.
0A>ddt pip.com
DDT VERS 2.2
NEXT PC
1E00 0100
-l54f
054F CPI 00
0551 JNZ 055E
0554 LHLD 1DFC
. . .
-a54f
054F cpi 2
0551 jnc 55e
0554 .
-g0
A>save 29 pip.com
Licensed users are granted the right to include these changes
in CP/M 2.2 software.

View File

@@ -0,0 +1,113 @@
CP/M V2.2
Application Note 14, 8/11/82
Turning CTRL-P On and Off from within a CP/M V2.2 SUBMIT File
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
Compiled November 1982
Applicable products and version numbers: CP/M V2.2
You can use the SUBMIT facility for batching job streams to
turn the CTRL-P toggle on and off from within that SUBMIT file.
Although there is a patch to SUBMIT that forces it to accept control
characters when preceded by an up-arrow, ^, SUBMIT does not act on a
CTRL-C nor a CTRL-P.
The assembly-language program which follows turns CTRL-P on or
off from within a SUBMIT file. The same assembly code can be used
from within an applications program to turn CTRL-P on and off. This
program must be executed before XSUB, if XSUB is to be active in the
SUBMIT file. Although the CP/M V2.2 Operating System Manual states,
"The XSUB command is included as the first line of your submit
file...," this is not necessary. XSUB can be activated and
deactivated within a SUBMIT file. An assembly-language program is
listed that deactivates XSUB and also turns off CTRL-P if it is on.
Use this program from within a SUBMIT file to turn the ^P
toggle on and off. This program can also be invoked from the
console. If the CTRL-P toggle is off, this program turns it on; if
on, the program turns it off. It issues an appropriate message to
the console that is also echoed on the list device.
The program calculates the location of the ^P toggle in the
BDOS by getting the BDOS address from the jump instruction located
at 0005h in page zero and adding 307h to that address. It then does
an exclusive on of the toggle byte to turn ^P on or off.
Note: if XSUB is to be active in the submit file, ^P must be turned
on before executing XSUB. To turn off ^P in a submit file in which
XSUB is active, execute a program that deactivates XSUB, such as the
DEXSUB program which is listed following this program.
CntlP:
org 100h ;start of TPA
bdos equ 5h ;BDOS jump instruction
bdosa equ bdos+1 ;BDOS entry address
pstr equ 9 ;print string function
testoff equ 2feh ;offset for verification
listcp equ 0dh ;^P offset in page
mvic equ 3eh ;MVI C,x instruction
cr equ 0dh ;carriage return
lf equ 0ah ;line feed
lhld bdosa ;pick up address of BDOS in HL
lxi d,testoff ;offset of ^P page in DE for add
dad d ;HL= compare area in BDOS
lxi d,string ;DE= compare string
compare:
ldax d ;is character a 0?
ora a ;
jz ok ;yes, we're done
cmp m ;is BDOS same as string?
inx h ;next byte
inx d ;
jz compare ;BDOS = string keep looping
error: mvi c,pstr ;else print error message
lxi d,errormsg ;
jmp bdos ;return to CCP from BDOS
ok: mvi l,listcp ;listcp page offset
mvi a,1 ;toggle ^P byte on or off
sub m ;true = 1, false = 0
mov m,a ;put results back in memory
cpi 0h ;see if on or off
jz othermsg ;to issue appropriate message
lxi d,onmsg ;^P turned on
jmp print ;go around
othermsg:
lxi d,offmsg ;^P turned off
print mvi c,pstr ;print sign-on message
jmp bdos ;return to CCP from BDOS
onmsg: db cr,lf,'(^P turned on)$'
offmsg db cr,lf,'(^P turned off)$'
errormsg:
db cr,lf,'Unable to find BDOS$'
string db ret,mvic,1,jmp,0
end
Dexsub:
org 100h ;start of TPA
bdos equ 0005h ;bdos location in base page
mvi c,9 ;print string = function 9
lxi d,msg ;
call bdos ;
mvi c,0 ;system reset = function 0
jmp bdos ;exit bdos to ccp
msg db 0dh,0ah,'(xsub deactivated; ^P turned off if on)$'
end
This application was developed and tested by Digital Research
Technical Support using standard Digital Research products.
Modifications required to assemble, compile, or execute under non-
standard or non-Digital Research products are the responsibility of
the user.
Digital Research specifically disclaims any express or implied
warranty and shall not be liable for any loss of profits, loss of
business, loss of use or of data, interruption of business, nor for
indirect, special, incidental, or consequential damages of any kind
caused by the use or adaptation of this application note.
Licensed users are granted the right to include these changes
in CP/M software.

View File

@@ -0,0 +1,89 @@
CP/M V2.2
Aplication Note 15, 12/22/82
Debugging a CP/M V2.2 BIOS
Copyright 1982, 1983 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT, MAC, and SID are trademarks of Digital Research.
Compiled February 1983
You can easily customize the CP/M V2.2 operating system for a
particular machine if you use the following steps when it is
necessary to debug a BIOS. You must have a system running under
CP/M with a minimum of 48K to implement this scheme. CP/M V1.4 is
all right, and the system need work only well enough to load DDT or
SID . (SID is preferable and should be used if available.)
1) Carefully do a thorough code walk-through. This should take
about eight hours. Pay particular attention to the Disk
Parameter Blocks and Disk Parameter Headers, especially if
you hand-coded these items to assemble your BIOS instead of
using the DISKDEF.LIB and MAC . A slight miscalculation
in a DPB or DPH can cause a BIOS to perform most functions
correctly but fails under obscure circumstances; or, BIOS
performs one function properly and fails to perform all
others.
2) Using your old CP/M system, create your new system and
configure it to 20K. Ensure that the old system does not
use location 38H, which is DDT's Restart7 location.
3) Load the new 20K system underneath DDT in the old 48K
system's TPA with the command DDT CPM20.COM. Figure 1-1
illustrates this scheme.
48K BIOS
48K BDOS
DDT or SID
4A00 20K BIOS
3C06 20K BDOS
3400 20K CCP
980
900 BOOT
SYSGEN or MOVCPM
100 BASE PAGE
Figure 1-1. Loading Your New System
4) At location 980 (A00h in some systems), you should find the
base of the CCP, recognized by two jumps followed by the
copyright message. Move the 20K system into its correct
memory location using the DDT M (move) command. If DDT
<EFBFBD> lists a next address of 2300, then this command is
M980,2300,3400.
5) In the 20K BIOS jump vector at 4A00h, insert breakpoints
with Restart7s, or, if you are using SID, insert
passpoints. This should be restricted to the disk entry
points unless you have a problem with console I/O. If the
problem occurs only under certain conditions, place a RST7
initially only at the write entry point. When the
conditions under which the problem occurs have been
established, use a SAVE 1 xxx to return to the debugger you
are using and to set additional breakpoints.
6) Run the 20K CP/M under the 48K CP/M's DDT. Issue the DDT
command G4A00, which executes the new BIOS cold boot entry
point. The cold boot initializes the base page for the 20K
system and jumps to the CCP, which performs a BDOS Function
13 disk reset. The disk reset reads the directory sectors
until it encounters a sector containing 0E5h in every byte.
7) If the problem you experienced fails to reappear when you
begin single-cycling, it might have been a timing problem.
If not timing then it is a logic or coding error, and you
must continue to single-cycle the machine, examining the
contents of registers and memory locations as you go. Pay
particular attention to the following parameters: Track,
Sector, Dmaad, Diskno, and the contents of Dirbuf. If you
are using blocking/deblocking, also observe the contents of
Sekdsk, Hstdsk, Sektrk, Hsttrk, Rsflag, Erflag, and the
contents of the host buffer(s).
Licensed users are granted the right to include these changes
in CP/M software.

View File

@@ -0,0 +1,19 @@
CP/M V2.2 Application Notes from Digital Research
Application Note 01, 02/20/82 The CCP Auto-Load Feature
Application Note 02, 02/20/82 Reversing the BACKSPACE and RUBOUT Key Functions
and Making RUBOUT Identical to BACKSPACE
Application Note 03, 06/25/81 Sample BIOS for a Serial Printer Device
Application Note 04, 02/20/82 BIOS Error Return Code Options
Application Note 05, 02/20/82 Improving the CTRL-S Function
Application Note 06, 02/20/82 Changing the Lines Per Page (ED.COM)
Application Note 07, 02/20/82 Changing the Restart Number in DDT
Application Note 08, 02/20/82 Nested SUBMIT Files
Application Note 09, 02/02/82 Configuring CP/M for Page Boundaries
Application Note 10, 03/12/82 BDOS, Booting CP/M on Drives Other Than Drive A
Application Note 11, 09/30/82 Chaining Programs
Application Note 12, 11/01/82 Interpreting CTRL-Z in SUBMIT Files
Application Note 13, 01/21/82 Exiting PIP When Using SUBMIT and XSUB
Application Note 14, 08/11/82 Turning CTRL-P On and Off from within
a CP/M V2.2 SUBMIT File
Application Note 15, 12/22/82 Debugging a CP/M V2.2 BIOS

View File

@@ -0,0 +1,60 @@
CP/M V2.2
Patch 01, MOVCPM, 1/21/82
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT is a trademark of Digital Research.
Compiled November 1982
Program: MOVCPM
Products and Serial Numbers Affected: CP/M V2.2
Error Description:
The following modification affects only CP/M systems that use
the optional blocking and deblocking algorithms listed in the CP/M
Operating System Manual. When you update a file under systems
using the algorithms with no data added to the file, the last block
of updated records is not written to that file. Contact Digital
Reserach or your CP/M distributor if you are not certain that this
patch applies to your system.
Patch Procedure:
Make a back-up copy of MOVCPM.COM before you use DDT to make
the following changes. Use the Assemble command (A) and the Set
command (S). After you make the changes, return to the Console
Command Processor using the G0 command and save the modified memory
image on disk. Update the memory image on tracks 0 and 1 by
executing the new MOVCPM program as described in the CP/M Operating
System Manual and by integrating your customized I/O system.
A>ddt movcpm.com
DDT VERS 2.0
NEXT PC
2700 0100
-alcd2
1CD2 nop Old instructions were
1CD3 nop DCR C
1CD4 lxi h,0 DCR C
1CD7 . JNZ 12DF
-G0
Number of pages to save
is determined from value
displayed under NEXT.
A>save 38 movcpm.com
Install this patch on all CP/M systems that use the
blocking/deblocking algorithms listed in the CP/M Operating System
Manual.
Licensed users are granted the right to include these changes
in CP/M V2.2 software.

View File

@@ -0,0 +1,54 @@
CP/M V2.2
Patch 02, ASM, 1/21/82
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT is a trademark of Digital Research.
Compiled November 1982
Program: ASM
Products and Serial Numbers Affected: CP/M V1.4 and V2.2
Error Description:
ASM occasionally generates an erroneous phase error when the
identifier in a SET statement appears within an expression from
another statement. For example,
X SET 1
Y EQU X
END
Patch Procedure:
Make a back-up copy of ASM.COM before you use DDT to make the
following changes.
A>ddt asm.com
DDT VERS 2.2
NEXT PC
2100 0100
-l1dad
1DAD CALL 1352
1DB0 CPI 05
1DB2 CNZ 20DD
-a1dad
1DAD call 1b8d
1DB0 .
-l1b8d
1B8D NOP
1B8E NOP
1B8F NOP
-a1b8d
1B8D call 1352
1B90 ora a
1B91 jz 1db5
1B94 ret
1B95 .
-^C
A>save 32 asm.com
Licensed users are granted the right to include these changes
in CP/M V2.2 software.

View File

@@ -0,0 +1,45 @@
CP/M V2.2
Patch 03, SUBMIT, 1/21/82
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT is a trademark of Digital Research.
Compiled November 1982
Program: SUBMIT.COM
Products and Serial Numbers Affected: CP/M V2.2
Error Description:
If drive A is not the default drive when you run the SUBMIT
program, the $$$.sub file is created on the currently logged-in
disk. Therefore, you cannot run a SUBMIT job from any drive other
than A. After you make the following changes, the system always
creates the $$$.sub file on drive A.
Patch Procedure:
Make a back-up copy of SUBMIT.COM before you use DDT to make
the following changes.
A>ddt submit.com
DDT V2.2
NEXT PC
0600 0100
-d5bb
05BB 00 24 24 24 20 .$$$
05C0 20 20 20 20 53 55 42 00 00 00 1A 1A 1A 1A 1A 1A SUB...
05D0 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A ........
-
-s5bb
05BB 00 1
05BC 24 .
-g0
A>save 5 submit.com
Licensed users are granted the right to include these changes
in CP/M V2.2 software.

View File

@@ -0,0 +1,52 @@
CP/M V2.2
Patch 04, PIP, 1/21/82
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT is a trademark of Digital Research.
Compiled November 1982
Program: PIP.COM
Products and Serial Numbers Affected: CP/M V2.2
Error Description:
A problem occurs with the PIP Start and Quit options when the
Start and Quit strings are the same length.
Patch Procedure:
Make a back-up copy of PIP.COM before you use DDT to make the
following changes.
A>ddt pip.com
DDT V2.2
NEXT PC
1E000100
-l1168
1168 LDA 1F62
116B STA 1DF7
116E LXI H,1F62
1171 MVI M,00
1173 LDA 1DF9
1176 INR A
1177 STA 1DF8
-a1168
1168 lxi h,1f62
116B mov a,m
116C sta 1df7
116F mvi m,0
1171 lxi h,1df9
1174 mov a,m
1175 mvi m,0
1177 inr a
1178 dcx h
1179 mov m,a
117A .
-g0
A>save 29 pip.com
Licensed users are granted the right to include these changes
in CP/M V2.2 software.

View File

@@ -0,0 +1,53 @@
CP/M V2.2
Patch 05, PIP, 1/21/82
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT is a trademark of Digital Research.
Compiled November 1982
Program: PIP.COM
Products and Serial Numbers Affected: CP/M V2.2
Error Description:
A problem occurs with the PIP object file transfer options when
copying file to file.
Patch Procedure:
Make a back-up copy of PIP.COM before you use DDT to make the
following changes.
A>ddt pip.com
DDT V2.2
NEXT PC
1E00 0100
-l0713
0713 LDA 1F5E
0716 LXI H,1E04
0719 ORA M
-a0713
0713 lda 1e04
0716 lxi h,1f5e
0719 .
-l1099
1099 LDA 1E04
109C RAR
109D JNC 10B2
-a1099
1099 lda 1f5e
109C .
-l1640
1640 LDA 1E04
1643 RAR
1644 JNC 1652
-a1640
1640 lda 1f5e
1643 .
-g0
A>save 29 pip.com
Licensed users are granted the right to include these changes
in CP/M V2.2 software.

View File

@@ -0,0 +1,46 @@
CP/M V2.2
Patch 06, PIP, 01/21/82
Copyright 1982 by Digital Research
CP/M is a registered trademark of Digital Research.
DDT is a trademark of Digital Research.
Compiled November 1982
Program: PIP.COM
Products and Serial Numbers Affected: CP/M V2.2
Error Description:
When you use PIP to copy to the PRN logical device, the LPT
physical device is automatically selected. This patch disables the
selection of the LPT device and allows the PRN logical device to be
used without affecting the current IOBYTE setting.
Patch Procedure:
Make a back-up copy of PIP.COM before you make any changes.The
program DDT is required to make the changes. The changes are made
by the following sequence of commands:
0A>ddt pip.com
DDT VERS 2.2
NEXT PC
1E00 0100
-lc66
0C66 LXI H,0003
0C69 MVI M,80
0C6B JMP 0C71
. . .
-ac69
0C69 nop
0C6A nop
0C6B .
-g0
A>save 29 pip.com
Licensed users are granted the right to include these changes in
CP/M V2.2 software.

View File

@@ -0,0 +1,49 @@
CP/M V2.2, Patch 09, DEBLOCK.ASM, 2/11/82
Copyright 1982 by Digital Research, Inc., Pacific Grove, CA 93950
Program: DEBLOCK.ASM
Error Description:
The following modification affects only CP/M systems that use
the optional blocking and deblocking algorithms listed in Appendix G
of the CP/M Alteration Guide. The sector blocking and deblocking
algorithms provided in the guide work improperly in certain
circumstances.
Patch Procedure:
Use the CP/M text editor to insert the following changes:
Following the comment on line 111 of Appendix G:
"read the selected CP/M sector"
Insert the following two lines:
xra a ;accum = 0
sta unacnt ;unacnt = 0
The next source lines remain as shown:
mvi a,1
sta readop ;read operation
Insert the following code in your BIOS Home routine:
home:
lda hstwrt ;check for pending write
ora a
jnz homed
sta hstact ;clear host active flag
homed:
Continue with the rest of the home routine.
Licensed users are granted the right to include these changes in
CP/M software. CP/M is a registered trademark of Digital Research.

View File

@@ -0,0 +1,10 @@
CP/M V2.2 Patches from Digital Research
Patch 01, MOVCPM, last block update patch 01/21/82
Patch 02, ASM, erroneous SET phase error 01/21/82
Patch 03, SUBMIT, a:$$$.sub file patch 01/21/82
Patch 04, PIP, Start/Quit strings length patch 01/21/82
Patch 05, PIP, object file transfer patch 01/21/82
Patch 06, PIP, PRN/LPT select patch 01/21/82
Patch 09, DEBLOCK.ASM, blocking/deblocking patch 02/11/82

View File

@@ -0,0 +1,25 @@
CPM80 Patch Sources
LINK.MOD .... ??? El Paso TX 10-29-83
MAC.FIX .... IRVIN M. HOFF 22 OCT 82
MANUAL80.ADD .... from Microsystems, May 1983, p.70
PIP-XSUB.PAT .... from ZDS BBS
RMAC.MOD .... LDIR author El Paso, TX, 10/18/83
RMACPAT.ASM .... by George Blat Blat, Research + Development Corp.
SUBMIT.001 .... from ZDS BBS
SUBMIT.002 .... from ZDS BBS
XMAC.ASM .... originally supplied with MAC manual
ZSID.BUG .... from DDJ, Oct. 1982, p. 7
ZSID14.PAT .... from DDJ, Dec. 1981, p. 4

View File

@@ -0,0 +1,15 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; This program is intended to be executed from a submit file to de-activate ;
; xsub and allow input from the console. It has a side effect of turning off;
; the ^P toggle if it is on. ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 100h ;stay above page 0
bdos equ 0005h ;bdos location in base page
mvi c,9 ;print string = function 9
lxi d,msg ;
call bdos ;
mvi c,0 ;system reset = function 0
jmp bdos ;exit bdos to ccp
msg db 0dh,0ah,'(xsub deactivated; ^P turned off if on)$'
end


View File

@@ -0,0 +1,12 @@
The two short utility programs in this library were sent to me
by Digital Research, Inc. I have obtained their permission to
place them on the rcpm networks since DRI has released them to
the public domain. They are very useful to me, and I hope
that they will prove the same to you.
SEEP.ASM is a utility to toggle ^P inside submit files.
DEXSUB.ASM cancels xsub in a submit file to allow console entry.
Both programs are well documented with comments.
Mike Blackwell 09/16/82


View File

@@ -0,0 +1,15 @@
El Paso TX 10-29-83
How often have you inadvertently struck a key while Digital Research's
LINK was linking a file? If you've ever done it (especially where you
had to type a long command line or the linking took a while) you know
how frustrating it is when LINK aborts. It is a mystery to me why DRI
would allow LINK to abort on ANY keyboard entry. Fortunately, the
changes to prevent that are trivial. Simply use your favorite debugger,
load LINK.COM and change location 368B from 0E to AF and 368C from 0B to C9.
This causes the console status routine to always return "console not ready."
NOTE: platch is valid for LINK ver 1.31 only. The code to be changed is
from 0E 0B C3 05 00 (MVI C,0B ! JMP BDOS)
to AF C9 .. .. .. (XRA A ! RET)
and can be found using DDTF or DU.

View File

@@ -0,0 +1,68 @@
TOPIC : HOW TO MODIFY MAC.COM TO NOT CHANGE LOWER-CASE TO UPPER-CASE
FROM : IRVIN M. HOFF
DATE : 22 OCT 82
MAC.COM (by Digital Research) is one of the most popular assemblers
used with CP/M. It has one feature that most people do not like -- when
making a print file (FILENAME.PRN) it automatically converts any lower-
case characters to upper-case.
Neither ASM.COM nor RMAC.COM by the same firm does that.
There are two ways to modify MAC.COM to approach this problem.
Changing address 165C from C8 to D0 will convert any lower-case source
code to upper, leaving DB strings and comments alone. (1st example
below). Changing 1663 from E6 to 5F will leave all the lower case
comments alone, will convert all DB strings to upper case, but will
toss out any lower case code that does not agree with labels that
are also lower case. (second example.)
1st example: leaves all comments and DB strings alone
===================================================
1655 47 MOV B,A
1656 3A 05 30 LDA 3005
1659 FE 03 CPI 03
165B 78 MOV A,B
165C C8 RZ
Change the RZ (C8) to a RNC (D0)
Using DDT or SID:
165C C8 D0
A>SAVE 46 MAC.COM
This will convert any source code not in a string from lower to
upper, and not bother any comment areas or DB strings. It's as close
as you can get easily, to leaving all lower case alone.
2nd example: leaves all comments alone, but throws out lower case
source code including strings that do not match.
===================================================
1663 E6 5F (ANI 5FH)
Using DDT or SID, change to:
1663 E6 7F (ANI 7FH)
A>SAVE 46 MAC.COM (new, normal version)
This prevents the lower-case from being changed to upper-case.
For a complete disassembly of that area:
1655 47 MOV B,A ;Put the char. into 'B' temporarily
1656 3A 05 30 LDA ABORT ;See any request to quit
1659 FE 03 CPI 03
165B 78 MOV A,B ;Get the char. back again
165C C8 RZ ;Exit with the char. if a 03
165D FE 61 CPI 61H ;Less than lower-case alpha char.?
165F D8 RC ;If less, ignore
1660 FE 7B CPI 7AH+1 ;More than lower-case alpha char.?
1662 D0 RNC ;If more, ignore
1663 E6 5F ANI 5FH ;Otherwise change to upper-case
1665 C9 RET ;Finished
--end--

View File

@@ -0,0 +1,21 @@
UNDOCUMENTED CP/M FUNCTIONS cont.
From Microsystems, May 1983, p.70
CP/M issues a dummy call to the BIOS 'HOME' routine prior to a
directory read.
Early versions of the 'CP/M 2.2 Alteration Guide' did not include
the following sentence in the description of the SELDSK function of
the BIOS:
The least significant bit of register E is zero if
this is the first occurrence of the drive select
since the last cold or warm start.
This information can provide a clue to the BIOS that it may need to
log-in a disk that has been changed.

View File

@@ -0,0 +1,28 @@
Conflict with XSUB and MBASIC or PIP
-----
Question: Why do I have problems using XSUB with some programs, in
particular MBASIC and PIP?
Answer: Any program, like MBASIC, that uses single character input
or direct console i/o cannot work with XSUB which only supplies console
buffer input.
PIP commands can be given by XSUB but CON: input cannot. Another
problem with PIP is that you cannot exit with just a RETURN since SUBMIT
does not allow blank lines. The following patch will allow PIP to be exited
with either a RETURN or any single character (usually a period) followed by
a RETURN.
A>ddt pip.com
DDT VERS 2.2
NEXT PC
1E00 0100
-a54f
054f cpi 2
0551 jnc 55e
0554
-g0
A>save 29 pip.com

View File

@@ -0,0 +1 @@
Here is a large collection of patches, and application notes, for CP/M 2.2 and its utilities.

View File

@@ -0,0 +1,32 @@
El Paso, TX, 10/18/83
When I wrote LDIR a few hours ago, I realized that RMAC was unable to
handle the job, since it would wipe out DOLLAR-SIGNS in labels. Some
SYSLIB routines, however, use them in external references...
EXTRN F$OPEN in RMAC is synonymous to
EXTRN FOPEN
and LINK would complain about the missing symbol FOPEN!
Now, there just HADT TO BE a better way than M80, and after a lot of
DU'ing and DDT'ing, I found it! In RMAC ver 1.1 you find the following
code starting at address 1D76:
L1D76: CPI '$'
RNZ
XRA A
MOV M,A
RET
Now, to be able to use RMAC instead of M80 for *ALL* your SYSLIB work,
make a NOP out of the MOV M,A instruction! Remember, the address is only
good for my version of RMAC, as supplied with an early version of CP/M plus.
Your RMAC may be a bit different, but the code should be in the general
area.
With the availability of CP/M plus, more people will probably use RMAC
than M80, and this easy patch (which seems to have NO ILL EFFECTS) allows
use of SYSLIB with RMAC.
My recommendation: reformat SYSLIB into an IRL file for faster searching.

View File

@@ -0,0 +1,126 @@
;****************************************************************
;
; Patches for MAC and RMAC
; ------------------------
;
; by George Blat
; Blat, Research + Development Corp.
; 8016 188th SW
; Edmonds, WA 98020
;
;
;****************************************************************
;
;
;The following changes are (c)1983 Blat R+D Corp. Permission is
;granted to use these patches only in non-commercial applications.
;MAC and RMAC are trademarks of Digital Research, Inc. which holds
;ownership and all rights to the original programs.
;
;****************************************************************
;
;
;Mac and Rmac are two reliable assemblers developed by Digital
;Research which have a good number of useful features. It seems
;natural to get the most out of them.
;
;Among the features that can be added to Mac and Rmac, are the
;ability to use the period '.' and the underscore '_' as part of
;symbol names such as labels, even as first character of the
;symbol. The underscore, for instance, makes a much better word
;separator than the dollar '$' sign when used in a multi-word
;label. In a dense program listing, it's certainly easier to find
;STAT_PORT than STAT$PORT, and @hl_to_de than @hl$to$de.
;
;By the same token, I don't agree with the decision of Digital
;Research of making the dollar sign a don't care character. It
;introduces confusion as it allows symbols that don't look the
;same to be equivalent.
;
;In addition, RMAC can be easily patched to create .REL files
;where the global (external) names have up to 7 active characters.
;This helps by allowing you to create more meaningful symbol names
;and therefore improve program legibility. This change is still
;entirely compatible with the industry standard Microsoft format.
;
;The following patches should be assembled with MAC (not RMAC)
;and the resulting hex file should be applied over the original
;programs with DDT, SID or ZSID. KEEP AN ARCHIVE COPY OF THE
;ORIGINAL MAC OR RMAC BEFORE PATCHING.
FALSE EQU 0
TRUE EQU NOT FALSE
RMAC EQU TRUE ;select one and only one of these
MAC EQU FALSE ;true
IF RMAC
GLOBAL7 EQU TRUE ;set to false if you don't want
;7 char globals
PATCHAREA EQU 13BH
DOLLARCOUNTS EQU 1D7AH ;set this to false if you like to
;keep the dollar as a don't care char
CHECKALFA EQU 1D9CH
TOUP EQU 2844H
ENDIF
IF MAC
COPYRITE EQU 103H ;shorten but keep the copyright notice
DOLLARCOUNTS EQU 1834H
CHECKALFA EQU 1853H
ENDIF
IF MAC
ORG COPYRITE
DB '(c)1977 DRI'
PATCHAREA:
ENDIF
IF RMAC
ORG PATCHAREA
ENDIF
CPI '.'
RZ
CPI '_'
RZ
CPI '?'
RZ
CPI '@'
RZ
IF RMAC
CALL TOUP
ENDIF
SUI 'A'
CPI 'Z'-'A'+1
CMC
RET
IF RMAC AND GLOBAL7
COMPARE EQU 12D6H
SETIT7 EQU 12DBH
ORG COMPARE
CPI 8 ;replaces cpi 7
ORG SETIT7
MVI A,7 ;replaces mvi a,6
ENDIF
IF DOLLARCOUNTS
ORG DOLLARCOUNTS
NOP ;replaces mov m,a
ENDIF
ORG CHECKALFA
CALL PATCHAREA ;replaces cpi 3f
CMC ;jz 1db1
SBB A ;cpi 40
RET ;jz 1db1, etc.
END


View File

@@ -0,0 +1,64 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; This program is intended to be used from within a submit file to turn the ;
;^P toggle on and off, although it may also be invoked from the console. If ;
; the ^P toggle is off, this program turns it on; if on, it turns it off. In ;
; either event, it issues an appropriate message to the console which is also;
; echoed on the list device.
;
; The program calculates the location of the ^P toggle in the BDOS by getting;
; the BDOS address from the jump instruction located at 0005h in page zero ;
; and adding 307h to that address. It then does an exclusive or of the toggle;
;byte to turn on or off ^P.
; NOTE: If xsub is to be active in the submit file, ^P must be turned on ;
; BEFORE executing xsub. To turn off ^P in a submit file in which xsub is ;
; active, execute a program that deactivates xsub, such as the DEXSUB program;
; which is listed following this program. ;
; Doug Huskey & Dave Brown II ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0100h ;stay above base page
bdos equ 5h ;BDOS jump instruction
bdosa equ bdos+1 ;BDOS entry address
pstr equ 9 ;print string function
testoff equ 2feh ;offest for verification
listcp equ 0dh ;^P offset in page
mvic equ 3eh ;MVI C,x instruction
cr equ 0dh ;carriage return
lf equ 0ah ;line feed
lhld bdosa ;pick up address of BDOS
lxi d,testoff ;offset of ^P page
dad d ;HL = compare area in BDOS
lxi d,string ;DE = compare string
compare:
ldax d ;is character a 0?
ora a ;
jz ok ;yes, we're done
cmp m ;is BDOS same as string?
inx h ;next byte
inx d ;
jz compare ;compare next byte if not finished
;else loop for next byte
error: mvi c,pstr ;print error message
lxi d,errormsg ;
jmp bdos ;return to CCP from BDOS
ok: mvi l,listcp ;listcp page offset
mvi a,1 ;toggle ^P byte on or off
sub m ;true = 1, false = 0
mov m,a ;put results back in memory
cpi 0h ;see if on or off
jz othermsg ;to issue appropriate message
lxi d,onmsg ;^P turned on
jmp print ;go around
othermsg:
lxi d,offmsg ;^P turned off
print: mvi c,pstr ;print sign-on message
jmp bdos
onmsg: db cr,lf,'(^P turned on)$'
offmsg: db cr,lf,'(^P turned off)$'
errormsg:
db cr,lf,'Unable to find BDOS$'
string: db ret,mvic,1,jmp,0
end


View File

@@ -0,0 +1,50 @@
Using control characters in a SUBMIT file
-----
Question: How do I enter control characters into a SUBMIT file?
The instructions on page 28 of the CP/M manual do not seem to work.
Answer: SUBMIT requires you to enter '^z' to place a CTRL Z in the
file. The problem comes in that SUBMIT also converts all characters to
uppercase. The following patch suggested by Digital Research will modify
SUBMIT to require '^Z'.
A>ddt submit.com
DDT VERS 2.2
NEXT PC
0600 0100
-s442
0442 61 41
0443 32 .
-g0
A>save 5 submit.com
This alternate patch will allow lowercase characters to be entered
which is also extremely helpful when using XSUB and ED with strings that
require lowercase characters.
A>ddt submit.com
DDT VERS 2.2
NEXT PC
0600 0100
-s370
0370 5F FF
0371 32 .
-g0
A>save 5 submit.com
The following example submit file (using only the alternate patch)
uses ED to search a file and replace all lowercase strings 'recieve' with
'receive'.
xsub
ed file.doc
#a
b#srecieve^zreceive
e
It should be mentioned that in no case can the control characters
'^P' or '^C' be used in a submit file to obtain the normal functions of
console input for printer toggle or warm start.

View File

@@ -0,0 +1,46 @@
CTRL P and CTRL C in a SUBMIT file
-----
Question: Why can't I put "CTRL P" and "CTRL C" in a SUBMIT file
using the instructions in the manual?
Answer: The usual processing of characters done by the BDOS on
input is bypassed when using SUBMIT. The following programs can simulate
these functions.
;
; PRINT - turn printer echo on and off
;
; Usage:
;
; A>PRINT ?
;(turn printer echo on with anything following PRINT)
; A>PRINT
;(turn printer echo off with nothing following PRINT)
;
0100 org 0100h
0100 2A4E00 lhld 04eh ;address of bios
0103 110DF5 lxi d,0f50dh ;offset of flag in bdos
0106 19 dad d ;point to it
0107 3A8000 lda 080h ;echo on or off?
010A 77 mov m,a ;set the flag
010B C9 ret ;return directly to ccp
; WBOOT - perform a warm boot
;
0100 org 0100h
0100 C7 rst 0
;
;PAUSE - suspend execution of a SUBMIT file until a character is typed
;
0100 org 0100h
0100 0E09 mvi c,9
0102 110D01 lxi d,prompt
0105 CD0500 call 5
0108 0E01 mvi c,1
010A C30500 jmp 5
010D 5479706520prompt db 'Type any key when ready to continue$'


View File

@@ -0,0 +1,96 @@
Using control characters in a SUBMIT file
-----
Question: How do I enter control characters into a SUBMIT file?
The instructions on page 28 of the CP/M manual do not seem to work.
Answer: SUBMIT requires you to enter '^z' to place a CTRL Z in the
file. The problem comes in that SUBMIT also converts all characters to
uppercase. The following patch suggested by Digital Research will modify
SUBMIT to require '^Z'.
A>ddt submit.com
DDT VERS 2.2
NEXT PC
0600 0100
-s442
0442 61 41
0443 32 .
-g0
A>save 5 submit.com
This alternate patch will allow lowercase characters to be entered
which is also extremely helpful when using XSUB and ED with strings that
require lowercase characters.
A>ddt submit.com
DDT VERS 2.2
NEXT PC
0600 0100
-s370
0370 5F FF
0371 32 .
-g0
A>save 5 submit.com
The following example submit file (using only the alternate patch)
uses ED to search a file and replace all lowercase strings 'recieve' with
'receive'.
xsub
ed file.doc
#a
b#srecieve^zreceive
e
It should be mentioned that in no case can the control characters
'^P' or '^C' be used in a submit file to obtain the normal functions of
console input for printer toggle or warm start.
CTRL P and CTRL C in a SUBMIT file
-----
Question: Why can't I put "CTRL P" and "CTRL C" in a SUBMIT file
using the instructions in the manual?
Answer: The usual processing of characters done by the BDOS on
input is bypassed when using SUBMIT. The following programs can simulate
these functions.
;
; PRINT - turn printer echo on and off
;
; Usage:
;
; A>PRINT ?
;(turn printer echo on with anything following PRINT)
; A>PRINT
;(turn printer echo off with nothing following PRINT)
;
0100 org 0100h
0100 2A4E00 lhld 04eh ;address of bios
0103 110DF5 lxi d,0f50dh ;offset of flag in bdos
0106 19 dad d ;point to it
0107 3A8000 lda 080h ;echo on or off?
010A 77 mov m,a ;set the flag
010B C9 ret ;return directly to ccp
; WBOOT - perform a warm boot
;
0100 org 0100h
0100 C7 rst 0
;
;PAUSE - suspend execution of a SUBMIT file until a character is typed
;
0100 org 0100h
0100 0E09 mvi c,9
0102 110D01 lxi d,prompt
0105 CD0500 call 5
0108 0E01 mvi c,1
010A C30500 jmp 5
010D 5479706520prompt db 'Type any key when ready to continue$'


View File

@@ -0,0 +1,34 @@
;
;XMAC --
; MACRO ASSEMBLER "MAC" CHANGES TO DISABLE 8080 OPCODES FOR CROSS-ASSEMBLY
; WORK
; THIS PATCH WAS ORIGINALLY SUPPLIED WITH MY MAC MANUAL -- RLC
; THIS IS TO BE PATCHED INTO MAC USING DDT. AFTER THE PATCH IS COMPLETE,
; PERFORM A "SAVE 46 XMAC.COM" TO CREATE XMAC.COM.
;
RT EQU 25 ; 8080 REGISTER NAME
PT EQU 26 ; PSEUDO OPCODE TYPE
TAREA EQU 2561H ; FREE AREA IN TOKEN MODULE
;
ORG 2444H ; OVERLAY INXH - MOV B,M - RET
JMP TAREA
;
ORG TAREA
; TYPE IS IN THE ACCUMULATOR
CPI RT ; BELOW RT IF ARITHMETIC OPERATOR
JC TYPEOK
CPI PT ; PSEUDO OP?
RNZ ; RETURN WITH NON-ZERO FLAG
; OTHERWISE, PSEUDO-OP OR ARITHMETIC OP
TYPEOK:
INX H
MOV B,M
CMP A ; SET ZERO FLAG
RET
END

View File

@@ -0,0 +1,21 @@
ZSID BUGS
From DDJ, Oct. 1982, p. 7
ZSID doesn't interpret the LDIR instruction correctly when the
operands (the two strings defined by the HL, DE and BC registers)
overlap on each other. The LDIR (long move) instruction of the
Z-80 copies a source string into a target string. When the target
string overlaps on the source string (as when the source begins
at 200h, the target at 201h and the length is 255 bytes) LDIR
becomes a Replicate instruction, duplicating the leading byte
of the source into the target over and over. ZSID doesn't handle
it right, though; it stops after copying one byte.
Also, the disassembler in ZSID doesn't seem to handle the LD A,R
and LD R,A instructions. Its List command won't display them and
its Assemble command won't accept them.
The number -1 is not correctly interpreted. For example, LD HL,-1
is interpreted as LD HL,00FF.

View File

@@ -0,0 +1,83 @@
A PATCH FOR ZSID
From DDJ, Dec. 1981, p. 4
There is a small hidden bug in ZSID version 1.4. It is easily
demonstrated when trying the following: in the direct assembly
mode, try to assemble three 16-bit loads with the values of (hex):
FF7F, FF80, FFFF
Afterwards list the product.
The false values are not only used in the assembler, but in the
F(ill), M(ove) and D(ump) command as well. The cure is very simple:
change the byte at 02AE (hex) in ZSID from "C2" to "C3".
SID version 1.4 does not have this "feature", so it may be that
the routine starting at 02A1H is, at some place, necessary in the
Z-80 specific parts, e.g. for error checking in relative jumps.
There are no apparent problems after this patch is installed but,
even so, care should be taken if it is used.
The following demonstrates the bug and fix:
A>ZSID
ZSID VERS 1.4
#A100
0100 LD HL,0FF7F
0103 LD HL,0FF80
0106 LD HL,0FFFF
0109 .
#L100,108
0100 LD HL,FF7F
0103 LD HL,0080
0106 LD HL,00FF
0109
#IZSID.COM
#R
NEXT PC END
2900 0100 B9FF
#L2A1,2BC
02A1 PUSH DE
02A2 CP 41
02A4 JP NC,0BCF
02A7 CALL 0EAA
02AA LD B,D
02AB LD A,B
02AC CP FF
02AE JP NZ,00B8
02B1 LD A,E
02B2 OR A
02B3 JP P,00B8
02B6 LD B,00
02B8 LD A,E
02B9 POP DE
02BA DEC B
02BB INC B
02BC RET
02BD
#S2AE
02AE C2 C3
02AF B8 .
#L2AE,2B0
02AE JP 00B8
02B1
#G0
A>SAVE 40 ZSIDP.COM
A>ZSIDP
ZSID VERS 1.4
#A100
0100 LD HL,0FF7F
0103 LD HL,0FF80
0106 LD HL,0FFFF
0109 .
#L100,108
0100 LD HL,FF7F
0103 LD HL,FF80
0106 LD HL,FFFF
0109
#G0