home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
turbodsg
/
emul.doc
< prev
next >
Wrap
Text File
|
1994-07-13
|
7KB
|
166 lines
EMUL.DOC as of 12/07/85 version 2.20
This is version 2.20 of EMUL.CMD, an 8080 emulator for use with the NEC
uPD70116 and uPD70108 series CPUs (also known as the V30 and V20,
respectively).
NOTE: UPDATE INFO APPENDED TO END OF FILE
This copyrighted program has been released to the Public Domain
for NONCOMMERCIAL uses only. Users wishing to use this utility
for ANY purpose other than personal use must first obtain written
authorization. Commercial distribution of this utility is
strictly forbidden without authorization and a $20.00 royalty fee
per distributed copy.
The above does not apply to distribution via "SIG-M library"!
The author assumes no liability of any kind for damages arising
from the use or inability to use this utility.
Background:
The NEC V20 and V30 are direct hardware replacements for Intel's 8088
and 8086 CPU chips, respectively, and in most cases just drop in and
make life SLIGHTLY faster. The speed improvement is in many cases nothing
to lose sleep about, certainly not worth the twenty bucks you'll have to
shell out for the chip! I have run a series of "average" programs and
found that they USUALLY run about 5% faster. A popular Public Domain
CPU speed test for MSDOS clocked the V30 at 7.85MHz and the 8086 at 7.95!!!!
There are 3 reasons, however, why you might want to spend the twenty anyway.
First, the little critters are 80186/80188 instruction compatible. This means
you can do your PUSHAs and POPAs and your string out a'la Z80's OTIR. Note
that the V-series, unlike the 80186, does not mask the shift/rotate count,
so there is no easy way of telling the chip is not an 8086/88...
Second, NEC crammed a number of unique instructions into the chip, giving
you basically the same type bit handling like the Z80, as well as BCD
shift/rotate. Here a note to BCD: the manual does not explain, but fact is
that a BCD shift/rotate wipes out the high nybble of AL. As if that mattered,
anyway...
Third, and now we're at the bottom of all THIS, NEC has added a mode bit
which, when reset, makes that chip think it's an 8080 with 4 afterburners.
You'll see shortly why afterburners.
Foreground:
Picture yourself sitting in front of some CP/M-86 or 16 bit TurboDOS machine
wanting, like I have for YEARS now, to be able to run you favorite text
editor which is unavailable outside the CP/M-80 world. Frustrating that
you have to put up with old WordPlanet or somesuch, where you could, for
example run MINCE (the king of editors, yea!!!) if you only had something to
run it on!!!!
Now, in the TurboDOS world there is a neat Z80 simulator called TZ80 which
runs nearly every program that would ordinarily run under 8 bit TurboDOS.
Unfortunately, it is a SIMULATOR, and instructions have to be decoded one
at a time and executed. It is SLLLLLLLLLOOOOOOOOOOOOOW. Also, aside from
some inferior Public Domain "emulators", there is no such beast available
for CP/M-86 that runs reliably.
Enter EMUL.CMD.
EMUL is a true emulator which only works with NEC's V20 and V30 CPUs and
EXECUTES 8080 instructions. It allows you to run just about ANY CP/M-80
program with the following exceptions:
1. The CP/M-80 program MUST be 8080-only (no Z80 code) or the HCF (halt
and catch fire) instruction will obliterate every byte of RAM!
2. You must be running a NEC CPU, either V20 (uPD70108) or V30 (uPD70116);
EMUL tries to do some checking but may not be able to tell in all cases!
3. Your 8080 program must not attempt any BIOS calls other than for
console I/O. All other calls are IGNORED.
EMUL has been tested with the following software:
MBASIC 5.21
MINCE 2.6
WordStar 3.3
SID 3.0
M80
LINK-80
BDS C 1.50A
Internals:
To TurboDOS programmers, the source code may be readable. Those used to
ASM-86 or RASM may find it a bit weird. Sorry, that's what I use around
here. The only real confusion will arise in the fact that in EMUL ver
2, the 8080 environment is compacted so as not to take up 64k of mostly
empty space. Since the environment is ORGed in the data segment and the
8086 data segment includes base page. Therefore, all offsets used in
the 8080 environment must not only be adjusted for theit actual running
location, but also for their relative location at load time. This is
why you see equates like "BDOS-0X100", or in the base page setup code,
"DFCB1-0X100" is used. End effect is, that EMUL works. The programs
hardest to please in regard to base page setup were M80 and MBASIC, and
they both work flawlessly now.
The afterburner:
I wrote a timing proram with the following core:
MVI E,50
LXI B,0
LOOP: XTHL
XTHL
DCX B
MOV A,B
ORA C
JNZ LOOP
DCR E
JNZ LOOP
The program, running on a 6MHz Z80 under TurboDOS 1.41 executed
in 35.84 seconds, including time to access the clock.
The same program running on an 8MHz V30 under EMUL executed
in 24.88 seconds, making execution speed equivalent to an 8.64MHz Z80!
I have also run the following speed tests under the following conditions:
Z80 TurboDOS, 6MHz CPU, 800k RAM disk on 16 bit slave
8086 TurboDOS, 8MHz V30, 800k RAM disk on slave
Times: Z80 V30/EMUL
WordStar: ^Q^C on 180k file: 0:59 0:17
WordStar: ^F last line: 1:05 0:21
M80 assemble 64k source: 1:36 0:59
Compile+link RBBS4 (BDS C): 2:59 1:58
Ever seen ANY 8080 THAT FAST????!!!!!?????
have fun 8080ing!!!!!!!!
-------------------------- UPDATE INFORMATION ---------------------------
VERSION 2.10 11/25/85
CP/M-86 returns a version number which may be objectionable to some
programs. Therefore, the equate "CPMVER" in the source file has been
added, which should be customized for your system if you do not have
CP/M-86. It is currently set to return a CP/M version of 2.2, which
should work in most cases. If you run this under either MP/M-86 or
TurboDOS, you may want to set it to return 3.0 and/or MP/M.
To do this, load EMUL.CMD into a debugger (in edit mode, not trace)
and change the word at DS:6AF from 22 00 to 30 01. The low byte is
the version number and the high byte is the MP/M flag (0 or 1).
NOTE that EMUL simply routes ALL other function requests through to
the host operating system, so no further changes are required to run
programs that do MP/M record locking.
TurboDOS users should always set the CP/M version to 30 01 and add
MPMSUP to the slave GEN file. TurboDOS users may change the CPMVER
equate and reassemble with TASM and link with TLINK (use -1 option).
VERSION 2.11 11/28/85
Changed default message to show TPA size. Noticed the following:
If the 8080 stack pointer points to an ODD address, all stack
operations will be degraded. If possible, check programs and adjust
stack pointer to point to an EVEN address. Example: A small program
using CALL and RET ran in 6.4 seconds with even stack pointer and
8.68 seconds with odd stack pointer.
VERSION 2.20 12/07/85
Minor cosmetic changes. Also changed error check after opening file
to work correctly under CP/M-86. EXPERIMENTALLY trapping the emulator
BDOS calls now since I suspect certain BDOS functions destroy BP
(which serves as SP for the 8080).
requests through to
the host