From 5bc9ff4fd13f1dbf3c229a8bed624f6055a8a1f1 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Sat, 21 Feb 2026 23:25:54 +0000 Subject: [PATCH] cmake: add support for cd-rom booting via Bochs --- arch/x86_64/Arch.cmake | 1 + arch/x86_64/Bochs.cmake | 18 ++++++++++++++ arch/x86_64/bochsrc.bxrc | 53 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 arch/x86_64/Bochs.cmake create mode 100644 arch/x86_64/bochsrc.bxrc diff --git a/arch/x86_64/Arch.cmake b/arch/x86_64/Arch.cmake index c23a48f..abdd782 100644 --- a/arch/x86_64/Arch.cmake +++ b/arch/x86_64/Arch.cmake @@ -1,2 +1,3 @@ include(System-Disk) include(QEMU) +include(Bochs) diff --git a/arch/x86_64/Bochs.cmake b/arch/x86_64/Bochs.cmake new file mode 100644 index 0000000..e2f95d5 --- /dev/null +++ b/arch/x86_64/Bochs.cmake @@ -0,0 +1,18 @@ +find_program(BOCHS bochs) + +if (NOT BOCHS) + message(STATUS "Bochs: cannot find bochs") + return() +endif () + +if (NOT TARGET cdrom) + message(STATUS "Bochs: CD-ROM image creation is unavailable. Cannot use bochs") + return() +endif () + +message(STATUS "Bochs: Enable CD-ROM boot") +add_custom_target(run-cdrom-bochs + COMMAND ${BOCHS} -q -f ${CMAKE_SOURCE_DIR}/arch/${CMAKE_SYSTEM_PROCESSOR}/bochsrc.bxrc + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + USES_TERMINAL + DEPENDS cdrom) diff --git a/arch/x86_64/bochsrc.bxrc b/arch/x86_64/bochsrc.bxrc new file mode 100644 index 0000000..f4acbe1 --- /dev/null +++ b/arch/x86_64/bochsrc.bxrc @@ -0,0 +1,53 @@ +# configuration file generated by Bochs +plugin_ctrl: unmapped=true, biosdev=true, speaker=true, extfpuirq=true, parallel=true, serial=true, iodebug=true +config_interface: textconfig +display_library: sdl2 +memory: guest=128, host=128, block_size=128 +romimage: file="/usr/local/share/bochs/BIOS-bochs-latest", address=0x00000000, options=none, flash_data=none +vgaromimage: file="/usr/local/share/bochs/VGABIOS-lgpl-latest.bin" +boot: cdrom +floppy_bootsig_check: disabled=0 +floppya: type=1_44 +# no floppyb +ata0: enabled=true, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 +ata0-master: type=cdrom, path="rosetta-system.iso", status=inserted, model="Generic 1234", biosdetect=auto +ata0-slave: type=none +ata1: enabled=true, ioaddr1=0x170, ioaddr2=0x370, irq=15 +ata1-master: type=none +ata1-slave: type=none +ata2: enabled=false +ata3: enabled=false +optromimage1: file=none +optromimage2: file=none +optromimage3: file=none +optromimage4: file=none +optramimage1: file=none +optramimage2: file=none +optramimage3: file=none +optramimage4: file=none +pci: enabled=1, chipset=i440fx, slot1=none, slot2=none, slot3=none, slot4=none, slot5=none +vga: extension=vbe, update_freq=10, realtime=1, ddc=builtin, vbe_memsize=16 +cpu: count=1:1:1, ips=4000000, quantum=16, model=core2_penryn_t9600, reset_on_triple_fault=1, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0 +print_timestamps: enabled=0 +debugger_log: - +magic_break: enabled=1 0x0 +port_e9_hack: enabled=false, all_rings=false +iodebug: all_rings=0 +private_colormap: enabled=0 +clock: sync=none, time0=local, rtc_sync=0 +# no cmosimage +log: - +logprefix: %t%e%d +debug: action=ignore +info: action=report +error: action=report +panic: action=ask +keyboard: type=mf, serial_delay=150, paste_delay=100000, user_shortcut=none +mouse: type=ps2, enabled=false, toggle=ctrl+mbutton +speaker: enabled=true, mode=system +parport1: enabled=true, file=none +parport2: enabled=false +com1: enabled=true, mode=null +com2: enabled=false +com3: enabled=false +com4: enabled=false