}\r
\r
\r
-PICO_INTERNAL void sound_reset(void)\r
+PICO_INTERNAL void PsndReset(void)\r
{\r
void *ym2612_regs;\r
\r
memset(ym2612_regs, 0, 0x200+4);\r
z80startCycle = z80stopCycle = 0;\r
\r
- sound_rerate(0);\r
+ PsndRerate(0);\r
}\r
\r
\r
// to be called after changing sound rate or chips\r
-void sound_rerate(int preserve_state)\r
+void PsndRerate(int preserve_state)\r
{\r
void *state = NULL;\r
int target_fps = Pico.m.pal ? 50 : 60;\r
// clear all buffers\r
memset32(PsndBuffer, 0, sizeof(PsndBuffer)/4);\r
if (PsndOut)\r
- sound_clear();\r
+ PsndClear();\r
}\r
\r
\r
// This is called once per raster (aka line), but not necessarily for every line\r
-PICO_INTERNAL void sound_timers_and_dac(int raster)\r
+PICO_INTERNAL void Psnd_timers_and_dac(int raster)\r
{\r
int pos, len;\r
int do_dac = PsndOut && (PicoOpt&1) && *ym2612_dacen;\r
}\r
\r
\r
-PICO_INTERNAL void sound_clear(void)\r
+PICO_INTERNAL void PsndClear(void)\r
{\r
int len = PsndLen;\r
if (PsndLen_exc_add) len++;\r
- if (PicoOpt & 8) memset32((int *) PsndOut, 0, len); // clear both channels at once\r
- else memset(PsndOut, 0, len<<1);\r
+ if (PicoOpt & 8)\r
+ memset32((int *) PsndOut, 0, len); // assume PsndOut to be aligned\r
+ else {\r
+ short *out = PsndOut;\r
+ if ((int)out & 2) { *out++ = 0; len--; }\r
+ memset32((int *) out, 0, len/2);\r
+ if (len & 1) out[len-1] = 0;\r
+ }\r
}\r
\r
\r
-PICO_INTERNAL int sound_render(int offset, int length)\r
+PICO_INTERNAL int PsndRender(int offset, int length)\r
{\r
int buf32_updated = 0;\r
int *buf32 = PsndBuffer+offset;\r
SN76496Update(PsndOut+offset, length, stereo);\r
\r
// Add in the stereo FM buffer\r
- if (PicoOpt & 1) {\r
+ if (PicoOpt & 1)\r
buf32_updated = YM2612UpdateOne(buf32, length, stereo, 1);\r
- } else\r
+ else\r
memset32(buf32, 0, length<<stereo);\r
\r
//printf("active_chs: %02x\n", buf32_updated);\r
return drZ80.Z80SP_BASE + a;\r
}\r
\r
-static unsigned char DrZ80_in(unsigned short p)\r
+static void DrZ80_irq_callback()\r
{\r
- elprintf(EL_ANOMALY, "Z80 port %04x read", p);\r
- return 0xff;\r
+ drZ80.Z80_IRQ = 0; // lower irq when accepted\r
}\r
+#endif\r
\r
-static void DrZ80_out(unsigned short p,unsigned char d)\r
+#if defined(_USE_DRZ80) || defined(_USE_CZ80)\r
+static unsigned char z80_in(unsigned short p)\r
{\r
- elprintf(EL_ANOMALY, "Z80 port %04x write %02x", p, d);\r
+ elprintf(EL_ANOMALY, "Z80 port %04x read", p);\r
+ return 0xff;\r
}\r
\r
-static void DrZ80_irq_callback()\r
+static void z80_out(unsigned short p,unsigned char d)\r
{\r
- drZ80.Z80_IRQ = 0; // lower irq when accepted\r
+ elprintf(EL_ANOMALY, "Z80 port %04x write %02x", p, d);\r
}\r
#endif\r
\r
+\r
// z80 functionality wrappers\r
PICO_INTERNAL void z80_init(void)\r
{\r
drZ80.z80_read16 =z80_read16;\r
drZ80.z80_write8 =z80_write;\r
drZ80.z80_write16 =z80_write16;\r
- drZ80.z80_in =DrZ80_in;\r
- drZ80.z80_out =DrZ80_out;\r
+ drZ80.z80_in =z80_in;\r
+ drZ80.z80_out =z80_out;\r
drZ80.z80_irq_callback=DrZ80_irq_callback;\r
\r
#elif defined(_USE_CZ80)\r
Cz80_Set_Fetch(&CZ80, 0x2000, 0x3fff, (UINT32)Pico.zram - 0x2000); // mirror\r
Cz80_Set_ReadB(&CZ80, (UINT8 (*)(UINT32 address))z80_read);\r
Cz80_Set_WriteB(&CZ80, z80_write);\r
+ Cz80_Set_INPort(&CZ80, z80_in);\r
+ Cz80_Set_OUTPort(&CZ80, z80_out);\r
#endif\r
}\r
\r
memcpy(data+4, &drZ80, 0x54);\r
#elif defined(_USE_CZ80)\r
*(int *)data = 0x00007a43; // "Cz"\r
- memcpy(data+4, &CZ80, (INT32)&CZ80.BasePC - (INT32)&CZ80);\r
- printf("size: %i (%x)\n", (INT32)&CZ80.BasePC - (INT32)&CZ80, (INT32)&CZ80.BasePC - (INT32)&CZ80); // FIXME rm\r
+ *(int *)(data+4) = Cz80_Get_Reg(&CZ80, CZ80_PC);\r
+ memcpy(data+8, &CZ80, (INT32)&CZ80.BasePC - (INT32)&CZ80);\r
#endif\r
}\r
\r
z80_int(); // try to goto int handler, maybe we won't execute trash there?\r
}\r
#elif defined(_USE_CZ80)\r
- if (*(int *)data == 0x00007a43) // "Cz" save?\r
- memcpy(&CZ80, data+4, (INT32)&CZ80.BasePC - (INT32)&CZ80);\r
- else {\r
+ if (*(int *)data == 0x00007a43) { // "Cz" save?\r
+ memcpy(&CZ80, data+8, (INT32)&CZ80.BasePC - (INT32)&CZ80);\r
+ Cz80_Set_Reg(&CZ80, CZ80_PC, *(int *)(data+4));\r
+ } else {\r
z80_reset();\r
z80_int();\r
}\r