Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Libretro
vbam-libretro
Commits
c1f281b7
Commit
c1f281b7
authored
Jun 22, 2018
by
retro-wertz
Committed by
Rafael Kitover
Jun 30, 2018
Browse files
Libretro: Better auto detection of save types when not found in gbaover
parent
73373411
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/libretro/UtilRetro.cpp
View file @
c1f281b7
...
...
@@ -182,53 +182,65 @@ uint8_t *utilLoad(const char *file, bool (*accept)(const char *), uint8_t *data,
return
image
;
}
void
utilGBAFindSave
(
const
uint8_t
*
data
,
const
int
size
)
void
utilGBAFindSave
(
const
int
size
)
{
uint32_t
*
p
=
(
uint32_t
*
)
data
;
uint32_t
*
end
=
(
uint32_t
*
)(
data
+
size
);
int
saveType
=
0
;
int
flashSize
=
0x10000
;
bool
rtcFound
=
false
;
while
(
p
<
end
)
{
uint32_t
d
=
READ32LE
(
p
);
if
(
d
==
0x52504545
)
{
if
(
memcmp
(
p
,
"EEPROM_"
,
7
)
==
0
)
{
if
(
saveType
==
0
)
saveType
=
3
;
}
}
else
if
(
d
==
0x4D415253
)
{
if
(
memcmp
(
p
,
"SRAM_"
,
5
)
==
0
)
{
if
(
saveType
==
0
)
saveType
=
1
;
}
}
else
if
(
d
==
0x53414C46
)
{
if
(
memcmp
(
p
,
"FLASH1M_"
,
8
)
==
0
)
{
if
(
saveType
==
0
)
{
saveType
=
2
;
flashSize
=
0x20000
;
}
}
else
if
(
memcmp
(
p
,
"FLASH"
,
5
)
==
0
)
{
if
(
saveType
==
0
)
{
saveType
=
2
;
flashSize
=
0x10000
;
bool
rtcFound_
=
false
;
int
detectedSaveType
=
0
;
int
flashSize_
=
0x8000
;
uint32_t
*
p
=
(
uint32_t
*
)
&
rom
[
0
];
uint32_t
*
end
=
(
uint32_t
*
)(
&
rom
[
0
]
+
size
);
while
(
p
<
end
)
{
uint32_t
d
=
READ32LE
(
p
);
if
(
d
==
0x52504545
)
{
if
(
memcmp
(
p
,
"EEPROM_"
,
7
)
==
0
)
{
if
(
detectedSaveType
==
0
||
detectedSaveType
==
4
)
{
detectedSaveType
=
1
;
}
}
}
else
if
(
d
==
0x4D415253
)
{
if
(
memcmp
(
p
,
"SRAM_"
,
5
)
==
0
)
{
if
(
detectedSaveType
==
0
||
detectedSaveType
==
1
||
detectedSaveType
==
4
)
{
detectedSaveType
=
2
;
}
}
}
else
if
(
d
==
0x53414C46
)
{
if
(
memcmp
(
p
,
"FLASH1M_"
,
8
)
==
0
)
{
if
(
detectedSaveType
==
0
)
{
detectedSaveType
=
3
;
flashSize_
=
0x20000
;
}
}
else
if
(
memcmp
(
p
,
"FLASH512_"
,
9
)
==
0
)
{
if
(
detectedSaveType
==
0
)
{
detectedSaveType
=
3
;
flashSize_
=
0x10000
;
}
}
else
if
(
memcmp
(
p
,
"FLASH"
,
5
)
==
0
)
{
if
(
detectedSaveType
==
0
)
{
detectedSaveType
=
4
;
flashSize_
=
0x10000
;
}
}
}
else
if
(
d
==
0x52494953
)
{
if
(
memcmp
(
p
,
"SIIRTC_V"
,
8
)
==
0
)
{
rtcFound_
=
true
;
}
}
}
}
else
if
(
d
==
0x52494953
)
{
if
(
memcmp
(
p
,
"SIIRTC_V"
,
8
)
==
0
)
rtcFound
=
true
;
p
++
;
}
// if no matches found, then set it to NONE
if
(
detectedSaveType
==
0
)
{
detectedSaveType
=
5
;
}
p
++
;
}
// if no matches found, then set it to NONE
if
(
saveType
==
0
)
{
saveType
=
5
;
}
rtcEnable
(
rtcFound
);
cpuSaveType
=
saveType
;
flashSetSize
(
flashSize
);
if
(
detectedSaveType
==
4
)
{
detectedSaveType
=
3
;
}
cpuSaveType
=
detectedSaveType
;
rtcEnabled
=
rtcFound_
;
flashSize
=
flashSize_
;
}
void
utilUpdateSystemColorMaps
(
bool
lcd
)
...
...
src/libretro/libretro.cpp
View file @
c1f281b7
...
...
@@ -43,7 +43,6 @@ static retro_environment_t environ_cb;
static
float
sndFiltering
=
0.5
f
;
static
bool
sndInterpolation
=
true
;
static
bool
enableRtc
=
false
;
static
bool
can_dupe
=
false
;
int
emulating
=
0
;
static
int
retropad_layout
=
0
;
...
...
@@ -408,15 +407,32 @@ static const ini_t gbaover[256] = {
{
"Zoku Bokura no Taiyou - Taiyou Shounen Django (Japan)"
,
"U32J"
,
0
,
0
,
1
,
0
,
0
}
};
static
int
romSize
=
0
;
static
void
load_image_preferences
(
void
)
{
const
char
*
savetype
[]
=
{
"AUTO"
,
"EEPROM"
,
"SRAM"
,
"FLASH"
,
"SENSOR+EEPROM"
,
"NONE"
};
char
buffer
[
5
];
buffer
[
0
]
=
rom
[
0xac
];
buffer
[
1
]
=
rom
[
0xad
];
buffer
[
2
]
=
rom
[
0xae
];
buffer
[
3
]
=
rom
[
0xaf
];
buffer
[
4
]
=
0
;
cpuSaveType
=
0
;
flashSize
=
0x8000
;
rtcEnabled
=
false
;
mirroringEnable
=
false
;
if
(
log_cb
)
log_cb
(
RETRO_LOG_INFO
,
"GameID in ROM is: %s
\n
"
,
buffer
);
...
...
@@ -435,33 +451,30 @@ static void load_image_preferences(void)
if
(
log_cb
)
log_cb
(
RETRO_LOG_INFO
,
"Found ROM in vba-over list.
\n
"
);
e
nable
Rtc
=
gbaover
[
found_no
].
rtcEnabled
;
rtcE
nable
d
=
gbaover
[
found_no
].
rtcEnabled
;
if
(
gbaover
[
found_no
].
flashSize
!=
0
)
flashSize
=
gbaover
[
found_no
].
flashSize
;
else
flashSize
=
65536
;
cpuSaveType
=
gbaover
[
found_no
].
saveType
;
mirroringEnable
=
gbaover
[
found_no
].
mirroringEnabled
;
}
if
(
!
cpuSaveType
/* && !found*/
)
{
utilGBAFindSave
(
romSize
);
}
if
(
log_cb
)
{
log_cb
(
RETRO_LOG_INFO
,
"RTC = %d.
\n
"
,
e
nable
Rtc
);
log_cb
(
RETRO_LOG_INFO
,
"RTC = %d.
\n
"
,
rtcE
nable
d
);
log_cb
(
RETRO_LOG_INFO
,
"flashSize = %d.
\n
"
,
flashSize
);
log_cb
(
RETRO_LOG_INFO
,
"cpuSaveType = %
d
.
\n
"
,
cpuSaveType
);
log_cb
(
RETRO_LOG_INFO
,
"cpuSaveType = %
s
.
\n
"
,
savetype
[
cpuSaveType
]
);
log_cb
(
RETRO_LOG_INFO
,
"mirroringEnable = %d.
\n
"
,
mirroringEnable
);
}
}
static
void
gba_init
(
void
)
{
cpuSaveType
=
0
;
flashSize
=
0x10000
;
enableRtc
=
false
;
mirroringEnable
=
false
;
#ifdef FRONTEND_SUPPORTS_RGB565
systemColorDepth
=
16
;
systemRedShift
=
11
;
...
...
@@ -483,9 +496,8 @@ static void gba_init(void)
if
(
flashSize
==
0x10000
||
flashSize
==
0x20000
)
flashSetSize
(
flashSize
);
rtcEnabled
=
enableRtc
;
if
(
enableRtc
)
rtcEnable
(
enableRtc
);
rtcEnable
(
rtcEnabled
);
rtcEnableRumble
(
!
rtcEnabled
);
doMirroring
(
mirroringEnable
);
...
...
@@ -496,8 +508,6 @@ static void gba_init(void)
CPUReset
();
soundReset
();
uint8_t
*
state_buf
=
(
uint8_t
*
)
malloc
(
2000000
);
serialize_size
=
CPUWriteState
(
state_buf
,
2000000
);
free
(
state_buf
);
...
...
@@ -887,7 +897,7 @@ bool retro_load_game(const struct retro_game_info *game)
update_variables
();
update_input_descriptors
();
int
romSize
=
CPULoadRomData
((
const
char
*
)
game
->
data
,
game
->
size
);
romSize
=
CPULoadRomData
((
const
char
*
)
game
->
data
,
game
->
size
);
if
(
!
romSize
)
return
false
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment