From 2951fdc7cefbbac6e8b2f88579e1b8dd016dff40 Mon Sep 17 00:00:00 2001 From: Lesserkuma Date: Sun, 18 Jun 2023 13:14:53 +0200 Subject: [PATCH] 3.31 --- CHANGES.md | 6 ++ FlashGBX/FlashGBX_CLI.py | 49 ++++++------ FlashGBX/FlashGBX_GUI.py | 81 ++++++++++--------- FlashGBX/Mapper.py | 37 ++++----- FlashGBX/Util.py | 42 +++++----- FlashGBX/config/db_AGB.json | 30 +++---- FlashGBX/config/fc_AGB_MSP55LV128M.txt | 6 +- FlashGBX/fw_GBxCartRW_v1_4.py | 8 +- FlashGBX/hw_GBxCartRW.py | 106 +++++++++++++++---------- FlashGBX/res/config.zip | Bin 367169 -> 367198 bytes README.md | 3 +- setup.py | 2 +- 12 files changed, 202 insertions(+), 168 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index e531120..81dc2f6 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,10 @@ # Release notes +### v3.31 (released 2023-06-18) +- Improved support for 32 MiB cartridges that have one of the EEPROM save types (fixes both backups and writes of B3CJ, B53E, B53P, BBAE, BBAP, BC2J, BFRP, BH3E, BH3P, BH8E, BJPP, BU7E, BU7P, BX3E, BX3P, BYUE, BYUJ, BYUP) +- Confirmed support for BGA64B-71-TV-DEEP with 256M29EML *(thanks Leitplanke)* +- Updated the Game Boy Advance lookup databases for save types, ROM sizes and checksums +- Minor bug fixes and improvements + ### v3.30 (released 2023-06-06) - Improved auto-detection of official GBA Video cartridges with the 3D Memory mapper including those that are less than 64 MiB - Added support for Unknown 29LV320 variant (no PCB text) *(thanks Zoo)* diff --git a/FlashGBX/FlashGBX_CLI.py b/FlashGBX/FlashGBX_CLI.py index 9305481..563400f 100644 --- a/FlashGBX/FlashGBX_CLI.py +++ b/FlashGBX/FlashGBX_CLI.py @@ -315,31 +315,32 @@ class FlashGBX_CLI(): else: msg = "The ROM was dumped, but the checksum is not correct." if self.CONN.INFO["loop_detected"] is not False: - msg += "\nA data loop was detected in the ROM backup at position 0x{:X} ({:s}). This may indicate a bad dump or overdump.".format(self.CONN.INFO["loop_detected"], Util.formatFileSize(self.CONN.INFO["loop_detected"], asInt=True)) + msg += "\nA data loop was detected in the ROM backup at position 0x{:X} ({:s}). This may indicate a bad dump or overdump.".format(self.CONN.INFO["loop_detected"], Util.formatFileSize(size=self.CONN.INFO["loop_detected"], asInt=True)) else: msg += "\nThis may indicate a bad dump, however this can be normal for some reproduction cartridges, unlicensed games, prototypes, patched games and intentional overdumps." print("{:s}{:s}{:s}".format(ANSI.YELLOW, msg, ANSI.RESET)) elif self.CONN.GetMode() == "AGB": print("CRC32: {:08x}".format(self.CONN.INFO["file_crc32"])) print("SHA-1: {:s}\n".format(self.CONN.INFO["file_sha1"])) - if Util.AGB_Global_CRC32 == self.CONN.INFO["rom_checksum_calc"]: - print("{:s}The ROM backup is complete and the checksum was verified successfully!{:s}".format(ANSI.GREEN, ANSI.RESET)) - elif Util.AGB_Global_CRC32 == 0: + if "db" in self.CONN.INFO and self.CONN.INFO["db"] is not None: + if self.CONN.INFO["db"]["rc"] == self.CONN.INFO["file_crc32"]: + print("{:s}The ROM backup is complete and the checksum was verified successfully!{:s}".format(ANSI.GREEN, ANSI.RESET)) + else: + msg = "The ROM backup is complete, but the checksum doesn’t match the known database entry." + if self.CONN.INFO["loop_detected"] is not False: + msg += "\nA data loop was detected in the ROM backup at position 0x{:X} ({:s}). This may indicate a bad dump or overdump.".format(self.CONN.INFO["loop_detected"], Util.formatFileSize(size=self.CONN.INFO["loop_detected"], asInt=True)) + else: + msg += "\nThis may indicate a bad dump, however this can be normal for some reproduction cartridges, unlicensed games, prototypes, patched games and intentional overdumps." + print("{:s}{:s}{:s}".format(ANSI.YELLOW, msg, ANSI.RESET)) + else: msg = "The ROM backup is complete! As there is no known checksum for this ROM in the database, verification was skipped." if self.CONN.INFO["loop_detected"] is not False: - msg += "\nNOTE: A data loop was detected in the ROM backup at position 0x{:X} ({:s}). This may indicate a bad dump or overdump.".format(self.CONN.INFO["loop_detected"], Util.formatFileSize(self.CONN.INFO["loop_detected"], asInt=True)) - print("{:s}{:s}{:s}".format(ANSI.YELLOW, msg, ANSI.RESET)) - else: - msg = "The ROM backup is complete, but the checksum doesn’t match the known database entry." - if self.CONN.INFO["loop_detected"] is not False: - msg += "\nA data loop was detected in the ROM backup at position 0x{:X} ({:s}). This may indicate a bad dump or overdump.".format(self.CONN.INFO["loop_detected"], Util.formatFileSize(self.CONN.INFO["loop_detected"], asInt=True)) - else: - msg += "\nThis may indicate a bad dump, however this can be normal for some reproduction cartridges, unlicensed games, prototypes, patched games and intentional overdumps." + msg += "\nNOTE: A data loop was detected in the ROM backup at position 0x{:X} ({:s}). This may indicate a bad dump or overdump.".format(self.CONN.INFO["loop_detected"], Util.formatFileSize(size=self.CONN.INFO["loop_detected"], asInt=True)) print("{:s}{:s}{:s}".format(ANSI.YELLOW, msg, ANSI.RESET)) elif self.CONN.INFO["last_action"] == 2: # Backup RAM self.CONN.INFO["last_action"] = 0 - if not "debug" in self.ARGS and self.CONN.GetMode() == "DMG" and self.CONN.INFO["mapper_raw"] == 252 and self.CONN.INFO["transferred"] == 131072: # Pocket Camera / 128 KB: # 128 KB + if not "debug" in self.ARGS and self.CONN.GetMode() == "DMG" and self.CONN.INFO["mapper_raw"] == 252 and self.CONN.INFO["transferred"] == 131072: # Pocket Camera / 128 KiB: # 128 KiB answer = input("Would you like to extract Game Boy Camera pictures to “{:s}” now? [Y/n]: ".format(Util.formatPathOS(os.path.abspath(os.path.splitext(self.CONN.INFO["last_path"])[0]), end_sep=True) + "IMG_PC**.{:s}".format(self.ARGS["argparsed"].gbcamera_outfile_format))).strip().lower() if answer != "n": pc = PocketCamera() @@ -532,19 +533,19 @@ class FlashGBX_CLI(): bad_read = True s += "ROM Checksum: " - Util.AGB_Global_CRC32 = 0 + #Util.AGB_Global_CRC32 = 0 db_agb_entry = data["db"] if db_agb_entry != None: if data["rom_size_calc"] < 0x400000: s += "In database (0x{:06X})\n".format(db_agb_entry['rc']) - Util.AGB_Global_CRC32 = db_agb_entry['rc'] - s += "ROM Size: {:d} MB\n".format(int(db_agb_entry['rs']/1024/1024)) + #Util.AGB_Global_CRC32 = db_agb_entry['rc'] + s += "ROM Size: {:d} MiB\n".format(int(db_agb_entry['rs']/1024/1024)) data['rom_size'] = db_agb_entry['rs'] elif data["rom_size"] != 0: s += "Not in database\n" if not data["rom_size"] in Util.AGB_Header_ROM_Sizes_Map: data["rom_size"] = 0x2000000 - s += "ROM Size: {:d} MB\n".format(int(data["rom_size"]/1024/1024)) + s += "ROM Size: {:d} MiB\n".format(int(data["rom_size"]/1024/1024)) else: s += "Not in database\n" s += "ROM Size: Not detected\n" @@ -640,7 +641,7 @@ class FlashGBX_CLI(): if "flash_size" in supp_cart_types[1][cart_type_id]: size = supp_cart_types[1][cart_type_id]["flash_size"] - msg_flash_size_s = "ROM Size: {:s}\n".format(Util.formatFileSize(size, asInt=True)) + msg_flash_size_s = "ROM Size: {:s}\n".format(Util.formatFileSize(size=size, asInt=True)) if self.CONN.GetMode() == "DMG": if "mbc" in supp_cart_types[1][cart_type_id]: @@ -724,7 +725,7 @@ class FlashGBX_CLI(): try: rom_size = Util.DMG_Header_ROM_Sizes_Flasher_Map[header["rom_size_raw"]] except: - print("{:s}Couldn’t determine ROM size, will use 8 MB. It can also be manually set with the “--dmg-romsize” command line switch.{:s}".format(ANSI.YELLOW, ANSI.RESET)) + print("{:s}Couldn’t determine ROM size, will use 8 MiB. It can also be manually set with the “--dmg-romsize” command line switch.{:s}".format(ANSI.YELLOW, ANSI.RESET)) rom_size = 8 * 1024 * 1024 else: sizes = [ "auto", "32kb", "64kb", "128kb", "256kb", "512kb", "1mb", "2mb", "4mb", "8mb", "16mb", "32mb" ] @@ -849,10 +850,10 @@ class FlashGBX_CLI(): try: if os.path.getsize(path) > 0x10000000: # reject too large files to avoid exploding RAM - print("{:s}ROM files bigger than 256 MB are not supported.{:s}".format(ANSI.RED, ANSI.RESET)) + print("{:s}ROM files bigger than 256 MiB are not supported.{:s}".format(ANSI.RED, ANSI.RESET)) return elif os.path.getsize(path) < 0x400: - print("{:s}ROM files smaller than 1 KB are not supported.{:s}".format(ANSI.RED, ANSI.RESET)) + print("{:s}ROM files smaller than 1 KiB are not supported.{:s}".format(ANSI.RED, ANSI.RESET)) return #with open(path, "rb") as file: buffer = bytearray(file.read()) @@ -866,7 +867,7 @@ class FlashGBX_CLI(): rom_size = os.stat(path).st_size if "flash_size" in carts[cart_type]: if rom_size > carts[cart_type]['flash_size']: - msg = "The selected flash cartridge type seems to support ROMs that are up to {:s} in size, but the file you selected is {:s}.".format(Util.formatFileSize(carts[cart_type]['flash_size']), Util.formatFileSize(os.path.getsize(path), roundUp=True)) + msg = "The selected flash cartridge type seems to support ROMs that are up to {:s} in size, but the file you selected is {:s}.".format(Util.formatFileSize(size=carts[cart_type]['flash_size']), Util.formatFileSize(size=os.path.getsize(path))) msg += " You can still give it a try, but it’s possible that it’s too large which may cause the ROM writing to fail." print("{:s}{:s}{:s}".format(ANSI.YELLOW, msg, ANSI.RESET)) answer = input("Do you want to continue? [y/N]: ").strip().lower() @@ -1187,9 +1188,9 @@ class FlashGBX_CLI(): found_length = len(test2) - found_offset if self.CONN.GetMode() == "DMG": - print("\n{:s}Done! The writable save data size is {:s} out of {:s} checked.{:s}".format(ANSI.GREEN, Util.formatFileSize(found_length), Util.formatFileSize(Util.DMG_Header_RAM_Sizes_Flasher_Map[Util.DMG_Header_RAM_Sizes_Map.index(save_type)]), ANSI.RESET)) + print("\n{:s}Done! The writable save data size is {:s} out of {:s} checked.{:s}".format(ANSI.GREEN, Util.formatFileSize(size=found_length), Util.formatFileSize(size=Util.DMG_Header_RAM_Sizes_Flasher_Map[Util.DMG_Header_RAM_Sizes_Map.index(save_type)]), ANSI.RESET)) elif self.CONN.GetMode() == "AGB": - print("\n{:s}Done! The writable save data size using save type “{:s}” is {:s}.{:s}".format(ANSI.GREEN, Util.AGB_Header_Save_Types[save_type], Util.formatFileSize(found_length), ANSI.RESET)) + print("\n{:s}Done! The writable save data size using save type “{:s}” is {:s}.{:s}".format(ANSI.GREEN, Util.AGB_Header_Save_Types[save_type], Util.formatFileSize(size=found_length), ANSI.RESET)) try: (_, _, cfi) = self.CONN.CheckFlashChip(limitVoltage=False) diff --git a/FlashGBX/FlashGBX_GUI.py b/FlashGBX/FlashGBX_GUI.py index 9612c43..9803f77 100644 --- a/FlashGBX/FlashGBX_GUI.py +++ b/FlashGBX/FlashGBX_GUI.py @@ -511,7 +511,7 @@ class FlashGBX_GUI(QtWidgets.QWidget): self.SETTINGS.setValue("UpdateCheck", "disabled") if update_check and update_check.lower() == "enabled": print("") - url = "https://api.github.com/repos/lesserkuma/FlashGBX/releases?per_page=1" + url = "https://api.github.com/repos/lesserkuma/FlashGBX/releases/latest" site = "https://github.com/lesserkuma/FlashGBX/releases/latest" try: ret = requests.get(url, allow_redirects=True, timeout=1.5) @@ -527,7 +527,7 @@ class FlashGBX_GUI(QtWidgets.QWidget): if ret is not False and ret.status_code == 200: ret = ret.content try: - ret = json.loads(ret)[0] + ret = json.loads(ret) if 'tag_name' in ret: latest_version = str(ret['tag_name']) if pkg_resources.parse_version(latest_version) == pkg_resources.parse_version(VERSION_PEP440): @@ -933,7 +933,7 @@ class FlashGBX_GUI(QtWidgets.QWidget): msg = "The ROM was dumped, but the checksum is not correct." button_gmmc1 = None if self.CONN.INFO["loop_detected"] is not False: - msg += "\n\nA data loop was detected in the ROM backup at position 0x{:X} ({:s}). This may indicate a bad dump or overdump.".format(self.CONN.INFO["loop_detected"], Util.formatFileSize(self.CONN.INFO["loop_detected"], asInt=True)) + msg += "\n\nA data loop was detected in the ROM backup at position 0x{:X} ({:s}). This may indicate a bad dump or overdump.".format(self.CONN.INFO["loop_detected"], Util.formatFileSize(size=self.CONN.INFO["loop_detected"], asInt=True)) else: msg += " This may indicate a bad dump, however this can be normal for some reproduction cartridges, unlicensed games, prototypes, patched games and intentional overdumps." if self.CONN.GetMode() == "DMG" and self.cmbDMGHeaderMapperResult.currentText() == "MBC1": @@ -959,35 +959,36 @@ class FlashGBX_GUI(QtWidgets.QWidget): QtCore.QTimer.singleShot(1, lambda: [ self.CONN.BackupROM(fncSetProgress=self.PROGRESS.SetProgress, args=self.STATUS["args"]) ]) return elif self.CONN.GetMode() == "AGB": - if Util.AGB_Global_CRC32 == self.CONN.INFO["rom_checksum_calc"]: - self.lblAGBHeaderROMChecksumResult.setText("Valid (0x{:06X})".format(Util.AGB_Global_CRC32)) - self.lblAGBHeaderROMChecksumResult.setStyleSheet("QLabel { color: green; }") - self.lblStatus4a.setText("Done!") - msg = "The ROM backup is complete and the checksum was verified successfully!" - msgbox.setText(msg + msg_te) - msgbox.exec() - elif Util.AGB_Global_CRC32 == 0: - self.lblAGBHeaderROMChecksumResult.setText("0x{:06X}".format(self.CONN.INFO["rom_checksum_calc"])) + if "db" in self.CONN.INFO and self.CONN.INFO["db"] is not None: + if self.CONN.INFO["db"]["rc"] == self.CONN.INFO["file_crc32"]: + self.lblAGBHeaderROMChecksumResult.setText("Valid (0x{:06X})".format(self.CONN.INFO["db"]["rc"])) + self.lblAGBHeaderROMChecksumResult.setStyleSheet("QLabel { color: green; }") + self.lblStatus4a.setText("Done!") + msg = "The ROM backup is complete and the checksum was verified successfully!" + msgbox.setText(msg + msg_te) + msgbox.exec() + else: + self.lblAGBHeaderROMChecksumResult.setText("Invalid (0x{:06X}≠0x{:06X})".format(self.CONN.INFO["file_crc32"], self.CONN.INFO["db"]["rc"])) + self.lblAGBHeaderROMChecksumResult.setStyleSheet("QLabel { color: red; }") + self.lblStatus4a.setText("Done.") + msg = "The ROM backup is complete, but the checksum doesn’t match the known database entry." + if self.CONN.INFO["loop_detected"] is not False: + msg += "\n\nA data loop was detected in the ROM backup at position 0x{:X} ({:s}). This may indicate a bad dump or overdump.".format(self.CONN.INFO["loop_detected"], Util.formatFileSize(size=self.CONN.INFO["loop_detected"], asInt=True)) + else: + msg += " This may indicate a bad dump, however this can be normal for some reproduction cartridges, unlicensed games, prototypes, patched games and intentional overdumps." + msgbox.setText(msg + msg_te) + msgbox.setIcon(QtWidgets.QMessageBox.Warning) + msgbox.exec() + else: + self.lblAGBHeaderROMChecksumResult.setText("0x{:06X}".format(self.CONN.INFO["file_crc32"])) self.lblAGBHeaderROMChecksumResult.setStyleSheet(self.lblDMGRomTitleResult.styleSheet()) self.lblStatus4a.setText("Done!") msg = "The ROM backup is complete! As there is no known checksum for this ROM in the database, verification was skipped." if self.CONN.INFO["loop_detected"] is not False: - msg += "\n\nNOTE: A data loop was detected in the ROM backup at position 0x{:X} ({:s}). This may indicate a bad dump or overdump.".format(self.CONN.INFO["loop_detected"], Util.formatFileSize(self.CONN.INFO["loop_detected"], asInt=True)) + msg += "\n\nNOTE: A data loop was detected in the ROM backup at position 0x{:X} ({:s}). This may indicate a bad dump or overdump.".format(self.CONN.INFO["loop_detected"], Util.formatFileSize(size=self.CONN.INFO["loop_detected"], asInt=True)) msgbox.setIcon(QtWidgets.QMessageBox.Warning) msgbox.setText(msg + msg_te) msgbox.exec() - else: - self.lblAGBHeaderROMChecksumResult.setText("Invalid (0x{:06X}≠0x{:06X})".format(self.CONN.INFO["rom_checksum_calc"], Util.AGB_Global_CRC32)) - self.lblAGBHeaderROMChecksumResult.setStyleSheet("QLabel { color: red; }") - self.lblStatus4a.setText("Done.") - msg = "The ROM backup is complete, but the checksum doesn’t match the known database entry." - if self.CONN.INFO["loop_detected"] is not False: - msg += "\n\nA data loop was detected in the ROM backup at position 0x{:X} ({:s}). This may indicate a bad dump or overdump.".format(self.CONN.INFO["loop_detected"], Util.formatFileSize(self.CONN.INFO["loop_detected"], asInt=True)) - else: - msg += " This may indicate a bad dump, however this can be normal for some reproduction cartridges, unlicensed games, prototypes, patched games and intentional overdumps." - msgbox.setText(msg + msg_te) - msgbox.setIcon(QtWidgets.QMessageBox.Warning) - msgbox.exec() if msgbox.clickedButton() == button_dump_report: if not (dump_report is not False and dumpinfo_file != "" and temp is True): @@ -1007,7 +1008,7 @@ class FlashGBX_GUI(QtWidgets.QWidget): dontShowAgainCameraSavePopup = str(self.SETTINGS.value("SkipCameraSavePopup", default="disabled")).lower() == "enabled" if not dontShowAgainCameraSavePopup: - if self.CONN.GetMode() == "DMG" and self.CONN.INFO["mapper_raw"] == 252 and self.CONN.INFO["transferred"] == 131072: # Pocket Camera / 128 KB + if self.CONN.GetMode() == "DMG" and self.CONN.INFO["mapper_raw"] == 252 and self.CONN.INFO["transferred"] == 131072: # Pocket Camera / 128 KiB cbCameraSavePopup = QtWidgets.QCheckBox("Don’t show this message again", checked=dontShowAgain) msgboxCameraPopup = QtWidgets.QMessageBox(parent=self, icon=QtWidgets.QMessageBox.Question, windowTitle="{:s} {:s}".format(APPNAME, VERSION), text="Would you like to load your save data with the GB Camera Viewer now?") msgboxCameraPopup.setStandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) @@ -1055,14 +1056,14 @@ class FlashGBX_GUI(QtWidgets.QWidget): elif self.CONN.GetMode() == "AGB": cart_types = self.CONN.GetSupportedCartridgesAGB()[0] cart_type_str = " ({:s})".format(cart_types[self.CONN.INFO["dump_info"]["cart_type"]]) - msg_v += "\n\nTips:\n- Clean cartridge contacts\n- Check soldering if it’s a DIY cartridge\n- Avoid passive USB hubs and try different USB ports/cables\n- Check cartridge type selection{:s}\n- Check cartridge ROM storage size (at least {:s} is required)".format(cart_type_str, Util.formatFileSize(self.CONN.INFO["verify_error_params"]["rom_size"])) + msg_v += "\n\nTips:\n- Clean cartridge contacts\n- Check soldering if it’s a DIY cartridge\n- Avoid passive USB hubs and try different USB ports/cables\n- Check cartridge type selection{:s}\n- Check cartridge ROM storage size (at least {:s} is required)".format(cart_type_str, Util.formatFileSize(size=self.CONN.INFO["verify_error_params"]["rom_size"])) if "mapper_selection_type" in self.CONN.INFO["verify_error_params"]: if self.CONN.INFO["verify_error_params"]["mapper_selection_type"] == 1: # manual msg_v += "\n- Check mapper type used: {:s} (manual selection)".format(self.CONN.INFO["verify_error_params"]["mapper_name"]) elif self.CONN.INFO["verify_error_params"]["mapper_selection_type"] == 2: # forced by cart type msg_v += "\n- Check mapper type used: {:s} (forced by selected cartridge type)".format(self.CONN.INFO["verify_error_params"]["mapper_name"]) if self.CONN.INFO["verify_error_params"]["rom_size"] > self.CONN.INFO["verify_error_params"]["mapper_max_size"]: - msg_v += "\n- Check mapper type ROM size limit: likely up to {:s}".format(Util.formatFileSize(self.CONN.INFO["verify_error_params"]["mapper_max_size"])) + msg_v += "\n- Check mapper type ROM size limit: likely up to {:s}".format(Util.formatFileSize(size=self.CONN.INFO["verify_error_params"]["mapper_max_size"])) msg_v += "\n\nDo you want to try and write the sectors again that failed verification?" answer = QtWidgets.QMessageBox.warning(self, "{:s} {:s}".format(APPNAME, VERSION), msg_v, QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.Yes) @@ -1132,7 +1133,7 @@ class FlashGBX_GUI(QtWidgets.QWidget): if cart_types[1][index] == "RETAIL": # special keyword pass else: - if "flash_size" in cart_types[1][index]: + if "flash_size" in cart_types[1][index] and cart_types[1][index]["flash_size"] in Util.AGB_Header_ROM_Sizes_Map: self.cmbAGBHeaderROMSizeResult.setCurrentIndex(Util.AGB_Header_ROM_Sizes_Map.index(cart_types[1][index]["flash_size"])) self.STATUS["cart_type"] = cart_types[1][index] @@ -1260,7 +1261,7 @@ class FlashGBX_GUI(QtWidgets.QWidget): QtWidgets.QMessageBox.critical(self, "{:s} {:s}".format(APPNAME, VERSION), "The selected ROM file is empty.", QtWidgets.QMessageBox.Ok) return if os.path.getsize(path) > 0x10000000: # reject too large files to avoid exploding RAM - QtWidgets.QMessageBox.critical(self, "{:s} {:s}".format(APPNAME, VERSION), "ROM files bigger than 256 MB are not supported.", QtWidgets.QMessageBox.Ok) + QtWidgets.QMessageBox.critical(self, "{:s} {:s}".format(APPNAME, VERSION), "ROM files bigger than 256 MiB are not supported.", QtWidgets.QMessageBox.Ok) return with open(path, "rb") as file: @@ -1273,7 +1274,7 @@ class FlashGBX_GUI(QtWidgets.QWidget): rom_size = os.stat(path).st_size if "flash_size" in carts[cart_type]: if rom_size > carts[cart_type]['flash_size']: - msg = "The selected flash cartridge type seems to support ROMs that are up to {:s} in size, but the file you selected is {:s}.".format(Util.formatFileSize(carts[cart_type]['flash_size']), Util.formatFileSize(os.path.getsize(path), roundUp=True)) + msg = "The selected flash cartridge type seems to support ROMs that are up to {:s} in size, but the file you selected is {:s}.".format(Util.formatFileSize(size=carts[cart_type]['flash_size']), Util.formatFileSize(size=os.path.getsize(path))) msg += " You can still give it a try, but it’s possible that it’s too large which may cause the ROM writing to fail." answer = QtWidgets.QMessageBox.warning(self, "{:s} {:s}".format(APPNAME, VERSION), msg, QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel, QtWidgets.QMessageBox.Cancel) if answer == QtWidgets.QMessageBox.Cancel: return @@ -1514,7 +1515,7 @@ class FlashGBX_GUI(QtWidgets.QWidget): if save_type == 0: QtWidgets.QMessageBox.warning(self, "{:s} {:s}".format(APPNAME, VERSION), "No save type was selected.", QtWidgets.QMessageBox.Ok) return - save_size = Util.AGB_Header_Save_Sizes[save_type] + #save_size = Util.AGB_Header_Save_Sizes[save_type] else: return if not self.CheckHeader(): return @@ -1908,7 +1909,7 @@ class FlashGBX_GUI(QtWidgets.QWidget): "params": [ # ID, Type, Value(s), Default Index [ "loc", "cmb_e", "Location:", [ "0x{:X}".format(l) for l in locs ], loc_index ], - [ "len", "cmb", "Size:", [ Util.formatFileSize(s, asInt=True) for s in lens ], len_index ], + [ "len", "cmb", "Size:", [ Util.formatFileSize(size=s, asInt=True) for s in lens ], len_index ], ] } dlg = UserInputDialog(self, icon=self.windowIcon(), args=dlg_args) @@ -2208,7 +2209,6 @@ class FlashGBX_GUI(QtWidgets.QWidget): self.lblAGBHeaderROMChecksumResult.setStyleSheet(self.lblDMGRomTitleResult.styleSheet()) self.lblAGBHeaderROMChecksumResult.setText("Not available") - Util.AGB_Global_CRC32 = 0 if data["db"] is None: self.lblAGBHeaderROMChecksumResult.setText("(Not in database)") @@ -2216,7 +2216,6 @@ class FlashGBX_GUI(QtWidgets.QWidget): self.cmbAGBHeaderROMSizeResult.setCurrentIndex(Util.AGB_Header_ROM_Sizes_Map.index(data["db"]['rs'])) if data["rom_size_calc"] < 0x400000: self.lblAGBHeaderROMChecksumResult.setText("In database (0x{:06X})".format(data["db"]['rc'])) - Util.AGB_Global_CRC32 = data["db"]['rc'] elif data["rom_size"] != 0: if not data["rom_size"] in Util.AGB_Header_ROM_Sizes_Map: data["rom_size"] = 0x2000000 @@ -2355,11 +2354,11 @@ class FlashGBX_GUI(QtWidgets.QWidget): try: if "Batteryless SRAM" in Util.AGB_Header_Save_Types[save_type]: if save_size == 0: - temp += " (unknown size)
Batteryless SRAM Location: 0x{:X}–0x{:X} ({:s})".format(header["batteryless_sram"]["bl_offset"], header["batteryless_sram"]["bl_offset"]+header["batteryless_sram"]["bl_size"]-1, Util.formatFileSize(header["batteryless_sram"]["bl_size"], asInt=True)) + temp += " (unknown size)
Batteryless SRAM Location: 0x{:X}–0x{:X} ({:s})".format(header["batteryless_sram"]["bl_offset"], header["batteryless_sram"]["bl_offset"]+header["batteryless_sram"]["bl_size"]-1, Util.formatFileSize(size=header["batteryless_sram"]["bl_size"], asInt=True)) elif save_size == header["batteryless_sram"]["bl_size"]: - temp += " ({:s})
Batteryless SRAM Location: 0x{:X}–0x{:X} ({:s})".format(Util.formatFileSize(save_size, asInt=True), header["batteryless_sram"]["bl_offset"], header["batteryless_sram"]["bl_offset"]+header["batteryless_sram"]["bl_size"]-1, Util.formatFileSize(header["batteryless_sram"]["bl_size"], asInt=True)) + temp += " ({:s})
Batteryless SRAM Location: 0x{:X}–0x{:X} ({:s})".format(Util.formatFileSize(size=save_size, asInt=True), header["batteryless_sram"]["bl_offset"], header["batteryless_sram"]["bl_offset"]+header["batteryless_sram"]["bl_size"]-1, Util.formatFileSize(size=header["batteryless_sram"]["bl_size"], asInt=True)) else: - temp += " ({:s})
Batteryless SRAM Location: 0x{:X}–0x{:X} ({:s})".format(Util.formatFileSize(save_size, asInt=True), header["batteryless_sram"]["bl_offset"], header["batteryless_sram"]["bl_offset"]+header["batteryless_sram"]["bl_size"]-1, Util.formatFileSize(header["batteryless_sram"]["bl_size"], asInt=True)) + temp += " ({:s})
Batteryless SRAM Location: 0x{:X}–0x{:X} ({:s})".format(Util.formatFileSize(size=save_size, asInt=True), header["batteryless_sram"]["bl_offset"], header["batteryless_sram"]["bl_offset"]+header["batteryless_sram"]["bl_size"]-1, Util.formatFileSize(size=header["batteryless_sram"]["bl_size"], asInt=True)) except: pass @@ -2391,7 +2390,7 @@ class FlashGBX_GUI(QtWidgets.QWidget): if "flash_size" in supp_cart_types[1][cart_type_id]: size = supp_cart_types[1][cart_type_id]["flash_size"] - msg_flash_size_s = "ROM Size: {:s}
".format(Util.formatFileSize(size, asInt=True)) + msg_flash_size_s = "ROM Size: {:s}
".format(Util.formatFileSize(size=size, asInt=True)) if self.CONN.GetMode() == "DMG": if "mbc" in supp_cart_types[1][cart_type_id]: @@ -2675,7 +2674,7 @@ class FlashGBX_GUI(QtWidgets.QWidget): self.SetProgressBars(min=0, max=size, value=pos) elif args["action"] == "FINISHED": if pos > 0: - self.lblStatus1aResult.setText(Util.formatFileSize(pos)) + self.lblStatus1aResult.setText(Util.formatFileSize(size=pos)) self.FinishOperation() elif args["action"] == "ABORT": wd = 10 @@ -2727,7 +2726,7 @@ class FlashGBX_GUI(QtWidgets.QWidget): self.btnCancel.setEnabled(args["abortable"]) else: self.btnCancel.setEnabled(True) - self.lblStatus1aResult.setText("{:s}".format(Util.formatFileSize(pos))) + self.lblStatus1aResult.setText("{:s}".format(Util.formatFileSize(size=pos))) if speed > 0: self.lblStatus2aResult.setText("{:.2f} KiB/s".format(speed)) else: diff --git a/FlashGBX/Mapper.py b/FlashGBX/Mapper.py index 0a438f6..154751a 100644 --- a/FlashGBX/Mapper.py +++ b/FlashGBX/Mapper.py @@ -148,15 +148,9 @@ class DMG_MBC: def SelectBankROM(self, index): dprint(self.GetName(), "|", index) - if index == 0 or index >= 256: - commands = [ - [ 0x3000, ((index >> 8) & 0xFF) ], - [ 0x2100, index & 0xFF ], - ] - else: - commands = [ - [ 0x2100, index & 0xFF ], - ] + commands = [ + [ 0x2100, index & 0xFF ], + ] start_address = 0 if index == 0 else 0x4000 @@ -459,6 +453,18 @@ class DMG_MBC5(DMG_MBC): ] self.CartWrite(commands) + def SelectBankROM(self, index): + dprint(self.GetName(), "|", index) + commands = [ + [ 0x3000, ((index >> 8) & 0xFF) ], + [ 0x2100, index & 0xFF ], + ] + + start_address = 0 if index == 0 else 0x4000 + + self.CartWrite(commands) + return (start_address, self.ROM_BANK_SIZE) + def GetMaxROMSize(self): return 8*1024*1024 @@ -703,15 +709,10 @@ class DMG_GMMC1(DMG_MBC5): def SelectBankROM(self, index): dprint(self.GetName(), "|", index) - if index == 0 or index >= 256: - commands = [ - [ 0x2100, index & 0xFF ], - ] - else: - commands = [ - [ 0x2100, index & 0xFF ], - ] - + commands = [ + [ 0x2100, index & 0xFF ], + ] + start_address = 0 if index == 0 else 0x4000 self.CartWrite(commands) diff --git a/FlashGBX/Util.py b/FlashGBX/Util.py index d13351a..a676875 100644 --- a/FlashGBX/Util.py +++ b/FlashGBX/Util.py @@ -7,9 +7,9 @@ from enum import Enum # Common constants APPNAME = "FlashGBX" -VERSION_PEP440 = "3.30" +VERSION_PEP440 = "3.31" VERSION = "v{:s}".format(VERSION_PEP440) -VERSION_TIMESTAMP = 1686057604 +VERSION_TIMESTAMP = 1687091551 DEBUG = False DEBUG_LOG = [] APP_PATH = "" @@ -19,7 +19,6 @@ AGB_Header_ROM_Sizes = [ "64 KiB", "128 KiB", "256 KiB", "512 KiB", "1 MiB", "2 AGB_Header_ROM_Sizes_Map = [ 0x10000, 0x20000, 0x40000, 0x80000, 0x100000, 0x200000, 0x400000, 0x800000, 0x1000000, 0x2000000, 0x4000000, 0x8000000, 0x10000000 ] AGB_Header_Save_Types = [ "None", "4K EEPROM (512 Bytes)", "64K EEPROM (8 KiB)", "256K SRAM/FRAM (32 KiB)", "512K FLASH (64 KiB)", "1M FLASH (128 KiB)", "8M DACS (1 MiB)", "Unlicensed 512K SRAM (64 KiB)", "Unlicensed 1M SRAM (128 KiB)", "Unlicensed Batteryless SRAM" ] AGB_Header_Save_Sizes = [ 0, 512, 8192, 32768, 65536, 131072, 1048576, 65536, 131072, 0 ] -AGB_Global_CRC32 = 0 AGB_Flash_Save_Chips = { 0xBFD4:"SST 39VF512", 0x1F3D:"Atmel AT29LV512", 0xC21C:"Macronix MX29L512", 0x321B:"Panasonic MN63F805MNP", 0xC209:"Macronix MX29L010", 0x6213:"SANYO LE26FV10N1TS" } AGB_Flash_Save_Chips_Sizes = [ 0x10000, 0x10000, 0x10000, 0x10000, 0x20000, 0x20000 ] @@ -282,30 +281,26 @@ def isx2bin(buffer): break return data_output[:temp] -def roundup(x): - # https://stackoverflow.com/questions/50405017/ - d = 10 ** 2 - if x < 0: - return math.floor(x * d) / d - else: - return math.ceil(x * d) / d +def round2(num, decimals=2): + x = (pow(10, decimals)) + return int(num * x) / x -def formatFileSize(size, asInt=False, roundUp=False, nobr=True): +def formatFileSize(size, asInt=False, nobr=True): space = " " if nobr else " " if size == 1: return "{:d}{:s}Byte".format(size, space) elif size < 1024: return "{:d}{:s}Bytes".format(size, space) elif size < 1024 * 1024: - val = size/1024 - if roundUp: val = roundup(val) + val = size / 1024 + val = round2(val) if asInt: return "{:d}{:s}KiB".format(int(val), space) else: return "{:.1f}{:s}KiB".format(val, space) else: - val = size/1024/1024 - if roundUp: val = roundup(val) + val = size / 1024 / 1024 + val = round2(val) if asInt: return "{:d}{:s}MiB".format(int(val), space) else: @@ -509,7 +504,7 @@ def GetDumpReport(di, device): di["file_name"] = "" else: di["file_name"] = os.path.split(di["file_name"])[1] - di["file_size"] = "{:s} ({:d} bytes)".format(formatFileSize(di["file_size"]), di["file_size"]) + di["file_size"] = "{:s} ({:d} bytes)".format(formatFileSize(size=di["file_size"]), di["file_size"]) s = "" \ "= FlashGBX Dump Report =\n" \ @@ -659,7 +654,7 @@ def GetDumpReport(di, device): timestamp=di["gbmem_parsed"][i]["timestamp"], kiosk_id=di["gbmem_parsed"][i]["kiosk_id"], location="0x{:06X}–0x{:06X}".format(di["gbmem_parsed"][i]["rom_offset"], di["gbmem_parsed"][i]["rom_offset"]+di["gbmem_parsed"][i]["rom_size"]-1), - size="{:s} ({:d} bytes)".format(formatFileSize(di["gbmem_parsed"][i]["rom_size"]), di["gbmem_parsed"][i]["rom_size"]), + size="{:s} ({:d} bytes)".format(formatFileSize(size=di["gbmem_parsed"][i]["rom_size"]), di["gbmem_parsed"][i]["rom_size"]), ) if "crc32" in di["gbmem_parsed"][i]: s += "* CRC32: {:08x}\n".format(di["gbmem_parsed"][i]["crc32"]) if "md5" in di["gbmem_parsed"][i]: s += "* MD5: {:s}\n".format(di["gbmem_parsed"][i]["md5"]) @@ -702,7 +697,7 @@ def GetDumpReport(di, device): if "rv" in db: s += "* Revision: {:s}\n".format(db["rv"]) if "gc" in db: s += "* Game Code: {:s}\n".format(db["gc"]) if "rc" in db: s += "* ROM CRC32: {:08x}\n".format(db["rc"]) - if "rs" in db: s += "* ROM Size: {:s}\n".format(formatFileSize(db["rs"], asInt=True)) + if "rs" in db: s += "* ROM Size: {:s}\n".format(formatFileSize(size=db["rs"], asInt=True)) if mode == "AGB": header["game_code_raw"] = header["game_code_raw"].replace("\0", "␀") @@ -738,7 +733,10 @@ def GetDumpReport(di, device): s += "" \ "* Save Flash Chip: {agb_save_flash_chip_name:s} (0x{agb_save_flash_chip_id:04X})\n" \ .format(agb_save_flash_chip_name=di["agb_save_flash_id"][1], agb_save_flash_chip_id=di["agb_save_flash_id"][0]) - + + if "eeprom_data" in di: + s += "* EEPROM area: {:s}…\n".format(''.join(format(x, '02X') for x in di["eeprom_data"])) + if header["db"] is not None and header["db"]["rc"] == di["hash_crc32"]: db = header["db"] s += "\n== Database Match ==\n" @@ -749,10 +747,10 @@ def GetDumpReport(di, device): if "rv" in db: s += "* Revision: {:s}\n".format(db["rv"]) if "gc" in db: s += "* Game Code: {:s}\n".format(db["gc"]) if "rc" in db: s += "* ROM CRC32: {:08x}\n".format(db["rc"]) - if "rs" in db: s += "* ROM Size: {:s}\n".format(formatFileSize(db["rs"], asInt=True)) + if "rs" in db: s += "* ROM Size: {:s}\n".format(formatFileSize(size=db["rs"], asInt=True)) if "st" in db: s += "* Save Type: {:s}\n".format(AGB_Header_Save_Types[db["st"]]) - #if "ss" in db: s += "* Save Size: {:s}\n".format(formatFileSize(db["ss"], asInt=True)) - + #if "ss" in db: s += "* Save Size: {:s}\n".format(formatFileSize(size=db["ss"], asInt=True)) + return s def GenerateFileName(mode, header, settings=None): diff --git a/FlashGBX/config/db_AGB.json b/FlashGBX/config/db_AGB.json index 68fd86e..0ec5f24 100644 --- a/FlashGBX/config/db_AGB.json +++ b/FlashGBX/config/db_AGB.json @@ -17310,7 +17310,7 @@ "gn": "Crash & Spyro Superpack - Spyro Orange - The Cortex Conspiracy + Crash Bandicoot Purple - Ripto's Rampage", "ne": "(USA)", "gc": "B53E", - "rc": 1497403502, + "rc": 2608249099, "rs": 33554432, "st": 2, "ss": 8192, @@ -17321,7 +17321,7 @@ "gn": "Crash & Spyro Super Pack Volume 3", "ne": "(Europe) (En,Fr,De,Es,It)", "gc": "B53P", - "rc": 84981519, + "rc": 3341196906, "rs": 33554432, "st": 2, "ss": 8192, @@ -18678,7 +18678,7 @@ "gn": "Shamu's Deep Sea Adventures", "ne": "(USA)", "gc": "BBAE", - "rc": 1318332139, + "rc": 2127263017, "rs": 33554432, "st": 1, "ss": 512, @@ -19107,7 +19107,7 @@ "gn": "Crayon Shin-chan - Densetsu o Yobu Omake no Miyako Shockgaan!", "ne": "(Japan)", "gc": "BC2J", - "rc": 1170752614, + "rc": 1391748094, "rs": 33554432, "st": 2, "ss": 8192, @@ -21162,7 +21162,7 @@ "gn": "My Animal Centre in Africa", "ne": "(Europe) (En,Fr,De,Es,It)", "gc": "BFRP", - "rc": 381739048, + "rc": 3572943181, "rs": 33554432, "st": 2, "ss": 8192, @@ -21869,7 +21869,7 @@ "gn": "Happy Feet", "ne": "(USA) (En,Fr)", "gc": "BH3E", - "rc": 1747326927, + "rc": 620782579, "rs": 33554432, "st": 1, "ss": 512, @@ -21880,7 +21880,7 @@ "gn": "Happy Feet", "ne": "(Europe) (En,Fr,De,Es,It)", "gc": "BH3P", - "rc": 2052265788, + "rc": 3093642841, "rs": 33554432, "st": 1, "ss": 512, @@ -23247,7 +23247,7 @@ "gn": "Harry Potter Collection", "ne": "(Europe) (En,Fr,De,Es,It,Nl,Pt,Sv,No,Da)", "gc": "BJPP", - "rc": 4289328379, + "rc": 1329185140, "rs": 33554432, "st": 2, "ss": 8192, @@ -28788,7 +28788,7 @@ "gn": "Legend of Spyro, The - The Eternal Night", "ne": "(USA) (En,Fr)", "gc": "BU7E", - "rc": 3173470694, + "rc": 2373452324, "rs": 33554432, "st": 1, "ss": 512, @@ -28799,7 +28799,7 @@ "gn": "Legend of Spyro, The - The Eternal Night", "ne": "(Europe) (En,Fr,De,Es,It,Nl)", "gc": "BU7P", - "rc": 2477884243, + "rc": 2750337169, "rs": 33554432, "st": 1, "ss": 512, @@ -29804,7 +29804,7 @@ "gn": "2 in 1 Game Pack - Spider-Man + Spider-Man 2", "ne": "(USA) (En,Fr,De+En,Fr,De,Es)", "gc": "BX3E", - "rc": 182674303, + "rc": 985411773, "rs": 33554432, "st": 1, "ss": 512, @@ -29815,7 +29815,7 @@ "gn": "2 in 1 Game Pack - Spider-Man & Spider-Man 2", "ne": "(Europe) (En,Fr,De+En,Fr,De,Es,It)", "gc": "BX3P", - "rc": 3610436909, + "rc": 3882727151, "rs": 33554432, "st": 1, "ss": 512, @@ -30355,7 +30355,7 @@ "gn": "Yggdra Union - We'll Never Fight Alone", "ne": "(USA)", "gc": "BYUE", - "rc": 1006266615, + "rc": 2226480748, "rs": 33554432, "st": 2, "ss": 8192, @@ -30366,7 +30366,7 @@ "gn": "Yggdra Union", "ne": "(Japan)", "gc": "BYUJ", - "rc": 2825880650, + "rc": 3209929682, "rs": 33554432, "st": 2, "ss": 8192, @@ -30377,7 +30377,7 @@ "gn": "Yggdra Union - We'll Never Fight Alone", "ne": "(Europe)", "gc": "BYUP", - "rc": 1041101104, + "rc": 691132072, "rs": 33554432, "st": 2, "ss": 8192, diff --git a/FlashGBX/config/fc_AGB_MSP55LV128M.txt b/FlashGBX/config/fc_AGB_MSP55LV128M.txt index 47e9769..38248ab 100644 --- a/FlashGBX/config/fc_AGB_MSP55LV128M.txt +++ b/FlashGBX/config/fc_AGB_MSP55LV128M.txt @@ -9,7 +9,8 @@ "AGB-E05-02 with M29W128FH", "2006_TSOP_64BALL_6106 with W29GL128SH9B", "AGB-E05-02 with JS28F128", - "AGB-E05-03H with M29W128GH" + "AGB-E05-03H with M29W128GH", + "BGA64B-71-TV-DEEP with 256M29EML" ], "flash_ids":[ [ 0x02, 0x00, 0x7D, 0x22 ], @@ -20,7 +21,8 @@ [ 0x20, 0x00, 0x7D, 0x22 ], [ 0xEF, 0x00, 0x7D, 0x22 ], [ 0x8A, 0x00, 0x7D, 0x22 ], - [ 0x20, 0x00, 0x7D, 0x22 ] + [ 0x20, 0x00, 0x7D, 0x22 ], + [ 0x8A, 0x00, 0x7D, 0x22 ] ], "voltage":3.3, "flash_size":0x1000000, diff --git a/FlashGBX/fw_GBxCartRW_v1_4.py b/FlashGBX/fw_GBxCartRW_v1_4.py index 57ad10e..4d2b32f 100644 --- a/FlashGBX/fw_GBxCartRW_v1_4.py +++ b/FlashGBX/fw_GBxCartRW_v1_4.py @@ -110,7 +110,7 @@ try: self.DEVICE = device else: self.APP.QT_APP.processEvents() - text = "This Firmware Updater is for insideGadgets GBxCart RW v1.4/v1.4a devices only. Please only proceed if your device matches this hardware revision.\n\nOlder GBxCart RW revisions can be updated only after connecting to them first." + text = "This Firmware Updater is for insideGadgets GBxCart RW v1.4 devices only. Please only proceed if your device matches this hardware revision.\n\nOlder GBxCart RW revisions can be updated only after connecting to them first." msgbox = QtWidgets.QMessageBox(parent=self, icon=QtWidgets.QMessageBox.Warning, windowTitle="FlashGBX", text=text, standardButtons=QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel) msgbox.setDefaultButton(QtWidgets.QMessageBox.Ok) answer = msgbox.exec() @@ -148,7 +148,7 @@ try: self.lblDevicePCBVer.setMinimumWidth(120) self.optDevicePCBVer14 = QtWidgets.QRadioButton("v1.4") self.connect(self.optDevicePCBVer14, QtCore.SIGNAL("clicked()"), self.SetPCBVersion) - self.optDevicePCBVer14a = QtWidgets.QRadioButton("v1.4a") + self.optDevicePCBVer14a = QtWidgets.QRadioButton("v1.4a/b") self.connect(self.optDevicePCBVer14a, QtCore.SIGNAL("clicked()"), self.SetPCBVersion) rowDeviceInfo2.addWidget(self.lblDevicePCBVer) rowDeviceInfo2.addWidget(self.optDevicePCBVer14) @@ -217,7 +217,7 @@ try: self.lblDeviceFWVerResult.setText(self.FW_VER) if self.PCB_VER == "v1.4": self.optDevicePCBVer14.setChecked(True) - elif self.PCB_VER == "v1.4a": + elif self.PCB_VER == "v1.4a/b": self.optDevicePCBVer14a.setChecked(True) self.SetPCBVersion() @@ -275,7 +275,7 @@ try: file_name = self.FWUPD.APP_PATH + "/res/fw_GBxCart_RW_v1_4.zip" led = "Done" elif self.optDevicePCBVer14a.isChecked(): - device_name = "v1.4a" + device_name = "v1.4a/b" file_name = self.FWUPD.APP_PATH + "/res/fw_GBxCart_RW_v1_4a.zip" led = "Status" else: diff --git a/FlashGBX/hw_GBxCartRW.py b/FlashGBX/hw_GBxCartRW.py index 092930b..5ae8908 100644 --- a/FlashGBX/hw_GBxCartRW.py +++ b/FlashGBX/hw_GBxCartRW.py @@ -92,7 +92,7 @@ class GbxDevice: "AGB_READ_METHOD":[8, 0x0C], } - PCB_VERSIONS = {4:'v1.3', 5:'v1.4', 6:'v1.4a', 101:'Mini v1.0d'} + PCB_VERSIONS = {4:'v1.3', 5:'v1.4', 6:'v1.4a/b', 101:'Mini v1.0d'} ACTIONS = {"ROM_READ":1, "SAVE_READ":2, "SAVE_WRITE":3, "ROM_WRITE":4, "ROM_WRITE_VERIFY":4, "SAVE_WRITE_VERIFY":3} SUPPORTED_CARTS = {} @@ -114,7 +114,8 @@ class GbxDevice: FAST_READ = False SKIPPING = False BAUDRATE = 1000000 - MAX_BUFFER_LEN = 0x800 + MAX_BUFFER_READ = 0x2000 + MAX_BUFFER_WRITE = 0x400 DEVICE_TIMEOUT = 0.75 WRITE_DELAY = False READ_ERRORS = 0 @@ -172,14 +173,16 @@ class GbxDevice: elif self.FW["fw_ts"] > self.DEVICE_LATEST_FW_TS[self.FW["pcb_ver"]]: conn_msg.append([0, "Note: The GBxCart RW device on port " + ports[i] + " is running a firmware version that is newer than what this version of FlashGBX was developed to work with, so errors may occur."]) - if self.FW["pcb_ver"] not in (4, 5, 6, 101): # only the v1.3, v1.4, v1.4a, Mini v1.1 PCB revisions are supported + if self.FW["pcb_ver"] not in (4, 5, 6, 101): # only the v1.3, v1.4, v1.4a/b, Mini v1.1 PCB revisions are supported dev.close() self.DEVICE = None continue elif self.FW["pcb_ver"] in (5, 6, 101) and self.BAUDRATE > 1000000: - self.MAX_BUFFER_LEN = 0x2000 + self.MAX_BUFFER_READ = 0x2000 + self.MAX_BUFFER_WRITE = 0x400 else: - self.MAX_BUFFER_LEN = 0x1000 + self.MAX_BUFFER_READ = 0x1000 + self.MAX_BUFFER_WRITE = 0x100 conn_msg.append([0, "For help please visit the insideGadgets Discord: https://gbxcart.com/discord"]) @@ -383,7 +386,7 @@ class GbxDevice: return (None, fw_GBxCartRW_v1_3.FirmwareUpdaterWindow) except: return False - elif self.FW["pcb_ver"] in (5, 6): # v1.4 / v1.4a + elif self.FW["pcb_ver"] in (5, 6): # v1.4 / v1.4a/b try: from . import fw_GBxCartRW_v1_4 return (fw_GBxCartRW_v1_4.FirmwareUpdater, fw_GBxCartRW_v1_4.FirmwareUpdaterWindow) @@ -613,7 +616,7 @@ class GbxDevice: self._write(self.DEVICE_CMD["OFW_CART_PWR_ON"]) time.sleep(delay) self.DEVICE.reset_input_buffer() # bug workaround - + def GetMode(self): return self.MODE @@ -1017,7 +1020,7 @@ class GbxDevice: addr_shift = batteryless_loader[base_addr - 3] << 1 address = (addr_value >> addr_rotate_right) | (addr_value << (32 - addr_rotate_right)) & 0xFFFFFFFF address = (address << addr_shift) - if address < 32*1024*1024: + if address < 32*1024*1024 and address > 0x1000: bl_offset = address dprint("Detected Chinese bootleg Batteryless SRAM ROM") else: @@ -1338,12 +1341,8 @@ class GbxDevice: self.NO_PROG_UPDATE = npu - def WriteROM(self, address, buffer, flash_buffer_size=False, skip_init=False, rumble_stop=False): + def WriteROM(self, address, buffer, flash_buffer_size=False, skip_init=False, rumble_stop=False, max_length=MAX_BUFFER_WRITE): length = len(buffer) - if self.FW["pcb_ver"] not in (5, 6, 101) or self.BAUDRATE == 1000000: - max_length = 256 - else: - max_length = 1024 num = math.ceil(length / max_length) dprint("Writing 0x{:X} bytes to Flash ROM in {:d} iteration(s)".format(length, num)) if length == 0: @@ -2153,7 +2152,7 @@ class GbxDevice: dprint("Pullups disabled") buffer = bytearray(size) - max_length = self.MAX_BUFFER_LEN + max_length = self.MAX_BUFFER_READ dprint("Max buffer size: 0x{:X}".format(max_length)) if self.FAST_READ is True: if is_3dmemory: @@ -2275,7 +2274,7 @@ class GbxDevice: else: dprint("Failed to receive 0x{:X} bytes from the device at position 0x{:X}. Decreasing maximum transfer buffer size to 0x{:X}.".format(buffer_len, pos_temp, max_length >> 1)) max_length >>= 1 - self.MAX_BUFFER_LEN = max_length + self.MAX_BUFFER_READ = max_length err_text += "\nBuffer size adjusted to {:d} bytes...".format(max_length) if ".dev" in Util.VERSION_PEP440 and not Util.DEBUG: print(err_text) @@ -2322,8 +2321,6 @@ class GbxDevice: bank += 1 - if file is not None: file.close() - if "verify_write" in args: return min(pos_total, len(args["verify_write"])) @@ -2353,23 +2350,16 @@ class GbxDevice: if "gbmem_parsed" in self.INFO["dump_info"]: del(self.INFO["dump_info"]["gbmem_parsed"]) # Calculate Global Checksum - self.INFO["file_crc32"] = zlib.crc32(buffer) & 0xFFFFFFFF - self.INFO["file_sha1"] = hashlib.sha1(buffer).hexdigest() - self.INFO["file_sha256"] = hashlib.sha256(buffer).hexdigest() - self.INFO["file_md5"] = hashlib.md5(buffer).hexdigest() - self.INFO["dump_info"]["hash_crc32"] = self.INFO["file_crc32"] - self.INFO["dump_info"]["hash_sha1"] = self.INFO["file_sha1"] - self.INFO["dump_info"]["hash_sha256"] = self.INFO["file_sha256"] - self.INFO["dump_info"]["hash_md5"] = self.INFO["file_md5"] if self.MODE == "DMG": if _mbc.GetName() == "MMM01": self.INFO["dump_info"]["header"] = RomFileDMG(buffer[-0x8000:-0x8000+0x180]).GetHeader(unchanged=True) else: self.INFO["dump_info"]["header"] = RomFileDMG(buffer[:0x180]).GetHeader() - chk = _mbc.CalcChecksum(buffer) + #chk = _mbc.CalcChecksum(buffer) + self.INFO["rom_checksum_calc"] = _mbc.CalcChecksum(buffer) elif self.MODE == "AGB": self.INFO["dump_info"]["header"] = RomFileAGB(buffer[:0x180]).GetHeader() - chk = self.INFO["file_crc32"] + #chk = self.INFO["file_crc32"] temp_ver = "N/A" ids = [ b"SRAM_", b"EEPROM_V", b"FLASH_V", b"FLASH512_V", b"FLASH1M_V", b"AGB_8MDACS_DL_V" ] @@ -2390,8 +2380,23 @@ class GbxDevice: print("Error querying the flash save chip.") self.DEVICE.reset_input_buffer() self.DEVICE.reset_output_buffer() - - self.INFO["rom_checksum_calc"] = chk + + if "EEPROM" in temp_ver and len(buffer) == 0x2000000: + padding_byte = buffer[0x1FFFEFF] + dprint("Replacing unmapped ROM data of cartridge (32 MiB ROM + EEPROM save type) with the original padding byte of 0x{:02X}.".format(padding_byte)) + self.INFO["dump_info"]["eeprom_data"] = buffer[0x1FFFF00:0x1FFFF10] + buffer[0x1FFFF00:0x2000000] = bytearray([padding_byte] * 0x100) + file.seek(0x1FFFF00) + file.write(buffer[0x1FFFF00:0x2000000]) + + self.INFO["file_crc32"] = zlib.crc32(buffer) & 0xFFFFFFFF + self.INFO["file_sha1"] = hashlib.sha1(buffer).hexdigest() + self.INFO["file_sha256"] = hashlib.sha256(buffer).hexdigest() + self.INFO["file_md5"] = hashlib.md5(buffer).hexdigest() + self.INFO["dump_info"]["hash_crc32"] = self.INFO["file_crc32"] + self.INFO["dump_info"]["hash_sha1"] = self.INFO["file_sha1"] + self.INFO["dump_info"]["hash_sha256"] = self.INFO["file_sha256"] + self.INFO["dump_info"]["hash_md5"] = self.INFO["file_md5"] # Check for ROM loops self.INFO["loop_detected"] = False @@ -2404,6 +2409,8 @@ class GbxDevice: else: break + if file is not None: file.close() + # ↓↓↓ Switch to first ROM bank if self.MODE == "DMG": if _mbc.ResetBeforeBankChange(0) is True: @@ -2959,6 +2966,20 @@ class GbxDevice: data_import += bytearray([0xFF] * (0x400 - len(data_import))) if len(data_import) % 0x8000 > 0: data_import += bytearray([0xFF] * (0x8000 - len(data_import) % 0x8000)) + + # Skip writing the last 256 bytes of 32 MiB ROMs with EEPROM save type + if self.MODE == "AGB" and len(data_import) == 0x2000000: + temp_ver = "N/A" + ids = [ b"SRAM_", b"EEPROM_V", b"FLASH_V", b"FLASH512_V", b"FLASH1M_V", b"AGB_8MDACS_DL_V" ] + for id in ids: + temp_pos = data_import.find(id) + if temp_pos > 0: + temp_ver = data_import[temp_pos:temp_pos+0x20] + temp_ver = temp_ver[:temp_ver.index(0x00)].decode("ascii", "replace") + break + if "EEPROM" in temp_ver: + print("Note: The last 256 bytes of this 32 MiB ROM will not be written as this area is reserved by the EEPROM save type.") + data_import = data_import[:0x1FFFF00] # Fix header if "fix_header" in args and args["fix_header"]: @@ -3096,7 +3117,7 @@ class GbxDevice: else: errmsg_mbc_selection += "\n- Check mapper type used: {:s} (forced by selected cartridge type)".format(_mbc.GetName()) if len(data_import) > _mbc.GetMaxROMSize(): - errmsg_mbc_selection += "\n- Check mapper type ROM size limit: likely up to {:s}".format(Util.formatFileSize(_mbc.GetMaxROMSize())) + errmsg_mbc_selection += "\n- Check mapper type ROM size limit: likely up to {:s}".format(Util.formatFileSize(size=_mbc.GetMaxROMSize())) elif self.MODE == "AGB": self._write(self.DEVICE_CMD["SET_MODE_AGB"]) @@ -3303,7 +3324,7 @@ class GbxDevice: if len(sector_offsets) > 0: flash_capacity = sector_offsets[-1][0] + sector_offsets[-1][1] if flash_capacity < len(data_import) and not (flashcart.SupportsChipErase() and args["prefer_chip_erase"]): - self.SetProgress({"action":"ABORT", "info_type":"msgbox_critical", "info_msg":"There are not enough flash sectors available to write this ROM. The maximum capacity is {:s}.".format(Util.formatFileSize(flash_capacity, asInt=False)), "abortable":False}) + self.SetProgress({"action":"ABORT", "info_type":"msgbox_critical", "info_msg":"There are not enough flash sectors available to write this ROM. The maximum capacity is {:s}.".format(Util.formatFileSize(size=flash_capacity, asInt=False)), "abortable":False}) return False sector_offsets_hash = base64.urlsafe_b64encode(hashlib.sha1(str(sector_offsets).encode("UTF-8")).digest()).decode("ASCII", "ignore")[:4] @@ -3533,7 +3554,12 @@ class GbxDevice: elif command_set_type == "DATEL_ORBITV2": status = self.WriteROM_DMG_DatelOrbitV2(address=pos, buffer=data_import[buffer_pos:buffer_pos+buffer_len], bank=bank) else: - status = self.WriteROM(address=pos, buffer=data_import[buffer_pos:buffer_pos+buffer_len], flash_buffer_size=flash_buffer_size, skip_init=(skip_init and not self.SKIPPING), rumble_stop=rumble) + max_buffer_write = self.MAX_BUFFER_WRITE + if (len(data_import) == 0x1FFFF00) and (buffer_pos+buffer_len > len(data_import)): + # 32 MiB ROM + EEPROM cart + max_buffer_write = 256 + buffer_len = (buffer_pos+buffer_len - len(data_import)) + status = self.WriteROM(address=pos, buffer=data_import[buffer_pos:buffer_pos+buffer_len], flash_buffer_size=flash_buffer_size, skip_init=(skip_init and not self.SKIPPING), rumble_stop=rumble, max_length=max_buffer_write) if status is False or se_ret is False: self.CANCEL = True @@ -3553,7 +3579,7 @@ class GbxDevice: else: retry_hp -= 10 if retry_hp <= 0: - self.CANCEL_ARGS.update({"info_type":"msgbox_critical", "info_msg":"An error occured while writing 0x{:X} bytes at position 0x{:X} ({:s}). Please re-connect the device and try again from the beginning.\n\nTroubleshooting advice:\n- Clean cartridge contacts\n- Avoid passive USB hubs and try different USB ports/cables\n- Check cartridge type selection\n- Check cartridge ROM storage size (at least {:s} is required){:s}".format(buffer_len, buffer_pos, Util.formatFileSize(size=buffer_pos, asInt=False), Util.formatFileSize(len(data_import), asInt=False), errmsg_mbc_selection), "abortable":False}) + self.CANCEL_ARGS.update({"info_type":"msgbox_critical", "info_msg":"An error occured while writing 0x{:X} bytes at position 0x{:X} ({:s}). Please re-connect the device and try again from the beginning.\n\nTroubleshooting advice:\n- Clean cartridge contacts\n- Avoid passive USB hubs and try different USB ports/cables\n- Check cartridge type selection\n- Check cartridge ROM storage size (at least {:s} is required){:s}".format(buffer_len, buffer_pos, Util.formatFileSize(size=buffer_pos, asInt=False), Util.formatFileSize(size=len(data_import), asInt=False), errmsg_mbc_selection), "abortable":False}) continue rev_buffer_pos = sector_offsets[sector_pos - 1][0] @@ -3600,13 +3626,6 @@ class GbxDevice: if status is not False: bank += 1 - if delta_state_new is not None and not chip_erase: - try: - with open(json_file, "wb") as f: - f.write(json.dumps(delta_state_new).encode("UTF-8-SIG")) - except PermissionError: - print("Error: Couldn’t update write-protected file “{:s}”".format(json_file)) - self.SetProgress({"action":"UPDATE_POS", "pos":len(data_import)}) # ↑↑↑ Flash write @@ -3677,6 +3696,13 @@ class GbxDevice: verified = False # ↑↑↑ Flash verify + if delta_state_new is not None and not chip_erase and not "broken_sectors" in self.INFO: + try: + with open(json_file, "wb") as f: + f.write(json.dumps(delta_state_new).encode("UTF-8-SIG")) + except PermissionError: + print("Error: Couldn’t update write-protected file “{:s}”".format(json_file)) + # ↓↓↓ Switch to first ROM bank if self.MODE == "DMG": if _mbc.ResetBeforeBankChange(0) is True: diff --git a/FlashGBX/res/config.zip b/FlashGBX/res/config.zip index 5349e72ed723d70d756d7e1a8207cda3e8293e02..f77d83611bc1b98a33a1350c1e5fad7bf93de5f2 100644 GIT binary patch delta 70533 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

ww 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 delta 70419 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 z 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 U{8ZSH6QE9mG)SrJA^7X*-@>G6wEzGB diff --git a/README.md b/README.md index c654453..b930c04 100644 --- a/README.md +++ b/README.md @@ -256,6 +256,7 @@ Use this command in a Terminal or Command Prompt window to launch the installed - B104 with MSP55LV128 - B11 with 26L6420MC-90 - B54 with MX29LV320ET + - BGA64B-71-TV-DEEP with 256M29EML - BX2006_0106_NEW with S29GL128N10TFI01 - BX2006_TSOP_64BALL with GL128S - BX2006_TSOP_64BALL with GL256S @@ -307,7 +308,7 @@ Many different reproduction cartridges share their flash chip command set, so ev The author would like to thank the following very kind people for their help, contributions or documentation (in alphabetical order): -2358, 90sFlav, AcoVanConis, AdmirtheSableye, AlexiG, ALXCO-Hardware, AndehX, antPL, bbsan, BennVenn, ccs21, ClassicOldSong, CodyWick13, Corborg, Cristóbal, crizzlycruz, Därk, Davidish, DevDavisNunez, Diddy_Kong, djedditt, Dr-InSide, dyf2007, easthighNerd, EchelonPrime, edo999, Ell, EmperorOfTigers, endrift, Erba Verde, ethanstrax, eveningmoose, Falknör, FerrantePescara, frarees, Frost Clock, gboh, gekkio, Godan, Grender, HDR, Herax, Hiccup, hiks, howie0210, iamevn, Icesythe7, ide, Jayro, Jenetrix, JFox, joyrider3774, JS7457, julgr, Kaede, KOOORAY, kscheel, kyokohunter, litlemoran, LovelyA72, Luca DS, LucentW, manuelcm1, marv17, Merkin, metroid-maniac, Mr_V, orangeglo, paarongiroux, Paradoxical, Rairch, Raphaël BOICHOT, redalchemy, RetroGorek, RevZ, s1cp, Satumox, Sgt.DoudouMiel, SH, Shinichi999, Sillyhatday, Sithdown, skite2001, Smelly-Ghost, Stitch, Super Maker, t5b6_de, Tauwasser, Timville, twitnic, velipso, Veund, voltagex, Voultar, wickawack, Wkr, x7l7j8cc, xactoes, yosoo, Zeii, Zelante, Zoo, zvxr +2358, 90sFlav, AcoVanConis, AdmirtheSableye, AlexiG, ALXCO-Hardware, AndehX, antPL, bbsan, BennVenn, ccs21, ClassicOldSong, CodyWick13, Corborg, Cristóbal, crizzlycruz, Därk, Davidish, DevDavisNunez, Diddy_Kong, djedditt, Dr-InSide, dyf2007, easthighNerd, EchelonPrime, edo999, Ell, EmperorOfTigers, endrift, Erba Verde, ethanstrax, eveningmoose, Falknör, FerrantePescara, frarees, Frost Clock, gboh, gekkio, Godan, Grender, HDR, Herax, Hiccup, hiks, howie0210, iamevn, Icesythe7, ide, Jayro, Jenetrix, JFox, joyrider3774, JS7457, julgr, Kaede, KOOORAY, kscheel, kyokohunter, Leitplanke, litlemoran, LovelyA72, Luca DS, LucentW, manuelcm1, marv17, Merkin, metroid-maniac, Mr_V, orangeglo, paarongiroux, Paradoxical, Rairch, Raphaël BOICHOT, redalchemy, RetroGorek, RevZ, s1cp, Satumox, Sgt.DoudouMiel, SH, Shinichi999, Sillyhatday, Sithdown, skite2001, Smelly-Ghost, Stitch, Super Maker, t5b6_de, Tauwasser, Timville, twitnic, velipso, Veund, voltagex, Voultar, wickawack, Wkr, x7l7j8cc, xactoes, yosoo, Zeii, Zelante, Zoo, zvxr ## DISCLAIMER diff --git a/setup.py b/setup.py index f4ddd37..04d6209 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ with open("README.md", "r", encoding="utf-8") as fh: long_description = fh.read( setuptools.setup( name="FlashGBX", - version="3.30", + version="3.31", author="Lesserkuma", description="Reads and writes Game Boy and Game Boy Advance cartridge data using the GBxCart RW by insideGadgets", url="https://github.com/lesserkuma/FlashGBX",