From af82ad783308b9627cfe8e4f93fc3f19910dc97b Mon Sep 17 00:00:00 2001 From: Horace And The Spider Date: Sun, 11 Mar 2018 20:09:57 +0000 Subject: [PATCH 1/4] WHDLoad Booter Direct within Amiberry (#283) * WHDBooter Itegration * Further WHDBoot development * Clean-ups and beginning of kick-rom checking * Loads matching .whd (database) config file from game-data folder, and .uae from /confs/ - start of host options * Fixes problem with saving of equally-named config. Some Host options being set from hard-code variables. (WIP) * Solution for host controller settings implemented * Example Template files (not final versions) * Game information (future database info) is imported from .whd file, .controls (customs) also loaded * Tidies up auto-loading of existing .uae config * Separates WHDLoad Booter into it's own module. `amiberry_whdbooter.cpp` * Many options now implemented from .whd (cpu speed and memory to-do) * Y offset, Memory , Clock Speed options added - all needed options now being implemented * Compatibility settings now correctly read from XML file (or fall-back to individual game file) and are applied * Custom controls now imported from XML. * Hostconfig options and general near-completion of WHDBooter * Final change and example XML file provided --- Makefile | 1 + src/include/options.h | 5 + src/main.cpp | 8 + src/osdep/amiberry_whdbooter.cpp | 857 ++++++++++++++++++ src/osdep/gui/PanelConfig.cpp | 10 +- whdboot/boot-data/C/Assign | Bin 0 -> 3220 bytes whdboot/boot-data/C/Copy | Bin 0 -> 5496 bytes whdboot/boot-data/C/Dir | Bin 0 -> 3440 bytes whdboot/boot-data/C/DiskInDrive | Bin 0 -> 6500 bytes whdboot/boot-data/C/Ed | Bin 0 -> 25044 bytes whdboot/boot-data/C/Execute | Bin 0 -> 4432 bytes whdboot/boot-data/C/GetMouseInput | Bin 0 -> 1616 bytes whdboot/boot-data/C/Info | Bin 0 -> 1980 bytes whdboot/boot-data/C/List | Bin 0 -> 5108 bytes whdboot/boot-data/C/Makedir | Bin 0 -> 464 bytes whdboot/boot-data/C/Rename | Bin 0 -> 1140 bytes whdboot/boot-data/C/Search | Bin 0 -> 2472 bytes whdboot/boot-data/C/SetPatch | Bin 0 -> 14868 bytes whdboot/boot-data/C/Type | Bin 0 -> 1496 bytes whdboot/boot-data/C/Version | Bin 0 -> 4804 bytes whdboot/boot-data/C/WHDLoad | Bin 0 -> 144518 bytes whdboot/boot-data/C/Wait | Bin 0 -> 852 bytes whdboot/boot-data/C/delete | Bin 0 -> 1972 bytes whdboot/boot-data/C/joytest | Bin 0 -> 8904 bytes whdboot/boot-data/C/jst | Bin 0 -> 88604 bytes whdboot/boot-data/C/kgiconload | Bin 0 -> 5348 bytes .../Devs/Kickstarts/kick33180.A500.RTB | Bin 0 -> 3882 bytes .../Devs/Kickstarts/kick33192.A500.RTB | Bin 0 -> 3882 bytes .../Devs/Kickstarts/kick34005.A500.RTB | Bin 0 -> 4020 bytes .../Devs/Kickstarts/kick40063.A600.RTB | Bin 0 -> 5000 bytes .../Devs/Kickstarts/kick40068.A1200.RTB | Bin 0 -> 5008 bytes .../Devs/Kickstarts/kick40068.A4000.RTB | Bin 0 -> 4976 bytes whdboot/boot-data/Devs/system-configuration | Bin 0 -> 232 bytes whdboot/boot-data/Libs/68040.library | Bin 0 -> 43428 bytes whdboot/boot-data/Libs/amigaguide.library | Bin 0 -> 24800 bytes whdboot/boot-data/Libs/amos.library | Bin 0 -> 46948 bytes whdboot/boot-data/Libs/asl.library | Bin 0 -> 43476 bytes whdboot/boot-data/Libs/datatypes.library | Bin 0 -> 18388 bytes whdboot/boot-data/Libs/diskfont.library | Bin 0 -> 15340 bytes whdboot/boot-data/Libs/explode.library | Bin 0 -> 1756 bytes whdboot/boot-data/Libs/iff.library | Bin 0 -> 3160 bytes whdboot/boot-data/Libs/iffparse.library | Bin 0 -> 6828 bytes whdboot/boot-data/Libs/lowlevel.library | Bin 0 -> 6920 bytes .../boot-data/Libs/mathieeedoubbas.library | Bin 0 -> 5240 bytes .../boot-data/Libs/mathieeedoubtrans.library | Bin 0 -> 16584 bytes .../boot-data/Libs/mathieeesingtrans.library | Bin 0 -> 10428 bytes whdboot/boot-data/Libs/mathtrans.library | Bin 0 -> 4280 bytes whdboot/boot-data/Libs/medplayer.library | Bin 0 -> 15340 bytes whdboot/boot-data/Libs/nonvolatile.library | Bin 0 -> 3588 bytes whdboot/boot-data/Libs/xpkmaster.library | Bin 0 -> 16496 bytes whdboot/boot-data/S/startup-sequence | 95 ++ whdboot/boot-data/S/whdload.prefs | 32 + .../boot-data/WHDBooter/Splash/intro_000.iff | Bin 0 -> 11310 bytes whdboot/boot-data/WHDBooter/Splash/titlesound | Bin 0 -> 86552 bytes whdboot/boot-data/WHDBooter/WSConfigs/1943.ws | 1 + .../WSConfigs/AfterBurnerActivision.ws | 2 + .../WHDBooter/WSConfigs/AlienBreed2.ws | 1 + .../WHDBooter/WSConfigs/AlienBreed3D.ws | 4 + .../WHDBooter/WSConfigs/AlienBreed3Ddemo.ws | 2 + .../boot-data/WHDBooter/WSConfigs/CarVup.ws | 3 + .../WHDBooter/WSConfigs/Cybernoid 2.ws | 6 + .../WHDBooter/WSConfigs/Cybernoid.ws | 6 + .../WHDBooter/WSConfigs/DalekAttack.ws | 2 + .../boot-data/WHDBooter/WSConfigs/Exile.ws | 1 + .../WHDBooter/WSConfigs/Flaschbier.ws | 2 + .../WHDBooter/WSConfigs/Gauntlet 2.ws | 1 + .../WHDBooter/WSConfigs/SuperCars 2.ws | 3 + whdboot/game-data/whdload_db.xml | 58 ++ whdboot/hostprefs.conf | 16 + 69 files changed, 1115 insertions(+), 1 deletion(-) create mode 100644 src/osdep/amiberry_whdbooter.cpp create mode 100755 whdboot/boot-data/C/Assign create mode 100755 whdboot/boot-data/C/Copy create mode 100755 whdboot/boot-data/C/Dir create mode 100755 whdboot/boot-data/C/DiskInDrive create mode 100755 whdboot/boot-data/C/Ed create mode 100755 whdboot/boot-data/C/Execute create mode 100755 whdboot/boot-data/C/GetMouseInput create mode 100755 whdboot/boot-data/C/Info create mode 100755 whdboot/boot-data/C/List create mode 100755 whdboot/boot-data/C/Makedir create mode 100755 whdboot/boot-data/C/Rename create mode 100755 whdboot/boot-data/C/Search create mode 100755 whdboot/boot-data/C/SetPatch create mode 100755 whdboot/boot-data/C/Type create mode 100755 whdboot/boot-data/C/Version create mode 100755 whdboot/boot-data/C/WHDLoad create mode 100755 whdboot/boot-data/C/Wait create mode 100755 whdboot/boot-data/C/delete create mode 100755 whdboot/boot-data/C/joytest create mode 100755 whdboot/boot-data/C/jst create mode 100755 whdboot/boot-data/C/kgiconload create mode 100755 whdboot/boot-data/Devs/Kickstarts/kick33180.A500.RTB create mode 100755 whdboot/boot-data/Devs/Kickstarts/kick33192.A500.RTB create mode 100755 whdboot/boot-data/Devs/Kickstarts/kick34005.A500.RTB create mode 100755 whdboot/boot-data/Devs/Kickstarts/kick40063.A600.RTB create mode 100755 whdboot/boot-data/Devs/Kickstarts/kick40068.A1200.RTB create mode 100755 whdboot/boot-data/Devs/Kickstarts/kick40068.A4000.RTB create mode 100755 whdboot/boot-data/Devs/system-configuration create mode 100755 whdboot/boot-data/Libs/68040.library create mode 100755 whdboot/boot-data/Libs/amigaguide.library create mode 100755 whdboot/boot-data/Libs/amos.library create mode 100755 whdboot/boot-data/Libs/asl.library create mode 100755 whdboot/boot-data/Libs/datatypes.library create mode 100755 whdboot/boot-data/Libs/diskfont.library create mode 100755 whdboot/boot-data/Libs/explode.library create mode 100755 whdboot/boot-data/Libs/iff.library create mode 100755 whdboot/boot-data/Libs/iffparse.library create mode 100755 whdboot/boot-data/Libs/lowlevel.library create mode 100755 whdboot/boot-data/Libs/mathieeedoubbas.library create mode 100755 whdboot/boot-data/Libs/mathieeedoubtrans.library create mode 100755 whdboot/boot-data/Libs/mathieeesingtrans.library create mode 100755 whdboot/boot-data/Libs/mathtrans.library create mode 100755 whdboot/boot-data/Libs/medplayer.library create mode 100755 whdboot/boot-data/Libs/nonvolatile.library create mode 100755 whdboot/boot-data/Libs/xpkmaster.library create mode 100755 whdboot/boot-data/S/startup-sequence create mode 100755 whdboot/boot-data/S/whdload.prefs create mode 100755 whdboot/boot-data/WHDBooter/Splash/intro_000.iff create mode 100755 whdboot/boot-data/WHDBooter/Splash/titlesound create mode 100755 whdboot/boot-data/WHDBooter/WSConfigs/1943.ws create mode 100755 whdboot/boot-data/WHDBooter/WSConfigs/AfterBurnerActivision.ws create mode 100755 whdboot/boot-data/WHDBooter/WSConfigs/AlienBreed2.ws create mode 100755 whdboot/boot-data/WHDBooter/WSConfigs/AlienBreed3D.ws create mode 100755 whdboot/boot-data/WHDBooter/WSConfigs/AlienBreed3Ddemo.ws create mode 100755 whdboot/boot-data/WHDBooter/WSConfigs/CarVup.ws create mode 100755 whdboot/boot-data/WHDBooter/WSConfigs/Cybernoid 2.ws create mode 100755 whdboot/boot-data/WHDBooter/WSConfigs/Cybernoid.ws create mode 100755 whdboot/boot-data/WHDBooter/WSConfigs/DalekAttack.ws create mode 100755 whdboot/boot-data/WHDBooter/WSConfigs/Exile.ws create mode 100755 whdboot/boot-data/WHDBooter/WSConfigs/Flaschbier.ws create mode 100755 whdboot/boot-data/WHDBooter/WSConfigs/Gauntlet 2.ws create mode 100755 whdboot/boot-data/WHDBooter/WSConfigs/SuperCars 2.ws create mode 100755 whdboot/game-data/whdload_db.xml create mode 100755 whdboot/hostprefs.conf diff --git a/Makefile b/Makefile index b0f96e36..a237561e 100644 --- a/Makefile +++ b/Makefile @@ -326,6 +326,7 @@ OBJS = \ src/osdep/amiberry_gui.o \ src/osdep/amiberry_rp9.o \ src/osdep/amiberry_mem.o \ + src/osdep/amiberry_whdbooter.o \ src/osdep/sigsegv_handler.o \ src/sounddep/sound.o \ src/osdep/gui/UaeRadioButton.o \ diff --git a/src/include/options.h b/src/include/options.h index d40d935e..91aac485 100644 --- a/src/include/options.h +++ b/src/include/options.h @@ -562,6 +562,10 @@ extern void fixup_cpu (struct uae_prefs *prefs); extern void cfgfile_compatibility_romtype(struct uae_prefs *p); extern void cfgfile_compatibility_rtg(struct uae_prefs *p); + +extern void whdload_auto_prefs (struct uae_prefs *p, char* filename); + + extern void check_prefs_changed_custom (void); extern void check_prefs_changed_cpu (void); extern void check_prefs_changed_audio (void); @@ -582,6 +586,7 @@ struct amiberry_customised_layout { }; + extern const int RemapEventList[]; extern const int RemapEventListSize; diff --git a/src/main.cpp b/src/main.cpp index 330ba349..99bdfaf0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -463,6 +463,7 @@ void print_usage() printf("\nUsage:\n"); printf(" -f Load a configuration file.\n"); printf(" -config= Load a configuration file.\n"); + printf(" -autowhdload= Load a WHDLoad game pack.\n"); printf(" -statefile= Load a save state file.\n"); printf(" -s = Set the configuration parameter with value.\n"); printf(" Edit a configuration file in order to know valid parameters and settings.\n"); @@ -517,6 +518,13 @@ static void parse_cmdline(int argc, TCHAR **argv) xfree(txt); loaded = true; } + else if (_tcsncmp(argv[i], _T("-autowhdload="), 13) == 0) { + TCHAR *txt = parsetextpath(argv[i] + 13); + whdload_auto_prefs (&currprefs, txt); + xfree(txt); + firstconfig = false; + loaded = true; + } else if (_tcscmp(argv[i], _T("-f")) == 0) { /* Check for new-style "-f xxx" argument, where xxx is config-file */ if (i + 1 == argc) { diff --git a/src/osdep/amiberry_whdbooter.cpp b/src/osdep/amiberry_whdbooter.cpp new file mode 100644 index 00000000..644bda2a --- /dev/null +++ b/src/osdep/amiberry_whdbooter.cpp @@ -0,0 +1,857 @@ +/* + * UAE - The Un*x Amiga Emulator + * + * Amiberry interface + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef ANDROID +#include +#endif +#include "sysconfig.h" +#include "sysdeps.h" +#include "config.h" +#include "uae.h" +#include "options.h" +#include "custom.h" +#include "inputdevice.h" +#include "disk.h" +#include "savestate.h" +#include "rommgr.h" +#include "zfile.h" +#include +#include "amiberry_rp9.h" +#include "machdep/rpt.h" + +#include "threaddep/thread.h" +#include "include/memory.h" +#include "keyboard.h" +#include "rtgmodes.h" +#include "gfxboard.h" +#include "amiberry_gfx.h" +#ifdef USE_SDL2 +#include +#endif + + + +#ifdef WITH_LOGGING +extern FILE *debugfile; +#endif + + +#include "crc32.h" +#include "fsdb.h" +#include +#include +#include + +#include +#include +#include + +extern void SetLastActiveConfig(const char* filename); + +//char start_path_data[MAX_DPATH]; +//char currentDir[MAX_DPATH]; +//static char config_path[MAX_DPATH]; +//char last_loaded_config[MAX_DPATH] = {'\0'}; + +extern char start_path_data[MAX_DPATH]; +extern char currentDir[MAX_DPATH]; +extern char last_loaded_config[MAX_DPATH]; + +#include "zfile.h" /// Horace added +#include /// Horace added +#include /// Horace added (to remove) +struct game_options { + TCHAR port0[256] = "nul\0"; + TCHAR port1[256] = "nul\0"; + TCHAR control[256] = "nul\0"; + TCHAR control2[256] = "nul\0"; + TCHAR fastcopper[256] = "nul\0"; + TCHAR cpu[256] = "nul\0"; + TCHAR blitter[256] = "nul\0"; + TCHAR clock[256] = "nul\0"; + TCHAR chipset[256] = "nul\0"; + TCHAR jit[256] = "nul\0"; + TCHAR cpu_comp[256] = "nul\0"; + TCHAR sprites[256] = "nul\0"; + TCHAR scr_height[256] = "nul\0"; + TCHAR y_offset[256] = "nul\0"; + TCHAR ntsc[256] = "nul\0"; + TCHAR chip[256] = "nul\0"; + TCHAR fast[256] = "nul\0"; + TCHAR z3[256] = "nul\0"; +}; + +struct host_options { + TCHAR controller1[256] = "nul\0"; + TCHAR controller2[256] = "nul\0"; + TCHAR controller3[256] = "nul\0"; + TCHAR controller4[256] = "nul\0"; + TCHAR mouse1[256] = "nul\0"; + TCHAR mouse2[256] = "nul\0"; + TCHAR ra_quit[256] = "nul\0"; + TCHAR ra_menu[256] = "nul\0"; + TCHAR ra_reset[256] = "nul\0"; + TCHAR key_quit[256] = "nul\0"; + TCHAR key_gui[256] = "nul\0"; + TCHAR deadzone[256] = "nul\0"; + TCHAR stereo_split[256] = "nul\0"; + TCHAR sound_on[256] = "nul\0"; + TCHAR sound_mode[256] = "nul\0"; + TCHAR frameskip[256] = "nul\0"; + TCHAR aspect_ratio[256] = "nul\0"; +}; + +static xmlNode* get_node(xmlNode* node, const char* name) +{ + for (auto curr_node = node; curr_node; curr_node = curr_node->next) + { + if (curr_node->type == XML_ELEMENT_NODE && strcmp(reinterpret_cast(curr_node->name), name) == 0) + return curr_node->children; + } + return nullptr; +} + + +static bool get_value(xmlNode* node, const char* key, char* value, int max_size) +{ + auto result = false; + + for (auto curr_node = node; curr_node; curr_node = curr_node->next) + { + if (curr_node->type == XML_ELEMENT_NODE && strcmp(reinterpret_cast(curr_node->name), key) == 0) + { + const auto content = xmlNodeGetContent(curr_node); + if (content != nullptr) + { + strncpy(value, reinterpret_cast(content), max_size); + xmlFree(content); + result = true; + } + break; + } + } + + return result; +} + + +static TCHAR *parsetext(const TCHAR *s) +{ + if (*s == '"' || *s == '\'') { + TCHAR *d; + TCHAR c = *s++; + int i; + d = my_strdup(s); + for (i = 0; i < _tcslen(d); i++) { + if (d[i] == c) { + d[i] = 0; + break; + } + } + return d; + } + else { + return my_strdup(s); + } +} + +static TCHAR *parsetextpath(const TCHAR *s) +{ + TCHAR *s2 = parsetext(s); + TCHAR *s3 = target_expand_environment(s2, NULL, 0); + xfree(s2); + return s3; +} + + +long GetFileSize(std::string filename) +{ + struct stat stat_buf; + int rc = stat(filename.c_str(), &stat_buf); + return rc == 0 ? stat_buf.st_size : -1; +} + +void RemoveChar(char* array, int len, int index) +{ + for(int i = index; i < len-1; ++i) + array[i] = array[i+1]; + array[len-1] = 0; +} + + +void parse_custom_settings(struct uae_prefs* p, char* InSettings) +{ + char temp_options[4096]; + strcpy(temp_options, InSettings); + + char *full_line; + full_line = strtok (temp_options,"\n"); + + while (full_line != NULL) + { + std::string line = full_line; + std::string check = "amiberry_custom"; + + if(strstr(line.c_str(),check.c_str()) != NULL) + { + cfgfile_parse_line(p, full_line, 0); + } + full_line = strtok (NULL, "\n"); + } +} + + +struct membuf : std::streambuf +{ + membuf(char* begin, char* end) { + this->setg(begin, begin, end); + } +}; + +const TCHAR* find_whdload_game_option(const TCHAR* find_setting, char* whd_options) +{ + char temp_options[4096]; + char temp_setting[4096]; + + strcpy(temp_options, whd_options); + auto output = "nul"; + + char *full_line; + full_line = strtok (temp_options,"\n"); + + char *this_option; + + while (full_line != NULL) + { + strcpy(temp_setting, find_setting); + strcat(temp_setting, "="); + + if (strlen(full_line) >= strlen(temp_setting)) + { + // check that the beginging of the full line + if (strncmp(temp_setting, full_line ,strlen(find_setting))==0) + { + std::string t = full_line; + t.erase (t.begin(),t.begin() + strlen(temp_setting)); + output = &t[0u]; + return output; + } + } + full_line = strtok (NULL, "\n"); + } + + return output; +} + + +struct game_options get_game_settings(char* HW) +{ + + struct game_options output_detail; + strcpy(output_detail.port0, find_whdload_game_option("PORT0",HW)); + strcpy(output_detail.port1, find_whdload_game_option("PORT1",HW)); + strcpy(output_detail.control, find_whdload_game_option("PRIMARY_CONTROL",HW)); + strcpy(output_detail.control2, find_whdload_game_option("SECONDARY_CONTROL",HW)); + strcpy(output_detail.fastcopper, find_whdload_game_option("FAST_COPPER",HW)); + strcpy(output_detail.cpu, find_whdload_game_option("CPU",HW)); + strcpy(output_detail.blitter, find_whdload_game_option("BLITTER",HW)); + strcpy(output_detail.clock, find_whdload_game_option("CLOCK",HW)); + strcpy(output_detail.chipset, find_whdload_game_option("CHIPSET",HW)); + strcpy(output_detail.jit, find_whdload_game_option("JIT",HW)); + strcpy(output_detail.cpu_comp, find_whdload_game_option("CPU_COMPATIBLE",HW)); + strcpy(output_detail.sprites, find_whdload_game_option("SPRITES",HW)); + strcpy(output_detail.scr_height, find_whdload_game_option("SCREEN_HEIGHT",HW)); + strcpy(output_detail.y_offset, find_whdload_game_option("SCREEN_Y_OFFSET",HW)); + strcpy(output_detail.ntsc, find_whdload_game_option("NTSC",HW)); + strcpy(output_detail.fast, find_whdload_game_option("FAST_RAM",HW)); + strcpy(output_detail.z3, find_whdload_game_option("Z3_RAM",HW)); + + return output_detail; +} + +struct host_options get_host_settings(char* HW) +{ + struct host_options output_detail; + strcpy(output_detail.controller1, find_whdload_game_option("CONTROLLER_1",HW)); + strcpy(output_detail.controller2, find_whdload_game_option("CONTROLLER_2",HW)); + strcpy(output_detail.controller3, find_whdload_game_option("CONTROLLER_3",HW)); + strcpy(output_detail.controller4, find_whdload_game_option("CONTROLLER_4",HW)); + strcpy(output_detail.mouse1, find_whdload_game_option("CONTROLLER_MOUSE_1",HW)); + strcpy(output_detail.mouse2, find_whdload_game_option("CONTROLLER_MOUSE_2",HW)); + strcpy(output_detail.ra_quit, find_whdload_game_option("RETROARCH_QUIT",HW)); + strcpy(output_detail.ra_menu, find_whdload_game_option("RETROARCH_MENU",HW)); + strcpy(output_detail.ra_reset, find_whdload_game_option("RETROARCH_RESET",HW)); + strcpy(output_detail.key_quit, find_whdload_game_option("KEY_FOR_QUIT",HW)); + strcpy(output_detail.key_gui, find_whdload_game_option("KEY_FOR_MENU",HW)); + strcpy(output_detail.deadzone, find_whdload_game_option("DEADZONE",HW)); + strcpy(output_detail.stereo_split, find_whdload_game_option("STEREO_SPLIT",HW)); + strcpy(output_detail.sound_on, find_whdload_game_option("SOUND_ON",HW)); + strcpy(output_detail.sound_mode, find_whdload_game_option("SOUND_MODE",HW)); + strcpy(output_detail.aspect_ratio, find_whdload_game_option("ASPECT_RATIO_FIX",HW)); + strcpy(output_detail.frameskip, find_whdload_game_option("FRAMESKIP",HW)); + + return output_detail; +} + +void symlink_roms(struct uae_prefs* p) + +{ + // *** KICKSTARTS *** + // + char KickPath[MAX_DPATH]; + int rom_test; + int roms[2]; + + // here we can do some checks for Kickstarts we might need to make symlinks for + strncpy(currentDir, start_path_data, MAX_DPATH); + snprintf(KickPath, MAX_DPATH, "%s/whdboot/boot-data/Devs/Kickstarts/kick33180.A500", start_path_data); + + + if (!zfile_exists(KickPath)) + { roms[0] = 5; // kickstart 1.2 A500 + rom_test = configure_rom(p, roms, 0); // returns 0 or 1 if found or not found + if (rom_test == 1) + symlink(p->romfile, KickPath); + } + + snprintf(KickPath, MAX_DPATH, "%s/whdboot/boot-data/Devs/Kickstarts/kick34005.A500", start_path_data); + if (!zfile_exists(KickPath)) + { roms[0] = 6; // kickstart 1.3 A500 + rom_test = configure_rom(p, roms, 0); // returns 0 or 1 if found or not found + printf(p->romfile); + printf("result: %d\n",rom_test); + + if (rom_test == 1) + symlink(p->romfile, KickPath); + } + + snprintf(KickPath, MAX_DPATH, "%s/whdboot/boot-data/Devs/Kickstarts/kick40068.A1200", start_path_data); + if (!zfile_exists(KickPath)) + { roms[0] = 15; // kickstart 3.1 A1200 + rom_test = configure_rom(p, roms, 0); // returns 0 or 1 if found or not found + if (rom_test == 1) + symlink(p->romfile, KickPath); + } + + } + + +void whdload_auto_prefs (struct uae_prefs* p, char* filepath) + +{ + // setup variables etc + TCHAR game_name[MAX_DPATH];; + TCHAR *txt2; + TCHAR tmp[MAX_DPATH]; + TCHAR tmp2[MAX_DPATH]; + + char BootPath[MAX_DPATH]; + char ConfigPath[MAX_DPATH]; + // char GameTypePath[MAX_DPATH]; + char WHDConfig[255]; + int rom_test; + int *type; + auto config_type = CONFIG_TYPE_ALL; + + char HardwareSettings[4096]; + char CustomSettings[4096]; + + fetch_configurationpath(ConfigPath,MAX_DPATH); + + // +// *** KICKSTARTS *** + + symlink_roms(p); + + + // this allows A600HD to be used to slow games down + int roms[2]; + roms[0] = 15; // kickstart 2.05 A600HD .. 10 + rom_test = configure_rom(p, roms , 0); // returns 0 or 1 if found or not found + const int a600_available = rom_test; + + +// +// *** GAME DETECTION *** + + // REMOVE THE FILE PATH AND EXTENSION + const TCHAR* filename = my_getfilepart(filepath); + // SOMEWHERE HERE WE NEED TO SET THE GAME 'NAME' FOR SAVESTATE ETC PURPOSES + extractFileName(filepath, last_loaded_config); + extractFileName(filepath, game_name); + removeFileExtension(game_name); + + // find the SHA1 - this currently does not return the correct result!! + long filesize; + filesize = GetFileSize(filepath); + // const TCHAR* filesha = get_sha1_txt (input, filesize); <<< ??! FIX ME + + + + // LOAD GAME SPECIFICS FOR EXISTING .UAE - USE SHA1 IF AVAILABLE + // CONFIG LOAD IF .UAE IS IN CONFIG PATH + strcpy(WHDConfig, ConfigPath); + strcat(WHDConfig, game_name); + strcat(WHDConfig,".uae"); + + + if (zfile_exists(WHDConfig)) + { target_cfgfile_load(&currprefs, WHDConfig, CONFIG_TYPE_ALL, 0); + return;} + + // LOAD HOST OPTIONS + char WHDPath[MAX_DPATH]; + struct host_options host_detail; + snprintf(WHDPath, MAX_DPATH, "%s/whdboot/", start_path_data); + + strcpy(WHDConfig, WHDPath); + strcat(WHDConfig,"hostprefs.conf"); + + if (zfile_exists(WHDConfig)) // use direct .whd file + { + ifstream readFile(WHDConfig); + std::ifstream in(WHDConfig); + std::string contents((std::istreambuf_iterator(in)), + std::istreambuf_iterator()); + + _stprintf(HardwareSettings, "%s",contents.c_str()); + + host_detail = get_host_settings(HardwareSettings); + } + + + // LOAD GAME SPECIFICS - USE SHA1 IF AVAILABLE + snprintf(WHDPath, MAX_DPATH, "%s/whdboot/game-data/", start_path_data); + struct game_options game_detail; + + + // EDIT THE FILE NAME TO USE HERE + strcpy(WHDConfig, WHDPath); + strcat(WHDConfig,game_name); + strcat(WHDConfig,".whd"); + + + if (zfile_exists(WHDConfig)) // use direct .whd file + { + + ifstream readFile(WHDConfig); + std::ifstream in(WHDConfig); + std::string contents((std::istreambuf_iterator(in)), + std::istreambuf_iterator()); + + _stprintf(HardwareSettings, "%s",contents.c_str()); + game_detail = get_game_settings(HardwareSettings); + } + else + { + strcpy(WHDConfig, WHDPath); + strcat(WHDConfig, "whdload_db.xml"); + + if (zfile_exists(WHDConfig)) // use XML database + { + char buffer[4096]; + xmlDocPtr doc; + xmlNodePtr game_node; + xmlNodePtr temp_node; + + doc = xmlParseFile(WHDConfig); + + const auto root_element = xmlDocGetRootElement(doc); + + game_node = get_node(root_element, "whdbooter"); + + while (game_node != NULL) + { + auto attr = xmlGetProp(game_node, reinterpret_cast("filename")); + if (attr != NULL) + { + if (strcmpi(reinterpret_cast(attr),game_name) == 0) + { + // now get the and items + + temp_node = game_node->xmlChildrenNode; + temp_node = get_node(temp_node, "hardware"); + if (xmlNodeGetContent(temp_node) != NULL) + { + _stprintf(HardwareSettings, "%s",xmlNodeGetContent(temp_node)); + game_detail = get_game_settings(HardwareSettings); + } + + temp_node = game_node->xmlChildrenNode; + temp_node = get_node(temp_node, "custom_controls"); + if (xmlNodeGetContent(temp_node) != NULL) + { + _stprintf(CustomSettings, "%s",xmlNodeGetContent(temp_node)); + // process these later + } + break; + } + } + xmlFree(attr); + game_node = game_node->next; + } + + xmlCleanupParser(); + } + } + + // debugging code! +// printf("port 0: %s \n",game_detail.port0); +// printf("port 1: %s \n",game_detail.port1); +// printf("contrl: %s \n",game_detail.control); +// printf("fstcpr: %s \n",game_detail.fastcopper); +// printf("cpu : %s \n",game_detail.cpu); +// printf("blitta: %s \n",game_detail.blitter); +// printf("clock : %s \n",game_detail.clock); +// printf("chipst: %s \n",game_detail.chipset); +// printf("jit : %s \n",game_detail.jit); +// printf("cpcomp: %s \n",game_detail.cpu_comp); +// printf("scrhei: %s \n",game_detail.scr_height); +// printf("scr y : %s \n",game_detail.y_offset); +// printf("ntsc : %s \n",game_detail.ntsc); +// printf("fast : %s \n",game_detail.fast); +// printf("z3 : %s \n",game_detail.z3); + + // debugging code! + printf("cont 1: %s \n",host_detail.controller1); + printf("cont 2: %s \n",host_detail.controller2); + printf("cont 3: %s \n",host_detail.controller3); + printf("cont 4: %s \n",host_detail.controller4); + printf("mous 1: %s \n",host_detail.mouse1); + printf("mous 2: %s \n",host_detail.mouse2); + printf("ra_qui: %s \n",host_detail.ra_quit); + printf("ra_men: %s \n",host_detail.ra_menu); + printf("ra_rst: %s \n",host_detail.ra_reset); + printf("ky_qut: %s \n",host_detail.key_quit); + printf("ky_gui: %s \n",host_detail.key_gui); + printf("deadzn: %s \n",host_detail.stereo_split); + printf("stereo: %s \n",host_detail.stereo_split); + printf("snd_on: %s \n",host_detail.sound_on); + printf("snd_md: %s \n",host_detail.sound_mode); + printf("aspect: %s \n",host_detail.aspect_ratio); + printf("frames: %s \n",host_detail.frameskip); + + + + + // +// *** EMULATED HARDWARE *** + // + + // SET UNIVERSAL DEFAULTS + p->start_gui = false; + + + if ((strcmpi(game_detail.cpu,"68000") == 0 || strcmpi(game_detail.cpu,"68010") == 0) && a600_available != 0) + // SET THE BASE AMIGA (Expanded A600) + { built_in_prefs(&currprefs, 2, 2, 0, 0); + _stprintf(txt2,"chipmem_size=4"); + cfgfile_parse_line(p, txt2, 0); + } + else + // SET THE BASE AMIGA (Expanded A1200) + { built_in_prefs(&currprefs, 3, 1, 0, 0); + if ((strcmpi(game_detail.fast,"nul") != 0) && (strcmpi(game_detail.cpu,"nul") == 0)) + strcpy(game_detail.cpu,_T("68020")); + } + + // DO CHECKS FOR AGA / CD32 + const int is_aga = (strstr(filename,"_AGA") != NULL || strcmpi(game_detail.chipset,"AGA") == 0); + const int is_cd32 = (strstr(filename,"_CD32") != NULL || strcmpi(game_detail.chipset,"CD32") == 0); + + // A1200 no AGA + if (is_aga == false && is_cd32 == false) + { + _tcscpy(p->description, _T("WHDLoad AutoBoot Configuration")); + + p->cs_compatible = CP_A600; + built_in_chipset_prefs(p); + p->chipset_mask = CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE; + p->m68k_speed = 0; + } + // A1200 + else + _tcscpy(p->description, _T("WHDLoad AutoBoot Configuration [AGA]")); + + + + //SET THE WHD BOOTER AND GAME DATA + snprintf(BootPath, MAX_DPATH, "%s/whdboot/boot-data/", start_path_data); + + // set the first (whdboot) Drive + _stprintf(tmp,_T("filesystem2=rw,DH0:DH0:%s,10"),BootPath); + txt2 = parsetextpath(_T(tmp)); + cfgfile_parse_line(p, txt2, 0); + + _stprintf(tmp,_T("uaehf0=dir,rw,DH0:DH0::%s,10") , BootPath); + txt2 = parsetextpath(_T(tmp)); + cfgfile_parse_line(p, txt2, 0); + + //set the Second (game data) drive + _stprintf(tmp,"filesystem2=rw,DH1:games:%s,0" , filepath); + txt2 = parsetextpath(_T(tmp)); + cfgfile_parse_line(p, txt2, 0); + + _stprintf(tmp,"uaehf1=dir,rw,DH1:games:%s,0" , filepath); + txt2 = parsetextpath(_T(tmp)); + cfgfile_parse_line(p, txt2, 0); + + //APPLY THE SETTINGS FOR MOUSE/JOYSTICK ETC + // CD32 + if ((is_cd32 == true && strcmpi(game_detail.port0,"nul") == 0) + || strcmpi(game_detail.port0,"cd32") == 0) + p->jports[0].mode = 7; + + if ((is_cd32 == true && strcmpi(game_detail.port1,"nul") == 0) + || strcmpi(game_detail.port1,"cd32") == 0) + p->jports[1].mode = 7; + + // JOY + if (strcmpi(game_detail.port0,"joy") == 0) + p->jports[0].mode = 3; + if (strcmpi(game_detail.port1,"joy") == 0) + p->jports[1].mode = 3; + + // MOUSE + if (strcmpi(game_detail.port0,"mouse") == 0) + p->jports[0].mode = 2; + if (strcmpi(game_detail.port1,"mouse") == 0) + p->jports[1].mode = 2; + + // APPLY SPECIAL CONFIG E.G. MOUSE OR ALT. JOYSTICK SETTINGS + for (auto i = 0; i < MAX_JPORTS; i++) + { + p->jports[i].id = JPORT_NONE; + p->jports[i].idc.configname[0] = 0; + p->jports[i].idc.name[0] = 0; + p->jports[i].idc.shortid[0] = 0; + } + + + // WHAT IS THE MAIN CONTROL? + // MOUSE GAMES + if (strcmpi(game_detail.control,"mouse") == 0 && strcmpi(host_detail.mouse1,"nul") != 0) + { _stprintf(txt2,"%s=%s",_T("joyport0"),_T(host_detail.mouse1)); + cfgfile_parse_line(p, txt2, 0); } + + if (strcmpi(game_detail.control,"mouse") == 0 && strcmpi(host_detail.mouse2,"nul") != 0) + { _stprintf(txt2,"%s=%s",_T("joyport1"),_T(host_detail.mouse2)); + cfgfile_parse_line(p, txt2, 0); + } + + // JOYSTICK GAMES + if (!strcmpi(game_detail.control,"mouse") == 0 && strcmpi(host_detail.controller1,"nul") != 0) + { _stprintf(txt2,"%s=%s",_T("joyport1"),_T(host_detail.controller1)); + cfgfile_parse_line(p, txt2, 0); } + + if (!strcmpi(game_detail.control,"mouse") == 0 && strcmpi(host_detail.controller2,"nul") != 0) + { _stprintf(txt2,"%s=%s",_T("joyport0"),_T(host_detail.controller2)); + cfgfile_parse_line(p, txt2, 0); + } + + // PARALLEL PORT GAMES + if (strcmpi(host_detail.controller3,"nul") != 0) + { _stprintf(txt2,"%s=%s",_T("joyport2"),_T(host_detail.controller3)); + cfgfile_parse_line(p, txt2, 0); + } + if (strcmpi(host_detail.controller4,"nul") != 0) + { _stprintf(txt2,"%s=%s",_T("joyport3"),_T(host_detail.controller4)); + cfgfile_parse_line(p, txt2, 0); + } + + // CUSTOM CONTROLS + if (strlen(CustomSettings) > 0 ) + parse_custom_settings(p, CustomSettings); + + if (!strcmpi(host_detail.deadzone,"nul") == 0) + { _stprintf(txt2,"input.joymouse_deadzone=%s",_T(host_detail.deadzone)); + cfgfile_parse_line(p, txt2, 0); + _stprintf(txt2,"input.joystick_deadzone=%s",_T(host_detail.deadzone)); + cfgfile_parse_line(p, txt2, 0); + } + + + // RETROARCH CONTROLS + if (!strcmpi(host_detail.ra_quit,"nul") == 0) + { _stprintf(txt2,"amiberry.use_retroarch_quit=%s",_T(host_detail.ra_quit)); + cfgfile_parse_line(p, txt2, 0); + } + if (!strcmpi(host_detail.ra_menu,"nul") == 0) + { _stprintf(txt2,"amiberry.use_retroarch_menu=%s",_T(host_detail.ra_menu)); + cfgfile_parse_line(p, txt2, 0); + } + if (!strcmpi(host_detail.ra_reset,"nul") == 0) + { _stprintf(txt2,"amiberry.use_retroarch_reset=%s",_T(host_detail.ra_reset)); + cfgfile_parse_line(p, txt2, 0); + } + // KEYBOARD CONTROLS + + if (!strcmpi(host_detail.key_quit,"nul") == 0) + { _stprintf(txt2,"amiberry.quit_amiberry=%s",_T(host_detail.key_quit)); + cfgfile_parse_line(p, txt2, 0); + } + if (!strcmpi(host_detail.key_gui,"nul") == 0) + { _stprintf(txt2,"amiberry.open_gui=%s",_T(host_detail.key_gui)); + cfgfile_parse_line(p, txt2, 0); + } + // GRAPHICS OPTIONS + + if (!strcmpi(host_detail.aspect_ratio,"nul") == 0) + { _stprintf(txt2,"amiberry.gfx_correct_aspect=%s",_T(host_detail.aspect_ratio)); + cfgfile_parse_line(p, txt2, 0); + } + if (!strcmpi(host_detail.frameskip,"nul") == 0) + { _stprintf(txt2,"gfx_framerate=%s",_T(host_detail.frameskip)); + cfgfile_parse_line(p, txt2, 0); + } + // SOUND OPTIONS + + if (!strcmpi(host_detail.sound_on,"false") == 0 || !strcmpi(host_detail.sound_on,"off") == 0 || !strcmpi(host_detail.sound_on,"none") == 0) + { _stprintf(txt2,"sound_output=none"); + cfgfile_parse_line(p, txt2, 0); + } + if (!strcmpi(host_detail.stereo_split,"nul") == 0) + { _stprintf(txt2,"sound_stereo_separation=%s",_T(host_detail.stereo_split)); + cfgfile_parse_line(p, txt2, 0); + } + + // *** GAME-SPECIFICS *** + // SET THE GAME COMPATIBILITY SETTINGS + // + // SCREEN HEIGHT, BLITTER, SPRITES, MEMORY, JIT, BIG CPU ETC + + + // CPU 68020/040 + if (strcmpi(game_detail.cpu,"68020") == 0 || strcmpi(game_detail.cpu,"68040") == 0) + { _stprintf(txt2,"cpu_type=%s",game_detail.cpu); + cfgfile_parse_line(p, txt2, 0); } + + // CPU 68000/010 [requires a600 rom)] + if ((strcmpi(game_detail.cpu,"68000") == 0 || strcmpi(game_detail.cpu,"68010") == 0) && a600_available != 0) + { _stprintf(txt2,"cpu_type=%s",game_detail.cpu); + cfgfile_parse_line(p, txt2, 0); } + + + // CPU SPEED + if (strcmpi(game_detail.clock,"7") == 0) + { _stprintf(txt2,"cpu_speed=real"); + cfgfile_parse_line(p, txt2, 0); } + else if (strcmpi(game_detail.clock,"14") == 0) + { _stprintf(txt2,"finegrain_cpu_speed=1024"); + cfgfile_parse_line(p, txt2, 0); } + else if (strcmpi(game_detail.clock,"28") == 0) + { _stprintf(txt2,"finegrain_cpu_speed=128"); + cfgfile_parse_line(p, txt2, 0); } + else if (strcmpi(game_detail.clock,"max") == 0) + { _stprintf(txt2,"cpu_speed=max"); + cfgfile_parse_line(p, txt2, 0); } + else if (strcmpi(game_detail.clock,"turbo") == 0) + { _stprintf(txt2,"cpu_speed=turbo"); + cfgfile_parse_line(p, txt2, 0); } + + //FAST / Z3 MEMORY REQUIREMENTS + + int temp_ram; + if (strcmpi(game_detail.fast,"nul") != 0) + { + temp_ram = atol(game_detail.fast) ; + _stprintf(txt2,"fastmem_size=%d",temp_ram); + cfgfile_parse_line(p, txt2, 0); + } + if (strcmpi(game_detail.fast,"nul") != 0) + { + temp_ram = atol(game_detail.z3) ; + _stprintf(txt2,"z3mem_size=%d",temp_ram); + cfgfile_parse_line(p, txt2, 0); + } + + + // FAST COPPER + if (strcmpi(game_detail.fastcopper,"true") == 0) + { _stprintf(txt2,"fast_copper=true"); + cfgfile_parse_line(p, txt2, 0); } + + // BLITTER=IMMEDIATE/WAIT/NORMAL + if (strcmpi(game_detail.blitter,"immediate") == 0) + { _stprintf(txt2,"immediate_blits=true"); + cfgfile_parse_line(p, txt2, 0); + } + else if (strcmpi(game_detail.blitter,"normal") == 0) + { _stprintf(txt2,"waiting_blits=disabled"); + cfgfile_parse_line(p, txt2, 0); } + + // CHIPSET OVERWRITE + if (strcmpi(game_detail.chipset,"ocs") == 0) + { p->cs_compatible = CP_A600; + built_in_chipset_prefs(p); + p->chipset_mask = 0; } + + else if (strcmpi(game_detail.chipset,"ecs") == 0) + { p->cs_compatible = CP_A600; + built_in_chipset_prefs(p); + p->chipset_mask = CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE; } + + else if (strcmpi(game_detail.chipset,"aga") == 0) + { p->cs_compatible = CP_A1200; + built_in_chipset_prefs(p); + p->chipset_mask = CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE | CSMASK_AGA; } + + // JIT + if (strcmpi(game_detail.jit,"true") == 0) + { _stprintf(txt2,"cachesize=8192"); + cfgfile_parse_line(p, txt2, 0); } + + // COMPATIBLE CPU + if (strcmpi(game_detail.cpu_comp,"true") == 0) + { _stprintf(txt2,"cpu_compatible=true"); + cfgfile_parse_line(p, txt2, 0); } + + // NTSC + if (strcmpi(game_detail.ntsc,"true") == 0) + { _stprintf(txt2,"ntsc=true"); + cfgfile_parse_line(p, txt2, 0); } + + // NTSC + if (strcmpi(game_detail.ntsc,"true") == 0) + { _stprintf(txt2,"ntsc=true"); + cfgfile_parse_line(p, txt2, 0); } + + // SCREEN HEIGHT + if (strcmpi(game_detail.scr_height,"nul") != 0 ) + { _stprintf(txt2,"gfx_height=%s",game_detail.scr_height); + cfgfile_parse_line(p, txt2, 0); + _stprintf(txt2,"gfx_height_windowed=%s",game_detail.scr_height); + cfgfile_parse_line(p, txt2, 0); + _stprintf(txt2,"gfx_height_fullscreen=%s",game_detail.scr_height); + cfgfile_parse_line(p, txt2, 0); } + + // Y OFFSET + if (strcmpi(game_detail.y_offset,"nul") != 0 ) + { _stprintf(txt2,"amiberry.vertical_offset=%s",game_detail.y_offset); + cfgfile_parse_line(p, txt2, 0); + } + + // SPRITE COLLISION + if (strcmpi(game_detail.scr_height,"nul") != 0 ) + { _stprintf(txt2,"collision_level=%s",game_detail.sprites); + cfgfile_parse_line(p, txt2, 0); } + + + + // CLEAN UP SETTINGS + // fixup_prefs(&currprefs, true); + // cfgfile_configuration_change(1); + +} \ No newline at end of file diff --git a/src/osdep/gui/PanelConfig.cpp b/src/osdep/gui/PanelConfig.cpp index deae8746..3db119fd 100644 --- a/src/osdep/gui/PanelConfig.cpp +++ b/src/osdep/gui/PanelConfig.cpp @@ -293,9 +293,17 @@ void InitPanelConfig(const struct _ConfigCategory& category) category.panel->add(txtDesc, DISTANCE_BORDER + lblDesc->getWidth() + 8, txtName->getY() + txtName->getHeight() + DISTANCE_NEXT_Y); if (strlen(last_active_config) == 0) + { + if (strlen(last_loaded_config) == 0) strncpy(last_active_config, OPTIONSFILENAME, MAX_DPATH); + else + { + strcpy(last_active_config, last_loaded_config); + removeFileExtension(last_active_config); + } + } txtName->setText(last_active_config); - txtDesc->setText(changed_prefs.description); + txtDesc->setText(changed_prefs.description); ensureVisible = -1; RefreshPanelConfig(); } diff --git a/whdboot/boot-data/C/Assign b/whdboot/boot-data/C/Assign new file mode 100755 index 0000000000000000000000000000000000000000..1ba33164243053bc6d2bc9596bc90ece56477578 GIT binary patch literal 3220 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 R-)Z|*Z>@H2)2IHkzW@hV{PF+* literal 0 HcmV?d00001 diff --git a/whdboot/boot-data/C/Dir b/whdboot/boot-data/C/Dir new file mode 100755 index 0000000000000000000000000000000000000000..06fc664113b4d78fe339930f161b989dd588c4bb GIT binary patch literal 3440 zcmb7GU2GKB6+U-%Z4b-VvfLHj0z#LooyFN*dmW&y8<}K=waxl^8H{a0Dy7nFuxGj( zdv~;6P(Xedr{X87grMz19-}^>Y9p_#s1K1O-3U>Hq6Q%oIVMp5s8L%bX4svn z?#$RmG=1nk?EO3E+=j?RSZgp$r zsHBYR(6Y-ff}}-HidyW1sCAqawN}3fVJ&o0)WRo3ZTCr0#X5?MRz~S|T2VRZv^`3~ zY12x?ImgWsw8m{aDFG%BNdlIu)-B0IRl>{FT84gKy+UU!QETMa0IVdPu`*8IXC-mF zm3I1^l_c#}kJCq1k{W7&POFW2EV3-@*r{@{bT$CcTPhVx34AJ7I(2$HTiRN~V})|* zELMxB3v7?J(Ol^z-2IF3SG_(6f-pWhDF~BT5GDZwehotaGPy~1fK$Z@eSEAuhTAbf z&lu~nC~g4UJvsjBmOpdf9JL>Kc@ndT>}-d6T{sel4;_|L0}QU-%%Ps%Oz%iQL&~QPv(idQ_5o07edt{A`e!{GX12RB>V=TNq`z^cT)#$8)2&G&ZRh z3zIAr21r)R<_ZCjPuLIAk6+v00nz?=+Wz9|t$5mAP4JNk`wKlJh$t50;{)~*Ux5ZB z;22`)4bF)qrHy^Fo@ttMHOpA7{NI%iMf&JIOK$0V~pDx|r2mKzc@gD=4P!R>1d%7vt7e-RjCb^u0GKh-jTIPH(rd+%Qe8 z*-KfdS6$Tkm=`tgM%BQlc)M{7Wtell^8mAYoBQ4*hS-ZEh};4-)IDxa_LLx^sASd( zoBYZs0QVeB^W4JVrPMM+bS%#`tg`XmJYeukYxb&;=Drdp>{V{j;nd>bCBp3Aljj=l zQ==GS)+En;g|A}vU*Q&%9bVK$$9Irhq!n&a{lxj_H>|#c>wqHKE2L4b+V8f3w2Uaj z%Kn%dYBPHoSf!P#R#XW{=Ce5$N8)GJe1-Ya^BUAM!ShTjYFLi5}9b?YWg3lwR1M_n7UJyj??m46Yy6&+CU>-L;x^(B_h#`pFd^FE3NGre# zY3{aUng-(@j)T8co1JDa-m@^9(S5TYg5Mc8zsSyKTo(LYl4;&@xan}x$=^YmX+WOy zkGyg0zjy>a9Tns=E)(mKWi@|^D@Hr8vizX!h>zym4M+#}EVo;b6<=VqJbIp1B} z@W>$0I1Rwf3%?43?z?h620EHEG{%tydPNnVM_FQO=96h?a~1vcK^A;|rs$`?W~ezz zOG0Er!-p%}UFXbsZb2C27HEZA&8IiBYh>{U8rud0jm zf)*fN<+QJ59%gFn?RM+@f&I~R2PBXV`$QDuS6Efhe^3Hx&0cD8z7Z2|vpQzqB#f`` zv-|UuIn0!q6k#_t)QD#_wa-!J`aQzCGqsE!Vv!Z#n&|~~r({0$vu_`J$@xxnV%HWU zq7s(Or;+bk!2z|EDTYPfh=o3;Gxm}Oa79OdG*o~~q={)K0n!RnTBIAmw?K!*7+bWAgQ&Qf;U=bD^=jF~GT_{6Kr+8Ez52CanmE7wy`P8}0}o{TTK~(~OhFc#Lo$vg}K z9-v{hHhk&oUof9}m;vSqKzPO9^0~$j8>8z={{R`>U0MJD literal 0 HcmV?d00001 diff --git a/whdboot/boot-data/C/DiskInDrive b/whdboot/boot-data/C/DiskInDrive new file mode 100755 index 0000000000000000000000000000000000000000..9b1b653f29dbe29e6c526164c2be085ddc203e19 GIT binary patch literal 6500 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 Ka*q4+eDJ>~+OvoN literal 0 HcmV?d00001 diff --git a/whdboot/boot-data/C/Ed b/whdboot/boot-data/C/Ed new file mode 100755 index 0000000000000000000000000000000000000000..2a1acbb609cb4f394d63d7966305659e47d51426 GIT binary patch literal 25044 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 b!v7YHhx9i9^jEcipTSn(tA#WybL0O5BbOh2 literal 0 HcmV?d00001 diff --git a/whdboot/boot-data/C/Execute b/whdboot/boot-data/C/Execute new file mode 100755 index 0000000000000000000000000000000000000000..9944e85c50fbf23368a642b97a0606bb7480c531 GIT binary patch literal 4432 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 literal 0 HcmV?d00001 diff --git a/whdboot/boot-data/C/Info b/whdboot/boot-data/C/Info new file mode 100755 index 0000000000000000000000000000000000000000..d3390c292b6524cb25d0c5a68126cacc2df53aca GIT binary patch literal 1980 zcmbtVZ)g)|82?=oyEN7@$S52T`xAVGH^v$&a^IG(yL2sCmX`0OLB`QO}JcT zmLjJNwFojcKgmA%VT^4Jo9xp*3@3h&A%2iDQji&>YByJqZ6D;8 zJGx5iLiaHQi*#A3HtvQZ2+C&8t5oS655cKaTLBf$WLe<%fCFcDIT(tdUp8~TcGeRs z`{V^$&w*>`8`{yPE<{wIsz+AmJ6%>}Q}dqS^u)b+1MLpDLk{Q|dqD)yiY zJOU15+lLr%1zk#&dJ}h`%BH544|dR$5LT+qgMkRynCtx)O{Z!?dI(op>5AAHo&t=3`|x<>fS-UmO}IsZb089}mh(wW$P35Lhp=F?UlwlLPmQ-u<5` zJu5HyfACuC*XDJ8y+30Wekv=j&B}4>X{=Om9(~gqr$CX`PaqV5pgvz7{$_K|wRf|+ zC3!A+h7@U?kICC|jnw?7*MFEV)|p3e^C1Yw*7EJ|s!bCSZta6-*cT&WoZc4VY|5%Y zj>7%zZ*b>cA_H*oB3zeE?RnYEb+J|I79p*x#eX>E^WVX-}x zkf;4!`4WO@a5p521MhBUHxh#j^mcnfo%q*>#sejU*>1DXj4}&8gkWd==X{Z_Fn?=` zw@+ScN+t3FUDiCzZb#VJ=MRuP=PS>?62S$sA#o?sP!20InNnr2ke|}i`f0;IccqU7QnPRp=(#O*I zLVBu@9rgh4b!s05;I9yW#RCjODcQY9S@923W3;1{JuJ~UsWc(HX z?m~vW#J{VM@%wE-h+U8PcQACyL~}9rVEa&DzfgpG5Mr#kNCwb<&m@uP3OF6TUV$51 zZPipq-%{#S#xmgJq}5i9kKMYu_eC*AYw}y#ko+awnn$u)Eip!KtL`;TvRaSro3{G#Aj9RVx%JL~QLbN5)gofRAjA(`Iey&~#fmwIjB4X;Ze` zpuO8;j-^JRC6lJs>oVi}qY2IDG97>SxV0_n%aYYPYh&q?tk!v3>y@n5g>`%vnI>7S zOY8WOZER=}5q)d|d_Vfbdq53HtIeACD!WPVog@;QOc`D;^QsQ-Qp(I&Oc!JHv6!Nd zhzKwH8xavbJU;mfUQwbeM1+qQ(GxrZcB7YrAYFBH*%Tu-4nd63dXEXb`a;P^x?+*o zm6f%ahsDYnUW9ion^jV(G!q2ta@V|U79Gjc;y(I2yEF6yAD`5^Ql{3U`XsA)LyXbC q82^sumaOJY=98@Etta^>?j)|Ua|RH%yfxQIo%Jr|8q5ZqfBXYrp640> literal 0 HcmV?d00001 diff --git a/whdboot/boot-data/C/List b/whdboot/boot-data/C/List new file mode 100755 index 0000000000000000000000000000000000000000..b76c5f4e09b30bb07c2d27a13eeea6270b3b2109 GIT binary patch literal 5108 zcmai2e{37qeg7OuNoQK|E{dwCo{_!Wj-oJq6`Nd$x+i)*k6Y)G&BjNf(w6tnnye-K_dr*bBh zV69M{AaQj1B{+Fj+rdlnH`U_6%-`MMw<(r15tvV3ZM6t>pH4jJV1ZHX zPfs8NCYnboI^|5lN&4hwwKy<+?pNai zPB)z2Fiupl$Iz|o(KDPMLM=eJobqz?O6lq&m{V%CMWv1xt5^v0 zZ@IK}OJ3ehGr9NjWIzL9`PuuHj5-J4r&|`xF&_zLxV4{$JUG zAv^lDvW3TGTmSSG*~?#%U0IVjY#ym}Qw2U3*Gt#wTme2KebjG+)!ZbG{zKED^^Ikk z0d&Rp`+FhqQY8W+jwA&1E2PV}u}l)Bn}@EHZc==Ho4`3c0miJ!ZxA#-=h1FZ5B?w2g9i0aD%7(T>hvROL!KLlACr05 zpc<=CjX7uNsSLR)zs<F$kEUg4et(U%M% zVmRy{fbci_qa9>yG?OLIJ>R;AwCru&y}Nba?!U4>0XTfSpU;pVIQC?I2#2q&JpQfz2hfhW1~aFMUU(v$uw~pMsSf-EFDV> zXNS|oM@F^rWO{hW4zxYjv1eb$o_)Yyeh07*9vBqE9RyHE$A&Y;H{ci>st6kzO%ET< zCex$Cna%kr92rX*$IFHSauZvw|jyC8iYjQh`{o8??7a}_;D-bDHT}c?UDIX zryNwD5%rCSW<92R#jvPvtX1kWYHtf&^bVAB$AGh}8w@ygf?b0JT!rIxgX0M6h83Kq zuz5PlbLdo?$xT8koF+xl7bHF7d3mUS1VU z%pOtSxM=FqHHWN%T1lSLjFXfns9lJ!yqeCgOfF2SYz4zve+6IyTVU4kfL+u}LDQDx7)GcxVpRN+ zm)~airANGvGokxt?~&T>m3IA>##IVW2Qm9}5a&Yo@l#hX-hAmk-g8CpmUtf@xFlTg zN8t7MqJ{TEpqxt0R04SyEzc(5HQztQhgB)2_q}MPaW#ja_Od*6?EADsVr-ioQlRq2 zvTH&5f}+||ebgeK0J~DeE}q?Lo8lYtl|o##d*p)ZkqdFfP7(!`yiV8hRJ@jWuvfLq zQ^_XcLAyrdbFT*LJMtXbHCQjob0FGInnBA&ye+W25B0`Lo{@7&SWnAy5WWKEs_;0h zFB@L=U`5+0-p5L4&D77ZYP%d%c?H%E*<)GJn#KE;{{`1z-L?Nd&Q#^6w)1kO!}A#4 z<5XLUQ7nch&WY3u65bT47bLtDqF(651;14Bf{`DkW;v%e(|F;N@ES3v7f#c=mCmWY z;u>~^)(bc2I@Kz!7j8rrZLiBYt&s%jd-0|9!ewglG`LB{*5xZ)7T0jz&x-4Xw?lfN zGY0EFi)(0Xofg*%(;>a!j=_3ET*Iufb26kCnq#p3!=VGBUT6rd7m`%cD^OZfb+fOf z8G-qipSD<1w#D3-Ed|9wY=Rrp*U$VSr`pB!Lh{y!+!B1z*HY|aE^(8-ITbJ}IfkKI zA99?Ovjq`Lfa$Lf(pMoPEe8YNMs1`3`YQYu;<$*PV~Oc7Klm88nOdfi>0tQEUVujF zt?N`XGNXX0HP?b9PaU(1x;`RIE5IMASLDl>Rq5U#WA6^NfiYXzuv$fCg)Tey$LpNfkrBY31rP0TDb*yAIux(eIZeZ6T4P#)QdUvyJYm!YK|SmgKV|e ziySOJlr$lx1^p_u2YU>A;n!89mka!QeS8^KgbK~^wa!w2I$1uX@_WuF4`Z=TP zmXfTfKX^fyR%%84L8mY+Y!med9hKXl$FSqKhzH%85uYTtpLXmfZ8z#DDdXab#evBqeX};7=8amQ$`^!hw7_K0~t{@~=5Z&RsVH@pjBL@NL9@?Ce z&@0`eFBV#N_v>i#o`fwjU-~k9w;tiUVVKzEq9<4`HeI7D!kV!|e*vIfvUHE(oKh=N z;GSBTQf*|r!g7BuL;WI!@Le_+IbOveb)+x0ytx;kRDb_5_ms9HjRw3orCNl(=#P~z Ph&_C_K1X>2*8lt;3@Mje literal 0 HcmV?d00001 diff --git a/whdboot/boot-data/C/Makedir b/whdboot/boot-data/C/Makedir new file mode 100755 index 0000000000000000000000000000000000000000..0fae0eca855f5894fb263bee5bb82be18c29efe3 GIT binary patch literal 464 zcmXYtPixdr6vfYwI(D8YgUrHJc|Kmpe{rUcmZGZ}LW@m14=pHegruD$gm(UriN%o+ zx@jq0_XBj*mF6Re?)(TY3W5w6!P%&|2xFck^|v{TdpPIb3n;&EPT{|1Yy-;oOvN*K z_W0XUVj4Zc7wRJEhl*zDBH(C8S4y81>R4X?^8pjjIa&l@xa-!V|x{_Ea zg&1LUNb8;or9I^we5t*JLQ4rDxJ3u0_#mhcIs{sZ=?|?h?WKtAzB0SA(>?6RynXL| z@B4OU078F5@JM3>04WX-`duKu;XNq)`qunh2f~RJva|u8Jyj>0aV?97nF6R<5qnw@ z`&tqAwIU9*A|5P`LK{sbxx}4+hf0=2O$c$i01$&DzXmKmgd^P9WPM^`OicH z)aHr}e$|?m#eH*uEC9$a+fqU2jvpJau9*-~32Ye0dS-kad7jrdPTOYNXY;#%(wwqE zKf+<`+v|OF^^yDwjVvDFP?`K7nCWLNiw8!OJJ`7ZWsnzgyLd<}99--G!t_fWkRW!p zBQ!uHVc}3)!aXHIXSm~j&$^}>R5s`H@ThBmLdBm`Zoe9{Iz&v&BEs- zg@;#vyz26I`JLO1R{H(gx?QpFLVoqyaz@WAC)cjMsh2W(^7@V9m9l$%#pFB7|3 zuUJ)b>GkwHQ7_G( o2|d@Mq}C$!Mw?W~?V4S^)o$2#(@|Iz?Q3=Oq(d~gUqXNV2g&ZTumAu6 literal 0 HcmV?d00001 diff --git a/whdboot/boot-data/C/Search b/whdboot/boot-data/C/Search new file mode 100755 index 0000000000000000000000000000000000000000..d0e56d2ea1a1b3a457a5415e9d80b9d2c6d074c8 GIT binary patch literal 2472 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 WWH#|6ku#BGHabWvwo0FhFaHm$7G)j) literal 0 HcmV?d00001 diff --git a/whdboot/boot-data/C/Type b/whdboot/boot-data/C/Type new file mode 100755 index 0000000000000000000000000000000000000000..ec071222849fa324434901c1ce220787e00d6f5b GIT binary patch literal 1496 zcmZWp-)q}e6h4xhR25riyl#}Pl-rAvW|i&y=+Iaqa=|{SB>;+g<^HO91%(V5@NvOWN-z`g&$zN9Ra(&p_R`&yj*>jp9FRl0tMM z*ucMV-cEyB!&U!-^Gn!J>pq?eLp5BLcHe-YZWJ58$qL@pUCVD2ah8JQGm6bl6Zr3q zB35JtE2JNQ-ZG5J=AI(;D)UT524MucHgxGhm#e2YOXuUSG#BCV}BQ-=4xeG!F9FH=czDI z!*ywwr+&~Z&hUBxpW6Hk=mmUc^B3myx$C>tI-kt8v6?1uGisgxR8HV3-pc}u>GKwF zahkw;cefbRDV}5ZXkpgZ|K?-5XP_F;C57 z*9%y+$gA@jtHiCnUJ1S>AzZUh>IGb~`Y3pOFShxXbk{o2;*=A(=Hb724L?RgxMa6e zFpAAp(ndpACHgpUKZKcwOSVWuSYf)Gt1Rc;U_Da6sy=TWpdl<7#YRPUZNR{Py%IWehtb$+lDX+jkRvC;eWa_e zH{2UO)%(8qCcvwm{FGx6s;xYr@GQ6TKsrN1xG8bZ^8gJ*tO z-1Bwjtx9fX@tyO)#d4Wji}?(>lTWs%!?KE-(K?mC)mCb_#n3GtDTG@$ZvA}w?rlq0aIJTmqW&QvF literal 0 HcmV?d00001 diff --git a/whdboot/boot-data/C/Version b/whdboot/boot-data/C/Version new file mode 100755 index 0000000000000000000000000000000000000000..96f8a714b4da73e52db91275d922d148d1d4dc84 GIT binary patch literal 4804 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 bk(nLqTCtIItC@ulRONiCaWlgK+`s!@voR&j literal 0 HcmV?d00001 diff --git a/whdboot/boot-data/C/WHDLoad b/whdboot/boot-data/C/WHDLoad new file mode 100755 index 0000000000000000000000000000000000000000..90e9c98b17d0d739cb03b05e539a7abb278dbb37 GIT binary patch literal 144518 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