/*
*    DivaPC ARM C source
*
*    VID.C.TABLES  - Externals for video tables
*
*
*    07-02-92 INH  Original
*                  Palette defs added
*    27-02-92      Redefined palette tables
*    12-03-92      Brighter default colours 0x2A->0x31
*    16-01-93      Font Position added (VGAHDW bug)
*    29-05-93      Mode 6 uses logical colour 1
*    18-01-96	   8x10font, BitReverse, FontPosition deleted
*/

#include "sys.h.stdtypes"
#include "vid.h.tables"


/* 4 to 32 table: ******************************************************

   Used for expanding colour bits for graphics ops

   In TBL_4to32, 4- bit pattern  0000abcd

   is expanded to the 32 bits abcdabcd abcdabcd abcdabcd abcdabcd

*/

int  TBL_4to32[] =
  {
    0x00000000, 0x11111111, 0x22222222, 0x33333333,
    0x44444444, 0x55555555, 0x66666666, 0x77777777,
    0x88888888, 0x99999999, 0xAAAAAAAA, 0xBBBBBBBB,
    0xCCCCCCCC, 0xDDDDDDDD, 0xEEEEEEEE, 0xFFFFFFFF
  };


/* 8 to 32 table: ******************************************************

   Used as a quick way of expanding pixel on/off bits for graphics ops;
   Because the PC has bit 7 = Leftmost bit, whereas Arm has bit 7 =
   Rightmost bit, the table is bit-reversed as well

   In other words, 8 bit pattern  abcdefgh

   is expanded to 32-bit pattern hhhhgggg ffffeeee ddddcccc bbbbaaaa


*/

int  TBL_8to32[] =
  {
     0x00000000, 0xF0000000, 0x0F000000, 0xFF000000,
     0x00F00000, 0xF0F00000, 0x0FF00000, 0xFFF00000,
     0x000F0000, 0xF00F0000, 0x0F0F0000, 0xFF0F0000,
     0x00FF0000, 0xF0FF0000, 0x0FFF0000, 0xFFFF0000,
     0x0000F000, 0xF000F000, 0x0F00F000, 0xFF00F000,
     0x00F0F000, 0xF0F0F000, 0x0FF0F000, 0xFFF0F000,
     0x000FF000, 0xF00FF000, 0x0F0FF000, 0xFF0FF000,
     0x00FFF000, 0xF0FFF000, 0x0FFFF000, 0xFFFFF000,
     0x00000F00, 0xF0000F00, 0x0F000F00, 0xFF000F00,
     0x00F00F00, 0xF0F00F00, 0x0FF00F00, 0xFFF00F00,
     0x000F0F00, 0xF00F0F00, 0x0F0F0F00, 0xFF0F0F00,
     0x00FF0F00, 0xF0FF0F00, 0x0FFF0F00, 0xFFFF0F00,
     0x0000FF00, 0xF000FF00, 0x0F00FF00, 0xFF00FF00,
     0x00F0FF00, 0xF0F0FF00, 0x0FF0FF00, 0xFFF0FF00,
     0x000FFF00, 0xF00FFF00, 0x0F0FFF00, 0xFF0FFF00,
     0x00FFFF00, 0xF0FFFF00, 0x0FFFFF00, 0xFFFFFF00,
     0x000000F0, 0xF00000F0, 0x0F0000F0, 0xFF0000F0,
     0x00F000F0, 0xF0F000F0, 0x0FF000F0, 0xFFF000F0,
     0x000F00F0, 0xF00F00F0, 0x0F0F00F0, 0xFF0F00F0,
     0x00FF00F0, 0xF0FF00F0, 0x0FFF00F0, 0xFFFF00F0,
     0x0000F0F0, 0xF000F0F0, 0x0F00F0F0, 0xFF00F0F0,
     0x00F0F0F0, 0xF0F0F0F0, 0x0FF0F0F0, 0xFFF0F0F0,
     0x000FF0F0, 0xF00FF0F0, 0x0F0FF0F0, 0xFF0FF0F0,
     0x00FFF0F0, 0xF0FFF0F0, 0x0FFFF0F0, 0xFFFFF0F0,
     0x00000FF0, 0xF0000FF0, 0x0F000FF0, 0xFF000FF0,
     0x00F00FF0, 0xF0F00FF0, 0x0FF00FF0, 0xFFF00FF0,
     0x000F0FF0, 0xF00F0FF0, 0x0F0F0FF0, 0xFF0F0FF0,
     0x00FF0FF0, 0xF0FF0FF0, 0x0FFF0FF0, 0xFFFF0FF0,
     0x0000FFF0, 0xF000FFF0, 0x0F00FFF0, 0xFF00FFF0,
     0x00F0FFF0, 0xF0F0FFF0, 0x0FF0FFF0, 0xFFF0FFF0,
     0x000FFFF0, 0xF00FFFF0, 0x0F0FFFF0, 0xFF0FFFF0,
     0x00FFFFF0, 0xF0FFFFF0, 0x0FFFFFF0, 0xFFFFFFF0,
     0x0000000F, 0xF000000F, 0x0F00000F, 0xFF00000F,
     0x00F0000F, 0xF0F0000F, 0x0FF0000F, 0xFFF0000F,
     0x000F000F, 0xF00F000F, 0x0F0F000F, 0xFF0F000F,
     0x00FF000F, 0xF0FF000F, 0x0FFF000F, 0xFFFF000F,
     0x0000F00F, 0xF000F00F, 0x0F00F00F, 0xFF00F00F,
     0x00F0F00F, 0xF0F0F00F, 0x0FF0F00F, 0xFFF0F00F,
     0x000FF00F, 0xF00FF00F, 0x0F0FF00F, 0xFF0FF00F,
     0x00FFF00F, 0xF0FFF00F, 0x0FFFF00F, 0xFFFFF00F,
     0x00000F0F, 0xF0000F0F, 0x0F000F0F, 0xFF000F0F,
     0x00F00F0F, 0xF0F00F0F, 0x0FF00F0F, 0xFFF00F0F,
     0x000F0F0F, 0xF00F0F0F, 0x0F0F0F0F, 0xFF0F0F0F,
     0x00FF0F0F, 0xF0FF0F0F, 0x0FFF0F0F, 0xFFFF0F0F,
     0x0000FF0F, 0xF000FF0F, 0x0F00FF0F, 0xFF00FF0F,
     0x00F0FF0F, 0xF0F0FF0F, 0x0FF0FF0F, 0xFFF0FF0F,
     0x000FFF0F, 0xF00FFF0F, 0x0F0FFF0F, 0xFF0FFF0F,
     0x00FFFF0F, 0xF0FFFF0F, 0x0FFFFF0F, 0xFFFFFF0F,
     0x000000FF, 0xF00000FF, 0x0F0000FF, 0xFF0000FF,
     0x00F000FF, 0xF0F000FF, 0x0FF000FF, 0xFFF000FF,
     0x000F00FF, 0xF00F00FF, 0x0F0F00FF, 0xFF0F00FF,
     0x00FF00FF, 0xF0FF00FF, 0x0FFF00FF, 0xFFFF00FF,
     0x0000F0FF, 0xF000F0FF, 0x0F00F0FF, 0xFF00F0FF,
     0x00F0F0FF, 0xF0F0F0FF, 0x0FF0F0FF, 0xFFF0F0FF,
     0x000FF0FF, 0xF00FF0FF, 0x0F0FF0FF, 0xFF0FF0FF,
     0x00FFF0FF, 0xF0FFF0FF, 0x0FFFF0FF, 0xFFFFF0FF,
     0x00000FFF, 0xF0000FFF, 0x0F000FFF, 0xFF000FFF,
     0x00F00FFF, 0xF0F00FFF, 0x0FF00FFF, 0xFFF00FFF,
     0x000F0FFF, 0xF00F0FFF, 0x0F0F0FFF, 0xFF0F0FFF,
     0x00FF0FFF, 0xF0FF0FFF, 0x0FFF0FFF, 0xFFFF0FFF,
     0x0000FFFF, 0xF000FFFF, 0x0F00FFFF, 0xFF00FFFF,
     0x00F0FFFF, 0xF0F0FFFF, 0x0FF0FFFF, 0xFFF0FFFF,
     0x000FFFFF, 0xF00FFFFF, 0x0F0FFFFF, 0xFF0FFFFF,
     0x00FFFFFF, 0xF0FFFFFF, 0x0FFFFFFF, 0xFFFFFFFF

  };

/* CGA graphics mode pixel expand tables. ************************

     To conserve space, in CGA graphics modes pixels are expanded
     4 bits at a time. There are two tables here: the first is for
     CGA modes 4 and 5, where 1 PC pixel is expanded to 2 ARM pixels,
     and the second is for CGA mode 6.

     In TBL_Mode6Expand, 4-bit pattern  0000abcd
     is expanded to    00000000 00000000 000d 000c 000b 000a

     In TBL_Modes45Expand,   0000abcd
     is expanded to    00000000 00000000 00cd 00cd 00ab 00ab

*/

int   TBL_Mode6Expand[] =
   {
      0x0000, 0x1000, 0x0100, 0x1100,
      0x0010, 0x1010, 0x0110, 0x1110,
      0x0001, 0x1001, 0x0101, 0x1101,
      0x0011, 0x1011, 0x0111, 0x1111
   };

int   TBL_Modes45Expand[] =
   {
      0x0000, 0x1100, 0x2200, 0x3300,
      0x0011, 0x1111, 0x2211, 0x3311,
      0x0022, 0x1122, 0x2222, 0x3322,
      0x0033, 0x1133, 0x2233, 0x3333
   };


   /* TBL_PlaneMask:

      In VGA read mode 0, the CPU reads data from a graphics plane
       selected by the Read Map Select register; this table translates
       between valid values for this register and a bit mask for the
       required plane.

     'BytePlaneMask' is the same for VGA256 read modes.
   */

int   TBL_PlaneMask[] =
   { 0x11111111, 0x22222222, 0x44444444, 0x88888888 };

int   TBL_BytePlaneMask[] =
   { 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000 };


   /* TBL_ByteExpand:

      Used in VGA256 modes to convert from a 4-bit plane mask value
      into a plane mask word
   */

int   TBL_ByteExpand[] =

  { 0x00000000, 0x000000FF, 0x0000FF00, 0x0000FFFF,
    0x00FF0000, 0x00FF00FF, 0x00FFFF00, 0x00FFFFFF,
    0xFF000000, 0xFF0000FF, 0xFF00FF00, 0xFF00FFFF,
    0xFFFF0000, 0xFFFF00FF, 0xFFFFFF00, 0xFFFFFFFF
  };




/* Mono attribute lookup -
   used to translate PC attributes in mono mode into the
   actual background & foregound colours on the screen.

   Input value = PC attributes abbbcddd
   ( a = 1 if blinking;
     bbb = 000 for black background,
           non-zero for white background,
     c = 1 if foreground intense,
     d = 000 for black foreground
         non-zero for white foreground
   )

   Output value = ARM draw colour eeffgghh
   eeff = colour to draw char background
   gghh = colour to draw foreground

   ee, ff, gg, hh are as follows:
     00 = black
     01 = white
     10 = "Attrib 08" - usually white
     11 = intense white

   ff, hh give the normal displayed colours and ee,gg give the
   colours while blinking is happening.


*/

BYTE  TBL_MonoAttribTbl[256] =
   { 0x00, 0x05, 0x05, 0x05,  0x05, 0x05, 0x05, 0x05,
     0x0A, 0x0F, 0x0F, 0x0F,  0x0F, 0x0F, 0x0F, 0x0F,
     0x50, 0x55, 0x55, 0x55,  0x55, 0x55, 0x55, 0x55,
     0x5A, 0x5F, 0x5F, 0x5F,  0x5F, 0x5F, 0x5F, 0x5F,

     0x50, 0x55, 0x55, 0x55,  0x55, 0x55, 0x55, 0x55,
     0x5A, 0x5F, 0x5F, 0x5F,  0x5F, 0x5F, 0x5F, 0x5F,
     0x50, 0x55, 0x55, 0x55,  0x55, 0x55, 0x55, 0x55,
     0x5A, 0x5F, 0x5F, 0x5F,  0x5F, 0x5F, 0x5F, 0x5F,

     0x50, 0x55, 0x55, 0x55,  0x55, 0x55, 0x55, 0x55,
     0x5A, 0x5F, 0x5F, 0x5F,  0x5F, 0x5F, 0x5F, 0x5F,
     0x50, 0x55, 0x55, 0x55,  0x55, 0x55, 0x55, 0x55,
     0x5A, 0x5F, 0x5F, 0x5F,  0x5F, 0x5F, 0x5F, 0x5F,

     0x50, 0x55, 0x55, 0x55,  0x55, 0x55, 0x55, 0x55,
     0x5A, 0x5F, 0x5F, 0x5F,  0x5F, 0x5F, 0x5F, 0x5F,
     0x50, 0x55, 0x55, 0x55,  0x55, 0x55, 0x55, 0x55,
     0x5A, 0x5F, 0x5F, 0x5F,  0x5F, 0x5F, 0x5F, 0x5F,

     0x00, 0x01, 0x01, 0x01,  0x01, 0x01, 0x01, 0x01,
     0x02, 0x03, 0x03, 0x03,  0x03, 0x03, 0x03, 0x03,
     0x54, 0x55, 0x55, 0x55,  0x55, 0x55, 0x55, 0x55,
     0x56, 0x57, 0x57, 0x57,  0x57, 0x57, 0x57, 0x57,

     0x54, 0x55, 0x55, 0x55,  0x55, 0x55, 0x55, 0x55,
     0x56, 0x57, 0x57, 0x57,  0x57, 0x57, 0x57, 0x57,
     0x54, 0x55, 0x55, 0x55,  0x55, 0x55, 0x55, 0x55,
     0x56, 0x57, 0x57, 0x57,  0x57, 0x57, 0x57, 0x57,

     0x54, 0x55, 0x55, 0x55,  0x55, 0x55, 0x55, 0x55,
     0x56, 0x57, 0x57, 0x57,  0x57, 0x57, 0x57, 0x57,
     0x54, 0x55, 0x55, 0x55,  0x55, 0x55, 0x55, 0x55,
     0x56, 0x57, 0x57, 0x57,  0x57, 0x57, 0x57, 0x57,

     0x54, 0x55, 0x55, 0x55,  0x55, 0x55, 0x55, 0x55,
     0x56, 0x57, 0x57, 0x57,  0x57, 0x57, 0x57, 0x57,
     0x54, 0x55, 0x55, 0x55,  0x55, 0x55, 0x55, 0x55,
     0x56, 0x57, 0x57, 0x57,  0x57, 0x57, 0x57, 0x57
};

