cd: fix cycle overflow issue
[picodrive.git] / pico / pico_int.h
index 08c7a20..a8bf7ee 100644 (file)
@@ -376,7 +376,8 @@ struct PicoSRAM
 // MCD\r
 #include "cd/cd_sys.h"\r
 #include "cd/LC89510.h"\r
-#include "cd/gfx_cd.h"\r
+\r
+#define PCM_MIXBUF_LEN ((12500000 / 384) / 50 + 1)\r
 \r
 struct mcd_pcm\r
 {\r
@@ -384,7 +385,7 @@ struct mcd_pcm
        unsigned char enabled; // reg8\r
        unsigned char cur_ch;\r
        unsigned char bank;\r
-       int pad1;\r
+       unsigned int update_cycles;\r
 \r
        struct pcm_chan                 // 08, size 0x10\r
        {\r
@@ -444,7 +445,10 @@ typedef struct
        CDD  cdd;\r
        CDC  cdc;\r
        _scd scd;\r
-       Rot_Comp rot_comp;\r
+       int pcm_mixbuf[PCM_MIXBUF_LEN * 2];\r
+       int pcm_mixpos;\r
+       char pcm_mixbuf_dirty;\r
+       char pcm_regs_dirty;\r
 } mcd_state;\r
 \r
 // XXX: this will need to be reworked for cart+cd support.\r
@@ -606,6 +610,16 @@ void PicoWrite16_io(unsigned int a, unsigned int d);
 // pico/memory.c\r
 PICO_INTERNAL void PicoMemSetupPico(void);\r
 \r
+// cd/gfx.c\r
+void gfx_init(void);\r
+void gfx_start(unsigned int base);\r
+void gfx_update(unsigned int cycles);\r
+int gfx_context_save(unsigned char *state);\r
+int gfx_context_load(const unsigned char *state);\r
+\r
+// cd/gfx_dma.c\r
+void DmaSlowCell(unsigned int source, unsigned int a, int len, unsigned char inc);\r
+\r
 // cd/memory.c\r
 PICO_INTERNAL void PicoMemSetupCD(void);\r
 unsigned int PicoRead8_mcd_io(unsigned int a);\r
@@ -650,12 +664,19 @@ enum pcd_event {
 extern unsigned int pcd_event_times[PCD_EVENT_COUNT];\r
 void pcd_event_schedule(unsigned int now, enum pcd_event event, int after);\r
 void pcd_event_schedule_s68k(enum pcd_event event, int after);\r
+void pcd_prepare_frame(void);\r
 unsigned int pcd_cycles_m68k_to_s68k(unsigned int c);\r
 int  pcd_sync_s68k(unsigned int m68k_target, int m68k_poll_sync);\r
 void pcd_run_cpus(int m68k_cycles);\r
 void pcd_soft_reset(void);\r
 void pcd_state_loaded(void);\r
 \r
+// cd/pcm.c\r
+void pcd_pcm_sync(unsigned int to);\r
+void pcd_pcm_update(int *buffer, int length, int stereo);\r
+void pcd_pcm_write(unsigned int a, unsigned int d);\r
+unsigned int pcd_pcm_read(unsigned int a);\r
+\r
 // pico/pico.c\r
 PICO_INTERNAL void PicoInitPico(void);\r
 PICO_INTERNAL void PicoReratePico(void);\r