Andrew Collier
Tue, 20 May 2008 09:12:58 -0700
On Tue, May 20, 2008 at 02:03:57PM +0100, Thomas Harte wrote:
> I'm about to finish my lunch break, sorry if I sound slightly short...
>
> 1) is there any pattern or logic to the values placed on the bus
> during interrupts? I guess an equivalent question is: what realistic
> options do I have on the Sam for catching and processing interrupts?
I don't think the bus value is ever constructed in a useful way.
The usual strategies are to use mode 1, or to use mode 2 with a 257-byte table
all
containing the same byte.
> 2) are there any non-obvious tricks for fast access to a table
> containing 16bit words, indexed by an 11bit (signed) integer? At the
> minute I'm essentially doing:
>
> [stuff to work out offset into table in hl]
> ld bc, <address of middle of table - which is aligned to a two-byte boundary>
> add hl, hl
> add hl, bc
> ld e, (hl)
> inc l
> ld d, (hl)
If you can align your table onto a 256 byte boundary, you can save a few cycles
by adding
only the top byte of the table offset. You can also double a number more
quickly if you
have an excuse to put some of it in the A register:
ld a,h 4
sla h 8
rla 4
add table/256 8
ld h,a 4
= 28
instead of
ld bc, <table> 12
add hl, hl 16
add hl, bc 16
= 44
HTH,
Andrew
--
--- Andrew Collier ----
---- http://www.intensity.org.uk/ ---
--
r<2+ T<4* cSEL dMS hEn/CB<BL A4 S+*<++ C$++L/mP W- a-- Vh+seT+ (Cantab) 1.1.4