/* This is an inline header for programming the Retina Graphics card with */
/*  GCC It is posted to 'alt.sources.amiga' as it is basically untested. */
/*  You still need to include the "retina/retina.h" file in your source  */
/*  before including this inline header. The Retina Board comes with     */
/*  developer software in every package.  Thank you MacroSystem!         */

/*
 * <inline/retina.h> $VER: 1.2 (26-5-93) ALPHA
 * generated by EDB 5-26-93 from version 1.2 retina_lib.fd
 * notes:  This was created by hacking retina_lib.fd and retina_protos.h
 *         until they worked properly with the conv.p perl script
 *         distributed in Markus Wild's GCC 2.3.3 port to Amiga OS
 *         The fd file was used as the arbiter when conflicts arose.
 *         General problems were upper case register names: use a0 not A0...
 *         FD functions had less parameters than the PROTOS. Huh??????
 *         This worked with the 'demo' program that was posted to
 *         comp.sys.amiga.programmer, and that is as far as I've tested it.
 *         Install in your gcc:os-include/inline directory, and use this
 *         instead of the 'pragmas' and 'clib/protos' include files
 */

#ifndef _RETINA_PROTOS_H
#define _RETINA_PROTOS_H

#include <sys/cdefs.h>
#include <inline/stubs.h>

__BEGIN_DECLS
#ifndef BASE_EXT_DECL
#define BASE_EXT_DECL extern struct Library * RetinaBase;
#endif
#ifndef BASE_PAR_DECL
#define BASE_PAR_DECL
#define BASE_PAR_DECL0 void
#endif
#ifndef BASE_NAME
#define BASE_NAME RetinaBase
#endif

static __inline UBYTE *
Retina_AllocBitMap (BASE_PAR_DECL UWORD width,UWORD height,
                    UWORD bytesPerPixel,ULONG flags)
{
  BASE_EXT_DECL
  register UBYTE *  _res  __asm("d0");
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register UWORD d0 __asm("d0") = width;
  register UWORD d1 __asm("d1") = height;
  register UWORD d2 __asm("d2") = bytesPerPixel;
  register ULONG d3 __asm("d3") = flags;
  __asm __volatile ("jsr a6@(-0xde)"
  : "=r" (_res)
  : "r" (a6), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
  : "a0","a1","d0","d1","d2","d3", "memory");
  return _res;
}
static __inline ULONG
Retina_AvailMem (BASE_PAR_DECL ULONG flags)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register ULONG d0 __asm("d0") = flags;
  __asm __volatile ("jsr a6@(-0xea)"
  : "=r" (_res)
  : "r" (a6), "r" (d0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline void
Retina_Circle (BASE_PAR_DECL struct RetinaScreen *screen,
               UWORD x,UWORD y,UWORD r)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  register UWORD d0 __asm("d0") = x;
  register UWORD d1 __asm("d1") = y;
  register UWORD d2 __asm("d2") = r;
  __asm __volatile ("jsr a6@(-0x108)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2)
  : "a0","a1","d0","d1","d2", "memory");
}
static __inline void
Retina_ClearScreen (BASE_PAR_DECL struct RetinaScreen *screen)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  __asm __volatile ("jsr a6@(-0xf0)"
  : /* no output */
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_CloseScreen (BASE_PAR_DECL struct RetinaScreen *screen)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  __asm __volatile ("jsr a6@(-0xc0)"
  : /* no output */
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_CopyRect (BASE_PAR_DECL struct RetinaScreen *srcScreen,UWORD srcX,
                 UWORD srcY,struct RetinaScreen *destScreen,UWORD destX,
                 UWORD destY,UWORD sizeX,UWORD sizeY)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = srcScreen;
  register UWORD d0 __asm("d0") = srcX;
  register UWORD d1 __asm("d1") = srcY;
  register struct RetinaScreen *a1 __asm("a1") = destScreen;
  register UWORD d2 __asm("d2") = destX;
  register UWORD d3 __asm("d3") = destY;
  register UWORD d4 __asm("d4") = sizeX;
  register UWORD d5 __asm("d5") = sizeY;
  __asm __volatile ("jsr a6@(-0x14a)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (a1), "r" (d2), "r" (d3), \
    "r" (d4), "r" (d5)
  : "a0","a1","d0","d1","d2","d3","d4","d5", "memory");
}
static __inline void
Retina_DisownRetina (BASE_PAR_DECL0)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  __asm __volatile ("jsr a6@(-0x168)"
  : /* no output */
  : "r" (a6)
  : "a0","a1","d0","d1", "memory");
}
static __inline struct RetinaMonitor *
Retina_FindMonitor (BASE_PAR_DECL ULONG monitorID)
{
  BASE_EXT_DECL
  register struct RetinaMonitor *  _res  __asm("d0");
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register ULONG d0 __asm("d0") = monitorID;
  __asm __volatile ("jsr a6@(-0xae)"
  : "=r" (_res)
  : "r" (a6), "r" (d0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline void
Retina_FreeBitMap (BASE_PAR_DECL UBYTE *bitmap)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register UBYTE *a0 __asm("a0") = bitmap;
  __asm __volatile ("jsr a6@(-0xe4)"
  : /* no output */
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
}
static __inline ULONG
Retina_GetAPen (BASE_PAR_DECL struct RetinaScreen *screen)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  __asm __volatile ("jsr a6@(-0x132)"
  : "=r" (_res)
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline ULONG
Retina_GetDefaultScreenInfo (BASE_PAR_DECL ULONG defaultID,
                             struct DefaultScreenInfo * buffer)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register ULONG d0 __asm("d0") = defaultID;
  register struct DefaultScreenInfo * a0 __asm("a0") = buffer;
  __asm __volatile ("jsr a6@(-0x5a)"
  : "=r" (_res)
  : "r" (a6), "r" (d0), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline void
Retina_Line (BASE_PAR_DECL struct RetinaScreen *screen,
             UWORD x1,UWORD y1,UWORD x2,UWORD y2)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  register UWORD d0 __asm("d0") = x1;
  register UWORD d1 __asm("d1") = y1;
  register UWORD d2 __asm("d2") = x2;
  register UWORD d3 __asm("d3") = y2;
  __asm __volatile ("jsr a6@(-0x10e)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
  : "a0","a1","d0","d1","d2","d3", "memory");
}
static __inline void
Retina_LoadPalette (BASE_PAR_DECL struct RetinaScreen *screen,
                    UWORD first,UWORD count,UBYTE *table)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  register UWORD d0 __asm("d0") = first;
  register UWORD d1 __asm("d1") = count;
  register UBYTE *a1 __asm("a1") = table;
  __asm __volatile ("jsr a6@(-0x8a)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (a1)
  : "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_MoveSprite (BASE_PAR_DECL struct RetinaScreen *screen,
                   UWORD x,UWORD y)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  register UWORD d0 __asm("d0") = x;
  register UWORD d1 __asm("d1") = y;
  __asm __volatile ("jsr a6@(-0x126)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (d0), "r" (d1)
  : "a0","a1","d0","d1", "memory");
}
static __inline struct RetinaMonitor *
Retina_NextMonitor (BASE_PAR_DECL struct RetinaMonitor *monitor)
{
  BASE_EXT_DECL
  register struct RetinaMonitor *  _res  __asm("d0");
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaMonitor *a0 __asm("a0") = monitor;
  __asm __volatile ("jsr a6@(-0xb4)"
  : "=r" (_res)
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline struct RetinaScreen *
Retina_OpenScreen (BASE_PAR_DECL UWORD width,UWORD height,
                   ULONG monitorID,ULONG flags,APTR tags)
{
  BASE_EXT_DECL
  register struct RetinaScreen *  _res  __asm("d0");
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register UWORD d0 __asm("d0") = width;
  register UWORD d1 __asm("d1") = height;
  register ULONG d2 __asm("d2") = monitorID;
  register ULONG d3 __asm("d3") = flags;
  register APTR a0 __asm("a0") = tags;
  __asm __volatile ("jsr a6@(-0xba)"
  : "=r" (_res)
  : "r" (a6), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a0)
  : "a0","a1","d0","d1","d2","d3", "memory");
  return _res;
}
static __inline void
Retina_OwnRetina (BASE_PAR_DECL0)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  __asm __volatile ("jsr a6@(-0x162)"
  : /* no output */
  : "r" (a6)
  : "a0","a1","d0","d1", "memory");
}
static __inline ULONG
Retina_ReadPixel (BASE_PAR_DECL struct RetinaScreen *screen,
                  UWORD x,UWORD y)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  register UWORD d0 __asm("d0") = x;
  register UWORD d1 __asm("d1") = y;
  __asm __volatile ("jsr a6@(-0x138)"
  : "=r" (_res)
  : "r" (a6), "r" (a0), "r" (d0), "r" (d1)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline void
Retina_ReadRect (BASE_PAR_DECL UBYTE *mem,UWORD memX,UWORD memY,
                 UWORD memWidth,ULONG mode,struct RetinaScreen *screen,
        UWORD screenX,UWORD screenY,UWORD sizeX,UWORD sizeY,UBYTE *mem2)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register UBYTE *a0 __asm("a0") = mem;
  register UWORD d0 __asm("d0") = memX;
  register UWORD d1 __asm("d1") = memY;
  register UWORD d2 __asm("d2") = memWidth;
  register ULONG d3 __asm("d3") = mode;
  register struct RetinaScreen *a1 __asm("a1") = screen;
  register UWORD d4 __asm("d4") = screenX;
  register UWORD d5 __asm("d5") = screenY;
  register UWORD d6 __asm("d6") = sizeX;
  register UWORD d7 __asm("d7") = sizeY;
  register UBYTE *a2 __asm("a2") = mem2;
  __asm __volatile ("jsr a6@(-0x144)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a1), \
    "r" (d4), "r" (d5), "r" (d6), "r" (d7), "r" (a2)
  : "a0","a1","a2","d0","d1","d2","d3","d4","d5","d6","d7", "memory");
}
static __inline void
Retina_RectFill (BASE_PAR_DECL struct RetinaScreen *screen,UWORD x1,UWORD y1,
                 UWORD x2,UWORD y2)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  register UWORD d0 __asm("d0") = x1;
  register UWORD d1 __asm("d1") = y1;
  register UWORD d2 __asm("d2") = x2;
  register UWORD d3 __asm("d3") = y2;
  __asm __volatile ("jsr a6@(-0xf6)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
  : "a0","a1","d0","d1","d2","d3", "memory");
}
static __inline void
Retina_ScreenToBack (BASE_PAR_DECL struct RetinaScreen *screen)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  __asm __volatile ("jsr a6@(-0x114)"
  : /* no output */
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_ScreenToFront (BASE_PAR_DECL struct RetinaScreen *screen)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  __asm __volatile ("jsr a6@(-0xc6)"
  : /* no output */
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_SetAPen (BASE_PAR_DECL struct RetinaScreen *screen,ULONG color)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  register ULONG d0 __asm("d0") = color;
  __asm __volatile ("jsr a6@(-0xfc)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (d0)
  : "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_SetDrMd (BASE_PAR_DECL struct RetinaScreen *screen,ULONG mode)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  register ULONG d0 __asm("d0") = mode;
  __asm __volatile ("jsr a6@(-0x15c)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (d0)
  : "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_SetPalette (BASE_PAR_DECL struct RetinaScreen *screen,UWORD index,
                  UBYTE red,UBYTE green,UBYTE blue)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  register UWORD d0 __asm("d0") = index;
  register UBYTE d1 __asm("d1") = red;
  register UBYTE d2 __asm("d2") = green;
  register UBYTE d3 __asm("d3") = blue;
  __asm __volatile ("jsr a6@(-0x90)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3)
  : "a0","a1","d0","d1","d2","d3", "memory");
}
static __inline void
Retina_SetPixel (BASE_PAR_DECL struct RetinaScreen *screen,UWORD x,
                 UWORD y,ULONG color)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  register UWORD d0 __asm("d0") = x;
  register UWORD d1 __asm("d1") = y;
  register ULONG d2 __asm("d2") = color;
  __asm __volatile ("jsr a6@(-0x156)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2)
  : "a0","a1","d0","d1","d2", "memory");
}
static __inline UBYTE *
Retina_SetSegmentPtr (BASE_PAR_DECL UBYTE *address)
{
  BASE_EXT_DECL
  register UBYTE *  _res  __asm("d0");
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register UBYTE *a0 __asm("a0") = address;
  __asm __volatile ("jsr a6@(-0x96)"
  : "=r" (_res)
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
  return _res;
}
static __inline ULONG
Retina_SetSprite (BASE_PAR_DECL struct RetinaScreen *screen,ULONG *data,
                  UWORD height,APTR tags)
{
  BASE_EXT_DECL
  register ULONG  _res  __asm("d0");
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  register ULONG *a1 __asm("a1") = data;
  register UWORD d0 __asm("d0") = height;
  register APTR a2 __asm("a2") = tags;
  __asm __volatile ("jsr a6@(-0x120)"
  : "=r" (_res)
  : "r" (a6), "r" (a0), "r" (a1), "r" (d0), "r" (a2)
  : "a0","a1","a2","d0","d1", "memory");
  return _res;
}
static __inline void
Retina_SpriteFunction (BASE_PAR_DECL struct RetinaScreen *screen,APTR tags)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  register APTR a1 __asm("a1") = tags;
  __asm __volatile ("jsr a6@(-0x12c)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (a1)
  : "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_SwapBitMap (BASE_PAR_DECL struct RetinaScreen *screen)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  __asm __volatile ("jsr a6@(-0x11a)"
  : /* no output */
  : "r" (a6), "r" (a0)
  : "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_SwapRect (BASE_PAR_DECL UBYTE *mem,UWORD memX,UWORD memY,
                 UWORD memWidth,ULONG mode,struct RetinaScreen *screen,UWORD
                 screenX,UWORD screenY,UWORD sizeX,UWORD sizeY,UBYTE *mem2)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register UBYTE *a0 __asm("a0") = mem;
  register UWORD d0 __asm("d0") = memX;
  register UWORD d1 __asm("d1") = memY;
  register UWORD d2 __asm("d2") = memWidth;
  register ULONG d3 __asm("d3") = mode;
  register struct RetinaScreen *a1 __asm("a1") = screen;
  register UWORD d4 __asm("d4") = screenX;
  register UWORD d5 __asm("d5") = screenY;
  register UWORD d6 __asm("d6") = sizeX;
  register UWORD d7 __asm("d7") = sizeY;
  register UBYTE *a2 __asm("a2") = mem2;
  __asm __volatile ("jsr a6@(-0x150)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a1),\
    "r" (d4), "r" (d5), "r" (d6), "r" (d7), "r" (a2)
  : "a0","a1","a2","d0","d1","d2","d3","d4","d5","d6","d7", "memory");
}
static __inline BOOL
Retina_WriteBitMap (BASE_PAR_DECL struct RetinaScreen *screen,
                    struct BitMap *bitmap,UBYTE *palette,UWORD destX,
                    UWORD destY,UWORD width,ULONG mode)
{
  BASE_EXT_DECL
  register BOOL  _res  __asm("d0");
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  register struct BitMap *a1 __asm("a1") = bitmap;
  register UBYTE *a2 __asm("a2") = palette;
  register UWORD d0 __asm("d0") = destX;
  register UWORD d1 __asm("d1") = destY;
  register UWORD d2 __asm("d2") = width;
  register ULONG d3 __asm("d3") = mode;
  __asm __volatile ("jsr a6@(-0x36)"
  : "=r" (_res)
  : "r" (a6), "r" (a0), "r" (a1), "r" (a2), "r" (d0), "r" (d1),\
    "r" (d2), "r" (d3)
  : "a0","a1","a2","d0","d1","d2","d3", "memory");
  return _res;
}
static __inline void
Retina_WritePixel (BASE_PAR_DECL struct RetinaScreen *screen,UWORD x,UWORD y)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register struct RetinaScreen *a0 __asm("a0") = screen;
  register UWORD d0 __asm("d0") = x;
  register UWORD d1 __asm("d1") = y;
  __asm __volatile ("jsr a6@(-0x102)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (d0), "r" (d1)
  : "a0","a1","d0","d1", "memory");
}
static __inline void
Retina_WriteRect (BASE_PAR_DECL UBYTE *mem,UWORD memX,UWORD memY,
                  UWORD memWidth,ULONG mode,struct RetinaScreen *screen,
        UWORD screenX,UWORD screenY,UWORD sizeX,UWORD sizeY,UBYTE *mem2)
{
  BASE_EXT_DECL
  register struct Library *a6 __asm("a6") = BASE_NAME;
  register UBYTE *a0 __asm("a0") = mem;
  register UWORD d0 __asm("d0") = memX;
  register UWORD d1 __asm("d1") = memY;
  register UWORD d2 __asm("d2") = memWidth;
  register ULONG d3 __asm("d3") = mode;
  register struct RetinaScreen *a1 __asm("a1") = screen;
  register UWORD d4 __asm("d4") = screenX;
  register UWORD d5 __asm("d5") = screenY;
  register UWORD d6 __asm("d6") = sizeX;
  register UWORD d7 __asm("d7") = sizeY;
  register UBYTE *a2 __asm("a2") = mem2;
  __asm __volatile ("jsr a6@(-0x13e)"
  : /* no output */
  : "r" (a6), "r" (a0), "r" (d0), "r" (d1), "r" (d2), "r" (d3), "r" (a1),\
    "r" (d4), "r" (d5), "r" (d6), "r" (d7), "r" (a2)
  : "a0","a1","a2","d0","d1","d2","d3","d4","d5","d6","d7", "memory");
}
#undef BASE_EXT_DECL
#undef BASE_PAR_DECL
#undef BASE_PAR_DECL0
#undef BASE_NAME

__END_DECLS

#endif /* _RETINA_PROTOS_H */
