Pico PCM, only one hardcoded mode for now
[picodrive.git] / Pico / Pico / Memory.c
index 2995c0e..5760324 100644 (file)
@@ -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);
 }