qemu/hw/display
Paolo Bonzini 435262605f vga: sort-of implement word and double-word access modes
Jazz Jackrabbit has a very unusual VGA setup, where it uses odd/even mode
with 256-color graphics.  Probably, it wants to use fast VRAM-to-VRAM
copies without having to store 4 copies of the sprites as needed in mode
X, one for each mod-4 alignment; odd/even mode simplifies the code a
lot if it's okay to place on a 160-pixels horizontal grid.

At the same time, because it wants to use double buffering (a la "mode X")
it uses byte mode, not word mode as is the case in text modes.  In order
to implement the combination of odd/even mode (plane number comes from
bit 0 of the address) and byte mode (use all bytes of VRAM, whereas word
mode only uses bytes 0, 2, 4,... on each of the four planes), we need
to separate the effect on the plane number from the effect on the address.

Implementing the modes properly is a mess in QEMU, because it would
change the layout of VRAM and break migration.  As an approximation,
shift right when the CPU accesses memory instead of shifting left when
the CRT controller reads it.  A hack is needed in order to write font data
properly (see comment in the code), but it works well enough for the game.

Because doubleword and chain4 modes are now independent, chain4 does not
assert anymore that the address is in range.  Instead it just returns
all ones and discards writes, like other modes.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2024-01-18 10:43:14 +01:00
..
acpi-vga-stub.c
acpi-vga.c
artist.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
ati.c hw/display/ati: allow compiling without PIXMAN 2023-11-07 14:04:25 +04:00
ati_2d.c hw/display/ati: allow compiling without PIXMAN 2023-11-07 14:04:25 +04:00
ati_dbg.c ati-vga: Add 30 bit palette access register 2023-11-06 15:58:43 +04:00
ati_int.h ati-vga: Implement fallback for pixman routines 2023-11-06 15:58:45 +04:00
ati_regs.h ati-vga: Add 30 bit palette access register 2023-11-06 15:58:43 +04:00
bcm2835_fb.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
blizzard.c
bochs-display.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
cg3.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
cirrus_vga.c vga: implement horizontal pel panning in graphics modes 2024-01-18 10:43:13 +01:00
cirrus_vga_internal.h
cirrus_vga_isa.c
cirrus_vga_rop.h
cirrus_vga_rop2.h
dpcd.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
edid-generate.c
edid-region.c
exynos4210_fimd.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
framebuffer.c
framebuffer.h
g364fb.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
i2c-ddc.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
jazz_led.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
Kconfig arm/kconfig: XLNX_ZYNQMP_ARM depends on PIXMAN 2023-11-07 14:04:25 +04:00
macfb.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
meson.build configure, meson: rename targetos to host_os 2023-12-31 09:11:29 +01:00
next-fb.c
omap_dss.c
omap_lcdc.c
pl110.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
pl110_template.h
pxa2xx_lcd.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
qxl-logger.c
qxl-render.c
qxl.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
qxl.h Replace "iothread lock" with "BQL" in comments 2024-01-08 10:45:43 -05:00
ramfb-standalone.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
ramfb.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
sii9022.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
sm501.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
ssd0303.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
ssd0323.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
tc6393xb.c
tcx.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
trace-events
trace.h
vga-access.h
vga-helpers.h vga: optimize horizontal pel panning in 256-color modes 2024-01-18 10:43:14 +01:00
vga-isa.c docs/specs/standard-vga: Convert to rST 2023-11-02 12:52:06 +00:00
vga-mmio.c
vga-pci.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
vga.c vga: sort-of implement word and double-word access modes 2024-01-18 10:43:14 +01:00
vga_int.h vga: implement horizontal pel panning in graphics modes 2024-01-18 10:43:13 +01:00
vga_regs.h vga: sort-of implement word and double-word access modes 2024-01-18 10:43:14 +01:00
vhost-user-gpu-pci.c
vhost-user-gpu.c vhost-user-gpu: skip VHOST_USER_GPU_UPDATE when !PIXMAN 2023-11-07 14:04:25 +04:00
vhost-user-vga.c
virtio-dmabuf.c hw/display: fix memleak from virtio_add_resource 2023-10-22 05:18:16 -04:00
virtio-gpu-base.c Fix bugs when VM shutdown with virtio-gpu unplugged 2023-12-26 04:51:07 -05:00
virtio-gpu-gl.c
virtio-gpu-pci-gl.c
virtio-gpu-pci-rutabaga.c virtio-gpu-rutabaga: Add empty interface to fix arm64 crash 2023-11-06 14:25:30 +04:00
virtio-gpu-pci.c virtio-gpu: hostmem 2023-10-16 11:29:56 +04:00
virtio-gpu-rutabaga.c gfxstream + rutabaga: add initial support for gfxstream 2023-10-16 11:29:56 +04:00
virtio-gpu-udmabuf-stubs.c
virtio-gpu-udmabuf.c virtio-gpu-udmabuf: correct naming of QemuDmaBuf size properties 2023-07-17 15:22:28 +04:00
virtio-gpu-virgl.c virtio-gpu-virgl: use D3D11_SHARE_TEXTURE when available 2023-06-27 17:08:56 +02:00
virtio-gpu.c qemu/main-loop: rename qemu_cond_wait_iothread() to qemu_cond_wait_bql() 2024-01-08 10:45:43 -05:00
virtio-vga-gl.c
virtio-vga-rutabaga.c gfxstream + rutabaga: add initial support for gfxstream 2023-10-16 11:29:56 +04:00
virtio-vga.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
virtio-vga.h
vmware_vga.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00
xenfb.c ui/input: Constify QemuInputHandler structure 2023-10-19 23:13:28 +02:00
xlnx_dp.c hw/display: Constify VMState 2023-12-29 11:17:30 +11:00