Source code for 805x line-by-line assembler?

From: John Chris Wren <jcwren_at_jcwren.com>
Date: Mon Mar 25 22:20:40 2002

        On the subject of dual data pointers, Dallas did it wrong. I talked to the
engineers when they were designing this part, and ran the idea past them,
and it turned out they couldn't do it because it wasn't thought of
internally, even though I was willing to sign off all rights to it.

        In the DPTR select register, the low order bit specifies which of the DPTRs
is used for MOVX, MOVC, and INC. However, if you try to integrate the
second data pointer into an existing code base that uses interrupts, you're
screwed. You have to modify all the interrupt routines that use the DPTR to
PUSH DPS, mov DPS,#0 (or 1), then POP DPS at the end. This wastes
instructions.

        Instead, the DPS register should have caused the DPH0/DPH1 and DPL0/DPL1
pairs to be swapped. Most code has little care which DPx0/DPx1 pair is
being used. Typically, DPTR0 is used as a source register, and DPTR1 as a
destination register, and the DPS is incremented between the load and store
instructions. You don't care that DPH0 is at 80h and DPH1 at at 83h (or
where it's actually at, book isn't handy).

        With my method, existing interrupt code wouldn't break, because when it
does the PUSH DPH, the DPH for the current DPTR would be pushed, because the
current DPTR would always be mapped into 80h/81h, as if you had one DPTR.

        This allows new code to be written to use the dual data pointers, while the
existing object code (as in the case of linkable libraries from 3rd party
vendors) won't break.

        But no, they screwed that up royally.

        --John


> -----Original Message-----
> From: owner-classiccmp_at_classiccmp.org
> [mailto:owner-classiccmp_at_classiccmp.org]On Behalf Of Richard Erlacher
> Sent: Monday, March 25, 2002 21:06 PM
> To: classiccmp_at_classiccmp.org
> Subject: Re: Source code for 805x line-by-line assembler?
>
>
> I'm not really familiar with the DS5000, but ISTR that it simply
> does what I
> do in external hardware, i.e. map the lower RAM into code space
> and the upper
> RAM in to data space. Because it's still the RAM, it's still
> writeable. I
> know they have some security related operations they do to
> protect the memory
> form external view, but as I've said before, it's not rocket science. It
> involves a hardware trick because they can't simply make it
> inherent in the
> processor, because they then sacrifice the compatibility with other 805x
> types.
>
> The 89C420 is quite different from most of the 805x types, first in that a
> single-cycle instruction takes only one system clock cycle (
> which can be 1x,
> 2x, or 4x the oscillator frequency up to a maximum of 50 MHz) and
> there modes
> it can operate in that greatly accelerate external memory
> accesses, again, up
> to the 50 MHz limit.
>
> I find this part quite irresistable, first because of its speed, but, more
> importantly, because of the high quality of the no-cost tools
> supporting it at
> least generically. This particular part has two data pointers,
> like several
> of the Dallas 805x extensions, and it has two serial ports, one
> of which is
> capable of supporting a multi-drop network interface. It has control bits
> that emable it automatically to increment/decrement one or both
> of the data
> pointers as part of an indirect read or write, and it has those
> interesting
> external memory interface modes, plus built-in cycle stretching logic, for
> increasing speed and compatibility with slower devices than the
> fast bus would
> otherwise support. Additionally, it has 16KB of on-board FLASH
> memory, though
> that's limited to 33 MHz system clock when if you use it, and it
> has an extra
> 1K of SRAM on board that can be used either in code space or in
> data space.
>
> Frankly, the feature set is staggering. As all of the 805x
> family members, it
> has separate code and data space, each 64KB in size, but because you can
> twiddle the internal ROM size parameters, you can actually have
> an 80KB code
> memory space, witht the 16KB of on-board FLASH memory enabled or disabled,
> selectively, or mapped where it can be used, say, as moveable tables.
>
> It's amazing! It's so flexible, I'm looking for a filesystem to
> use with it
> so it can be its own independent development tool, at least for
> in-the-field
> patching.
>
> Dick
>
> ----- Original Message -----
> From: "Douglas Quebbeman" <dhquebbeman_at_theestopinalgroup.com>
> To: <classiccmp_at_classiccmp.org>
> Sent: Monday, March 25, 2002 8:34 AM
> Subject: RE: Source code for 805x line-by-line assembler?
>
>
> > > 805x processors cannot (without external hardware) write to program
> memory,
> > so any
> > > line assembler would be dependant on some (common) hardware tricks to
> write
> > to
> > > program space.
> >
> > Although I keep some Intel parts around, I prefer the Dallas
> > Semiconductor DS5000 familiy, which allows software to partition
> > its 64k memory between code space and data space.
> >
> > However, I'll grant that this qualifies under your definition of
> > "hardware tricks", even though it's not quite what you had in mind.
> >
> > Regards,
> > -dq
> >
> >
>
Received on Mon Mar 25 2002 - 22:20:40 GMT

This archive was generated by hypermail 2.3.0 : Fri Oct 10 2014 - 23:35:13 BST