diff --git a/.DS_Store b/.DS_Store index 9c89f22..a60a7fb 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/psx/dev/mcd.c b/psx/dev/mcd.c index 444354e..81b64b4 100644 --- a/psx/dev/mcd.c +++ b/psx/dev/mcd.c @@ -1,76 +1,80 @@ -#include "mcd.h" -#include "../log.h" -#include -#include -#include -#include -#include -#ifdef _WIN32 -#include -#endif - -static void psx_mcd_ensure_parent(const char* path) { - if (!path) - return; - - char tmp[PATH_MAX]; - strncpy(tmp, path, sizeof(tmp) - 1); - tmp[sizeof(tmp) - 1] = '\0'; - - char* slash = strrchr(tmp, '/'); -#ifdef _WIN32 - char* bslash = strrchr(tmp, '\\'); - if (!slash || (bslash && bslash > slash)) - slash = bslash; -#endif - if (!slash || slash == tmp) - return; - - *slash = '\0'; - - struct stat st; - if (stat(tmp, &st) == 0) - return; - - mkdir(tmp, 0755); -} +#include "mcd.h" +#include "../log.h" +#include +#include +#include +#include +#include +#ifdef _WIN32 +#include +#endif + +static void psx_mcd_ensure_parent(const char* path) { + if (!path) + return; + + char tmp[PATH_MAX]; + strncpy(tmp, path, sizeof(tmp) - 1); + tmp[sizeof(tmp) - 1] = '\0'; + + char* slash = strrchr(tmp, '/'); +#ifdef _WIN32 + char* bslash = strrchr(tmp, '\\'); + if (!slash || (bslash && bslash > slash)) + slash = bslash; +#endif + if (!slash || slash == tmp) + return; + + *slash = '\0'; + + struct stat st; + if (stat(tmp, &st) == 0) + return; + +#ifdef _WIN32 + _mkdir(tmp); +#else + mkdir(tmp, 0755); +#endif +} psx_mcd_t* psx_mcd_create(void) { return (psx_mcd_t*)malloc(sizeof(psx_mcd_t)); } -int psx_mcd_init(psx_mcd_t* mcd, const char* path) { - memset(mcd, 0, sizeof(psx_mcd_t)); - - mcd->state = MCD_STATE_TX_HIZ; - mcd->flag = 0x08; +int psx_mcd_init(psx_mcd_t* mcd, const char* path) { + memset(mcd, 0, sizeof(psx_mcd_t)); + + mcd->state = MCD_STATE_TX_HIZ; + mcd->flag = 0x08; mcd->path = path; mcd->buf = malloc(MCD_MEMORY_SIZE); mcd->tx_data_ready = 0; - - memset(mcd->buf, 0, MCD_MEMORY_SIZE); - - if (!path) - return 0; - - psx_mcd_ensure_parent(path); - - FILE* file = fopen(path, "rb"); - - if (!file) { - // Create a blank card if missing - file = fopen(path, "wb"); - if (!file) - return 1; - - fwrite(mcd->buf, 1, MCD_MEMORY_SIZE, file); - fclose(file); - - // Re-open for read so subsequent logic flows - file = fopen(path, "rb"); - if (!file) - return 1; - } + + memset(mcd->buf, 0, MCD_MEMORY_SIZE); + + if (!path) + return 0; + + psx_mcd_ensure_parent(path); + + FILE* file = fopen(path, "rb"); + + if (!file) { + // Create a blank card if missing + file = fopen(path, "wb"); + if (!file) + return 1; + + fwrite(mcd->buf, 1, MCD_MEMORY_SIZE, file); + fclose(file); + + // Re-open for read so subsequent logic flows + file = fopen(path, "rb"); + if (!file) + return 1; + } if (!fread(mcd->buf, 1, MCD_MEMORY_SIZE, file)) return 2; @@ -200,7 +204,7 @@ uint8_t psx_mcd_read(psx_mcd_t* mcd) { } void psx_mcd_write(psx_mcd_t* mcd, uint8_t data) { - switch (mcd->state) { + switch (mcd->state) { case MCD_STATE_TX_FLG: mcd->mode = data; break; case MCD_R_STATE_RX_MSB: mcd->msb = data; break; case MCD_R_STATE_RX_LSB: { @@ -225,14 +229,14 @@ void psx_mcd_reset(psx_mcd_t* mcd) { mcd->state = MCD_STATE_TX_HIZ; } -void psx_mcd_destroy(psx_mcd_t* mcd) { - FILE* file = mcd->path ? fopen(mcd->path, "wb") : NULL; - - if (file) { - fwrite(mcd->buf, 1, MCD_MEMORY_SIZE, file); - fclose(file); - } - - free(mcd->buf); - free(mcd); -} +void psx_mcd_destroy(psx_mcd_t* mcd) { + FILE* file = mcd->path ? fopen(mcd->path, "wb") : NULL; + + if (file) { + fwrite(mcd->buf, 1, MCD_MEMORY_SIZE, file); + fclose(file); + } + + free(mcd->buf); + free(mcd); +}