sgdk
dma.h
Go to the documentation of this file.
00001 
00010 #include "config.h"
00011 #include "types.h"
00012 
00013 #ifndef _DMA_H_
00014 #define _DMA_H_
00015 
00016 
00021 #define DMA_VRAM    0
00022 
00026 #define DMA_CRAM    1
00027 
00031 #define DMA_VSRAM   2
00032 
00033 #define DMA_QUEUE_SIZE_DEFAULT          80
00034 #define DMA_QUEUE_SIZE_MIN              32
00035 
00036 #define DMA_TRANSFER_CAPACITY_NTSC      7200
00037 #define DMA_TRANSFER_CAPACITY_PAL_LOW   8000
00038 #define DMA_TRANSFER_CAPACITY_PAL_MAX   15000
00039 
00040 // better to allocate a bit more than DMA capacity
00041 #define DMA_BUFFER_SIZE_NTSC            8192
00042 #define DMA_BUFFER_SIZE_PAL_LOW         8192
00043 #define DMA_BUFFER_SIZE_PAL_MAX         (14 * 1024)
00044 #define DMA_BUFFER_SIZE_MIN             (2 * 1024)
00045 
00046 
00051 typedef enum
00052 {
00053     CPU = 0,            
00054     DMA = 1,            
00055     DMA_QUEUE = 2,      
00056     DMA_QUEUE_COPY = 3  
00057 } TransferMethod;
00058 
00059 
00064 typedef struct
00065 {
00066     u16 regLenL;        // (newLen & 0xFF) | 0x9300;
00067     u16 regLenH;        // ((newLen >> 8) & 0xFF) | 0x9400;
00068     u32 regAddrMStep;   // (((addr << 7) & 0xFF0000) | 0x96008F00) + step;
00069     u32 regAddrHAddrL;  // ((addr >> 1) & 0x7F00FF) | 0x97009500;
00070     u32 regCtrlWrite;   // VDP_DMA_VRAMCOPY_ADDR(to)
00071 } DMAOpInfo;
00072 
00073 
00078 extern DMAOpInfo *dmaQueues;
00083 extern u16* dmaDataBuffer;
00084 
00094 void DMA_init(void);
00114 void DMA_initEx(u16 size, u16 capacity, u16 bufferSize);
00115 
00124 bool DMA_getAutoFlush(void);
00133 void DMA_setAutoFlush(bool value);
00140 u16 DMA_getMaxQueueSize(void);
00152 void DMA_setMaxQueueSize(u16 value);
00160 void DMA_setMaxQueueSizeToDefault(void);
00168 u16 DMA_getMaxTransferSize(void);
00181 void DMA_setMaxTransferSize(u16 value);
00188 void DMA_setMaxTransferSizeToDefault(void);
00196 u16 DMA_getBufferSize(void);
00210 void DMA_setBufferSize(u16 value);
00217 void DMA_setBufferSizeToDefault(void);
00224 bool DMA_getIgnoreOverCapacity(void);
00235 void DMA_setIgnoreOverCapacity(bool value);
00236 
00242 void DMA_clearQueue(void);
00255 void DMA_flushQueue(void);
00256 
00261 u16 DMA_getQueueSize(void);
00268 u16 DMA_getQueueTransferSize(void);
00269 
00283 void* DMA_allocateTemp(u16 len);
00293 void DMA_releaseTemp(u16 len);
00294 
00326 bool DMA_transfer(TransferMethod tm, u8 location, void* from, u16 to, u16 len, u16 step);
00327 
00345 bool DMA_canQueue(u8 location, u16 len);
00373 void* DMA_allocateAndQueueDma(u8 location, u16 to, u16 len, u16 step);
00400 bool DMA_copyAndQueueDma(u8 location, void* from, u16 to, u16 len, u16 step);
00426 bool DMA_queueDma(u8 location, void* from, u16 to, u16 len, u16 step);
00432 bool DMA_queueDmaFast(u8 location, void* from, u16 to, u16 len, u16 step);
00433 
00456 void DMA_doDma(u8 location, void* from, u16 to, u16 len, s16 step);
00462 void DMA_doDmaFast(u8 location, void* from, u16 to, u16 len, s16 step);
00463 
00485 void DMA_doCPUCopy(u8 location, void* from, u16 to, u16 len, s16 step);
00501 void DMA_doCPUCopyDirect(u32 cmd, void* from, u16 len, s16 step);
00502 
00518 void DMA_doVRamFill(u16 to, u16 len, u8 value, s16 step);
00533 void DMA_doVRamCopy(u16 from, u16 to, u16 len, s16 step);
00534 
00539 void DMA_waitCompletion(void);
00540 
00541 
00542 #endif // _DMA_H_
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines