From de9258a87f8cf142b8d565a3c14d3db7a5a1c14b Mon Sep 17 00:00:00 2001 From: bellard Date: Sun, 6 Jun 2004 15:50:03 +0000 Subject: [PATCH] specific VGA BIOS for Cirrus VGA Card git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@905 c046a42c-6fe2-441c-8c8c-71466251a162 --- Makefile | 2 ++ hw/pc.c | 7 ++++++- pc-bios/README | 4 ++++ pc-bios/vgabios-cirrus.bin | Bin 0 -> 26784 bytes 4 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 pc-bios/vgabios-cirrus.bin diff --git a/Makefile b/Makefile index 4137e9b95..d4c4b0ffe 100644 --- a/Makefile +++ b/Makefile @@ -50,6 +50,7 @@ ifndef CONFIG_WIN32 endif mkdir -p "$(datadir)" install -m 644 pc-bios/bios.bin pc-bios/vgabios.bin \ + pc-bios/vgabios-cirrus.bin \ pc-bios/linux_boot.bin "$(datadir)" mkdir -p "$(docdir)" install -m 644 qemu-doc.html qemu-tech.html "$(docdir)" @@ -97,6 +98,7 @@ tarbin: $(bindir)/qemu-mkcow $(bindir)/vmdk2raw \ $(datadir)/bios.bin \ $(datadir)/vgabios.bin \ + $(datadir)/vgabios-cirrus.bin \ $(datadir)/linux_boot.bin \ $(docdir)/qemu-doc.html \ $(docdir)/qemu-tech.html \ diff --git a/hw/pc.c b/hw/pc.c index 788854b29..a40e1d03f 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -28,6 +28,7 @@ #define BIOS_FILENAME "bios.bin" #define VGABIOS_FILENAME "vgabios.bin" +#define VGABIOS_CIRRUS_FILENAME "vgabios-cirrus.bin" #define LINUX_BOOT_FILENAME "linux_boot.bin" #define KERNEL_LOAD_ADDR 0x00100000 @@ -320,7 +321,11 @@ void pc_init(int ram_size, int vga_ram_size, int boot_device, } /* VGA BIOS load */ - snprintf(buf, sizeof(buf), "%s/%s", bios_dir, VGABIOS_FILENAME); + if (cirrus_vga_enabled) { + snprintf(buf, sizeof(buf), "%s/%s", bios_dir, VGABIOS_CIRRUS_FILENAME); + } else { + snprintf(buf, sizeof(buf), "%s/%s", bios_dir, VGABIOS_FILENAME); + } ret = load_image(buf, phys_ram_base + 0x000c0000); /* setup basic memory access */ diff --git a/pc-bios/README b/pc-bios/README index b5f0bc9e2..b5e9bf709 100644 --- a/pc-bios/README +++ b/pc-bios/README @@ -3,3 +3,7 @@ - The VGA BIOS comes from the LGPL VGA bios project (http://www.nongnu.org/vgabios/). + +- The Cirrus VGA BIOS comes from the LGPL VGA bios project with + patches from http://ebisa.hp.infoseek.co.jp/bochs/index.shtml. + \ No newline at end of file diff --git a/pc-bios/vgabios-cirrus.bin b/pc-bios/vgabios-cirrus.bin new file mode 100644 index 0000000000000000000000000000000000000000..f393404b623a6e05e72923813c3c113c5fcf7eb9 GIT binary patch literal 26784 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 literal 0 HcmV?d00001