FlashGBX 4.2__py3-none-any.whl → 4.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
FlashGBX/hw_GBxCartRW.py CHANGED
@@ -9,13 +9,13 @@ class GbxDevice(LK_Device):
9
9
  DEVICE_NAME = "GBxCart RW"
10
10
  DEVICE_MIN_FW = 1
11
11
  DEVICE_MAX_FW = 1
12
- DEVICE_LATEST_FW_TS = { 4:1709317610, 5:1722774120, 6:1722774120, 2:0, 90:0, 100:0 }
12
+ DEVICE_LATEST_FW_TS = { 4:1709317610, 5:1747991884, 6:1747991884, 2:0, 90:0, 100:0 }
13
13
  PCB_VERSIONS = { 5:'v1.4', 6:'v1.4a/b/c', 2:'v1.1/v1.2', 4:'v1.3', 90:'XMAS v1.0', 100:'Mini v1.0' }
14
14
  BAUDRATE = 1000000
15
15
  MAX_BUFFER_READ = 0x1000
16
16
  MAX_BUFFER_WRITE = 0x400
17
17
 
18
- def Initialize(self, flashcarts, port=None, max_baud=2000000):
18
+ def Initialize(self, flashcarts=None, port=None, max_baud=1500000):
19
19
  if self.IsConnected(): self.DEVICE.close()
20
20
  if platform.system() == "Darwin": max_baud = 1000000
21
21
 
@@ -31,7 +31,7 @@ class GbxDevice(LK_Device):
31
31
  if len(ports) == 0: return False
32
32
 
33
33
  for i in range(0, len(ports)):
34
- for baudrate in (1000000, 1700000, 2000000):
34
+ for baudrate in (1000000, 1500000):
35
35
  if max_baud < baudrate: continue
36
36
  try:
37
37
  if self.TryConnect(ports[i], baudrate):
@@ -49,8 +49,8 @@ class GbxDevice(LK_Device):
49
49
  continue
50
50
 
51
51
  if self.FW is None or self.FW == {}: continue
52
- if max_baud >= 1700000 and self.FW is not None and "pcb_ver" in self.FW and self.FW["pcb_ver"] in (5, 6, 101) and self.BAUDRATE < 1700000:
53
- self.ChangeBaudRate(baudrate=1700000)
52
+ if max_baud >= 1500000 and self.FW is not None and "pcb_ver" in self.FW and self.FW["pcb_ver"] in (5, 6, 101) and self.BAUDRATE < 1500000:
53
+ self.ChangeBaudRate(baudrate=1500000)
54
54
  self.DEVICE.close()
55
55
  dev = serial.Serial(ports[i], self.BAUDRATE, timeout=0.1)
56
56
  self.DEVICE = dev
@@ -74,14 +74,15 @@ class GbxDevice(LK_Device):
74
74
  self.MAX_BUFFER_WRITE = 0x100
75
75
 
76
76
  conn_msg.append([0, "For help with your GBxCart RW device, please visit the insideGadgets Discord: https://gbxcart.com/discord"])
77
- if self.FW["pcb_ver"] == 4:
78
- conn_msg.append([0, "Note: Your GBxCart RW hardware revision does not fully support the latest features due to technical limitations. Please consider upgrading to a newer device."])
77
+ #if self.FW["pcb_ver"] == 4:
78
+ # conn_msg.append([0, "Note: Your GBxCart RW hardware revision does not fully support the latest features due to technical limitations. Please consider upgrading to a newer device."])
79
79
 
80
80
  self.PORT = ports[i]
81
81
  self.DEVICE.timeout = self.DEVICE_TIMEOUT
82
82
 
83
83
  # Load Flash Cartridge Handlers
84
- self.UpdateFlashCarts(flashcarts)
84
+ if flashcarts is not None:
85
+ self.UpdateFlashCarts(flashcarts)
85
86
 
86
87
  # Stop after first found device
87
88
  break
@@ -172,11 +173,12 @@ class GbxDevice(LK_Device):
172
173
  def ChangeBaudRate(self, baudrate):
173
174
  if not self.IsConnected(): return
174
175
  dprint("Changing baud rate to", baudrate)
175
- if baudrate == 1700000:
176
- self._write(self.DEVICE_CMD["OFW_USART_1_7M_SPEED"])
176
+ if baudrate == 1500000:
177
+ self._write(self.DEVICE_CMD["OFW_USART_1_5M_SPEED"])
177
178
  elif baudrate == 1000000:
178
179
  self._write(self.DEVICE_CMD["OFW_USART_1_0M_SPEED"])
179
180
  self.BAUDRATE = baudrate
181
+ self.DEVICE.close()
180
182
 
181
183
  def CheckActive(self):
182
184
  if time.time() < self.LAST_CHECK_ACTIVE + 1: return True
@@ -251,10 +253,10 @@ class GbxDevice(LK_Device):
251
253
  return ["DMG"]
252
254
  else:
253
255
  return ["DMG", "AGB"]
254
-
256
+
255
257
  def IsSupported3dMemory(self):
256
258
  return True
257
-
259
+
258
260
  def IsClkConnected(self):
259
261
  return self.FW["pcb_ver"] in (5, 6, 101)
260
262
 
@@ -268,7 +270,7 @@ class GbxDevice(LK_Device):
268
270
  dprint("LinkNLoad detected:", is_lnl)
269
271
  if is_lnl: return False
270
272
  return self.FW["pcb_ver"] in (2, 4, 5, 6, 90, 100, 101)
271
-
273
+
272
274
  def FirmwareUpdateAvailable(self):
273
275
  if self.FW["fw_ver"] == 0 and self.FW["pcb_ver"] in (2, 4, 90, 100, 101):
274
276
  if self.FW["pcb_ver"] == 4:
@@ -277,12 +279,12 @@ class GbxDevice(LK_Device):
277
279
  self.FW_UPDATE_REQ = 2
278
280
  return True
279
281
  if self.FW["pcb_ver"] not in (4, 5, 6): return False
280
- if self.FW["pcb_ver"] in (5, 6) and self.FW["fw_ts"] < self.DEVICE_LATEST_FW_TS[self.FW["pcb_ver"]]:
282
+ if self.FW["pcb_ver"] in (5, 6) and self.FW["fw_ts"] != self.DEVICE_LATEST_FW_TS[self.FW["pcb_ver"]]:
281
283
  return True
282
- if self.FW["pcb_ver"] == 4 and self.FW["fw_ts"] < self.DEVICE_LATEST_FW_TS[self.FW["pcb_ver"]]:
284
+ if self.FW["pcb_ver"] == 4 and self.FW["fw_ts"] != self.DEVICE_LATEST_FW_TS[self.FW["pcb_ver"]]:
283
285
  self.FW_UPDATE_REQ = True
284
286
  return True
285
-
287
+
286
288
  def GetFirmwareUpdaterClass(self):
287
289
  if self is None or self.FW["pcb_ver"] in (5, 6): # v1.4 / v1.4a/b/c
288
290
  try:
FlashGBX/hw_JoeyJr.py CHANGED
@@ -9,7 +9,7 @@ class GbxDevice(LK_Device):
9
9
  DEVICE_NAME = "Joey Jr"
10
10
  DEVICE_MIN_FW = 1
11
11
  DEVICE_MAX_FW = 12
12
- DEVICE_LATEST_FW_TS = 1722774120
12
+ DEVICE_LATEST_FW_TS = 1747991884
13
13
  PCB_VERSIONS = { -1:"", 0x01:"V2", 0x81:"V2", 0x02:"V2C", 0x82:"V2C", 0x03:"V2CC", 0x83:"V2CC/V2++" }
14
14
 
15
15
  def __init__(self):
@@ -256,7 +256,7 @@ class GbxDevice(LK_Device):
256
256
  if self.FW["cfw_id"] == "G":
257
257
  self.FW_UPDATE_REQ = True
258
258
  return True
259
- if self.FW["fw_ts"] < self.DEVICE_LATEST_FW_TS:
259
+ if self.FW["fw_ts"] != self.DEVICE_LATEST_FW_TS:
260
260
  return True
261
261
  self.FW_UPDATE_REQ = False
262
262
  return False
@@ -11,6 +11,27 @@
11
11
  <p>Qt and the Qt logo are trademarks of The Qt Company Ltd.</p>
12
12
  <p>Qt is The Qt Company Ltd product developed as an open source project. See <a href="https://qt.io/">qt.io</a> for more information.</p>
13
13
 
14
+ # Python
15
+
16
+ PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
17
+ --------------------------------------------
18
+
19
+ 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using Python software in source or binary form and its associated documentation.
20
+
21
+ 2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright © 2001-2021 Python Software Foundation; All Rights Reserved" are retained in Python alone or in any derivative version prepared by Licensee.
22
+
23
+ 3. In the event Licensee prepares a derivative work that is based on or incorporates Python or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python.
24
+
25
+ 4. PSF is making Python available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
26
+
27
+ 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
28
+
29
+ 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions.
30
+
31
+ 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party.
32
+
33
+ 8. By copying, installing or otherwise using Python, Licensee agrees to be bound by the terms and conditions of this License Agreement.
34
+
14
35
  # Pillow
15
36
 
16
37
  The Python Imaging Library (PIL) is
@@ -108,7 +129,6 @@ IN THE SOFTWARE.
108
129
 
109
130
  # requests
110
131
 
111
-
112
132
  Apache License
113
133
  Version 2.0, January 2004
114
134
  http://www.apache.org/licenses/
FlashGBX/res/config.zip CHANGED
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: FlashGBX
3
- Version: 4.2
3
+ Version: 4.4
4
4
  Summary: Reads and writes Game Boy and Game Boy Advance cartridge data
5
5
  Home-page: https://github.com/lesserkuma/FlashGBX
6
6
  Author: Lesserkuma
@@ -17,19 +17,29 @@ Classifier: Intended Audience :: Developers
17
17
  Requires-Python: >=3.7
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: pyserial >=3.5
20
+ Requires-Dist: pyserial>=3.5
21
21
  Requires-Dist: Pillow
22
22
  Requires-Dist: setuptools
23
23
  Requires-Dist: requests
24
24
  Requires-Dist: python-dateutil
25
25
  Provides-Extra: qt5
26
- Requires-Dist: PySide2 >=5.14 ; extra == 'qt5'
26
+ Requires-Dist: PySide2>=5.14; extra == "qt5"
27
27
  Provides-Extra: qt6
28
- Requires-Dist: PySide6 ; extra == 'qt6'
28
+ Requires-Dist: PySide6; extra == "qt6"
29
+ Dynamic: author
30
+ Dynamic: classifier
31
+ Dynamic: description
32
+ Dynamic: description-content-type
33
+ Dynamic: home-page
34
+ Dynamic: project-url
35
+ Dynamic: provides-extra
36
+ Dynamic: requires-dist
37
+ Dynamic: requires-python
38
+ Dynamic: summary
29
39
 
30
40
  # FlashGBX (by Lesserkuma)
31
41
 
32
- for [Windows](https://github.com/lesserkuma/FlashGBX/releases), [Linux](https://github.com/lesserkuma/FlashGBX#run-using-python-linux-macos-windows), [macOS](https://github.com/lesserkuma/FlashGBX#run-using-python-linux-macos-windows)
42
+ for Windows, Linux, macOS (→ [Download](https://github.com/lesserkuma/FlashGBX/releases))
33
43
 
34
44
  <img src="https://raw.githubusercontent.com/lesserkuma/FlashGBX/master/.github/01.png" alt="FlashGBX on Windows 11" width="500"><br><img src="https://raw.githubusercontent.com/lesserkuma/FlashGBX/master/.github/02.png" alt="GB Camera Album Viewer" width="500">
35
45
 
@@ -44,52 +54,13 @@ for [Windows](https://github.com/lesserkuma/FlashGBX/releases), [Linux](https://
44
54
  - A flash chip query (including Common Flash Interface information) can be performed for flash cartridges
45
55
  - Decode and extract Game Boy Camera photos from save data
46
56
  - Generate ROM dump reports for game preservation purposes
47
- - Delta flashing support, useful for development by writing only differences between two ROMs (if named `rom.gba` and `rom.delta.gba`)
48
57
 
49
58
  ### Compatible cartridge reader/writer hardware
50
59
 
51
- - [GBxCart RW](https://www.gbxcart.com/) (tested with v1.3, v1.4, v1.4a and v1.4c)
60
+ - [GBxCart RW](https://www.gbxcart.com/) (tested with v1.4, v1.4a and v1.4c)
52
61
  - [GBFlash](https://github.com/simonkwng/GBFlash) (tested with v1.2 and v1.3)
53
62
  - [Joey Jr](https://bennvenn.myshopify.com/collections/game-cart-to-pc-interface/products/usb-gb-c-cart-dumper-the-joey-jr) (tested with V2++)
54
63
 
55
- ## Installing and running
56
-
57
- ### Windows Packages
58
-
59
- Available in the GitHub [Releases](https://github.com/lesserkuma/FlashGBX/releases) section:
60
-
61
- * Windows Setup: An installer that will add the application to the start menu and optionally create a desktop icon
62
- * Windows Portable: Have everything in one place including the config files
63
-
64
- These work for installing fresh and upgrading from an older version.
65
-
66
- ### Run using Python (Linux, macOS, Windows)
67
-
68
- #### Installing
69
-
70
- 1. Download and install [Python](https://www.python.org/downloads/) (version 3.10.11 is recommended)
71
- 2. Open a Terminal or Command Prompt window
72
- 3. Install FlashGBX with this command:<br>`pip3 install "FlashGBX[qt6]"`
73
- * If installation fails, try this command instead:<br>`pip3 install "FlashGBX[qt5]"`
74
- * If installation still fails, you can install the minimal version (command line interface) with this command:<br>`pip3 install FlashGBX`
75
-
76
- * Pre-made Linux packages and instructions for select distributions are available [here](https://github.com/JJ-Fox/FlashGBX-Linux-builds/releases/latest), contributed by JJ-Fox.
77
- * Pre-made macOS packages and instructions are available [here](https://github.com/Cliffback/FlashGBX-macOS) (in the “Releases” section), contributed by Cliffback.
78
-
79
- #### Running
80
- Use this command in a Terminal or Command Prompt window to launch the installed FlashGBX application:
81
-
82
- `python3 -m FlashGBX`
83
-
84
- *FlashGBX should work on pretty much any operating system that supports Qt-GUI applications built using [Python](https://www.python.org/downloads/) with [PySide2](https://pypi.org/project/PySide2/) or [PySide6](https://pypi.org/project/PySide6/), [pyserial](https://pypi.org/project/pyserial/), [Pillow](https://pypi.org/project/Pillow/), [setuptools](https://pypi.org/project/setuptools/), [requests](https://pypi.org/project/requests/) and [python-dateutil](https://pypi.org/project/python-dateutil/) packages. To run FlashGBX in portable mode without installing, you can also download the source code archive and call `python3 run.py` after installing the prerequisites yourself.*
85
-
86
- *Note: On Linux systems, the `brltty` module may render serial communication devices non-accessible. See the troubleshooting section for details.*
87
-
88
- #### Upgrading from an older version
89
-
90
- 1. Open a Terminal or Command Prompt window
91
- 2. Enter this command:<br>`pip3 install -U FlashGBX`
92
-
93
64
  ## Cartridge Compatibility
94
65
  ### Supported cartridge memory mappers
95
66
  - Game Boy
@@ -114,6 +85,7 @@ Use this command in a Terminal or Command Prompt window to launch the installed
114
85
  - Unlicensed Xploder GB Mapper
115
86
  - Unlicensed Sachen Mapper
116
87
  - Unlicensed Datel Orbit V2 Mapper
88
+ - Unlicensed MBCX Mapper
117
89
 
118
90
  - Game Boy Advance
119
91
  - All cartridges without memory mapping
@@ -128,7 +100,8 @@ Use this command in a Terminal or Command Prompt window to launch the installed
128
100
 
129
101
  - 29LV Series Flash BOY with 29LV160DB
130
102
  - Action Replay
131
- - BennVenn MBC3000 RTC cart
103
+ - BennVenn MBC3000 v4 RTC cart
104
+ - BennVenn MBC3000 v5 RTC cart
132
105
  - BLAZE Xploder GB¹
133
106
  - BUNG Doctor GB Card 4M
134
107
  - BUNG Doctor GB Card 16M
@@ -148,14 +121,18 @@ Use this command in a Terminal or Command Prompt window to launch the installed
148
121
  - DIY cart with MX29LV640
149
122
  - DIY cart with SST39SF040
150
123
  - DMG-MBC5-32M-FLASH (G/A) Development Cartridge, E201264
124
+ - DMG-MBC5-32M-FLASH (G/A-I) Development Cartridge, E201264
151
125
  - Ferrante Crafts cart 32 KB
152
126
  - Ferrante Crafts cart 64 KB
153
127
  - Ferrante Crafts cart 512 KB
154
128
  - FunnyPlaying MidnightTrace 4 MiB Flash Cart
129
+ - Gamebank-web DMG-29W-04 with M29W320EB
155
130
  - Gamebank-web DMG-29W-04 with M29W320ET
156
131
  - GameShark Pro
157
132
  - GB-CART32K-A with SST39SF020A
158
133
  - GB Smart 32M
134
+ - GBFlash MBCX (8 MiB)
135
+ - GBFlash MBCX (32 MiB)
159
136
  - GBFlash RTC with MX29LV320EB
160
137
  - HDR Game Boy Camera Flashcart
161
138
  - insideGadgets 32 KiB
@@ -168,6 +145,8 @@ Use this command in a Terminal or Command Prompt window to launch the installed
168
145
  - insideGadgets 4 MiB, 128 KiB SRAM/FRAM
169
146
  - insideGadgets 4 MiB, 32 KiB FRAM, MBC3+RTC
170
147
  - insideGadgets 4 MiB (2× 2 MiB), 32 KiB FRAM, MBC5
148
+ - insideGadgets MegaDuck 32K
149
+ - ModRetro Chromatic Cartridge with 39VF1681
171
150
  - Mr Flash 64M
172
151
  - Sillyhatday MBC5-DUAL-FLASH-4/8MB
173
152
  - Squareboi 4 MiB (2× 2 MiB)
@@ -192,6 +171,7 @@ Use this command in a Terminal or Command Prompt window to launch the installed
192
171
  - FunnyPlaying MidnightTrace 32 MiB Flash Cart
193
172
  - GBA Movie Player v2 CF (with SST39VF400A)¹
194
173
  - GBFlash 1M FLASH RTC (AGB-R1M-02V3)
174
+ - GBFlash 1M FLASH RTC (AGB-R1M-02V4)
195
175
  - insideGadgets 16 MiB, 64K EEPROM with Solar Sensor and RTC options
196
176
  - insideGadgets 32 MiB, 1M FLASH with RTC option
197
177
  - insideGadgets 32 MiB, 512K FLASH
@@ -213,7 +193,8 @@ Use this command in a Terminal or Command Prompt window to launch the installed
213
193
  - DRV with 29LV320DB and ALTERA CPLD
214
194
  - DRV with AM29LV160DB and ALTERA CPLD
215
195
  - DRV with AM29LV160DT and ALTERA CPLD
216
- - DVP DRV with MX29LV320CB
196
+ - DVP DRV with MX29LV320CB¹
197
+ - DVP DRV with MX29LV320CT¹
217
198
  - ES29LV160_DRV with 29DL32TF-70
218
199
  - GB-M968 with 29LV160DB
219
200
  - GB-M968 with M29W160EB
@@ -341,6 +322,68 @@ Many different reproduction cartridges share their flash chip command set, so ev
341
322
 
342
323
  *¹ = Cannot always be auto-detected, select cartridge type manually*
343
324
 
325
+ ## Installing and running
326
+
327
+ ### Pre-compiled binaries and packages
328
+
329
+ Available in the GitHub [Releases](https://github.com/lesserkuma/FlashGBX/releases) section are pre-compiled downloads available for:
330
+
331
+ * **Windows (64-bit)** *(Windows 8 or newer)*
332
+ * Setup: An installer that will add the application to the start menu and optionally create a desktop icon
333
+ * Portable: Have everything in one place including the config files
334
+
335
+ * **Linux**
336
+ * Pre-made packages are contributed by JJ-Fox [here](https://github.com/JJ-Fox/FlashGBX-Linux-builds/releases/latest).
337
+
338
+ * **macOS** *(Monterey 12 or newer)*
339
+ * x86-64/arm64 (.dmg file): Install by opening the .dmg file and copying over the “FlashGBX” application to the desktop.<br>If it doesn’t run, it probably got quarantined during download. Run the following command in a Terminal window to unquarantine it: `xattr -d com.apple.quarantine /path/to/FlashGBX.app`.<br>*(Based on a contribution by [Cliffback](https://github.com/Cliffback))*
340
+
341
+ *(If you have a Joey Jr and use macOS, please run the [Joey Jr Firmware Updater](https://github.com/lesserkuma/JoeyJr_FWUpdater) before using FlashGBX.)*
342
+
343
+ ### Run via Python
344
+
345
+ FlashGBX can also be run in a Python environment like so:
346
+
347
+ 1. Download and install [Python](https://www.python.org/downloads/) (version 3.10.11 is recommended)
348
+ 2. Open a Terminal or Command Prompt window
349
+ 3. Install FlashGBX with this command:<br>`pip3 install "FlashGBX[qt6]"`
350
+ * If installation fails, try this command instead:<br>`pip3 install "FlashGBX[qt5]"`
351
+ * If installation still fails, you can install the minimal version (command line interface) with this command:<br>`pip3 install FlashGBX`
352
+ * Update to the latest version by replacing `install` with `install -U`.
353
+
354
+ #### Running
355
+ Use this command in a Terminal or Command Prompt window to launch the installed FlashGBX application:
356
+
357
+ `python3 -m FlashGBX`
358
+
359
+ *FlashGBX should work on pretty much any operating system that supports Qt-GUI applications built using [Python](https://www.python.org/downloads/) with [PySide2](https://pypi.org/project/PySide2/) or [PySide6](https://pypi.org/project/PySide6/), [pyserial](https://pypi.org/project/pyserial/), [Pillow](https://pypi.org/project/Pillow/), [setuptools](https://pypi.org/project/setuptools/), [requests](https://pypi.org/project/requests/) and [python-dateutil](https://pypi.org/project/python-dateutil/) packages. To run FlashGBX in portable mode without installing, you can also download the source code archive and call `python3 run.py` after installing the prerequisites yourself.*
360
+
361
+ *Note: When using GBxCart RW or GBFlash on some Linux systems, the `brltty` module may render serial communication devices non-accessible. See the troubleshooting section for details.*
362
+
363
+ ### Steam Deck
364
+ #### Installation
365
+ 1. Boot your Steam Deck in Desktop Mode.
366
+ 2. Open System Settings → Users.
367
+ 3. Set a password for your user account (“deck”), if you do not have one set yet. (Make sure you do not forget this password in the future.)
368
+ 4. Create a new folder where you want to install FlashGBX.
369
+ 5. Right click the folder and select “Open Terminal Here”.
370
+ 6. Enter the following commands in order:<br>
371
+ `python3 -m venv FlashGBX_venv`<br>
372
+ `source FlashGBX_venv/bin/activate`<br>
373
+ `wget https://bootstrap.pypa.io/get-pip.py`<br>
374
+ `python3 get-pip.py`<br>
375
+ `python3 -m pip install "FlashGBX[qt6]"`<br>
376
+ `deactivate`<br>
377
+ `sudo usermod -a -G uucp $USER`<br>
378
+ (You may need to enter the password you set earlier.)
379
+ 7. Restart your Steam Deck.
380
+
381
+ #### Running
382
+ 1. In Desktop Mode, right click your FlashGBX folder and select “Open Terminal Here”.
383
+ 2. Use these commands to launch the installed FlashGBX application:<br>
384
+ `source FlashGBX_venv/bin/activate`<br>
385
+ `python3 -m FlashGBX`<br>
386
+
344
387
  ### Troubleshooting
345
388
 
346
389
  * If something doesn’t work as expected, first try to clean the game cartridge contacts (best with IPA 99.9%+ on a cotton swab) and reconnect the device. An unstable cartridge connection is the most common reason for read or write errors.
@@ -357,25 +400,31 @@ Many different reproduction cartridges share their flash chip command set, so ev
357
400
 
358
401
  * On some Linux systems like Fedora, you may need to install the `python3-pillow-qt` package manually in order for the GUI mode to work.
359
402
 
360
- * On some Linux systems you may see the message “No devices found.” with the GBxCart RW hardware device, even though you’re using a USB cable capable of data transfers. This may be caused by a module called `brltty` (a driver for refreshable braille displays) that is erroneously interfering and taking over control of any connected USB device that uses the CH340/341 chipset. The solution would be to uninstall or blacklist the `brltty` driver and then reboot the system.
403
+ * On some Linux systems you may see the message “No devices found.” with the GBxCart RW or GBFlash hardware device, even though you’re using a USB cable capable of data transfers. This may be caused by a module called `brltty` (a driver for refreshable braille displays) that is erroneously interfering and taking over control of any connected USB device that uses the CH340/341 chipset. The solution would be to uninstall or blacklist the `brltty` driver and then reboot the system. This is not an issue with Joey Jr devices.
361
404
 
362
405
  * If you’re using macOS version 10.13 or older, there may be no driver for serial communication devices installed on your system. You can either upgrade your macOS version to 10.14+ or manually install a driver which is available [here](https://github.com/adrianmihalko/ch340g-ch34g-ch34x-mac-os-x-driver).
363
406
 
364
- * If you’re using macOS and get a “Segmentation Fault: 11.” error, try uninstalling Python, reinstalling Python version 3.10.11 and then try again.
407
+ * If you’re using macOS and get a “Segmentation Fault: 11.” error, try the “Run via Python method with Python version 3.10.11 and install FlashGBX with `pip3 install "FlashGBX[qt5]"`.
408
+
409
+ * If the save data detection says “512K FLASH (64 KiB) or 1M FLASH (128 KiB)”, that means the size can not be determined until actual save data is written to the cartridge.
365
410
 
366
411
  ## Miscellaneous
367
412
 
368
413
  * To use your own frame around extracted Game Boy Camera pictures, place a file called `pc_frame.png` (must be at least 160×144 pixels) into the configuration directory. (GUI mode only)
369
414
 
415
+ * To write only the differences between two ROMs, name the original one `<name>.gba` and the edited one `<name>.delta.gba`.
416
+
370
417
  ## Contributors
371
418
 
372
419
  The author would like to thank the following very kind people for their help, contributions or documentation (in alphabetical order):
373
420
 
374
- 2358, 90sFlav, AcoVanConis, AdmirtheSableye, AlexiG, ALXCO-Hardware, AndehX, antPL, aronson, Ausar, bbsan, BennVenn, ccs21, chobby, ClassicOldSong, Cliffback, CodyWick13, Corborg, Cristóbal, crizzlycruz, Crystal, Därk, Davidish, DevDavisNunez, Diddy_Kong, djedditt, Dr-InSide, dyf2007, easthighNerd, EchelonPrime, edo999, Eldram, Ell, EmperorOfTigers, endrift, Erba Verde, ethanstrax, eveningmoose, Falknör, FerrantePescara, frarees, Frost Clock, gandalf1980, gboh, gekkio, Godan, Grender, HDR, Herax, Hiccup, hiks, howie0210, iamevn, Icesythe7, ide, inYourBackline, iyatemu, Jayro, Jenetrix, JFox, joyrider3774, jrharbort, JS7457, julgr, Kaede, kane159, KOOORAY, kscheel, kyokohunter, Leitplanke, litlemoran, LovelyA72, Lu, Luca DS, LucentW, manuelcm1, marv17, Merkin, metroid-maniac, Mr_V, olDirdey, orangeglo, paarongiroux, Paradoxical, Rairch, Raphaël BOICHOT, redalchemy, RetroGorek, RevZ, RibShark, s1cp, Satumox, Sgt.DoudouMiel, SH, Shinichi999, Sillyhatday, simonK, Sithdown, skite2001, Smelly-Ghost, Sonikks, Squiddy, Stitch, Super Maker, t5b6_de, Tauwasser, TheNFCookie, Timville, twitnic, velipso, Veund, voltagex, Voultar, Warez Waldo, wickawack, Winter1760, Wkr, x7l7j8cc, xactoes, xukkorz, yosoo, Zeii, Zelante, zipplet, Zoo, zvxr
421
+ 2358, 90sFlav, AcoVanConis, AdmirtheSableye, AlexiG, ALXCO-Hardware, AndehX, antPL, aronson, Ausar, bbsan, BennVenn, ccs21, chobby, ClassicOldSong, Cliffback, CodyWick13, Corborg, Cristóbal, crizzlycruz, Crystal, Därk, Davidish, delibird_deals, DevDavisNunez, Diddy_Kong, djedditt, Dr-InSide, dyf2007, easthighNerd, EchelonPrime, edo999, Eldram, Ell, EmperorOfTigers, endrift, Erba Verde, ethanstrax, eveningmoose, Falknör, FerrantePescara, frarees, Frost Clock, Gahr, gandalf1980, gboh, gekkio, Godan, Grender, HDR, Herax, Hiccup, hiks, howie0210, iamevn, Icesythe7, ide, infinest, inYourBackline, iyatemu, Jayro, Jenetrix, JFox, joyrider3774, jrharbort, JS7457, julgr, Kaede, kane159, KOOORAY, kscheel, kyokohunter, Leitplanke, litlemoran, LovelyA72, Lu, Luca DS, LucentW, luxkiller65, manuelcm1, marv17, Merkin, metroid-maniac, Mr_V, Mufsta, olDirdey, orangeglo, paarongiroux, Paradoxical, Rairch, Raphaël BOICHOT, redalchemy, RetroGorek, RevZ, RibShark, s1cp, Satumox, Sgt.DoudouMiel, SH, Shinichi999, Sillyhatday, simonK, Sithdown, skite2001, Smelly-Ghost, Sonikks, Squiddy, Stitch, Super Maker, t5b6_de, Tauwasser, TheNFCookie, Timville, twitnic, velipso, Veund, voltagex, Voultar, Warez Waldo, wickawack, Winter1760, Wkr, x7l7j8cc, xactoes, xukkorz, yosoo, Zeii, Zelante, zipplet, Zoo, zvxr
422
+
423
+ Thanks to the No-Intro project for their game databases which FlashGBX’s databases are partly based on.
375
424
 
376
425
  ## Third Party Notices and Licenses
377
426
 
378
- Please view the <a href="https://raw.githubusercontent.com/lesserkuma/FlashGBX/master/Third Party Notices.md">Third Party Notices</a>.
427
+ Please view the <a href="https://github.com/lesserkuma/FlashGBX/blob/master/Third%20Party%20Notices.md">Third Party Notices</a>.
379
428
 
380
429
  ## DISCLAIMER
381
430
 
@@ -0,0 +1,43 @@
1
+ FlashGBX/DataTransfer.py,sha256=bE4ZW3iQNceGMgS_SyDQKrXTZcdQxeRSni8GkxBtXIY,1750
2
+ FlashGBX/FlashGBX.py,sha256=bCxU0sTeQrxOMtTBzVQhD-_YBF8AlXuFJtep15YakFc,12784
3
+ FlashGBX/FlashGBX_CLI.py,sha256=xWhAH4jjMlao3VKF3A1l3v3OYKSUWeUfRApR5xQyUs4,65007
4
+ FlashGBX/FlashGBX_GUI.py,sha256=PfPu6jf_OxasoMFdo3jK850Dk4vDV631AcbE9dCdfeU,186657
5
+ FlashGBX/Flashcart.py,sha256=ZbwgPo9__IiYbc2ZndoDChn6_nq25bUwJs2nYppZhwM,36465
6
+ FlashGBX/GBMemory.py,sha256=BoM8_3rgIVQoxYin20t_-_pLHHPdNnuGXoPl2hRYGOY,13463
7
+ FlashGBX/LK_Device.py,sha256=GfS1XIqHGM9hfr7qbsIO5fABisiiQibCvou9v5vuCKE,195976
8
+ FlashGBX/Mapper.py,sha256=ALNZTki3Q9WOp5UPvYntrRnnKlQOMNuTJrfBMq5ITUw,57855
9
+ FlashGBX/PocketCamera.py,sha256=zLspGfQcX_fjplI54VPJXWk9dHP_3Ix99a4tqFU3Vf4,4898
10
+ FlashGBX/PocketCameraWindow.py,sha256=CErgsMf-z7RklC84XKTkghpF1G0I4p_bbX77Gg8HY0E,17262
11
+ FlashGBX/RomFileAGB.py,sha256=S5iMw-KLOhWvKoNjflbCRoUM-zrOofPcpYmLLsF8WRw,8967
12
+ FlashGBX/RomFileDMG.py,sha256=QarLMwTYoPPpKA4Txv3KtCFcNiVg5bDslvfrqoN6J8k,21720
13
+ FlashGBX/UserInputDialog.py,sha256=aYe3CeYlzQoCLI4DQulL5K9euB0HcMpcKZCFZfIJzqE,2911
14
+ FlashGBX/Util.py,sha256=w2c3AY_ujhbJK-Hg_E1tYxami8luXRKkl8obKqjN8FA,42616
15
+ FlashGBX/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ FlashGBX/__main__.py,sha256=L3ibKoTXOlTCepGzrgcktk_Jwp25xBCmGpNQO7W8Bbc,120
17
+ FlashGBX/fw_GBFlash.py,sha256=aNn8_jjGGWeDaRCSnXPbQ-e_JN98cn9-22Nv_waY3wA,15184
18
+ FlashGBX/fw_GBxCartRW_v1_3.py,sha256=qiYReJi1C-UDTjJVY0VujIsM5wPolnUrl_3TQYV-Drw,21498
19
+ FlashGBX/fw_GBxCartRW_v1_4.py,sha256=wVjjjdxY0ugg6B9e4QA_ErySdZCYHL3ljoQzWnheL6A,14259
20
+ FlashGBX/fw_JoeyJr.py,sha256=_ru3hcBQDJeTXk3yd0wHSlWDOXem0MaBiEy8nngFzSI,21328
21
+ FlashGBX/hw_GBFlash.py,sha256=hZ1Cga07AmpqtmiZsG2RSibIP69DSrfBR7iy6hZutvc,8336
22
+ FlashGBX/hw_GBxCartRW.py,sha256=meXKAGfS6v3e51VmVXBBHdPA99u13unwgwZFq59D_ZU,11243
23
+ FlashGBX/hw_JoeyJr.py,sha256=F9uqoRw3hR-p21POgNY-dUU7wAhegOD-rp1Vz7odBYg,9335
24
+ FlashGBX/pyside.py,sha256=hlvYbV29AFJ1Epv0R41Sz-wuo4I9-gH8hgS8sfwJyCk,1662
25
+ FlashGBX/res/Third Party Notices.md,sha256=hTl66zRJfRgj20L6d4HxiFrBUXS0osI1cQIalJ1F_KY,21380
26
+ FlashGBX/res/config.zip,sha256=weBRVFqS8-AFIveXwmitBBoEsGT9YO2iUAq7W4T3L10,383438
27
+ FlashGBX/res/fw_GBFlash.zip,sha256=rTLStKSMcl160UO16djRxpaVCTmwE-CbGsGXKnp7ZDU,18467
28
+ FlashGBX/res/fw_GBxCart_RW_Mini_v1_0.zip,sha256=-QpHSw2JsjPG2WQ7E6mRqre4D3VThau2U7bFZYPY6r0,4774
29
+ FlashGBX/res/fw_GBxCart_RW_XMAS_v1_0.zip,sha256=ai6ithbSsEst22lCcDyJhr8KIlixqhg3HF4XV16Fdto,8093
30
+ FlashGBX/res/fw_GBxCart_RW_v1_1_v1_2.zip,sha256=H9tTjRMovpRkR89tUCsMMpwPslCoRml_cEWu8oYfMLs,8137
31
+ FlashGBX/res/fw_GBxCart_RW_v1_3.zip,sha256=zi2f7fdulQcSATuiIFMaCrpz3mCF5RGftVpbZNVedq0,15681
32
+ FlashGBX/res/fw_GBxCart_RW_v1_4.zip,sha256=KYEsS8k5mUAAia5QqfoGBzSJBjOaumXxtkR-J820dvw,37284
33
+ FlashGBX/res/fw_GBxCart_RW_v1_4a.zip,sha256=IrZ0uI1v_mErR5Mi2ETgwmojee5GYS_Fqlia48ODT88,36772
34
+ FlashGBX/res/fw_JoeyJr.zip,sha256=vJBBplHFiLdjkx3w-wjyD-sLKhAmf8ZSLZlYo_E0ohc,72013
35
+ FlashGBX/res/icon.ico,sha256=2FNNCkh2W0IFQNYNdy8cmodh69NC0gYfpw81GZtr9rU,129959
36
+ FlashGBX/res/icon.png,sha256=WtE7XqPKr2538lw4gVbm6slWvMLJpwYjre8_z1q70GY,19286
37
+ FlashGBX/res/pc_frame.png,sha256=Hp8cUT_e7kc3-nrTD9ekB8gNVgKNEZRr75ggNDihJOg,653
38
+ FlashGBX-4.4.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
39
+ FlashGBX-4.4.dist-info/METADATA,sha256=0dkjr10xlg8h8bvVWWWVERuv6ncWrQsbM1SzeNBaK24,21560
40
+ FlashGBX-4.4.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
41
+ FlashGBX-4.4.dist-info/entry_points.txt,sha256=lsg7RmPUIvEI_Q8bA3jIRh8MLF1qIBzUX_yEjD4lJ-g,52
42
+ FlashGBX-4.4.dist-info/top_level.txt,sha256=y6Ssb3YnEYYHNJIPsG_b5ifITM1STAyQXMpjtNOtyzA,9
43
+ FlashGBX-4.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,43 +0,0 @@
1
- FlashGBX/DataTransfer.py,sha256=9o3BSBed-SMIWkl-TcmolUjBdrGwem8TqjnktWScgBA,1766
2
- FlashGBX/FlashGBX.py,sha256=QbLvnqN5K9JLOYhQX6xvrC-H5fl9bYhWDzkOgo8pdUo,12736
3
- FlashGBX/FlashGBX_CLI.py,sha256=eJ4DJP6u-HDn8hZjsReHTRckme0c_T718NzKzEgF6eQ,64741
4
- FlashGBX/FlashGBX_GUI.py,sha256=p2H-ThzXcWLAbJaBiiTy8TvJ0XBbl8cARdkSyGIxYoA,171638
5
- FlashGBX/Flashcart.py,sha256=S-af7YjsIOCx3sYsS4GjrHt80HD4-RrdLd0EBipXZ-Q,36396
6
- FlashGBX/GBMemory.py,sha256=c1AMjW-TCtKfyexFLCS0pUA7dNmWyUXqUikN_QUf0MU,13320
7
- FlashGBX/LK_Device.py,sha256=31SdJ4LG00YXcP6SAF1TwG6-zphA6GOi-QlLN6_AK1g,188140
8
- FlashGBX/Mapper.py,sha256=eLw3xwxb43SLGbSmjXfzjPHK2w87NWbVsHt53Ac7F64,56964
9
- FlashGBX/PocketCamera.py,sha256=uTkhpvlKfDy7fQRLoHTIxTXh-WdvYj2OUeNo45KhLoY,4899
10
- FlashGBX/PocketCameraWindow.py,sha256=sqWv94gUeFBmUa8Zn1u-Zb4-qVcw5j-Q_tE7hz3sYpc,16185
11
- FlashGBX/RomFileAGB.py,sha256=ad9WBGnPbW6a2y7B5R3rwizhocPFANMAwKCXJYBPQdA,8908
12
- FlashGBX/RomFileDMG.py,sha256=gm9_m41Jv70mLxQzrol3acCoCpOoivllrVtizrSuWss,21466
13
- FlashGBX/UserInputDialog.py,sha256=aYe3CeYlzQoCLI4DQulL5K9euB0HcMpcKZCFZfIJzqE,2911
14
- FlashGBX/Util.py,sha256=XFP-FQaNLz6F4CuNKep1ma7IgcN7jErhUkBrv__eJnA,40132
15
- FlashGBX/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- FlashGBX/__main__.py,sha256=L3ibKoTXOlTCepGzrgcktk_Jwp25xBCmGpNQO7W8Bbc,120
17
- FlashGBX/fw_GBFlash.py,sha256=ebRADjLw_2eOckLYCoUlepRpLD_eTtLTXOxCJ4zskKM,15629
18
- FlashGBX/fw_GBxCartRW_v1_3.py,sha256=qiYReJi1C-UDTjJVY0VujIsM5wPolnUrl_3TQYV-Drw,21498
19
- FlashGBX/fw_GBxCartRW_v1_4.py,sha256=K6eWc6_hy5WZUhCHHxTbigUvvWa3csjnomPEj7TMocM,14733
20
- FlashGBX/fw_JoeyJr.py,sha256=YJP68_gE2djJ3dPjnQVenEk91LtFUAyy1WHK6bwXwSg,20689
21
- FlashGBX/hw_GBFlash.py,sha256=DZQGb1NG1tp9ProCirrbrSH6XPrfEFSi5lGq7BlWe0c,7668
22
- FlashGBX/hw_GBxCartRW.py,sha256=KOR0wmh9FsBopFnfe0Ed1GM4uySrMdFMTSOs6jrHbaw,11193
23
- FlashGBX/hw_JoeyJr.py,sha256=1Bv9AD5cTGqIYgnjuPMW9BBLrLx59jMnyqVUv6H11jM,9334
24
- FlashGBX/pyside.py,sha256=hlvYbV29AFJ1Epv0R41Sz-wuo4I9-gH8hgS8sfwJyCk,1662
25
- FlashGBX/res/Third Party Notices.md,sha256=X-1MRGTAQB8ZuskoWvbhq4IBYj-G0jJoklya3jGwzcQ,18994
26
- FlashGBX/res/config.zip,sha256=iVZ2yoVsNK9jR0bkW5gQvbPswurYS3L8Pr3tfAWYyp4,379194
27
- FlashGBX/res/fw_GBFlash.zip,sha256=u9d0Y6N74EjqEWt68355mqIfxfTMPMTnypmjIopm4JU,17507
28
- FlashGBX/res/fw_GBxCart_RW_Mini_v1_0.zip,sha256=-QpHSw2JsjPG2WQ7E6mRqre4D3VThau2U7bFZYPY6r0,4774
29
- FlashGBX/res/fw_GBxCart_RW_XMAS_v1_0.zip,sha256=ai6ithbSsEst22lCcDyJhr8KIlixqhg3HF4XV16Fdto,8093
30
- FlashGBX/res/fw_GBxCart_RW_v1_1_v1_2.zip,sha256=H9tTjRMovpRkR89tUCsMMpwPslCoRml_cEWu8oYfMLs,8137
31
- FlashGBX/res/fw_GBxCart_RW_v1_3.zip,sha256=zi2f7fdulQcSATuiIFMaCrpz3mCF5RGftVpbZNVedq0,15681
32
- FlashGBX/res/fw_GBxCart_RW_v1_4.zip,sha256=5H2ZSDaxhJCzeYshKwj8CBDQPsxS30hJKuYbPEVYYtg,36772
33
- FlashGBX/res/fw_GBxCart_RW_v1_4a.zip,sha256=skp6LC3qvEyVZf7Txs8chSqsT-JoeZt0ZbvoqMb_3Lk,36260
34
- FlashGBX/res/fw_JoeyJr.zip,sha256=quBrdbe3Kbr30_eP3nqix-ye4v8H5C3fvOZ7m-dxwes,69078
35
- FlashGBX/res/icon.ico,sha256=2FNNCkh2W0IFQNYNdy8cmodh69NC0gYfpw81GZtr9rU,129959
36
- FlashGBX/res/icon.png,sha256=WtE7XqPKr2538lw4gVbm6slWvMLJpwYjre8_z1q70GY,19286
37
- FlashGBX/res/pc_frame.png,sha256=Hp8cUT_e7kc3-nrTD9ekB8gNVgKNEZRr75ggNDihJOg,653
38
- FlashGBX-4.2.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
39
- FlashGBX-4.2.dist-info/METADATA,sha256=LaWjis17ix7y3b7UmPWpE-NHYP0YP8fHE8fkpayLfZc,19273
40
- FlashGBX-4.2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
41
- FlashGBX-4.2.dist-info/entry_points.txt,sha256=lsg7RmPUIvEI_Q8bA3jIRh8MLF1qIBzUX_yEjD4lJ-g,52
42
- FlashGBX-4.2.dist-info/top_level.txt,sha256=y6Ssb3YnEYYHNJIPsG_b5ifITM1STAyQXMpjtNOtyzA,9
43
- FlashGBX-4.2.dist-info/RECORD,,