aboutsummaryrefslogtreecommitdiff
path: root/src/DSi_SD.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/DSi_SD.h')
-rw-r--r--src/DSi_SD.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/DSi_SD.h b/src/DSi_SD.h
index d223fac..ae8cd11 100644
--- a/src/DSi_SD.h
+++ b/src/DSi_SD.h
@@ -19,6 +19,10 @@
#ifndef DSI_SD_H
#define DSI_SD_H
+#include <string.h>
+#include "FIFO.h"
+
+
class DSi_SDDevice;
@@ -32,7 +36,9 @@ public:
void DoSavestate(Savestate* file);
+ static void FinishSend(u32 param);
void SendResponse(u32 val, bool last);
+ void SendData(u8* data, u32 len, bool last);
u16 Read(u32 addr);
void Write(u32 addr, u16 val);
@@ -43,16 +49,28 @@ private:
u16 PortSelect;
u16 SoftReset;
u16 SDClock;
+ u16 SDOption;
u32 IRQStatus; // IF
u32 IRQMask; // ~IE
+ u16 DataCtl;
+ u16 Data32IRQ;
+ u32 DataMode; // 0=16bit 1=32bit
+ u16 BlockCount16, BlockCount32, BlockCountInternal;
+ u16 BlockLen16, BlockLen32;
+ u16 StopAction;
+
u16 Command;
u32 Param;
u16 ResponseBuffer[8];
+ FIFO<u16>* DataFIFO[2];
+ u32 CurFIFO; // FIFO accessible for read/write
+
DSi_SDDevice* Ports[2];
+ void ClearIRQ(u32 irq);
void SetIRQ(u32 irq);
};
@@ -64,6 +82,7 @@ public:
~DSi_SDDevice() {}
virtual void SendCMD(u8 cmd, u32 param) = 0;
+ virtual void ContinueTransfer() = 0;
protected:
DSi_SDHost* Host;
@@ -81,6 +100,8 @@ public:
void SendCMD(u8 cmd, u32 param);
void SendACMD(u8 cmd, u32 param);
+ void ContinueTransfer();
+
private:
bool Internal;
char FilePath[1024];
@@ -92,6 +113,10 @@ private:
u32 CSR;
u32 OCR;
u32 RCA;
+ u8 SCR[8];
+ u8 SSR[64];
+
+ u32 BlockSize;
void SetState(u32 state) { CSR &= ~(0xF << 9); CSR |= (state << 9); }
};