Commit 37dd208d38ab9f65f9e15fd7fe2f0b75bc83220a

Authored by bellard
1 parent 05f83f0f

VBE: 8 bit DACs + support for VBE BIOS IDs (Volker Ruppert)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2163 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 2 changed files with 16 additions and 4 deletions
hw/vga.c
@@ -422,7 +422,9 @@ static void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val) @@ -422,7 +422,9 @@ static void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val)
422 case VBE_DISPI_INDEX_ID: 422 case VBE_DISPI_INDEX_ID:
423 if (val == VBE_DISPI_ID0 || 423 if (val == VBE_DISPI_ID0 ||
424 val == VBE_DISPI_ID1 || 424 val == VBE_DISPI_ID1 ||
425 - val == VBE_DISPI_ID2) { 425 + val == VBE_DISPI_ID2 ||
  426 + val == VBE_DISPI_ID3 ||
  427 + val == VBE_DISPI_ID4) {
426 s->vbe_regs[s->vbe_index] = val; 428 s->vbe_regs[s->vbe_index] = val;
427 } 429 }
428 break; 430 break;
@@ -505,6 +507,7 @@ static void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val) @@ -505,6 +507,7 @@ static void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val)
505 /* XXX: the bios should do that */ 507 /* XXX: the bios should do that */
506 s->bank_offset = 0; 508 s->bank_offset = 0;
507 } 509 }
  510 + s->dac_8bit = (val & VBE_DISPI_8BIT_DAC) > 0;
508 s->vbe_regs[s->vbe_index] = val; 511 s->vbe_regs[s->vbe_index] = val;
509 break; 512 break;
510 case VBE_DISPI_INDEX_VIRT_WIDTH: 513 case VBE_DISPI_INDEX_VIRT_WIDTH:
@@ -921,9 +924,15 @@ static int update_palette256(VGAState *s) @@ -921,9 +924,15 @@ static int update_palette256(VGAState *s)
921 palette = s->last_palette; 924 palette = s->last_palette;
922 v = 0; 925 v = 0;
923 for(i = 0; i < 256; i++) { 926 for(i = 0; i < 256; i++) {
924 - col = s->rgb_to_pixel(c6_to_8(s->palette[v]),  
925 - c6_to_8(s->palette[v + 1]),  
926 - c6_to_8(s->palette[v + 2])); 927 + if (s->dac_8bit) {
  928 + col = s->rgb_to_pixel(s->palette[v],
  929 + s->palette[v + 1],
  930 + s->palette[v + 2]);
  931 + } else {
  932 + col = s->rgb_to_pixel(c6_to_8(s->palette[v]),
  933 + c6_to_8(s->palette[v + 1]),
  934 + c6_to_8(s->palette[v + 2]));
  935 + }
927 if (col != palette[i]) { 936 if (col != palette[i]) {
928 full_update = 1; 937 full_update = 1;
929 palette[i] = col; 938 palette[i] = col;
hw/vga_int.h
@@ -49,6 +49,8 @@ @@ -49,6 +49,8 @@
49 #define VBE_DISPI_ID0 0xB0C0 49 #define VBE_DISPI_ID0 0xB0C0
50 #define VBE_DISPI_ID1 0xB0C1 50 #define VBE_DISPI_ID1 0xB0C1
51 #define VBE_DISPI_ID2 0xB0C2 51 #define VBE_DISPI_ID2 0xB0C2
  52 +#define VBE_DISPI_ID3 0xB0C3
  53 +#define VBE_DISPI_ID4 0xB0C4
52 54
53 #define VBE_DISPI_DISABLED 0x00 55 #define VBE_DISPI_DISABLED 0x00
54 #define VBE_DISPI_ENABLED 0x01 56 #define VBE_DISPI_ENABLED 0x01
@@ -103,6 +105,7 @@ @@ -103,6 +105,7 @@
103 uint8_t dac_read_index; \ 105 uint8_t dac_read_index; \
104 uint8_t dac_write_index; \ 106 uint8_t dac_write_index; \
105 uint8_t dac_cache[3]; /* used when writing */ \ 107 uint8_t dac_cache[3]; /* used when writing */ \
  108 + int dac_8bit; \
106 uint8_t palette[768]; \ 109 uint8_t palette[768]; \
107 int32_t bank_offset; \ 110 int32_t bank_offset; \
108 int (*get_bpp)(struct VGAState *s); \ 111 int (*get_bpp)(struct VGAState *s); \