1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
|
#ifndef DISC_IO_H
#define DISC_IO_H
//----------------------------------------------------------------------
// Customisable features
// Use DMA to read the card, remove this line to use normal reads/writes
// #define _CF_USE_DMA
// Allow buffers not aligned to 16 bits when reading files.
// Note that this will slow down access speed, so only use if you have to.
// It is also incompatible with DMA
#define _CF_ALLOW_UNALIGNED
#define _IO_ALLOW_UNALIGNED
// Device support options, added by www.neoflash.com
//#define SUPPORT_MPCF // comment out this line to remove GBA Movie Player support
//#define SUPPORT_M3CF // comment out this line to remove M3 Perfect CF support
//#define SUPPORT_M3SD // comment out this line to remove M3 Perfect SD support
//#define SUPPORT_SCCF // comment out this line to remove Supercard CF support
//#define SUPPORT_SCSD // comment out this line to remove Supercard SD support
//#define SUPPORT_NJSD
//#define SUPPORT_MMCF
//#define SUPPORT_EFA2 // comment out this line to remove EFA2 linker support
//#define SUPPORT_FCSR // comment out this line to remove GBA Flash Cart support
//#define SUPPORT_NMMC // comment out this line to remove Neoflash MK2 MMC Card support
// Disk caching options, added by www.neoflash.com
// Each additional sector cache uses 512 bytes of memory
// Disk caching is disabled on GBA to conserve memory
#define DISC_CACHE // uncomment this line to enable disc caching
#ifdef DS_BUILD_F
#define DISC_CACHE_COUNT 128 // maximum number of sectors to cache (512 bytes per sector)
#else
#define DISC_CACHE_COUNT 32 // maximum number of sectors to cache (512 bytes per sector)
#endif
//#define DISK_CACHE_DMA // use DMA for cache copies. If this is enabled, the data buffers must be word aligned
// This allows the code to build on an earlier version of libnds, before the register was renamed
#ifndef REG_EXMEMCNT
#define REG_EXMEMCNT REG_EXEMEMCNT
#endif
#ifndef REG_EXEMEMCNT
#define REG_EXEMEMCNT REG_EXMEMCNT
#endif
//----------------------------------------------------------------------
#if defined _CF_USE_DMA && defined _CF_ALLOW_UNALIGNED
#error You can not use both DMA and unaligned memory
#endif
// When compiling for NDS, make sure NDS is defined
#ifndef NDS
#if defined ARM9 || defined ARM7
#define NDS
#endif
#endif
#ifdef NDS
#include <nds/ndstypes.h>
#else
#include "gba_types.h"
#endif
// Disable NDS specific hardware and features if running on a GBA
#ifndef NDS
#undef SUPPORT_NMMC
#undef DISC_CACHE
#endif
/*
Interface for host program
*/
#define BYTE_PER_READ 512
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
DEVICE_NONE = 0,
DEVICE_M3SD,
DEVICE_MMCF,
DEVICE_M3CF,
DEVICE_MPCF,
DEVICE_SCCF,
DEVICE_NJSD,
DEVICE_SCSD,
DEVICE_NMMC,
DEVICE_DLDI
} FATDevice;
/*-----------------------------------------------------------------
disc_Init
Detects the inserted hardware and initialises it if necessary
bool return OUT: true if a suitable device was found
-----------------------------------------------------------------*/
extern bool disc_Init(void) ;
/*-----------------------------------------------------------------
disc_IsInserted
Is a usable disc inserted?
bool return OUT: true if a disc is inserted
-----------------------------------------------------------------*/
extern bool disc_IsInserted(void) ;
extern void disc_setEnable(int en);
extern FATDevice disc_getDeviceId();
void disc_getDldiId(char* id);
/*-----------------------------------------------------------------
disc_ReadSectors
Read 512 byte sector numbered "sector" into "buffer"
u32 sector IN: address of first 512 byte sector on disc to read
u8 numSecs IN: number of 512 byte sectors to read,
1 to 256 sectors can be read, 0 = 256
void* buffer OUT: pointer to 512 byte buffer to store data in
bool return OUT: true if successful
-----------------------------------------------------------------*/
extern bool disc_ReadSectors(u32 sector, u8 numSecs, void* buffer) ;
#define disc_ReadSector(sector,buffer) disc_ReadSectors(sector,1,buffer)
/*-----------------------------------------------------------------
disc_WriteSectors
Write 512 byte sector numbered "sector" from "buffer"
u32 sector IN: address of 512 byte sector on disc to write
u8 numSecs IN: number of 512 byte sectors to write ,
1 to 256 sectors can be read, 0 = 256
void* buffer IN: pointer to 512 byte buffer to read data from
bool return OUT: true if successful
-----------------------------------------------------------------*/
extern bool disc_WriteSectors(u32 sector, u8 numSecs, void* buffer) ;
#define disc_WriteSector(sector,buffer) disc_WriteSectors(sector,1,buffer)
/*-----------------------------------------------------------------
disc_ClearStatus
Tries to make the disc go back to idle mode
bool return OUT: true if the disc is idle
-----------------------------------------------------------------*/
extern bool disc_ClearStatus(void) ;
/*-----------------------------------------------------------------
disc_Shutdown
unload the disc interface
bool return OUT: true if successful
-----------------------------------------------------------------*/
extern bool disc_Shutdown(void) ;
/*-----------------------------------------------------------------
disc_HostType
Returns a unique u32 number identifying the host type
u32 return OUT: 0 if no host initialised, else the identifier of
the host
-----------------------------------------------------------------*/
extern u32 disc_HostType(void);
/*-----------------------------------------------------------------
disc_CacheFlush
Flushes any cache writes to disc
bool return OUT: true if successful, false if an error occurs
Added by www.neoflash.com
-----------------------------------------------------------------*/
#ifdef DISC_CACHE
extern bool disc_CacheFlush(void);
#else
static inline bool disc_CacheFlush(void)
{
return true;
}
#endif // DISC_CACHE
/*
Interface for IO libs
*/
#define FEATURE_MEDIUM_CANREAD 0x00000001
#define FEATURE_MEDIUM_CANWRITE 0x00000002
#define FEATURE_SLOT_GBA 0x00000010
#define FEATURE_SLOT_NDS 0x00000020
typedef bool (* FN_MEDIUM_STARTUP)(void) ;
typedef bool (* FN_MEDIUM_ISINSERTED)(void) ;
typedef bool (* FN_MEDIUM_READSECTORS)(u32 sector, u8 numSecs, void* buffer) ;
typedef bool (* FN_MEDIUM_WRITESECTORS)(u32 sector, u8 numSecs, void* buffer) ;
typedef bool (* FN_MEDIUM_CLEARSTATUS)(void) ;
typedef bool (* FN_MEDIUM_SHUTDOWN)(void) ;
typedef struct {
unsigned long ul_ioType ;
unsigned long ul_Features ;
FN_MEDIUM_STARTUP fn_StartUp ;
FN_MEDIUM_ISINSERTED fn_IsInserted ;
FN_MEDIUM_READSECTORS fn_ReadSectors ;
FN_MEDIUM_WRITESECTORS fn_WriteSectors ;
FN_MEDIUM_CLEARSTATUS fn_ClearStatus ;
FN_MEDIUM_SHUTDOWN fn_Shutdown ;
} IO_INTERFACE, *LPIO_INTERFACE ;
#ifdef __cplusplus
}
#endif
#endif // define DISC_IO_H
|