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
|
#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_NMMC // comment out this line to remove Neoflash MK2 MMC Card support
#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_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_NJSD
#define SUPPORT_MMCF
// 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
#define DISC_CACHE_COUNT 32 // maximum number of sectors to cache (512 bytes per sector)
//#define DISK_CACHE_DMA // use DMA for cache copies. If this is enabled, the data buffers must be word aligned
//----------------------------------------------------------------------
#if defined _CF_USE_DMA && defined _CF_ALLOW_UNALIGNED
#error You can't 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/jtypes.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
/*-----------------------------------------------------------------
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);
/*-----------------------------------------------------------------
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
|