MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / IOPWriteFIFO

Function IOPWriteFIFO

pcsx2/DEV9/DEV9.cpp:317–350  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

315 Console.Error("DEV9: UNDERFLOW BY IOP");
316}
317void IOPWriteFIFO()
318{
319 pxAssert((dev9.dma_iop_ptr != nullptr) && (dev9.xfr_ctrl & SPD_XFR_DMAEN));
320 pxAssert(dev9.xfr_ctrl & SPD_XFR_WRITE);
321
322 const int unread = (dev9.fifo_bytes_write - dev9.fifo_bytes_read);
323 const int space = (SPD_DBUF_AVAIL_MAX * 512 - unread);
324 const int base = dev9.fifo_bytes_write % (SPD_DBUF_AVAIL_MAX * 512);
325
326 const int remain = dev9.dma_iop_size - dev9.dma_iop_transfered;
327 const int write = std::min(remain, space);
328
329 pxAssert(unread <= SPD_DBUF_AVAIL_MAX * 512);
330
331 if (write == 0)
332 return;
333
334 if (base + write > SPD_DBUF_AVAIL_MAX * 512)
335 {
336 const int was = SPD_DBUF_AVAIL_MAX * 512 - base;
337
338 std::memcpy(dev9.fifo + base, dev9.dma_iop_ptr + dev9.dma_iop_transfered, was);
339 std::memcpy(dev9.fifo + base, dev9.dma_iop_ptr + dev9.dma_iop_transfered + was, write - was);
340 }
341 else
342 {
343 std::memcpy(dev9.fifo + base, dev9.dma_iop_ptr + dev9.dma_iop_transfered, write);
344 }
345
346 dev9.dma_iop_transfered += write;
347 dev9.fifo_bytes_write += write;
348 if ((dev9.fifo_bytes_write - dev9.fifo_bytes_read) > SPD_DBUF_AVAIL_MAX * 512)
349 Console.Error("DEV9: OVERFLOW BY IOP");
350}
351void FIFOIntr()
352{
353 //FIFO Buffer Full/Empty

Callers 1

DEV9runFIFOFunction · 0.85

Calls 2

minFunction · 0.50
ErrorMethod · 0.45

Tested by

no test coverage detected