aboutsummaryrefslogtreecommitdiff
path: root/fmdriver
diff options
context:
space:
mode:
Diffstat (limited to 'fmdriver')
-rw-r--r--fmdriver/fmdriver.h18
-rw-r--r--fmdriver/fmdriver_fmp.c2
-rw-r--r--fmdriver/fmdriver_pmd.c16
-rw-r--r--fmdriver/fmdriver_pmd.h1
4 files changed, 33 insertions, 4 deletions
diff --git a/fmdriver/fmdriver.h b/fmdriver/fmdriver.h
index ba36c3e..f84a974 100644
--- a/fmdriver/fmdriver.h
+++ b/fmdriver/fmdriver.h
@@ -32,6 +32,8 @@ enum {
enum {
// 1 line = 80 characters, may contain half-width doublebyte characters
FMDRIVER_TITLE_BUFLEN = 80*2+1,
+
+ FMDRIVER_PCMCOUNT = 4,
};
enum fmdriver_track_type {
@@ -108,10 +110,20 @@ struct fmdriver_work {
// only single-byte uppercase cp932
char filename[FMDRIVER_TITLE_BUFLEN];
- // always 8 characters and pad with ' '
- char pcmname[2][9];
+
+ // PCM: 0 1 2 3
+ // PMD: PPC PPZ1 PPZ2 PPC
+ // FMP: PVI PPZ
+
+ // if (!strlen(pcmtype[i])) this pcm is not available on this driver
+ char pcmtype[FMDRIVER_PCMCOUNT][5];
+ // CP932 encoded
+ char pcmname[FMDRIVER_PCMCOUNT][9];
+ // not set by drivers, used by visualizer (FMDSP)
+ // set to true when for example the PCM file was not found
+ bool pcmerror[FMDRIVER_PCMCOUNT];
+
// driver status (for display)
- bool pcmerror[2];
uint8_t ssg_noise_freq;
struct fmdriver_track_status track_status[FMDRIVER_TRACK_NUM];
uint8_t loop_cnt;
diff --git a/fmdriver/fmdriver_fmp.c b/fmdriver/fmdriver_fmp.c
index 9abfaaa..635ae4b 100644
--- a/fmdriver/fmdriver_fmp.c
+++ b/fmdriver/fmdriver_fmp.c
@@ -3596,6 +3596,8 @@ void fmp_init(struct fmdriver_work *work, struct driver_fmp *fmp) {
fmp_work_status_init(work, fmp);
fmdriver_fillpcmname(work->pcmname[0], fmp->pvi_name);
fmdriver_fillpcmname(work->pcmname[1], fmp->ppz_name);
+ strcpy(work->pcmtype[0], "PVI");
+ strcpy(work->pcmtype[1], "PPZ");
work->playing = true;
}
diff --git a/fmdriver/fmdriver_pmd.c b/fmdriver/fmdriver_pmd.c
index f4eaab7..f5322fa 100644
--- a/fmdriver/fmdriver_pmd.c
+++ b/fmdriver/fmdriver_pmd.c
@@ -1,6 +1,7 @@
#include "fmdriver_pmd.h"
#include "fmdriver_common.h"
#include <stddef.h>
+#include <string.h>
enum {
SSG_ENV_STATE_OLD_AL,
@@ -5876,7 +5877,7 @@ const char *pmd_get_memo(
void pmd_filenamecopy(char *dest, const char *src) {
int i;
for (i = 0; i < (PMD_FILENAMELEN+1); i++) {
- if (src[i] == '.') {
+ if (src[i] == '.' || src[i] == ',') {
dest[i] = 0;
return;
}
@@ -5906,6 +5907,7 @@ void pmd_init(struct fmdriver_work *work,
pmd_reset_timer(work, pmd);
pmd->playing = true;
work->driver_opna_interrupt = pmd_opna_interrupt;
+
/*
static const int memotable[3] = {1, 4, 5};
for (int i = 0; i < 3; i++) {
@@ -5923,6 +5925,10 @@ void pmd_init(struct fmdriver_work *work,
const char *pcmfile = pmd_get_memo(pmd, -2);
if (pcmfile) {
pmd_filenamecopy(pmd->ppzfile, pcmfile);
+ const char *pcm2 = strchr(pcmfile, ',');
+ if (pcm2) {
+ pmd_filenamecopy(pmd->ppzfile2, pcm2+1);
+ }
}
pcmfile = pmd_get_memo(pmd, -1);
if (pcmfile) {
@@ -5933,8 +5939,16 @@ void pmd_init(struct fmdriver_work *work,
pmd_filenamecopy(pmd->ppcfile, pcmfile);
}
fmdriver_fillpcmname(work->pcmname[0], pmd->ppcfile);
+ strcpy(work->pcmtype[0], "PPC");
fmdriver_fillpcmname(work->pcmname[1], pmd->ppzfile);
+ strcpy(work->pcmtype[1], "PPZ1");
+ fmdriver_fillpcmname(work->pcmname[2], pmd->ppzfile2);
+ strcpy(work->pcmtype[2], "PPZ2");
+ fmdriver_fillpcmname(work->pcmname[3], pmd->ppsfile);
+ strcpy(work->pcmtype[3], "PPS");
work->playing = true;
+ // PPS currently unsupported
+ work->pcmerror[3] = true;
}
enum {
diff --git a/fmdriver/fmdriver_pmd.h b/fmdriver/fmdriver_pmd.h
index 25d42d7..cf16cdf 100644
--- a/fmdriver/fmdriver_pmd.h
+++ b/fmdriver/fmdriver_pmd.h
@@ -458,6 +458,7 @@ struct driver_pmd {
bool ssgeff_noise_mix;
bool ssgeff_on;
char ppzfile[PMD_FILENAMELEN+1];
+ char ppzfile2[PMD_FILENAMELEN+1];
char ppsfile[PMD_FILENAMELEN+1];
char ppcfile[PMD_FILENAMELEN+1];
};