X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Pico%2Fsound%2Fsound.c;h=f43252ffd7757117a5c3ac02611f854ce4d124b2;hb=c5b61ac25d64d5fb1e8d825e6b44c6c50b05ab34;hp=99500847ccdc359bd2c3b318b98d5655c2d5a3ce;hpb=03e4f2a349247334666c87abe3a908df72d23051;p=picodrive.git diff --git a/Pico/sound/sound.c b/Pico/sound/sound.c index 9950084..f43252f 100644 --- a/Pico/sound/sound.c +++ b/Pico/sound/sound.c @@ -101,7 +101,7 @@ static void dac_recalculate(void) } -PICO_INTERNAL void sound_reset(void) +PICO_INTERNAL void PsndReset(void) { void *ym2612_regs; @@ -110,12 +110,12 @@ PICO_INTERNAL void sound_reset(void) memset(ym2612_regs, 0, 0x200+4); z80startCycle = z80stopCycle = 0; - sound_rerate(0); + PsndRerate(0); } // to be called after changing sound rate or chips -void sound_rerate(int preserve_state) +void PsndRerate(int preserve_state) { void *state = NULL; int target_fps = Pico.m.pal ? 50 : 60; @@ -163,12 +163,12 @@ void sound_rerate(int preserve_state) // clear all buffers memset32(PsndBuffer, 0, sizeof(PsndBuffer)/4); if (PsndOut) - sound_clear(); + PsndClear(); } // This is called once per raster (aka line), but not necessarily for every line -PICO_INTERNAL void sound_timers_and_dac(int raster) +PICO_INTERNAL void Psnd_timers_and_dac(int raster) { int pos, len; int do_dac = PsndOut && (PicoOpt&1) && *ym2612_dacen; @@ -216,7 +216,7 @@ PICO_INTERNAL void sound_timers_and_dac(int raster) } -PICO_INTERNAL void sound_clear(void) +PICO_INTERNAL void PsndClear(void) { int len = PsndLen; if (PsndLen_exc_add) len++; @@ -225,7 +225,7 @@ PICO_INTERNAL void sound_clear(void) } -PICO_INTERNAL int sound_render(int offset, int length) +PICO_INTERNAL int PsndRender(int offset, int length) { int buf32_updated = 0; int *buf32 = PsndBuffer+offset; @@ -316,23 +316,26 @@ static unsigned int DrZ80_rebaseSP(unsigned short a) return drZ80.Z80SP_BASE + a; } -static unsigned char DrZ80_in(unsigned short p) +static void DrZ80_irq_callback() { - elprintf(EL_ANOMALY, "Z80 port %04x read", p); - return 0xff; + drZ80.Z80_IRQ = 0; // lower irq when accepted } +#endif -static void DrZ80_out(unsigned short p,unsigned char d) +#if defined(_USE_DRZ80) || defined(_USE_CZ80) +static unsigned char z80_in(unsigned short p) { - elprintf(EL_ANOMALY, "Z80 port %04x write %02x", p, d); + elprintf(EL_ANOMALY, "Z80 port %04x read", p); + return 0xff; } -static void DrZ80_irq_callback() +static void z80_out(unsigned short p,unsigned char d) { - drZ80.Z80_IRQ = 0; // lower irq when accepted + elprintf(EL_ANOMALY, "Z80 port %04x write %02x", p, d); } #endif + // z80 functionality wrappers PICO_INTERNAL void z80_init(void) { @@ -361,8 +364,8 @@ PICO_INTERNAL void z80_init(void) drZ80.z80_read16 =z80_read16; drZ80.z80_write8 =z80_write; drZ80.z80_write16 =z80_write16; - drZ80.z80_in =DrZ80_in; - drZ80.z80_out =DrZ80_out; + drZ80.z80_in =z80_in; + drZ80.z80_out =z80_out; drZ80.z80_irq_callback=DrZ80_irq_callback; #elif defined(_USE_CZ80) @@ -372,6 +375,8 @@ PICO_INTERNAL void z80_init(void) Cz80_Set_Fetch(&CZ80, 0x2000, 0x3fff, (UINT32)Pico.zram - 0x2000); // mirror Cz80_Set_ReadB(&CZ80, (UINT8 (*)(UINT32 address))z80_read); Cz80_Set_WriteB(&CZ80, z80_write); + Cz80_Set_INPort(&CZ80, z80_in); + Cz80_Set_OUTPort(&CZ80, z80_out); #endif } @@ -443,7 +448,8 @@ PICO_INTERNAL void z80_pack(unsigned char *data) memcpy(data+4, &drZ80, 0x54); #elif defined(_USE_CZ80) *(int *)data = 0x00007a43; // "Cz" - memcpy(data+4, &CZ80, (INT32)&CZ80.BasePC - (INT32)&CZ80); + *(int *)(data+4) = Cz80_Get_Reg(&CZ80, CZ80_PC); + memcpy(data+8, &CZ80, (INT32)&CZ80.BasePC - (INT32)&CZ80); #endif } @@ -471,9 +477,10 @@ PICO_INTERNAL void z80_unpack(unsigned char *data) z80_int(); // try to goto int handler, maybe we won't execute trash there? } #elif defined(_USE_CZ80) - if (*(int *)data == 0x00007a43) // "Cz" save? - memcpy(&CZ80, data+4, (INT32)&CZ80.BasePC - (INT32)&CZ80); - else { + if (*(int *)data == 0x00007a43) { // "Cz" save? + memcpy(&CZ80, data+8, (INT32)&CZ80.BasePC - (INT32)&CZ80); + Cz80_Set_Reg(&CZ80, CZ80_PC, *(int *)(data+4)); + } else { z80_reset(); z80_int(); }