Commit Graph

677 Commits

Author SHA1 Message Date
nsx0r
0f1a37e6d3
Update NES.ino 2022-12-11 00:00:57 +01:00
nsx0r
95e795023d
[WIP] solving mappers with bus conflicts
solving mappers with bus conflicts, mapper 2 is fixed, more to come after more testing
2022-12-10 15:05:16 +01:00
nsx0r
a18434b8fc
added NES mappers 59+63+113+126+134+174
added NES mappers 59+63+113+126+134+174
2022-12-08 16:10:05 +01:00
nsx0r
eba530437f
added NES mappers 46+52+212
added NES mappers 46+52+212
2022-12-06 16:48:53 +01:00
nsx0r
86c5e78870
added NES mappers 42+142+157+162+163+177
added NES mappers 42+142+157+162+163+177
2022-12-05 20:35:51 +01:00
nsx0r
f258b1ec76
addes NES mappers 178+227+241
addes NES mappers 178+227+241
2022-12-04 08:45:49 +01:00
nsx0r
2c477ddae1
added NES mapper 176
added NES mapper 176, tested working
2022-11-24 22:18:46 +01:00
splash5
ed1c1f0bea Fix SNES Daikaijuu Monogatari 2 2022-11-24 17:08:41 +08:00
nsx0r
36fa976b53
added NES mapper 28
added NES mapper 28, tested working with 2x Action 53 cartridges
2022-11-19 09:04:06 +01:00
sanni
46dd333bd4 Fix NES mapper selection 2022-11-18 10:46:13 +01:00
nsx0r
4cf2f761ee
adjusting min/max sizes for some mappers
adjusting min/max sizes for some mappers, this is required to dump some recent carts:
Lucky Penguin is 64k mapper 2
Project Blue is 512k mapper 34
2022-11-18 07:47:04 +01:00
sanni
8dcb841109
Up version number 2022-11-12 20:25:51 +01:00
Ancyker
e806b39658
Merge pull request #1 from sanni/master
Update with master
2022-11-12 14:15:19 -05:00
Remy Starshade
aee632642d Add Voltage Selection Module 2022-11-12 14:13:22 -05:00
scrap-a
ca23277b5a Fix Sonic & Knuckles 2022-11-13 03:05:19 +09:00
nsx0r
cf8e3f9b21
fixed mapper 225/255
i finally got 2 carts to confirm this is working with this fix
2022-11-11 12:08:17 +01:00
nsx0r
39988d2b1c
fixed mapper 226
forgot to set the high bit for bigger carts
2022-11-11 10:53:13 +01:00
nsx0r
9decd85848
added NES mapper 226
added NES mapper 226, tested working with NES pirate multicart 42-in-1
2022-11-10 23:20:23 +01:00
nsx0r
fdc1911b5e
fixing NES mapper 228
that *should* work
2022-11-09 10:54:58 +01:00
nsx0r
8b493c4447
added NES mapper 228 - UNTESTED
added NES mapper 228 (Action 52 + Cheetahmen II) - NEED TESTING
2022-11-08 12:49:42 +01:00
Vincent Pelletier
78c05c826c Cart_Reader.ino: Move definitions after all forward declarations
It seems the Arduino IDE picks the position of the first definition to
insert all auto-generated forward declarations. This fails to compile if
any of these generated forward declarations references a type included
later.
So, reorder the code a bit so the first definition happens strictly after
the last inclusion.
2022-11-05 05:04:37 +00:00
Vincent Pelletier
ab9e36e12e Cart_Reader.ino: Comment rewind_line implementation
The logic of this function is not immediately clear, so comment it
extensively.
2022-11-05 05:04:37 +00:00
Vincent Pelletier
e334edb4e5 Cart_Reader.ino: Simplify checkButton nesting
Also, fixes a compiler warning on the HW4/5 function, which could reach
the function's end without a "return" statement.
2022-11-05 05:04:37 +00:00
Vincent Pelletier
7b1e74c1fc Cart_Reader.ino: Always return a value from SERIAL_MONITOR checkButton 2022-11-05 01:24:19 +00:00
Vincent Pelletier
6de1a34cd7 Cart_Reader.ino: Catch-all condition for page 3
Makes it clear to the compiler that no other page exist, and hence
option_offset and num_answers are always initialised.
2022-11-05 01:02:18 +00:00
Vincent Pelletier
4d3cdd9004 NES.ino: Always set browseDatabase
Fixes a compiler warning.
2022-11-05 00:43:24 +00:00
nsx0r
43669ce181
addes NES mapper 111
addes NES mapper 111
2022-11-02 12:27:08 +01:00
nsx0r
bc0923d1ac
actually fix all NAMCOT mappers similar to 206
actually fix all NAMCOT mappers similar to 206
2022-11-02 07:44:25 +01:00
nsx0r
4a799e6969
fixed NES mapper 206
fixed NES mapper 206, tested working with FC game "Super Chinese"
2022-11-02 05:50:33 +01:00
sanni
61cc4b034c Update Cart_Reader.ino 2022-11-02 01:20:35 +01:00
sanni
044e90f575 Update Cart_Reader.ino 2022-11-02 00:44:16 +01:00
sanni
a3b1882e88 Fix NES manual mapper selection 2022-11-02 00:32:54 +01:00
sanni
78aa7a3d34 Update NES.ino 2022-11-01 23:32:46 +01:00
sanni
2c95299010 Turn LED off when rotary button is pressed 2022-11-01 22:50:14 +01:00
sanni
d7082a2366 Add fast scrolling through NES database
Fast scrolling skips 30 entries at once.
Also fixed lockup when browsing backwards on first database entry.
2022-11-01 22:26:53 +01:00
Vincent Pelletier
90303b45c0 SNES.ino: Restore code with side-effects
This code was removed as part of
  a555f21 ("All: Resolve all compiler and linker warnings")
because it was filling a 1kB buffer which was never read from.
While I expect reading values from PINC should be invisible from the
cartridge's perspective, writing to PORTL, PORTF and PORTK is definitely
visible.
I have currently no way of testing if this code is required, so in doubt
restore the parts which have effects visible from the cartridge.
2022-11-01 07:56:15 +00:00
Vincent Pelletier
c82815f0d5 SFM.ino, SNES.ino: Rework compiler warnings resolution
I am not sure why I changed some variables from 16 bit types to 8 bit types
when the warnings being resolved were only about signedness.
Fixes: a555f21 ("All: Resolve all compiler and linker warnings")
2022-11-01 07:53:35 +00:00
sanni
cc17c70e30 Fix reading/writing 4MB HiROM
HiROM starts at bank 192 and has 64 banks so byte variable currBank overflows.
2022-10-31 15:41:29 +01:00
sanni
a3feb32e15
V11.1 2022-10-31 11:40:15 +01:00
Vincent Pelletier
f07f6f9025 All: Replace print_Error(*, boolean) calls with print_{,Fatal}Error(*)
Also, make print_FatalError(*) independent from print_Error(*).
Also, factorise common parts of print_Error(*).

Frees 2336 bytes of program space and 5 bytes of global ram space.
2022-10-31 08:52:33 +00:00
Vincent Pelletier
0a823bf5b7 Cart_Reader.ino: Factorise missing module error.
Also, handle one such case in the HW3 main menu.
2022-10-31 08:52:19 +00:00
Vincent Pelletier
25b615f77c Cart_Reader.ino: Move print_FatalError prototypes earlier in the file
So they can be used in more places within that file.
2022-10-31 05:48:46 +00:00
Vincent Pelletier
4a2a2c69d2 Cart_Reader.ino: Deduplicate HW5 mainMenu pagination logic 2022-10-31 05:48:46 +00:00
Vincent Pelletier
a35c882662 N64.ino: Factorise JoyBus-related code
IMPORTANT: with this change, the Adafruit clock generator becomes a hard
requirement to read and write gamecart eeproms.

This is a large patch, partly because JoyBus is used a lot:
- controller
- controller pak
- gamecart eeprom
and partly because of the further simplifications it allows.

Also, implement low-level bit shift functions in assembly in order to get
complete control of the timings: there can be just a few cycles of slack.
Also, use the time waiting for the input line to go high to pack received
bits into bytes on-the-fly, as there is now plenty of time.

This saves about 2080 bytes of program space, and 369 bytes of global ram
space.
2022-10-31 05:48:46 +00:00
Vincent Pelletier
bea06e55fe N64.ino: Assorted low-hanging fruits
More sizeof() use, avoiding high-level loops when a callee can do it
without the call overhead on every iteration, a bit of source code
factorisation, avoiding initializers for large variables.
2022-10-31 05:48:46 +00:00
Vincent Pelletier
d9daadb1f9 N64.ino: Build eeprom path and file name with snprintf_P
So the format string is stored in flash rather than in ram.
The gain from doing just one like this is not much, to be done in more
places.
2022-10-31 01:16:06 +00:00
Vincent Pelletier
a43b2553cd N64.ino: Optimise controller CRC functions for speed
Also, shave off 5 bytes from a local initializer.
Saves 22 bytes of program space and of global ram space.
2022-10-31 01:16:06 +00:00
sanni
3826f5aa10
Update Cart_Reader.ino 2022-10-30 11:46:55 +01:00
Vincent Pelletier
fbaed78eb5 SFM.ino: Get rid of write-only global variables
These variables are set but never read. Removing them removes a non-trivial
amount of code, which I am not comfortable deleting: it contains knowledge
about cart data structure, even though it is currently not being used for
anything. So comment it out until someone who know this architecture better
comes around.

Frees 146 bytes of program space and 16 bytes of global ram space.
2022-10-29 09:46:00 +00:00
Vincent Pelletier
18bd92d100 WSV.ino: Move WVS to PROGMEM
Frees 16 bytes of program space and 8 bytes of global ram space.
2022-10-29 08:01:59 +00:00
Vincent Pelletier
cb26782e22 PCE.ino: Get rid of menuOptionspceCart global variable
Also, move a few inline string constants into PROGMEM.
Uses 64 bytes of program space.
Frees 206 bytes of global ram space.
2022-10-29 08:01:59 +00:00
Vincent Pelletier
59665bb848 NES.ino: Factorise Create{PRG,CHR,RAM}FileInSD functions
Also, gets rid of filesCount global.

Frees 390 bytes of program space and 21 bytes of global ram space.
2022-10-29 08:01:55 +00:00
Vincent Pelletier
64db4ded54 NES.ino: Convert nointro-disabled global variables into locals
Also, remove dead error handling code: sd.exists internally opens the file
and returns the produced status, so myFile.open return value should be the
same.
2022-10-29 07:16:37 +00:00
Vincent Pelletier
264bfd5ce5 INTV.ino: Move INTV to PROGMEM.
Uses 8 bytes of program space.
Frees 6 bytes of global ram space.
2022-10-29 07:16:37 +00:00
Vincent Pelletier
a6f9e5e99c GBA.ino: Get rid of unused global 2022-10-29 07:16:37 +00:00
Vincent Pelletier
d4c5f6ec5b GBA.ino: Get rid of calcChecksumStr as a global
Frees 150 bytes of program space and 5 bytes of global ram space.
2022-10-29 07:16:37 +00:00
Vincent Pelletier
3bb63d77e3 COLV.ino: Move COL to PROGMEM
Uses 30 bytes of program space
Frees 6 bytes of global ram space.
2022-10-29 07:16:37 +00:00
Vincent Pelletier
65f7950af4 NES.ino: Move PRG, CHR and RAM to PROGMEM.
Uses 90 bytes of program space.
Frees 40 bytes of global ram space.
2022-10-29 07:16:37 +00:00
Vincent Pelletier
133e3feda9 Cart_Reader.ino: New variants of print_Error
Tagged with noreturn so the compiler knows about the effect of
forceReset=true.
Ideally, print_Error should lose its forceReset argument so that:
- print_Error never resets
- print_FatalError always resets (and hosts the code doing so)
so the compiler is more accurately aware of the execution flow.
2022-10-29 07:16:37 +00:00
sanni
34981fdb8e Fix compile error 2022-10-28 15:09:15 +02:00
sanni
a8a981e137 Auto format 2022-10-28 15:02:51 +02:00
sanni
30d880bfa7 Fix SNES romName 2022-10-28 13:38:16 +02:00
sanni
24c5957993 Fix CRC32 calculation 2022-10-28 12:56:38 +02:00
nsx0r
2682e5ef94
added NES mapper 91 + m36 typo fix
added NES mapper 91 + m36 typo fix
2022-10-28 11:49:55 +02:00
nsx0r
1509549946
added NES mapper 36
added NES mapper 36
2022-10-28 10:29:54 +02:00
sanni
748b9094df V11.0 2022-10-28 10:26:04 +02:00
Vincent Pelletier
10061beaf5 MD.ino: Move some globals to getCartInfo_MD locals.
Also, bypass sdBuffer when it was the directory copied to another buffer.
Also, factorise yet another pair of loops copying rom name.
This frees 59 bytes of global ram space.
2022-10-28 05:29:44 +00:00
Vincent Pelletier
3c3b399d6a SFM.ino: Move all menu variables from globals to locals.
Saves about 100 bytes of program memory and 80 bytes of global ram.
2022-10-28 05:29:44 +00:00
Vincent Pelletier
3632b06980 SFM.ino: Factorise single-game gamecode retrieval.
Frees 220 bytes of code and 16 bytes of ram.
2022-10-28 05:29:44 +00:00
Vincent Pelletier
67b54a690b All: Factorise title generation from cart.
Fix out-of-bound access when first byte is not an ascii printable
character.
Reduces program space use by 480 bytes.
2022-10-28 05:29:44 +00:00
Vincent Pelletier
3b05046ee9 All: Factorise CRC functions.
This saves 370 bytes of program space.
2022-10-28 05:29:41 +00:00
Vincent Pelletier
84738038e1 NES.ino: Give more time to read "No data found" message. 2022-10-28 05:29:20 +00:00
Vincent Pelletier
337ef94b07 NES.ino: Factorise code.
Mainly, this removes a lot of the logic from selectMapping by reusing the
copy already present in getMapping. As a result, selectMapping is not
expected to be accessed from outside this module anymore.
Also, this factorises several smaller chunks of code found throughout the
module.
Also, get rid of a few easy globals along the way.
Also, move a bit more of NES-specific initialisation and menu display to
the NES.ino module.

This saves about 1490 bytes of code.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
e4e09c7bf8 GBA.ino: Reduce gbaMenu size.
Replace switch blocks which produce one output with const tables.
Use functions instead of repeating code.
Move common initial and final statements outside of blocks.
Also, do not erase/flash second bank on dual-bank chips when the first one
had failures.
This saves about 520 bytes of code and increases ram use by 12 bytes.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
27baa2b164 All: Factorise code seeking a file back N lines
This saves 890 bytes of program space.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
0a627e5bd4 All: Use f.seekCur(x) instead of f.seekSet(f.curPosition() + x)
Saves 450 bytes of program space.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
a555f2117f All: Resolve all compiler and linker warnings
No functional change intended.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
d81f2c0509 NES.ino: Simplify CRC functions.
It seems crc32EEP only exists because the actual number of bytes read from
file were not checked, hence falling back to smaller reads.
Instead, always read up to the full available buffer, adding to the CRC
only as many bytes as were actually read.
Also, move some related variables to local scope.
Overall, this saves about 50 bytes of code and 80 bytes of global ram.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
b84f63d1dc Cart_Reader.ino: Drop redundant display_Update call.
In this codepath, there will be a second call just after displaying the
CRC, making this call redundant.
For completeness: In the alternate codepath, the next operation does a lot
of IO, so it makes sense to refresh the screen before printing the CRC.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
daec1f3e35 Card_Reader.ino: Optimise get_line for speed
Do fewer calls to readfile->read, especially if the buffer is large enough
to fit an entire line, resulting in less call/return overhead.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
50da6b9da7 Cart_Reader.ino: Assorted cosmetic changes to compareCRC.
Shorten gamename to the number of bytes actually used in the code, more
sizeof() use.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
264d83f383 Cart_Reader.ino: Drop redundant initialisation.
`i` is initialised on the previous line, along with its declaration.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
92f8626687 Cart_Reader.ino: Drop convertPgm(const char* const [], byte, byte)
This avoids code duplication between it and
  convertPgm(const char* const [], byte)
for just 3 callers, when the callers can be easily updated to call the
latter.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
dc391541b4 Cart_Reader.ino: Simplify fileBrowser pagination.
Also, this resolves a warning about `count` being potentially used
uninitialised: when landing in the "Too many files" codepath.
With this simplification, the limit on the number of files is removed. It
is unclear whether that was intentional (maybe this was gating other
issues ?)?
2022-10-28 05:29:20 +00:00
Vincent Pelletier
dc9ee3b01e Cart_Reader.ino: make myDir a variable local to fileBrowser.
It is not used anywhere else.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
d7bbc59607 N64.ino: Remove unused function
This does not save any space as the linker noticed it wasn't used.
Also, point the (commented-out) only caller to the equivalent libc
function.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
b3eb3dd928 GBS.ino: Move gbSmartGames from globals to a local.
Saves 120 bytes of global ram space.
Also, factorise code reading a single entry. This saves about 60 bytes of
code space.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
ae2e90a6cd PCE.ino: Skip strcpy to menuOptionspceCart
Values can be directly composed/initialised in menuOptionspceCart, avoiding
the need to strcpy to it.
This saves about 100 bytes of ram by dropping a few global char arrays.
Re-duplicates "Reset" string initialiser, but this should not be a big
deal.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
e7ef7fd4bd All: Make flashid an integer
flashid (almost) always contains the hexadecimal representation of two
bytes, which then means it gets compares with strcmp, which in turn need
another string argument. Instead, make it an integer, removing the need to
call strcmp.
Add a separate string representation for printing purposes (maybe this can be
avoided by having the print function format it when needed ?).
The only apparent case where flashid is not an hexadecimal representation
of a pair of bytes is when N64 clears it to "CONF". Set flashid to zero
this case.
This saves about 500 bytes of program space and 200 bytes of ram.
2022-10-28 05:29:20 +00:00
Vincent Pelletier
3fcd1a808d https://github.com/sanni/cartreader/issues/574#issuecomment-1286956251 2022-10-28 05:29:20 +00:00
sanni
5357dea659 Print checksum and header CRC32 when searching database 2022-10-27 23:43:46 +02:00
PsyK0p4T
ce436e8a77
Use sg1000.txt database
Use sg1000.txt database to verify/rename SG-1000 dumps
2022-10-27 22:25:34 +02:00
nsx0r
2f9ff59343
added mapper 255 (same as 225)
added mapper 255 (same as 225)
2022-10-27 16:56:46 +02:00
nsx0r
6435a64df8
added NES mappers 240 and 246
added NES mappers 240 and 246
2022-10-27 16:17:49 +02:00
sanni
3f83dcec55
Merge pull request #589 from nsx0r/master
more NES mappers fixes
2022-10-26 21:58:35 +02:00
BacteriaMage
ab5f94af85 fix superfx sram size detection
The header offsets were wrong so the size wasn't correctly computed and generally ended up defaulting to 32KB. Stunt Race FX, at least, uses 64KB and so only half the save data was being read.
2022-10-25 19:54:40 -05:00
nsx0r
cc6494857f
PRG 97 = 180 -> merged code
PRG 97 = 180 -> merged code
2022-10-25 19:59:52 +02:00
nsx0r
9506005c6b
fixed NES mapper 200
fixed NES mapper 200
2022-10-25 12:28:38 +02:00
nsx0r
6590f7e583
added 2 missing mapper labels
added 2 missing mapper labels
2022-10-25 09:33:22 +02:00
sanni
9cabf64a0e
Merge pull request #583 from nsx0r/patch-21
fixed NES mapper 203
2022-10-24 16:36:50 +02:00