#!/bin/bash set -euo pipefail IMG="boot.img" IMG_SIZE_KB=4096 TARGET="riscv64gc-unknown-none-elf" BUILD_DIR="target/${TARGET}/release" echo "=== Creating k-os boot disk image ===" # Create and format FAT16 image (mtools required: brew install mtools) dd if=/dev/zero of="${IMG}" bs=1K count=${IMG_SIZE_KB} 2>/dev/null mformat -i "${IMG}" -t 8 -h 2 -s 32 -r 16 -c 1 -M 512 :: echo "Created and formatted ${IMG} (${IMG_SIZE_KB}KB, FAT16)" # Create directories mmd -i "${IMG}" ::servers 2>/dev/null || true mmd -i "${IMG}" ::apps 2>/dev/null || true # Copy init if [ -f "${BUILD_DIR}/init" ]; then mcopy -i "${IMG}" "${BUILD_DIR}/init" "::init.elf" echo " Copied init.elf ($(stat -f%z "${BUILD_DIR}/init" 2>/dev/null || stat -c%s "${BUILD_DIR}/init") bytes)" fi # Copy server binaries for server in display-server input-server log-server permission-manager storage-server session-server; do if [ -f "${BUILD_DIR}/${server}" ]; then mcopy -i "${IMG}" "${BUILD_DIR}/${server}" "::servers/${server}.elf" echo " Copied servers/${server}.elf" fi done # Copy app binaries for app in snake; do if [ -f "${BUILD_DIR}/${app}" ]; then mcopy -i "${IMG}" "${BUILD_DIR}/${app}" "::apps/${app}.elf" echo " Copied apps/${app}.elf" fi done # List contents echo "" echo "Disk contents:" mdir -i "${IMG}" :: mdir -i "${IMG}" ::servers 2>/dev/null || true mdir -i "${IMG}" ::apps 2>/dev/null || true echo "" echo "=== Done: ${IMG} ==="