Skip to content

Commit

Permalink
3.34
Browse files Browse the repository at this point in the history
  • Loading branch information
lesserkuma committed Sep 26, 2023
1 parent 0e36c7a commit c12b1de
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 67 deletions.
3 changes: 3 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
# Release notes
### v3.34 (released 2023-09-26)
- Minor bug fixes and improvements

### v3.33 (released 2023-09-25)
- Updated the Game Boy and Game Boy Advance lookup databases for save types, ROM sizes and checksums
- Minor bug fixes and improvements *(thanks Eldram, Grender)*
Expand Down
4 changes: 2 additions & 2 deletions FlashGBX/Util.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@

# Common constants
APPNAME = "FlashGBX"
VERSION_PEP440 = "3.33"
VERSION_PEP440 = "3.34"
VERSION = "v{:s}".format(VERSION_PEP440)
VERSION_TIMESTAMP = 1695639320
VERSION_TIMESTAMP = 1695720959
DEBUG = False
DEBUG_LOG = []
APP_PATH = ""
Expand Down
133 changes: 69 additions & 64 deletions FlashGBX/hw_GBxCartRW.py
Original file line number Diff line number Diff line change
Expand Up @@ -888,13 +888,14 @@ def DetectCartridge(self, mbc=None, limitVoltage=False, checkSaveType=True):
save_size = Util.find_size(self.INFO["data"], len(self.INFO["data"]))
else:
save_size = 0
try:
save_type = Util.DMG_Header_RAM_Sizes_Map[Util.DMG_Header_RAM_Sizes_Flasher_Map.index(save_size)]
except:
save_size = 0
save_type = 0

if self.MODE == "DMG":
try:
save_type = Util.DMG_Header_RAM_Sizes_Map[Util.DMG_Header_RAM_Sizes_Flasher_Map.index(save_size)]
except:
save_size = 0
save_type = 0

if save_size > 0x20:
if mbc == 0x22: # MBC7
if save_size == 256:
Expand All @@ -921,68 +922,72 @@ def DetectCartridge(self, mbc=None, limitVoltage=False, checkSaveType=True):
save_type = 0x05

elif self.MODE == "AGB":
# Check for FLASH
ret = self.ReadFlashSaveID()
if ret is not False:
(flash_save_id, _) = ret
try:
if flash_save_id != 0 and flash_save_id in Util.AGB_Flash_Save_Chips:
save_size = Util.AGB_Flash_Save_Chips_Sizes[list(Util.AGB_Flash_Save_Chips).index(flash_save_id)]
save_chip = Util.AGB_Flash_Save_Chips[flash_save_id]
if info["3d_memory"] is True:
save_type = None
save_size = 0
else:
# Check for FLASH
ret = self.ReadFlashSaveID()
if ret is not False:
(flash_save_id, _) = ret
try:
if flash_save_id != 0 and flash_save_id in Util.AGB_Flash_Save_Chips:
save_size = Util.AGB_Flash_Save_Chips_Sizes[list(Util.AGB_Flash_Save_Chips).index(flash_save_id)]
save_chip = Util.AGB_Flash_Save_Chips[flash_save_id]
if save_size == 131072:
save_type = 5
elif save_size == 65536:
save_type = 4
except:
pass

if save_type is None:
checkBatterylessSRAM = True
if info["dacs_8m"] is True:
save_size = 1048576
save_type = 6
elif save_size > 256: # SRAM
if save_size == 131072:
save_type = 5
save_type = 8
checkBatterylessSRAM = True
elif save_size == 65536:
save_type = 4
except:
pass

if save_type is None:
checkBatterylessSRAM = True
if info["dacs_8m"] is True:
save_size = 1048576
save_type = 6
elif save_size > 256: # SRAM
if save_size == 131072:
save_type = 8
checkBatterylessSRAM = True
elif save_size == 65536:
save_type = 7
checkBatterylessSRAM = True
elif save_size == 32768:
save_type = 3
elif save_size in Util.AGB_Header_Save_Sizes:
save_type = Util.AGB_Header_Save_Sizes.index(save_size)
else:
save_type = None
save_size = 0
else:
dprint("Testing EEPROM")
# Check for 4K EEPROM
self._BackupRestoreRAM(args={ 'mode':2, 'path':None, 'mbc':mbc, 'save_type':1, 'rtc':False })
save_size = Util.find_size(self.INFO["data"], len(self.INFO["data"]))
eeprom_4k = self.INFO["data"]
# Check for 64K EEPROM
self._BackupRestoreRAM(args={ 'mode':2, 'path':None, 'mbc':mbc, 'save_type':2, 'rtc':False })
save_size = Util.find_size(self.INFO["data"], len(self.INFO["data"]))
eeprom_64k = self.INFO["data"]
if eeprom_64k in (bytearray([0xFF] * len(eeprom_64k)), bytearray([0] * len(eeprom_64k))):
save_type = None
save_size = 0
elif (eeprom_4k == eeprom_64k[:len(eeprom_4k)]):
save_type = 2
save_size = 8192
checkBatterylessSRAM = False
save_type = 7
checkBatterylessSRAM = True
elif save_size == 32768:
save_type = 3
elif save_size in Util.AGB_Header_Save_Sizes:
save_type = Util.AGB_Header_Save_Sizes.index(save_size)
else:
save_type = None
save_size = 0
else:
save_type = 1
save_size = 512
checkBatterylessSRAM = False
dprint("Testing EEPROM")
# Check for 4K EEPROM
self._BackupRestoreRAM(args={ 'mode':2, 'path':None, 'mbc':mbc, 'save_type':1, 'rtc':False })
save_size = Util.find_size(self.INFO["data"], len(self.INFO["data"]))
eeprom_4k = self.INFO["data"]
# Check for 64K EEPROM
self._BackupRestoreRAM(args={ 'mode':2, 'path':None, 'mbc':mbc, 'save_type':2, 'rtc':False })
save_size = Util.find_size(self.INFO["data"], len(self.INFO["data"]))
eeprom_64k = self.INFO["data"]
if eeprom_64k in (bytearray([0xFF] * len(eeprom_64k)), bytearray([0] * len(eeprom_64k))):
save_type = None
save_size = 0
elif (eeprom_4k == eeprom_64k[:len(eeprom_4k)]):
save_type = 2
save_size = 8192
checkBatterylessSRAM = False
else:
save_type = 1
save_size = 512
checkBatterylessSRAM = False

if checkBatterylessSRAM:
batteryless = self.CheckBatterylessSRAM()
if batteryless is not False:
save_type = 9
info["batteryless_sram"] = batteryless
self.INFO["dump_info"]["batteryless_sram"] = batteryless
if checkBatterylessSRAM:
batteryless = self.CheckBatterylessSRAM()
if batteryless is not False:
save_type = 9
info["batteryless_sram"] = batteryless
self.INFO["dump_info"]["batteryless_sram"] = batteryless

self._write(self.DEVICE_CMD["DMG_MBC_RESET"], wait=True)
self.INFO["last_action"] = 0
Expand Down Expand Up @@ -1066,7 +1071,7 @@ def ReadFlashSaveID(self):
temp5555 = self._cart_read(0x5555, agb_save_flash=True) >> 8
temp2AAA = self._cart_read(0x2AAA, agb_save_flash=True) >> 8
temp0000 = self._cart_read(0x0000, agb_save_flash=True) >> 8

cmds = [
[ 0x5555, 0xAA ],
[ 0x2AAA, 0x55 ],
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

setuptools.setup(
name="FlashGBX",
version="3.33",
version="3.34",
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",
Expand Down

0 comments on commit c12b1de

Please sign in to comment.