home *** CD-ROM | disk | FTP | other *** search
/ Fractal Creations (Second Edition) / FRACTALS_2E.iso / frasrc.exe / TARGA.H < prev    next >
C/C++ Source or Header  |  1993-08-21  |  9KB  |  316 lines

  1. /* targa.h */
  2.  
  3.  
  4. #ifndef TARGA_H
  5. #define TARGA_H
  6.  
  7. #ifndef XFRACT
  8. #include    <dos.h>
  9. #endif
  10.  
  11.  
  12. extern unsigned int _dataseg_xx;
  13.  
  14. /****************************************************************/
  15.  
  16. #ifdef __TURBOC__
  17. #    define        PEEK(a,b,c,d)        movedata( b, a, _DS, c, d)
  18. #    define        POKE(a,b,c,d)        movedata( _DS, c, b, a, d )
  19. #    define        OUTPORTB    outportb
  20. #    define        INPORTB     inportb
  21. #    define        OUTPORTW    outport
  22. #    define        INPORTW     inport
  23. #else
  24. #    define        PEEK(a,b,c,d)        movedata( b, a, _dataseg_xx, c, d)
  25. #    define        POKE(a,b,c,d)        movedata( _dataseg_xx, c, b, a, d )
  26. #    define        OUTPORTB    outp
  27. #    define        INPORTB     inp
  28. #    define        OUTPORTW    outpw
  29. #    define        INPORTW     inpw
  30. #endif
  31.  
  32. #define  FALSE    0
  33. #ifdef TRUE
  34. #undef TRUE
  35. #endif
  36. #define  TRUE    1
  37.  
  38. /****************************************************************/
  39.  
  40. #define TSEG            0xA000
  41. #define TIOBASE     0x220
  42.  
  43.  
  44. /****************************************************************/
  45.  
  46.  
  47. #define     TYPE_8        8
  48. #define     TYPE_16     16
  49. #define     TYPE_24     24
  50. #define     TYPE_32     32
  51. #define     TYPE_M8     -8
  52.  
  53. /*
  54.  * TARGA: 400 to 482 rows x 512 pixels/row X 16 bits/pixel
  55.  */
  56.  
  57. #define XMIN        0
  58. #define YMIN        0
  59. #define XMAX        512            /* maximum X value */
  60. #define YMAX        512            /* maximum Y value */
  61. #define XRES        512            /* X resolution */
  62. #define YRES        512            /* Y Resolution */
  63. #define YVISMAX     (2*targa.LinesPerField) /* Maximum visible Y coordinate */
  64. #define YVISMIN     0            /* Minimum visible Y coordiate */
  65. #define DEF_ROWS    400            /* Default number of rows */
  66.  
  67. #define IOBASE        targa.iobase        /* io base location of graphics registers */
  68. #define MEMSEG        targa.memloc        /*  use the variable so we can use */
  69. #define SCNSEG        targa.memloc        /*  the one defined in TARGA */
  70. #define SRCBANK     (targa.memloc+0x0800)    /*  use high-bank as source bank */
  71. #define DESTBANK    targa.memloc        /*  use lo-bank as destination bank */
  72.  
  73. /*    Output register definitions     */
  74. #define MODEREG     (IOBASE+0xC00)    /* Mode Register address */
  75. #define MASKREG     (IOBASE+0x800)    /* Mask Registers */
  76. #define UNDERREG    (IOBASE+0x800)    /* Underscan register */
  77. #define OVERREG     (IOBASE+0x802)    /* overscan register */
  78. #define DESTREG     (IOBASE+0x802)    /* Address of Page Select Lower Register */
  79. #define SRCREG        (IOBASE+0x803)    /* Address of Page Select Upper Register */
  80. #define VCRCON        (IOBASE+0x400)    /* Address of Contrast/VidSrc Register */
  81. #define BLNDREG     VCRCON
  82. #define SATHUE        (IOBASE+0x402)    /* Satuation/Hue Register address */
  83. #define DRREG        (IOBASE+0x401)    /* ADDRESS OF Controller Write Register */
  84. #define VERTPAN     (IOBASE+0x403)    /* Address of Vertical Pan Register */
  85. #define BORDER        (IOBASE)    /* Address of Page Select Lower Register */
  86.  
  87. /*    Input register definitions  */
  88. #define VIDEOSTATUS    (IOBASE+0xC02)    /* Video Status Register */
  89. #define RASTERREG    (IOBASE+0xC00)    /* Raster counter register */
  90.  
  91. /*    Default register values     */
  92. #define DEF_MODE 1            /* Default mode register value */
  93.                                                             /*    Memory selected, 512x512, 1x */
  94.                                                             /*    Display mode */
  95. #define DEF_MASK    0        /* default memory mask */
  96. #define DEF_SATURATION    0x4        /* default saturation value */
  97. #define DEF_HUE     0x10        /* default hue value */
  98. #define DEF_CONTRAST    0x10        /* default contrast value */
  99. #define DEF_VIDSRC    0        /* default video source value - Composite */
  100. #define DEF_VERTPAN    56        /* assumes 400-line output */
  101. #define DEF_BORDER    0        /* default border color */
  102.  
  103.  
  104. /*    MASK AND SHIFT VALUE FOR REGISTERS CONTAINING SUBFIELDS  */
  105. /*
  106.  *        ******************************************************
  107.  *                    MODE REGISTERS
  108.  *        ******************************************************
  109.  */
  110. #define MSK_MSEL    0xfffC        /* memory select bits */
  111. #define SHF_MSEL    0x0000
  112. #define MSEL        1
  113.  
  114. #define MSK_IBIT    0xfffb        /* Interlace bit */
  115. #define SHF_IBIT    2
  116.  
  117. #define MSK_RES     0xFFC7        /* disp. resolution and screen select bits */
  118. #define SHF_RES     3
  119. #define S0_512X512_0    0        /* 512x512 resolution screen */
  120. #define S1_512X512_1    1
  121. #define S2_512X256_0    2        /* 512x256 resolution screen 0 */
  122. #define S3_512X256_1    3        /* 512x256 resolution screen 1 */
  123. #define S4_256X256_0    4        /* 256x256 resolution screen 0 */
  124. #define S5_256X256_1    5        /*            ....        */
  125. #define S6_256X256_2    6
  126. #define S7_256X256_3    7
  127.  
  128. #define MSK_REGWRITE    0xFFBF        /* mask for display register write */
  129. #define SHF_REGWRITE    6
  130. #define REGINDEX    0        /* to write an index value */
  131. #define REGVALUE    1        /* to write a value */
  132.  
  133. #define MSK_BIT9    0xFF7F        /* maks for high-order bit of DR's */
  134. #define SHF_BIT9    7
  135.  
  136. #define MSK_TAPBITS    0xFCFF        /* mask for setting the tap bits */
  137. #define SHF_TAPBITS    8
  138.  
  139. #define MSK_ZOOM    0xF3FF        /* Mask for zoom factor */
  140. #define SHF_ZOOM    10
  141.  
  142. #define MSK_DISPLAY    0xCFFF        /* Mask for display mode */
  143. #define SHF_DISPLAY    12
  144. #define MEMORY_MODE    0
  145. #define LIVE_FIXED    1
  146. #define OVERLAY_MODE    2
  147. #define LIVE_LIVE    3
  148. #define DEF_DISPLAY    0
  149.  
  150. #define MSK_CAPTURE    0xBFFF        /* Mask for capture bit */
  151. #define SHF_CAPTURE    14
  152.  
  153. #define MSK_GENLOCK    0x7FFF        /* MASK FOR GENLOCK */
  154. #define SHF_GENLOCK    15
  155. #define DEF_GENLOCK    0
  156.  
  157. /*    Video status input register     */
  158. #define FIELDBIT    0x0001
  159. #define VIDEOLOSS    0x0002
  160.  
  161. /*    VIDEO SOURCE/CONTROL REGISTER     */
  162. #define MSK_CONTRAST    0xFFC1
  163. #define SHF_CONTRAST    1
  164. #define MAX_CONTRAST    0x1f
  165.  
  166. #define MSK_RGBORCV    0xBF
  167. #define SHF_RGBORCV    6
  168. #define RGB        1
  169. #define CV        0
  170.  
  171. #define MSK_VCRORCAMERA 0x7F
  172. #define SHF_VCRORCAMERA 7
  173. #define VCR        1
  174. #define CAMERA        0
  175.  
  176. /*    HUE/SATUATION REGISTER    */
  177. #define MSK_HUE     0xE0
  178. #define SHF_HUE     0
  179. #define MAX_HUE     0x1f
  180.  
  181. #define MSK_SATURATION    0x1F
  182. #define SHF_SATURATION    5
  183. #define MAX_SATURATION    0x07
  184.  
  185.  
  186. /*
  187.  *    *********************************************
  188.  *            Display register settings
  189.  *    *********************************************
  190.  *
  191.  *    Screen Positioning Registers:
  192.  *        DR 0-3
  193.  */
  194. #define LEFTBORDER    0
  195. #define DEF_LEFT    85
  196. #define MIN_LEFT    75
  197. #define MAX_LEFT    95
  198. #define RIGHTBORDER    1
  199. #define DEF_RIGHT    (DEF_LEFT+256)
  200. #define TOPBORDER    2
  201. #define DEF_TOP     40
  202. #define MIN_TOP     20
  203. #define BOTTOMBORDER    3
  204. #define DEF_BOTTOM    (DEFTOP+DEFROWS/2)
  205. #define MAX_BOTTOM    261
  206.  
  207. /*    REgisters which track 0-3     */
  208. #define DR8        8
  209. #define PRESHIFT    DR8
  210. #define EQU_DR8     DR0
  211. #define DR9        9
  212. #define EQU_DR9     DR1
  213. #define DR10        10
  214. #define EQU_DR10    DR2
  215. #define DR11        11
  216. #define EQU_DR11    DR3
  217.  
  218. /*    REQUIRED REGISTERS    */
  219. #define DR4        4
  220. #define DEF_DR4     352
  221. #define DR5        5
  222. #define DEF_DR5     1
  223. #define DR6        6
  224. #define DEF_DR6     0
  225. #define DR7        7
  226. #define DEF_DR7     511
  227. #define DR12        12
  228. #define DEF_DR12    20
  229. #define DR13        13
  230. #define DEF_DR13    22
  231. #define DR14        14
  232. #define DEF_DR14    0
  233. #define DR15        15
  234. #define DEF_DR15    511
  235. #define DR16        16
  236. #define DEF_DR16    0
  237. #define DR17        17
  238. #define DEF_DR17    0
  239. #define DR18        18
  240. #define DEF_DR18    0
  241. #define DR19        19
  242. #define DEF_DR19    4
  243.  
  244. /* interlace mode register & parameters */
  245. #define DR20        20
  246. #define INTREG        0x14
  247. #define DEF_INT     0        /* default to interlace mode 0 */
  248. #define MSK_INTERLACE    0x0003
  249.  
  250. /**************************************************************/
  251.  
  252.  
  253. typedef struct {
  254.             /*    Board Configuration */
  255.     int        memloc;     /* memory segment */
  256.     int        iobase;     /*  IOBASE segment */
  257.     int        BytesPerPixel;    /* number of words per pixel */
  258.     int        RowsPerBank;    /* number of row per 64K bank */
  259.     int        MaxBanks;    /*   maximum bank id */
  260.     int        AddressShift;    /*   number of bits to shift address */
  261.  
  262.         /*    Control registers */
  263.     int        mode;        /*  mode register */
  264.     int        Mask;        /*  mask register */
  265.     int        PageMode;    /*  current page mode (screen res. and page) */
  266.     unsigned    PageLower;    /*  Lower Page Select register */
  267.     unsigned    PageUpper;    /*  upper Page select register */
  268.     int        VCRCon;     /*  VCRContract register */
  269.     int        SatHue;     /* Hue and Saturation register */
  270.     long        BorderColor;    /*  Border color register */
  271.     int        VertShift;    /*  Vertical Pan Register */
  272.     int        PanXOrig, PanYOrig;    /* x,y pan origin */
  273.  
  274.         /* TARGA-SET PARAMETERS */
  275.     int    boardType;        /*  See TYPE_XX  IN THIS FILE */
  276.         /*  FOR DEFINITION OF Board Types */
  277.     int    xOffset;        /*  X-offset */
  278.     int    yOffset;        /*  Y-Offset */
  279.     int    LinesPerField;        /*  maximum visible row count */
  280.     int    InterlaceMode;        /*  desired interlace mode */
  281.     int    AlwaysGenLock;        /*  Genlock always on or not  */
  282.     int    Contrast;        /*  Desired Contrast */
  283.     int    Hue;            /*  Desired Hue */
  284.     int    Saturation;        /*  Desired Satuation */
  285.     int    RGBorCV;        /*  CV or RGB Input */
  286.     int    VCRorCamera;        /*  VCR or Camera */
  287.     int    ovrscnAvail, ovrscnOn;    /*  ovrscnAvail  1  if Overscan installed */
  288.                                                             /*  ovrscnOn  1 if overscan is stretching */
  289.         /*    Display Registers */
  290.     int    DisplayRegister[22];
  291.  
  292. } TARStruct;
  293.  
  294.  
  295. /****************************************************************/
  296. /*  Data Definitions */
  297.  
  298. #ifdef TARGA_DATA
  299. #        define    _x_
  300. #        define    eq( val )    =val
  301. #else
  302. #        define    _x_    extern
  303. #        define    eq( val )
  304. #endif
  305.  
  306. _x_ int tseg        eq(    TSEG );
  307. _x_ int tiobase eq(    TIOBASE );
  308.  
  309. _x_ TARStruct        targa;
  310.  
  311. #undef    _x_
  312. #undef    eq
  313.  
  314. #endif
  315.  
  316.