PCM sound, refactored code940
[picodrive.git] / Pico / PicoInt.h
index 64768b1..c7b72a2 100644 (file)
@@ -164,12 +164,35 @@ struct PicoSRAM
 #include "cd/LC89510.h"\r
 #include "cd/gfx_cd.h"\r
 \r
+struct mcd_pcm\r
+{\r
+       unsigned char control; // reg7\r
+       unsigned char enabled; // reg8\r
+       unsigned char cur_ch;\r
+       unsigned char bank;\r
+       int pad1;\r
+\r
+       struct pcm_chan\r
+       {\r
+               unsigned char regs[8];\r
+               unsigned int  addr; // played sample address\r
+               int pad;\r
+       } ch[8];\r
+};\r
+\r
 struct mcd_misc\r
 {\r
        unsigned short hint_vector;\r
        unsigned char  busreq;\r
-       unsigned char  pad0;\r
-\r
+       unsigned char  s68k_pend_ints;\r
+       unsigned int   state_flags;     // emu state: reset_pending,\r
+       unsigned int   counter75hz;\r
+       unsigned short audio_offset;    // for savestates: play pointer offset (0-1023)\r
+       unsigned char  audio_track;     // playing audio track # (zero based)\r
+       char pad1;\r
+       int            timer_int3;\r
+       unsigned int   timer_stopwatch;\r
+       int pad[10];\r
 };\r
 \r
 typedef struct\r
@@ -180,8 +203,14 @@ typedef struct
                unsigned char prg_ram_b[4][0x20000];\r
        };\r
        unsigned char word_ram[0x40000];                // 256K\r
+       union {\r
+               unsigned char pcm_ram[0x10000];         // 64K\r
+               unsigned char pcm_ram_b[0x10][0x1000];\r
+       };\r
        unsigned char bram[0x2000];                     // 8K\r
-       unsigned char s68k_regs[0x200];\r
+       unsigned char s68k_regs[0x200];                 // GA, not CPU regs\r
+       struct mcd_pcm pcm;\r
+       _scd_toc TOC;                                   // not to be saved\r
        CDD  cdd;\r
        CDC  cdc;\r
        _scd scd;\r
@@ -191,6 +220,13 @@ typedef struct
 \r
 #define Pico_mcd ((mcd_state *)Pico.rom)\r
 \r
+// Area.c\r
+int PicoAreaPackCpu(unsigned char *cpu, int is_sub);\r
+int PicoAreaUnpackCpu(unsigned char *cpu, int is_sub);\r
+\r
+// cd/Area.c\r
+int PicoCdSaveState(void *file);\r
+int PicoCdLoadState(void *file);\r
 \r
 // Draw.c\r
 int PicoLine(int scan);\r