kopia lustrzana https://github.com/Jean-MarcHarvengt/MCUME
add sound to sms and pce emus
rodzic
53657f2aac
commit
99ff03ea62
Plik binarny nie jest wyświetlany.
|
|
@ -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.
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,13 +46,10 @@ 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();
|
||||
#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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,4 +3,8 @@
|
|||
|
||||
#define FLASH_STORE_START 0x100000
|
||||
|
||||
#ifdef HAS_USBPIO
|
||||
//#undef HAS_SND
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue