Can now get SD cards size properly on format, reduce offsets from 64 to 32 bit

If theres a > 4gb savestate, thats the problem, not the address bits in the offset.
This commit is contained in:
meepingsnesroms
2019-02-25 15:32:35 -08:00
parent 7660f2e64b
commit 97cd9bc543
17 changed files with 52 additions and 48 deletions

View File

@@ -37,8 +37,8 @@ void ads7846Reset(void){
#endif
}
uint64_t ads7846StateSize(void){
uint64_t size = 0;
uint32_t ads7846StateSize(void){
uint32_t size = 0;
size += sizeof(uint8_t) * 4;
size += sizeof(uint16_t);
@@ -47,7 +47,7 @@ uint64_t ads7846StateSize(void){
}
void ads7846SaveState(uint8_t* data){
uint64_t offset = 0;
uint32_t offset = 0;
writeStateValue8(data + offset, ads7846PenIrqEnabled);
offset += sizeof(uint8_t);
@@ -62,7 +62,7 @@ void ads7846SaveState(uint8_t* data){
}
void ads7846LoadState(uint8_t* data){
uint64_t offset = 0;
uint32_t offset = 0;
ads7846PenIrqEnabled = readStateValue8(data + offset);
offset += sizeof(uint8_t);

View File

@@ -7,7 +7,7 @@
extern bool ads7846PenIrqEnabled;
void ads7846Reset(void);
uint64_t ads7846StateSize(void);
uint32_t ads7846StateSize(void);
void ads7846SaveState(uint8_t* data);
void ads7846LoadState(uint8_t* data);

View File

@@ -121,8 +121,8 @@ void armv5Reset(void){
armv5ServiceRequest = false;
}
uint64_t armv5StateSize(void){
uint64_t size = 0;
uint32_t armv5StateSize(void){
uint32_t size = 0;
//need to add armv5Cpu here
size += sizeof(uint8_t);
@@ -131,7 +131,7 @@ uint64_t armv5StateSize(void){
}
void armv5SaveState(uint8_t* data){
uint64_t offset = 0;
uint32_t offset = 0;
//need to add armv5Cpu here
writeStateValue8(data + offset, armv5ServiceRequest);
@@ -139,7 +139,7 @@ void armv5SaveState(uint8_t* data){
}
void armv5LoadState(uint8_t* data){
uint64_t offset = 0;
uint32_t offset = 0;
//need to add armv5Cpu here
armv5ServiceRequest = readStateValue8(data + offset);

View File

@@ -7,7 +7,7 @@
extern bool armv5ServiceRequest;
void armv5Reset(void);
uint64_t armv5StateSize(void);
uint32_t armv5StateSize(void);
void armv5SaveState(uint8_t* data);
void armv5LoadState(uint8_t* data);

View File

@@ -168,8 +168,8 @@ void emulatorSetRtc(uint16_t days, uint8_t hours, uint8_t minutes, uint8_t secon
setRtc(days, hours, minutes, seconds);
}
uint64_t emulatorGetStateSize(void){
uint64_t size = 0;
uint32_t emulatorGetStateSize(void){
uint32_t size = 0;
size += sizeof(uint32_t);//save state version
size += sizeof(uint32_t);//palmEmuFeatures.info
@@ -216,7 +216,7 @@ uint64_t emulatorGetStateSize(void){
}
bool emulatorSaveState(buffer_t buffer){
uint64_t offset = 0;
uint32_t offset = 0;
uint8_t index;
if(buffer.size < emulatorGetStateSize())
@@ -413,9 +413,9 @@ bool emulatorSaveState(buffer_t buffer){
}
bool emulatorLoadState(buffer_t buffer){
uint64_t offset = 0;
uint32_t offset = 0;
uint8_t index;
uint64_t stateSdCardSize;
uint32_t stateSdCardSize;
uint8_t* stateSdCardBuffer;
//state validation, wont load states that are not from the same state version
@@ -620,12 +620,12 @@ bool emulatorLoadState(buffer_t buffer){
return true;
}
uint64_t emulatorGetRamSize(void){
uint32_t emulatorGetRamSize(void){
return palmEmuFeatures.info & FEATURE_RAM_HUGE ? SUPERMASSIVE_RAM_SIZE : RAM_SIZE;
}
bool emulatorSaveRam(buffer_t buffer){
uint64_t size = palmEmuFeatures.info & FEATURE_RAM_HUGE ? SUPERMASSIVE_RAM_SIZE : RAM_SIZE;
uint32_t size = palmEmuFeatures.info & FEATURE_RAM_HUGE ? SUPERMASSIVE_RAM_SIZE : RAM_SIZE;
if(buffer.size < size)
return false;
@@ -637,7 +637,7 @@ bool emulatorSaveRam(buffer_t buffer){
}
bool emulatorLoadRam(buffer_t buffer){
uint64_t size = palmEmuFeatures.info & FEATURE_RAM_HUGE ? SUPERMASSIVE_RAM_SIZE : RAM_SIZE;
uint32_t size = palmEmuFeatures.info & FEATURE_RAM_HUGE ? SUPERMASSIVE_RAM_SIZE : RAM_SIZE;
if(buffer.size < size)
return false;
@@ -657,12 +657,16 @@ uint32_t emulatorInsertSdCard(buffer_t image, bool writeProtectSwitch){
if(palmSdCard.flashChip.data)
return EMU_ERROR_RESOURCE_LOCKED;
//no 0 sized chips
if(image.size == 0x00000000)
return EMU_ERROR_INVALID_PARAMETER;
//max out at 2gb SD card, Palms cant handle higher than that anyway because of incompatibility with FAT32 and SDHC
if(image.size > 0x20000000)
return EMU_ERROR_OUT_OF_MEMORY;
return EMU_ERROR_INVALID_PARAMETER;
//round up to 1 block of SDSC block size to prevent buffer overflows when accessing the last block
palmSdCard.flashChip.size = image.size & ~(SD_CARD_BLOCK_SIZE - 1) + (image.size & (SD_CARD_BLOCK_SIZE - 1) ? SD_CARD_BLOCK_SIZE : 0);
//round up to nearest mb, prevents issues with buffer size and too small SD cards
palmSdCard.flashChip.size = image.size & 0xFF100000 + (image.size & 0x000FFFFF ? 0x00100000 : 0x00000000);
palmSdCard.flashChip.data = malloc(palmSdCard.flashChip.size);
if(!palmSdCard.flashChip.data)
return EMU_ERROR_OUT_OF_MEMORY;

View File

@@ -81,7 +81,7 @@ enum{
//types
typedef struct{
uint8_t* data;
uint64_t size;
uint32_t size;
}buffer_t;
typedef struct{
@@ -166,10 +166,10 @@ void emulatorExit(void);
void emulatorHardReset(void);
void emulatorSoftReset(void);
void emulatorSetRtc(uint16_t days, uint8_t hours, uint8_t minutes, uint8_t seconds);
uint64_t emulatorGetStateSize(void);
uint32_t emulatorGetStateSize(void);
bool emulatorSaveState(buffer_t buffer);//true = success
bool emulatorLoadState(buffer_t buffer);//true = success
uint64_t emulatorGetRamSize(void);
uint32_t emulatorGetRamSize(void);
bool emulatorSaveRam(buffer_t buffer);//true = success
bool emulatorLoadRam(buffer_t buffer);//true = success
buffer_t emulatorGetSdCardBuffer(void);//this is a direct pointer to the SD card data, do not free it

View File

@@ -24,8 +24,8 @@ void expansionHardwareReset(void){
armv5Reset();
}
uint64_t expansionHardwareStateSize(void){
uint64_t size = 0;
uint32_t expansionHardwareStateSize(void){
uint32_t size = 0;
size += sizeof(uint32_t);
if(palmEmuFeatures.info & FEATURE_HYBRID_CPU)
@@ -35,7 +35,7 @@ uint64_t expansionHardwareStateSize(void){
}
void expansionHardwareSaveState(uint8_t* data){
uint64_t offset = 0;
uint32_t offset = 0;
writeStateValue32(data + offset, expansionHardwareLcdPointer);
offset += sizeof(uint32_t);
@@ -46,7 +46,7 @@ void expansionHardwareSaveState(uint8_t* data){
}
void expansionHardwareLoadState(uint8_t* data){
uint64_t offset = 0;
uint32_t offset = 0;
expansionHardwareLcdPointer = readStateValue32(data + offset);
offset += sizeof(uint32_t);

View File

@@ -4,7 +4,7 @@
#include <stdint.h>
void expansionHardwareReset(void);
uint64_t expansionHardwareStateSize(void);
uint32_t expansionHardwareStateSize(void);
void expansionHardwareSaveState(uint8_t* data);
void expansionHardwareLoadState(uint8_t* data);

View File

@@ -98,8 +98,8 @@ void flx68000Reset(void){
m68k_pulse_reset();
}
uint64_t flx68000StateSize(void){
uint64_t size = 0;
uint32_t flx68000StateSize(void){
uint32_t size = 0;
size += sizeof(uint32_t) * 50;//m68ki_cpu
@@ -107,7 +107,7 @@ uint64_t flx68000StateSize(void){
}
void flx68000SaveState(uint8_t* data){
uint64_t offset = 0;
uint32_t offset = 0;
uint8_t index;
for(index = 0; index < 16; index++){
@@ -175,7 +175,7 @@ void flx68000SaveState(uint8_t* data){
}
void flx68000LoadState(uint8_t* data){
uint64_t offset = 0;
uint32_t offset = 0;
uint8_t index;
for(index = 0; index < 16; index++){

View File

@@ -6,7 +6,7 @@
void flx68000Init(void);
void flx68000Reset(void);
uint64_t flx68000StateSize(void);
uint32_t flx68000StateSize(void);
void flx68000SaveState(uint8_t* data);
void flx68000LoadState(uint8_t* data);
void flx68000LoadStateFinished(void);

View File

@@ -67,8 +67,8 @@ void pdiUsbD12Reset(void){
}
}
uint64_t pdiUsbD12StateSize(void){
uint64_t size = 0;
uint32_t pdiUsbD12StateSize(void){
uint32_t size = 0;
size += sizeof(uint8_t);
size += sizeof(uint64_t);
@@ -79,7 +79,7 @@ uint64_t pdiUsbD12StateSize(void){
}
void pdiUsbD12SaveState(uint8_t* data){
uint64_t offset = 0;
uint32_t offset = 0;
uint8_t index;
writeStateValue8(data + offset, pdiUsbD12Command);
@@ -97,7 +97,7 @@ void pdiUsbD12SaveState(uint8_t* data){
}
void pdiUsbD12LoadState(uint8_t* data){
uint64_t offset = 0;
uint32_t offset = 0;
uint8_t index;
pdiUsbD12Command = readStateValue8(data + offset);

View File

@@ -5,7 +5,7 @@
#include <stdbool.h>
void pdiUsbD12Reset(void);
uint64_t pdiUsbD12StateSize(void);
uint32_t pdiUsbD12StateSize(void);
void pdiUsbD12SaveState(uint8_t* data);
void pdiUsbD12LoadState(uint8_t* data);

View File

@@ -5,9 +5,9 @@
#include <stdbool.h>
//endian
static inline void swap16BufferIfLittle(uint8_t* buffer, uint64_t count){
static inline void swap16BufferIfLittle(uint8_t* buffer, uint32_t count){
#if !defined(EMU_BIG_ENDIAN)
uint64_t index;
uint32_t index;
//count specifys the number of uint16_t's that need to be swapped, the uint8_t* is because of alignment restrictions that crash on some platforms
count *= sizeof(uint16_t);
for(index = 0; index < count; index += 2){

View File

@@ -220,7 +220,7 @@ bool sdCardExchangeBit(bool bit){
case SEND_CID:{
uint8_t cid[16];
sdCardGetCsd(cid);
sdCardGetCid(cid);
if(!palmSdCard.allowInvalidCrc)
cid[15] = sdCardCrc7(cid, 15);
sdCardDoResponseR1(palmSdCard.inIdleState);

View File

@@ -96,7 +96,7 @@ static void sdCardGetCsd(uint8_t* csd){
memcpy(csd, sdCardCsd, 16);
//set device size field(in multiples of 256k right now, the multiplier size also scales based on chip size), needed to get size
deviceSize = palmSdCard.flashChip.size / SD_CARD_BLOCK_SIZE / SD_CARD_BLOCK_SIZE;//to calculate the card capacity excluding security area ((device size + 1) * device size multiplier * max read data block length) bytes
deviceSize = palmSdCard.flashChip.size / SD_CARD_BLOCK_SIZE / 512;//to calculate the card capacity excluding security area ((device size + 1) * device size multiplier * max read data block length) bytes
csd[6] = csd[6] & 0xFC | deviceSize >> 10 & 0x03;
csd[7] = deviceSize >> 2 & 0xFF;
csd[8] = csd[8] & 0x3F | deviceSize << 6 & 0xC0;

View File

@@ -127,8 +127,8 @@ void sed1376Reset(void){
sed1376Registers[PWR_SAVE_CFG] = 0x80;
}
uint64_t sed1376StateSize(void){
uint64_t size = 0;
uint32_t sed1376StateSize(void){
uint32_t size = 0;
size += SED1376_REG_SIZE;
size += SED1376_LUT_SIZE * 3;
@@ -138,7 +138,7 @@ uint64_t sed1376StateSize(void){
}
void sed1376SaveState(uint8_t* data){
uint64_t offset = 0;
uint32_t offset = 0;
memcpy(data + offset, sed1376Registers, SED1376_REG_SIZE);
offset += SED1376_REG_SIZE;
@@ -153,7 +153,7 @@ void sed1376SaveState(uint8_t* data){
}
void sed1376LoadState(uint8_t* data){
uint64_t offset = 0;
uint32_t offset = 0;
uint16_t index;
memcpy(sed1376Registers, data + offset, SED1376_REG_SIZE);

View File

@@ -8,7 +8,7 @@ extern uint16_t sed1376Framebuffer[];
extern uint8_t sed1376Ram[];
void sed1376Reset(void);
uint64_t sed1376StateSize(void);
uint32_t sed1376StateSize(void);
void sed1376SaveState(uint8_t* data);
void sed1376LoadState(uint8_t* data);