Skip to content

Commit e7813f6

Browse files
committed
Attempt to implement the CMD protocol
1 parent d5f85a6 commit e7813f6

File tree

6 files changed

+207
-46
lines changed

6 files changed

+207
-46
lines changed

src/core.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ Core::Core(std::string ndsRom, std::string gbaRom, int id, int ndsRomFd,
6969
tasks[TIMER7_OVERFLOW2] = std::bind(&Timers::overflow, &timers[1], 2);
7070
tasks[TIMER7_OVERFLOW3] = std::bind(&Timers::overflow, &timers[1], 3);
7171
tasks[WIFI_COUNT_MS] = std::bind(&Wifi::countMs, &wifi);
72+
tasks[WIFI_TRANS_REPLY] = std::bind(&Wifi::transmitPacket, &wifi, CMD_REPLY);
73+
tasks[WIFI_TRANS_ACK] = std::bind(&Wifi::transmitPacket, &wifi, CMD_ACK);
7274

7375
// Schedule initial tasks for NDS mode
7476
schedule(RESET_CYCLES, 0x7FFFFFFF);

src/core.h

+2
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ enum SchedTask
8686
TIMER7_OVERFLOW2,
8787
TIMER7_OVERFLOW3,
8888
WIFI_COUNT_MS,
89+
WIFI_TRANS_REPLY,
90+
WIFI_TRANS_ACK,
8991
MAX_TASKS
9092
};
9193

src/memory.cpp

+17-10
Original file line numberDiff line numberDiff line change
@@ -1135,15 +1135,18 @@ template <typename T> T Memory::ioRead7(uint32_t address)
11351135
DEF_IO16(0x480006C, data = core->wifi.readWTxbufCount()) // W_TXBUF_COUNT
11361136
DEF_IO16(0x4800074, data = core->wifi.readWTxbufGap()) // W_TXBUF_GAP
11371137
DEF_IO16(0x4800076, data = core->wifi.readWTxbufGapdisp()) // W_TXBUF_GAPDISP
1138-
DEF_IO16(0x4800080, data = core->wifi.readWTxbufLoc(4)) // W_TXBUF_BEACON
1138+
DEF_IO16(0x4800080, data = core->wifi.readWTxbufLoc(BEACON_FRAME)) // W_TXBUF_BEACON
11391139
DEF_IO16(0x480008C, data = core->wifi.readWBeaconInt()) // W_BEACON_INT
1140-
DEF_IO16(0x4800090, data = core->wifi.readWTxbufLoc(1)) // W_TXBUF_CMD
1141-
DEF_IO16(0x48000A0, data = core->wifi.readWTxbufLoc(0)) // W_TXBUF_LOC1
1142-
DEF_IO16(0x48000A4, data = core->wifi.readWTxbufLoc(2)) // W_TXBUF_LOC2
1143-
DEF_IO16(0x48000A8, data = core->wifi.readWTxbufLoc(3)) // W_TXBUF_LOC3
1140+
DEF_IO16(0x4800090, data = core->wifi.readWTxbufLoc(CMD_FRAME)) // W_TXBUF_CMD
1141+
DEF_IO16(0x4800094, data = core->wifi.readWTxbufReply1()) // W_TXBUF_REPLY1
1142+
DEF_IO16(0x4800098, data = core->wifi.readWTxbufReply2()) // W_TXBUF_REPLY2
1143+
DEF_IO16(0x48000A0, data = core->wifi.readWTxbufLoc(LOC1_FRAME)) // W_TXBUF_LOC1
1144+
DEF_IO16(0x48000A4, data = core->wifi.readWTxbufLoc(LOC2_FRAME)) // W_TXBUF_LOC2
1145+
DEF_IO16(0x48000A8, data = core->wifi.readWTxbufLoc(LOC3_FRAME)) // W_TXBUF_LOC3
11441146
DEF_IO16(0x48000B0, data = core->wifi.readWTxreqRead()) // W_TXREQ_READ
11451147
DEF_IO16(0x48000B8, data = core->wifi.readWTxstat()) // W_TXSTAT
11461148
DEF_IO16(0x48000E8, data = core->wifi.readWUsCountcnt()) // W_US_COUNTCNT
1149+
DEF_IO16(0x48000EE, data = core->wifi.readWCmdCountcnt()) // W_CMD_COUNTCNT
11471150
DEF_IO16(0x48000EA, data = core->wifi.readWUsComparecnt()) // W_US_COMPARECNT
11481151
DEF_IO16(0x48000F0, data = core->wifi.readWUsCompare(0)) // W_US_COMPARE0
11491152
DEF_IO16(0x48000F2, data = core->wifi.readWUsCompare(1)) // W_US_COMPARE1
@@ -1154,6 +1157,7 @@ template <typename T> T Memory::ioRead7(uint32_t address)
11541157
DEF_IO16(0x48000FC, data = core->wifi.readWUsCount(2)) // W_US_COUNT2
11551158
DEF_IO16(0x48000FE, data = core->wifi.readWUsCount(3)) // W_US_COUNT3
11561159
DEF_IO16(0x4800110, data = core->wifi.readWPreBeacon()) // W_PRE_BEACON
1160+
DEF_IO16(0x4800118, data = core->wifi.readWCmdCount()) // W_CMD_COUNT
11571161
DEF_IO16(0x480011C, data = core->wifi.readWBeaconCount()) // W_BEACON_COUNT
11581162
DEF_IO16(0x4800120, data = core->wifi.readWConfig(0)) // W_CONFIG_120
11591163
DEF_IO16(0x4800122, data = core->wifi.readWConfig(1)) // W_CONFIG_122
@@ -1741,16 +1745,18 @@ template <typename T> void Memory::ioWrite7(uint32_t address, T value)
17411745
DEF_IO16(0x4800070, core->wifi.writeWTxbufWrData(IOWR_PARAMS)) // W_TXBUF_WR_DATA
17421746
DEF_IO16(0x4800074, core->wifi.writeWTxbufGap(IOWR_PARAMS)) // W_TXBUF_GAP
17431747
DEF_IO16(0x4800076, core->wifi.writeWTxbufGapdisp(IOWR_PARAMS)) // W_TXBUF_GAPDISP
1744-
DEF_IO16(0x4800080, core->wifi.writeWTxbufLoc(4, IOWR_PARAMS)) // W_TXBUF_BEACON
1748+
DEF_IO16(0x4800080, core->wifi.writeWTxbufLoc(BEACON_FRAME, IOWR_PARAMS)) // W_TXBUF_BEACON
17451749
DEF_IO16(0x480008C, core->wifi.writeWBeaconInt(IOWR_PARAMS)) // W_BEACON_INT
1746-
DEF_IO16(0x4800090, core->wifi.writeWTxbufLoc(1, IOWR_PARAMS)) // W_TXBUF_CMD
1747-
DEF_IO16(0x48000A0, core->wifi.writeWTxbufLoc(0, IOWR_PARAMS)) // W_TXBUF_LOC1
1748-
DEF_IO16(0x48000A4, core->wifi.writeWTxbufLoc(2, IOWR_PARAMS)) // W_TXBUF_LOC2
1749-
DEF_IO16(0x48000A8, core->wifi.writeWTxbufLoc(3, IOWR_PARAMS)) // W_TXBUF_LOC3
1750+
DEF_IO16(0x4800090, core->wifi.writeWTxbufLoc(CMD_FRAME, IOWR_PARAMS)) // W_TXBUF_CMD
1751+
DEF_IO16(0x4800094, core->wifi.writeWTxbufReply1(IOWR_PARAMS)) // W_TXBUF_REPLY1
1752+
DEF_IO16(0x48000A0, core->wifi.writeWTxbufLoc(LOC1_FRAME, IOWR_PARAMS)) // W_TXBUF_LOC1
1753+
DEF_IO16(0x48000A4, core->wifi.writeWTxbufLoc(LOC2_FRAME, IOWR_PARAMS)) // W_TXBUF_LOC2
1754+
DEF_IO16(0x48000A8, core->wifi.writeWTxbufLoc(LOC3_FRAME, IOWR_PARAMS)) // W_TXBUF_LOC3
17501755
DEF_IO16(0x48000AC, core->wifi.writeWTxreqReset(IOWR_PARAMS)) // W_TXREQ_RESET
17511756
DEF_IO16(0x48000AE, core->wifi.writeWTxreqSet(IOWR_PARAMS)) // W_TXREQ_SET
17521757
DEF_IO16(0x48000E8, core->wifi.writeWUsCountcnt(IOWR_PARAMS)) // W_US_COUNTCNT
17531758
DEF_IO16(0x48000EA, core->wifi.writeWUsComparecnt(IOWR_PARAMS)) // W_US_COMPARECNT
1759+
DEF_IO16(0x48000EE, core->wifi.writeWCmdCountcnt(IOWR_PARAMS)) // W_CMD_COUNTCNT
17541760
DEF_IO16(0x48000F0, core->wifi.writeWUsCompare(0, IOWR_PARAMS)) // W_US_COMPARE0
17551761
DEF_IO16(0x48000F2, core->wifi.writeWUsCompare(1, IOWR_PARAMS)) // W_US_COMPARE1
17561762
DEF_IO16(0x48000F4, core->wifi.writeWUsCompare(2, IOWR_PARAMS)) // W_US_COMPARE2
@@ -1760,6 +1766,7 @@ template <typename T> void Memory::ioWrite7(uint32_t address, T value)
17601766
DEF_IO16(0x48000FC, core->wifi.writeWUsCount(2, IOWR_PARAMS)) // W_US_COUNT2
17611767
DEF_IO16(0x48000FE, core->wifi.writeWUsCount(3, IOWR_PARAMS)) // W_US_COUNT3
17621768
DEF_IO16(0x4800110, core->wifi.writeWPreBeacon(IOWR_PARAMS)) // W_PRE_BEACON
1769+
DEF_IO16(0x4800118, core->wifi.writeWCmdCount(IOWR_PARAMS)) // W_CMD_COUNT
17631770
DEF_IO16(0x480011C, core->wifi.writeWBeaconCount(IOWR_PARAMS)) // W_BEACON_COUNT
17641771
DEF_IO16(0x4800120, core->wifi.writeWConfig(0, IOWR_PARAMS)) // W_CONFIG_120
17651772
DEF_IO16(0x4800122, core->wifi.writeWConfig(1, IOWR_PARAMS)) // W_CONFIG_122

src/save_states.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
#include "core.h"
2222

2323
const char *SaveStates::stateTag = "NOOD";
24-
const uint32_t SaveStates::stateVersion = 1;
24+
const uint32_t SaveStates::stateVersion = 2;
2525

2626
void SaveStates::setState(std::string path, bool gba)
2727
{

0 commit comments

Comments
 (0)