|
10 | 10 | * |
11 | 11 | * Uses code from libxcvt to calculate CRTC timings. |
12 | 12 | * |
13 | | - * Authors: Cacodemon345 |
| 13 | + * Authors: Christopher Lentocha |
| 14 | + * Cacodemon345 |
14 | 15 | * The Bochs Project |
15 | 16 | * Fabrice Bellard |
16 | 17 | * The libxcvt authors |
17 | 18 | * |
| 19 | + * Copyright 2025 Christopher Lentocha |
18 | 20 | * Copyright 2024 Cacodemon345 |
19 | 21 | * Copyright 2003 Fabrice Bellard |
20 | 22 | * Copyright 2002-2024 The Bochs Project |
|
63 | 65 | #define VBE_DISPI_INDEX_Y_OFFSET 0x9 |
64 | 66 | #define VBE_DISPI_INDEX_VIDEO_MEMORY_64K 0xa |
65 | 67 | #define VBE_DISPI_INDEX_DDC 0xb |
| 68 | +#define VBE_DISPI_INDEX_CFG 0xc |
66 | 69 |
|
67 | 70 | #define VBE_DISPI_ID0 0xB0C0 |
68 | 71 | #define VBE_DISPI_ID1 0xB0C1 |
69 | 72 | #define VBE_DISPI_ID2 0xB0C2 |
70 | 73 | #define VBE_DISPI_ID3 0xB0C3 |
71 | 74 | #define VBE_DISPI_ID4 0xB0C4 |
72 | 75 | #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 |
73 | 80 |
|
74 | 81 | #define VBE_DISPI_DISABLED 0x00 |
75 | 82 | #define VBE_DISPI_ENABLED 0x01 |
|
83 | 90 | #define VBE_DISPI_BANK_RD 0x8000 |
84 | 91 | #define VBE_DISPI_BANK_RW 0xc000 |
85 | 92 |
|
| 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 | + |
86 | 102 | typedef struct vbe_mode_info_t { |
87 | 103 | uint32_t hdisplay; |
88 | 104 | uint32_t vdisplay; |
@@ -409,6 +425,28 @@ bochs_vbe_inw(const uint16_t addr, void *priv) |
409 | 425 | } else |
410 | 426 | ret = 0x000f; |
411 | 427 | 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; |
412 | 450 | } |
413 | 451 |
|
414 | 452 | return ret; |
@@ -440,7 +478,7 @@ bochs_vbe_outw(const uint16_t addr, const uint16_t val, void *priv) |
440 | 478 | default: |
441 | 479 | break; |
442 | 480 | 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)) |
444 | 482 | dev->vbe_regs[dev->vbe_index] = val; |
445 | 483 | else if (val == VBE_DISPI_ID5) |
446 | 484 | dev->vbe_regs[dev->vbe_index] = dev->id5_val; |
@@ -923,9 +961,16 @@ static const device_config_t bochs_vbe_config[] = { |
923 | 961 | .file_filter = NULL, |
924 | 962 | .spinner = { 0 }, |
925 | 963 | .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 }, |
929 | 974 | { .description = "" } |
930 | 975 | }, |
931 | 976 | .bios = { { 0 } } |
|
0 commit comments