mirror of
https://github.com/d0k3/GodMode9.git
synced 2025-06-26 13:42:47 +00:00
Improve virtual cart eject / insert handling
This commit is contained in:
parent
0379ba2cd5
commit
ae2adbceea
@ -52,12 +52,6 @@ u32 GetCartName(char* name, CartData* cdata) {
|
||||
} else return 1;
|
||||
}
|
||||
|
||||
u32 CheckCartId(u32 cart_id) {
|
||||
if (!CART_INSERTED) return 0xFFFFFFFF;
|
||||
u32 curr_cart_id = Cart_GetID();
|
||||
return (curr_cart_id == cart_id) ? 0 : curr_cart_id;
|
||||
}
|
||||
|
||||
u32 InitCardRead(CartData* cdata) {
|
||||
memset(cdata, 0x00, sizeof(CartData));
|
||||
cdata->cart_type = CART_NONE;
|
||||
|
@ -21,7 +21,6 @@ typedef struct {
|
||||
} __attribute__((packed)) CartData;
|
||||
|
||||
u32 GetCartName(char* name, CartData* cdata);
|
||||
u32 CheckCartId(u32 cart_id);
|
||||
u32 InitCardRead(CartData* cdata);
|
||||
u32 ReadCartSectors(u8* buffer, u32 sector, u32 count, CartData* cdata);
|
||||
u32 ReadCartBytes(u8* buffer, u32 offset, u32 count, CartData* cdata);
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "platform.h"
|
||||
#include "nand.h"
|
||||
#include "virtual.h"
|
||||
#include "vcart.h"
|
||||
#include "image.h"
|
||||
|
||||
#define N_PANES 2
|
||||
@ -1160,8 +1161,11 @@ u32 GodMode() {
|
||||
InitExtFS();
|
||||
}
|
||||
}
|
||||
} else if ((pad_state & (CART_INSERT|CART_EJECT)) && (curr_drvtype & DRV_CART)) {
|
||||
GetDirContents(current_dir, current_path); // refresh cart dir contents
|
||||
} else if (pad_state & (CART_INSERT|CART_EJECT)) {
|
||||
if (!InitVCartDrive() && (pad_state & CART_INSERT)) // reinit virtual cart drive
|
||||
ShowPrompt(false, "Cart init failed!");
|
||||
if (!(*current_path) || (curr_drvtype & DRV_CART))
|
||||
GetDirContents(current_dir, current_path); // refresh dir contents
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,14 +4,19 @@
|
||||
#define VFLAG_PRIV_HDR (1<<31)
|
||||
|
||||
static CartData* cdata = (CartData*) VCART_BUFFER; // 128kB reserved (~64kB required)
|
||||
static bool cart_init = false;
|
||||
|
||||
u32 InitVCartDrive(void) {
|
||||
cart_init = (InitCardRead(cdata) == 0);
|
||||
return cart_init ? cdata->cart_id : 0;
|
||||
}
|
||||
|
||||
bool ReadVCartDir(VirtualFile* vfile, VirtualDir* vdir) {
|
||||
if ((vdir->index < 0) &&
|
||||
(CheckCartId(cdata->cart_id) != 0) &&
|
||||
(InitCardRead(cdata) != 0))
|
||||
return false;
|
||||
if ((vdir->index < 0) && !cart_init)
|
||||
InitVCartDrive();
|
||||
|
||||
if (++vdir->index < 3) {
|
||||
if (!cart_init) return false;
|
||||
char name[24];
|
||||
GetCartName(name, cdata);
|
||||
memset(vfile, 0, sizeof(VirtualFile));
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include "common.h"
|
||||
#include "virtual.h"
|
||||
|
||||
u32 InitVCartDrive(void);
|
||||
bool ReadVCartDir(VirtualFile* vfile, VirtualDir* vdir);
|
||||
int ReadVCartFile(const VirtualFile* vfile, u8* buffer, u32 offset, u32 count);
|
||||
// int WriteVCartFile(const VirtualFile* vfile, const u8* buffer, u32 offset, u32 count); // no writes
|
||||
|
Loading…
x
Reference in New Issue
Block a user