From 8d885577ce51a035828857079469d719249f5840 Mon Sep 17 00:00:00 2001 From: Nicholas Chin Date: Sat, 28 Aug 2021 09:40:41 -0600 Subject: payloads/external: Add support for coreDOOM payload coreDOOM is a port of DOOM to libpayload, based on the doomgeneric source port. It renders the game to the coreboot linear framebuffer, and loads WAD files from CBFS. Tested with QEMU i440fx/q35 and a Dell Latitude E6400 using the libgfxinit provided linear framebuffer. Project page: https://github.com/nic3-14159/coreDOOM Signed-off-by: Nicholas Chin Change-Id: Ice0403b003a4b2717afee585f28303c2f5abea5d Reviewed-on: https://review.coreboot.org/c/coreboot/+/57222 Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel Reviewed-by: Martin L Roth --- payloads/Kconfig | 10 ++++++++ payloads/Makefile.inc | 1 + payloads/external/Makefile.inc | 16 +++++++++++++ payloads/external/SeaBIOS/Kconfig | 1 + payloads/external/coreDOOM/Kconfig.secondary | 25 ++++++++++++++++++++ payloads/external/coreDOOM/Makefile | 34 ++++++++++++++++++++++++++++ payloads/external/coreDOOM/libpayload-config | 13 +++++++++++ 7 files changed, 100 insertions(+) create mode 100644 payloads/external/coreDOOM/Kconfig.secondary create mode 100644 payloads/external/coreDOOM/Makefile create mode 100644 payloads/external/coreDOOM/libpayload-config (limited to 'payloads') diff --git a/payloads/Kconfig b/payloads/Kconfig index e184b35668..2e627d7e5b 100644 --- a/payloads/Kconfig +++ b/payloads/Kconfig @@ -165,6 +165,16 @@ config TINT_SECONDARY_PAYLOAD tint can be loaded as a secondary payload under SeaBIOS, GRUB, or any other payload that can load additional payloads. +config COREDOOM_SECONDARY_PAYLOAD + bool "Load coreDOOM as a secondary payload" + default n + depends on ARCH_X86 + help + coreDOOM can be loaded as a secondary payload under SeaBIOS, GRUB, + or any other payload that can load additional payloads. Requires a + linear framebuffer. If built as a secondary payload for SeaBIOS, the + generated VGA BIOS option rom is also required. + source "payloads/external/*/Kconfig.secondary" endmenu # "Secondary Payloads" diff --git a/payloads/Makefile.inc b/payloads/Makefile.inc index a182bd65ad..0102ea37d1 100644 --- a/payloads/Makefile.inc +++ b/payloads/Makefile.inc @@ -29,6 +29,7 @@ payloads/external/GRUB2 \ payloads/external/LinuxBoot \ payloads/external/Yabits \ payloads/external/skiboot \ +payloads/external/coreDOOM \ force-payload: diff --git a/payloads/external/Makefile.inc b/payloads/external/Makefile.inc index e2fb9c7279..99fb0ef483 100644 --- a/payloads/external/Makefile.inc +++ b/payloads/external/Makefile.inc @@ -372,3 +372,19 @@ payloads/external/skiboot/build/skiboot.elf: $(MAKE) -C payloads/external/skiboot all \ CONFIG_SKIBOOT_GIT_REPO=$(CONFIG_SKIBOOT_GIT_REPO) \ CONFIG_SKIBOOT_REVISION=$(CONFIG_SKIBOOT_REVISION) +# COREDOOM + +payloads/external/coreDOOM/coredoom/doomgeneric/coredoom.elf coredoom: + $(MAKE) -C payloads/external/coreDOOM + +cbfs-files-$(CONFIG_COREDOOM_SECONDARY_PAYLOAD) += img/coreDOOM +img/coreDOOM-file := payloads/external/coreDOOM/coredoom/doomgeneric/coredoom.elf +img/coreDOOM-type := payload +img/coreDOOM-compression := $(CBFS_SECONDARY_PAYLOAD_COMPRESS_FLAG) +# WAD file +ifneq ($(strip $(CONFIG_COREDOOM_WAD_FILE)),) +cbfs-files-y += doom.wad +doom.wad-file := $(strip $(CONFIG_COREDOOM_WAD_FILE)) +doom.wad-type := raw +doom.wad-compression := $(CBFS_SECONDARY_PAYLOAD_COMPRESS_FLAG) +endif diff --git a/payloads/external/SeaBIOS/Kconfig b/payloads/external/SeaBIOS/Kconfig index 405ff9db55..78e37935e9 100644 --- a/payloads/external/SeaBIOS/Kconfig +++ b/payloads/external/SeaBIOS/Kconfig @@ -74,6 +74,7 @@ config SEABIOS_HARDWARE_IRQ config SEABIOS_VGA_COREBOOT prompt "Include generated option rom that implements legacy VGA BIOS compatibility" default y if !VENDOR_EMULATION + default y if COREDOOM_SECONDARY_PAYLOAD depends on !VGA_ROM_RUN && (VGA_TEXT_FRAMEBUFFER || LINEAR_FRAMEBUFFER) bool help diff --git a/payloads/external/coreDOOM/Kconfig.secondary b/payloads/external/coreDOOM/Kconfig.secondary new file mode 100644 index 0000000000..9f13cfe98c --- /dev/null +++ b/payloads/external/coreDOOM/Kconfig.secondary @@ -0,0 +1,25 @@ +if COREDOOM_SECONDARY_PAYLOAD + +config COREDOOM_WAD_FILE + string "DOOM WAD file" + depends on COREDOOM_SECONDARY_PAYLOAD + default "doom.wad" + help + Add a WAD file to be loaded by coreDOOM. + + A WAD file contains all the game data for the Doom-engine, and + is required to play the game. + + A list of the WAD files included in the official games can be + found here: https://doomwiki.org/wiki/IWAD + These WADs can be extracted from copies of the game that you + own, and the shareware WADs may be freely downloaded from the + internet. + + For a completely free (as in freedom) experience, the Freedoom + project (https://freedoom.github.io) provides original game + content under the BSD license. Other WADs not mentioned here are + also available and may be found from various sources such as + the internet and copies of other games using the Doom engine. + +endif diff --git a/payloads/external/coreDOOM/Makefile b/payloads/external/coreDOOM/Makefile new file mode 100644 index 0000000000..7c801b413e --- /dev/null +++ b/payloads/external/coreDOOM/Makefile @@ -0,0 +1,34 @@ +## SPDX-License-Identifier: GPL-2.0-only +project_git_repo=https://github.com/nic3-14159/coreDOOM.git +project_dir=coredoom + +unexport KCONFIG_AUTOHEADER +unexport KCONFIG_AUTOCONFIG +unexport KCONFIG_DEPENDENCIES +unexport KCONFIG_SPLITCONFIG +unexport KCONFIG_TRISTATE +unexport KCONFIG_NEGATIVES + +all: coredoom + +checkout: + test -d coredoom || \ + git clone $(project_git_repo) $(project_dir) + cd $(project_dir) && \ + git checkout libpayload_port + +coredoom: libpayload + $(MAKE) -C $(project_dir)/doomgeneric + +libpayload: checkout + cp libpayload-config ../../libpayload/.config && \ + cd ../../libpayload && $(MAKE) olddefconfig && $(MAKE) && \ + $(MAKE) DESTDIR=../external/coreDOOM/coredoom/doomgeneric install + +clean: + test -d coredoom && $(MAKE) -C coredoom/doomgeneric clean || exit 0 + +distclean: + rm -rf coredoom + +.PHONY: checkout coredoom clean distclean diff --git a/payloads/external/coreDOOM/libpayload-config b/payloads/external/coreDOOM/libpayload-config new file mode 100644 index 0000000000..54dffea515 --- /dev/null +++ b/payloads/external/coreDOOM/libpayload-config @@ -0,0 +1,13 @@ +# CONFIG_LP_MULTIBOOT is not set +CONFIG_LP_HEAP_SIZE=67108864 +CONFIG_LP_STACK_SIZE=16384 +CONFIG_LP_BASE_ADDRESS=0x00100000 +# CONFIG_LP_CURSES is not set +CONFIG_LP_SERIAL_IOBASE=0x3f8 +CONFIG_LP_COREBOOT_VIDEO_CONSOLE=y +# CONFIG_LP_PCI is not set +# CONFIG_LP_NVRAM is not set +CONFIG_LP_TIMER_GENERIC_REG=0x0 +CONFIG_LP_TIMER_GENERIC_HIGH_REG=0x0 +# CONFIG_LP_STORAGE is not set +# CONFIG_LP_USB_MSC is not set -- cgit v1.2.3