+// sms.c\r
+#ifndef NO_SMS\r
+void PicoPowerMS(void);\r
+void PicoResetMS(void);\r
+void PicoMemSetupMS(void);\r
+void PicoStateLoadedMS(void);\r
+void PicoFrameMS(void);\r
+void PicoFrameDrawOnlyMS(void);\r
+#else\r
+#define PicoPowerMS()\r
+#define PicoResetMS()\r
+#define PicoMemSetupMS()\r
+#define PicoStateLoadedMS()\r
+#define PicoFrameMS()\r
+#define PicoFrameDrawOnlyMS()\r
+#endif\r
+\r
+// 32x/32x.c\r
+#ifndef NO_32X\r
+extern struct Pico32x Pico32x;\r
+enum p32x_event {\r
+ P32X_EVENT_PWM,\r
+ P32X_EVENT_FILLEND,\r
+ P32X_EVENT_COUNT,\r
+};\r
+extern unsigned int event_times[P32X_EVENT_COUNT];\r
+\r
+void Pico32xInit(void);\r
+void PicoPower32x(void);\r
+void PicoReset32x(void);\r
+void Pico32xStartup(void);\r
+void PicoUnload32x(void);\r
+void PicoFrame32x(void);\r
+void Pico32xStateLoaded(int is_early);\r
+void p32x_sync_sh2s(unsigned int m68k_target);\r
+void p32x_update_irls(int nested_call);\r
+void p32x_reset_sh2s(void);\r
+void p32x_event_schedule(enum p32x_event event, unsigned int now, int after);\r
+\r
+// 32x/memory.c\r
+struct Pico32xMem *Pico32xMem;\r
+unsigned int PicoRead8_32x(unsigned int a);\r
+unsigned int PicoRead16_32x(unsigned int a);\r
+void PicoWrite8_32x(unsigned int a, unsigned int d);\r
+void PicoWrite16_32x(unsigned int a, unsigned int d);\r
+void PicoMemSetup32x(void);\r
+void Pico32xSwapDRAM(int b);\r
+void Pico32xMemStateLoaded(void);\r
+void p32x_poll_event(int cpu_mask, int is_vdp);\r
+\r
+// 32x/draw.c\r
+void FinalizeLine32xRGB555(int sh, int line);\r
+void PicoDraw32xLayer(int offs, int lines, int mdbg);\r
+void PicoDraw32xLayerMdOnly(int offs, int lines);\r
+extern int (*PicoScan32xBegin)(unsigned int num);\r
+extern int (*PicoScan32xEnd)(unsigned int num);\r
+enum {\r
+ PDM32X_OFF,\r
+ PDM32X_32X_ONLY,\r
+ PDM32X_BOTH,\r
+};\r
+extern int Pico32xDrawMode;\r
+\r
+// 32x/pwm.c\r
+unsigned int p32x_pwm_read16(unsigned int a);\r
+void p32x_pwm_write16(unsigned int a, unsigned int d);\r
+void p32x_pwm_update(int *buf32, int length, int stereo);\r
+void p32x_timers_do(unsigned int cycles);\r
+void p32x_timers_recalc(void);\r
+void p32x_pwm_schedule(unsigned int now);\r
+#else\r
+#define Pico32xInit()\r
+#define PicoPower32x()\r
+#define PicoReset32x()\r
+#define PicoFrame32x()\r
+#define PicoUnload32x()\r
+#define Pico32xStateLoaded()\r
+#define PicoDraw32xSetFrameMode(...)\r
+#define FinalizeLine32xRGB555 NULL\r
+#define p32x_pwm_update(...)\r
+#define p32x_timers_recalc()\r
+#endif\r
+\r
+/* avoid dependency on newer glibc */\r
+static __inline int isspace_(int c)\r
+{\r
+ return (0x09 <= c && c <= 0x0d) || c == ' ';\r
+}\r
+\r
+#ifndef ARRAY_SIZE\r
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))\r
+#endif\r
+\r