trunk/src/emu/video/pc_vga.c
| r20021 | r20022 | |
| 997 | 997 | int x,y; |
| 998 | 998 | UINT16 cx = s3.cursor_x & 0x07ff; |
| 999 | 999 | UINT16 cy = s3.cursor_y & 0x07ff; |
| 1000 | UINT32 bg_col; |
| 1001 | UINT32 fg_col; |
| 1000 | 1002 | |
| 1001 | 1003 | if(cur_mode == SCREEN_OFF || cur_mode == TEXT_MODE || cur_mode == MONO_MODE || cur_mode == CGA_MODE || cur_mode == EGA_MODE) |
| 1002 | 1004 | return 0; // cursor only works in VGA or SVGA modes |
| 1003 | 1005 | |
| 1004 | 1006 | 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)); |
| 1005 | 1039 | // for(x=0;x<64;x++) |
| 1006 | 1040 | // 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]); |
| 1007 | 1041 | for(y=0;y<64;y++) |
| r20021 | r20022 | |
| 1023 | 1057 | // no change |
| 1024 | 1058 | break; |
| 1025 | 1059 | case 0x02: |
| 1026 | | dst[x] = screen.machine().pens[s3.cursor_bg[0]]; |
| 1060 | dst[x] = bg_col; |
| 1027 | 1061 | break; |
| 1028 | 1062 | case 0x03: |
| 1029 | | dst[x] = screen.machine().pens[s3.cursor_fg[0]]; |
| 1063 | dst[x] = fg_col; |
| 1030 | 1064 | break; |
| 1031 | 1065 | } |
| 1032 | 1066 | } |
| r20021 | r20022 | |
| 1035 | 1069 | switch(val) |
| 1036 | 1070 | { |
| 1037 | 1071 | case 0x00: |
| 1038 | | dst[x] = screen.machine().pens[s3.cursor_bg[0]]; |
| 1072 | dst[x] = bg_col; |
| 1039 | 1073 | break; |
| 1040 | 1074 | case 0x01: |
| 1041 | | dst[x] = screen.machine().pens[s3.cursor_fg[0]]; |
| 1075 | dst[x] = fg_col; |
| 1042 | 1076 | break; |
| 1043 | 1077 | case 0x02: // screen data |
| 1044 | 1078 | // no change |