[net.micro] NEC V30: Availability, Benchmarks, Info

kim@UCB-VAX.ARPA (09/26/85)

Well, I found one (an 8 MHz V30, that is) at one of the local NEC
distributors ... the 1st one I called, and I got the last one they
had in stock, no less (maybe I *am* living "right," afterall :-) )!
The salesman I spoke with said they'd be getting more in "soon," as
I mentioned I wanted to pick up a spare.  The distributor I used is:

        Western Microtechnology         ph:  408-725-1660
        10040 Bubb Rd.
        Cupertino, CA     95014
        
The price (quantity of one) was  $20.10  plus tax.  This was for the
8 MHz, ceramic part, and has to be just about the best deal I've seen
in many moons!   By the way, the actual NEC part numbers for the V30
series of chips are:

        uPD70116D-8     8 MHz, ceramic
        uPD70116D-5     5 MHz, ceramic
        uPD70116C-8     8 MHz, plastic
        uPD70116C-5     5 MHz, plastic

(Replace the "16" with "08" and you get the V20 (8088 compatible) p/n's.)


There were alot of distributors listed on the sheet NEC sent with the V30
spec, so you shouldn't have too much trouble finding one.  I did recognize
one outfit on the list from the back pages of Radio-Electronics or Popular
Electronics in days-gone-by.  They were (are?) used to dealing with small
volume, mail-orders; you might try them if your local distributor doesn't
want to sell you just one chip.  They are:

        Mouser Electronics              ph:  619-449-2300
        11433 Woodside Av.
        Santee, CA   92071
        
NEC's address (so you can get a spec) is:

        NEC Electronics, Inc.           ph: 800-632-3532 in California
        401 Ellis St.                       800-632-3531 elsewhere
        PO Box 7241
        Mt. View, CA    94039
        
Note: I am not associated with any of the above companies, except as a
      satisfied customer.

Ok, now for some quick-and-dirty before/after benchmark numbers:

System:    Fujitsu u-16s w/8087 (8 MHz)
SCP:       MS-DOS 2.11
Compiler:  TurboPascal 3.01A (w/8087 support)

Benchmark:      program bench(output);

                var
                  i,j,k,l:      integer;
                  r:            real;
                  s:            string[100];
                  t,u:          string[50];
                
                begin
                  i := 0;
                  r := 0.0;
                  s := '';
                  t := 'ABCDEFGHIJKLMNOPQRSTUVWXYABCDEFGHIJKLMNOPQRSTUVWXY';
                  u := 'abcdefghijklmnopqrstuvwxyabcdefghijklmnopqrstuvwxy';
                  
                  repeat until keypressed;   {start timing when a key is hit}
                  
                  for j := 1 to 1000 do
                      for k := 1 to 1000 do     {1 to 50 for string test}
                          for l := 1 to 10 do
                              {one of:          }
                               i := i + 1;      {integer}
                              {r := r + 1.0;}   {real}
                              {s := t + u;  }   {string assign/concatinate}
                  
                  writeln(^G,i{or r, or s}); {stop timing when the bell rings}
                end.


Results:             |    8086     |    V30      |  %-improvement
          ---------------------------------------------------------
           integer   |   150.75    |   144.30    |     4.3%
           real      |  1489.24    |  1357.94    |     8.8%
           string    |   497.50    |   296.25    |    40.5%      <---- !!
                     |             |             |
           Mgen +    |  1012.14    |   935.84    |     7.5%
           Msho ++   |    23.09    |    18.35    |    20.5%
           
           Times are in seconds.
         + Mgen is a Mandelbrot set generating program (compute intensive).
        ++ Msho is a display routine for Mgen's data   (data-move intensive).

The machine sucessfully ran all the diagnostics, floppy and hard-disk tests,
rupt driven communication/modem program, etc.  In short, the s/w couldn't
tell the difference (obviously, there were no s/w timing loops in anything
I ran ... at least none that were critical).

Subjectively, MASM seems to run about 20%-30% faster, and scrolling thru text
in various editors is quite noticeably faster.  I am a little surprised by 
the integer vs. real results (I expected to see the least improvement in code
that uses the 8087); I haven't looked at the code Turbo generates tho.  In
any case, a performance improvement of 15%-20% for average, interactive work
is well worth $21.51, I'd say (and the chip was only slightly warm after a
couple of hours of experimentation)!


Here's a look at the "extra" instructions in the V30 and V20 (note that these
are NEC's mnemonics):

80186 compatible:       PUSH imm        . pushes immediate data onto the stack
                        PUSH R          . pushes 8 general registers onto stack
                        POP R           . pops 8 general registers from stack
                        MUL imm         . executes 16-bit multiply of register
                                          or memory contents by immediate data
                        SHL imm8        . shifts/rotates register or memory by
                        SHR imm8          immediate value
                        SHRA imm8
                        ROL imm8
                        ROR imm8
                        ROLC imm8
                        RORC imm8
                        CHKIND          . checks array index against
                                          designated boundaries
                        INM             . moves a string from I/O port to mem
                        OUTM            . moves a string from mem to I/O port
                        PREPARE         . allocates an area for a stack frame
                                          and copies previous frame pointers
                        DISPOSE         . frees the current stack frame on a
                                          procedure exit

NEC unique:             INS             . insert bit-field
                        EXT             . extract bit-field
                        ADD4S           . adds packed decimal strings
                        SUB4S           . subtract one packed decimal string
                                          from another
                        CMP4S           . compares two packed decimal strings
                        ROL4            . rotates one BCD digit left thru AL
                                          lower 4 bits
                        ROR4            . rotates one BCD digit right thru AL
                                          lower 4 bits
                        TEST1           . tests a sspecified bit; sets/resets
                                          zero-flag
                        NOT1            . inverts a specified bit
                        CLR1            . clears a specified bit
                        SET1            . sets a specified bit
                        REPC            . repeats next (string) instruction
                                          until carry-flag is cleared
                        REPNC           . repeats next (string) instruction
                                          until carry-flag is set
                        FP02            . additional float-pt processor call

8080 emulation mode:    BRKEM           . start 8080 emulation mode
                        RETEM           . return from emulation mode
                        CALLN           . call native-mode (V30) subroutine
                                          from within 8080 emulation mode
                                          (use normal RETI to return)


Looks like NEC just may have developed the "Z-80" of the 8086-style
16-bitters ...

Enjoy!

/kim

"The difference between science and the fuzzy subjects is that science
requires reasoning, while those other subjects mearly require scholarship."
-- Lazarus Long

[generic disclaimer]
-- 

UUCP:  {decvax,ucbvax,ihnp4}!decwrl!mips!kim
DDD:   415-960-1200
USPS:  MIPS Computer Systems Inc,  1330 Charleston Rd,  Mt View, CA 94043