X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=Pico%2FPico%2FMemory.c;h=5760324f7364d1409f2dac423f18e5d379584542;hb=ef4eb506de324df73bcda06f027a20349c69d05f;hp=2995c0e2bd69fcaf9e2c1d4a15973e487d337d3b;hpb=d49b10c2f2c58e03a1be8b3b9e8bfc08703e0ce0;p=picodrive.git diff --git a/Pico/Pico/Memory.c b/Pico/Pico/Memory.c index 2995c0e..5760324 100644 --- a/Pico/Pico/Memory.c +++ b/Pico/Pico/Memory.c @@ -31,6 +31,7 @@ static u32 PicoReadPico8(u32 a) { switch (a & 0x1f) { + case 0x01: d = PicoPicohw.r1; break; case 0x03: d = PicoPad[0]&0x1f; // d-pad d |= (PicoPad[0]&0x20) << 2; // red button -> C @@ -142,7 +143,20 @@ static void PicoWritePico16(u32 a,u16 d) if ((a&0xfffff0)==0xc00000) { PicoVideoWrite(a,(u16)d); return; } // VDP // if (a == 0x800010) dump(d); - if (a == 0x800010) PicoPicohw.fifo_bytes += 2; + if (a == 0x800010) + { + PicoPicohw.fifo_bytes += 2; + + if (PicoPicohw.xpcm_ptr < PicoPicohw.xpcm_buffer + XPCM_BUFFER_SIZE) { + *PicoPicohw.xpcm_ptr++ = d >> 8; + *PicoPicohw.xpcm_ptr++ = d; + } + else if (PicoPicohw.xpcm_ptr == PicoPicohw.xpcm_buffer + XPCM_BUFFER_SIZE) { + elprintf(EL_ANOMALY, "xpcm_buffer overflow!"); + PicoPicohw.xpcm_ptr++; + } + } + else if (a == 0x800012) PicoPicohw.r12 = d; elprintf(EL_UIO, "w16: %06x, %04x", a&0xffffff, d); }