all repos — mgba @ 1b0d74f3dcb4725562aa47ef667543c00ce3ce56

mGBA Game Boy Advance Emulator

DS GX: Use CircleBufferRead/Write
Vicki Pfau vi@endrift.com
Tue, 21 Mar 2017 22:30:43 -0700
commit

1b0d74f3dcb4725562aa47ef667543c00ce3ce56

parent

1de5d4e330563d1cfd889534ba3c81979af607b7

1 files changed, 7 insertions(+), 35 deletions(-)

jump to
M src/ds/gx.csrc/ds/gx.c

@@ -116,29 +116,13 @@

static void _pullPipe(struct DSGX* gx) { if (CircleBufferSize(&gx->fifo) >= sizeof(struct DSGXEntry)) { struct DSGXEntry entry = { 0 }; - CircleBufferRead8(&gx->fifo, (int8_t*) &entry.command); - CircleBufferRead8(&gx->fifo, (int8_t*) &entry.params[0]); - CircleBufferRead8(&gx->fifo, (int8_t*) &entry.params[1]); - CircleBufferRead8(&gx->fifo, (int8_t*) &entry.params[2]); - CircleBufferRead8(&gx->fifo, (int8_t*) &entry.params[3]); - CircleBufferWrite8(&gx->pipe, entry.command); - CircleBufferWrite8(&gx->pipe, entry.params[0]); - CircleBufferWrite8(&gx->pipe, entry.params[1]); - CircleBufferWrite8(&gx->pipe, entry.params[2]); - CircleBufferWrite8(&gx->pipe, entry.params[3]); + CircleBufferRead(&gx->fifo, &entry, sizeof(entry)); + CircleBufferWrite(&gx->pipe, &entry, sizeof(entry)); } if (CircleBufferSize(&gx->fifo) >= sizeof(struct DSGXEntry)) { struct DSGXEntry entry = { 0 }; - CircleBufferRead8(&gx->fifo, (int8_t*) &entry.command); - CircleBufferRead8(&gx->fifo, (int8_t*) &entry.params[0]); - CircleBufferRead8(&gx->fifo, (int8_t*) &entry.params[1]); - CircleBufferRead8(&gx->fifo, (int8_t*) &entry.params[2]); - CircleBufferRead8(&gx->fifo, (int8_t*) &entry.params[3]); - CircleBufferWrite8(&gx->pipe, entry.command); - CircleBufferWrite8(&gx->pipe, entry.params[0]); - CircleBufferWrite8(&gx->pipe, entry.params[1]); - CircleBufferWrite8(&gx->pipe, entry.params[2]); - CircleBufferWrite8(&gx->pipe, entry.params[3]); + CircleBufferRead(&gx->fifo, &entry, sizeof(entry)); + CircleBufferWrite(&gx->pipe, &entry, sizeof(entry)); } }

@@ -680,11 +664,7 @@ first = false;

} else if (!gx->activeParams && cycles > cyclesLate) { break; } - CircleBufferRead8(&gx->pipe, (int8_t*) &entry.command); - CircleBufferRead8(&gx->pipe, (int8_t*) &entry.params[0]); - CircleBufferRead8(&gx->pipe, (int8_t*) &entry.params[1]); - CircleBufferRead8(&gx->pipe, (int8_t*) &entry.params[2]); - CircleBufferRead8(&gx->pipe, (int8_t*) &entry.params[3]); + CircleBufferRead(&gx->pipe, &entry, sizeof(entry)); if (gx->activeParams) { int index = _gxCommandParams[entry.command] - gx->activeParams;

@@ -1452,17 +1432,9 @@ if (!cycles) {

return; } if (CircleBufferSize(&gx->fifo) == 0 && CircleBufferSize(&gx->pipe) < (DS_GX_PIPE_SIZE * sizeof(entry))) { - CircleBufferWrite8(&gx->pipe, entry.command); - CircleBufferWrite8(&gx->pipe, entry.params[0]); - CircleBufferWrite8(&gx->pipe, entry.params[1]); - CircleBufferWrite8(&gx->pipe, entry.params[2]); - CircleBufferWrite8(&gx->pipe, entry.params[3]); + CircleBufferWrite(&gx->pipe, &entry, sizeof(entry)); } else if (CircleBufferSize(&gx->fifo) < (DS_GX_FIFO_SIZE * sizeof(entry))) { - CircleBufferWrite8(&gx->fifo, entry.command); - CircleBufferWrite8(&gx->fifo, entry.params[0]); - CircleBufferWrite8(&gx->fifo, entry.params[1]); - CircleBufferWrite8(&gx->fifo, entry.params[2]); - CircleBufferWrite8(&gx->fifo, entry.params[3]); + CircleBufferWrite(&gx->fifo, &entry, sizeof(entry)); } if (entry.command == DS_GX_CMD_BOX_TEST) { DSRegGXSTAT gxstat = gx->p->memory.io9[DS9_REG_GXSTAT_LO >> 1];