sgdk
|
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 64 00034 #define DMA_QUEUE_SIZE_MIN 20 00035 00036 #define DMA_TRANSFER_CAPACITY_NTSC 7200 00037 #define DMA_TRANSFER_CAPACITY_PAL 15000 00038 00039 #define DMA_BUFFER_SIZE_NTSC (8 * 1024) 00040 #define DMA_BUFFER_SIZE_PAL (14 * 1024) 00041 #define DMA_BUFFER_SIZE_MIN (2 * 1024) 00042 00043 00048 typedef enum 00049 { 00050 CPU = 0, 00051 DMA = 1, 00052 DMA_QUEUE = 2, 00053 DMA_QUEUE_COPY = 3 00054 } TransferMethod; 00055 00056 00061 typedef struct 00062 { 00063 u32 regLen; // ((len | (len << 8)) & 0xFF00FF) | 0x94009300; 00064 u32 regAddrMStep; // (((addr << 7) & 0xFF0000) | 0x96008F00) + step; 00065 u32 regAddrHAddrL; // ((addr >> 1) & 0x7F00FF) | 0x97009500; 00066 u32 regCtrlWrite; // GFX_DMA_VRAMCOPY_ADDR(to) 00067 } DMAOpInfo; 00068 00069 00074 extern DMAOpInfo *dmaQueues; 00075 00076 00086 void DMA_init(); 00106 void DMA_initEx(u16 size, u16 capacity, u16 bufferSize); 00107 00116 u16 DMA_getAutoFlush(); 00125 void DMA_setAutoFlush(bool value); 00132 u16 DMA_getMaxQueueSize(); 00144 void DMA_setMaxQueueSize(u16 value); 00152 void DMA_setMaxQueueSizeToDefault(); 00160 u16 DMA_getMaxTransferSize(); 00173 void DMA_setMaxTransferSize(u16 value); 00180 void DMA_setMaxTransferSizeToDefault(); 00188 u16 DMA_getBufferSize(); 00202 void DMA_setBufferSize(u16 value); 00209 void DMA_setBufferSizeToDefault(); 00216 u16 DMA_getIgnoreOverCapacity(); 00227 void DMA_setIgnoreOverCapacity(bool value); 00228 00234 void DMA_clearQueue(); 00247 void DMA_flushQueue(); 00248 00253 u16 DMA_getQueueSize(); 00260 u32 DMA_getQueueTransferSize(); 00261 00275 void* DMA_allocateTemp(u16 len); 00285 void DMA_releaseTemp(u16 len); 00286 00318 bool DMA_transfer(TransferMethod tm, u8 location, void* from, u16 to, u16 len, u16 step); 00319 00346 void* DMA_allocateAndQueueDma(u8 location, u16 to, u16 len, u16 step); 00372 bool DMA_copyAndQueueDma(u8 location, void* from, u16 to, u16 len, u16 step); 00398 bool DMA_queueDma(u8 location, void* from, u16 to, u16 len, u16 step); 00421 void DMA_doDma(u8 location, void* from, u16 to, u16 len, s16 step); 00443 void DMA_doCPUCopy(u8 location, void* from, u16 to, u16 len, s16 step); 00459 void DMA_doCPUCopyDirect(u32 cmd, void* from, u16 len, s16 step); 00460 00476 void DMA_doVRamFill(u16 to, u16 len, u8 value, s16 step); 00491 void DMA_doVRamCopy(u16 from, u16 to, u16 len, s16 step); 00492 00497 void DMA_waitCompletion(); 00498 00499 00500 #endif // _DMA_H_