Logo Search packages:      
Sourcecode: scummvm version File versions  Download package

disc_io.h

#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) ;


00205 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


Generated by  Doxygen 1.6.0   Back to index