Skip to content

Commit 18e73bd

Browse files
committed
Add Initial Support for VBoxVGA Emulation in 86Box
Signed-off-by: Christopher Lentocha <christopherericlentocha@gmail.com>
1 parent 9b39181 commit 18e73bd

1 file changed

Lines changed: 50 additions & 5 deletions

File tree

src/video/vid_bochs_vbe.c

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
*
1111
* Uses code from libxcvt to calculate CRTC timings.
1212
*
13-
* Authors: Cacodemon345
13+
* Authors: Christopher Lentocha
14+
* Cacodemon345
1415
* The Bochs Project
1516
* Fabrice Bellard
1617
* The libxcvt authors
1718
*
19+
* Copyright 2025 Christopher Lentocha
1820
* Copyright 2024 Cacodemon345
1921
* Copyright 2003 Fabrice Bellard
2022
* Copyright 2002-2024 The Bochs Project
@@ -63,13 +65,18 @@
6365
#define VBE_DISPI_INDEX_Y_OFFSET 0x9
6466
#define VBE_DISPI_INDEX_VIDEO_MEMORY_64K 0xa
6567
#define VBE_DISPI_INDEX_DDC 0xb
68+
#define VBE_DISPI_INDEX_CFG 0xc
6669

6770
#define VBE_DISPI_ID0 0xB0C0
6871
#define VBE_DISPI_ID1 0xB0C1
6972
#define VBE_DISPI_ID2 0xB0C2
7073
#define VBE_DISPI_ID3 0xB0C3
7174
#define VBE_DISPI_ID4 0xB0C4
7275
#define VBE_DISPI_ID5 0xB0C5
76+
#define VBE_DISPI_ID_VBOX_VIDEO 0xBE00
77+
#define VBE_DISPI_ID_HGSMI 0xBE01
78+
#define VBE_DISPI_ID_ANYX 0xBE02
79+
#define VBE_DISPI_ID_CFG 0xBE03
7380

7481
#define VBE_DISPI_DISABLED 0x00
7582
#define VBE_DISPI_ENABLED 0x01
@@ -83,6 +90,15 @@
8390
#define VBE_DISPI_BANK_RD 0x8000
8491
#define VBE_DISPI_BANK_RW 0xc000
8592

93+
/* VBE_DISPI_INDEX_CFG values. */
94+
#define VBE_DISPI_CFG_ID_VERSION \
95+
0x0000 /* Version of the configuration interface. */
96+
#define VBE_DISPI_CFG_ID_VRAM_SIZE 0x0001 /* VRAM size. */
97+
#define VBE_DISPI_CFG_ID_3D 0x0002 /* 3D support. */
98+
#define VBE_DISPI_CFG_ID_VMSVGA \
99+
0x0003 /* VMSVGA FIFO and ports are available. */
100+
#define VBE_DISPI_CFG_ID_VMSVGA_DX 0x0004 /* VGPU10 is enabled. */
101+
86102
typedef struct vbe_mode_info_t {
87103
uint32_t hdisplay;
88104
uint32_t vdisplay;
@@ -409,6 +425,28 @@ bochs_vbe_inw(const uint16_t addr, void *priv)
409425
} else
410426
ret = 0x000f;
411427
break;
428+
case VBE_DISPI_INDEX_CFG:
429+
switch (dev->vbe_regs[dev->vbe_index] & 0x1000) {
430+
case VBE_DISPI_CFG_ID_VERSION:
431+
ret = 1;
432+
break;
433+
case VBE_DISPI_CFG_ID_VRAM_SIZE:
434+
ret = dev->vram_size;
435+
break;
436+
case VBE_DISPI_CFG_ID_3D:
437+
ret = 1;
438+
break;
439+
case VBE_DISPI_CFG_ID_VMSVGA:
440+
ret = 0;
441+
break;
442+
case VBE_DISPI_CFG_ID_VMSVGA_DX:
443+
ret = 0;
444+
break;
445+
default:
446+
ret = 0;
447+
break;
448+
}
449+
break;
412450
}
413451

414452
return ret;
@@ -440,7 +478,7 @@ bochs_vbe_outw(const uint16_t addr, const uint16_t val, void *priv)
440478
default:
441479
break;
442480
case VBE_DISPI_INDEX_ID:
443-
if ((val == VBE_DISPI_ID0) || (val == VBE_DISPI_ID1) || (val == VBE_DISPI_ID2) || (val == VBE_DISPI_ID3) || (val == VBE_DISPI_ID4))
481+
if ((val == VBE_DISPI_ID0) || (val == VBE_DISPI_ID1) || (val == VBE_DISPI_ID2) || (val == VBE_DISPI_ID3) || (val == VBE_DISPI_ID4) || (val == VBE_DISPI_ID_VBOX_VIDEO) || (val == VBE_DISPI_ID_ANYX) || (val == VBE_DISPI_ID_CFG))
444482
dev->vbe_regs[dev->vbe_index] = val;
445483
else if (val == VBE_DISPI_ID5)
446484
dev->vbe_regs[dev->vbe_index] = dev->id5_val;
@@ -923,9 +961,16 @@ static const device_config_t bochs_vbe_config[] = {
923961
.file_filter = NULL,
924962
.spinner = { 0 },
925963
.selection = {
926-
{ .description = "4 MB", .value = 4 },
927-
{ .description = "8 MB", .value = 8 },
928-
{ .description = "16 MB", .value = 16 },
964+
{ .description = "1 MB", .value = 1 },
965+
{ .description = "2 MB", .value = 2 },
966+
{ .description = "4 MB", .value = 4 },
967+
{ .description = "8 MB", .value = 8 },
968+
{ .description = "16 MB", .value = 16 },
969+
{ .description = "32 MB", .value = 32 },
970+
{ .description = "64 MB", .value = 64 },
971+
{ .description = "128 MB", .value = 128 },
972+
{ .description = "256 MB", .value = 256 },
973+
{ .description = "512 MB", .value = 512 },
929974
{ .description = "" }
930975
},
931976
.bios = { { 0 } }

0 commit comments

Comments
 (0)