#ifndef retina_defs_h
#define retina_defs_h

#include <exec/types.h>
#include <exec/lists.h>
#include <utility/tagitem.h>

#define SEGMENTSIZE           64*1024




#define MONID_PAL             0x01000000   
#define MONID_NTSC            0x02000000   
#define MONID_VGA50           0x03000000   
#define MONID_VGA60           0x04000000   
#define MONID_VGA70           0x05000000   
#define MONID_SVGA50          0x06000000   
#define MONID_SVGA60          0x07000000   
#define MONID_SVGA70          0x08000000   
#define MONID_SPECIAL         0x0f000000   

#define MONID_NUMMASK         0x00ff0000   

#define MONKEY_HIRES          0x00000001
#define MONKEY_HILINES        0x00000002
#define MONKEY_LACE           0x00000004
#define MONKEY_DBL            0x00000008

#define MONKEY_RATIO11        0x00000010

#define MONRES_AMIGA          0x00000100   
#define MONRES_VGA            0x00000200   
#define MONRES_SVGA           0x00000300   
#define MONRES_VGA2           0x00000400   
#define MONRES_VGA3           0x00000500   

#define MONCOL_8              0x00001000   
#define MONCOL_16             0x00002000   
#define MONCOL_24             0x00003000   


#define RDM_JAM1              0
#define RDM_COMPLEMENT        2



#define WBMMODE_STD           0      
#define WBMMODE_HAM           1      
#define WBMMODE_HAM8          2      



#define RECTMODE_RGB          0      
#define RECTMODE_RGBA         1      
#define RECTMODE_BGR          2      
#define RECTMODE_GB_R         3      
#define RECTMODE_256          4      
#define RECTMODE_GB_R0        5      



#define RSP_On                TAG_USER+1
#define RSP_Color0            TAG_USER+2
#define RSP_Color1            TAG_USER+3
#define RSP_ZoomX             TAG_USER+4
#define RSP_ZoomY             TAG_USER+5         







#define ATNT_MODE_8           0     
#define ATNT_MODE_15          1     
#define ATNT_MODE_24          2     
#define ATNT_MODE_16          3     
#define ATNT_MODE_res         4     
#define ATNT_MODE_15b         5     
#define ATNT_MODE_16b         6     
#define ATNT_MODE_24b         7     

struct NewRetinaMonitor {
   long      nrm_MonitorID;
   long      nrm_PixelClock;
   unsigned char      nrm_AtntMode;
   unsigned char      nrm_Flags;

   unsigned short      nrm_StdWidth;
   unsigned short      nrm_StdHeight;
   unsigned short      nrm_MaxWidth;
   unsigned short      nrm_MaxHeight;

   unsigned short      nrm_HBStart;
   unsigned short      nrm_HSStart;
   unsigned short      nrm_HSEnd;
   unsigned short      nrm_HBEnd;
   unsigned short      nrm_HTotal;

   unsigned short      nrm_VBStart;
   unsigned short      nrm_VSStart;
   unsigned short      nrm_VSEnd;
   unsigned short      nrm_VBEnd;
   unsigned short      nrm_VTotal;
};




struct RetinaMonitor {
               struct    Node rm_Node;

               long      rm_MonitorID;

               long      rm_HFrequency;
               long      rm_VFrequency;

               unsigned short      rm_BytesPerPixel;

               unsigned short      rm_StdWidth;
               unsigned short      rm_StdHeight;
               unsigned short      rm_MaxWidth;
               unsigned short      rm_MaxHeight;
};




#define RSCR_STDWIDTH         (unsigned short)-1
#define RSCR_STDHEIGHT        (unsigned short)-1
#define RSCR_MAXWIDTH         (unsigned short)-2
#define RSCR_MAXHEIGHT        (unsigned short)-2



#define RSA_BitMap            TAG_USER+1         
#define RSA_DBufBitMap        TAG_USER+2         
#define RSA_ErrorCode         TAG_USER+3         
#define RSA_IDMask            TAG_USER+4         



#define ROSERR_NONE           0   
#define ROSERR_ID             1   
#define ROSERR_DEFAULTID      2   
#define ROSERR_TOOBIG         3   
#define ROSERR_NOMEM          4   
#define ROSERR_NORETINAMEM    5   



#define RSFF_DONTCLEARONOPEN  1<<0
#define RSFF_DONTCLEARONCLOSE  1<<1
#define RSFF_DOUBLEBUFFER  1<<2
#define RSFF_CUSTOMBITMAP  1<<3
#define RSFF_CUSTOMDBUFBITMAP  1<<4              
#define RSFF_AUTOADJUST  1<<5                    
#define RSFF_OPENBEHIND  1<<6
#define RSFF_DBUFPALETTE  1<<7

struct RetinaScreen { 
               struct Node rs_dummy;                 
               unsigned short      rs_Width;          
               unsigned short      rs_Height;         
               long      rs_BitMap;         
               long      rs_DBufBitMap;     

               long      rs_Flags;

               /* unsigned char        rs_APen_reserved;  */
               unsigned char        rs_APen;
               unsigned char        rs_APenR;          
               unsigned char        rs_APenG;          
               /* unsigned char rs_APen256; */
               unsigned char rs_APenB;

               unsigned char  rs_DrawMode;       
               unsigned char  rs_Reserved;       

               unsigned short      rs_BytesPerPixel;  
               unsigned short      rs_Modulo;         
               struct RetinaMonitor * rs_Monitor;        

               unsigned char *  rs_Palette;   
               unsigned short   rs_BitsPerPixel;   /* number of bits per pixel (4,8,16,24) (v3) */

               unsigned short   rs_LeftEdge;       /* currently always 0 (v3) */
               unsigned short   rs_TopEdge;        /* currently always 0 (v3) */

               unsigned short   rs_VisibleWidth;   /* currently same as _rs_Width (v3) */
               unsigned short   rs_VisibleHeight;  /* currently same as _rs_Height (v3) */
};



#define MID_DEFAULT_08        (unsigned long)-1
#define MID_DEFAULT_16        (unsigned long)-2
#define MID_DEFAULT_24        (unsigned long)-3

#define MID_UNKNOWN           0



struct xy_RetinaBase {
               struct Library blabla;
               volatile struct RetinaScreen * rb_FirstScreen;
                                            
                                            
               volatile unsigned long     rb_FrameCount;
                                            
               unsigned long     rb_HardInfo;                             
               void *            rb_BoardAddress;                             
               unsigned char *   rb_SegmentAdress;
                                            
};




#endif
