add sound to sms and pce emus

pull/40/head
jean-marcharvengt 2025-02-04 23:38:08 +01:00
rodzic 53657f2aac
commit 99ff03ea62
12 zmienionych plików z 49 dodań i 30 usunięć

BIN
MCUME_pico2/.DS_Store vendored

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -19,8 +19,8 @@ include(pico_sdk_import.cmake)
#set(TARGET picovcs)
#set(TARGET picogb)
#set(TARGET picopce)
#set(TARGET picosms)
set(TARGET picogen)
set(TARGET picosms)
#set(TARGET picogen)
#set(TARGET pico5200)

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -24,7 +24,7 @@ bool show_fps = true;
bool limit_fps = true;
bool interlace = true;
bool frameskip = true;
int z80_enable_mode = 2;
static int z80_enable_mode = 2;
bool sn76489_enabled = true;
extern unsigned short button_state[3];
@ -126,8 +126,8 @@ void gen_Step(void) {
ym2612_clock = 0;
ym2612_index = 0;
scan_line = 0;
//if (z80_enable_mode == 1)
//z80_run(lines_per_frame * VDP_CYCLES_PER_LINE);
if (z80_enable_mode == 1)
z80_run(lines_per_frame * VDP_CYCLES_PER_LINE);
//printf("m(%x)\n", frame);
while (scan_line < lines_per_frame) {
@ -249,6 +249,8 @@ void gen_Step(void) {
void SND_Process(void *stream, int len) {
if (audio_enabled) {
//if ( (z80_enable_mode == 3) && (system_clock == 0) )
// z80_run(262 * VDP_CYCLES_PER_LINE);
ym2612_run(262 * VDP_CYCLES_PER_LINE);
gwenesis_SN76489_run(262 * VDP_CYCLES_PER_LINE);
audio_sample * snd_buf = (audio_sample *)stream;

Wyświetl plik

@ -6,6 +6,7 @@
extern "C" {
#include "pce-go/pce-go.h"
#include "pce-go/pce.h"
#include <pce-go/psg.h>
}
#include "flash_t.h"
@ -16,6 +17,11 @@ void emu_KeyboardOnDown(int keymodifer, int key) {
void emu_KeyboardOnUp(int keymodifer, int key) {
}
#define AUDIO_SAMPLE_RATE 22050
#define AUDIO_BUFFER_LENGTH (AUDIO_SAMPLE_RATE / 60 + 1)
alignas(4) int audio_buffer[AUDIO_BUFFER_LENGTH];
void pce_Init(void)
{
@ -40,14 +46,11 @@ void pce_Start(char * filename)
int size = flash_load(filename);
PalettePCE(0);
InitPCE(22050, false, (const void *)flash_start, (size_t)size);
InitPCE(AUDIO_SAMPLE_RATE, true, (const void *)flash_start, (size_t)size);
#ifdef SOUND_PRESENT
#ifdef HAS_SND
emu_sndInit();
emu_sndInit();
#endif
#else
#endif
emu_printf("pce_Start done");
}
@ -77,12 +80,16 @@ void pce_Step(void) {
PCE.Joypad.regs[0] = buttons;
//psg_update((int16_t *) audio_buffer, AUDIO_BUFFER_LENGTH, 0xff);
//i2s_dma_write(&i2s_config, (const int16_t *) audio_buffer);
//emu_DrawVsync();
}
void SND_Process(void *stream, int len) {
// psg_update((int16*)stream, 0, len);
int16_t * buf = (int16_t *) audio_buffer;
psg_update(buf, AUDIO_BUFFER_LENGTH, 0xff);
audio_sample * snd_buf = (audio_sample *)stream;
for (int h = 0; h < len*2; h += 2) {
int16_t s1 = buf[h]>>8;
int16_t s2 = buf[h+1]>>8;
*snd_buf++ = ((s1+s2)/2)+128;
}
}

Wyświetl plik

@ -169,8 +169,11 @@ void * emu_LineBuffer(int line)
#include "AudioPlaySystem.h"
AudioPlaySystem mymixer;
#define AUDIO_SAMPLE_RATE 22050
#define AUDIO_BUFFER_LENGTH (AUDIO_SAMPLE_RATE / 60 + 1)
void emu_sndInit() {
tft.begin_audio(256, mymixer.snd_Mixer);
tft.begin_audio(AUDIO_BUFFER_LENGTH*2, mymixer.snd_Mixer);
mymixer.start();
}

Wyświetl plik

@ -114,12 +114,9 @@ void sms_Start(char * filename)
#ifdef HAS_SND
#ifdef SOUND_PRESENT
system_init(22050);
emu_sndInit();
#else
system_init(0);
#endif
sms.use_fm = true;
#else
system_init(0);
#endif
@ -150,20 +147,26 @@ void sms_Step(void)
input.pad[0] |= INPUT_BUTTON2;
}
// if(check_key(KEY_DEL)) input.system |= INPUT_HARD_RESET;
// if(check_key(KEY_TAB)) input.system |= (IS_GG) ? INPUT_HARD_RESET : INPUT_SOFT_RESET;
if (k & MASK_KEY_USER2) input.system |= (IS_GG) ? INPUT_START : INPUT_PAUSE;
//if (k & MASK_KEY_USER4) input.system |= INPUT_HARD_RESET;
//if (k & MASK_KEY_USER1) input.system |= (IS_GG) ? INPUT_HARD_RESET : INPUT_SOFT_RESET;
if (k & MASK_KEY_USER1) input.pad[0] |= INPUT_BUTTON2;
//if (k & MASK_KEY_USER2) input.system |= (IS_GG) ? INPUT_START : INPUT_PAUSE;
sms_frame(0);
//emu_printi(emu_FrameSkip());
emu_DrawVsync();
}
void SND_Process(void *stream, int len) {
#ifdef SOUND_PRESENT
#ifdef HAS_SND
// audio_play_sample(stream, 0, len);
#endif
static int16 sndl[512];
static int16 sndr[512];
#endif
void SND_Process(void *stream, int len) {
#ifdef HAS_SND
audio_sample * snd_buf = (audio_sample *)stream;
audio_play_sample(&sndl[0], &sndr[0], len);
for (int i = 0; i< len; i++ )
*snd_buf++ = ((sndl[i]>>8)+(sndr[i]>>8))/2+128;
#endif
}

Wyświetl plik

@ -5,7 +5,7 @@
#define VID_FRAME_SKIP 0x0
#define TFT_VBUFFER_YCROP 0
#define SINGLELINE_RENDERING 1
//#define CUSTOM_SND 1
#define CUSTOM_SND 1
//#define TIMER_REND 1
#define EXTRA_HEAP 0x10
#define FILEBROWSER

Wyświetl plik

@ -322,9 +322,9 @@ void * emu_LineBuffer(int line)
#ifdef HAS_SND
#include "AudioPlaySystem.h"
AudioPlaySystem mymixer;
#define AUDIO_BUFFER_LEN (22050/50)
void emu_sndInit() {
tft.begin_audio(256, mymixer.snd_Mixer);
tft.begin_audio(AUDIO_BUFFER_LEN*2, mymixer.snd_Mixer);
mymixer.start();
}

Wyświetl plik

@ -3,4 +3,8 @@
#define FLASH_STORE_START 0x100000
#ifdef HAS_USBPIO
//#undef HAS_SND
#endif
#endif