From eaac5cc224312daf5aba3cf66fde8baff35d70de Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 29 Aug 2023 04:09:11 -0500 Subject: [PATCH] C219: fix VGM export a sample word has two 8-bit samples in reverse order (need hardware confirmation) --- src/engine/platform/c140.cpp | 9 +++++---- src/engine/platform/sound/c140_c219.c | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/engine/platform/c140.cpp b/src/engine/platform/c140.cpp index 362ece043..61e12c8ae 100644 --- a/src/engine/platform/c140.cpp +++ b/src/engine/platform/c140.cpp @@ -573,6 +573,7 @@ void DivPlatformC140::renderSamples(int sysID) { if ((memPos&0xfe0000)!=((memPos+length)&0xfe0000)) { memPos=((memPos+0x1ffff)&0xfe0000); } + logV("%d",length); if (memPos>=(getSampleMemCapacity())) { logW("out of C219 memory for sample %d!",i); break; @@ -584,17 +585,17 @@ void DivPlatformC140::renderSamples(int sysID) { if (s->depth==DIV_SAMPLE_DEPTH_C219) { for (unsigned int i=0; i=s->lengthC219) { - sampleMem[i+memPos]=0; + sampleMem[(memPos+i)^1]=0; } else { - sampleMem[i+memPos]=s->dataC219[i]; + sampleMem[(memPos+i)^1]=s->dataC219[i]; } } } else { for (unsigned int i=0; i=s->length8) { - sampleMem[memPos+i]=0; + sampleMem[(memPos+i)^1]=0; } else { - sampleMem[memPos+i]=s->data8[i]; + sampleMem[(memPos+i)^1]=s->data8[i]; } } } diff --git a/src/engine/platform/sound/c140_c219.c b/src/engine/platform/sound/c140_c219.c index 67aa6dc4c..56d96ca19 100644 --- a/src/engine/platform/sound/c140_c219.c +++ b/src/engine/platform/sound/c140_c219.c @@ -171,8 +171,8 @@ void c219_voice_tick(struct c219_t *c219, const unsigned char v, const int cycle else { // fetch 8 bit sample - signed short s1 = c219->sample_mem[((unsigned int)(c219->bank[(v >> 2) & 3]) << 17) | voice->addr]; - signed short s2 = c219->sample_mem[((unsigned int)(c219->bank[(v >> 2) & 3]) << 17) | ((voice->addr + 1) & 0x1ffff)]; + signed short s1 = c219->sample_mem[((unsigned int)(c219->bank[(v >> 2) & 3]) << 17) | (voice->addr^1)]; + signed short s2 = c219->sample_mem[((unsigned int)(c219->bank[(v >> 2) & 3]) << 17) | (((voice->addr + 1) & 0x1ffff)^1)]; if (voice->compressed) { s1 = c219->mulaw[s1&0xff];