Last active
October 27, 2025 08:30
-
-
Save Langerz82/5cbb2a4179f1ac2c34fab542e623b3a8 to your computer and use it in GitHub Desktop.
EmuELEC - v4.8TEST - amiberry-lite.sh and amiberry.start (see below).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # SPDX-License-Identifier: GPL-2.0-or-later | |
| # Copyright (C) originally created by Escalade | |
| # Copyright (C) 2018-present 5schatten | |
| # Copyright (C) 2025-present Langerz82, worstcase_scenario | |
| . /etc/profile | |
| # Core paths | |
| AMIBERRY_DIR=/storage/.config/amiberry-lite | |
| AMIBERRY_CONFIG_DIR="${AMIBERRY_DIR}/conf" | |
| AMIBERRY_TMP_DIR=/tmp/emulation/amiberry-lite | |
| AMIBERRY_TMP_CONFIG="${AMIBERRY_TMP_DIR}/.amiberry-lite_conf.uae" | |
| AMIBERRY_LOG=/emuelec/logs/amiberry-lite.log | |
| AMIBERRY_EXE=amiberry-lite | |
| MAX_DRIVES=4 | |
| i=0 | |
| echo "EmuELEC Amiberry-lite Log" > "${AMIBERRY_LOG}" | |
| echo "Trying to boot this game: $1" >> "${AMIBERRY_LOG}" | |
| # Force SDL audio backend | |
| export SDL_AUDIODRIVER=alsa | |
| # Amiberry loads assets relative to its working directory | |
| cd "${AMIBERRY_DIR}" | |
| # Prepare a clean temp dir | |
| if [ -d "${AMIBERRY_TMP_DIR}" ]; then | |
| echo "Clean up old working directory." >> "${AMIBERRY_LOG}" | |
| rm -rf "${AMIBERRY_TMP_DIR}" | |
| fi | |
| mkdir -p "${AMIBERRY_TMP_DIR}" | |
| ############################################################################### | |
| # Helper: detect machine model (A500 / A1200 / CD32) | |
| # Result is later passed to --model if no config template exists | |
| ############################################################################### | |
| AMIBERRY_SET_MODEL() { | |
| local MODEL=A500 | |
| # Heuristic for A1200 / AGA | |
| if [ "$(echo "$1" | grep -e 'AGA' | wc -l)" -eq 1 ] \ | |
| || [ "$(echo "${AMIBERRY_TMP_DIR}"/* | grep -e 'AGA' | wc -l)" -eq 1 ] \ | |
| || [[ "$1" = */amiga1200/* ]]; then | |
| MODEL=A1200 | |
| # Heuristic for CD32 | |
| elif [ "$(echo "$1" | grep -e 'CD32' | wc -l)" -eq 1 ] \ | |
| || [ "$(echo "${AMIBERRY_TMP_DIR}"/* | grep -e 'CD32' | wc -l)" -eq 1 ] \ | |
| || [[ "$1" = */cd32/* ]] \ | |
| || [[ "$1" = */amigacd32/* ]]; then | |
| MODEL=CD32 | |
| fi | |
| echo "${MODEL}" | |
| } | |
| ############################################################################### | |
| # Helper: pick a base config (.uae) for that model | |
| # Returns either '-f /tmp/.../.amiberry-lite_conf.uae' or an empty string | |
| ############################################################################### | |
| AMIBERRY_SET_CONF() { | |
| local CONF_MODEL="$1" | |
| local CONFIG_FILE="${AMIBERRY_CONFIG_DIR}/Amiga${CONF_MODEL}-custom.uae" | |
| if [ -f "${CONFIG_FILE}" ]; then | |
| cp "${CONFIG_FILE}" "${AMIBERRY_TMP_CONFIG}" | |
| echo "-f ${AMIBERRY_TMP_CONFIG}" | |
| return | |
| fi | |
| CONFIG_FILE="${AMIBERRY_CONFIG_DIR}/custom.uae" | |
| if [ -f "${CONFIG_FILE}" ]; then | |
| cp "${CONFIG_FILE}" "${AMIBERRY_TMP_CONFIG}" | |
| echo "-f ${AMIBERRY_TMP_CONFIG}" | |
| return | |
| fi | |
| # no template available | |
| echo "" | |
| } | |
| ############################################################################### | |
| # Helper: build Amiberry arg string | |
| # Example: | |
| # "--model CD32 -G <extra> --log" | |
| # or "-f /tmp/.../.amiberry-lite_conf.uae --log" | |
| ############################################################################### | |
| AMIBERRY_GET_ARGS() { | |
| local MODEL | |
| MODEL="$( AMIBERRY_SET_MODEL "$1" )" | |
| local CONF_ARG | |
| CONF_ARG="$( AMIBERRY_SET_CONF "${MODEL}" )" | |
| if [[ -z "${CONF_ARG}" ]]; then | |
| # fall back to explicit model if no template .uae exists | |
| CONF_ARG="--model ${MODEL} -G ${AMIBERRY_ADD_ARGS}" | |
| fi | |
| echo ${CONF_ARG} --log | |
| } | |
| # extra args from caller if any | |
| AMIBERRY_ADD_ARGS="${2}" | |
| ############################################################################### | |
| # CASE 1: .zip | |
| # - WHDLoad-in-zip (lha/slave content) -> --autoload | |
| # - multi-floppy zip -> mount as DF0/DF1/DF2/DF3 | |
| ############################################################################### | |
| if echo "$1" | grep -qi .zip ; then | |
| unzip -q -o "$1" -d "${AMIBERRY_TMP_DIR}" | |
| # crude WHDLoad-in-zip detection: .nfo plus *.slave content | |
| if [ -f "${AMIBERRY_TMP_DIR}"/*.*nfo ] && [ -f "${AMIBERRY_TMP_DIR}"/*/*.*lave ]; then | |
| echo "Loading a WHDLoad (.zip) file" >> "${AMIBERRY_LOG}" | |
| AMIBERRY_ARGS="$( AMIBERRY_GET_ARGS "$1" )" | |
| ${AMIBERRY_EXE} --autoload "$1" ${AMIBERRY_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| else | |
| echo "Loading a .zip file with floppy images" >> "${AMIBERRY_LOG}" | |
| AMIBERRY_ARGS="$( AMIBERRY_GET_ARGS "$1" )" | |
| FLOPPY_ARG=() | |
| i=0 | |
| for FILE in "${AMIBERRY_TMP_DIR}"/*; do | |
| FLOPPY_ARG+=(-${i} "${FILE}") | |
| [[ "${FILE}" = *.cue ]] && CUE_FILE=${FILE} && break | |
| if [ `echo $1 | grep -i -e .chd -e .cue -e .iso -e .bin | wc -l` -eq 1 ]; then | |
| CD_FILE=${FILE} | |
| fi | |
| i=$((i+1)) | |
| if [ ${i} -eq ${MAX_DRIVES} ]; then | |
| break | |
| fi | |
| done | |
| if [[ ! -z ${CUE_FILE} ]]; then | |
| ${AMIBERRY_EXE} --cdimage "${CUE_FILE}" ${AMIBERRY_ARGS} >> ${AMIBERRY_LOG} 2>&1 | |
| elif [[ ! -z ${CD_FILE} ]]; then | |
| ${AMIBERRY_EXE} --autoload "${CD_FILE}" ${AMIBERRY_ARGS} >> ${AMIBERRY_LOG} 2>&1 | |
| else | |
| ${AMIBERRY_EXE} "${FLOPPY_ARG[@]}" ${AMIBERRY_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| fi | |
| fi | |
| ############################################################################### | |
| # CASE 2: .lha (WHDLoad install) | |
| # -> just --autoload | |
| ############################################################################### | |
| elif echo "$1" | grep -qi .lha ; then | |
| echo "Loading a WHDLoad (.lha) file" >> "${AMIBERRY_LOG}" | |
| AMIBERRY_ARGS="$( AMIBERRY_GET_ARGS "$1" )" | |
| ${AMIBERRY_EXE} --autoload "$1" ${AMIBERRY_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| ############################################################################### | |
| # CASE 3: .uae (explicit Amiberry config) | |
| ############################################################################### | |
| elif echo "$1" | grep -qi .uae ; then | |
| echo "Loading a .uae file" >> "${AMIBERRY_LOG}" | |
| AMIBERRY_ARGS="$( AMIBERRY_GET_ARGS "$1" )" | |
| ${AMIBERRY_EXE} -f "$1" ${AMIBERRY_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| ############################################################################### | |
| # CASE 4: .hdf (hardfile / HDD image) | |
| # We build a temp config that mounts the .hdf as DH0 and boots from it | |
| # We force model A1200 in this path | |
| ############################################################################### | |
| elif echo "$1" | grep -qi .hdf ; then | |
| echo "Loading a hardfile (.hdf)" >> "${AMIBERRY_LOG}" | |
| # try A1200 template first, then custom.uae | |
| BASE_CFG="${AMIBERRY_CONFIG_DIR}/AmigaA1200-custom.uae" | |
| if [ ! -f "${BASE_CFG}" ]; then | |
| BASE_CFG="${AMIBERRY_CONFIG_DIR}/custom.uae" | |
| fi | |
| if [ -f "${BASE_CFG}" ]; then | |
| cp "${BASE_CFG}" "${AMIBERRY_TMP_CONFIG}" | |
| else | |
| : > "${AMIBERRY_TMP_CONFIG}" | |
| fi | |
| # append HDD mapping | |
| cat >> "${AMIBERRY_TMP_CONFIG}" <<EOF | |
| use_gui=no | |
| hardfile2=rw,DH0:$1,0,0,0,512,0, | |
| boot_priority=1 | |
| EOF | |
| # run forced as A1200, no --autoload here | |
| ${AMIBERRY_EXE} -f "${AMIBERRY_TMP_CONFIG}" --model A1200 -G --log ${AMIBERRY_ADD_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| ############################################################################### | |
| # CASE 5: CD / CD32 images (.chd .cue .iso .bin) | |
| # This is the critical amigacd32 path | |
| # We call --autoload so Amiberry mounts it as CD drive instead of DF0 | |
| # AMIBERRY_GET_ARGS will set --model CD32 if the path matches amigacd32 | |
| ############################################################################### | |
| elif echo "$1" | grep -qi -e .cue ; then | |
| echo "Loading a CD or CD32 image file" >> "${AMIBERRY_LOG}" | |
| AMIBERRY_ARGS="$( AMIBERRY_GET_ARGS "$1" )" | |
| ${AMIBERRY_EXE} --cdimage "$1" ${AMIBERRY_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| elif echo "$1" | grep -qi -e .chd -e .iso -e .bin ; then | |
| echo "Loading a CD or CD32 image file" >> "${AMIBERRY_LOG}" | |
| AMIBERRY_ARGS="$( AMIBERRY_GET_ARGS "$1" )" | |
| ${AMIBERRY_EXE} --autoload "$1" ${AMIBERRY_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| ############################################################################### | |
| # CASE 6: default floppy images (.adf .adz .ipf etc) | |
| # We mount the file as DF0 using -0 | |
| ############################################################################### | |
| else | |
| echo "Loading a single floppy image (.adf or .adz or .ipf)" >> "${AMIBERRY_LOG}" | |
| AMIBERRY_ARGS="$( AMIBERRY_GET_ARGS "$1" )" | |
| ${AMIBERRY_EXE} -0 "$1" ${AMIBERRY_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| fi | |
| # cleanup temp dir | |
| rm -rf "${AMIBERRY_TMP_DIR}" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # SPDX-License-Identifier: GPL-2.0-or-later | |
| # Copyright (C) originally created by Escalade | |
| # Copyright (C) 2018-present 5schatten | |
| # Copyright (C) 2025-present Langerz82, worstcase_scenario | |
| . /etc/profile | |
| # Core paths | |
| AMIBERRY_DIR=/storage/.config/amiberry | |
| AMIBERRY_CONFIG_DIR="${AMIBERRY_DIR}/conf" | |
| AMIBERRY_TMP_DIR=/tmp/emulation/amiberry | |
| AMIBERRY_TMP_CONFIG="${AMIBERRY_TMP_DIR}/.amiberry_conf.uae" | |
| AMIBERRY_LOG=/emuelec/logs/amiberry.log | |
| AMIBERRY_EXE=amiberry | |
| MAX_DRIVES=4 | |
| i=0 | |
| echo "EmuELEC Amiberry-lite Log" > "${AMIBERRY_LOG}" | |
| echo "Trying to boot this game: $1" >> "${AMIBERRY_LOG}" | |
| # Force SDL audio backend | |
| export SDL_AUDIODRIVER=alsa | |
| # Amiberry loads assets relative to its working directory | |
| cd "${AMIBERRY_DIR}" | |
| # Prepare a clean temp dir | |
| if [ -d "${AMIBERRY_TMP_DIR}" ]; then | |
| echo "Clean up old working directory." >> "${AMIBERRY_LOG}" | |
| rm -rf "${AMIBERRY_TMP_DIR}" | |
| fi | |
| mkdir -p "${AMIBERRY_TMP_DIR}" | |
| ############################################################################### | |
| # Helper: detect machine model (A500 / A1200 / CD32) | |
| # Result is later passed to --model if no config template exists | |
| ############################################################################### | |
| AMIBERRY_SET_MODEL() { | |
| local MODEL=A500 | |
| # Heuristic for A1200 / AGA | |
| if [ "$(echo "$1" | grep -e 'AGA' | wc -l)" -eq 1 ] \ | |
| || [ "$(echo "${AMIBERRY_TMP_DIR}"/* | grep -e 'AGA' | wc -l)" -eq 1 ] \ | |
| || [[ "$1" = */amiga1200/* ]]; then | |
| MODEL=A1200 | |
| # Heuristic for CD32 | |
| elif [ "$(echo "$1" | grep -e 'CD32' | wc -l)" -eq 1 ] \ | |
| || [ "$(echo "${AMIBERRY_TMP_DIR}"/* | grep -e 'CD32' | wc -l)" -eq 1 ] \ | |
| || [[ "$1" = */cd32/* ]] \ | |
| || [[ "$1" = */amigacd32/* ]]; then | |
| MODEL=CD32 | |
| fi | |
| echo "${MODEL}" | |
| } | |
| ############################################################################### | |
| # Helper: pick a base config (.uae) for that model | |
| # Returns either '-f /tmp/.../.amiberry-lite_conf.uae' or an empty string | |
| ############################################################################### | |
| AMIBERRY_SET_CONF() { | |
| local CONF_MODEL="$1" | |
| local CONFIG_FILE="${AMIBERRY_CONFIG_DIR}/Amiga${CONF_MODEL}-custom.uae" | |
| if [ -f "${CONFIG_FILE}" ]; then | |
| cp "${CONFIG_FILE}" "${AMIBERRY_TMP_CONFIG}" | |
| echo "-f ${AMIBERRY_TMP_CONFIG}" | |
| return | |
| fi | |
| CONFIG_FILE="${AMIBERRY_CONFIG_DIR}/custom.uae" | |
| if [ -f "${CONFIG_FILE}" ]; then | |
| cp "${CONFIG_FILE}" "${AMIBERRY_TMP_CONFIG}" | |
| echo "-f ${AMIBERRY_TMP_CONFIG}" | |
| return | |
| fi | |
| # no template available | |
| echo "" | |
| } | |
| ############################################################################### | |
| # Helper: build Amiberry arg string | |
| # Example: | |
| # "--model CD32 -G <extra> --log" | |
| # or "-f /tmp/.../.amiberry-lite_conf.uae --log" | |
| ############################################################################### | |
| AMIBERRY_GET_ARGS() { | |
| local MODEL | |
| MODEL="$( AMIBERRY_SET_MODEL "$1" )" | |
| local CONF_ARG | |
| CONF_ARG="$( AMIBERRY_SET_CONF "${MODEL}" )" | |
| if [[ -z "${CONF_ARG}" ]]; then | |
| # fall back to explicit model if no template .uae exists | |
| CONF_ARG="--model ${MODEL} -G ${AMIBERRY_ADD_ARGS}" | |
| fi | |
| echo ${CONF_ARG} --log | |
| } | |
| # extra args from caller if any | |
| AMIBERRY_ADD_ARGS="${2}" | |
| ############################################################################### | |
| # CASE 1: .zip | |
| # - WHDLoad-in-zip (lha/slave content) -> --autoload | |
| # - multi-floppy zip -> mount as DF0/DF1/DF2/DF3 | |
| ############################################################################### | |
| if echo "$1" | grep -qi .zip ; then | |
| unzip -q -o "$1" -d "${AMIBERRY_TMP_DIR}" | |
| # crude WHDLoad-in-zip detection: .nfo plus *.slave content | |
| if [ -f "${AMIBERRY_TMP_DIR}"/*.*nfo ] && [ -f "${AMIBERRY_TMP_DIR}"/*/*.*lave ]; then | |
| echo "Loading a WHDLoad (.zip) file" >> "${AMIBERRY_LOG}" | |
| AMIBERRY_ARGS="$( AMIBERRY_GET_ARGS "$1" )" | |
| ${AMIBERRY_EXE} --autoload "$1" ${AMIBERRY_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| else | |
| echo "Loading a .zip file with floppy images" >> "${AMIBERRY_LOG}" | |
| AMIBERRY_ARGS="$( AMIBERRY_GET_ARGS "$1" )" | |
| FLOPPY_ARG=() | |
| i=0 | |
| for FILE in "${AMIBERRY_TMP_DIR}"/*; do | |
| FLOPPY_ARG+=(-${i} "${FILE}") | |
| [[ "${FILE}" = *.cue ]] && CUE_FILE=${FILE} && break | |
| if [ `echo $1 | grep -i -e .chd -e .cue -e .iso -e .bin | wc -l` -eq 1 ]; then | |
| CD_FILE=${FILE} | |
| fi | |
| i=$((i+1)) | |
| if [ ${i} -eq ${MAX_DRIVES} ]; then | |
| break | |
| fi | |
| done | |
| if [[ ! -z ${CUE_FILE} ]]; then | |
| ${AMIBERRY_EXE} --cdimage "${CUE_FILE}" ${AMIBERRY_ARGS} >> ${AMIBERRY_LOG} 2>&1 | |
| elif [[ ! -z ${CD_FILE} ]]; then | |
| ${AMIBERRY_EXE} --autoload "${CD_FILE}" ${AMIBERRY_ARGS} >> ${AMIBERRY_LOG} 2>&1 | |
| else | |
| ${AMIBERRY_EXE} "${FLOPPY_ARG[@]}" ${AMIBERRY_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| fi | |
| fi | |
| ############################################################################### | |
| # CASE 2: .lha (WHDLoad install) | |
| # -> just --autoload | |
| ############################################################################### | |
| elif echo "$1" | grep -qi .lha ; then | |
| echo "Loading a WHDLoad (.lha) file" >> "${AMIBERRY_LOG}" | |
| AMIBERRY_ARGS="$( AMIBERRY_GET_ARGS "$1" )" | |
| ${AMIBERRY_EXE} --autoload "$1" ${AMIBERRY_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| ############################################################################### | |
| # CASE 3: .uae (explicit Amiberry config) | |
| ############################################################################### | |
| elif echo "$1" | grep -qi .uae ; then | |
| echo "Loading a .uae file" >> "${AMIBERRY_LOG}" | |
| AMIBERRY_ARGS="$( AMIBERRY_GET_ARGS "$1" )" | |
| ${AMIBERRY_EXE} -f "$1" ${AMIBERRY_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| ############################################################################### | |
| # CASE 4: .hdf (hardfile / HDD image) | |
| # We build a temp config that mounts the .hdf as DH0 and boots from it | |
| # We force model A1200 in this path | |
| ############################################################################### | |
| elif echo "$1" | grep -qi .hdf ; then | |
| echo "Loading a hardfile (.hdf)" >> "${AMIBERRY_LOG}" | |
| # try A1200 template first, then custom.uae | |
| BASE_CFG="${AMIBERRY_CONFIG_DIR}/AmigaA1200-custom.uae" | |
| if [ ! -f "${BASE_CFG}" ]; then | |
| BASE_CFG="${AMIBERRY_CONFIG_DIR}/custom.uae" | |
| fi | |
| if [ -f "${BASE_CFG}" ]; then | |
| cp "${BASE_CFG}" "${AMIBERRY_TMP_CONFIG}" | |
| else | |
| : > "${AMIBERRY_TMP_CONFIG}" | |
| fi | |
| # append HDD mapping | |
| cat >> "${AMIBERRY_TMP_CONFIG}" <<EOF | |
| use_gui=no | |
| hardfile2=rw,DH0:$1,0,0,0,512,0, | |
| boot_priority=1 | |
| EOF | |
| # run forced as A1200, no --autoload here | |
| ${AMIBERRY_EXE} -f "${AMIBERRY_TMP_CONFIG}" --model A1200 -G --log ${AMIBERRY_ADD_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| ############################################################################### | |
| # CASE 5: CD / CD32 images (.chd .cue .iso .bin) | |
| # This is the critical amigacd32 path | |
| # We call --autoload so Amiberry mounts it as CD drive instead of DF0 | |
| # AMIBERRY_GET_ARGS will set --model CD32 if the path matches amigacd32 | |
| ############################################################################### | |
| elif echo "$1" | grep -qi -e .cue ; then | |
| echo "Loading a CD or CD32 image file" >> "${AMIBERRY_LOG}" | |
| AMIBERRY_ARGS="$( AMIBERRY_GET_ARGS "$1" )" | |
| ${AMIBERRY_EXE} --cdimage "$1" ${AMIBERRY_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| elif echo "$1" | grep -qi -e .chd -e .iso -e .bin ; then | |
| echo "Loading a CD or CD32 image file" >> "${AMIBERRY_LOG}" | |
| AMIBERRY_ARGS="$( AMIBERRY_GET_ARGS "$1" )" | |
| ${AMIBERRY_EXE} --autoload "$1" ${AMIBERRY_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| ############################################################################### | |
| # CASE 6: default floppy images (.adf .adz .ipf etc) | |
| # We mount the file as DF0 using -0 | |
| ############################################################################### | |
| else | |
| echo "Loading a single floppy image (.adf or .adz or .ipf)" >> "${AMIBERRY_LOG}" | |
| AMIBERRY_ARGS="$( AMIBERRY_GET_ARGS "$1" )" | |
| ${AMIBERRY_EXE} -0 "$1" ${AMIBERRY_ARGS} >> "${AMIBERRY_LOG}" 2>&1 | |
| fi | |
| # cleanup temp dir | |
| rm -rf "${AMIBERRY_TMP_DIR}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment