Previous 199869 Revisions Next

r20022 Wednesday 2nd January, 2013 at 22:22:14 UTC by Angelo Salese
Fixed HW cursor color in RGB16 mode
[src/emu/video]pc_vga.c

trunk/src/emu/video/pc_vga.c
r20021r20022
997997      int x,y;
998998      UINT16 cx = s3.cursor_x & 0x07ff;
999999      UINT16 cy = s3.cursor_y & 0x07ff;
1000      UINT32 bg_col;
1001      UINT32 fg_col;
10001002
10011003      if(cur_mode == SCREEN_OFF || cur_mode == TEXT_MODE || cur_mode == MONO_MODE || cur_mode == CGA_MODE || cur_mode == EGA_MODE)
10021004         return 0;  // cursor only works in VGA or SVGA modes
10031005
10041006      src = s3.cursor_start_addr * 1024;  // start address is in units of 1024 bytes
1007
1008      if(cur_mode == RGB16_MODE)
1009      {
1010         int r,g,b;
1011         UINT16 datax;
1012
1013         datax = s3.cursor_bg[0]|s3.cursor_bg[1]<<8;
1014         r = (datax&0xf800)>>11;
1015         g = (datax&0x07e0)>>5;
1016         b = (datax&0x001f)>>0;
1017         r = (r << 3) | (r & 0x7);
1018         g = (g << 2) | (g & 0x3);
1019         b = (b << 3) | (b & 0x7);
1020         bg_col = (0xff<<24)|(r<<16)|(g<<8)|(b<<0);
1021
1022         datax = s3.cursor_fg[0]|s3.cursor_fg[1]<<8;
1023         r = (datax&0xf800)>>11;
1024         g = (datax&0x07e0)>>5;
1025         b = (datax&0x001f)>>0;
1026         r = (r << 3) | (r & 0x7);
1027         g = (g << 2) | (g & 0x3);
1028         b = (b << 3) | (b & 0x7);
1029         fg_col = (0xff<<24)|(r<<16)|(g<<8)|(b<<0);
1030      }
1031      else /* TODO: other modes */
1032      {
1033         bg_col = screen.machine().pens[s3.cursor_bg[0]];
1034         fg_col = screen.machine().pens[s3.cursor_fg[0]];
1035      }
1036
1037      //popmessage("%08x %08x",(s3.cursor_bg[0])|(s3.cursor_bg[1]<<8)|(s3.cursor_bg[2]<<16)|(s3.cursor_bg[3]<<24)
1038      //                 ,(s3.cursor_fg[0])|(s3.cursor_fg[1]<<8)|(s3.cursor_fg[2]<<16)|(s3.cursor_fg[3]<<24));
10051039//      for(x=0;x<64;x++)
10061040//          printf("%08x: %02x %02x %02x %02x\n",src+x*4,vga.memory[src+x*4],vga.memory[src+x*4+1],vga.memory[src+x*4+2],vga.memory[src+x*4+3]);
10071041      for(y=0;y<64;y++)
r20021r20022
10231057                  // no change
10241058                  break;
10251059               case 0x02:
1026                  dst[x] = screen.machine().pens[s3.cursor_bg[0]];
1060                  dst[x] = bg_col;
10271061                  break;
10281062               case 0x03:
1029                  dst[x] = screen.machine().pens[s3.cursor_fg[0]];
1063                  dst[x] = fg_col;
10301064                  break;
10311065               }
10321066            }
r20021r20022
10351069               switch(val)
10361070               {
10371071               case 0x00:
1038                  dst[x] = screen.machine().pens[s3.cursor_bg[0]];
1072                  dst[x] = bg_col;
10391073                  break;
10401074               case 0x01:
1041                  dst[x] = screen.machine().pens[s3.cursor_fg[0]];
1075                  dst[x] = fg_col;
10421076                  break;
10431077               case 0x02:  // screen data
10441078                  // no change

Previous 199869 Revisions Next


© 1997-2024 The MAME Team