diff --git a/main.cpp b/main.cpp index 96d3ea3..9c9685c 100644 --- a/main.cpp +++ b/main.cpp @@ -10,6 +10,8 @@ #include uint8_t memory[65536]; +uint32_t time = 0; +uint32_t t_states = 0; int main(int argc, char *argv[]) { @@ -26,13 +28,16 @@ int main(int argc, char *argv[]) zx_ula::sound_init(); - zx_tape::load("manic.tap"); + zx_tape::load("abusimbel.tap"); if (argc==3) { z80debug::loadngo(argv[1], argv[2]); } bool should_exit = false; SDL_Event e; + time = SDL_GetTicks(); + t_states = 0; + while (!should_exit) { while (SDL_PollEvent(&e)) @@ -83,16 +88,25 @@ int main(int argc, char *argv[]) } } } + if (!z80debug::debugging()) { if (z80debug::isbreak(z80::getPC(), 9)) { z80debug::stop(); zxscreen::redraw(); } else { - if (z80::getPC()==0x05C8) zx_tape::go_berserk(); + //if (z80::getPC()==0x05C8) zx_tape::go_berserk(); uint8_t dt = z80::step(); + t_states += dt; zx_tape::update(dt); zx_ula::sound_update(dt); zxscreen::refresh(dt); + + if (t_states>=350000) + { + while (SDL_GetTicks()top) + { + memcpy(sound_buffer, &sound_buffer[top], sound_pos-top); + sound_pos=sound_pos-top; + last_1=last_1-top; + } + else + { + sound_pos=last_1=0; + } + } + else + { + sound_pos=last_1=0; + } } void sound_init() { SDL_AudioSpec audioSpec{11025, AUDIO_U8, 1, 0, 220, 0, 0, &audioCallback, NULL}; sdlAudioDevice = SDL_OpenAudioDevice(NULL, 0, &audioSpec, NULL, 0); + sound_enable(); } void sound_enable() @@ -244,9 +264,20 @@ namespace zx_ula void sound_update(const uint8_t dt) { t_sound += dt; - if (t_sound>=317) { - t_sound-=317; - sound_buffer[sound_pos++] = ear*128; + if (t_sound>=318) { + t_sound-=318; + //sound_pos = (sound_pos+1) & 0x3ff; + //sound_buffer[sound_pos] = ear*128; + + if (sound_pos<1024) + { + sound_buffer[sound_pos++] = ear*128; + if (ear) last_1 = sound_pos; + } + /*else + { + printf("WARNING! Sound buffer overflow!\n"); + }*/ } } } \ No newline at end of file