diff options
-rw-r--r-- | fmdsp/fmdsp.c | 130 | ||||
-rw-r--r-- | fmdsp/fmdsp.h | 1 | ||||
-rw-r--r-- | fmdsp/fmdsp_sprites.h | 39 | ||||
-rw-r--r-- | fmdsp/font_fmdsp_medium_data.h | 1 | ||||
-rw-r--r-- | fmdsp/font_fmdsp_small_data.h | 2 |
5 files changed, 114 insertions, 59 deletions
diff --git a/fmdsp/fmdsp.c b/fmdsp/fmdsp.c index 5d641df..3d082af 100644 --- a/fmdsp/fmdsp.c +++ b/fmdsp/fmdsp.c @@ -24,16 +24,6 @@ static void vramblit_color(uint8_t *vram, int x, int y, } } -static void vramfill_color(uint8_t *vram, int x, int y, - int w, int h, - uint8_t color) { - for (int yi = 0; yi < h; yi++) { - for (int xi = 0; xi < w; xi++) { - vram[(y+yi)*PC98_W+(x+xi)] = color; - } - } -} - static void vramblit_key(uint8_t *vram, int x, int y, const uint8_t *data, int w, int h, uint8_t key, uint8_t color) { @@ -126,10 +116,6 @@ static void fmdsp_putline(const char *strptr, uint8_t *vram, } } -static const char *track_type_string_table[FMDRIVER_TRACKTYPE_CNT] = { - "FM ", "SSG ", "ADPCM" -}; - static struct { uint8_t type; uint8_t num; @@ -147,6 +133,14 @@ static struct { {FMDRIVER_TRACKTYPE_SSG, 2}, {FMDRIVER_TRACKTYPE_SSG, 3}, {FMDRIVER_TRACKTYPE_ADPCM, 1}, + {FMDRIVER_TRACKTYPE_PPZ8, 1}, + {FMDRIVER_TRACKTYPE_PPZ8, 2}, + {FMDRIVER_TRACKTYPE_PPZ8, 3}, + {FMDRIVER_TRACKTYPE_PPZ8, 4}, + {FMDRIVER_TRACKTYPE_PPZ8, 5}, + {FMDRIVER_TRACKTYPE_PPZ8, 6}, + {FMDRIVER_TRACKTYPE_PPZ8, 7}, + {FMDRIVER_TRACKTYPE_PPZ8, 8}, }; enum { @@ -177,6 +171,18 @@ static uint8_t track_disp_table_opn[FMDSP_TRACK_DISP_CNT_DEFAULT] = { FMDRIVER_TRACK_SSG_3, FMDRIVER_TRACK_ADPCM, }; +static uint8_t track_disp_table_ppz8[FMDSP_TRACK_DISP_CNT_DEFAULT] = { + FMDRIVER_TRACK_PPZ8_1, + FMDRIVER_TRACK_PPZ8_2, + FMDRIVER_TRACK_PPZ8_3, + FMDRIVER_TRACK_PPZ8_4, + FMDRIVER_TRACK_PPZ8_5, + FMDRIVER_TRACK_PPZ8_6, + FMDRIVER_TRACK_PPZ8_7, + FMDRIVER_TRACK_PPZ8_8, + FMDRIVER_TRACK_SSG_3, + FMDRIVER_TRACK_ADPCM, +}; static void fmdsp_track_init_13(struct fmdsp *fmdsp, uint8_t *vram) { @@ -185,9 +191,9 @@ static void fmdsp_track_init_13(struct fmdsp *fmdsp, vram[y*PC98_W+x] = 0; } } - for (int i = 0; i < FMDRIVER_TRACK_NUM; i++) { + for (int i = 0; i < FMDRIVER_TRACK_PPZ8_1; i++) { int t = i; - const char *track_type; + const char *track_type = " "; switch (track_type_table[t].type) { case FMDRIVER_TRACKTYPE_FM: track_type = "FM "; @@ -225,10 +231,11 @@ static void fmdsp_track_init_10(struct fmdsp *fmdsp, } } for (int i = 0; i < FMDSP_TRACK_DISP_CNT_DEFAULT; i++) { - int t = (fmdsp->style == FMDSP_DISPSTYLE_DEFAULT) ? - track_disp_table_default[i] : - track_disp_table_opn[i]; - const char *track_type; + int t; + if (fmdsp->style == FMDSP_DISPSTYLE_DEFAULT) t = track_disp_table_default[i]; + else if (fmdsp->style == FMDSP_DISPSTYLE_OPN) t = track_disp_table_opn[i]; + else t = track_disp_table_ppz8[i]; + const char *track_type = " "; switch (track_type_table[t].type) { case FMDRIVER_TRACKTYPE_FM: track_type = "FM "; @@ -239,6 +246,9 @@ static void fmdsp_track_init_10(struct fmdsp *fmdsp, case FMDRIVER_TRACKTYPE_ADPCM: track_type = "ADPCM"; break; + case FMDRIVER_TRACKTYPE_PPZ8: + track_type = "PPZ8 "; + break; } fmdsp_putline(track_type, vram, &font_fmdsp_small, 1, TRACK_H*i, 2, true); @@ -272,10 +282,14 @@ void fmdsp_vram_init(struct fmdsp *fmdsp, s_playing, PLAYING_W, PLAYING_H); vramblit(vram, FILEBAR_X, PLAYING_Y, s_filebar, FILEBAR_W, FILEBAR_H); - fmdsp_putline("MUSIC", vram, &font_fmdsp_small, - FILEBAR_MUSIC_X, PLAYING_Y+1, 2, false); - fmdsp_putline("FILE", vram, &font_fmdsp_small, - FILEBAR_FILE_X, PLAYING_Y+1, 2, false); + fmdsp_putline("MUS", vram, &font_fmdsp_small, + FILEBAR_MUS_X, PLAYING_Y+1, 2, false); + fmdsp_putline("IC", vram, &font_fmdsp_small, + FILEBAR_IC_X, PLAYING_Y+1, 2, false); + fmdsp_putline("F", vram, &font_fmdsp_small, + FILEBAR_F_X, PLAYING_Y+1, 2, false); + fmdsp_putline("ILE", vram, &font_fmdsp_small, + FILEBAR_ILE_X, PLAYING_Y+1, 2, false); vramblit(vram, FILEBAR_TRI_X, FILEBAR_TRI_Y, s_filebar_tri, FILEBAR_TRI_W, FILEBAR_TRI_H); for (int x = 74; x < PC98_W; x++) { @@ -283,6 +297,22 @@ void fmdsp_vram_init(struct fmdsp *fmdsp, } fmdsp_putline(work->filename, vram, &font_fmdsp_medium, FILEBAR_FILENAME_X, PLAYING_Y, 2, false); + vramblit(vram, PCM1FILEBAR_X, PLAYING_Y, + s_filebar, FILEBAR_W, FILEBAR_H); + fmdsp_putline("PCM1", vram, &font_fmdsp_small, + PCM1FILETXT_X, PLAYING_Y+1, 2, false); + vramblit(vram, PCM1FILETRI_X, FILEBAR_TRI_Y, + s_filebar_tri, FILEBAR_TRI_W, FILEBAR_TRI_H); + fmdsp_putline(work->pcmname[0], vram, &font_fmdsp_medium, + PCM1FILENAME_X, PLAYING_Y, 2 + work->pcmerror[0], false); + vramblit(vram, PCM2FILEBAR_X, PLAYING_Y, + s_filebar, FILEBAR_W, FILEBAR_H); + fmdsp_putline("PCM2", vram, &font_fmdsp_small, + PCM2FILETXT_X, PLAYING_Y+1, 2, false); + vramblit(vram, PCM2FILETRI_X, FILEBAR_TRI_Y, + s_filebar_tri, FILEBAR_TRI_W, FILEBAR_TRI_H); + fmdsp_putline(work->pcmname[1], vram, &font_fmdsp_medium, + PCM2FILENAME_X, PLAYING_Y, 2 + work->pcmerror[1], false); int height = (16+3)*3+8; for (int y = PC98_H-height; y < PC98_H; y++) { for (int x = 0; x < PC98_W; x++) { @@ -421,6 +451,7 @@ static void fmdsp_track_info_ppz8(const struct ppz8 *ppz8, int chi, int x, int y, uint8_t *vram) { + if (!ppz8) return; const struct ppz8_channel *ch = &ppz8->channel[chi]; fmdsp_putline("PAN VOL FREQ PTR END LOOPS LOOPE", vram, &font_fmdsp_small, x, y, 1, false); @@ -492,6 +523,8 @@ static void fmdsp_track_without_key( track_info2[c] = track->fmslotmask[c] ? ' ' : ('1'+c); } break; + default: + break; } } fmdsp_putline(track_info1, vram, &font_fmdsp_small, TINFO_X, y+0, 2, true); @@ -522,12 +555,13 @@ static void fmdsp_track_without_key( snprintf(numbuf, sizeof(numbuf), "%03d", track->gate); fmdsp_putline(numbuf, vram, &font_fmdsp_small, TDETAIL_GT_V_X, y+6, 1, true); fmdsp_putline("DT:", vram, &font_fmdsp_small, TDETAIL_DT_X, y+6, 1, true); - if (track->detune) { - snprintf(numbuf, sizeof(numbuf), "%+04d", track->detune); - } else { - snprintf(numbuf, sizeof(numbuf), " 000"); - } + snprintf(numbuf, sizeof(numbuf), "%03d", (track->detune > 0) ? track->detune : -track->detune); fmdsp_putline(numbuf, vram, &font_fmdsp_small, TDETAIL_DT_V_X, y+6, 1, true); + int sign; + if (!track->detune) sign = 0; + else if (track->detune < 0) sign = 1; + else sign = 2; + vramblit(vram, TDETAIL_DT_S_X, y+6+2, s_dt_sign[sign], DT_SIGN_W, DT_SIGN_H); fmdsp_putline("M:", vram, &font_fmdsp_small, TDETAIL_M_X, y+6, 1, true); fmdsp_putline(track->status, vram, &font_fmdsp_small, TDETAIL_M_V_X, y+6, 1, true); uint8_t color_on = ((track->key == 0xff) || fmdsp->masked[t]) ? 7 : 2; @@ -553,13 +587,14 @@ static void fmdsp_update_10(struct fmdsp *fmdsp, } } for (int it = 0; it < FMDSP_TRACK_DISP_CNT_DEFAULT; it++) { - int t = (fmdsp->style == FMDSP_DISPSTYLE_DEFAULT) ? - track_disp_table_default[it] : - track_disp_table_opn[it]; + int t; + if (fmdsp->style == FMDSP_DISPSTYLE_DEFAULT) t = track_disp_table_default[it]; + else if (fmdsp->style == FMDSP_DISPSTYLE_OPN) t = track_disp_table_opn[it]; + else t = track_disp_table_ppz8[it]; const struct fmdriver_track_status *track = &work->track_status[t]; - if ((track->info == FMDRIVER_TRACK_INFO_PPZ8) - || (track->info == FMDRIVER_TRACK_INFO_PDZF) + if (((track->info == FMDRIVER_TRACK_INFO_PPZ8) + || (track->info == FMDRIVER_TRACK_INFO_PDZF)) && track->ppz8_ch) { fmdsp_track_info_ppz8(work->ppz8, track->ppz8_ch-1, 320, TRACK_H*it+6, vram); @@ -578,6 +613,11 @@ static void fmdsp_update_10(struct fmdsp *fmdsp, break; case FMDRIVER_TRACKTYPE_ADPCM: fmdsp_track_info_adpcm(opna, 320, TRACK_H*it+6, vram); + break; + case FMDRIVER_TRACKTYPE_PPZ8: + fmdsp_track_info_ppz8(work->ppz8, track_type_table[t].num-1, + 320, TRACK_H*it+6, vram); + break; } } fmdsp_track_without_key(fmdsp, work, track, t, TRACK_H*it, vram); @@ -608,12 +648,12 @@ static void fmdsp_update_13(struct fmdsp *fmdsp, vram[y*PC98_W+x] = 0; } } - for (int it = 0; it < FMDRIVER_TRACK_NUM; it++) { + for (int it = 0; it < FMDRIVER_TRACK_PPZ8_1; it++) { int t = it; const struct fmdriver_track_status *track = &work->track_status[t]; - if ((track->info == FMDRIVER_TRACK_INFO_PPZ8) - || (track->info == FMDRIVER_TRACK_INFO_PDZF) + if (((track->info == FMDRIVER_TRACK_INFO_PPZ8) + || (track->info == FMDRIVER_TRACK_INFO_PDZF)) && track->ppz8_ch) { fmdsp_track_info_ppz8(work->ppz8, track->ppz8_ch-1, 320, TRACK_H_S*it, vram); @@ -700,22 +740,6 @@ void fmdsp_vrampalette(struct fmdsp *fmdsp, const uint8_t *vram, uint8_t *vram32 } } -//2/1 - 7/14 -// 0x21 - 0x7e -static void fontrom_copy_rows(uint8_t *font, const uint8_t *fontrom, - int rowstart, int rowend) { - for (int row = rowstart; row < rowend; row++) { - for (int cell = 0x20; cell < 0x80; cell++) { - for (int y = 0; y < 16; y++) { - // left - font[0x000+((row-0x20)<<4)+(cell<<12)+y] = fontrom[0x800+(0x60*16*2*(row-0x20))+(cell<<5)+y]; - // right - font[0x800+((row-0x20)<<4)+(cell<<12)+y] = fontrom[0x800+(0x60*16*2*(row-0x20))+(cell<<5)+y+16]; - } - } - } -} - void fmdsp_dispstyle_set(struct fmdsp *fmdsp, enum FMDSP_DISPSTYLE style) { if (style < 0) return; if (style >= FMDSP_DISPSTYLE_CNT) return; diff --git a/fmdsp/fmdsp.h b/fmdsp/fmdsp.h index 9c196f1..cce2310 100644 --- a/fmdsp/fmdsp.h +++ b/fmdsp/fmdsp.h @@ -24,6 +24,7 @@ enum { enum FMDSP_DISPSTYLE { FMDSP_DISPSTYLE_DEFAULT, FMDSP_DISPSTYLE_OPN, + FMDSP_DISPSTYLE_PPZ8, FMDSP_DISPSTYLE_13, FMDSP_DISPSTYLE_CNT }; diff --git a/fmdsp/fmdsp_sprites.h b/fmdsp/fmdsp_sprites.h index de6c839..cb011a6 100644 --- a/fmdsp/fmdsp_sprites.h +++ b/fmdsp/fmdsp_sprites.h @@ -13,7 +13,8 @@ enum { TDETAIL_GT_X = TDETAIL_VL_V_X+20, TDETAIL_GT_V_X = TDETAIL_GT_X+13, TDETAIL_DT_X = TDETAIL_GT_V_X+20, - TDETAIL_DT_V_X = TDETAIL_DT_X+13, + TDETAIL_DT_S_X = TDETAIL_DT_X+12, + TDETAIL_DT_V_X = TDETAIL_DT_S_X+4, TDETAIL_M_X = 250, TDETAIL_M_V_X = TDETAIL_M_X+8, NUM_X = 31, @@ -45,15 +46,27 @@ enum { PLAYING_W = 72, PLAYING_H = 9, FILEBAR_X = 80, - FILEBAR_MUSIC_X = FILEBAR_X + 5, - FILEBAR_FILE_X = FILEBAR_MUSIC_X + 26, + FILEBAR_MUS_X = FILEBAR_X + 5, + FILEBAR_IC_X = FILEBAR_MUS_X + 14, + FILEBAR_F_X = FILEBAR_IC_X + 11, + FILEBAR_ILE_X = FILEBAR_F_X + 4, FILEBAR_W = 2, FILEBAR_H = 7, - FILEBAR_TRI_X = FILEBAR_FILE_X + 22, + FILEBAR_TRI_X = FILEBAR_ILE_X + 17, FILEBAR_TRI_Y = PLAYING_Y+4, FILEBAR_TRI_W = 3, FILEBAR_TRI_H = 3, FILEBAR_FILENAME_X = FILEBAR_TRI_X + 8, + PCM1FILEBAR_X = 463, + PCM1FILETXT_X = PCM1FILEBAR_X + 5, + PCM1FILETRI_X = PCM1FILETXT_X + 21, + PCM1FILENAME_X = PCM1FILETRI_X + 8, + PCM2FILEBAR_X = 551, + PCM2FILETXT_X = PCM2FILEBAR_X + 5, + PCM2FILETRI_X = PCM2FILETXT_X + 21, + PCM2FILENAME_X = PCM2FILETRI_X + 8, + DT_SIGN_W = 3, + DT_SIGN_H = 3, }; enum { @@ -457,3 +470,21 @@ static const uint8_t s_filebar_tri[FILEBAR_TRI_W*FILEBAR_TRI_H] = { 2, 2, 0, 2, 2, 2, }; + +static const uint8_t s_dt_sign[3][DT_SIGN_W*DT_SIGN_H] = { + { + 0, 0, 0, + 0, 0, 0, + 0, 0, 0, + }, + { + 0, 0, 0, + 1, 1, 1, + 0, 0, 0, + }, + { + 0, 1, 0, + 1, 1, 1, + 0, 1, 0, + } +}; diff --git a/fmdsp/font_fmdsp_medium_data.h b/fmdsp/font_fmdsp_medium_data.h index 11d0bb5..2036926 100644 --- a/fmdsp/font_fmdsp_medium_data.h +++ b/fmdsp/font_fmdsp_medium_data.h @@ -171,4 +171,3 @@ static const unsigned char fmdsp_medium_dat[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static unsigned int fmdsp_medium_2_dat_len = 2048; diff --git a/fmdsp/font_fmdsp_small_data.h b/fmdsp/font_fmdsp_small_data.h index 3702831..d5f9105 100644 --- a/fmdsp/font_fmdsp_small_data.h +++ b/fmdsp/font_fmdsp_small_data.h @@ -128,4 +128,4 @@ static const unsigned char fontdat[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static unsigned int fmdsp_dat_len = 1536; + |