home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpm
/
modem
/
cp405src.ark
/
CP4KER.UPD
< prev
next >
Wrap
Text File
|
1986-12-25
|
29KB
|
693 lines
CP4KER.UPD
Changes between v4.03 and v4.05 of Kermit-80
18-Feb-85
; edit 12: February 6, 1985
; Add extended H89 support (by Paul Milazzo, Rice University),
; support for Northstar Horizon with Northstar CP/M and SIO-4 board
; (by Joe Smith, Colorodo School of Mines), and support for Lobo
; MAX-80 computer (from Hal Hostetler)
;
; edit 11: 13-Jan-85 by Vanya J.Cooper Pima Commun. College Tel: 602-884-6809
;
;pcc001 27-Dec-84 vjc modules: cp4sys,cp4typ
; Add conditional for Xerox 820. I thought at first I could
; live with the kaypro conditional, but it's enough of a pain
; that I added it back in. The clear-to-end-of-screen char
; is different, breaking many programs in VT52 mode, and the
; default escape char control-\, is not at all obvious how
; to type on the 820 keyboard. If you muddle through the
; key translation table, it turns out to be control-comma.
; Rather than OR xer820 all the occurances of kpII conditionals
; I added a bbI conditional for all common code for the big
; board I based machines that is automatically turned on by
; either kpII or xer820. This will also make it easier in
; the future if another flavor of bigboard is added.
;
; edit 10: 5 December 1984 by CJC
; Add missing ENDIF (tsk, tsk)
;
; edit 9: 4 December 1984 by CJC
; Add two osborne fixes: missing crlf in outlin:, incorrect opcode in
; initialization.
;
; edit 8: 13 October 1984 by L M Jones, JCC, for New York Botanical Garden
; Add support for CPT-85xx series word processors when running CP/M-80.
;
CP4KER.UPD
Changes between v3.9 and v4.03 of Kermit-80
14-Sep-84
Note: as soon as things stabilize, this file will be frozen; the revision
history from v4.00 can be obtained from the source files.
The starting point was CPMBASE.M80/CPMBASE.UPD for version 3.9 of Kermit,
FTP'd from Columbia University. CPMBASE.UPD has not been modified; it is
now only of historical interest. CPMBASE.M80 was divided two separately
assembled modules (hereinafter referred to as CP4KER and CP4TYP, after the
first file in each). The sources consist of 12 files (one of which is
assembled into both modules):
CP4KER.ASM - header for system-independent module. Defines assembler
to be used, and links (LASM) or includes (MAC80, M80)
the remaining files.
CP4DEF.ASM - common symbol definitions (for CP4KER and CP4TYP)
CP4MIT.ASM - main loop and small commands
CP4PKT.ASM - SEND and RECEIVE commands
CP4TT.ASM - TRANSMIT and CONNECT commands
CP4CPM.ASM - DIR and ERA commands
CP4WLD.ASM - wildcard support
CP4CMD.ASM - command parser
CP4UTL.ASM - support routines and data (pure, impure)
CP4TYP.ASM - selects target system and assembler to be used. Links
or includes the rest of these files:
CP4LNK.ASM - linkage sections
CP4DEF.ASM - common symbol definitions (for CP4KER and CP4TYP)
CP4SYS.ASM - system-dependent code
I started assembling the code with M80, and switched to LASM, to provide
a system that could be built with a minimum of additional software beyond
that provided in the basic CP/M system. (ASM could not be used, because
it has no provision for multiple input files). Version 4.03 assembles
identically with M80, LASM, and MAC80. All code (and data) is assembled
for absolute addresses; CP4KER starts at 100H, and CP4TYP starts at the
first free page following CP4KER. There are two linkage sections used to
pass control and share data between the two modules: one at 105H, containing
a block of JMP instructions to routines in CP4KER which may be needed by
CP4TYP; the other is at the beginning of the system-dependent overlay,
containing a block of JMP instructions and variables shared by CP4KER and
CP4TYP. The formats of these areas are defined in CP4UTL and CP4LNK,
although they really should be defined in only one place; the common subset
of the assemblers used does not include a mechanism to do this.
CP4KER.ASM contains the following:
TRUE, FALSE - for selecting options
M80, MAC80, LASM - select the assembler to be used, since they require
different directives
CP4KER - defined TRUE so CP4DEF can link to the correct module
for LASM, a LINK directive to chain to CP4DEF.ASM
for MAC80 and M80, INCLUDE directives to include the remainder of
the files in the module.
CP4DEF.ASM
Definitions for ASCII characters
Definitions for BDOS calls
Definitions for constants used in command tables
CP4MIT.ASM
entry linkage section (routines needed by CP4TYP: kermit, and nout)
start - system-independent initialization
kermit - main command loop
bye command
exit command
help command
log command
set command (and all its subcommands)
show command
status command
version command (new - this displays the version strings stored in
many of the files)
The command tables and help messages are also here, next to the
commands which reference them.
CP4UTL.ASM
utility routines:
escpr - prints the escape character
keycmd - parses a keyword; jumps to main loop if error.
cfmcmd - confirms a command; jumps to main loop if error.
nout - decimal output of number in HL.
prtstr - call bdos to output a string.
rskp - do "skip return" - return to PC on stack plus 3.
r - do "nonskip return" - return to PC on stack. (This is
needed because calls to routines with skip returns must
be followed by a 3-byte instruction, such as a JMP).
getfil - call bdos to open a file, and set up variables for
reading it.
inbuf - read a sector from the file opened by getfil.
outbuf - output a sector.
text (99.44% pure storage):
Kermit's name and version;
prompts;
error messages;
status messages;
impure storage:
for parser;
for just about everybody else (break this down!)
linkage section (overlaid by CP4TYP):
consistency check info (3 words); initialized to zero here
so we can detect absence of CP4TYP.
jump tables for routines in CP4TYP
data shared between CP4KER and CP4TYP:
pointer to VT52 emulation strings
pointer to command table for SET BAUD
pointer to help table for SET BAUD
pointer to command table for SET PORT
pointer to help table for SET PORT
various parameters whose defaults are system-dependent
(including protocol parameters)
other variables shared between CP4KER and CP4TYP:
bmax, bmask, bshiftf, nnams
Routine-by-routine changes:
For each file, the order here more or less follows the order of routines
in the sources. The primary exceptions are the system-dependent routines,
which are described with the routines that call them. Other possible
exceptions are routines that were moved, which may still be described where
they used to be, due to oversight.
CP4CMD.ASM:
cmblnk:
deleted; clrtop is now called directly.
cmnb12:
To erase current line, call clrlin instead of printing clrlin.
Use prtstr instead of setting c=prstr and calling bdos.
cminb2:
To adjust for the delete key, call delchr instead of printing delstr.
Move Kaypro dependency to CP4TYP.
cmnb32:
To erase character, call clrspc instead of printing clrspc.
CP4CPM.ASM
Move definition of NPL into this module.
Call sysspc to calculate free space; algorithm is different for CPM3.
sysspc:
Use CPM3 algorithm (supplied by Bruce Tanner) for CPM3 systems, the
old algorithm for all the others (CPM2 systems).
CP4DEF.ASM:
Move SOH to ASCII character section.
Move BDOS next to BDOS calls.
Separate CPM2-only and CPM3-only calls; add getfs for CPM3
Delete DIASW, nobody uses it.
CP4MIT.ASM:
general changes (formatting only)
blank line added after unconditional transfers of control;
indent some error (non-skip) returns;
space or tab added between some labels and instructions.
entry linkage table (new):
ASEG/ORG moved to immediately before table, so nothing gets in between.
jump to start, around entry linkage table, added.
start:
print Kermit's version (Kermit-80 v4.00)
(we do this as soon as possible, for identification if it quietly
dies later)
do consistency checks to see if we have a good configuration loaded.
if so, call sysinit to do the system-dependent stuff.
remove reenter label; proper re-entry point is now kermit:
jump to kermit, instead of call; it never returns.
sysinit:
the system-dependent code was generalized where possible; this resulted
in some changes to baud rate handling. Also, this made printing the
version a bit easier. As with start:, we print the version as soon
as possible to identify the victim.
print "configured for <system name>" (after Kermit's version).
if a specific terminal is being supported, print "with <terminal type>".
for iobyte systems,
get bios addresses so we can bypass bdos for I/O to console and modem.
get current iobyte and save as console iobyte.
for osbrn1, move I/O routines above 4000H, read current baud rate, and
set comm-line parity.
for kpII and bbII, output command string to SIO chip to initialize
comm-line. (correct documentation of SIO chip commands)
for mikko, copy command string to (memory-mapped) SIO chip to initialize
comm-line; set data mask to 0ffH (all 8 bits).
for brain, get current comm-line speed.
kermit:
reload the stack pointer, as some error handlers jump back to kermit
without cleaning up the stack. This is now the reentry point used
when control-C is typed during file transfer. Also re-select the
console, for iobyt systems.
bye:
call sysbye to do system-dependent connection termination.
sysbye:
for apple, drop carrier on modem.
exit:
call sysexit to do system-dependent program termination
sysexit:
for mikko, restore comm-line parameters altered in sysinit.
setcom:
added SET DEBUG ON/OFF command (note: no corresponding display in
SHOW command (yet))
Added SET TACTRAP ON/OFF/CHARACTER for TAC support (from Toad Hall).
Added subroutines onoff and chkkey to simplify SET subcommands.
vt52em:
if vtflg contains 0FFH, say "(not implemented)" and jump back to command
loop.
otherwise, accept an "ON" or "OFF" and set vtflg accordingly.
setdbg:
Since the debugging code could no longer be conditionally assembled,
the SET DEBUG ON/OFF command was added. The debugging code is always
present, and tests dbgflg to see if any debugging output should be
produced. dbgflg is initialized to 0 (OFF) in CP4LNK.ASM.
baud:
If spdtab is non-zero, it points to a command table of speed keywords
to be used to process the speed command, and spdhlp points to the
corresponding help text. All bits of the value obtained from
the speed table is stored in 'speed' for the STATUS command, and
sysspd is called with the 16-bit value in DE.
If spdtab contains zero, "(not implemented)" is printed.
sysspd:
The speed selection menus for brain and osbrn1 have been replaced
with a keyword table. Brain now uses the same table as kpII, allowing
the selection of 19200 baud; I'm not sure this speed will work, but
decided to try it anyway. Osbrn1 uses a two-entry command table,
allowing 300 and 1200 baud; the values returned are OSBR03 and OSBR12,
simplifying the sysspd routine.
for the brain, get the saved baud rates (stored by the bios?) and
replace the left nibble with the low 4 bits of DE. Save the
new value (for the bios?) and output it to the baud rate generator
port.
for the osbrn1, reset the ACIA, delay a while, and output the low
byte of the speed to the ACIA.
for the bbII, load the specified time constant into the appropriate
channel of the CTC chip.
for the kpII, output the speed to the channel A baud rate generator port.
for the mikko, write the 16-bit baud rate multiplier into both the
receive clock and transmit clock generators.
prtset:
SET PORT is handled in the same manner as SET BAUD: if prttab contains
zero, "(not implemented)" is printed; otherwise, prttab contains a
pointer to the command table, and prthlp contains a pointer to the
help text. After getting the keyword from the user, sysprt is
called with the keyword's value.
sysprt:
The processing here is essentially unchanged from version 3.9: the
value is the address of a 3-byte entry which gives the iobyte value,
the BDOS function, and (for robin) the hardware port address.
status:
trivial change to command confirmation; it now looks just like the
SHOW command.
stat01:
this is the actual status display, called by the SHOW and STATUS
commands, and by the <escape>S command in terminal mode.
Each parameter is now displayed by a separate routine, so we can
eventually support a "SHOW <parameter>" command.
if vtflg, the VT52 emulation flag, contains 0FFH (not implemented),
don't say anything about VT52 emulation; otherwise, report
VT52-Emulation ON or OFF.
if spdtab is non-zero, baud rate setting is supported, so report
baud rate: if speed is 0FFFFH, report "speed is indeterminate",
else look up speed in spdtab. If found, print speed, else report
"speed is indeterminate". This should now work for all systems with
SET BAUD capability.
CP4PKT.ASM
general:
Calls with prtstr with DE containing one of scrend, screrr, scrfln,
scrnp, scrnrt, scrst, rppos, and sppos were replaced with calls
to these routines, which will typically position the cursor to
the desired place and clear the remainder of the line.
init:
Instead of printing outlin and outln2, sysscr is called with DE
containing the address of Kermit's name and version.
Move initialization done by init1 to receive command; send command
doesn't need it (getfil does all necessary file initialization)
sysscr:
print banner (outlin)
for systems with cursor positioning support,
print Kermit's version (from DE)
print system name (sysver)
print field names (outln2)
(the system name is enclosed in square brackets; the open bracket
is printed here, and the close bracket is in outln2)
if dbgflg is set, print debug field names (outln3)
spack:
Delete debug code that terminated packet with a $, as a routine (dmptxt:)
was added to output the whole packet (null-terminated).
outpkt:
Replace the sequence:
IF iobyt
lda prtiob ;Set up for output to go to the comm port
sta iobyte ;Switch byte directly
ENDIF;iobyt
with:
call selmdm ; Set up for output to comm port if iobyt
Likewise, replace
IF iobyt
lda coniob ;Set up for output to go to the console port
sta iobyte ;Switch directly
ENDIF;iobyt
with:
call selcon ; set up for output to console port
Selmdm and selcon are in CP4SYS.ASM; they contain the loads and stores
from above, conditionally assembled under IOBYT, followed by a ret.
At outpk6:, replace conditionally assembled debug code with test of
dbgflg. Also call dmptxt instead of prtstr, so we print the whole
packet.
TACtrap support added: if tacflg is non-zero, it's the TAC intercept
character, and must be doubled when seen in an outbound packet.
Replace calls to outchr with calls to outmdm or outcon, depending on
whether we want to talk to comm line or console. Outmdm and outcon
are in CP4SYS.ASM. Note that parity must be set before calling
outmdm; outchr used to do it, but outmdm does not.
inpkt:
At inpkt6:, replace conditionally assembled debug code with test of
dbgflg. Also call dmptxt instead of prtstr, so we print the whole
packet.
inchr:
Fuzzy timer support has been generalized. The initial value should
be system-dependent, based on system speed and the time required
to get an input character from the modem. If we get a control-C,
jump to kermit instead of reenter.
error:
changing screrr to a subroutine from a string made error9 unnecessary.
dmptxt:
this routine is prints the null-terminated string pointed to by HL.
CP4SYS.ASM:
Integrated ap6551 (ACIA) support from Jon Beeson and Francis Wilson
and numerous fixes from Bruce Tanner.
Add delimiters around text in .printx's so M80 is happy too. (Currently,
the M80/MAC80 assembly flags are used only to decide whether or not
we should do the .printx's; if either is true, the .printx's are
included).
Add definitions for bbII. Although the bbII supports a builtin console,
I've left that out for now; it looks like a superset of the ADM3A.
Add support for Digicomp Delphi 100 and Netronics Smartvid terminal.
(courtesy Bdale Garbee)
Modify selection of defesc: for systems or terminals where ']' is a shifted
character, use '\' instead (some of these are just guesses...).
Define vtval: initial value of VT52 emulation flag. If generic CRT, can't
do VT52 emulation; if terminal uses VT100 sequences (i.e. Robin, dmII),
default to VT52 emulation off (but we can do it); for others, default
VT52 emulation on.
Things like defesc and vtval probably belong in CP4TYP.ASM, so the user can
override them without modifying CP4SYS.ASM.
outchr: replaced by outmdm (but parity must be set first):
inpchr: replaced by inpmdm:
prtout: replaced by outmdm:
baudtb: replaced by command table (brain, osbrn1)
sysexit, syscon, syscls, sysinh, sysint, sysflt, sysbye, sysspd, sysprt,
sysscr, sysspc:
described elsewhere (where they are called)
selmdm, selcon:
For iobyt systems, these routines update IOBYTE appropriately. For
the Morrow Decision I, they cause the correct port to be selected.
For the other systems, they do nothing.
inpcon:
gets a byte from the console, via dconio bdos call for non-iobyte
systems, or by calling the bios for iobyte systems. Zero is
returned if no character is available.
outcon:
outputs a byte to the console.
For the Kaypro, it uses the bdos conout function for tabs, and dconio
for all other characters. I haven't looked into this yet, but
suspect that calling dconio will result in not knowing the current
column, which in turn will cause the wrong number of spaces to be
generated for tabs.
For iobyte systems, we call the bios; for the rest, except the Kaypro,
we use the dconio bdos function.
outmdm:
outputs a byte to the modem. This routine preserves bc and hl, although
outcon doesn't. This will be reconciled eventually; I think we
ought to make outmdm and outcon the same for iobyte systems.
inpmdm:
gets a byte from the modem. Returns zero if nothing there yet. Again,
this ought to be the same as inpcon for iobyte systems.
flsmdm:
flushes any pending data at the modem.
outlpt:
outputs a byte to the printer.
csrpos:
given desired row in B and column in C, moves the cursor. Home position
is (1,1). Since this routine is referenced by the linkage section,
a dummy routine is provided for the OSI and CRT systems, although
it should never be called.
scrnp:
For systems with cursor positioning, call csrpos with the desired screen
position. For OSI and CRT systems, just print a space.
scrnrt:
For systems with cursor positioning, call csrpos with the desired screen
position. For OSI and CRT systems, just print " %".
scrfln, screrr, scrst, scrend:
For systems with cursor positioning, these routines call csrpos with the
desired screen position. For OSI and CRT systems, print a crlf.
rppos, sppos:
For systems with cursor positioning, these routines call csrpos with the
desired screen position. For OSI and CRT systems, print a header
("RPack:" or "SPack:").
clreos:
For systems with cursor positioning, print the erase-to-end-of-screen
string from the VT52 emulation table.
clreol:
For systems with cursor positioning, print the erase-to-end-of-line
string from the VT52 emulation table.
delchr:
If echoing 'del' to the screen does nothing, just print a backspace.
Otherwise, print delstr to clean the mess off the screen.
clrspc:
output space,backspace to erase the character at the current cursor
position.
clrlin:
print eralin to erase the current line.
clrtop:
print erascr to clear the screen and move to the home position.
prtstr:
Duplicate for CP4TYP. We could put prtstr in the linkage section, but
I was trying to restrict that to JMP instructions, to avoid having
to calculate where everything is.
rskp:
Another duplicate.
Terminal tables:
general:
define screen format (outln2, outln3)
replace outlin + versio with sysver, outlin.
clrlin becomes eralin.
clrtop becomes erascr.
for escape sequences with no translation, print nothing.
brain:
add curldn.
remove rppos, sppos.
heath/z100/telcon:
make vt52-compatible: clear screen is $H$J, not $E$H; erase to EOL is $K,
not $l.
trs80lb:
graphics mode?
adm3a, tvi925, vt52, vt100:
add ttytyp (terminal name string) for initialization
kpii:
The Kaypro echoes DEL as a printing character; it uses delstr (backspace,
space, backspace, backspace) to erase it.
for ti: (reverse linefeed) use insert line rather that cursor up, in the
hope that it will only be used on the top line. (True for VMS EDT and
Unix vi)
CP4TT.ASM
xmit:
getfil no longer has a skip return: remove following "jmp kermit".
xnext:
Add calls to selmdm to select proper output port. This allows us to
use the same output routine for terminal mode and file transfer mode.
Use inbuf to get next buffer, instead of xbuf.
xbuf:
deleted; xmit calls inbuf instead.
telnet:
Drop what appears to be an extra call to ckdial (apple only); ckdial is
called again as part of the system-dependent code for starting the
session.
Replace code for robin, apple, osbrn1 with call to syscon.
syscon:
For robin, print an extra message about control-S
For apple, do dial support.
For the osborne, patch BIOS so back-arrow generates DELETE code.
prtchr:
made system-independent. To get character, it calls selmdm and inpmdm.
system-specific code changed to generic: NUL, DEL, XON, and XOFF are
not sent to the terminal.
(We should alter this to support HANDSHAKE and TURNAROUND options.)
added call to sysflt - system-dependent filter to take care of any other
characters we don't want to send to the terminal.
If vtflg is positive, VT52 emulation is enabled. (negative means VT52
emulation is not supported for this system; zero means supported but
currently disabled)
vt52:
generalized. we accumulate a whole cursor positioning sequence, and
evaluate the row and column, then call csrpos to do it for the console.
If the escape sequence is not recognized, we swallow the escape and the
following character, just like a real VT52, so as not to screw up the
console.
We now respond to 'Z' (query terminal type), claiming to be a VT52 without
a local printer (I vaguely recall some commands to control the optional
printer, as well as a different response saying we've got one, but I'll
leave that to someone who needs to emulate a VT52 with printer).
Still not supported (besides printer): '>' and '=' (alternate keypad
support); '[' and '\' (hold-screen support).
logit:
Use setpar, outmdm instead of prtout. Note that we still assume host does
XON/XOFF support, and can react to XOFF within a few character times
(unreasonably fast).
prtout:
deleted. use outmdm instead (call selmdm and setpar as appropriate).
other system dependencies are taken care of by sysflt.
conchr:
Made system-independent - calls I/O routines in CP4TYP.
intchr:
When <escape>C is seen, call syscls to do system-dependent stuff
for return to local system.
While printing help text, call sysinh to print extra system-dependent
help.
For <escape>0, send null with proper parity.
syscls:
For Osborne, re-patch BIOS so backarrow generates backspace.
sysint:
For apple, 'D' is Disconnect Modem command.
For robin, dmII, bbII, and kpII, 'B' is Send Break command
CP4TYP.ASM
Remove DEBUG conditional.
Add MAC80, M80, and LASM, for those assemblers.
Add OVLADR, address at which overlay is linked. This is set from the value
of LNKFLG in CP4KER.
Set TRS80 equal to TRS80LB OR TRS80PT, so it doesn't need to be set by the
user.
Add BBII, for Ferguson Big Board II. If using the built-in terminal of
the bbII, define ADM3A EQU TRUE.
Add VT52 and VT100 as supported terminal types for systems without an
integrated terminal. (I don't know how many micro owners have
VT52's; I added it for my Heathkit H-19)
CP4UTL.ASM:
Utility routines:
compp, countp, ackp, and tryagn were moved to CP4PKT.ASM.
inbuf and outbuf were modified to support a large buffer used by the
SEND, RECEIVE, and TRANSMIT commands. The beginning of the buffer
and the size of the buffer are defined dynamically in sysinit.
Text:
The string "Kermit-80 Vx.y " was moved from the system version string
(versio:) to version: in CP4UTL.ASM. I also extended the minor
version to 2 digits so I can keep track of interim releases during
testing.
outln2 was moved to CP4SYS.ASM, as it is used only for systems with
cursor positioning.
erms20, erms21 added for consistency checks at initialization.
infms8 no longer includes TRS-80 help text; that is printed by syscon
in CP4SYS.ASM
inms11 was moved to CP4SYS.ASM.
sethlp was changed to include line for the SET DEBUG command; minimum
abbreviations changed. (sethlp and tophlp don't follow the same
conventions...).
prthlp was moved to CP4SYS.ASM.
inthlp was modified to remove system-dependent text; sysinh will
describe the additional commands (including B for dmII).
vtemst unconditionally generated.
osbmsg removed; no longer needed.
spdst, spdust unconditionally generated.
COMND tables:
SET DEBUG added to SET keyword table
prttab, spdtab now contain address of SET PORT, SET SPEED command
tables in CP4SYS.ASM.
Impure data:
ecoflg moved to linkage section.
vtvflg, vctccc are no longer needed; replaced by vtyval.
vtflg moved to linkage section.
prtfun, prtiob, coniob, prtadr moved to CP4SYS
flwflg, ibmflg, cpmflg, parity, escchr moved to linkage section.
spsiz, rpsiz, stime, rtime, spad, rpad, spadch, rpadch, seol, reol,
squote, rquote, chktyp moved to linkage section.
curchk, inichk not initialized.
speed moved to linkage section.
bmax, bmask, bshiftf, nnams moved to linkage section, for sysspc.
mfreq, mfflg1, mfflg2 moved to CP4WLD.ASM.
osbaud replaced by speed.
osbrn1 I/O routines (starting at osmove) moved to CP4SYS.ASM
kpstbl, miotbl, mintbl moved to CP4SYS.ASM
filflg removed; file handling code no longer needs it.
linkage section: (new)
this section starts at the next available page boundary (to lessen its
chances of moving from version to version, allowing the same configuration
overlay to be used). OVLADR in CP4TYP.ASM must be set to the address of
lnkflg in CP4KER (from the listing). The linkage section contains:
lnkflg: one word, initialized to zero by CP4UTL.ASM. CP4LNK.ASM
overwrites this with what it believes is the length of this
linkage section; CP4KER verifies this value at startup and
refuses to run if the value is incorrect.
lnkent: one word, again initialized to zero by CP4MIT.ASM. CP4LNK.ASM
overwrites this with the expected length of the entry section
starting at 0103H; CP4KER refuses to run if this value is
incorrect.
ovlver: one word, initialized to zero. This is overwritten with the
address of a string giving the version of the overlay, in
the same format as the other module version strings.
The jump table follows the three-word header. After the jump table,
space is saved for variables used by both CP4KER and CP4TYP.
CP4WLD.ASM:
mfname:
Changed a few occurences of 'push a/pop a' to 'push psw/pop psw'.