mirror of
https://github.com/lesserkuma/FlashGBX.git
synced 2026-04-25 16:19:24 -05:00
3.30
This commit is contained in:
parent
fe0221da1c
commit
972bf8fd33
|
|
@ -1,4 +1,12 @@
|
|||
# Release notes
|
||||
### 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)*
|
||||
- Added support for new insideGadgets flash cart revisions *(thanks Smelly-Ghost)*
|
||||
- Added support for Sillyhatday MBC5-DUAL-FLASH-4/8MB *(thanks Sillyhatday)*
|
||||
- Confirmed support for SD007_T40_48BALL_71_TV_TS28 with M29W640 *(thanks marv17)*
|
||||
- Updated the Game Boy Advance lookup database for save types, ROM sizes and checksums
|
||||
|
||||
### v3.29 (released 2023-05-14)
|
||||
- Fixed an issue with writing to some flash cartridges using the old GBxCart RW v1.3 hardware revision *(thanks yosoo)*
|
||||
- Fixed an issue with Batteryless SRAM save data restore *(thanks antPL)*
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
import traceback
|
||||
from serial import SerialException
|
||||
from . import pyside as PySide2
|
||||
from . import Util
|
||||
from .Util import dprint
|
||||
|
||||
class DataTransfer(PySide2.QtCore.QThread):
|
||||
CONFIG = None
|
||||
|
|
@ -51,5 +53,6 @@ class DataTransfer(PySide2.QtCore.QThread):
|
|||
|
||||
if error is not None:
|
||||
print(tb)
|
||||
dprint(tb)
|
||||
self.updateProgress.emit({"action":"ABORT", "info_type":"msgbox_critical", "fatal":True, "info_msg":"An unresolvable error has occured. See console output for more information. Reconnect the device, restart the software and try again.\n\n{:s}: {:s}".format(type(error).__name__, str(error)), "abortable":False})
|
||||
self.FINISHED = True
|
||||
|
|
|
|||
|
|
@ -628,7 +628,7 @@ class FlashGBX_GUI(QtWidgets.QWidget):
|
|||
if self.CONN is not None:
|
||||
Util.dprint("Connected device: {:s}".format(self.CONN.GetFullNameExtended(more=True)))
|
||||
else:
|
||||
Util.dprint("No devices connected.")
|
||||
Util.dprint("No device connected.")
|
||||
Util.dprint("Now writing debug log file.")
|
||||
except:
|
||||
pass
|
||||
|
|
@ -1945,7 +1945,7 @@ class FlashGBX_GUI(QtWidgets.QWidget):
|
|||
self.DisconnectDevice()
|
||||
self.CONN = None
|
||||
self.DEVICES = {}
|
||||
msgbox = QtWidgets.QMessageBox(parent=self, icon=QtWidgets.QMessageBox.Warning, windowTitle="{:s} {:s}".format(APPNAME, VERSION), text="The connection to the device was lost!\n\nThis can be happen in one of the following cases:\n- The USB cable was unplugged or is faulty\n- The inserted cartridge may draw too much peak power (try re-connecting a few times or try hotswapping the cartridge after connecting)\n- The inserted cartrdige may introduce a short circuit (check for bad soldering)\n\nDo you want to try and reconnect to the device?", standardButtons=QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
|
||||
msgbox = QtWidgets.QMessageBox(parent=self, icon=QtWidgets.QMessageBox.Warning, windowTitle="{:s} {:s}".format(APPNAME, VERSION), text="The connection to the device was lost!\n\nThis can be happen in one of the following cases:\n- The USB cable was unplugged or is faulty\n- The inserted cartridge may draw too much peak power (try re-connecting a few times or try hotswapping the cartridge after connecting)\n- The inserted cartrdige may induce a short circuit (check for bad soldering)\n\nDo you want to try and reconnect to the device?", standardButtons=QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
|
||||
msgbox.setDefaultButton(QtWidgets.QMessageBox.Yes)
|
||||
answer = msgbox.exec()
|
||||
if answer == QtWidgets.QMessageBox.No:
|
||||
|
|
@ -2072,6 +2072,7 @@ class FlashGBX_GUI(QtWidgets.QWidget):
|
|||
|
||||
self.lblDMGRomTitleResult.setText(data['game_title'])
|
||||
self.lblDMGGameCodeRevision.setText("Game Code and Revision:")
|
||||
self.lblDMGGameNameResult.setToolTip("")
|
||||
if data["db"] is not None:
|
||||
self.lblDMGGameCodeRevisionResult.setText("{:s}-{:s}".format(data["db"]["gc"], str(data["version"])))
|
||||
temp = data["db"]["gn"]
|
||||
|
|
@ -2081,8 +2082,6 @@ class FlashGBX_GUI(QtWidgets.QWidget):
|
|||
self.lblDMGGameNameResult.setText(temp + "…")
|
||||
if temp != data["db"]["gn"]:
|
||||
self.lblDMGGameNameResult.setToolTip(data["db"]["gn"])
|
||||
else:
|
||||
self.lblDMGGameNameResult.setToolTip("")
|
||||
else:
|
||||
self.lblDMGGameNameResult.setText("(Not in database)")
|
||||
if len(data['game_code']) > 0:
|
||||
|
|
@ -2174,6 +2173,7 @@ class FlashGBX_GUI(QtWidgets.QWidget):
|
|||
self.cmbAGBCartridgeTypeResult.setCurrentIndex(data["flash_type"])
|
||||
|
||||
self.lblAGBRomTitleResult.setText(data['game_title'])
|
||||
self.lblAGBGameNameResult.setToolTip("")
|
||||
if data["db"] is not None:
|
||||
self.lblAGBHeaderGameCodeRevisionResult.setText("{:s}-{:s}".format(data["db"]["gc"], str(data["version"])))
|
||||
temp = data["db"]["gn"]
|
||||
|
|
@ -2183,8 +2183,6 @@ class FlashGBX_GUI(QtWidgets.QWidget):
|
|||
self.lblAGBGameNameResult.setText(temp + "…")
|
||||
if temp != data["db"]["gn"]:
|
||||
self.lblAGBGameNameResult.setToolTip(data["db"]["gn"])
|
||||
else:
|
||||
self.lblAGBGameNameResult.setToolTip("")
|
||||
else:
|
||||
if len(data["game_code"]) > 0:
|
||||
self.lblAGBHeaderGameCodeRevisionResult.setText("{:s}-{:s}".format(data['game_code'], str(data['version'])))
|
||||
|
|
@ -2226,9 +2224,6 @@ class FlashGBX_GUI(QtWidgets.QWidget):
|
|||
else:
|
||||
self.cmbAGBHeaderROMSizeResult.setCurrentIndex(0)
|
||||
|
||||
if data["3d_memory"] is True:
|
||||
self.cmbAGBHeaderROMSizeResult.setCurrentIndex(Util.AGB_Header_ROM_Sizes_Map.index(0x4000000))
|
||||
|
||||
if data["save_type"] == None:
|
||||
self.cmbAGBSaveTypeResult.setCurrentIndex(0)
|
||||
if data["db"] != None:
|
||||
|
|
|
|||
|
|
@ -87,15 +87,15 @@ class RomFileAGB:
|
|||
|
||||
# 3D Memory (GBA Video 64 MB)
|
||||
data["3d_memory"] = False
|
||||
if (data["game_title"] == "DISNEYVOL002" and data["game_code"] == "MDSE" and data["header_checksum"] == 0x58) or \
|
||||
(data["game_title"] == "SHARKS TALE" and data["game_code"] == "MSAE" and data["header_checksum"] == 0x98) or \
|
||||
(data["game_title"] == "SHARKS TALE" and data["game_code"] == "MSAE" and data["header_checksum"] == 0x97) or \
|
||||
(data["game_title"] == "SHREK MOVIE" and data["game_code"] == "MSKE" and data["header_checksum"] == 0x83) or \
|
||||
(data["game_title"] == "SHREK MOVIE" and data["game_code"] == "MSKE" and data["header_checksum"] == 0x82) or \
|
||||
(data["game_title"] == "SHREKSHARK21" and data["game_code"] == "MSTE" and data["header_checksum"] == 0x3E) or \
|
||||
(data["game_title"] == "SHREK2MOVIE" and data["game_code"] == "M2SE" and data["header_checksum"] == 0x8A) or \
|
||||
(data["game_title"] == "SHREK2MOVIE" and data["game_code"] == "M2SE" and data["header_checksum"] == 0x89):
|
||||
data["3d_memory"] = True
|
||||
# if (data["game_title"] == "DISNEYVOL002" and data["game_code"] == "MDSE" and data["header_checksum"] == 0x58) or \
|
||||
# (data["game_title"] == "SHARKS TALE" and data["game_code"] == "MSAE" and data["header_checksum"] == 0x98) or \
|
||||
# (data["game_title"] == "SHARKS TALE" and data["game_code"] == "MSAE" and data["header_checksum"] == 0x97) or \
|
||||
# (data["game_title"] == "SHREK MOVIE" and data["game_code"] == "MSKE" and data["header_checksum"] == 0x83) or \
|
||||
# (data["game_title"] == "SHREK MOVIE" and data["game_code"] == "MSKE" and data["header_checksum"] == 0x82) or \
|
||||
# (data["game_title"] == "SHREKSHARK21" and data["game_code"] == "MSTE" and data["header_checksum"] == 0x3E) or \
|
||||
# (data["game_title"] == "SHREK2MOVIE" and data["game_code"] == "M2SE" and data["header_checksum"] == 0x8A) or \
|
||||
# (data["game_title"] == "SHREK2MOVIE" and data["game_code"] == "M2SE" and data["header_checksum"] == 0x89):
|
||||
# data["3d_memory"] = True
|
||||
|
||||
# 8M FLASH DACS
|
||||
data["dacs_8m"] = False
|
||||
|
|
@ -112,6 +112,9 @@ class RomFileAGB:
|
|||
data["unchanged"] = copy.copy(data)
|
||||
self.DATA = data
|
||||
data["db"] = self.GetDatabaseEntry()
|
||||
if data["db"] is not None and "3d" in data["db"]:
|
||||
data["3d_memory"] = data["db"]["3d"]
|
||||
|
||||
return data
|
||||
|
||||
def GetDatabaseEntry(self):
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@ from enum import Enum
|
|||
|
||||
# Common constants
|
||||
APPNAME = "FlashGBX"
|
||||
VERSION_PEP440 = "3.29"
|
||||
VERSION_PEP440 = "3.30"
|
||||
VERSION = "v{:s}".format(VERSION_PEP440)
|
||||
VERSION_TIMESTAMP = 1684079394
|
||||
VERSION_TIMESTAMP = 1686057604
|
||||
DEBUG = False
|
||||
DEBUG_LOG = []
|
||||
APP_PATH = ""
|
||||
|
|
|
|||
|
|
@ -17361,6 +17361,17 @@
|
|||
"lg": "En,Fr,De,Es,It,Nl",
|
||||
"rg": "Europe"
|
||||
},
|
||||
"79b1b9e4e578b8c5927fa14f54ee6785c8dd2c75": {
|
||||
"gn": "Pocket Monsters Diamond - Pocket Monsters Pearl - Manaphy Present Campaign Senyou Cartridge",
|
||||
"ne": "(Japan) (En)",
|
||||
"gc": "B5BJ",
|
||||
"rc": 3809830607,
|
||||
"rs": 2097152,
|
||||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "Japan"
|
||||
},
|
||||
"ad4048b726b9a9538f431cf689878623cf809aa0": {
|
||||
"gn": "Namco Museum - 50th Anniversary",
|
||||
"ne": "(USA)",
|
||||
|
|
@ -23155,6 +23166,17 @@
|
|||
"lg": "En,Fr,De,Es,It",
|
||||
"rg": "Europe"
|
||||
},
|
||||
"d7197b51473664d1f802ab7c16cdb5eba7045fd9": {
|
||||
"gn": "Glucoboy",
|
||||
"ne": "(Australia)",
|
||||
"gc": "BJGE",
|
||||
"rc": 1848475391,
|
||||
"rs": 16777216,
|
||||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "Australia"
|
||||
},
|
||||
"5b07e6ee13af3ae1d276c00d5fde0be1fa7f1d2c": {
|
||||
"gn": "Justice League Heroes - The Flash",
|
||||
"ne": "(USA)",
|
||||
|
|
@ -31441,7 +31463,8 @@
|
|||
"ss": 0,
|
||||
"rv": "Rev 5",
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"abd17359c40ee817066fe3ab12829d4144dfd71f": {
|
||||
"gn": "Game Boy Advance Video - Shrek 2",
|
||||
|
|
@ -31453,7 +31476,8 @@
|
|||
"ss": 0,
|
||||
"rv": "Rev 6",
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"7330e1c53f14ee6c6b570176ab0f4a648252da3d": {
|
||||
"gn": "Game Boy Advance Video - Cartoon Network Collection - Volume 2",
|
||||
|
|
@ -31464,7 +31488,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA, Europe"
|
||||
"rg": "USA, Europe",
|
||||
"3d": true
|
||||
},
|
||||
"dd992df47247919cbb252015b4ff093e3156d320": {
|
||||
"gn": "Game Boy Advance Video - Cartoon Network Collection - Limited Edition",
|
||||
|
|
@ -31475,7 +31500,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"54a6e77c02eae428b8b438035ba8215d621dc54f": {
|
||||
"gn": "Game Boy Advance Video - Cartoon Network Collection - Platinum Edition",
|
||||
|
|
@ -31486,7 +31512,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA, Europe"
|
||||
"rg": "USA, Europe",
|
||||
"3d": true
|
||||
},
|
||||
"73f8adcdf1fb2766c13ab65c0470af2b23801a7a": {
|
||||
"gn": "Game Boy Advance Video - Cartoon Network Collection - Edition Platinum",
|
||||
|
|
@ -31497,7 +31524,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "Fr",
|
||||
"rg": "France"
|
||||
"rg": "France",
|
||||
"3d": true
|
||||
},
|
||||
"e6976665b9e9979e270c95230fbbd08350f09f99": {
|
||||
"gn": "Game Boy Advance Video - Cartoon Network Collection - Premium Edition",
|
||||
|
|
@ -31508,7 +31536,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA, Europe"
|
||||
"rg": "USA, Europe",
|
||||
"3d": true
|
||||
},
|
||||
"772d68fe78dc92febbb12b6c1172d26c68031706": {
|
||||
"gn": "Game Boy Advance Video - Cartoon Network Collection - Edition Premium",
|
||||
|
|
@ -31519,7 +31548,21 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "Fr",
|
||||
"rg": "France"
|
||||
"rg": "France",
|
||||
"3d": true
|
||||
},
|
||||
"790103a28c22bfcfa52de31f9a1061b17708dc3c": {
|
||||
"gn": "Game Boy Advance Video - Cartoon Network Collection - Special Edition",
|
||||
"ne": "(USA) (Rev 5)",
|
||||
"gc": "MCSE",
|
||||
"rc": 464467757,
|
||||
"rs": 33554432,
|
||||
"st": 0,
|
||||
"ss": 0,
|
||||
"rv": "Rev 5",
|
||||
"lg": "En",
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"d911da50f926a2485cd9dfc9fd8f7326adb12d49": {
|
||||
"gn": "Game Boy Advance Video - Cartoon Network Collection - Special Edition",
|
||||
|
|
@ -31530,7 +31573,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA, Europe"
|
||||
"rg": "USA, Europe",
|
||||
"3d": true
|
||||
},
|
||||
"a9861107e3c0eadf7a2c6fbf970155cb059f869e": {
|
||||
"gn": "Game Boy Advance Video - Cartoon Network Collection - Edition Speciale",
|
||||
|
|
@ -31541,7 +31585,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "Fr",
|
||||
"rg": "France"
|
||||
"rg": "France",
|
||||
"3d": true
|
||||
},
|
||||
"590318cf40cad4d866dd385b6b208a99c6eeec62": {
|
||||
"gn": "Game Boy Advance Video - Cartoon Network Collection - Volume 1",
|
||||
|
|
@ -31552,7 +31597,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA, Europe"
|
||||
"rg": "USA, Europe",
|
||||
"3d": false
|
||||
},
|
||||
"c2a1c8c479ada081407c754d23c73afc59f19e60": {
|
||||
"gn": "Game Boy Advance Video - Dragon Ball GT - Volume 1",
|
||||
|
|
@ -31563,7 +31609,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"28c8afa6b5d0d24d2c540413e948d4c9c7c44e63": {
|
||||
"gn": "Game Boy Advance Video - Disney Channel Collection - Volume 1",
|
||||
|
|
@ -31574,7 +31621,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"bfe44e65a6ca22ed091c82b475999a4818f60b83": {
|
||||
"gn": "Game Boy Advance Video - Dora the Explorer - Volume 1",
|
||||
|
|
@ -31585,7 +31633,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": false
|
||||
},
|
||||
"0005b5d625d0b2b491f28f195a50d00e61b92de8": {
|
||||
"gn": "Game Boy Advance Video - Disney Channel Collection - Volume 2",
|
||||
|
|
@ -31597,7 +31646,8 @@
|
|||
"ss": 0,
|
||||
"rv": "Rev 5",
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"17bdd62f02187986ae429e21060473ebb5bb2897": {
|
||||
"gn": "Game Boy Advance Video - The Fairly OddParents! - Volume 2",
|
||||
|
|
@ -31609,7 +31659,8 @@
|
|||
"ss": 0,
|
||||
"rv": "Rev 1",
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": false
|
||||
},
|
||||
"7a4f484966b9591643a9ef2266e9dcd4d358d0bb": {
|
||||
"gn": "Game Boy Advance Video - The Fairly OddParents! - Volume 1",
|
||||
|
|
@ -31620,7 +31671,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": false
|
||||
},
|
||||
"9818575de1f15e8fe74d9fc0cf1411d8fb4775d6": {
|
||||
"gn": "Game Boy Advance Video - The Proud Family - Volume 1",
|
||||
|
|
@ -31631,7 +31683,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"0c411aef0ac6be4e8e9ae9b9e8d259cae942b8b1": {
|
||||
"gn": "Game Boy Advance Video - All Grown Up! - Volume 1",
|
||||
|
|
@ -31642,7 +31695,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": false
|
||||
},
|
||||
"f5f2f476128d979b5137485bc773758035fbf169": {
|
||||
"gn": "Game Boy Advance Video - The Adventures of Jimmy Neutron Boy Genius - Volume 1",
|
||||
|
|
@ -31653,7 +31707,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": false
|
||||
},
|
||||
"0aca8eb33ed5aabd8e5c98331f8210a5561f7130": {
|
||||
"gn": "Game Boy Advance Video - Codename - Kids Next Door - Volume 1",
|
||||
|
|
@ -31664,7 +31719,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA, Europe"
|
||||
"rg": "USA, Europe",
|
||||
"3d": false
|
||||
},
|
||||
"5f26b36473e99d35011a19a9bae0ef20afce2169": {
|
||||
"gn": "Game Boy Advance Video - Nicktoons Collection - Volume 2",
|
||||
|
|
@ -31675,7 +31731,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"1fc3d70d3f225dfdad2dfb70d8336368d4aa8982": {
|
||||
"gn": "Game Boy Advance Video - Nicktoons - Volume 3",
|
||||
|
|
@ -31686,7 +31743,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"49e8ad4da336076f9b0dc8c885e36f7192701fc9": {
|
||||
"gn": "Game Boy Advance Video - Nicktoons Collection - Volume 1",
|
||||
|
|
@ -31697,7 +31755,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": false
|
||||
},
|
||||
"2a7a051cbecfa02957968cf2096a982029e23c66": {
|
||||
"gn": "Game Boy Advance Video - Pokemon - Volume 1",
|
||||
|
|
@ -31708,7 +31767,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": false
|
||||
},
|
||||
"20c7cca75beb914994e4f813c82ad02d7d2ce380": {
|
||||
"gn": "Game Boy Advance Video - Pokemon - Volume 2",
|
||||
|
|
@ -31719,7 +31779,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": false
|
||||
},
|
||||
"37ebe25dd5006c9c4d4a9fee18646d2624ccc5a0": {
|
||||
"gn": "Game Boy Advance Video - Pokemon - Volume 3",
|
||||
|
|
@ -31730,7 +31791,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": false
|
||||
},
|
||||
"e92e5ced3f55f87aab6627230b93ffbbc1bb3db7": {
|
||||
"gn": "Game Boy Advance Video - Pokemon - Volume 4",
|
||||
|
|
@ -31741,7 +31803,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": false
|
||||
},
|
||||
"3f057e9ec7b0f53e1cdc51aacf06f90fed6321c4": {
|
||||
"gn": "Game Boy Advance Video - SpongeBob SquarePants - Volume 2",
|
||||
|
|
@ -31753,7 +31816,8 @@
|
|||
"ss": 0,
|
||||
"rv": "Rev 1",
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": false
|
||||
},
|
||||
"1e6271fb6a9d7cf0ccd9958b166607bacf15b217": {
|
||||
"gn": "Game Boy Advance Video - SpongeBob SquarePants - Volume 3",
|
||||
|
|
@ -31764,7 +31828,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"41b14883cc3e05653a7f039944b11a1223f4cf66": {
|
||||
"gn": "Game Boy Advance Video - Shark Tale",
|
||||
|
|
@ -31776,7 +31841,8 @@
|
|||
"ss": 0,
|
||||
"rv": "Rev 6",
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"648e46753ccbee3d04a6d12d82bcb265fcebd6f9": {
|
||||
"gn": "Game Boy Advance Video - Shark Tale",
|
||||
|
|
@ -31788,7 +31854,8 @@
|
|||
"ss": 0,
|
||||
"rv": "Rev 5",
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"e7985c20de15e58531c86ae59ea4af1d2dfb24ea": {
|
||||
"gn": "Game Boy Advance Video - Strawberry Shortcake - Volume 1",
|
||||
|
|
@ -31799,7 +31866,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": false
|
||||
},
|
||||
"1ee65f7df7463beb098ad5f574dcc02f41115cdd": {
|
||||
"gn": "Game Boy Advance Video - Sonic X - Volume 1",
|
||||
|
|
@ -31810,7 +31878,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": false
|
||||
},
|
||||
"212cd5a80ab96d5309d2cbe6b2cbfea0211a1018": {
|
||||
"gn": "Game Boy Advance Video - Shrek",
|
||||
|
|
@ -31822,7 +31891,8 @@
|
|||
"ss": 0,
|
||||
"rv": "Rev 5",
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"a31fe8a1abbc8276e87b93ddc9feb0250e116ec1": {
|
||||
"gn": "Game Boy Advance Video - Shrek",
|
||||
|
|
@ -31834,7 +31904,8 @@
|
|||
"ss": 0,
|
||||
"rv": "Rev 6",
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"5da566868ba0be96838eb9b4454fc7a8abf092c0": {
|
||||
"gn": "Game Boy Advance Video - Super Robot Monkey Team - Hyper Force Go! - Volume 1",
|
||||
|
|
@ -31845,7 +31916,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"99bf48542a03e1bceb2a9a82da7257874ec30670": {
|
||||
"gn": "Game Boy Advance Video - SpongeBob SquarePants - Volume 1",
|
||||
|
|
@ -31857,7 +31929,8 @@
|
|||
"ss": 0,
|
||||
"rv": "Rev 1",
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": false
|
||||
},
|
||||
"18a5b3b3010fd5f584700f711f303caf89937a99": {
|
||||
"gn": "Game Boy Advance Video - Shrek + Shark Tale",
|
||||
|
|
@ -31869,7 +31942,8 @@
|
|||
"ss": 0,
|
||||
"rv": "Rev 5",
|
||||
"lg": "En",
|
||||
"rg": "USA"
|
||||
"rg": "USA",
|
||||
"3d": true
|
||||
},
|
||||
"11f8d9886d50fcd56334fd4e84bed94eb9995638": {
|
||||
"gn": "Game Boy Advance Video - Teenage Mutant Ninja Turtles - Things Change",
|
||||
|
|
@ -31880,7 +31954,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA, Europe"
|
||||
"rg": "USA, Europe",
|
||||
"3d": false
|
||||
},
|
||||
"36e93d44ad26dfa8b62bb09e50f9cff58cd4fc03": {
|
||||
"gn": "Game Boy Advance Video - Teenage Mutant Ninja Turtles - Le Demenagement",
|
||||
|
|
@ -31891,7 +31966,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "Fr",
|
||||
"rg": "France"
|
||||
"rg": "France",
|
||||
"3d": true
|
||||
},
|
||||
"dc0c4e5a4c2cdcbbf86e2a16ca9e2060fea6e943": {
|
||||
"gn": "Game Boy Advance Video - Yu-Gi-Oh! - Yugi vs. Joey",
|
||||
|
|
@ -31902,7 +31978,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "En",
|
||||
"rg": "USA, Europe"
|
||||
"rg": "USA, Europe",
|
||||
"3d": false
|
||||
},
|
||||
"2f863283e54ac28b2725dc8430adb9a13b2f5095": {
|
||||
"gn": "Game Boy Advance Video - Yu-Gi-Oh! - Yugi vs. Joey",
|
||||
|
|
@ -31913,7 +31990,8 @@
|
|||
"st": 0,
|
||||
"ss": 0,
|
||||
"lg": "Fr",
|
||||
"rg": "France"
|
||||
"rg": "France",
|
||||
"3d": true
|
||||
},
|
||||
"10b3242f409611c32749f9b42f7c7ea951c5fc6d": {
|
||||
"gn": "Card e-Reader",
|
||||
|
|
@ -31996,25 +32074,25 @@
|
|||
},
|
||||
"cf39d749e19c054368316def932b94e61351e4b8": {
|
||||
"gn": "AGS Aging Cartridge",
|
||||
"ne": "(World) (Rev 3, v9.0) (Test Program)",
|
||||
"ne": "(World) (Rev 3) (v9.0) (Test Program)",
|
||||
"gc": "TCHK",
|
||||
"rc": 778659949,
|
||||
"rs": 2097152,
|
||||
"st": 1,
|
||||
"ss": 512,
|
||||
"rv": "Rev 3, v9.0",
|
||||
"rv": "Rev 3",
|
||||
"lg": "En",
|
||||
"rg": "World"
|
||||
},
|
||||
"d2b43b4883d32d45ce7dcb70270aff278e0c079f": {
|
||||
"gn": "AGS Aging Cartridge",
|
||||
"ne": "(World) (Rev 1, v7.0) (Test Program)",
|
||||
"ne": "(World) (Rev 1) (v7.0) (Test Program)",
|
||||
"gc": "TCHK",
|
||||
"rc": 3149310304,
|
||||
"rs": 2097152,
|
||||
"st": 1,
|
||||
"ss": 512,
|
||||
"rv": "Rev 1, v7.0",
|
||||
"rv": "Rev 1",
|
||||
"lg": "En",
|
||||
"rg": "World"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -125,6 +125,15 @@
|
|||
"lg": "Ja",
|
||||
"rg": "Japan"
|
||||
},
|
||||
"296c39c40bdc6061bff718a468b79e7e5f46553e": {
|
||||
"gn": "Pocket Camera - Debug Game Tester - Second Impact",
|
||||
"ne": "(Japan) (v10.24) (SGB Enhanced) (Test Program)",
|
||||
"gc": "",
|
||||
"rc": 359820684,
|
||||
"rs": 1048576,
|
||||
"lg": "Ja",
|
||||
"rg": "Japan"
|
||||
},
|
||||
"ed08371c977511b4953cff43f49a98c66fbed58c": {
|
||||
"gn": "Pocket Monsters Gin",
|
||||
"ne": "(Japan) (Demo) (Spaceworld 1997) (SGB Enhanced)",
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
{
|
||||
"type":"AGB",
|
||||
"names":[
|
||||
"3D Memory Cartridge (Large-size GBA Video)"
|
||||
"3D Memory Cartridge (GBA Video)"
|
||||
],
|
||||
"voltage":3.3,
|
||||
"flash_size":0x4000000,
|
||||
"3d_memory":true,
|
||||
"command_set":"3DMEMORY",
|
||||
"commands":{}
|
||||
|
|
|
|||
|
|
@ -2,11 +2,13 @@
|
|||
"type":"AGB",
|
||||
"names":[
|
||||
"B54 with MX29LV320ET",
|
||||
"B100 with MX29LV640ET"
|
||||
"B100 with MX29LV640ET",
|
||||
"Unknown 29LV320 variant (no PCB text)"
|
||||
],
|
||||
"flash_ids":[
|
||||
[ 0xC2, 0x00, 0xA7, 0x22 ],
|
||||
[ 0xC2, 0x00, 0xC9, 0x22 ]
|
||||
[ 0xC2, 0x00, 0xC9, 0x22 ],
|
||||
[ 0x04, 0x00, 0xF6, 0x22 ]
|
||||
],
|
||||
"voltage":3.3,
|
||||
"flash_size":0x400000,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"AGB",
|
||||
"names":[
|
||||
"insideGadgets 16 MB (28EW256A) + RTC/Solar"
|
||||
"insideGadgets 16 MiB (28EW256A) + RTC/Solar"
|
||||
],
|
||||
"flash_ids":[
|
||||
[ 0x89, 0x00, 0x7E, 0x22 ]
|
||||
|
|
|
|||
|
|
@ -1,16 +1,18 @@
|
|||
{
|
||||
"type":"AGB",
|
||||
"names":[
|
||||
"insideGadgets 32 MB (28EW256A) + RTC/Rumble",
|
||||
"insideGadgets 32 MB (S29GL512N) + RTC",
|
||||
"insideGadgets 32 MiB (28EW256A) + RTC/Rumble",
|
||||
"insideGadgets 32 MiB (S29GL512N) + RTC",
|
||||
"AGB-E20-30 with S29GL256N10TFI01",
|
||||
"insideGadgets 32 MB (IS29GL256)"
|
||||
"insideGadgets 32 MiB (IS29GL256)",
|
||||
"insideGadgets 32 MiB (W29GL256)"
|
||||
],
|
||||
"flash_ids":[
|
||||
[ 0x89, 0x00, 0x7E, 0x22 ],
|
||||
[ 0x01, 0x00, 0x7E, 0x22 ],
|
||||
[ 0x01, 0x00, 0x7E, 0x22 ],
|
||||
[ 0x9D, 0x00, 0x7E, 0x22 ]
|
||||
[ 0x9D, 0x00, 0x7E, 0x22 ],
|
||||
[ 0xEF, 0x00, 0x7E, 0x22 ]
|
||||
],
|
||||
"voltage":3.3,
|
||||
"flash_size":0x2000000,
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"type":"DMG",
|
||||
"names":[
|
||||
"DIY cart with AM29F016 @ WR",
|
||||
"insideGadgets 2 MB, 32 KB FRAM, v1.0"
|
||||
"insideGadgets 2 MiB, 32 KiB FRAM, v1.0"
|
||||
],
|
||||
"flash_ids":[
|
||||
[ 0x01, 0xAD ],
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"insideGadgets 4 MB, 32 KB FRAM, MBC3+RTC",
|
||||
"insideGadgets 4 MiB, 32 KiB FRAM, MBC3+RTC",
|
||||
"DIY cart with AM29F032 @ AUDIO",
|
||||
"DIY cart with M29F032D @ AUDIO",
|
||||
"DIY cart with MBM29F033C @ AUDIO"
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"type":"DMG",
|
||||
"names":[
|
||||
"Ferrante Crafts cart 32 KB V2",
|
||||
"marv17 32 KB Homebrew Flashcard (SST39SF040)"
|
||||
"marv17 32 KiB Homebrew Flashcard (SST39SF040)"
|
||||
],
|
||||
"flash_ids":[
|
||||
[ 0xBF, 0xFF, 0x25, 0xFF ],
|
||||
|
|
|
|||
|
|
@ -2,9 +2,11 @@
|
|||
"type":"DMG",
|
||||
"names":[
|
||||
"SD007_48BALL_64M with M29W640",
|
||||
"SD007_BGA48_71TV_T28_DEEP with M29W640"
|
||||
"SD007_BGA48_71TV_T28_DEEP with M29W640",
|
||||
"SD007_T40_48BALL_71_TV_TS28 with M29W640"
|
||||
],
|
||||
"flash_ids":[
|
||||
[ 0x20, 0x00, 0x7D, 0x00 ],
|
||||
[ 0x20, 0x00, 0x7D, 0x00 ],
|
||||
[ 0x20, 0x00, 0x7D, 0x00 ]
|
||||
],
|
||||
|
|
|
|||
74
FlashGBX/config/fc_DMG_Sillyhatday_4MB_2x29F016.txt
Normal file
74
FlashGBX/config/fc_DMG_Sillyhatday_4MB_2x29F016.txt
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"Sillyhatday MBC5-DUAL-FLASH-4/8MB"
|
||||
],
|
||||
"voltage":5,
|
||||
"flash_size":0x800000,
|
||||
"start_addr":0x4000,
|
||||
"first_bank":0,
|
||||
"write_pin":"AUDIO",
|
||||
"chip_erase_timeout":120,
|
||||
"mbc":0x1B,
|
||||
"command_set":"AMD",
|
||||
"commands":{
|
||||
"reset":[
|
||||
[ 0x4000, 0xF0 ]
|
||||
],
|
||||
"read_identifier":[
|
||||
[ 0x4555, 0xAA ],
|
||||
[ 0x42AA, 0x55 ],
|
||||
[ 0x4555, 0x90 ]
|
||||
],
|
||||
"read_cfi":[
|
||||
[ 0x4AAA, 0x98 ]
|
||||
],
|
||||
"chip_erase":[
|
||||
[ 0x2100, 0x00, "WR" ],
|
||||
[ 0x4555, 0xAA ],
|
||||
[ 0x42AA, 0x55 ],
|
||||
[ 0x4555, 0x80 ],
|
||||
[ 0x4555, 0xAA ],
|
||||
[ 0x42AA, 0x55 ],
|
||||
[ 0x4555, 0x10 ],
|
||||
[ 0x2100, 0x80, "WR" ],
|
||||
[ 0x4555, 0xAA ],
|
||||
[ 0x42AA, 0x55 ],
|
||||
[ 0x4555, 0x80 ],
|
||||
[ 0x4555, 0xAA ],
|
||||
[ 0x42AA, 0x55 ],
|
||||
[ 0x4555, 0x10 ],
|
||||
[ 0x2100, 0x00, "WR" ]
|
||||
|
||||
],
|
||||
"chip_erase_wait_for":[
|
||||
[ null, null, null ],
|
||||
[ null, null, null ],
|
||||
[ null, null, null ],
|
||||
[ null, null, null ],
|
||||
[ null, null, null ],
|
||||
[ null, null, null ],
|
||||
[ null, null, null ],
|
||||
[ null, null, null ],
|
||||
[ null, null, null ],
|
||||
[ null, null, null ],
|
||||
[ null, null, null ],
|
||||
[ null, null, null ],
|
||||
[ null, null, null ],
|
||||
[ 0x4000, 0xFF, 0xFF ],
|
||||
[ 0x4000, 0xFF, 0xFF ]
|
||||
],
|
||||
"single_write":[
|
||||
[ 0x4555, 0xAA ],
|
||||
[ 0x42AA, 0x55 ],
|
||||
[ 0x4555, 0xA0 ],
|
||||
[ "PA", "PD" ]
|
||||
],
|
||||
"single_write_wait_for":[
|
||||
[ null, null, null ],
|
||||
[ null, null, null ],
|
||||
[ null, null, null ],
|
||||
[ null, null, null ]
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"Squareboi 4 MB (2× 2 MB)"
|
||||
"Squareboi 4 MiB (2× 2 MiB)"
|
||||
],
|
||||
"voltage":5,
|
||||
"flash_size":0x400000,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"insideGadgets 1 MB, 128 KB SRAM"
|
||||
"insideGadgets 1 MiB, 128 KiB SRAM"
|
||||
],
|
||||
"flash_ids":[
|
||||
[ 0xC2, 0xC2, 0x58, 0x58 ],
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"insideGadgets 1 MB, 32 KB FRAM v2.0"
|
||||
"insideGadgets 1 MiB, 32 KiB FRAM v2.0"
|
||||
],
|
||||
"flash_ids":[],
|
||||
"voltage":5,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"insideGadgets 2 MB, 128 KB SRAM/32 KB FRAM"
|
||||
"insideGadgets 2 MiB, 128 KiB SRAM/32 KiB FRAM"
|
||||
],
|
||||
"flash_ids":[
|
||||
[ 0x01, 0x01, 0xD2, 0xD2 ]
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"insideGadgets 2 MB, 128 KB SRAM/32 KB FRAM (2)"
|
||||
"insideGadgets 2 MiB, 128 KiB SRAM/32 KiB FRAM (2)"
|
||||
],
|
||||
"flash_ids":[
|
||||
[ 0x01, 0x01, 0xD8, 0xD8 ]
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"insideGadgets 2 MB, Wisdom Tree"
|
||||
"insideGadgets 2 MiB, Wisdom Tree"
|
||||
],
|
||||
"voltage":5,
|
||||
"flash_size":0x200000,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"insideGadgets 32 KB"
|
||||
"insideGadgets 32 KiB"
|
||||
],
|
||||
"flash_ids":[
|
||||
[ 0xBF, 0xB5, 0x01, 0xFF ]
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"insideGadgets 4 MB (S29GL032M)"
|
||||
"insideGadgets 4 MiB (S29GL032M)"
|
||||
],
|
||||
"flash_ids":[
|
||||
[ 0x01, 0x01, 0x7E, 0x7E ]
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"insideGadgets 4 MB (S29JL032J)"
|
||||
"insideGadgets 4 MiB (S29JL032J)"
|
||||
],
|
||||
"flash_ids":[
|
||||
[ 0x01, 0x01, 0x56, 0x56 ]
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"insideGadgets 4 MB (2× 2 MB), 32 KB FRAM, MBC5"
|
||||
"insideGadgets 4 MiB (2× 2 MiB), 32 KiB FRAM, MBC5"
|
||||
],
|
||||
"voltage":5,
|
||||
"flash_size":0x400000,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"insideGadgets 4 MB (MX29LV320ET)"
|
||||
"insideGadgets 4 MiB (MX29LV320ET)"
|
||||
],
|
||||
"flash_ids":[
|
||||
[ 0xC2, 0xC2, 0xA7, 0xA7 ]
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"insideGadgets 128/256/512 KB"
|
||||
"insideGadgets 128/256/512 KiB"
|
||||
],
|
||||
"flash_ids":[
|
||||
[ 0xBF, 0xB5 ],
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"insideGadgets 8 MB"
|
||||
"insideGadgets 8 MiB"
|
||||
],
|
||||
"flash_ids":[
|
||||
[ 0x01, 0x01, 0x7E, 0x7E ]
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"type":"DMG",
|
||||
"names":[
|
||||
"insideGadgets Power Cart 1 MB, 128 KB SRAM"
|
||||
"insideGadgets Power Cart 1 MiB, 128 KiB SRAM"
|
||||
],
|
||||
"voltage":5,
|
||||
"write_pin":"",
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ class GbxDevice:
|
|||
DEVICE_NAME = "GBxCart RW"
|
||||
DEVICE_MIN_FW = 1
|
||||
DEVICE_MAX_FW = 10
|
||||
DEVICE_LATEST_FW_TS = { 4:1683283512, 5:1681900614, 6:1681900614 }
|
||||
DEVICE_LATEST_FW_TS = { 4:1686057604, 5:1681900614, 6:1681900614 }
|
||||
|
||||
DEVICE_CMD = {
|
||||
"NULL":0x30,
|
||||
|
|
@ -751,8 +751,6 @@ class GbxDevice:
|
|||
|
||||
if data["empty"] or data["empty_nocart"]:
|
||||
data["rom_size"] = 0x2000000
|
||||
elif (data["3d_memory"] == True):
|
||||
data["rom_size"] = 0x4000000
|
||||
else:
|
||||
# Check where the ROM data repeats (for unlicensed carts)
|
||||
size_check = header[0xA0:0xA0+16]
|
||||
|
|
@ -1124,18 +1122,20 @@ class GbxDevice:
|
|||
self._set_fw_variable("ADDRESS", address >> 1)
|
||||
|
||||
buffer = bytearray()
|
||||
error = False
|
||||
for _ in range(0, int(num / (buffer_size / length))): #32
|
||||
for _ in range(0, int(buffer_size / length)): # 0x1000/0x200=8
|
||||
self._write(self.DEVICE_CMD["AGB_CART_READ_3D_MEMORY"])
|
||||
temp = self._read(length)
|
||||
if isinstance(temp, int): temp = bytearray([temp])
|
||||
if temp is False or len(temp) != length: return bytearray()
|
||||
if temp is False or len(temp) != length:
|
||||
error = True
|
||||
buffer += temp
|
||||
|
||||
if self.INFO["action"] == self.ACTIONS["ROM_READ"] and not self.NO_PROG_UPDATE:
|
||||
self.SetProgress({"action":"READ", "bytes_added":length})
|
||||
if self.INFO["action"] == self.ACTIONS["ROM_READ"] and not self.NO_PROG_UPDATE:
|
||||
self.SetProgress({"action":"READ", "bytes_added":length})
|
||||
self._write(0)
|
||||
|
||||
|
||||
if error: return bytearray()
|
||||
return buffer
|
||||
|
||||
def ReadRAM(self, address, length, command=None, max_length=64):
|
||||
|
|
@ -2042,6 +2042,7 @@ class GbxDevice:
|
|||
self.FAST_READ = True
|
||||
|
||||
flashcart = False
|
||||
#is_3dmemory = False
|
||||
supported_carts = list(self.SUPPORTED_CARTS[self.MODE].values())
|
||||
cart_type = copy.deepcopy(supported_carts[args["cart_type"]])
|
||||
if not isinstance(cart_type, str):
|
||||
|
|
@ -2129,6 +2130,8 @@ class GbxDevice:
|
|||
else:
|
||||
rom_banks = 1
|
||||
rom_bank_size = 0x2000000
|
||||
|
||||
is_3dmemory = (self.MODE == "AGB" and "command_set" in cart_type and cart_type["command_set"] == "3DMEMORY")
|
||||
|
||||
if "verify_write" in args:
|
||||
size = len(args["verify_write"])
|
||||
|
|
@ -2153,7 +2156,7 @@ class GbxDevice:
|
|||
max_length = self.MAX_BUFFER_LEN
|
||||
dprint("Max buffer size: 0x{:X}".format(max_length))
|
||||
if self.FAST_READ is True:
|
||||
if (self.MODE == "AGB" and "command_set" in cart_type and cart_type["command_set"] == "3DMEMORY"):
|
||||
if is_3dmemory:
|
||||
max_length = min(max_length, 0x1000)
|
||||
else:
|
||||
max_length = min(max_length, 0x2000)
|
||||
|
|
@ -2225,7 +2228,7 @@ class GbxDevice:
|
|||
if self.CanPowerCycleCart(): self.CartPowerCycle()
|
||||
return
|
||||
|
||||
if (self.MODE == "AGB" and "command_set" in cart_type and cart_type["command_set"] == "3DMEMORY"):
|
||||
if is_3dmemory:
|
||||
temp = self.ReadROM_3DMemory(address=pos, length=buffer_len, max_length=max_length)
|
||||
else:
|
||||
if self.FW["fw_ver"] >= 10 and "verify_write" in args and (self.MODE != "AGB" or args["verify_base_pos"] > 0xC9):
|
||||
|
|
@ -2267,7 +2270,7 @@ class GbxDevice:
|
|||
if (max_length >> 1) < 64:
|
||||
dprint("Failed to receive 0x{:X} bytes from the device at position 0x{:X}.".format(buffer_len, pos_temp))
|
||||
max_length = 64
|
||||
elif lives > 18:
|
||||
elif lives > 20:
|
||||
dprint("Failed to receive 0x{:X} bytes from the device at position 0x{:X}.".format(buffer_len, pos_temp))
|
||||
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))
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
37
README.md
37
README.md
|
|
@ -117,18 +117,19 @@ Use this command in a Terminal or Command Prompt window to launch the installed
|
|||
- GB-CART32K-A with SST39SF020A
|
||||
- GB Smart 32M
|
||||
- HDR Game Boy Camera Flashcart
|
||||
- insideGadgets 32 KB
|
||||
- insideGadgets 128 KB
|
||||
- insideGadgets 256 KB
|
||||
- insideGadgets 512 KB
|
||||
- insideGadgets 1 MB, 128 KB SRAM
|
||||
- insideGadgets 2 MB, 128 KB SRAM/32 KB FRAM
|
||||
- insideGadgets 2 MB, 32 KB FRAM, v1.0
|
||||
- insideGadgets 4 MB, 128 KB SRAM/FRAM
|
||||
- insideGadgets 4 MB, 32 KB FRAM, MBC3+RTC
|
||||
- insideGadgets 4 MB (2× 2 MB), 32 KB FRAM, MBC5
|
||||
- insideGadgets 32 KiB
|
||||
- insideGadgets 128 KiB
|
||||
- insideGadgets 256 KiB
|
||||
- insideGadgets 512 KiB
|
||||
- insideGadgets 1 MiB, 128 KiB SRAM
|
||||
- insideGadgets 2 MiB, 128 KiB SRAM/32 KiB FRAM
|
||||
- insideGadgets 2 MiB, 32 KiB FRAM, v1.0
|
||||
- insideGadgets 4 MiB, 128 KiB SRAM/FRAM
|
||||
- insideGadgets 4 MiB, 32 KiB FRAM, MBC3+RTC
|
||||
- insideGadgets 4 MiB (2× 2 MiB), 32 KiB FRAM, MBC5
|
||||
- Mr Flash 64M
|
||||
- Squareboi 4 MB (2× 2 MB)
|
||||
- Sillyhatday MBC5-DUAL-FLASH-4/8MB
|
||||
- Squareboi 4 MiB (2× 2 MiB)
|
||||
|
||||
- Game Boy Advance
|
||||
|
||||
|
|
@ -143,11 +144,11 @@ Use this command in a Terminal or Command Prompt window to launch the installed
|
|||
- Flash2Advance Ultra 64M (with 2× 28F320C3B)
|
||||
- Flash2Advance Ultra 256M (with 8× 3204C3B100)
|
||||
- Flash Advance Card 64M (with 28F640J3A120)
|
||||
- insideGadgets 16 MB, 64K EEPROM with Solar Sensor and RTC options
|
||||
- insideGadgets 32 MB, 1M FLASH with RTC option
|
||||
- insideGadgets 32 MB, 512K FLASH
|
||||
- insideGadgets 32 MB, 4K/64K EEPROM
|
||||
- insideGadgets 32 MB, 256K FRAM with Rumble option
|
||||
- insideGadgets 16 MiB, 64K EEPROM with Solar Sensor and RTC options
|
||||
- insideGadgets 32 MiB, 1M FLASH with RTC option
|
||||
- insideGadgets 32 MiB, 512K FLASH
|
||||
- insideGadgets 32 MiB, 4K/64K EEPROM
|
||||
- insideGadgets 32 MiB, 256K FRAM with Rumble option
|
||||
|
||||
### Currently supported and tested reproduction cartridges
|
||||
|
||||
|
|
@ -186,6 +187,7 @@ Use this command in a Terminal or Command Prompt window to launch the installed
|
|||
- SD007_BV5_V3 with HY29LV160BT-70
|
||||
- SD007_BV5_V3 with AM29LV160MB
|
||||
- SD007_K8D3216_32M with MX29LV160CT
|
||||
- SD007_T40_48BALL_71_TV_TS28 with M29W640
|
||||
- SD007_T40_64BALL_S71_TV_TS28 with TC58FVB016FT-85
|
||||
- SD007_T40_64BALL_SOJ28 with 29LV016T
|
||||
- SD007_T40_64BALL_TSOP28 with 29LV016T
|
||||
|
|
@ -269,6 +271,7 @@ Use this command in a Terminal or Command Prompt window to launch the installed
|
|||
- MSP54LV512 (no PCB text)
|
||||
- MX29GL128EHT2I and ALTERA CPLD
|
||||
- SUN100S_MSP54XXX with MSP54LV100
|
||||
- Unknown 29LV320 variant (no PCB text)"
|
||||
|
||||
Many different reproduction cartridges share their flash chip command set, so even if yours is not on this list, it may still work fine or even be auto-detected as another one. Support for more cartridges can also be added by creating external config files that include the necessary flash chip commands.
|
||||
|
||||
|
|
@ -304,7 +307,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, 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, 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
|
||||
|
||||
|
|
|
|||
2
setup.py
2
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.29",
|
||||
version="3.30",
|
||||
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",
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user