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,614 @@
.MB +5
.MT -3
.LL 65
.PN 85
.HE MP/M User's Guide
.FT (All Information Herein is Proprietary to Digital Research.)
.sp 2
3. MP/M ALTERATION GUIDE
.sp
.pp
3.1 Introduction
.pp
The standard MP/M system assumes operation on an Intel MDS-800
microcomputer development system, but is designed so that the user
can alter a specific set of subroutines which define the hardware
operating environment. In this way, the user can produce a diskette
which operates with any IBM-3741 format compatible diskette subsystem
and other peripheral devices.
.pp
Although standard MP/M is configured for single density
floppy disks, field-alteration features allow adaptation to
a wide variety of disk subsystems from single drive minidisks
through high-capacity "hard disk" systems.
.pp
In order to achieve device independence, MP/M is distinctly separated
into an XIOS module which is hardware environment dependent and
several other modules which are not dependent upon the hardware
configuration.
.pp
The user can rewrite the distribution version of the
MP/M XIOS to provide a new XIOS which provides a customized interface
between the remaining MP/M modules and the user's own hardware
system. The user can also rewrite the distribution version of the
LDRBIOS which is used to load the MP/M system from disk.
.pp
The purpose of this section is to provide the following step-by-step
procedure for writing both your LDRBIOS and new XIOS for MP/M:
.sp 2
(1) Implement CP/M 2.0 on the target computer
.pp
To simplify the MP/M adaptation process, we assume (and STRONGLY
recommend) that CP/M 2.0
has already been implemented on the target MP/M machine.
If this is not the case it will be necessary for the user to
implement the CP/M 2.0 BIOS as described in the Digital Research
document titled "CP/M 2.0 Alteration Guide" in addition to the
MP/M XIOS.
The reason that both the BIOS and XIOS have to be implemented is
that the MP/M loader uses the CP/M 2.0 BIOS to load and relocate
MP/M. Once loaded, MP/M uses the XIOS and not the BIOS.
The CP/M 2.0 BIOS used by the MP/M loader is called the LDRBIOS.
.pp
Another good reason for implementing CP/M 2.0 on the target MP/M
machine is that debugging your XIOS is greatly simplified by
bringing up MP/M while running SID or DDT under a CP/M 2.0 system.
.sp 2
(2) Prepare your custom MPMLDR by writing a LDRBIOS
.pp
Study the BIOS given in the "CP/M 2.0 Alteration Guide"
and write a version which has a ORG of 1700H.
Call this new BIOS by the
name LDRBIOS (loader BIOS). Implement only the primitive disk
read operations on a single drive, and console output
functions.
.pp
The first LDRBIOS call made by the MPMLDR is SELDSK: select
disk. If there are devices which require initialization a
call to the LDRBIOS cold start or other initialization code
should be placed at the beginning of the SELDSK handler.
.pp
Note: The MPMLDR uses 4000H - 6FFFH as a buffer area when
loading and relocating the MPM.SYS file.
.pp
Test LDRBIOS completely to ensure that it properly performs
console character output and disk reads. Be especially
careful to ensure that no disk write operations occur accidently
during read operations, and check that the proper track and sectors
are addressed on all reads. Failure to make these checks
may cause destruction of the initialized MP/M system after it is patched.
.pp
The following steps can be used to integrate a custom LDRBIOS
into the MPMLDR.COM:
.pp
A.) Obtain access to CP/M version 1.4 or 2.0 and prepare the
LDRBIOS.HEX file.
.pp
B.) Read the MPMLDR.COM file into memory using either DDT
or SID.
.li
A>DDT MPMLDR.COM
DDT VERS 2.0
NEXT PC
1A00 0100
.ad
.pp
C.) Using the input command ('I') specify that the LDRBIOS.HEX
file is to be read in and then read ('R') in the file. The effect
of this operation is to overlay the BIOS portion of the MP/M
loader.
.li
-ILDRBIOS.HEX
-R
NEXT PC
1A00 0000
.ad
.pp
D.) Return to the CP/M console command processor (CCP) by
executing a jump to location zero.
.li
-G0
.ad
.pp
E.) Write the updated memory image onto a disk file using
the CP/M 'SAVE' command. The 'X' placed in front of the file
name is used simply to designate an experimental version, preserving
the orginal.
.li
A>SAVE 26 XMPMLDR.COM
.ad
.pp
F.) Test XMPMLDR.COM and then rename it to MPMLDR.COM.
.sp 2
(3) Prepare your custom XIOS
.pp
If MP/M is being tailored to your computer system for the first
time,
the new XIOS requires some relatively simple software development and
testing. The standard XIOS is listed in APPENDIX I, and can be used as
a model for the customized package.
.pp
The XIOS entry points, including both basic and extended, are described
in sections 3.2 and 3.3. These sections along with APPENDIX I
provides you with the necessary information to write your XIOS.
We suggest that your initial implementation of an XIOS utilize polled
I/O without any interrupts. The system will run without even a clock
interrupt.
The origin of your XIOS should be 0000H. Note the two equates needed
to access the dispatcher and XDOS from the XIOS:
.li
ORG 0000H
PDISP EQU $-3
XDOS EQU PDISP-3
.ad
.pp
The procedure to prepare an XIOS.SPR file from your customized XIOS
is as follows:
.pp
A.) Assemble your XIOS.ASM and then rename the XIOS.HEX file to
XIOS.HX0.
.pp
B.) Assemble your XIOS.ASM again specifying the +R option which
offsets the ORG statements by 100H bytes. Or, edit your XIOS.ASM
and change the initial ORG 000H to an ORG 100H and assemble it again.
.pp
C.) Use PIP to concatenate your two HEX files:
.li
A>PIP XIOS.HEX=XIOS.HX0,XIOS.HEX
.ad
.pp
D.) Run the GENMOD program to produce the XIOS.SPR file from the
concatenated HEX files.
.li
A>GENMOD XIOS.HEX XIOS.SPR
.ad
.cp 15
.ce
*** Warning ***
.pp
Make certain that your XIOS.ASM file contains a defined
byte of zero at the end. This is especially critical if
your XIOS.ASM file ends with a defined storage. The reason
for this requirement is that there are no HEX file records
produced for defined storge (DS) statements. Thus, the
output HEX file is misleading because it does not identify
the true lenth of your XIOS. The following example
illustrates a properly terminated XIOS:
.li
begdat equ $
dirbuf: ds 128
alv0: ds 31
csv0: ds 16
db 0 ; force out hex record at end
end
.ad
.pp
Note that this same technique must be applied to any
other PRL or RSP programs that you prepare.
.sp 2
(4) Debug your XIOS
.pp
An XIOS or a resident system process can be debugged using
DDT or SID running under CP/M 1.4 or 2.0. The debugging
technique is outlined in the following steps:
.pp
A.) Determine the amount of memory which is available to MP/M
with the debugger and the CP/M operating system resident. This
can be done by loading the debugger and then listing the jump
instruction at location 0005H. This jump is to the base of
the debugger.
.li
A>DDT
DDT VERS 2.0
-L5
0005 JMP D800
.ad
.pp
B.) Using GENSYS running under CP/M, generate
a MPM.SYS file which specifies the top of memory determined by
the previous step, allowing at least 256 bytes for a patch area.
.li
...
Top page of memory = D6
...
.ad
.pp
Also while executing GENSYS specify the breakpoint
restart number as that used by the CP/M SID or DDT which you
will be executing. This restart is usually #7.
.li
...
Breakpoint RST # = 7
...
.ad
.pp
C.) If a resident system process is being debugged make
certain that it is selected for inclusion in MPM.SYS.
.pp
D.) Using CP/M 1.4 or 2.0, load the MPMLDR.COM file into
memory.
.li
A>DDT MPMLDR.COM
DDT VERS 2.0
NEXT PC
1A00 0100
.ad
.pp
E.) Place a 'B' character into the second position of
default FCB. This operation can be done with the 'I' command:
.li
-IB
.ad
.pp
F.) Execute the MPMLDR.COM program by entering a 'G'
command:
.li
-G
.ad
.pp
G.) At point the MP/M loader will load the MP/M operating
system into memory, displaying a memory map.
.pp
H.) If you are debugging an XIOS, note the address of the
XIOS.SPR memory segment. If you are debugging a resident system
process, note the address of the resident system process. This
address is the relative 0000H address of the code being debugged.
You must also note the address of SYSTEM.DAT.
.pp
I.) Using the 'S' command, set the byte at SYSTEM.DAT + 2
to the restart number which you want the MP/M debugger to use.
Do not select the same restart as that being used by the CP/M
debugger.
.li
...
Memory Segment Table:
SYSTEM DAT D600H 0100H
...
-SD602
D602 07 05
.ad
.pp
J.) Using the 'X' command, determine the MP/M beginning
execution address. The address is the first location past
the current program counter.
.li
-X
....................... P = 0A93 .....
.ad
.pp
K.) Begin execution of MP/M using the 'G' command, specifying
any breakpoints which you need in your code. Actual memory address
can be determined using the 'H' command to add the code segment
base address given in the memory map to the relative displacement
address in your XIOS or resident system process listing.
.pp
The following example shows how to set a breakpoint to
debug an XIOS list subroutine given the memory map:
.li
...
XIOS SPR CD00H 0500H
-GA94,CD0F
.ad
.pp
L.) At this point you have MP/M running with CP/M and its
debugger also in memory. Since interrupts are left enabled during
operation of the CP/M debugger, care
must be taken to ensure that interrupt driven code does not
execute through a point at which you have broken.
.pp
Since the CP/M debugger operates with interrupts
left enabled it is a somewhat difficult task to debug an interrupt
driven console handler. This problem can be approached by leaving
console #0 in a polled mode while debugging the other consoles
in an interrupt driven mode. Once this is done very little, if any,
debugging would be required to adapt the interrupt driven code from
another console to console #0. It is further recommended that you
maintain a debug version of your XIOS which has polled I/O for
console #0.
Otherwise it will not be possible to run the CP/M debugger underneath
the MP/M system because the CP/M debugger will not be able to get
any console input, as it will all go to the MP/M interrupt driven
console #0 handler.
.sp 2
(5) Directly booting MP/M from a cold start
.pp
In systems
where MP/M is to be booted directly at cold start rather than loaded
and run as a transient program under CP/M, the customized MPMLDR.COM
file and cold start loader can be placed on the first two tracks of a diskette.
If a CP/M SYSGEN.COM program is available it can
be used to write the MPMLDR.COM file on the first two tracks.
If a SYSGEN.COM program is not available, or if SYSGEN.COM will not
work because a different media such as a mini-diskette or "hard" disk
is to be used, the user must write a simple memory loader,
called GETSYS, which brings the MP/M loader into memory and a
program called PUTSYS, which places the MPMLDR on the first two tracks
of a diskette.
.pp
Either the SID or DDT debugger can be used in place of writing a
GETSYS program as is shown in the following example which also
uses SYSGEN in place of PUTSYS.
Sample skeletal GETSYS and PUTSYS programs are described
later in this section (for a more detailed description of
GETSYS and PUTSYS see the "CP/M 2.0 Alteration Guide").
.pp
In order to make the MP/M system load and run
automatically, the user must also supply a cold start loader, similar
to the one described in the "CP/M 2.0 Alteration Guide".
The purpose of the cold start loader is to load the MP/M loader into
memory from the first two tracks of the diskette.
The CP/M 2.0 cold start loader must be modified in the following
manner: the load address must be changed to 0100H and the execution
address must also be changed to 0100H.
.pp
The following techniques are specifically for the MDS-800 which has
a boot ROM that loads the first track into location 3000H. However,
the steps shown can be applied in general to any hardware.
.pp
If a SYSGEN program is available, the following steps can be used to
prepare a diskette that cold starts MP/M:
.pp
A.) Prepare the MPMLDR.COM file by integrating your custom
LDRBIOS as described earlier in this section. Test the MPMLDR.COM
and verify that it operates properly.
.pp
B.) Execute either DDT or SID.
.li
A>DDT
DDT VERS 2.0
.ad
.pp
C.) Using the input command ('I') specify that the MPMLDR.COM
file is to be read in and then read ('R') in the file with an
offset of 880H bytes.
.li
-IMPMLDR.COM
-R880
NEXT PC
2480 0100
.ad
.pp
D.) Using the 'I' command specify that the BOOT.HEX file is to
be read in and then read in the file with an offset that will load
the boot into memory at 900H. The 'H' command can be used to
calculate the offset.
.li
-H900 3000
3900 D900
-IBOOT.HEX
-RD900
NEXT PC
2480 0000
.ad
.pp
E.) Return to the CP/M console command processor (CCP) by
jumping to location zero.
.li
-G0
.ad
.pp
F.) Use the SYSGEN program to write the new cold start loader
onto the first two tracks of the diskette.
.li
A>SYSGEN
SYSGEN VER 2.0
SOURCE DRIVE NAME (OR RETURN TO SKIP)<cr>
DESTINATION DRIVE NAME (OR RETURN TO REBOOT)B
DESTINATION ON B, THEN TYPE RETURN<cr>
FUNCTION COMPLETE
.ad
.sp 2
If a SYSGEN program is not available then the following steps can
be used to prepare a diskette that cold starts MP/M:
.pp
A.) Write a GETSYS program which reads the
custom MPMLDR.COM file into location 3380H and the cold start
loader (or boot program) into location 3300H.
Code GETSYS so that it starts
at location 100H (base of the TPA).
.pp
As in the previous example, note that SID or DDT can be used to
perform this function instead of writing a GETSYS program.
.pp
B.) Run the GETSYS program using an initialized MP/M diskette to see
if GETSYS loads the MP/M loader starting at 3380H (the operating
system actually
starts 128 bytes later at 3400H).
.pp
C.) Write the PUTSYS program which writes
memory starting at 3380H back onto the first two tracks of the
diskette. The PUTSYS program should be located at 200H.
.pp
D.) Test the PUTSYS program using a blank uninitialized diskette by
writing a portion of memory to the first two tracks; clear memory
and read it back. Test PUTSYS completely, since this program will
be used to alter the MP/M system diskette.
.pp
E.) Use PUTSYS to place the MP/M loader and cold start loader
onto the first two tracks of a blank diskette.
.sp 2
.ce
SAMPLE PUTSYS PROGRAM
.pp
The following program provides a framework for the PUTSYS program.
The WRITESEC subroutine must be inserted by the user to write the
specific sectors.
.cp 52
.li
; PUTSYS PROGRAM - WRITE TRACKS 0 AND 1 FROM MEMORY AT 3380H
; REGISTER USE
; A (SCRATCH REGISTER)
; B TRACK COUNT (0, 1)
; C SECTOR COUNT (1,2,...,26)
; DE (SCRATCH REGISTER PAIR)
; HL LOAD ADDRESS
; SP SET TO STACK ADDRESS
;
START: LXI SP,3380H ;SET STACK POINTER TO SCRATCH AREA
LXI H, 3380H ;SET BASE LOAD ADDRESS
MVI B, 0 ;START WITH TRACK 0
WRTRK: ;WRITE NEXT TRACK (INITIALLY 0)
MVI C,1 ;WRITE STARTING WITH SECTOR 1
WRSEC: ;WRITE NEXT SECTOR
CALL WRITESEC ;USER-SUPPLIED SUBROUTINE
LXI D,128 ;MOVE LOAD ADDRESS TO NEXT 1/2 PAGE
DAD D ;HL = HL + 128
INR C ;SECTOR = SECTOR + 1
MOV A,C ;CHECK FOR END OF TRACK
CPI 27
JC WRSEC ;CARRY GENERATED IF SECTOR < 27
;
; ARRIVE HERE AT END OF TRACK, MOVE TO NEXT TRACK
INR B
MOV A,B ;TEST FOR LAST TRACK
CPI 2
JC WRTRK ;CARRY GENERATED IF TRACK < 2
;
; ARRIVE HERE AT END OF LOAD, HALT FOR NOW
HLT
;
; USER-SUPPLIED SUBROUTINE TO WRITE THE DISK
WRITESEC:
; ENTER WITH TRACK NUMBER IN REGISTER B,
; SECTOR NUMBER IN REGISTER C, AND
; ADDRESS TO FILL IN HL
;
PUSH B ;SAVE B AND C REGISTERS
PUSH H ;SAVE HL REGISTERS
..........................................
perform disk write at this point, branch to
label START if an error occurs
..........................................
POP H ;RECOVER HL
POP B ;RECOVER B AND C REGISTERS
RET ;BACK TO MAIN PROGRAM
END START
.ad
.bp
.ce
DIGITAL RESEARCH COPYRIGHT
.pp
Read your MP/M Licensing Agreement; it specifies your legal
responsibilities when copying the MP/M system. Place the copyright notice
.sp
.ce 2
Copyright (c), 1980
Digital Research
.sp
on each copy which is made of your customized MP/M diskette.
.sp 2
.ce
DISKETTE ORGANIZATION
.sp
.pp
The sector allocation for the standard distribution version of MP/M is
given here for reference purposes. The first sector (see table on the following page)
contains an optional software boot section. Disk controllers are often
set up to bring track 0, sector 1 into memory at a specific location
(often location 0000H). The program in this sector, called BOOT, has
the responsibility of bringing the remaining sectors into memory
starting at location 0100H. If your controller does not have a
built-in sector load, you can ignore the program in track 0, sector 1,
and begin the load from track 0 sector 2 to location 0100H.
.pp
As an example, the Intel MDS-800 hardware cold start loader brings
track 0, sector 1 into absolute address 3000H.
Upon loading this sector, control transfers to location 3000H, where
the bootstrap operation commences
by loading the remainder of track 0, and all of track 1 into
memory, starting at 0100H. The user should note that this bootstrap loader
is of little use in a non-MDS environment, although it is useful to
examine it since some of the boot actions will have to be duplicated in
your cold start loader.
.bp
.li
Track# Sector# Page# Memory Address MP/M Module name
00 01 (boot address) Cold Start Loader
00 02 00 0100H MPMLDR
" 03 " 0180H "
" 04 01 0200H "
" 05 " 0280H "
" 06 02 0300H "
" 07 " 0380H "
" 08 03 0400H "
" 09 " 0480H "
" 10 04 0500H "
" 11 " 0580H "
" 12 05 0600H "
" 13 " 0680H "
" 14 06 0700H "
" 15 " 0780H "
" 16 07 0800H "
" 17 " 0880H "
" 18 08 0900H "
" 19 " 0980H "
" 20 09 0A00H "
" 21 " 0A80H "
" 22 10 0B00H "
" 23 " 0B80H "
" 24 11 0C00H "
00 25 " 0C80H MPMLDR
00 26 12 0D00H LDRBDOS
01 01 " 0D80H "
" 02 13 0E00H "
" 03 " 0E80H "
" 04 14 0F00H "
" 05 " 0F80H "
" 06 15 1000H "
" 07 " 1080H "
" 08 16 1100H "
" 09 " 1180H "
" 10 17 1200H "
" 11 " 1280H "
" 12 18 1300H "
" 13 " 1380H "
" 14 19 1400H "
" 15 " 1480H "
" 16 20 1500H "
" 17 " 1580H "
" 18 21 1600H "
01 19 " 1680H LDRBDOS
01 20 22 1700H LDRBIOS
" 21 " 1780H "
" 22 23 1800H "
" 23 " 1880H "
" 24 24 1900H "
" 25 " 1980H "
01 26 25 1A00H LDRBIOS
.br


View File

@@ -0,0 +1,276 @@
.MB +5
.MT -3
.LL 65
.PN 96
.HE MP/M User's Guide
.FT (All Information Herein is Proprietary to Digital Research.)
.sp
.pp
3.2 Basic I/O System Entry Points
.pp
The entry points into the BIOS from the cold start loader and BDOS are
detailed below. Entry to the BIOS is through a "jump vector" located at
the base of the BIOS, as shown below (see Appendix I as well).
The jump vector is a sequence of 17 jump
instructions which send program control to the individual BIOS
subroutines. The BIOS subroutines may be empty for certain functions
(i.e., they may contain a single RET operation) during regeneration of
MP/M, but the entries must be present in the jump vector.
The extended I/O system entry points (XIOS) immediately follow the
last BIOS entry point.
.pp
The jump vector takes the form shown below, where the
individual jump addresses are given to the left:
.li
BIOS+00H JMP BOOT ; COLD START
BIOS+03H JMP WBOOT ; WARM START
BIOS+06H JMP CONST ; CHECK FOR CONSOLE CHAR READY
BIOS+09H JMP CONIN ; READ CONSOLE CHARACTER IN
BIOS+0CH JMP CONOUT ; WRITE CONSOLE CHARACTER OUT
BIOS+0FH JMP LIST ; WRITE LISTING CHARACTER OUT
BIOS+12H JMP PUNCH ; WRITE CHARACTER TO PUNCH DEVICE
BIOS+15H JMP READER ; READ READER DEVICE
BIOS+18H JMP HOME ; MOVE TO TRACK 00
BIOS+1BH JMP SELDSK ; SELECT DISK DRIVE
BIOS+1EH JMP SETTRK ; SET TRACK NUMBER
BIOS+21H JMP SETSEC ; SET SECTOR NUMBER
BIOS+24H JMP SETDMA ; SET DMA ADDRESS
BIOS+27H JMP READ ; READ SELECTED SECTOR
BIOS+2AH JMP WRITE ; WRITE SELECTED SECTOR
BIOS+2DH JMP LISTST ; RETURN LIST STATUS
BIOS+30H JMP SECTRAN ; SECTOR TRANSLATE SUBROUTINE
.pp
Each jump address corresponds to a particular subroutine which performs
the specific function, as outlined below. There are three major
divisions in the jump table: the system (re)initialization which
results from calls on BOOT and WBOOT, simple character I/O performed by
calls on CONST, CONIN, CONOUT, LIST, and LISTST, and diskette
I/O performed by calls on HOME, SELDSK, SETTRK, SETSEC, SETDMA, READ,
WRITE, and SECTRAN.
.pp
All simple character I/O operations are assumed to be performed in
ASCII, upper and lower case, with high order (parity bit) set to zero.
An end-of-file condition for an input device is given by an ASCII
control-z (1AH). Peripheral devices are seen by MP/M as "logical"
devices, and are assigned to physical devices within the BIOS.
.pp
In order to operate, the BDOS needs only the CONST, CONIN, and CONOUT
subroutines (LIST and LSTST may be used by PIP, but not the
BDOS).
.cp 4
.sp
The characteristics of each device are
.sp
.in 16
.ti 4
CONSOLE The principal interactive consoles which communicate with
the operators, accessed through CONST, CONIN, and CONOUT. Typically,
CONSOLEs are devices such as CRTs or Teletypes.
.sp
.ti 4
LIST The principal listing device, if it exists on your system,
which is usually a hard-copy device, such as a printer or Teletype.
.sp
.ti 4
DISK Disk I/O is always performed through a sequence of calls on the various
disk access subroutines which set up the disk number to access, the
track and sector on a particular disk, and the direct memory access
(DMA) address involved in the I/O operation. After all these
parameters have been set up, a call is made to the READ or WRITE
function to perform the actual I/O operation. Note that there is often
a single call to SELDSK to select a disk drive, followed by a number of
read or write operations to the selected disk before selecting another
drive for subsequent operations. Similarly, there may be a single call
to set the DMA address, followed by several calls which read or write
from the selected DMA address before the DMA address is changed. The
track and sector subroutines are always called before the READ or WRITE
operations are performed.
.pp
Note that the READ and WRITE routines should perform several retries
(10 is standard) before reporting the error condition to the BDOS. If
the error condition is returned to the BDOS, it will report the error
to the user. The HOME subroutine may or may not actually perform the
track 00 seek, depending upon your controller characteristics; the
important point is that track 00 has been selected for the next
operation, and is often treated in exactly the same manner as SETTRK
with a parameter of 00.
.pp
.in 0
The exact responsibilities of each entry point subroutine are
given below:
.sp
.sp
.in 16
.ti 4
BOOT The BOOT entry point gets called from the MP/M loader
after it has been loaded by the cold start
loader and is responsible for basic system initialization.
Note that under MP/M a return must be made from BOOT to continue
execution of the MP/M loader.
.sp
.ti 4
WBOOT The WBOOT entry point performs a BDOS system reset,
terminating the calling process.
.sp
.ti 4
CONST Sample the status of the console device specified by
register D
and return 0FFH in register A if a character is ready to read,
or 00H in register A if no console characters are ready.
.sp
.ti 4
CONIN Read the next character from the console device specified
by register D into register A, and set
the parity bit (high order bit) to zero. If no console character is
ready, wait until a character is typed before returning.
.sp
.ti 4
CONOUT Send the character from register C to the console output
device specified by register D. The character is in ASCII, with high
order parity bit set to
zero. You may want to include a delay on a line feed or carriage
return, if your console device requires some time interval at the end
of the line (such as a TI Silent 700 terminal). You can, if you
wish, filter out control characters which cause your console device
to react in a strange way (a control-z causes the Lear Seigler
terminal to clear the screen, for example).
.sp
.ti 4
LIST Send the character from register C to the
listing device. The character is in ASCII with zero parity.
.sp
.ti 4
PUNCH The punch device is not implemented under MP/M. The
transfer vector position is preserved to maintain CP/M compatibility.
Note that MP/M supports up to 16 character I/O devices, any of which
can be a reader/punch.
.sp
.ti 4
READER The reader device is not implemented under MP/M. See the
note above for PUNCH.
.sp
.ti 4
HOME Return the disk head of the currently selected disk
(initially disk A) to the track 00 position. If your controller
allows access to the track 0 flag from the drive, step the head until
the track 0 flag is detected. If your controller does not support
this feature, you can translate the HOME call into a call on SETTRK
with a parameter of 0.
.sp
.ti 4
SELDSK Select the disk drive given by register C for further
operations, where register C contains 0 for drive A, 1 for drive
B, and so-forth up to 15 for drive P (the
standard MP/M distribution version supports four
drives).
On each disk select, SELDSK must return in HL the base address of a
16-byte area, called the Disk Parameter Header, described in
the digital research document titled "CP/M 2.0 Alteration Guide".
For standard floppy disk drives, the
contents of the header and associated tables does not change,
and thus the program segment included in the sample XIOS
performs this operation automatically. If there is an attempt
to select a non-existent drive, SELDSK returns HL=0000H as
an error indicator.
.pp
On entry to SELDSK it is possible to determine whether it
is the first time the specified disk has been selected.
Register E, bit 0 (least significant bit) is a zero if the
drive has not been previously selected. This information
is of interest in systems which read configuration
information from the disk in order to set up a dynamic
disk definition table.
.pp
Although SELDSK must return the header
address on each call, it is
advisable to postpone the actual physical disk select operation until an I/O
function (seek, read or write) is actually performed, since disk
selects often occur without utimately performing any disk I/O, and
many controllers will unload the head of the current disk before
selecting the new drive. This would cause an excessive amount of
noise and disk wear.
.sp
.ti 4
SETTRK Register BC contains the track number for subsequent disk
accesses on the currently selected drive. You can choose to seek the
selected track at this time, or delay the seek until the next read or
write actually occurs. Register BC can take on values in the range
0-76 corresponding to valid track numbers
for standard floppy disk drives, and 0-65535 for non-standard
disk subsystems.
.sp
.ti 4
SETSEC Register BC contains the sector number (1 through 26) for
subsequent disk accesses on the currently selected drive. You can
choose to send this information to the controller at this point, or
instead delay sector selection until a read or write operation occurs.
.sp
.ti 4
SETDMA Register BC contains the DMA (disk memory access) address for
subsequent read or write operations. For example, if B = 00H and C
= 80H when SETDMA is called, then all subsequent read operations read
their data into 80H through 0FFH, and all subsequent write operations
get their data from 80H through 0FFH, until the next call to SETDMA
occurs. The initial DMA address is assumed to be 80H. Note that the
controller need not actually support direct memory access. If, for
example, all data is received and sent through I/O ports, the XIOS
which you construct will use the 128 byte area starting at the
selected DMA address for the memory buffer during the following read
or write operations.
.sp
.ti 4
READ Assuming the drive has been selected, the track has been
set, the sector has been set, and the DMA address has been
specified, the READ subroutine attempts to read one sector based
upon these parameters, and returns the following error codes in
register A:
.sp
.li
0 no errors occurred
1 non-recoverable error condition occurred
.br
Currently, MP/M responds only to a zero or non-zero value as the
return code. That is, if the value in register A is 0 then MP/M
assumes that the disk operation completed properly. If an error
occurs, however, the XIOS should attempt at least 10 retries to see
if the error is recoverable. When an error is reported the BDOS will
print the message "BDOS ERR ON x: BAD SECTOR". The operator then
has the option of typing <cr> to ignore the error, or ctl-C to abort.
.sp
.ti 4
WRITE Write the data from the currently selected DMA address
to the currently selected drive, track, and sector. The data should
be marked as "non deleted data" to maintain compatibility with other
MP/M systems. The error codes given in the READ command are returned
in register A, with error recovery attempts as described above.
.sp
.ti 4
LISTST Return the ready status of the list device.
The value 00 is returned in A if the list device
is not ready to accept a character, and 0FFH if a character
can be sent to the printer. Note that a 00 value always
suffices.
.sp
.ti 4
SECTRAN Performs sector logical to physical sector translation
in order to improve the overall response of MP/M. Standard MP/M
systems are shipped with a "skew factor" of 6, where six physical
sectors are skipped between each logical read operation. This
skew factor allows enough time between sectors for most programs
to load their buffers without missing the next sector. In particular
computer systems which use fast processors, memory, and disk
subsystems, the skew factor may be changed to improve overall
response. Note, however, that you should maintain a single
density IBM compatible version of MP/M for information transfer into and
out of your computer system, using a skew factor of 6.
In general, SECTRAN receives a logical sector number in BC, and
a translate table address in DE. The sector number is used as
an index into the translate table, with the resulting physical
sector number in HL. For standard systems, the tables and
indexing code is provided in the XIOS and need not be changed.
.qi
.br


View File

@@ -0,0 +1,272 @@
.MB +5
.MT -3
.LL 65
.PN 102
.HE MP/M User's Guide
.FT (All Information Herein is Proprietary to Digital Research.)
.sp
.pp
3.3 Extended I/O System Entry Points
.PP
The extended I/O facilities include the hardware environment dependent
code to poll devices, handle interrupts and perform memory
management functions.
.pp
A jump vector containing the extended I/O system entry points
is located immediately following the BIOS jump vector as shown
below:
.li
BIOS+33H JMP SELMEMORY ; SELECT MEMORY
BIOS+36H JMP POLLDEVICE ; POLL DEVICE
BIOS+39H JMP STARTCLOCK ; START CLOCK
BIOS+3CH JMP STOPCLOCK ; STOP CLOCK
BIOS+3FH JMP EXITREGION ; EXIT CRITICAL REGION
BIOS+42H JMP MAXCONSOLE ; MAXIMUM CONSOLE NUMBER
BIOS+45H JMP SYSTEMINIT ; SYSTEM INITIALIZATION
BIOS+48H JMP IDLE ; IDLE PROCEDURE (Optional)
.AD
.pp
Each jump address corresponds to a particular subroutine which performs
the specific function. The exact responsibilities
of each entry point subroutine are given below:
.SP
.in 16
.ti 4
SELMEMORY Each time a process is dispatched to run a call is made to
the XIOS memory protection procedure. If the hardware environment has
memory bank selection/protection it can use the passed
parameter to select/protect
areas of memory. The passed parameter (in registers BC) is a pointer
to a memory descriptor from which the memory base, size,
attributes and bank
of the executing process can be determined.
Thus, all other regions of memory can to be write protected.
.SP
.ti 4
POLLDEVICE In hardware environments where there are no interrupts a
polled environment can be created by coding an XIOS device poll handler.
The device poll handler (POLLDEVICE) is called by the XDOS with the
device to be polled in the C register as a single parameter.
The user written POLLDEVICE procedure can be coded to access the device
polling routines via a table which contains the addresses
of the device polling procedures. An association is made between
a device number to be polled and the polling procedure itself.
The polling procedures must return a value of 0FFH in the accumulator
if the device is ready, or 00H if the device is not ready.
.SP
.ti 4
STARTCLOCK When a process delays for a specified number of ticks of
the system time unit, the start clock procedure is called.
.PP
The purpose of the STARTCLOCK procedure is to eliminate unneccessary
system clock interrupt overhead when there are not any delayed
processes.
.PP
In some hardware environments it is not acutally possible to shut off
the system time unit clock while still maintaining the one second flag
used for the purposes of keeping time of day. In this situation
the STARTCLOCK procedure simply sets a boolean variable to true,
indicating that there is a delayed process. The clock interrupt
handler can then determine if system time unit flag is to be set
by testing the boolean.
.SP
.ti 4
STOPCLOCK When the system delay list is emptied the stop clock
procedure is called.
.PP
The purpose of the STOPCLOCK procedure is to eliminate unneccessary
system clock interrupt overhead when there are no delayed
processes.
.PP
In some hardware environments it is not acutally possible to shut off
the system time unit clock while still maintaining the one second flag
used for the purposes of keeping time of day. (i.e. a single
clock/timer interrupt source is used.) In this situation
the STOPCLOCK procedure simply sets a boolean variable to false,
indicating that there are no delayed processes. The clock interrupt
handler can then determine if the system time unit flag is to be set
by testing the boolean.
.SP
.ti 4
EXITREGION The purpose of the exit region procedure is to test a
preempted flag,
set by the interrupt handler, enabling interrupts if preempted is
false. This procedure allows interrupt service routines to make
MP/M system calls, leaving interrupts disabled until completion of
the interrupt handling.
.SP
.ti 4
MAXCONSOLE The purpose of the maximum console procedure is to enable
the calling
program to determine the number of physical consoles which the BIOS
is capable of supporting. The number of physical consoles is returned
in the A register.
.SP
.ti 4
SYSTEMINIT The purpose of the system initialization procedure is to
perform
required MP/M cold start initialization. Typical initialization
includes setting up interrupt jump vectors, interrupt masks, and
setting up the base page in each bank of a banked memory system.
.pp
The SYSTEMINIT entry point is called prior to any other
XIOS call. The MPMLDR disables interrupts, thus it can be
assumed that interrupts are still disabled upon entry to
SYSTEMINIT. Interrupts are enabled by MP/M immediately
upon return from SYSTEMINIT.
.pp
In systems with bank switched memory it is necessary to
setup the base page (0000H - 00FFH) within each bank of
memory. Both the MPMLDR and MP/M itself assume that the
base bank (bank #0) is switched in when the MPMLDR is
executed. The base bank is properly initialized by MP/M
prior to entering SYSTEMINIT. The information required for
the initialization is provided on entry to SYSTEMINIT in
the following registers:
.li
C = MP/M Debugger restart #
DE = MP/M entry point address for the debugger
Place a jump at the proper debugger
restart location to the address contained
in DE.
HL = BIOS direct jump table address
Place a jump instruction at location
0000H in each banks base page to the
address contained in HL.
.ad
.sp
.ti +4
IDLE The idle entry point is included to permit
optimization of system performance when the user
has an XIOS that is all interrupt driven. If you
have polled devices in your XIOS, the IDLE
procedure may be omitted by placing a NOP
instruction at the BIOS+48H location where there
would otherwise be a jump to an idle procedure.
.pp
The idle entry point is called repeatedly when
MP/M is idling. That is, when there are no other
processes ready to run. In systems that are
entirely interrupt driven the idle procedure
should be as follows:
.li
IDLE:
HLT
RET
.ad
.sp
.in 0
.CE
INTERRPUT SERVICE ROUTINES
.SP
.PP
The MP/M operating system is designed to work with virtually any
interrupt architecture, be it flat or vectored. The function of the
code operating at the interrupt level is to save the
required registers,
determine the cause of the interrupt,
remove the interrupting condition, and to set an appropriate flag.
Operation of the flags are described in section 2.4.
Briefly, flags are used to synchronize asynchronous processes. One
process, such as an interrupt service routine, sets a particular flag
while another process waits for the flag to be set.
.PP
At a logical level above the physical interrupts the flags can be
regarded as providing 256 levels of virtual interrupts
(32 flags are supported under release 1 of MP/M).
Thus, logical interrupt handlers wait
on flags to be set by the physical interrupt handlers.
This mechanism allows a common XDOS to operate on all microcomputers,
regardless of the hardware environment.
.PP
As an example consider a hardware environment with
a flat interrupt structure. That is, a single interrupt level is
provided and devices must be polled to determine the cause of the
interrupt. Once the interrupt cause is determined a specific flag
is set indicating that that particular interrupt has occurred.
.PP
At the conclusion of the interrupt processing a jump should be made
to the MP/M dispatcher. This is done by jumping to the PDISP entry
point. The effect of this jump is to give the processor to the highest
priority ready process, usually the process readied by setting the
flag in the interrupt handler, and then to enable interrupts before
jumping to resume execution of the process.
.PP
The only XDOS or BDOS call which should be made from an
interrupt handler is FUNCTION 133: FLAG SET. Any other
XDOS or BDOS call will result in a dispatch which would
then enable interrupts prior to completing execution of the
interrupt handler.
.pp
It is recommended that interrupts only be used for
operations which are asynchronous, such as console input or
disk operation complete. In general, operations such as
console output should not be interrupt driven. The reason
that interrupts are not desirable for console output is
that the system is afforded some elasticity by performing
polled console outputs while idling, rather than incurring
the dispatch overhead for each character transmitted. This
is particularily true at higher baud rates.
.pp
On systems requiring the Z80 return from interrupt (RETI)
instruction, the jump to PDISP at the end of the interrupt
servicing can be done by placing the address of PDISP on
the stack and then executing an RETI instruction.
.SP 2
.ce
TIME BASE MANAGEMENT
.sp
.PP
The time base management provided by the BIOS performs the operations
of setting the system tick and one second flags. As described
earlier the start and stop clock procedures control
the system tick operation. The one second flag operation is logically
separate from the system tick operation even though it may physically
share the same clock/timer interrupt source.
.PP
The purpose of the system time unit tick procedure is to set flag #1
at system time unit intervals. The system time unit is used
by MP/M to manage the delay list.
.pp
The recommended time unit is 16.67 milliseconds,
corresponding to 60 Hz. When operating with 50 Hz the
recommended time unit is 20 milliseconds.
.pp
The tick frequency is critical in that it determines the
dispatch frequency for compute bound processes. If the
frequency is too high, a significant amount of system
overhead is incurred by excessive dispatches. If the
frequency is too low, compute bound processes will keep the
CPU resource for accordingly longer periods.
.PP
The purpose of the one second flag procedure is to set flag #2
at each second of real time. Flag #2 is used by MP/M to maintain
a time of day clock.
.SP 2
.ce
XIOS EXTERNAL JUMP VECTOR
.sp
.PP
In order for the XIOS to access the BDOS/XDOS a jump vector is
dynamically
built by the MP/M loader and placed directly below the base address
of the XIOS. The jump vector contains two entry points
which provide access to the MP/M dispatcher, XDOS and BDOS.
.PP
The following code illustrates the equates used to access the jump
table:
.LI
BASE EQU 0000H ; BASE OF THE BIOS
PDISP EQU BASE-3 ; MP/M DISPATCHER
XDOS EQU PDISP-3 ; MP/M BDOS/XDOS
...
CALL XDOS ; CALL TO XDOS THRU JUMP VECTOR
.AD
.br


View File

@@ -0,0 +1,410 @@
.MB +5
.MT -3
.LL 65
.PN 107
.HE MP/M User's Guide
.FT (All Information Herein is Proprietary to Digital Research.)
.sp
.pp
3.4 System File Components
.pp
The MP/M system file, 'MPM.SYS' consists of five components: the
system data page, the customized XIOS, the BDOS or ODOS, the XDOS, and the
resident system processes.
MPM.SYS resides in the directory with a user code of 0 and is
usually read only. The MP/M loader reads and relocates the MPM.SYS
file to bring up the MP/M system.
.SP 2
.ce
SYSTEM DATA
.sp
.PP
The system data page contains 256 bytes used by the loader to
dynamically configure the system. The system data page can be
prepared using the GENSYS program or it can be manually prepared
using DDT or SID. The following table describes the byte
assignments:
.LI
Byte Assignment
---- ----------
000-000 Top page of memory
001-001 Number of consoles
002-002 Breakpoint restart number
003-003 Allocate stacks for user system calls, boolean
004-004 Bank switched memory, boolean
005-005 Z80 CPU, boolean
006-006 Banked BDOS file manager, boolean
007-015 Unassigned, reserved
016-047 Initial memory segment table
048-079 Breakpoint vector table, filled in by DDTs
080-111 Stack addresses for user system calls
112-122 Scratch area for memory segments
123-127 Unassigned, reserved
128-143 Submit flags
144-255 Reserved
.AD
.SP 2
.ce
CUSTOMIZED XIOS
.sp
.PP
The customized XIOS is obtained from a file named 'XIOS.SPR'. The
'XIOS.SPR' file is actually a file of type PRL containing the
page relocatable version of the user customized XIOS. A submit
file on the distribution diskette named 'MACSPR.SUB' or 'ASMSPR.SUB' can be used
to generate the user customized XIOS. The following sequence of
commands will produce a 'XIOS.SPR' file given a user 'XIOS.ASM'
file:
.LI
A>SUBMIT MACSPR XIOS
.AD
.sp 2
.ce
BDOS/ODOS
.sp
.pp
The Basic Disk Operating System (BDOS) file named 'BDOS.SPR' is a page
relocatable
file essentially containing the CP/M 2.0 disk file management.
This module handles all the BDOS system calls providing both multiple
console support and disk file management.
.pp
In systems with a banked BDOS, the file named 'ODOS.SPR' is a page
relocatable file containing the resident portion of the banked BDOS.
.SP 2
.ce
XDOS
.sp
.PP
The XDOS file named 'XDOS.SPR' is a page relocatable file
containing the priority driven MP/M nucleus. The nucleus contains
the following code pieces: root module, dispatcher,
queue management, flag management, memory management, terminal
handler, terminal message process, command line interpreter, file
name parser, and time base management.
.SP 2
.ce
RESIDENT SYSTEM PROCESSES
.sp
.PP
Resident system processes are identified by a file type of RSP. The
RSP files distributed with MP/M include: run-time system
status display (MPMSTAT), printer spooler (Spool), abort named
process (ABORT), and a scheduler (SCHED).
.PP
At system generation time the user is prompted to select which RSPs
are to be concatenated to the 'MPM.SYS' file.
.PP
It is possible for the user to prepare custom resident system
processes. The resident system processes must follow these rules:
.PP
* The file itself must be page relocatable. Page relocatable files
can be simply generated using the submit file 'MACSPR.SUB' or 'ASMSPR.SUB'
and then renaming the file to change the type from 'SPR' to 'RSP'.
.PP
* The first two bytes of the resident system process are reserved
for the address of the BDOS/XDOS. Thus a resident system process can
access the BDOS/XDOS by loading the two bytes at relative 0000-0001H
and then performing a PCHL.
.PP
* The process descriptor for the resident system process must begin at
the third byte position. The contents of the process descriptor are
described in section 2.3.
.SP 2
.ce
BNKBDOS
.sp
.PP
In addition to the MPM.SYS file a file named 'BNKBDOS.SPR' is used in
systems with a banked BDOS. It is a page relocatable file containing
the non-resident portion of the banked BDOS.
This file is not used by systems without banked memory.
.bp
.sp
.pp
3.5 System Generation
.pp
MP/M system generation consists of the preparation of a system
data file and the concatenation of both required and optional code
files to produce a file named 'MPM.SYS'. The operation is performed
using a GENSYS program which can be run under either MP/M or
CP/M. The GENSYS automates the system generation process by
prompting the user for optional parameters and then prepares the
'MPM.SYS' file.
.PP
The operation of GENSYS is illustrated with two sample executions
shown below:
.LI
A>GENSYS
MP/M System Generation
======================
Top page of memory = ff
Number of consoles = 2
Breakpoint RST # = 6
Add system call user stacks (Y/N)? y
Z80 CPU (Y/N)? y
Bank switched memory (Y/N)? n
Memory segment bases, (ff terminates list)
: 00
: 50
: a0
: ff
Select Resident System Processes: (Y/N)
ABORT ? n
SPOOL ? n
MPMSTAT ? y
SCHED ? y
.pp
The queries made during the system generation shown above are
described as follows:
.sp
.pp
Top page of memory: Two hex ASCII digits are to be entered giving
the top page of memory. A value of 0 can be entered in which case
the MP/M loader will determine the size of memory at load time
by finding the top page of RAM.
.pp
Number of consoles: Each console specified will require 256
bytes of memory. MP/M release 1 supports up to 16 consoles.
During MP/M initialization an XIOS call is made to obtain the
actual maximum number of physical consoles supported by the
XIOS. This number is used if it is less than the number specified
during the GENSYS.
.pp
Breakpoint RST #: The breakpoint restart number to be used by the
SID and DDT debuggers is specified. Restart 0 is not allowed.
Other restarts required by the XIOS should also not be used.
.pp
Add system call user stacks (Y/N)?: If you desire to
execute CP/M *.COM files then your response should be Y. A 'Y'
response forces a stack switch with each system call from a
user program.
MP/M requires more stack space than CP/M.
.pp
Bank switched memory (Y/N)?: If your system does not have bank switched
memory then you should respond with a 'N'. Otherwise
respond with a 'Y' and additional questions and responses (as shown in
the second example) will be required.
.pp
Memory segment bases: Memory segmentation is defined by the
entries which are made.
Care must be taken in the entry of memory bases as all entries
must be made with successively higher bases.
If your system has ROM at 0000H then the first memory segment
base which you specify should be your first actual RAM location.
Only page relocatable (PRL) programs can be run in systems that
do not have RAM at location 0000H.
.pp
Select Resident System Processes: A directory search is made for
all files of type RSP. Each file found is listed and included in
the generated system file if you respond with a 'Y'.
.sp 2
.pp
The second example illustrates a more complicated GENSYS in which
a system is setup with bank switched memory and a banked BDOS.
This procedure requires an intial GENSYS and MPMLDR execution to
determine the exact size of the operating system, followed by
a second GENSYS.
.li
A>GENSYS
MP/M System Generation
======================
Top page of memory = ff
Number of consoles = 2
Breakpoint RST # = 6
Add system call user stacks (Y/N)? y
Z80 CPU (Y/N) y
Bank switched memory (Y/N)? y
Banked BDOS file manager (Y/N)? y
Enter memory segment table: (ff terminates list)
Base,size,attrib,bank = 0,50,0,0
Base,size,attrib,bank = ff
Select Resident System Processes: (Y/N)
ABORT ? n
SPOOL ? n
MPMSTAT ? n
SCHED ? y
.ad
.pp
The queries made during the system generation shown above
which relate to bank switched memory are described as follows:
.sp
.pp
Bank switched memory: Respond with a 'Y'.
.pp
Bank switched BDOS file manager: Respond with a 'Y' if
a bank switched BDOS is to be used, this will provide an additional
0C00H bytes of common area for large XIOS's and possibly some
RSP's.
The banked BDOS is slower than the non-banked because FCB's must
be copied from the bank of the calling program to common and then
back again each time a BDOS disk function is invoked.
.pp
Memory segment bases: When bank switched memory has been
specified, you are prompted for the base, size, attributes, and
bank for each memory segment.
Extreme care must be taken when making these entries as there is
no error checking done by GENSYS regarding this function. The first
entry made will determine the bank in which the banked BDOS is to
reside. It is further assumed that the bank specified in the first
entry is the bank which is switched in at the time the MPMLDR is
executed.
The attribute byte is normally defined as 00. However, if
you wish to pre-allocate a memory segment a value of FFH
should be specified. The bank byte value is hardware
dependent and is usually the value sent to the bank
switching hardware to select the specified bank.
.sp 3
Then execute the MPMLDR in order to obtain the base address of
the operating system. The base address in this example will be
the address of BNKBDOS.SPR (BC00H).
.li
A>MPMLDR
MP/M Loader
===========
Number of consoles = 2
Breakpoint RST # = 6
Z80 CPU
Banked BDOS file manager
Top of memory = FFFFH
Memory Segment Table:
SYSTEM DAT FF00H 0100H
CONSOLE DAT FD00H 0200H
USERSYS STK FC00H 0100H
XIOS SPR F600H 0600H
BDOS SPR EE00H 0800H
XDOS SPR CF00H 1F00H
Sched RSP CA00H 0500H
BNKBDOS SPR BC00H 0E00H
-------------------------
Memseg Usr 0000H 5000H Bank 00H
.ad
Using the information obtained from the initial GENSYS and MPMLDR
execution the following GENSYS can be executed:
.li
A>GENSYS
MP/M System Generation
======================
Top page of memory = ff
Number of consoles = 2
Breakpoint RST # = 6
Add system call user stacks (Y/N)? y
Z80 CPU (Y/N)? y
Bank switched memory (Y/N)? y
Banked BDOS file manager (Y/N)? y
Enter memory segment table: (ff terminates list)
Base,size,attrib,bank = 0,bc,0,0
Base,size,attrib,bank = 0,c0,0,1
Base,size,attrib,bank = 0,c0,0,2
Base,size,attrib,bank = ff
Select Resident System Processes: (Y/N)
ABORT ? n
SPOOL ? n
MPMSTAT ? n
SCHED ? y
.ad
.bp
.sp
.pp
3.6 MP/M Loader
.pp
The MPMLDR program loads the 'MPM.SYS' file and dynamically relocates
and configures the MP/M operating system. MPMLDR can be run
under CP/M
or loaded from the first two tracks of a disk by the cold start loader.
.PP
The MPMLDR provides a display of the system loading and configuration.
It does not require any operator interaction.
.pp
In the following example
the 'MPM.SYS' file prepared by the first GENSYS example shown in
section 3.5 is loaded:
.LI
A>MPMLDR
MP/M Loader
===========
Number of consoles = 2
Breakpoint RST # = 6
Z80 CPU
Top of memory = FFFFH
Memory Segment Table:
SYSTEM DAT FF00H 0100H
CONSOLE DAT FD00H 0200H
USERSYS STK FC00H 0100H
XIOS SPR F600H 0600H
BDOS SPR E200H 1400H
XDOS SPR C300H 1F00H
MPMSTAT RSP B600H 0D00H
Sched RSP B100H 0500H
-------------------------
Memseg Usr A000H 1100H
Memseg Usr 5000H 5000H
Memseg Usr 0000H 5000H
MP/M
0A>
.ad
.sp 2
.cp 30
In the following example
the 'MPM.SYS' file prepared by the second GENSYS example shown in
section 3.5 is loaded:
.LI
A>MPMLDR
MP/M Loader
===========
Number of consoles = 2
Breakpoint RST # = 6
Z80 CPU
Banked BDOS file manager
Top of memory = FFFFH
Memory Segment Table:
SYSTEM DAT FF00H 0100H
CONSOLE DAT FD00H 0200H
USERSYS STK FC00H 0100H
XIOS SPR F600H 0600H
BDOS SPR EE00H 0800H
XDOS SPR CF00H 1F00H
Sched RSP CA00H 0500H
BNKBDOS SPR BC00H 0E00H
-------------------------
Memseg Usr 0000H C000H Bank 02H
Memseg Usr 0000H C000H Bank 01H
Memseg Usr 0000H BC00H Bank 00H
MP/M
0A>
.br


View File

@@ -0,0 +1,235 @@
.MB +5
.MT -3
.LL 65
.PN 116
.HE MP/M User's Guide
.FT (All Information Herein is Proprietary to Digital Research.)
.sp 2
.ce
APPENDIX A: Flag Assignments
.LI
+----+
| 0 | Reserved
+----+
| 1 | System time unit tick
+----+
| 2 | One second interval
+----+
| 3 | One minute interval
+----+
| 4 | Undefined
| | Undefined
+----+
| 31 | Undefined
+----+
.AD
.bp
.sp 2
.ce
APPENDIX B: Process Priority Assignments
.LI
0 - 31 : Interrupt handlers
32 - 63 : System processes
64 - 197 : Undefined
198 : Teminal message processes
199 : Command line interpreter
200 : Default user priority
201 - 254 : User processes
255 : Idle process
.AD
.bp
.sp 2
.ce
APPENDIX C: BDOS Function Summary
.sp 2
.li
FUNC FUNCTION NAME INPUT PARAMETERS OUTPUT RESULTS
---- --------------------- ---------------- --------------
0 System Reset none none
1 Console Input none A = char
2 Console Output E = char none
3 Raw Console Input none A = char
4 Raw Console Output E = char none
5 List Output E = char none
6 Direct Console I/O see def see def
7 ** Not supported **
8 ** Not supported **
9 Print String DE = .Buffer none
10 Read Console Buffer DE = .Buffer see def
11 Get Console Status none A = 00/01
12 Return Version Number none HL= Version #
13 Reset Disk System none see def
14 Select Disk E = Disk Number see def
15 Open File DE = .FCB A = Dir Code
16 Close File DE = .FCB A = Dir Code
17 Search for First DE = .FCB A = Dir Code
18 Search for Next none A = Dir Code
19 Delete File DE = .FCB A = Dir Code
20 Read Sequential DE = .FCB A = Err Code
21 Write Sequential DE = .FCB A = Err Code
22 Make File DE = .FCB A = Dir Code
23 Rename File DE = .FCB A = Dir Code
24 Return Login Vector none HL= Login Vect*
25 Return Current Disk none A = Cur Disk#
26 Set DMA Address DE = .DMA none
27 Get Addr(Alloc) none HL= .Alloc
28 Write Protect Disk none see def
29 Get R/O Vector none HL= R/O Vect*
30 Set File Attributes DE = .FCB see def
31 Get Addr(disk parms) none HL= .DPB
32 Set/Get User Code see def see def
33 Read Random DE = .FCB A = Err Code
34 Write Random DE = .FCB A = Err Code
35 Compute File Size DE = .FCB r0, r1, r2
36 Set Random Record DE = .FCB r0, r1, r2
37 Reset Drive DE = drive vctr A = Err Code
38 Access Drive DE = drive vctr none
39 Free Drive DE = drive vctr none
40 Write Random zerofill DE = .FCB A = Err Code
.sp 2
* Note that A = L, and B = H upon return
.bp
.sp 2
.ce
APPENDIX D: XDOS Function Summary
.sp 3
.li
FUNC FUNCTION NAME INPUT PARAMETERS OUTPUT RESULTS
---- --------------------- ---------------- --------------
128 Absolute Memory Rqst DE = .MD A = err code
129 Relocatable Mem Rqst DE = .MD A = err code
130 Memory Free DE = .MD none
131 Poll E = Device none
132 Flag Wait E = Flag A = err code
133 Flag Set E = Flag A = err code
134 Make Queue DE = .QCB none
135 Open Queue DE = .UQCB A = err code
136 Delete Queue DE = .QCB A = err code
137 Read Queue DE = .UQCB none
138 Conditional Read Que DE = .UQCB A = err code
139 Write Queue DE = .UQCB none
140 Conditional Write Que DE = .UQCB A = err code
141 Delay DE = #ticks none
142 Dispatch none none
143 Terminate Process E = Term. code none
144 Create Process DE = .PD none
145 Set Priority E = Priority none
146 Attach Console none none
147 Detach Console none none
148 Set Console E = Console none
149 Assign Console DE = .APB A = err code
150 Send CLI Command DE = .CLICMD none
151 Call Resident Sys Pr DE = .CPB HL = result
152 Parse Filename DE = .PFCB see def
153 Get Console Number none A = console #
154 System Data Address none HL = sys data adr
155 Get Date and Time DE = .TOD none
156 Return Proc. Dsc. Adr none HL = proc descr adr
157 Abort Spec. Process DE = .ABTPB A = err code
.ad
.sp
.bp
.sp 2
.ce
APPENDIX E: Memory Segment Base Page Reserved Locations
.sp
.pp
Each memory segment base page, between locations 00H and 0FFH, contains
code and data which are used during MP/M
processing. The code and data areas are given below for reference purposes.
.sp
.in 4
Locations Contents
.br
from to
.in 22
.ti 4
0000H - 0002H Contains a jump instruction to XDOS which terminates
the process. This allows simple process termination by executing a
JMP 0000H.
.sp
.ti 4
0005H - 0007H Contains a jump instruction to the BDOS & XDOS, and serves
two purposes: JMP 0005H provides the primary entry point to the
BDOS & XDOS, and LHLD
0006H brings the address field of the instruction to the HL register
pair. This value is the top of the memory segment in which the
program is executing. Note that the DDT program
will change the address field to reflect the reduced memory size in
debug mode.
.sp
.ti 4
0008H - 003AH (interrupt locations 1 through 7 not used)
However, one restart must be selected for use by the debugger and
specified during system generation.
.sp
.ti 4
003BH - 003FH (not currently used - reserved)
.sp
.ti 4
0040H - 004FH 16 byte area reserved for scratch, but is
not used for any purpose in the distribution version of MP/M
.sp
.ti 4
0050H - 005BH (not currently used - reserved)
.sp
.ti 4
005CH - 007CH default file control block produced for a transient
program by the command line interpreter.
.sp
.ti 4
007DH - 007FH Optional default random record position
.sp
.ti 4
0080H - 00FFH default 128 byte disk buffer (also filled with the
command line when a transient is loaded under the CLI).
.qi
.bp
.sp 2
.ce
Appendix F: Operation of MP/M on the Intel MDS-800
.sp 2
.pp
This section gives operating procedures for using MP/M on the Intel
MDS microcomputer development system. A basic knowledge of the MDS
hardware and software systems is assumed.
.pp
MP/M is initiated in essentially the same manner as Intel's ISIS
operating system. The disk drives labelled 0 through 3 on the MDS,
correspond to MP/M drives A through D, respectively. The MP/M
system diskette is inserted into drive 0, and the BOOT and RESET
switches are depressed in sequence. The interrupt 2 light should go
on at this point. The space bar is then depressed on either console
device, and the light should go out. The BOOT switch is then turned
off, and the MP/M sign-on message should appear at both consoles,
followed by the "0A>" for the CRT or "1A>" for the TTY. The user
can then issue MP/M commands.
.pp
Use of the interrupt switches on the front panel is not recommended.
Effective 'warm-starts' should be initiated at the console by
aborting the running program rather than pushing the INT 0 switch.
Also, depending on the choice of restart for the debugger the INT
switch which will invoke the debugger is not necessarily #7.
.pp
Diskettes should not be removed from the drives until the user verifies
that there are no other users with open files on the disk. This can
be done with the 'DSKRESET' command.
.pp
When performing GENSYS operations on the MDS-800, make certain that
a negative response is always made to the Z80 CPU question. Responding
with a 'Y' will lead to unpredictable results.
.br


View File

@@ -0,0 +1,888 @@
.po 0
.fo - # -
MULTI-PROGRAMMING MONITOR CONTROL PROGRAM - USER'S GUIDE
Corrections and Additions - January, 1980
-------------------------------------------
Page 4, paragraph 4
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Change:<3A>Th<54><68> initia<69><61> use<73><65> cod<6F> i<> on<6F> greate<74><65> tha<68><61> th<74><68> consol<6F> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>number<EFBFBD><EFBFBD> Fo<46> example<6C> consol<6F> #<23> i<> initialize<7A> t<> use<73> #<23> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>an<EFBFBD> th<74> followin<69> promp<6D> i<> displaye<79> o<> consol<6F> #0:
1A>
To: Th<54> initia<69> use<73> cod<6F> i<> equa<75> t<> th<74> consol<6F> number<65><72> Fo<46> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>example<EFBFBD><EFBFBD> consol<6F><6C> #<23><> i<><69> initialize<7A> t<> use<73> #<23><> an<61><6E> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>followin<EFBFBD> promp<6D> i<> displaye<79> o<> consol<6F> #0:
0A>
Note<74><65> Cautio<69><6F> mus<75> b<> use<73> whe<68> operatin<69> unde<64><65> <20><> use<73> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cod<EFBFBD><EFBFBD> o<><6F> <20><> sinc<6E><63> al<61> it<69> file<6C><65> ca<63><61> b<><62> accesse<73><65> whil<69> <20>
<20><><EFBFBD><EFBFBD>operatin<69> unde<64> an<61> othe<68> use<73> code.
I<><49> general<61><6C> use<73><65> cod<6F> <20> shoul<75> b<><62> reserve<76><65> fo<66> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>file<EFBFBD> whic<69> ar<61> accesse<73> b<> al<61> users<72> I<> th<74> even<65> tha<68> <20> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>fil<EFBFBD><EFBFBD> wit<69><74> th<74> sam<61> nam<61> i<> presen<65> unde<64> use<73> cod<6F> <20><> an<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>anothe<EFBFBD><EFBFBD> use<73> code<64><65> th<74> firs<72> fil<69> foun<75> i<> th<74><68> director<6F> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wil<EFBFBD> b<> accessed.
Page 4, paragraph 6
Add: Sinc<6E><63> ther<65><72> ar<61> n<> built-i<> commands<64><73> th<74><68> defaul<75><6C> dis<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>specifie<EFBFBD><EFBFBD> mus<75> contai<61> th<74> desire<72> comman<61> file<6C> (suc<75><63> a<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DIR<EFBFBD><EFBFBD> REN<45><4E> ER<45> etc.)<29> o<> eac<61> comman<61> mus<75> b<> preceede<64> b<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a<EFBFBD> "A:".
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3B>A:DIR
Page 5, paragraph 5
Add: <20> chec<65> consol<6F> statu<74> i<> automaticall<6C> performe<6D> eac<61> tim<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a user program makes a BDOS disk function call.
<EFBFBD>
Page 6, paragraph 2
Add: ctl-Q Obtai<61><69> ownershi<68> o<> th<74> printe<74> mutua<75><61> exclusio<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>message<EFBFBD> Obtainin<69> th<74> printe<74> usin<69> thi<68> comman<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wil<EFBFBD> ensur<75> tha<68> th<74> MP/<2F> spooler<65><72> PIP<49> an<61> othe<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ctl-Р<> o<><6F> ctl-Ѡ command<6E><64> entere<72><65> fro<72><6F><EFBFBD> othe<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>console<EFBFBD><EFBFBD><EFBFBD> wil<69><6C> no<6E><6F> b<><62> allowe<77><65> acces<65><73> t<><74> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>printer<EFBFBD><EFBFBD> Th<54> printe<74> i<> "owned<65> b<> th<74> TMР unti<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>anothe<EFBFBD><EFBFBD> ctl-<2D> o<> ctl-<2D> i<> entered<65><64> releasin<69> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>printer<EFBFBD><EFBFBD> Th<54><68> ctl-<2D> shoul<75> b<> use<73> whe<68> <20> progra<72> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(suc<75> a<> <20> CP/<2F> *.CO<43> file<6C> i<> execute<74> tha<68><61> doe<6F> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>no<EFBFBD><EFBFBD> obtai<61><69> th<74> printe<74> mutua<75> exclusio<69><6F> messag<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>prio<EFBFBD> t<> accessin<69> th<74> printer<65> I<> th<74> lis<69> devic<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><EFBFBD> no<6E><6F> availabl<62><6C> <20> 'Printe<74><65> busy<73><79> messag<61><67> i<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>displaye<EFBFBD> o<> th<74> console.
Page 7, paragraph 6
Change: [the entire DISK RESET description]
To: Th<54><68> DSKRESEԠ (dis<69> reset<65> comman<61> i<> use<73> t<><74> enabl<62><6C> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>operato<EFBFBD> t<> chang<6E> disks<6B><73> I<> n<> paramete<74> i<> entere<72><65> al<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>th<EFBFBD><EFBFBD> drive<76> ar<61> reset<65><74> Specifi<66> drive<76> t<> b<> rese<73> ma<6D> b<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>include<EFBFBD> a<> parameters.
1A>DSKRESET
1A>DSKRESET B:,E:
I<><49> ther<65> ar<61> an<61> ope<70> file<6C> o<> th<74> drive(s<> t<><74> b<><62> reset<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>th<EFBFBD><EFBFBD> dis<69><73> rese<73> i<> denie<69> an<61> th<74> caus<75> o<> th<74> dis<69><73> rese<73> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>failur<EFBFBD> i<> shown:
1A>DSKRESET B:
Disk reset denied, Drive B: Console 0 Program Ed
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Th<EFBFBD> reaso<73> tha<68> dis<69> rese<73> i<> treate<74> s<> carefull<6C> i<><69> tha<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>file<EFBFBD> lef<65> ope<70> (e.g<> i<> th<74> proces<65> o<> bein<69> written<65> wil<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>los<EFBFBD> thei<65> update<74> informatio<69> i<> the<68> ar<61> no<6E> close<73> prio<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> <20> dis<69> reset.
Page 8, paragraph 2
Add: <20><> secon<6F><6E> for<6F><72> o<> th<74> eras<61> comman<61><6E> (ERAQ<41><51> enable<6C><65> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>operato<EFBFBD><EFBFBD> t<><74> selectivel<65><6C> delet<65><74> file<6C><65> tha<68><61> matc蠠 th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>specifie<EFBFBD> filenam<61> reference<63> Fo<46> example:
0A>ERAQ *.LST
<EFBFBD>
<EFBFBD> Page 8, paragraph 3
Add: Th<54><68> TYPŠ comman<61> ha<68> <20> paus<75> mod<6F> whic<69> i<><69> specifie<69><65> b<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>enterin<EFBFBD><EFBFBD> <20><> 'P<> followe<77> b<> tw<74> decima<6D> digit<69><74> afte<74><65> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>filename<EFBFBD> Fo<46> example:
0A>TYPE DUMP.ASM P23
Th<54><68> specifie<69> numbe<62> o<> line<6E> wil<69> b<> displaye<79><65> an<61><6E> the<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TYP<EFBFBD> wil<69> paus<75> unti<74> <20> <cr<63> i<> entered.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Th<EFBFBD><EFBFBD> TYPŠ progra<72> i<> smal<61> an<61> relativel<65> slo<6C> becaus<75><73> i<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>buffer<EFBFBD> onl<6E> on<6F> secto<74> a<> <20> time<6D><65> Th<54> large<67> PI<50> progra<72> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ca<EFBFBD> b<> use<73> fo<66> faste<74> display<61> i<> th<74> followin<69> manner:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0A>PIP CON:=MYFILE.TEX
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Page 8, paragraph 4
Add: Th<54><68> DIҠ comman<61> ca<63> includ<75> file<6C> whic<69> hav<61><76> th<74><68> syste<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>attribut<EFBFBD> set<65><74> Thi<68> i<> don<6F> b<> usin<69> th<74> 'S<> option<6F> Fo<46> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>example:
0A>DIR *.COM S
Page 8, paragraph 5
Add: I<><49> th<74><68> destinatio<69> filenam<61> exist<73> th<74> operato<74> i<><69> give<76> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>th<EFBFBD> optio<69> o<> deletin<69> th<74> curren<65> destinatio<69> fil<69><6C> befor<6F> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>renamin<EFBFBD> th<74> sourc<72> file.
Page 9
Add: PRLCOM
Th<54><68> PRLCO<43> comman<61> accept<70> <20> fil<69> o<> PR<50> typ<79> an<61> produce<63> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fil<69> o<> CO<43> type<70><65> I<> th<74> destinatio<69> CO<43> fil<69> exists<74> <20> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>quer<EFBFBD><EFBFBD> i<> mad<61> t<> determin<69> i<> th<74> fil<69> shoul<75><6C> b<><62> delete<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>befor<EFBFBD> continuing.
0A>prlcom b:program.prl a:program.com
Page 9, paragraph 7
Add: MP/M DDT enhancements are described in Appendix J.
<EFBFBD>
Page 10, paragraph 2
Add: GENHEX
<20>Th<54><68> GENHEؠ comman<61> i<> use<73> t<> produc<75> <20> fil<69> o<> typ<79><70> HE<48> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>fro<EFBFBD><EFBFBD> <20><> fil<69> o<> typ<79> COM<4F><4D> Thi<68> i<> usefu<66> t<> b<><62> abl<62><6C> t<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>generat<EFBFBD><EFBFBD> HE<48> file<6C> fo<66> GENMO<4D> input<75><74> Th<54> GENHEؠ comman<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ha<EFBFBD> tw<74> parameters<72><73> th<74> firs<72> i<> th<74> CO<43> fil<69> nam<61> an<61> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>secon<EFBFBD> i<> th<74> offse<73> fo<66> th<74> HE<48> file<6C> Fo<46> example:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
0A>GENHEX PROG.COM 100
Page 13, paragraph 3
Add: Th<54> non-residen<65> versio<69> o<> th<74> spoole<6C> (SPOOL.PRL<52> differ<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD> it<69> operatio<69> fro<72> th<74> SPOOL.RS<52> a<> follows<77> i<> use<73> al<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD><EFBFBD> th<74> memor<6F> availabl<62> i<> th<74> memor<6F> segmen<65> i<> whic<69><63> i<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><EFBFBD> runnin<69><6E> fo<66><6F> buffe<66><65> space<63><65><EFBFBD> i<><69> display<61><79> <20><> messag<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>indicatin<EFBFBD><EFBFBD> it<69> statu<74> an<61> the<68> detache<68> fro<72> th<74><68> console<6C> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><EFBFBD> ma<6D> b<> aborte<74> fro<72> <20> consol<6F> othe<68> tha<68> th<74><68> initiato<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>onl<EFBFBD> b<> specifyin<69> th<74> consol<6F> numbe<62> o<> th<74> initiato<74> a<> <20> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>paramete<EFBFBD> o<> th<74> STOPSPL<50> command.
3B>STOPSPLR 2
Page 14, paragraph 2
Add: ABORT
Th<54><68> ABORԠ comman<61><6E> allow<6F> th<74> use<73><65> t<><74> abor<6F><72> <20><> runnin<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>program<EFBFBD><EFBFBD> Th<54><68> progra<72><61> t<><74> b<><62> aborte<74> i<><69> entere<72><65> a<><61> <20> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>paramete<EFBFBD> i<> th<74> ABOR<4F> command.
1A>ABORT RDT
<20><> progra<72><61> initiate<74><65> fro<72> anothe<68><65> consol<6F><6C> ma<6D><61> onl<6E><6C> b<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>aborte<EFBFBD> b<> includin<69> th<74> consol<6F> numbe<62> o<> th<74> initiato<74> a<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> paramete<74> o<> th<74> ABOR<4F> command.
3B>ABORT RDT 1
Page 21, paragraph 1
Change: 3 Reader Input
4 Punch Output
To: 3 Raw Unattached Console Input
4 Raw Unattached Console Output
<EFBFBD>
Add: 37 Reset Drive
38 Access Drive
39 Free Drive
40 Write Random with Zero Fill
156 Return Process Descriptor Address
157 Abort Specified Process
Page 23, paragraph 3, following t2' definition
t3' = 1 => file has been updated
Page 27, change FUNCTION 3 to:
***************************************
* *
* FUNCTION 3: RAW CONSOLE INPUT *
* *
***************************************
* Entry Parameters: *
* Register C: 03H *
* *
* Returned Value: *
* Register A: ASCII Character *
***************************************
<EFBFBD><EFBFBD> Th<54><68> RAנ CONSOLŠ INPUԠ functio<69><6F> read<61><64> th<74><68> nex<65><78> consol<6F> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>characte<EFBFBD><EFBFBD> t<><74> Registe<74><65> A<><41> Ther<65><72> i<> n<><6E> testin<69><6E> o<><6F> th<74><68> inpu<70> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>character<EFBFBD><EFBFBD> tha<68><61> is<69><73> th<74><68> syste<74> wil<69> directl<74> pas<61><73> throug<75><67> al<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>character<EFBFBD><EFBFBD><EFBFBD> includin砠 th堠 contro젠 character<65><72><EFBFBD> withou<6F><75><EFBFBD> an<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>interpretation<EFBFBD><EFBFBD> Thi<68><69> functio<69> doe<6F> no<6E> requir<69> tha<68> th<74> consol<6F> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD> attached<65> no<6E> doe<6F> i<> attac<61> th<74> console.
***************************************
* *
* FUNCTION 4: RAW CONSOLE OUTPUT *
* *
***************************************
* Entry Parameters: *
* Register C: 04H *
* Register E: ASCII Character *
* *
<EFBFBD> ***************************************
Th<54><68> RAנ CONSOL<4F> OUTPU<50> functio<69> send<6E> th<74><68> ASCIɠ characte<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>fro<EFBFBD> registe<74> <20> t<> th<74> consol<6F> device<63><65> Ther<65> i<> n<> testin<69> o<> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>outpu<EFBFBD> character<65><72> tha<68> is<69> tab<61> ar<61> no<6E> expande<64> an<61> n<> check<63> ar<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mad<EFBFBD><EFBFBD> fo<66> start/sto<74> scrol<6F> an<61> printe<74> echo<68><6F> Thi<68> functio<69><6F> doe<6F> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>no<EFBFBD><EFBFBD> requir<69> tha<68> th<74> consol<6F> b<> attached<65><64> no<6E> doe<6F> i<> attac<61><63> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>console<EFBFBD><EFBFBD> Thus<75> unsolicite<74> message<67> ma<6D> b<> sen<65> t<> othe<68> console<6C> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD><EFBFBD> simpl<70> changin<69> th<74> consol<6F> byt<79> o<> th<74> proces<65> descripto<74><6F> an<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>the<EFBFBD> usin<69> thi<68> function<6F>
<EFBFBD> Page 28, paragraph 1
Add: Cautio<69><6F> mus<75> b<> observe<76> i<> th<74> us<75> o<> th<74><68> printe<74><65> sinc<6E> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ther<EFBFBD> i<> n<> implici<63> lis<69> devic<69> ownership<69><70> Tha<68> is<69><73> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lis<EFBFBD><EFBFBD> devic<69> i<> no<6E> "opened<65> o<> "closed"<22><> MP/<2F> afford<72><64> <20> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>secondar<EFBFBD><EFBFBD><EFBFBD> explici<63><69><EFBFBD> mean<61><6E> t<><74> resolv<6C><76> printe<74><65><EFBFBD> mutua<75> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>exclusion<EFBFBD> <20> queu<65> name<6D> 'MXList<73> i<> create<74> b<> th<74> syste<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> handl<64> mutua<75> exclusion<6F> T<> properl<72> obtai<61> us<75> o<> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>printe<EFBFBD><EFBFBD> <20> progra<72> shoul<75> ope<70> th<74> 'MXList<73> queu<65> an<61><6E> rea<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>th<EFBFBD> message<67><65> Whe<68> th<74> messag<61> i<> obtaine<6E> th<74> printe<74> ma<6D> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD> used<65><64> Whe<68> printin<69> i<> complete<74> th<74> messag<61> shoul<75><6C> b<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>writte<EFBFBD> bac<61> t<> th<74> 'MXList<73> queue<75><65> Thi<68> techniqu<71> i<> use<73> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD> th<74> MP/<2F> PIP<49> SPOOLer<65> an<61> TM<54> ctl-<2D> operations.
Page 32, add the following to FUNCTION 13 box
* Returned Value: *
* Register A: Return Code *
Page 32, paragraph 2
Change: [entire paragraph]
To: Th<54><68> RESE<53> DIS<49> SYSTE<54> functio<69> i<> qualifie<69> i<><69> MP/M<><4D> I<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ther<EFBFBD><EFBFBD> ar<61><72> an<61> ope<70> file<6C> o<> an<61><6E> drive<76><65> th<74><68> rese<73><65> dis<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>syste<EFBFBD><EFBFBD> i<><69> denie<69><65> an<61><6E> th<74> reaso<73><6F> i<><69> displaye<79><65> o<><6F> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>console.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Th<EFBFBD> returne<6E> valu<6C> indicate<74> whethe<68> o<> no<6E> th<74> rese<73> disk <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wa<EFBFBD><EFBFBD> successful<75><6C> I<> an<61> proces<65> i<> currentl<74> accessin<69><6E> <20> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>drive<EFBFBD> a<> erro<72> cod<6F> o<> 0FF<46> i<> returne<6E> i<> th<74> <20> register<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> retur<75> cod<6F> o<> <20> indicate<74> success.
Page 46, add the following functions:
***************************************
* *
* FUNCTION 37: RESET DRIVE *
* *
***************************************
* Entry Parameters: *
* Register C: 25H *
* Register DE: Drive Vector *
* *
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>* Returned Value: *
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>* Register A: Return Code *
***************************************
Th<54><68> RESEԠ DRIVŠ functio<69><6F> allow<6F><77> resettin<69><6E> o<><6F> specifie<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>drive(s)<29><> Th<54> passe<73> paramete<74> i<> <20> 1<> bi<62> vecto<74> o<> drive<76> t<> b<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>reset<EFBFBD><EFBFBD> th<74><68> leas<61> significan<61> bi<62> i<> driv<69> A:<3A><> I<> ther<65> ar<61><72> an<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ope<EFBFBD> file<6C> o<> <20> specifie<69> drive<76><65> th<74> rese<73> driv<69> i<> denie<69> an<61> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>reaso<EFBFBD> i<> displaye<79> o<> th<74> console.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Th<54><68> returne<6E> valu<6C> indicate<74> whethe<68> o<> no<6E> th<74> rese<73><65> driv<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wa<EFBFBD> successful<75><6C> I<> an<61> proces<65> i<> currentl<74> accessin<69> <20> driv<69><76> t<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD> reset<65><74> a<> erro<72> cod<6F> o<> 0FF<46> i<> returne<6E> i<> th<74> <20> register<65><72> <20> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>return code of 0 indicates success.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
***************************************
* *
* FUNCTION 38: ACCESS DRIVE *
* *
***************************************
* Entry Parameters: *
* Register C: 26H *
* Register DE: Drive Vector *
* *
***************************************
Th<54><68> ACCESӠ DRIV<49> functio<69> allow<6F> settin<69> th<74><68> driv<69><76> acces<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bit(s<><73> i<><69> th<74> callin<69> processe<73> proces<65> descriptor<6F><72> Th<54><68> passe<73> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>paramete<EFBFBD> i<> <20> 1<> bi<62> vecto<74> o<> drive(s<> t<> b<> accessed<65><64> th<74> leas<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>significan<EFBFBD> bi<62> i<> driv<69> A:.
***************************************
* *
* FUNCTION 39: FREE DRIVE *
* *
***************************************
* Entry Parameters: *
* Register C: 27H *
* Register DE: Drive Vector *
* *
***************************************
Th<54><68> FREŠ DRIVŠ functio<69> allow<6F> freein<69><6E> th<74><68> driv<69><76> acces<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bit(s<><73> i<> th<74> callin<69> processe<73> proces<65><73> descriptor<6F><72> Th<54><68> passe<73> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>paramete<EFBFBD><EFBFBD> i<><69> <20> 1<> bi<62> vecto<74> o<> drive(s<> t<> b<> freed<65><64> th<74><68> leas<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>significan<EFBFBD> bi<62> i<> driv<69> A:.
***************************************
* *
* FUNCTION 40: WRITE RANDOM WITH *
* ZERO FILL *
***************************************
* Entry Parameters: *
* Register C: 28H *
* Register DE: FCB Address *
* *
* Returned Value: *
* Register A: Return Code *
***************************************
Th<54><68> WRITŠ RANDO͠ WIT<49> ZER<45> FIL<49> operatio<69><6F> i<><69> simila<6C><61> t<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FUNCTIOΠ 34<33> WRIT<49> RANDO<44> wit<69> th<74> exceptio<69> tha<68> al<61><6C> unallocate<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>block<EFBFBD> ar<61> zer<65> filled.
<EFBFBD> Page 49, add to description of circular queue element BUFFER
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Note<EFBFBD> Mutua<75> exclusio<69> queue<75> requir<69> <20> tw<74> byt<79> buffe<66> fo<66> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>the owner process descriptor address.
Page 51, add to bottom of page
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> QUEUE NAMING CONVENTIONS
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Th<EFBFBD><EFBFBD> followin<69> convention<6F> shoul<75> b<> use<73> i<> th<74> namin<69><6E> o<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>queues<EFBFBD><EFBFBD> Queue<75> whic<69> ar<61> t<> b<> directl<74> writte<74> t<> b<> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Termina젠 Messag<61><67> Proces<65><73> (TMP<4D><50> vi<76><69> th<74><68> Comman<61><6E> Lin<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Interprete<EFBFBD> (CLI<4C> mus<75> hav<61> a<> uppe<70> cas<61> ASCI<43> name<6D> Thu<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>whe<EFBFBD><EFBFBD> a<><61> operato<74><6F> enter<65> th<74> queu<65><75> nam<61><6D> followe<77><65> b<><62> <20> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>comman<EFBFBD><EFBFBD> tai<61> a<> <20> console<6C><65> th<74> comman<61> tai<61> i<> writte<74> t<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>the queue.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><EFBFBD> orde<64><65> t<><74> mak<61> <20> queu<65> inaccessibl<62> b<><62> <20><> use<73><65> a<><61> <20> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>console it must contain at least one lower case character.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mutua<EFBFBD><EFBFBD> exclusio<69><6F> queue<75> shoul<75> b<> name<6D> uppe<70><65> cas<61><73> 'MX<4D> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>followe<EFBFBD><EFBFBD> b<><62> <20> t<> <20> additiona<6E><61> ASCIɠ characters<72><73> Thes<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>queue<EFBFBD><EFBFBD> ar<61> treate<74> speciall<6C> i<> tha<68> the<68> mus<75> hav<61> <20><> tw<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>byt<EFBFBD> buffe<66> i<> whic<69> MP/<2F> place<63> th<74> addres<65> o<> th<74> proces<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>descripto<EFBFBD> ownin<69> th<74> mutua<75> exclusio<69> message.
Page 52
Change: SCRATCH (13) BYTE )
To: DRVACT ADDRESS,
REGISTERS (20) BYTE,
SCRATCH (2) BYTE )
Page 53
Change: DS 13 ; SCRATCH
To: DS 2 ; drives active
DS 20 ; register save area
DS 2 ; scratch
Change: SCRATCH =13 bytes, system scratch bytes
To: DRVACT = 2 bytes, 16 bit vector of drives being
accessed by the process
REGISTERS =20 bytes, 8080 / Z80 register save area
SCRATCH = 2 bytes, system scratch bytes
<EFBFBD><EFBFBD><EFBFBD> Page 53, add to process descriptor element NAME definition
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Th<EFBFBD><EFBFBD> hig<69><67> orde<64><65> bi<62> o<> eac<61> byt<79> o<> th<74> proces<65><73> nam<61><6D> i<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>reserve<EFBFBD> fo<66> us<75> b<> th<74> system<65><6D> Th<54> hig<69> orde<64> bi<62> o<> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>firs<EFBFBD> byt<79> (identifie<69> a<> NAME(0)'<27> "on<6F> indicate<74> tha<68> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>proces<EFBFBD><EFBFBD> i<><69> performin<69> direc<65> consol<6F> BIO<49> call<6C> an<61><6E> tha<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MP/<2F> i<> t<> ignor<6F> al<61> contro<72> characters<72><73> I<> i<> als<6C> use<73> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> suppres<65> th<74> norma<6D> consol<6F> statu<74> chec<65> don<6F> whe<68><65> BDO<44> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dis<EFBFBD> function<6F> ar<61> invoked.
Page 53, add to the bottom of the page
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PROCESS NAMING CONVENTIONS
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Th<EFBFBD><EFBFBD> followin<69> convention<6F> shoul<75> b<> use<73> i<> th<74> namin<69><6E> o<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>processes<EFBFBD><EFBFBD> Processe<73><65> whic<69> wai<61> o<> queue<75> tha<68> ar<61> t<> b<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sen<EFBFBD><EFBFBD> comman<61><6E> tail<69> fro<72> th<74> TMP<4D> ar<61><72> give<76><65> th<74><68> consol<6F> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>resourc<EFBFBD> i<> thei<65> nam<61> matche<68> tha<68> o<> th<74> queu<65> whic<69> the<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>are reading.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Processe<EFBFBD><EFBFBD> whic<69><63> ar<61> t<> b<> protecte<74> fro<72> abortio<69><6F> b<><62> a<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>operato<EFBFBD><EFBFBD> usin<69><6E> th<74> ABOR<4F> comman<61> mus<75> hav<61> a<><61> leas<61><73> on<6F> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>lower case character in the process name.
Page 54, add to bottom of page
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Memory Descriptor Data Structure:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PL/M:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Declare memory$descriptor structure (
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> base byte,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> size byte,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> attributes byte,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> bank byte );
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Assembly Language:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MEMDESCRIPT:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DS 1 ; base
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DS 1 ; size
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DS 1 ; attributes
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DS 1 ; bank
Page 57, add to FUNCTION 134: MAKE QUEUE
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Queue<EFBFBD><EFBFBD> ca<63> onl<6E> b<> create<74> eithe<68> i<> commo<6D> memor<6F><72> o<><6F> b<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>use<EFBFBD><EFBFBD> program<61> i<> non-banke<EFBFBD> systems<6D><73> Th<54> reaso<73> i<><69> tha<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>queue<EFBFBD><EFBFBD> ar<61><72> al<61> maintaine<6E> o<> <20> linke<6B> lis<69> whic<69> mus<75><73> b<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>accessibl<EFBFBD> a<> al<61> times<65><73> I.E.<2E> <20> queu<65> canno<6E> resid<69> i<> <20> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>memor<EFBFBD> segmen<65> whic<69> i<> ban<61> switched<65><64> However<65><72> <20><> queu<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>create<EFBFBD><EFBFBD> i<> commo<6D> memor<6F> ca<63> b<> accesse<73> b<> al<61> syste<74> an<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>use<EFBFBD> programs.
<EFBFBD> Page 62, add to FUNCTION 143: TERMINATE PROCESS
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Entry Parameter, Register D: Conditional memory free
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><EFBFBD> <20> use<73> proces<65> i<> bein<69> terminate<74> an<61> Registe<74> <20> i<><69> <20> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0FFH<EFBFBD><EFBFBD> th<74> memor<6F> segmen<65> i<> no<6E> released<65><64> Thu<68> <20> proces<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>whic<EFBFBD> i<> <20> chil<69> o<> <20> paren<65> proces<65> bot<6F> executin<69> i<><69> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sam<EFBFBD><EFBFBD> memor<6F><72> segmen<65><6E> ca<63> terminat<61><74> withou<6F><75> freein<69><6E> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>memory segment which is also occupied by the parent.
Page 62, add to FUNCTION 144: CREATE PROCESS
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Processe<EFBFBD> ca<63> onl<6E> b<> create<74> eithe<68> i<> commo<6D> memor<6F> o<> b<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>use<EFBFBD><EFBFBD> program<61> i<> non-banke<EFBFBD> systems<6D><73> Th<54> reaso<73> i<><69> tha<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>proces<EFBFBD><EFBFBD> descriptor<6F><72> ar<61> al<61> maintaine<6E><65> o<><6F> linke<6B><65> list<73> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>whic<EFBFBD> mus<75> b<> accessibl<62> a<> al<61> times.
Page 68, add to bottom of page
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>***************************************
* *
* FUNCTION 156: RETURN PROCESS *
* DESCRIPTOR ADDRESS *
***************************************
* Entry Parameters: *
* Register C: 9CH *
* *
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>* Returned Value: *
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>* Register HL: PD Address *
***************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Th<54><68> RETURΠ PROCES<45> DESCRIPTO<54> ADDRES<45> functio<69> obtain<69><6E> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>addres<EFBFBD><EFBFBD> o<> callin<69> processe<73> proces<65><73> descriptor<6F><72> B<><42> definitio<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>this is the head of the ready list.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>***************************************
* *
* FUNCTION 157: ABORT SPECIFIED *
* PROCESS *
***************************************
* Entry Parameters: *
* Register C: 9DH *
* Register DE: APB Address *
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>* Returned Value: *
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>* Register A: Return Code *
***************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Th<54><68> ABORԠ SPECIFIE<49> PROCES<45> functio<69> permit<69> <20><> proces<65><73> t<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>terminat<EFBFBD><EFBFBD> anothe<68> specifie<69> process<73><73> Th<54> passe<73> paramete<74> i<> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>addres<EFBFBD><EFBFBD> o<><6F> a<><61> Abor<6F> Paramete<74> Bloc<6F><63> (APB<EFBFBD><EFBFBD> whic<69><63> contain<69><6E> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>following data structure:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PL/M:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Declare Abort$paramter$block structure (
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pdadr address,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> termination$code address,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> name (8) byte,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> console byte );
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Assembly Language:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> APB:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DS 2 ; process desciptor address
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DS 2 ; termination code
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DS 8 ; process name
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DS 1 ; console used by process
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><EFBFBD> th<74> proces<65> descripto<74> addres<65> i<> know<6F> i<> ca<63> b<> fille<6C> i<> an<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>th<EFBFBD> proces<65> nam<61> an<61> consol<6F> ca<63> b<> omitted<65> Otherwis<69> th<74> proces<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>descripto<EFBFBD><EFBFBD> addres<65> fiel<65> shoul<75> b<> <20> zer<65> an<61> th<74> proces<65> nam<61> an<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>consol<EFBFBD><EFBFBD> mus<75> b<> specified<65><64> I<> eithe<68> cas<61> th<74><68> terminatio<69><6F> cod<6F> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mus<EFBFBD><EFBFBD> b<><62> supplie<69> whic<69> i<> th<74> paramete<74> passe<73> t<><74> FUNCTIOΠ 143<34> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TERMINAT<EFBFBD> PROCESS.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Page 73, add to step (6)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Th<EFBFBD> firs<72> LDRBIO<49> cal<61> mad<61> b<> th<74> MPMLD<4C> i<> SELDSK<53> selec<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>disk<EFBFBD><EFBFBD> I<> ther<65> ar<61> device<63> whic<69> requir<69> initializatio<69> <20> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cal<EFBFBD> t<> th<74> LDRBIO<49> col<6F> star<61> o<> othe<68> initializatio<69> cod<6F> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>should be placed at the beginning of the SELDSK handler.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Note<EFBFBD> Th<54> MPMLD<4C> use<73> 4000<30> - 6FFF<46> a<> <20> buffe<66> are<72><65> whe<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>loading and relocating the MPM.SYS file.
Page 74, add to procedure to prepare an XIOS.SPR file
*** Warning ***
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mak<EFBFBD><EFBFBD> certai<61><69> tha<68> you<6F> XIOS.AS<41> fil<69> contain<69><6E> <20><> define<6E> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>byt<EFBFBD><EFBFBD> o<> zer<65> a<> th<74> end<6E><64> Thi<68> i<> especiall<6C> critica<63><61> i<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>you<EFBFBD> XIOS.AS<41> fil<69> end<6E> wit<69> <20> define<6E> storage<67> Th<54> reaso<73> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>fo<EFBFBD><EFBFBD> thi<68> requiremen<65> i<> tha<68> ther<65> ar<61> n<> HE<48> fil<69> record<72> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>produce<EFBFBD><EFBFBD> fo<66> define<6E> storg<72> (DS<44><53> statements<74><73> Thus<75><73> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>outpu<EFBFBD> HE<48> fil<69> i<> misleadin<69> becaus<75> i<> doe<6F> no<6E><6F> identif<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>th<EFBFBD><EFBFBD> tru<72><75> lent<6E><74> o<><6F> you<6F><75> XIOS<4F><53> Th<54><68> followin<69><6E> exampl<70> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>illustrates a properly terminated XIOS:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> begdat equ $
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dirbuf: ds 128
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> alv0: ds 31
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> csv0: ds 16
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> db 0 ; force out hex record at end
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> end
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Not<EFBFBD><EFBFBD> tha<68><61> thi<68><69> sam<61> techniqu<71> mus<75><73> b<><62> applie<69><65> t<><74> an<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>other PRL or RSP programs that you prepare.
Page 83, add to end of SELDSK paragraph
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><EFBFBD> entr<74> t<> SELDS<44> i<> i<> possibl<62> t<> determin<69> whethe<68><65> i<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><EFBFBD> th<74><68> firs<72> tim<69> th<74> specifie<69> dis<69> ha<68><61> bee<65><65> selected<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Registe<EFBFBD> E<><45> bi<62> <20> (leas<EFBFBD> significan<61> bit<69> i<> <20> zer<65> i<> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>driv<EFBFBD><EFBFBD> ha<68> no<6E> bee<65> previousl<73> selected<65><64> Thi<68> informatio<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD><EFBFBD> o<><6F> interes<65> i<> system<65> whic<69> rea<65><61> dis<69><73> configuratio<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>informatio<EFBFBD><EFBFBD> fro<72><6F> th<74> driv<69> i<> orde<64> t<> se<73> u<><75> <20><> dynami<6D> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>disk definition table.
Page 86, paragraph 3, add to jump vector list
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BIOS+48H JMP IDLE ; IDLE PROCEDURE (optional)
Page 87, paragraph 8, add to SYSTEMINIT
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Th<EFBFBD><EFBFBD> SYSTEMINIԠ entr<74> poin<69> i<> calle<6C> prio<69> t<><74> an<61><6E> othe<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>XIO<EFBFBD> call<6C><6C> Th<54> MPMLD<4C> disable<6C> interrupts<74> thu<68> i<> ca<63> b<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>assume<EFBFBD><EFBFBD> tha<68><61> interrupt<70> ar<61> stil<69> disable<6C> upo<70> entr<74><72> t<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SYSTEMINIT<EFBFBD><EFBFBD> Interrupt<70><74> ar<61> enable<6C> b<><62> MP/͠ immediatel<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>upo<EFBFBD> retur<75> fro<72> SYSTEMINIT.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><EFBFBD> system<65><6D> wit<69> ban<61> switche<68> memor<6F> i<> i<><69> necessar<61><72> t<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>setu<EFBFBD><EFBFBD> th<74><68> bas<61> pag<61> (0000<EFBFBD> - 00FFH<EFBFBD> withi<68> eac<61><63> ban<61><6E> o<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>memory<EFBFBD><EFBFBD> Bot<6F><74> th<74> MPMLD<4C> an<61> MP/<EFBFBD> itsel<65> assum<75> tha<68><61> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bas<EFBFBD><EFBFBD> ban<61><6E> (ban<EFBFBD><EFBFBD> #0<EFBFBD> i<> switche<68> i<> whe<68><65> th<74><68> MPMLDҠ i<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>executed<EFBFBD><EFBFBD> Th<54><68> bas<61> ban<61> i<> properl<72> initialize<7A> b<><62> MP/<EFBFBD> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>prio<EFBFBD> t<> enterin<69> SYSTEMINIT<49> Th<54> informatio<69> require<72> fo<66> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>th<EFBFBD><EFBFBD> initializatio<69> i<> provide<64> o<> entr<74> t<><74> SYSTEMINIԠ i<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>the following registers:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Register C = MP/M Debugger restart #
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DE = MP/M entry point address for the debugger
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Place a jump at the proper debugger
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> restart location to the address contained
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> in DE.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HL = BIOS direct jump table address
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Place a jump instruction at location
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0000H in each banks base page to the
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> address contained in HL.
<EFBFBD> Page 88, add description of IDLE entry point subroutine
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IDLE Th<54><68> idl<64><6C> entr<74><72> poin<69><6E> i<><69> include<64><65> t<><74> permi<6D> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>optimizatio<EFBFBD> o<> syste<74> performanc<6E> whe<68> th<74><68> use<73> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ha<EFBFBD> a<> XIO<49> tha<68> i<> al<61> interrup<75> driven<65> I<> yo<79> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>hav<EFBFBD><EFBFBD> polle<6C><65> device<63><65> i<><69> you<6F><75> XIOS<4F><53> th<74><68> IDL<44> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>procedur堠 ma<6D><61> b<><62> omitte<74><65> b<><62> placin<69><6E> <20><> NO<4E> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>instructio<EFBFBD> a<> th<74> BIOS+48<EFBFBD> locatio<69> wher<65><72> ther<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>woul<EFBFBD> otherwis<69> b<> <20> jum<75> t<> a<> idl<64> procedure.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Th<EFBFBD><EFBFBD> idl<64><6C> entr<74> poin<69> i<> calle<6C> repeatedl<64><6C> whe<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MP/<EFBFBD> i<> idling<6E> Tha<68> is<69> whe<68> ther<65> ar<61> n<> othe<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>processe<EFBFBD><EFBFBD> read<61><64> t<> run<75><6E> I<> system<65><6D> tha<68><61> ar<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>entirel<EFBFBD><EFBFBD> interrup<75><70> drive<76><65> th<74><68> idl<64><6C> procedur<75> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>should be as follows:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IDLE:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HLT
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RET
Page 88, add to INTERRUPT SERVICE ROUTINES section
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Th<EFBFBD><EFBFBD> onl<6E><6C> XDO<44> o<> BDO<44> cal<61> whic<69> shoul<75> b<> mad<61><64> fro<72><6F> a<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>interrup<EFBFBD><EFBFBD> handle<6C><65> i<> FUNCTIO<49> 133<EFBFBD> FLA<4C> SET<45><54> An<41><6E> othe<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>XDOӠ o<><6F> BDO<44> cal<61> wil<69> resul<75> i<> <20> dispatc<74><63> whic<69><63> woul<75> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>the<EFBFBD> enabl<62> interrupt<70> prio<69> t<> completin<69> executio<69> o<> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>interrup<EFBFBD> handler.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><EFBFBD> i<><69> recommende<64><65> tha<68><61> interrupt<70><74> onl<6E><6C> b<><62> use䠠 fo<66> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>operation<EFBFBD> whic<69> ar<61> asynchronous<75> suc<75> a<> consol<6F> inpu<70> o<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dis<EFBFBD><EFBFBD> operatio<69> complete<74><65> I<> general<61><6C> operation<6F> suc<75> a<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>consol<EFBFBD> outpu<70> shoul<75> no<6E> b<> interrup<75> driven<65><6E> Th<54> reaso<73> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tha<EFBFBD><EFBFBD> interrupt<70><74> ar<61> no<6E> desirabl<62> fo<66> consol<6F><6C> outpu<70><75> i<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tha<EFBFBD><EFBFBD> th<74> syste<74> i<> afforde<64> som<6F> elasticit<69> b<><62> performin<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>polle<EFBFBD> consol<6F> output<75> whil<69> idling<6E><67> rathe<68> tha<68> incurrin<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>th<EFBFBD> dispatc<74> overhea<65> fo<66> eac<61> characte<74> transmitted<65> Thi<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>is particularily true at higher baud rates.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><EFBFBD> system<65> requirin<69> th<74> Z8<EFBFBD> retur<75> fro<72> interrup<75><70> (RETI<EFBFBD> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>instruction<EFBFBD><EFBFBD> th<74> jum<75> t<> PDIS<49> a<> th<74> en<65> o<> th<74> interrup<75> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>servicin<EFBFBD><EFBFBD> ca<63><61> b<> don<6F> b<> placin<69> th<74> addres<65> o<> PDISР o<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>th<EFBFBD> stac<61> an<61> the<68> executin<69> a<> RET<45> instruction.
Page 89, paragraph 1
Add:<3A><><EFBFBD><EFBFBD>Th堠 recommende䠠 tim<69><6D> uni<6E><69><EFBFBD> i<><69><EFBFBD> 16.6<EFBFBD><EFBFBD><EFBFBD> milliseconds<64>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>correspondin<EFBFBD><EFBFBD> t<><74> 6<EFBFBD> Hz<48><7A> Whe<68> operatin<69> wit<69> 5<EFBFBD><EFBFBD> H<><48> th<74>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>recommended time unit is 20 milliseconds.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Th<EFBFBD><EFBFBD> tic<69><63> frequenc<6E> i<> critica<63> i<> tha<68> i<> determine<6E><65> th<74>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dispatc<EFBFBD><EFBFBD> frequenc<6E> fo<66> comput<75> boun<75><6E> processes<65><73> I<><49> th<74>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>frequenc<EFBFBD><EFBFBD> i<><69> to<74><6F> high<67><68> <20> significan<61> amoun<75><6E> o<><6F> syste<74>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>overhea<EFBFBD><EFBFBD> i<><69> incurre<72> b<><62> excessiv<69><76> dispatches<65><73> I<><49> th<74> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>frequenc<6E> i<> to<74> low<6F> comput<75> boun<75> processe<73> wil<69> kee<65> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPU resource for accordingly longer periods.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Page 90, make the following table changes
004-004 Bank switched memory flag
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>005-005 Z80 CPU
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>006-006 Banked BDOS file manager
016-047 Initial memory segment table
112-122 Scratch area for memory segments
123-127 Unassigned
144-255 Reserved
Page 92, add the following question(s) during GENSYS
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Z80 CPU (Y/N)?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<EFBFBD> respons<6E> o<> 'Y<> wil<69> caus<75> MP/<EFBFBD> t<> sav<61> th<74> stat<61> o<> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>complementary Z80 registers during dispatches.
Bank switched memory (Y/N)?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-I<EFBFBD><EFBFBD> th<74> abov<6F> respons<6E> i<> 'Y<> the<68> th<74> followin<69><6E> questio<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>is displayed:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Banked BDOS file manager (Y/N)?
Page 93, paragraph 3
Change: I<><49> th<74> syste<74> ha<68> ban<61> switche<68> memor<6F> <20> comm<6D> an<61> <20><> ban<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>numbe<EFBFBD> shoul<75> follo<6C> th<74> bas<61> specification.
To: I<> th<74> syste<74> ha<68> ban<61> switche<68> memory<72><79> respon<6F> wit<69> <20> 'Y<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><EFBFBD> th<74><68> GENSY<53> questio<69> an<61> yo<79> wil<69> b<> prompte<74><65> fo<66><6F> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>base<EFBFBD> size<7A> attributes<65> an<61> ban<61> o<> eac<61> memor<6F> segment.
Page 93, paragraph 4
Change: : 00,0
: 00,1
: 00,2
: ff
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>To: Base,size,attribs,bank = 00,C0,00,0
Base,size,attribs,bank = 00,C0,00,1
Base,size,attribs,bank = 00,C0,00,2
Base,size,attribs,bank = ff
<EFBFBD> Add: Th<54> attribut<75> byt<79> i<> normall<6C> define<6E> a<> 00<EFBFBD><EFBFBD> However<65> i<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>yo<EFBFBD><EFBFBD> wis<69><73> t<> pre-allocat<EFBFBD> <20> memor<6F> segmen<65> <20> valu<6C> o<><6F> FF<46> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>shoul<EFBFBD><EFBFBD> b<><62> specified<65><64> Th<54> ban<61> byt<79><74> valu<6C><75> i<><69> hardwar<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dependen<EFBFBD><EFBFBD> an<61><6E> i<><69> usuall<6C><6C> th<74> valu<6C><75> sen<65><6E> t<><74> th<74><68> ban<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>switchin<EFBFBD> hardwar<61> t<> selec<65> th<74> specifie<69> bank.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD> <20> banke<6B> BDO<44> fil<69> manage<67> ha<68> bee<65> requested<65> th<74> firs<72> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>memor<EFBFBD> segmen<65> specifie<69> shoul<75> b<> fo<66> ban<61> #0<EFBFBD><EFBFBD> Tha<68> wil<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD> th<74> ban<61> i<> whic<69> th<74> BNKBDO<44> wil<69> reside.
Page 97
Change: 3 Reader Input
4 Punch Output
7 Get I/O Byte
8 Set I/O Byte
To: 3 Raw Unattached Console Input
4 Raw Unattached Console Output
7 *** Not Supported ***
8 *** Not Supported ***
Page 99
Change: CP/M
To: MP/M
Change: 0000H - 0002H Contain<69><6E> <20><> jum<75> instructio<69> t<><74> th<74><68> war<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>star<EFBFBD> entr<74> poin<69> a<> locatio<69> 4A03H+b<EFBFBD> Thi<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>allow<EFBFBD><EFBFBD> <20><> simpl<70> programme<6D><65> restar<61><72> (JM<EFBFBD> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>000H<EFBFBD><EFBFBD> o<><6F> manua<75> restar<61><72> fro<72><6F> th<74><68> fron<6F> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>panel.
To: 0000H - 0002H Contain<69><6E> <20> jum<75> instructio<69> t<> XDOӠ whic<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>terminate<EFBFBD> th<74> process<73> Thi<68> allow<6F> simpl<70> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>proces<EFBFBD><EFBFBD> terminatio<69><6F> b<><62> executin<69><6E> <20><> JM<4A> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0000H.
Page 107
Change: ds 1 ; memseg
To: db 0ffh ; memseg, identifies an RSP
Change: ds 2 ; scratch
To: ds 2 ; drives active
ds 20 ; registers save area
ds 2 ; scratch
.pa
<EFBFBD> APPENDIX J: MP/M DDT Enhancements
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Th<54><68> followin<69> command<6E> hav<61> bee<65> adde<64> t<> th<74> MP/͠ debugge<67> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><EFBFBD> provid<69><64> <20><> functio<69><6F> simila<6C> t<> CP/M'<27><> SAVŠ comman<61><6E> an<61><6E> t<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>simplify the task of patching and debugging PRL programs.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W: WRITE DISK
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Th<54><68> purpos<6F><73> o<><6F> th<74> WRIT<49> DIS<49> comman<61> i<><69> t<><74> provid<69><64> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>capabilit<EFBFBD> t<> writ<69> <20> patche<68> progra<72> t<> disk<73><6B> <20> singl<67> paramete<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>immediatel<EFBFBD><EFBFBD> follow<6F><77> th<74> 'W<> whic<69> i<> th<74> numbe<62> o<><6F> sector<6F><72> (12<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bytes/sector<EFBFBD><EFBFBD> t<> b<> written<65><6E> Thi<68> paramete<74> i<> entere<72> i<><69> hexa-
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>decimal.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>V: VALUE
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Th<54> purpos<6F> o<> th<74> VALU<4C> comman<61> i<> t<> facilitat<61> use o<> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WRIT<EFBFBD> DIS<49> comman<61> b<> computin<69> th<74> paramete<74> t<> follo<6C> th<74> 'W'<27> <20> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>singl<EFBFBD><EFBFBD> paramete<74><65> immediatel<65><6C> follow<6F> th<74> 'V<> whic<69> i<><69> th<74><68> NEX<45> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>location following the last byte to be written to disk.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Normall<6C> <20> use<73> woul<75> rea<65> i<> <20> file<6C> edi<64> it<69> an<61> the<68> writ<69> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i<EFBFBD> bac<61> t<> disk<73> Th<54> rea<65> comman<61> produce<63> <20> valu<6C> fo<66> NEXT<58> Thi<68> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>valu<EFBFBD><EFBFBD> ca<63> b<> entere<72> a<> <20> paramete<74> followin<69> th<74> 'V<> comman<61><6E> an<61>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>th<EFBFBD> numbe<62> o<> sector<6F> t<> b<> writte<74> ou<6F> usin<69> th<74> 'W<> comman<61><6E> wil<69>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>be computed and displayed.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N: NORMALIZE
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Th<54><68> purpos<6F><73> o<> th<74> NORMALIZ<49> comman<61> i<> t<> relocat<61> <20><> pag<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>relocatabl<EFBFBD><EFBFBD> fil<69> whic<69> ha<68> bee<65> rea<65> int<6E> memor<6F> b<> th<74><68> debugger<65> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>T<EFBFBD><EFBFBD> debu<62><75> <20><> PR̠ progra<72> th<74> us<75>r woul<75> rea<65> i<> i<><69> wit<69><74> th<74><68>'R' <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>comman<EFBFBD><EFBFBD> an<61><6E> the<68> us<75> th<74> 'N<> comman<61> t<> relocat<61> i<><69> withi<68><69> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>memor<EFBFBD> segmen<65> th<74> debugge<67> i<> executing.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B: BITMAP BIT SET/RESET
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Th<54> purpos<6F> o<> th<74> BITMA<4D> BI<42> SET/RESE<EFBFBD> comman<61> i<> t<><74> enabl<62> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>th<EFBFBD> use<73> t<> updat<61> th<74> bitma<6D> o<> <20> pag<61> relocatabl<62> file<6C><65> T<> edi<64> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PR̠ fil<69> th<74> use<73> woul<75> rea<65> th<74> fil<69> in<69><6E> mak<61> change<67> t<><74> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>code<EFBFBD><EFBFBD> an<61><6E> the<68> determin<69> th<74> byte<74> whic<69> neede<64> relocatio<69><6F> (E.G<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>th<EFBFBD><EFBFBD> hig<69><67> orde<64><65> addres<65> byte<74> o<><6F> jum<75><6D> instructions)<EFBFBD><EFBFBD> Th<54><68> 'B<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>comman<EFBFBD><EFBFBD> woul<75> the<68> b<> use<73> t<> updat<61> th<74> bi<62> map<61><70> Ther<65> ar<61><72> tw<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>parameter<EFBFBD> specified<65> th<74> addres<65> t<> b<> modifie<69> (0100<EFBFBD> i<> th<74> bas<61> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD> th<74> progra<72> segment)<EFBFBD><EFBFBD> followe<77> b<> <20> zer<65> o<> <20> one<6E><65> <20> valu<6C> o<> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>one specifies bit setting.
.pa
<EFBFBD> APPENDIX K: Page Relocatable (PRL) File Specification
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Pag<61><67> relocatabl<62><6C> file<6C><65> ar<61><72> store<72><65> o<><6F> diskett<74><74> i<><69> th<74> <20>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>following format:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Address: Contents:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>------- --------
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0001-0002H Program size
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0004-0005H Minimum buffer requirements (additional memory)

View File

@@ -0,0 +1,12 @@
.PO 3
.MB +5
.MT -3
.LL 65
.PN 122
.HE MP/M User's Guide
.sp 2
.ce
APPENDIX G: Sample Page Relocatable Program
.sp 2
.li


View File

@@ -0,0 +1,12 @@
.PO 3
.MB +5
.MT -3
.LL 65
.PN 127
.HE MP/M User's Guide
.sp 2
.ce
APPENDIX H: Sample Resident System Process
.sp 2
.li


View File

@@ -0,0 +1,203 @@
.MB +5
.MT -3
.LL 65
.PN 150
.HE MP/M User's Guide
.FT(All Information Herein is Proprietary to Digital Research.)
.CE 2
INDEX
_____
.NA
.li
Abort (^c), 5
ABORT, 5, 16
Abort Specified Process, 80
Absolute Memory Request, 62
ABTPB, Abort Parameter Block, 80
Access Drive, 51
APB, Assign Parameter Block, 74
ASM, Assembler, 10
Assign Console, 74
ATTACH, 5
Attach Console, 72
Bank Switched Memory, 102, 112
BDOS, 29-52, 108, 118
BIOS, 96-101
BNKBDOS, 19, 109
Boot, 97
Call Resident System Procedure, 76
Calling Conventions, 21
Circular Queue, 54
CLI, Command Line Interpreter, 20
CLICMD, CLI Command Parameter, 75
Close File, 38
Conditional Read Queue, 68
Conditional Write Queue, 69
Conin, 98
Conout, 98
CONSOLE, 8
Console I/O Direct, 32
Console Input, 29, 30
Console Number, 78
Console Output, 30, 31
Console Status, 35
CONSOLE.DAT, 19
Const, 98
Control Characters, 6
CPB, Call Parameter Block, 76
Create Process, 71
Date and Time, 15
DDT, Dynamic Debugging Tool, 12, 148
Delay, 70
Delete File, 40
Delete Queue, 67
Detach (^d), 5
Detach Console, 73
DIR, File Directory, 10
Direct Console I/O, 32
Diskette Organization, 94
Dispatch, 70
DMA Address, 43
DSKRESET, 8
DUMP, 11, 122
ERA, ERAQ, Erase File(s), 9
Exitregion, 103
FCB, File Control Block, 25, 26
File Attributes, 45
File Structure, 24
Flag Assignments, 116
Flag Wait, 65
Flag Set, 65
Free Drive, 52
GENHEX, 11
GENMOD, 11
GENSYS, 110
Get Console Number, 78
Get Date and Time, 79
Home, 98
Idle, 104
Interrupt Service Routines, 105
LDRBIOS, 86
Line editing, 6
Linked Queue, 55
List, 98
List Output, 31
Listst, 100
LOAD, 11
Login Vector, 42
Make File, 41
Make Queue, 66
Maxconsole, 103
Memory Allocation, 15
MD, Memory Descriptor, 62
Memory Free, 64
Memory Segment Base Page, 120
Memory Structure, 18
MPMLDR, 86, 114
MPMSTAT, 13
ODOS, 108
Open File, 37
Open Queue, 67
Page Relocatable Programs, PRL, 81, 149
Parse Filename, 77
PFCB, Parse Filename Control Block, 77
PIP, Peripheral Interchange Program, 10
Poll, 64
Polldevice, 102
Print String, 33
PD, Process Descriptor, 59
Process Desciptor Address, 79
Process Naming Conventions, 61
Process Priority, 72, 117
PRLCOM, 11
QCB, Queue Control Block, 54-57
Queue, 53
Queue Naming, 58
Raw Console Input, 30
Raw Console Output, 31
RDT, Relocatable DDT, 12
Read, 100
Read Console Buffer, 34
Read File Random, 47
Read File Sequential, 40
Read Queue, 68
Read/Only Vector, 45
Relocatable Memory Request, 63
REN, Rename File, 10, 42
Reset Disk System, 8, 36
Reset Drive, 51
Resident System Procedure, 76, 83
Return Process Descriptor Address, 79
RSP, Resident System Process, 19, 83, 108
SCHED, Scheduler, 16
Search for First, Next, 38, 39
Sectran, 101
Selmemory, 102
Send CLI Command, 75
Seldsk, 99
Select Disk, 36
Set Console, 73
Set DMA Address, 43
Set Priority, 72
Set Random Record, 50
Setdma, 100
Setsec, 99
Settrk, 99
SPOOLer, 15
Startclock, 102
STAT, Status, 11
Stopclock, 103
STOPSPLR, 15
SUBMIT, 10
System Data, 107
System Data Address, 78
System File Components, 107
System Generation, 110
System Reset, 29
SYSTEM.DAT, 19
Systeminit, 103
Text Editing, ED, 10
Terminate Process, 71
Tick, 106
Time, 15
Time Base Management, 106
TOD, Date and Time, 15, 79
TPA, 20
TYPE, 9
UQCB, User Queue Control Block, 57
USER, get/set user code, 8, 46
User Queue Control Block, 57
USERSYS.STK, 19
Version Number, 35
Wboot, 98
Write, 100
Write File Random, 48, 52
Write File Sequential, 41
Write Protect Disk, 44
Write Queue, 69
XDOS, 19, 108, 119
XIOS, 19, 87
XIOS External Jump Vector, 106
.br


View File

@@ -0,0 +1,12 @@
.PO 3
.MB +5
.MT -3
.LL 65
.PN 131
.HE MP/M User's Guide
.sp 2
.ce
APPENDIX I: Sample XIOS
.sp 2
.li


View File

@@ -0,0 +1,87 @@
.MB +5
.MT -3
.LL 65
.PN 148
.HE MP/M User's Guide
.FT (All Information Herein is Proprietary to Digital Research.)
.sp
.ce
APPENDIX J: MP/M DDT Enhancements
.pp
The following commands have been added to the MP/M debugger
to provide a function similar to CP/M's SAVE command and to
simplify the task of patching and debugging PRL programs.
.sp 2
W: WRITE DISK
.pp
The purpose of the WRITE DISK command is to provide the
capability to write a patched program to disk. A single parameter
immediately follows the 'W' which is the number of sectors (128
bytes/sector) to be written. This parameter is entered in hexadecimal.
.sp 2
V: VALUE
.pp
The purpose of the VALUE command is to facilitate use of the
WRITE DISK command by computing the parameter to follow the 'W'. A
single parameter immediately follows the 'V' which is the NEXT
location following the last byte to be written to disk.
.pp
Normally a user would read in a file, edit it, and then write
it back to disk. The read command produces a value for NEXT. This
value can be entered as a parameter following the 'V' command and
the number of sectors to be written out using the 'W' command will
be computed and displayed.
.sp 2
N: NORMALIZE
.pp
The purpose of the NORMALIZE command is to relocate a page
relocatable file which has been read into memory by the debugger.
To debug a PRL program the user would read it in with the 'R'
command and then use the 'N' command to relocate it within the
memory segment the debugger is executing.
.sp 2
B: BITMAP BIT SET/RESET
.pp
The purpose of the BITMAP BIT SET/RESET command is to enable
the user to update the bitmap of a page relocatable file. To edit
a PRL file the user would read the file in, make changes to the
code, and then determine the bytes which needed relocation (E.G.
the high order address bytes of jump instructions). The 'B'
command would then be used to update the bit map. There are two
parameters specified, the address to be modified (0100H is the base
of the program segment), followed by a zero or a one. A value of
one specifies bit setting.
.AD
.bp
.sp 2
.ce
APPENDIX K: Page Relocatable (PRL) File Specification
.sp
.pp
Page relocatable files are stored on diskette in the
following format:
.li
Address: Contents:
------- --------
0001-0002H Program size
0004-0005H Minimum buffer requirements (additional memory)
0006-00FFH Currently unused, reserved for future allocation
0100H + Program size = Start of bit map
.ad
.pp
The bit map is a string of bits identifying which bytes are
to be relocated. There is one bit map byte per 8 bytes of program.
The most significant bit (7) of the first byte of the bit map
indicates whether or not the first byte of the program is to be
relocated. A bit which is on indicates that relocation is
required. The next bit, bit(6), of the first byte of the bit map
corresponds to the second byte of the program.
.br


View File

@@ -0,0 +1,49 @@
MP/M 1.0 *** Patch *** 10/17/79
Page Zero Initialization with Bank Switched Memory
__________________________________________________
The following patch is required only if you have written
an XIOS which supports bank switched memory. The nature of
the problem is that the jump instruction at location 0000,
at your interrupt entry points, and at the selected debugger
breakpoint restart location must be initialized in each of
your memory banks.
The patch is performed in the SYSINIT procedure of your
XIOS as follows:
o Determine the BDOS base address by running GENSYS and
then the MPMLDR. The MPMLDR will display the memory map
showing the BDOS base address.
o Once the BDOS base address has been determined, place the
following instructions into your SYSINIT procedure:
SYSINIT:
...
...
; Loop through all banks
LOOP:
; Switch in the next bank
MVI A,0C3H
STA 0000H
LXI H,BDOS+0091H
SHLD 0001H
STA BRKPTRST*8
LXI H,BDOS+0101H
SHLD BRKPTRST*8+1
; Store appropriate jumps to your XIOS
; for the interrupt entry points
...
JMP LOOP
o Note that this patch requires that you leave the BDOS
at the established base.


View File

@@ -0,0 +1,43 @@
.mt 0
.mb 0
.op
January, 1980
Dear MP/M 1.0 user:
Thi<EFBFBD> shipmen<65> include<64> th<74> MP/<2F> 1.<2E> release<73> The secon<6F> releas<61> <20>
o<EFBFBD><EFBFBD> MP/<2F> ha<68> bee<65> issue<75> a<> n<> charg<72> t<> al<61> registere<72> owner<65> o<> <20>
MP/<2F> 1.<2E> an<61> i<> <20> diskett<74> leve<76> releas<61>.
W<EFBFBD> hav<61> appreciate<74> you<6F> support<72><74> criticism<73> an<61> suggestion<6F> fo<66> <20>
MP/M and believe that this is reflected in the MP/M 1.1 release.
Th<EFBFBD><EFBFBD> mos<6F><73> significan<61> bug<75> correcte<74> i<> thi<68><69> releas<61><73> ar<61><72> wit<69> <20>
regar䠠 t<><74> syste<74><65> initializatio<69><6F> an<61><6E> th<74><68> Z8<5A><38> complementar<61> <20>
registe<EFBFBD><EFBFBD> set<65><74> Th<54><68> enclose<73> MP/<2F> User'<27> Guid<69> correction<6F><6E> an<61> <20>
additions identify the impact of these changes on your XIOS.
Ne<EFBFBD><EFBFBD> addition<6F><6E> i<> thi<68> releas<61> includ<75> a<> optiona<6E><61> banke<6B><65> BDO<44> <20>
dis<EFBFBD><EFBFBD> fil<69><6C> managemen<65><6E> modul<75> whic<69> ca<63> b<> use<73> t<><74> fre<72><65> u<><75> a<> <20>
additiona<EFBFBD> 3<> byte<74> o<> commo<6D> are<72> memor<6F> requiremen<65> i<><69> system<65> <20>
wit<EFBFBD><EFBFBD> banke<6B><65> memory<72><79> PR̠ version<6F> o<> th<74><68> SPOOLe<4C><65> hav<61><76> bee<65> <20>
include<EFBFBD><EFBFBD> a<> wel<65> a<> th<74> additio<69> o<> <20> proces<65> abor<6F> PR<50> an<61><6E> RS<52> <20>
program<EFBFBD><EFBFBD> Anothe<68><65> sampl<70><6C> XIOӠ sourc<72> fil<69> i<><69> provide<64><65> whic<69> <20>
illustrate<EFBFBD><EFBFBD> interrup<75> drive<76> I/<2F> an<61> us<75> o<> XDOӠ t<><74> facilitat<61> <20>
buffered console input.
Th<EFBFBD><EFBFBD> secon<6F><6E> printin<69> o<> th<74> MP/<2F> User'<27> Guid<69><64> incorporate<74><65> th<74> <20>
enclose<EFBFBD> manua<75> correction<6F> an<61> additions.
Digital Research
Technical Support Staff
Enclosures: MP/M User's Guide - Corrections and Additions
MP/M 1.1 single density diskette