diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 96ace103d..72fca903f 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -10,9 +10,9 @@ If you haven't already, come find us in one of these platforms: Bug reporting is an important part of making Amiberry better. If you believe you have found a bug, then please follow these steps: -* **Ensure the bug has not already been reported.** Check the existing Github [Issues](https://github.com/midwan/amiberry/issues). +* **Ensure the bug has not already been reported.** Check the existing Github [Issues](https://github.com/BlitterStudio/amiberry/issues). -* If you're unable to find an open issue that addresses the problem, [open a new one](https://github.com/midwan/amiberry/issues/new). +* If you're unable to find an open issue that addresses the problem, [open a new one](https://github.com/BlitterStudio/amiberry/issues/new). Be sure to include a **title and clear description**, as much relevant information as possible and **steps to recreate** the problem. * Please use the relevant **bug report template** to create the issue. It was designed to help you fill in what we need, in order to locate diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 729ca48be..f6858c210 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -96,7 +96,7 @@ jobs: name: amiberry-macOS-64bit-apple-silicon path: amiberry-${{ github.ref_name }}-macOS-apple-silicon.zip - build-debian-bullseye-x86_64: + build-debian-bullseye-amd64: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -113,10 +113,10 @@ jobs: - name: Upload artifact uses: actions/upload-artifact@v4 with: - name: amiberry-debian-bullseye-x86_64 + name: amiberry-debian-bullseye-amd64 path: amiberry_*.deb - build-debian-bookworm-x86_64: + build-debian-bookworm-amd64: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -133,10 +133,10 @@ jobs: - name: Upload artifact uses: actions/upload-artifact@v4 with: - name: amiberry-debian-bookworm-x86_64 + name: amiberry-debian-bookworm-amd64 path: amiberry_*.deb - build-debian-bookworm-aarch64: + build-debian-bookworm-arm64: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -153,7 +153,7 @@ jobs: - name: Upload artifact uses: actions/upload-artifact@v4 with: - name: amiberry-debian-bookworm-aarch64 + name: amiberry-debian-bookworm-arm64 path: amiberry_*.deb build-debian-bookworm-armhf: @@ -176,7 +176,7 @@ jobs: name: amiberry-debian-bookworm-armhf path: amiberry_*.deb - build-debian-bullseye-aarch64: + build-debian-bullseye-arm64: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -193,7 +193,7 @@ jobs: - name: Upload artifact uses: actions/upload-artifact@v4 with: - name: amiberry-debian-bullseye-aarch64 + name: amiberry-debian-bullseye-arm64 path: amiberry_*.deb build-debian-bullseye-armhf: @@ -217,7 +217,7 @@ jobs: path: amiberry_*.deb create-release: - needs: [build-macOS-x86_64, build-macOS-Apple-Silicon, build-debian-bookworm-x86_64, build-debian-bookworm-aarch64, build-debian-bookworm-armhf, build-debian-bullseye-x86_64, build-debian-bullseye-aarch64, build-debian-bullseye-armhf] + needs: [build-macOS-x86_64, build-macOS-Apple-Silicon, build-debian-bookworm-amd64, build-debian-bookworm-arm64, build-debian-bookworm-armhf, build-debian-bullseye-amd64, build-debian-bullseye-arm64, build-debian-bullseye-armhf] runs-on: ubuntu-latest if: github.ref_type == 'tag' && startsWith(github.ref_name, 'v') steps: @@ -244,15 +244,15 @@ jobs: artifacts: | amiberry-macOS-64bit-intel/amiberry-${{ github.ref_name }}-macOS-x86_64.zip amiberry-macOS-64bit-apple-silicon/amiberry-${{ github.ref_name }}-macOS-apple-silicon.zip - amiberry-debian-bookworm-x86_64/amiberry_*.deb - amiberry-debian-bookworm-aarch64/amiberry_*.deb + amiberry-debian-bookworm-amd64/amiberry_*.deb + amiberry-debian-bookworm-arm64/amiberry_*.deb amiberry-debian-bookworm-armhf/amiberry_*.deb - amiberry-debian-bullseye-x86_64/amiberry_*.deb - amiberry-debian-bullseye-aarch64/amiberry_*.deb + amiberry-debian-bullseye-amd64/amiberry_*.deb + amiberry-debian-bullseye-arm64/amiberry_*.deb amiberry-debian-bullseye-armhf/amiberry_*.deb create-prerelease: - needs: [build-macOS-x86_64, build-macOS-Apple-Silicon, build-debian-bookworm-x86_64, build-debian-bookworm-aarch64, build-debian-bookworm-armhf, build-debian-bullseye-x86_64, build-debian-bullseye-aarch64, build-debian-bullseye-armhf] + needs: [build-macOS-x86_64, build-macOS-Apple-Silicon, build-debian-bookworm-amd64, build-debian-bookworm-arm64, build-debian-bookworm-armhf, build-debian-bullseye-amd64, build-debian-bullseye-arm64, build-debian-bullseye-armhf] runs-on: ubuntu-latest if: github.ref_type == 'tag' && startsWith(github.ref_name, 'preview-v') steps: @@ -280,9 +280,9 @@ jobs: artifacts: | amiberry-macOS-64bit-intel/amiberry-${{ github.ref_name }}-macOS-x86_64.zip amiberry-macOS-64bit-apple-silicon/amiberry-${{ github.ref_name }}-macOS-apple-silicon.zip - amiberry-debian-bookworm-x86_64/amiberry_*.deb - amiberry-debian-bookworm-aarch64/amiberry_*.deb + amiberry-debian-bookworm-amd64/amiberry_*.deb + amiberry-debian-bookworm-arm64/amiberry_*.deb amiberry-debian-bookworm-armhf/amiberry_*.deb - amiberry-debian-bullseye-x86_64/amiberry_*.deb - amiberry-debian-bullseye-aarch64/amiberry_*.deb + amiberry-debian-bullseye-amd64/amiberry_*.deb + amiberry-debian-bullseye-arm64/amiberry_*.deb amiberry-debian-bullseye-armhf/amiberry_*.deb diff --git a/.gitignore b/.gitignore index 9ad7744ea..4b908019a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,8 +3,8 @@ ### Amiberry files ### conf/*.uae conf/*.conf -kickstarts/*.rom -kickstarts/*.key +roms/*.rom +roms/*.key /amiberry* ### VisualGDB ### @@ -227,3 +227,4 @@ cmake-build-release-remote-host cmake-build-debug-opengl cmake-build-* _CPack_Packages +.idea diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b81b..000000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/editor.xml b/.idea/editor.xml deleted file mode 100644 index b0d69ef62..000000000 --- a/.idea/editor.xml +++ /dev/null @@ -1,483 +0,0 @@ - - - - - \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ad4b83dd..bcfc7f13e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -480,72 +480,53 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") install(TARGETS ${PROJECT_NAME} BUNDLE DESTINATION .) else () install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin) + # Install additional directories - install(DIRECTORY ${CMAKE_SOURCE_DIR}/cdroms - DESTINATION share/${PROJECT_NAME} - ) - install(DIRECTORY ${CMAKE_SOURCE_DIR}/conf - DESTINATION share/${PROJECT_NAME} - ) + # This one contains the gamecontrollersdb.txt file install(DIRECTORY ${CMAKE_SOURCE_DIR}/controllers DESTINATION share/${PROJECT_NAME} ) + # This one contains the data files install(DIRECTORY ${CMAKE_SOURCE_DIR}/data DESTINATION share/${PROJECT_NAME} ) - install(DIRECTORY ${CMAKE_SOURCE_DIR}/floppies - DESTINATION share/${PROJECT_NAME} - ) - install(DIRECTORY ${CMAKE_SOURCE_DIR}/harddrives + # This one contains the AROS kickstart files + install(DIRECTORY ${CMAKE_SOURCE_DIR}/roms DESTINATION share/${PROJECT_NAME} ) - install(DIRECTORY ${CMAKE_SOURCE_DIR}/inputrecordings - DESTINATION share/${PROJECT_NAME} - ) - install(DIRECTORY ${CMAKE_SOURCE_DIR}/kickstarts - DESTINATION share/${PROJECT_NAME} - ) - install(DIRECTORY ${CMAKE_SOURCE_DIR}/lha - DESTINATION share/${PROJECT_NAME} - ) - install(DIRECTORY ${CMAKE_SOURCE_DIR}/nvram - DESTINATION share/${PROJECT_NAME} - ) - install(DIRECTORY ${CMAKE_SOURCE_DIR}/plugins - DESTINATION share/${PROJECT_NAME} - ) - install(DIRECTORY ${CMAKE_SOURCE_DIR}/savestates - DESTINATION share/${PROJECT_NAME} - ) - install(DIRECTORY ${CMAKE_SOURCE_DIR}/screenshots - DESTINATION share/${PROJECT_NAME} + # This one contains the plugins + install(DIRECTORY ${CMAKE_SOURCE_DIR}/plugins/abr + DESTINATION lib/${PROJECT_NAME} ) + # This one contains the whdboot files install(DIRECTORY ${CMAKE_SOURCE_DIR}/whdboot DESTINATION share/${PROJECT_NAME} ) - # Install shared libraries - install(FILES ${CMAKE_BINARY_DIR}/external/floppybridge/libfloppybridge.so - DESTINATION share/${PROJECT_NAME}/plugins - ) - install(FILES ${CMAKE_BINARY_DIR}/external/capsimage/libcapsimage.so - DESTINATION share/${PROJECT_NAME}/plugins - ) - # Install desktop file install(FILES ${CMAKE_SOURCE_DIR}/data/Amiberry.desktop DESTINATION share/applications ) + # Install icon + install(FILES ${CMAKE_SOURCE_DIR}/data/amiberry.png + DESTINATION share/icons/hicolor/256x256/apps + ) + # Install Debian files + install(FILES ${CMAKE_SOURCE_DIR}/debian/changelog.gz + DESTINATION share/doc/${PROJECT_NAME} + ) + install(FILES ${CMAKE_SOURCE_DIR}/debian/copyright + DESTINATION share/doc/${PROJECT_NAME} + ) endif () -include(InstallRequiredSystemLibraries) - if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(CPACK_GENERATOR "Bundle") set(CPACK_BUNDLE_NAME "Amiberry") set(CPACK_BUNDLE_PLIST ${CMAKE_SOURCE_DIR}/Info.plist) set(CPACK_BUNDLE_APPLE_ENTITLEMENTS ${CMAKE_SOURCE_DIR}/Entitlements.plist) set(CPACK_BUNDLE_ICON ${CMAKE_SOURCE_DIR}/data/amiberry.png) + set(CPACK_STRIP_FILES "YES") else() set(CPACK_GENERATOR "DEB") set(CPACK_SOURCE_IGNORE_FILES .git/ .github/ .vscode/ _CPack_Packages/) @@ -557,12 +538,26 @@ else() SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE") SET(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/docs/README.md") SET(CPACK_DEBIAN_PACKAGE_NAME ${CMAKE_PROJECT_NAME}) + if (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "arm64") + SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "arm64") + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm") + SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "armhf") + else() + SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64") + endif() set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://amiberry.com") set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Dimitris Panokostas ") # Required set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.27), libstdc++6 (>= 8.3.0), libsdl2-2.0-0, libsdl2-image-2.0-0, libsdl2-ttf-2.0-0, flac, libmpg123-0, libpng16-16, zlib1g, libserialport0, libportmidi0, libmpeg2-4") # Adjust dependencies as needed - set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "Amiberry is an optimized Amiga emulator various platforms.") - set(CPACK_DEBIAN_PACKAGE_SECTION "games") + set(CPACK_DEBIAN_PACKAGE_DESCRIPTION +"Optimized Amiga emulator for various ARM, ARM64, AMD64 and RISC-V platforms. +Amiberry is an optimized Amiga emulator for various platforms. It is based on +the latest WinUAE and supports various Amiga models, including the A4000T, +A4000D, A1200, A3000 and A600. Additionally, it includes several unique +features, such as support for WHDLoad titles, RetroArch integration, custom +Controller Mappings and more.") + set(CPACK_DEBIAN_PACKAGE_SECTION "otherosfs") set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") + set(CPACK_STRIP_FILES "YES") endif() include(CPack) diff --git a/conf/amiberry-osx.conf b/conf/amiberry-osx.conf index 29c40ff34..c6d552dab 100644 --- a/conf/amiberry-osx.conf +++ b/conf/amiberry-osx.conf @@ -4,7 +4,7 @@ controllers_path=USERDIR/Documents/Amiberry/Controllers/ retroarch_config=USERDIR/Documents/Amiberry/Configurations/retroarch.cfg whdboot_path=USERDIR/Documents/Amiberry/Whdboot/ logfile_path=USERDIR/Documents/Amiberry/amiberry.log -rom_path=USERDIR/Documents/Amiberry/Kickstarts/ +rom_path=USERDIR/Documents/Amiberry/Roms/ floppy_sounds_dir=USERDIR/Documents/Amiberry/Data/Floppy_Sounds/ data_dir=USERDIR/Documents/Amiberry/Data/ saveimage_dir=USERDIR/Documents/Amiberry/Savestates/ diff --git a/conf/gamecontrollerdb.txt b/controllers/gamecontrollerdb.txt similarity index 100% rename from conf/gamecontrollerdb.txt rename to controllers/gamecontrollerdb.txt diff --git a/data/Amiberry.desktop b/data/Amiberry.desktop index 5bfab694a..5a0349eda 100644 --- a/data/Amiberry.desktop +++ b/data/Amiberry.desktop @@ -9,14 +9,17 @@ Version = 1.0 # The name of the application Name = Amiberry +GenericName = Amiga Emulator + # A comment which can/will be used as a tooltip -Comment = Amiga Emulator +Comment = Optimized Amiga Emulator # The executable of the application, possibly with arguments -Exec = /usr/bin/amiberry +Exec = /usr/bin/amiberry %f +TryExec = /usr/bin/amiberry # The name of the icon that will be used to display this entry -Icon = /usr/share/amiberry/data/amiberry.png +Icon = amiberry # Describes whether this application needs to be run in a terminal or not Terminal = false @@ -24,5 +27,7 @@ Terminal = false # Describes the categories in which this entry should be shown Categories = Game;Emulator; +MimeType=application/x-amiga-disk-image;application/x-cue;application/x-lha;application/octet-stream; + # Describes the encoding for the desktop entry Encoding=UTF-8 diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 000000000..872c094ab --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +amiberry (0.0.0-0) unstable; urgency=low + + * Dummy changelog entry. + + -- Dimitris Panokostas Wed, 11 Sep 2024 18:53:49 +0200 \ No newline at end of file diff --git a/debian/changelog.gz b/debian/changelog.gz new file mode 100644 index 000000000..1e44225a6 Binary files /dev/null and b/debian/changelog.gz differ diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 000000000..25c2e319f --- /dev/null +++ b/debian/copyright @@ -0,0 +1,8 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: Amiberry +Upstream-Contact: Dimitris Panokostas +Source: https://github.com/BlitterStudio/amiberry + +Files: * +Copyright: 2016-2024 Dimitris Panokostas +License: GPL-3 \ No newline at end of file diff --git a/docs/README.md b/docs/README.md index 9b5738ea6..5c195988d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,7 +4,7 @@ Follow me Mastodon! -[![C/C++ CI](https://github.com/midwan/amiberry/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/midwan/amiberry/actions/workflows/c-cpp.yml) +[![C/C++ CI](https://github.com/BlitterStudio/amiberry/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/BlitterStudio/amiberry/actions/workflows/c-cpp.yml) [![Discord](https://img.shields.io/badge/My-Discord-%235865F2.svg)](https://discord.gg/wWndKTGpGV) @@ -85,7 +85,7 @@ A flatpak version is available on [Flathub](https://flathub.org/apps/com.blitter ### Standalone binaries -The latest `stable` releases come with binaries for several different platforms, that you can download from the [Releases](https://github.com/midwan/amiberry/releases) area. If your platform is not included, or if you want to test a newer version than the stable release, then you will have to compile it yourself. Read on to see how to do that. +The latest `stable` releases come with binaries for several different platforms, that you can download from the [Releases](https://github.com/BlitterStudio/amiberry/releases) area. If your platform is not included, or if you want to test a newer version than the stable release, then you will have to compile it yourself. Read on to see how to do that. ### Compile from source diff --git a/docs/resources/rp-install-source.yml b/docs/resources/rp-install-source.yml index df176801f..5e0865674 100644 --- a/docs/resources/rp-install-source.yml +++ b/docs/resources/rp-install-source.yml @@ -172,6 +172,6 @@ records: - delay: 135 content: "\r\n= = = = = = = = = = = = = = = = = = = = =\r\nInstalling dependencies for 'amiberry' : Amiga emulator with JIT support (forked from uae4arm)\r\n= = = = = = = = = = = = = = = = = = = = =\r\n\r\n" - delay: 860 - content: "/home/pi/RetroPie-Setup/tmp/build/amiberry /home/pi\r\n\r\n= = = = = = = = = = = = = = = = = = = = =\r\nGetting sources for 'amiberry' : Amiga emulator with JIT support (forked from uae4arm)\r\n= = = = = = = = = = = = = = = = = = = = =\r\n\r\ngit clone --recursive --depth 1 \"https://github.com/midwan/amiberry/\" \"/home/pi/RetroPie-Setup/tmp/build/amiberry\"\r\n" + content: "/home/pi/RetroPie-Setup/tmp/build/amiberry /home/pi\r\n\r\n= = = = = = = = = = = = = = = = = = = = =\r\nGetting sources for 'amiberry' : Amiga emulator with JIT support (forked from uae4arm)\r\n= = = = = = = = = = = = = = = = = = = = =\r\n\r\ngit clone --recursive --depth 1 \"https://github.com/BlitterStudio/amiberry/\" \"/home/pi/RetroPie-Setup/tmp/build/amiberry\"\r\n" - delay: 7 content: "Cloning into '/home/pi/RetroPie-Setup/tmp/build/amiberry'...\r\n" diff --git a/external/capsimage/CMakeLists.txt b/external/capsimage/CMakeLists.txt index c66316659..a9fe9eb1e 100644 --- a/external/capsimage/CMakeLists.txt +++ b/external/capsimage/CMakeLists.txt @@ -66,7 +66,7 @@ target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_CONFIG_H=1) install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib + LIBRARY DESTINATION lib/amiberry RUNTIME DESTINATION bin FRAMEWORK DESTINATION "/Library/Frameworks" PUBLIC_HEADER DESTINATION include/caps${INCLUDE_SUFFIX}) diff --git a/external/floppybridge/CMakeLists.txt b/external/floppybridge/CMakeLists.txt index 93e7aba41..a0655d6a6 100644 --- a/external/floppybridge/CMakeLists.txt +++ b/external/floppybridge/CMakeLists.txt @@ -27,6 +27,6 @@ endif () install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib + LIBRARY DESTINATION lib/amiberry RUNTIME DESTINATION bin ) \ No newline at end of file diff --git a/macos_init_amiberry.zsh b/macos_init_amiberry.zsh index 99b39b8a1..8f8ff7294 100644 --- a/macos_init_amiberry.zsh +++ b/macos_init_amiberry.zsh @@ -35,11 +35,11 @@ for file in $CWD_VAR/../Resources/Controllers/**/*(.); do fi done -for file in $CWD_VAR/../Resources/Kickstarts/**/*(.); do - if [[ ! -f "$USERDIR/Documents/Amiberry/Kickstarts${file##*/Kickstarts}" ]]; then - echo "Copying $file to $USERDIR/Documents/Amiberry/Kickstarts${file##*/Kickstarts}" - mkdir -p $(dirname "$USERDIR/Documents/Amiberry/Kickstarts${file##*/Kickstarts}") - cp $file "$USERDIR/Documents/Amiberry/Kickstarts${file##*/Kickstarts}" +for file in $CWD_VAR/../Resources/Roms/**/*(.); do + if [[ ! -f "$USERDIR/Documents/Amiberry/Roms${file##*/Roms}" ]]; then + echo "Copying $file to $USERDIR/Documents/Amiberry/Roms${file##*/Roms}" + mkdir -p $(dirname "$USERDIR/Documents/Amiberry/Roms${file##*/Roms}") + cp $file "$USERDIR/Documents/Amiberry/Roms${file##*/Roms}" fi done diff --git a/make-bundle.sh b/make-bundle.sh index cdc63664c..e511254da 100644 --- a/make-bundle.sh +++ b/make-bundle.sh @@ -34,7 +34,7 @@ cp -R data Amiberry.app/Contents/Resources/Data cp -R floppies Amiberry.app/Contents/Resources/Floppies cp -R harddrives Amiberry.app/Contents/Resources/Harddrives cp -R inputrecordings Amiberry.app/Contents/Resources/Inputrecordings -cp -R kickstarts Amiberry.app/Contents/Resources/Kickstarts +cp -R roms Amiberry.app/Contents/Resources/Roms cp -R lha Amiberry.app/Contents/Resources/Lha cp -R nvram Amiberry.app/Contents/Resources/Nvram cp -R plugins Amiberry.app/Contents/Resources/Plugins diff --git a/kickstarts/aros-ext.bin b/roms/aros-ext.bin similarity index 100% rename from kickstarts/aros-ext.bin rename to roms/aros-ext.bin diff --git a/kickstarts/aros-rom.bin b/roms/aros-rom.bin similarity index 100% rename from kickstarts/aros-rom.bin rename to roms/aros-rom.bin diff --git a/kickstarts/dir.txt b/roms/dir.txt similarity index 100% rename from kickstarts/dir.txt rename to roms/dir.txt diff --git a/kickstarts/mt32-roms/dir.txt b/roms/mt32-roms/dir.txt similarity index 100% rename from kickstarts/mt32-roms/dir.txt rename to roms/mt32-roms/dir.txt diff --git a/src/cfgfile.cpp b/src/cfgfile.cpp index 43ae219f5..48f681a29 100644 --- a/src/cfgfile.cpp +++ b/src/cfgfile.cpp @@ -9321,62 +9321,61 @@ static int bip_a1200 (struct uae_prefs *p, int config, int compa, int romcheck) p->cs_rtc = 0; p->cs_compatible = CP_A1200; built_in_chipset_prefs (p); - switch (config) - { - case 1: - p->fastmem[0].size = 0x400000; - p->cs_rtc = 1; - break; + switch (config) + { + case 1: + p->fastmem[0].size = 0x400000; + p->cs_rtc = 1; + break; #ifdef WITH_CPUBOARD - case 2: - cpuboard_setboard(p, BOARD_BLIZZARD, BOARD_BLIZZARD_SUB_1230IV); - p->cpuboardmem1.size = 32 * 1024 * 1024; - p->cpu_model = 68030; - p->cs_rtc = 1; - roms_bliz[0] = 89; - configure_rom(p, roms_bliz, romcheck); - break; - case 3: - cpuboard_setboard(p, BOARD_BLIZZARD, BOARD_BLIZZARD_SUB_1260); - p->cpuboardmem1.size = 32 * 1024 * 1024; - p->cpu_model = 68040; - p->fpu_model = 68040; - p->cs_rtc = 1; - roms_bliz[0] = 90; - configure_rom(p, roms_bliz, romcheck); - break; - case 4: - cpuboard_setboard(p, BOARD_BLIZZARD, BOARD_BLIZZARD_SUB_1260); - p->cpuboardmem1.size = 32 * 1024 * 1024; - p->cpu_model = 68060; - p->fpu_model = 68060; - p->cs_rtc = 1; - roms_bliz[0] = 90; - configure_rom(p, roms_bliz, romcheck); - break; + case 2: + cpuboard_setboard(p, BOARD_BLIZZARD, BOARD_BLIZZARD_SUB_1230IV); + p->cpuboardmem1.size = 32 * 1024 * 1024; + p->cpu_model = 68030; + p->cs_rtc = 1; + roms_bliz[0] = 89; + configure_rom(p, roms_bliz, romcheck); + break; + case 3: + cpuboard_setboard(p, BOARD_BLIZZARD, BOARD_BLIZZARD_SUB_1260); + p->cpuboardmem1.size = 32 * 1024 * 1024; + p->cpu_model = 68040; + p->fpu_model = 68040; + p->cs_rtc = 1; + roms_bliz[0] = 90; + configure_rom(p, roms_bliz, romcheck); + break; + case 4: + cpuboard_setboard(p, BOARD_BLIZZARD, BOARD_BLIZZARD_SUB_1260); + p->cpuboardmem1.size = 32 * 1024 * 1024; + p->cpu_model = 68060; + p->fpu_model = 68060; + p->cs_rtc = 1; + roms_bliz[0] = 90; + configure_rom(p, roms_bliz, romcheck); + break; #ifdef WITH_PPC - case 5: - cpuboard_setboard(p, BOARD_BLIZZARD, BOARD_BLIZZARD_SUB_PPC); - p->cpuboardmem1.size = 256 * 1024 * 1024; - p->cpu_model = 68060; - p->fpu_model = 68060; - p->ppc_mode = 1; - p->cs_rtc = 1; - roms[0] = 15; - roms[1] = 11; - roms[2] = -1; - roms_bliz[0] = 100; - configure_rom(p, roms_bliz, romcheck); - break; + case 5: + cpuboard_setboard(p, BOARD_BLIZZARD, BOARD_BLIZZARD_SUB_PPC); + p->cpuboardmem1.size = 256 * 1024 * 1024; + p->cpu_model = 68060; + p->fpu_model = 68060; + p->ppc_mode = 1; + p->cs_rtc = 1; + roms[0] = 15; + roms[1] = 11; + roms[2] = -1; + roms_bliz[0] = 100; + configure_rom(p, roms_bliz, romcheck); + break; #endif #else - case 2: - p->fastmem[0].size = 0x800000; - p->cs_rtc = 1; - break; + case 2: + p->fastmem[0].size = 0x800000; + p->cs_rtc = 1; + break; #endif - - } + } set_68020_compa (p, compa, 0); return configure_rom (p, roms, romcheck); } diff --git a/src/main.cpp b/src/main.cpp index a35106b9f..ef4862ff8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -859,7 +859,7 @@ void usage() std::cout << " -O Set graphics specs." << '\n'; std::cout << " -H Color mode." << '\n'; std::cout << " -o = Set Amiberry configuration parameter with value." << '\n'; - std::cout << " See: https://github.com/midwan/amiberry/wiki/Amiberry.conf-options" << + std::cout << " See: https://github.com/BlitterStudio/amiberry/wiki/Amiberry.conf-options" << '\n'; std::cout << "\nExample 1:" << '\n'; std::cout << "amiberry --model A1200 -G" << '\n'; @@ -1392,7 +1392,7 @@ void download_rtb(const std::string& filename) if (!file_exists(destination)) { write_log("Downloading %s ...\n", destination.c_str()); - const std::string url = "https://github.com/midwan/amiberry/blob/master/whdboot/save-data/Kickstarts/" + filename + "?raw=true"; + const std::string url = "https://github.com/BlitterStudio/amiberry/blob/master/whdboot/save-data/Kickstarts/" + filename + "?raw=true"; download_file(url, destination, false); } } diff --git a/src/memory.cpp b/src/memory.cpp index 731630774..550e38f94 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -1774,7 +1774,7 @@ static bool load_kickstart_replacement(void) auto* arosrom = zfile_load_file(path, &arosrom_len); if (arosrom == nullptr) { - gui_message("Could not find the 'aros-ext.bin' file in the Kickstarts directory!"); + gui_message("Could not find the 'aros-ext.bin' file in the ROMs directory!"); return false; } struct zfile* f = zfile_fopen_data(path, arosrom_len, arosrom); @@ -1807,7 +1807,7 @@ static bool load_kickstart_replacement(void) arosrom = zfile_load_file(path, &arosrom_len); if (arosrom == nullptr) { - gui_message("Could not find the 'aros-rom.bin' file in the Kickstarts directory!"); + gui_message("Could not find the 'aros-rom.bin' file in the ROMs directory!"); return false; } f = zfile_fopen_data(path, arosrom_len, arosrom); diff --git a/src/osdep/amiberry.cpp b/src/osdep/amiberry.cpp index c50cd71e3..b2c822375 100644 --- a/src/osdep/amiberry.cpp +++ b/src/osdep/amiberry.cpp @@ -3930,7 +3930,7 @@ void init_macos_amiberry_folders(const std::string& macos_amiberry_directory) if (!my_existsdir(directory.c_str())) my_mkdir(directory.c_str()); - directory = macos_amiberry_directory + "/Kickstarts"; + directory = macos_amiberry_directory + "/Roms"; if (!my_existsdir(directory.c_str())) my_mkdir(directory.c_str()); @@ -4015,7 +4015,7 @@ void macos_copy_amiberry_files_to_userdir(std::string macos_amiberry_directory) } #endif -static void init_amiberry_paths(const std::string& data_directory, const std::string& home_directory, const std::string& config_directory) +static void init_amiberry_paths(const std::string& data_directory, const std::string& home_directory, const std::string& config_directory, const std::string& plugins_directory) { current_dir = home_dir = home_directory; #ifdef __MACH__ @@ -4050,7 +4050,7 @@ static void init_amiberry_paths(const std::string& data_directory, const std::st harddrive_path.append("/Harddrives/"); cdrom_path.append("/CDROMs/"); logfile_path.append("/Amiberry.log"); - rom_path.append("/Kickstarts/"); + rom_path.append("/Roms/"); rp9_path.append("/RP9/"); saveimage_dir.append("/Savestates/"); savestate_dir.append("/Savestates/"); @@ -4065,32 +4065,118 @@ static void init_amiberry_paths(const std::string& data_directory, const std::st amiberry_conf_file.append("amiberry.conf"); #else data_dir = data_directory; + data_dir.append("/data/"); + config_path = config_directory; + plugins_dir = plugins_directory; + // Just in case this is missing, and we need to create it (e.g. not installed system-wide) + if (!my_existsdir(plugins_dir.c_str())) + my_mkdir(plugins_dir.c_str()); + controllers_path = whdboot_path = whdload_arch_path = floppy_path = harddrive_path = cdrom_path = logfile_path = rom_path = rp9_path = saveimage_dir = savestate_dir = ripper_path = - input_dir = screenshot_dir = nvram_dir = plugins_dir = video_dir = + input_dir = screenshot_dir = nvram_dir = video_dir = home_directory; controllers_path.append("/controllers/"); - data_dir.append("/data/"); + if (!my_existsdir(controllers_path.c_str())) + { + my_mkdir(controllers_path.c_str()); + // copy default controller files, if they exist in /usr/share/amiberry/controllers + const std::string default_controller_path = "/usr/share/amiberry/controllers/"; + if (my_existsdir(default_controller_path.c_str())) + { + const std::string command = "cp -r " + default_controller_path + "* " + controllers_path; + system(command.c_str()); + } + // change permissions to user writable + std::string command = "chmod -R 755 " + controllers_path; + } + whdboot_path.append("/whdboot/"); + if (!my_existsdir(whdboot_path.c_str())) + { + my_mkdir(whdboot_path.c_str()); + // copy default whdboot files, if they exist in /usr/share/amiberry/whdboot + const std::string default_whdboot_path = "/usr/share/amiberry/whdboot/"; + if (my_existsdir(default_whdboot_path.c_str())) + { + const std::string command = "cp -r " + default_whdboot_path + "* " + whdboot_path; + system(command.c_str()); + } + // change permissions to user writable + std::string command = "chmod -R 755 " + whdboot_path; + } + whdload_arch_path.append("/lha/"); + if (!my_existsdir(whdload_arch_path.c_str())) + my_mkdir(whdload_arch_path.c_str()); + floppy_path.append("/floppies/"); + if (!my_existsdir(floppy_path.c_str())) + my_mkdir(floppy_path.c_str()); + harddrive_path.append("/harddrives/"); + if (!my_existsdir(harddrive_path.c_str())) + my_mkdir(harddrive_path.c_str()); + cdrom_path.append("/cdroms/"); + if (!my_existsdir(cdrom_path.c_str())) + my_mkdir(cdrom_path.c_str()); + logfile_path.append("/amiberry.log"); - rom_path.append("/kickstarts/"); + + rom_path.append("/roms/"); + if (!my_existsdir(rom_path.c_str())) + { + my_mkdir(rom_path.c_str()); + // copy default kickstart files, if they exist in /usr/share/amiberry/roms + const std::string default_kickstart_path = "/usr/share/amiberry/roms/"; + if (my_existsdir(default_kickstart_path.c_str())) + { + const std::string command = "cp -r " + default_kickstart_path + "* " + rom_path; + system(command.c_str()); + } + // change permissions to user writable + std::string command = "chmod -R 755 " + rom_path; + } + rp9_path.append("/rp9/"); + if (!my_existsdir(rp9_path.c_str())) + my_mkdir(rp9_path.c_str()); + saveimage_dir.append("/savestates/"); + if (!my_existsdir(saveimage_dir.c_str())) + my_mkdir(saveimage_dir.c_str()); + savestate_dir.append("/savestates/"); + if (!my_existsdir(savestate_dir.c_str())) + my_mkdir(savestate_dir.c_str()); + ripper_path.append("/ripper/"); + if (!my_existsdir(ripper_path.c_str())) + my_mkdir(ripper_path.c_str()); + input_dir.append("/inputrecordings/"); + if (!my_existsdir(input_dir.c_str())) + my_mkdir(input_dir.c_str()); + screenshot_dir.append("/screenshots/"); + if (!my_existsdir(screenshot_dir.c_str())) + my_mkdir(screenshot_dir.c_str()); + nvram_dir.append("/nvram/"); - plugins_dir.append("/plugins/"); + if (!my_existsdir(nvram_dir.c_str())) + my_mkdir(nvram_dir.c_str()); + + video_dir.append("/videos/"); + if (!my_existsdir(video_dir.c_str())) + my_mkdir(video_dir.c_str()); amiberry_conf_file = config_path; + if (!my_existsdir(config_path.c_str())) + my_mkdir(config_path.c_str()); amiberry_conf_file.append("/amiberry.conf"); #endif @@ -4147,7 +4233,7 @@ uae_u32 emulib_target_getcpurate(uae_u32 v, uae_u32* low) *low = 0; if (v == 1) { - *low = 1e+9; /* We have nano seconds */ + *low = 1e+9; /* We have nanoseconds */ return 0; } if (v == 2) @@ -4221,13 +4307,14 @@ std::string get_data_directory() if (env_data_dir != nullptr && directory_exists(env_data_dir, "/data")) { - // If the ENV variable is set, use it + // If the ENV variable is set, and it actually contains our data dir, use it write_log("Using data directory from AMIBERRY_DATA_DIR: %s\n", env_data_dir); return { env_data_dir }; } if (directory_exists("/usr/share/amiberry", "/data")) { - // If the data directory exists, use it + // If the data directory exists in /usr/share/amiberry, use it + // This would be the default location after an installation with the .deb package write_log("Using data directory from /usr/share/amiberry\n"); return "/usr/share/amiberry"; } @@ -4263,12 +4350,17 @@ std::string get_home_directory() write_log("Using home directory from XDG_DATA_HOME: %s\n", xdg_data_home); return { xdg_data_home }; } - if (user_home_dir != nullptr && directory_exists(user_home_dir, "/.amiberry")) + if (user_home_dir != nullptr) { - // $HOME/.amiberry exists, use it - write_log("Using home directory from $HOME/.amiberry\n"); + if (!directory_exists(user_home_dir, "/Amiberry")) + { + // If $HOME exists, but not the Amiberry subdirectory, create it + my_mkdir((std::string(user_home_dir) + "/Amiberry").c_str()); + } + // $HOME/Amiberry exists, use it + write_log("Using home directory from $HOME/Amiberry\n"); std::string result = std::string(user_home_dir); - return result.append("/.amiberry"); + return result.append("/Amiberry"); } // Fallback Portable mode, all in startup path @@ -4290,34 +4382,74 @@ std::string get_config_directory() write_log("Using config directory from XDG_CONFIG_HOME: %s\n", env_conf_dir); return { env_conf_dir }; } - if (xdg_config_home != nullptr && directory_exists(xdg_config_home, "/amiberry")) + if (xdg_config_home != nullptr) { // If the XDG_CONFIG_HOME is set, use it + if (!directory_exists(xdg_config_home, "/amiberry")) + { + // If the XDG_CONFIG_HOME exists, but not the amiberry subdirectory, create it + my_mkdir((std::string(xdg_config_home) + "/amiberry").c_str()); + } write_log("Using config directory from XDG_CONFIG_HOME: %s\n", xdg_config_home); return { std::string(xdg_config_home) + "/amiberry" }; } - if (user_home_dir != nullptr && directory_exists(user_home_dir, "/.config/amiberry")) + if (user_home_dir != nullptr) { - // $HOME/.config/amiberry exists, use it - write_log("Using config directory from $HOME/.config/amiberry\n"); - auto result = std::string(user_home_dir); - return result.append("/.config/amiberry"); - } - if (user_home_dir != nullptr && directory_exists(user_home_dir, "/.amiberry/conf")) - { - // $HOME/.amiberry/conf exists, use it - write_log("Using config directory from $HOME/.amiberry/conf\n"); + if (!directory_exists(user_home_dir, "/Amiberry")) + { + my_mkdir((std::string(user_home_dir) + "/Amiberry").c_str()); + } + // $HOME/Amiberry exists, use it + if (!directory_exists(user_home_dir, "/Amiberry/conf")) + { + my_mkdir((std::string(user_home_dir) + "/Amiberry/conf").c_str()); + } + // This should be the most used scenario + write_log("Using config directory from $HOME/Amiberry/conf\n"); auto result = std::string(user_home_dir); - return result.append("/.amiberry/conf"); + return result.append("/Amiberry/conf"); } // Fallback Portable mode, all in startup path + // Should never really end up here, unless $HOME is not defined write_log("Using config directory from startup path\n"); char tmp[MAX_DPATH]; getcwd(tmp, MAX_DPATH); return { std::string(tmp) + "/conf" }; } +std::string get_plugins_directory() +{ + // Check if we have the plugins installed system-wide (with a .deb package) + if (directory_exists("/usr/lib", "/amiberry")) + { + write_log("Using plugins directory from /usr/lib/amiberry\n"); + return "/usr/lib/amiberry"; + } + + const auto user_home_dir = getenv("HOME"); + if (user_home_dir != nullptr) + { + if (!directory_exists(user_home_dir, "/Amiberry")) + { + my_mkdir((std::string(user_home_dir) + "/Amiberry").c_str()); + } + // $HOME/Amiberry exists, use it + if (!directory_exists(user_home_dir, "/Amiberry/plugins")) + { + my_mkdir((std::string(user_home_dir) + "/Amiberry/plugins").c_str()); + } + write_log("Using plugins directory from $HOME/Amiberry/plugins\n"); + return { std::string(user_home_dir) + "/Amiberry/plugins" }; + } + + // Fallback Portable mode, all in the startup path + write_log("Using plugins directory from startup path\n"); + char tmp[MAX_DPATH]; + getcwd(tmp, MAX_DPATH); + return { std::string(tmp) + "/plugins" }; +} + int main(int argc, char* argv[]) { for (auto i = 1; i < argc; i++) { @@ -4347,8 +4479,9 @@ int main(int argc, char* argv[]) const std::string data_directory = get_data_directory(); const std::string home_directory = get_home_directory(); const std::string config_directory = get_config_directory(); + const std::string plugins_directory = get_plugins_directory(); - init_amiberry_paths(data_directory, home_directory, config_directory); + init_amiberry_paths(data_directory, home_directory, config_directory, plugins_directory); // Parse command line to possibly set amiberry_config. // Do not remove used args yet. diff --git a/src/osdep/amiberry_input.cpp b/src/osdep/amiberry_input.cpp index 9a0817075..a9a174a31 100644 --- a/src/osdep/amiberry_input.cpp +++ b/src/osdep/amiberry_input.cpp @@ -1033,10 +1033,9 @@ static int init_joystick() num_joystick = MAX_INPUT_DEVICES; // set up variables / paths etc. - char cfg[MAX_DPATH]; - get_configuration_path(cfg, MAX_DPATH); - strcat(cfg, "gamecontrollerdb.txt"); - SDL_GameControllerAddMappingsFromFile(cfg); + std::string cfg = get_controllers_path(); + cfg += "gamecontrollerdb.txt"; + SDL_GameControllerAddMappingsFromFile(cfg.c_str()); std::string controllers = get_controllers_path(); controllers.append("gamecontrollerdb_user.txt"); diff --git a/src/osdep/amiberry_whdbooter.cpp b/src/osdep/amiberry_whdbooter.cpp index 9336e60e9..e203afcd8 100644 --- a/src/osdep/amiberry_whdbooter.cpp +++ b/src/osdep/amiberry_whdbooter.cpp @@ -33,7 +33,7 @@ extern char last_loaded_config[MAX_DPATH]; enum { A600_CONFIG = 3, // 8MB fast ram - A1200_CONFIG = 2 // 8MB fast ram + A1200_CONFIG = 1 // 8MB fast ram }; struct game_hardware_options @@ -1368,6 +1368,8 @@ void whdload_auto_prefs(uae_prefs* prefs, const char* filepath) // SET THE BASE AMIGA (Expanded A1200) write_log("WHDBooter - Host: A1200 ROM selected\n"); built_in_prefs(prefs, 4, A1200_CONFIG, 0, 0); + // set 8MB Fast RAM + prefs->fastmem[0].size = 0x800000; _tcscpy(prefs->description, _T("AutoBoot Configuration [WHDLoad] [AGA]")); } else diff --git a/src/osdep/gui/PanelPaths.cpp b/src/osdep/gui/PanelPaths.cpp index e7ad0f72e..3b98d6b94 100644 --- a/src/osdep/gui/PanelPaths.cpp +++ b/src/osdep/gui/PanelPaths.cpp @@ -314,12 +314,12 @@ class DownloadXMLButtonActionListener : public gcn::ActionListener // download WHDLoad executable destination = prefix_with_whdboot_path("WHDLoad"); write_log("Downloading %s ...\n", destination.c_str()); - download_file("https://github.com/midwan/amiberry/blob/master/whdboot/WHDLoad?raw=true", destination, false); + download_file("https://github.com/BlitterStudio/amiberry/blob/master/whdboot/WHDLoad?raw=true", destination, false); // download boot-data.zip destination = prefix_with_whdboot_path("boot-data.zip"); write_log("Downloading %s ...\n", destination.c_str()); - download_file("https://github.com/midwan/amiberry/blob/master/whdboot/boot-data.zip?raw=true", destination, false); + download_file("https://github.com/BlitterStudio/amiberry/blob/master/whdboot/boot-data.zip?raw=true", destination, false); // download kickstart RTB files for maximum compatibility download_rtb("kick33180.A500.RTB"); @@ -352,9 +352,7 @@ class DownloadControllerDbActionListener : public gcn::ActionListener public: void action(const gcn::ActionEvent& actionEvent) override { - char config_path[MAX_DPATH]; - get_configuration_path(config_path, MAX_DPATH); - auto destination = std::string(config_path); + std::string destination = get_controllers_path(); destination += "gamecontrollerdb.txt"; write_log("Downloading % ...\n", destination.c_str()); const auto* const url = "https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt"; @@ -876,7 +874,7 @@ bool HelpPanelPaths(std::vector& helptext) helptext.emplace_back("custom edits that may have been made."); helptext.emplace_back(" "); helptext.emplace_back("The \"Update Controllers DB\" button will attempt to download the latest version of"); - helptext.emplace_back("the bundled gamecontrollerdb.txt file, to be stored in the Configuration files path."); + helptext.emplace_back("the bundled gamecontrollerdb.txt file, to be stored in the Controllers files path."); helptext.emplace_back("The file contains the \"official\" mappings for recognized controllers by SDL2 itself."); helptext.emplace_back("Please note that this is separate from the user-configurable gamecontrollerdb_user.txt"); helptext.emplace_back("file, which is contained in the Controllers path. That file is never overwritten, and"); @@ -887,7 +885,7 @@ bool HelpPanelPaths(std::vector& helptext) helptext.emplace_back(" "); helptext.emplace_back("The paths for Amiberry resources include;"); helptext.emplace_back(" "); - helptext.emplace_back("- System ROMs: The Amiga Kickstart files are by default located under 'kickstarts'."); + helptext.emplace_back("- System ROMs: The Amiga Kickstart files are by default located under 'roms'."); helptext.emplace_back(" After changing the location of the Kickstart ROMs, or adding any additional ROMs, "); helptext.emplace_back(" click on the \"Rescan\" button to refresh the list of the available ROMs. Please"); helptext.emplace_back(" note that MT-32 ROM files may also reside here, or in a \"mt32-roms\" directory");