Skip to content

Commit 40035b2

Browse files
committed
Add support for 8/16 bit dev9 rxfifo reads
1 parent a19b374 commit 40035b2

1 file changed

Lines changed: 24 additions & 16 deletions

File tree

pcsx2/DEV9/smap.cpp

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,20 @@ void emac3_write(u32 addr)
323323
dev9Ru32(addr) = wswap(value);
324324
}
325325

326+
static u32 smap_readRxfifo(int bytes)
327+
{
328+
int result = 0;
329+
int rd_ptr = dev9Ru32(SMAP_R_RXFIFO_RD_PTR) & 16383;
330+
331+
for (int i = 0; i < bytes; ++i) {
332+
u8 byte = dev9.rxfifo[(rd_ptr + i) & 16383];
333+
result |= (u32)byte << (i * 8);
334+
}
335+
336+
dev9Ru32(SMAP_R_RXFIFO_RD_PTR) = (rd_ptr + bytes) & 16383;
337+
return result;
338+
}
339+
326340
u8 smap_read8(u32 addr)
327341
{
328342
switch (addr)
@@ -333,16 +347,16 @@ u8 smap_read8(u32 addr)
333347
case SMAP_R_RXFIFO_FRAME_CNT:
334348
DevCon.WriteLn("DEV9: SMAP_R_RXFIFO_FRAME_CNT read 8");
335349
break;
336-
350+
case SMAP_R_RXFIFO_DATA:
351+
DevCon.WriteLn("DEV9: SMAP_R_RXFIFO_DATA read 8");
352+
return (u8)smap_readRxfifo(1);
337353
case SMAP_R_BD_MODE:
338354
return dev9.bd_swap;
339-
340355
default:
341-
DevCon.WriteLn("DEV9: SMAP : Unknown 8 bit read @ %X,v=%X", addr, dev9Ru8(addr));
342-
return dev9Ru8(addr);
356+
DevCon.WriteLn("DEV9: SMAP: Unknown 8 bit read");
343357
}
344358

345-
DevCon.WriteLn("DEV9: SMAP : error , 8 bit read @ %X,v=%X", addr, dev9Ru8(addr));
359+
DevCon.WriteLn("DEV9: SMAP: 8 bit read @ %X,v=%X", addr, dev9Ru8(addr));
346360
return dev9Ru8(addr);
347361
}
348362

@@ -496,6 +510,10 @@ u16 smap_read16(u32 addr)
496510
return dev9Ru16(addr);
497511
}
498512
#endif
513+
514+
if (addr == SMAP_R_RXFIFO_DATA)
515+
return (u16)smap_readRxfifo(2);
516+
499517
return rv;
500518
}
501519

@@ -518,18 +536,8 @@ u32 smap_read32(u32 addr)
518536
case SMAP_R_EMAC3_STA_CTRL_L:
519537
DevCon.WriteLn("DEV9: SMAP_R_EMAC3_STA_CTRL_L 32bit read value %x", dev9Ru32(addr));
520538
return dev9Ru32(addr);
521-
522539
case SMAP_R_RXFIFO_DATA:
523-
{
524-
int rd_ptr = dev9Ru32(SMAP_R_RXFIFO_RD_PTR) & 16383;
525-
526-
const int rv = *((u32*)(dev9.rxfifo + rd_ptr));
527-
528-
dev9Ru32(SMAP_R_RXFIFO_RD_PTR) = ((rd_ptr + 4) & 16383);
529-
530-
//DevCon.WriteLn("DEV9: SMAP_R_RXFIFO_DATA 32bit read %x", rv);
531-
return rv;
532-
}
540+
return smap_readRxfifo(4);
533541
default:
534542
DevCon.WriteLn("DEV9: SMAP : Unknown 32 bit read @ %X,v=%X", addr, dev9Ru32(addr));
535543
return dev9Ru32(addr);

0 commit comments

Comments
 (0)