Merge kaiE

This commit is contained in:
Tomohiro Yoshidomi 2017-08-22 15:47:36 +09:00
parent 6694e9c867
commit d76e116810
16 changed files with 266 additions and 37 deletions

View File

@ -167,7 +167,11 @@ static void fdd_int(int result) {
default:
return;
}
fdc.stat[fdc.us] = (fdc.hd << 2) | fdc.us;
// kaiD
if (fdd_fdcresult() == FALSE) {
fdc.stat[fdc.us] = (fdc.hd << 2) | fdc.us;
}
//
switch(result) {
case FDCBIOS_SUCCESS:
fdcsend_success7();
@ -306,7 +310,10 @@ static REG8 fdd_operate(REG8 type, REG8 rpm, BOOL ndensity) {
// とりあえずBIOSの時は無視する
fdc.mf = 0xff;
// TRACE_("int 1Bh", CPU_AH);
TRACEOUT(("int 1Bh AH[%02x]:AL[%02x]", CPU_AH, CPU_AL));
TRACEOUT(("\tBX[%04x]", CPU_BX));
TRACEOUT(("\tCH[%02x]:CL[%02x]:DH[%02x]:DL[%02x]", CPU_CH, CPU_CL, CPU_DH, CPU_DL));
TRACEOUT(("\tES[%04x]:BP[%04x]", CPU_ES, CPU_BP));
if (setfdcmode((REG8)(CPU_AL & 3), type, rpm) != SUCCESS) {
return(0x40);
@ -358,6 +365,7 @@ static REG8 fdd_operate(REG8 type, REG8 rpm, BOOL ndensity) {
switch(CPU_AH & 0x0f) {
case 0x00: // シーク
// 0000b SEEK
if (CPU_AH & 0x10) {
if (biosfd_seek(CPU_CL, ndensity) == SUCCESS) {
result = FDCBIOS_SEEKSUCCESS;
@ -370,6 +378,7 @@ static REG8 fdd_operate(REG8 type, REG8 rpm, BOOL ndensity) {
break;
case 0x01: // ベリファイ
// 0001b VERIFY
if (CPU_AH & 0x10) {
if (biosfd_seek(CPU_CL, ndensity) == SUCCESS) {
result = FDCBIOS_SEEKSUCCESS;
@ -426,11 +435,13 @@ static REG8 fdd_operate(REG8 type, REG8 rpm, BOOL ndensity) {
break;
case 0x03: // 初期化
// 0011b INITIALIZE
fddbios_equip(type, FALSE);
ret_ah = 0x00;
break;
case 0x04: // センス
// 0100b SENSE
ret_ah = 0x00;
if (fdd_diskprotect(fdc.us))
{
@ -456,6 +467,7 @@ static REG8 fdd_operate(REG8 type, REG8 rpm, BOOL ndensity) {
break;
case 0x05: // データの書き込み
// 0101b WRITE DATA
if (CPU_AH & 0x10) {
if (biosfd_seek(CPU_CL, ndensity) == SUCCESS) {
result = FDCBIOS_SEEKSUCCESS;
@ -521,6 +533,11 @@ static REG8 fdd_operate(REG8 type, REG8 rpm, BOOL ndensity) {
case 0x02: // 診断の為の読み込み
case 0x06: // データの読み込み
if ((CPU_AH & 0x0f) == 0x02) {
TRACEOUT(("\tREAD DIAGNOSTIC not Support, Use READ DATA logic"));
}
// 0010b READ DIAGNOSTIC
// 0110b READ DATA
if (CPU_AH & 0x10) {
if (biosfd_seek(CPU_CL, ndensity) == SUCCESS) {
result = FDCBIOS_SEEKSUCCESS;
@ -608,12 +625,19 @@ static REG8 fdd_operate(REG8 type, REG8 rpm, BOOL ndensity) {
break;
case 0x07: // シリンダ0へシーク
// 0111b RECALIBRATE
biosfd_seek(0, 0);
ret_ah = 0x00;
result = FDCBIOS_SEEKSUCCESS;
break;
case 0x09:
// 1001b WRITE DELETED DATA
TRACEOUT(("\tWRITE DELETED DATA not Support"));
break;
case 0x0a: // READ ID
// 1010b READ ID
fdc.mf = CPU_AH & 0x40;
if (CPU_AH & 0x10) {
if (biosfd_seek(CPU_CL, ndensity) == SUCCESS) {
@ -643,7 +667,13 @@ static REG8 fdd_operate(REG8 type, REG8 rpm, BOOL ndensity) {
result = FDCBIOS_SUCCESS;
break;
case 0x0c:
// 1100b READ DELETED DATA
TRACEOUT(("\tREAD DELETED DATA not Support"));
break;
case 0x0d: // フォーマット
// 1101b FORMAT TRACK
if (CPU_AH & 0x10) {
biosfd_seek(CPU_CL, ndensity);
}
@ -676,6 +706,7 @@ static REG8 fdd_operate(REG8 type, REG8 rpm, BOOL ndensity) {
break;
case 0x0e: // ver0.78
// 0111b SET OPERATION MODE
if (CPU_AH & 0x80) { // 密度設定
mem[fmode] &= 0x0f;
mem[fmode] |= (UINT8)((CPU_AH & 0x0f) << 4);

View File

@ -68,7 +68,8 @@ static void senddata(IDEDRV drv, UINT size, UINT limit) {
drv->bufsize = size;
if (!(drv->ctrl & IDECTRL_NIEN)) {
//TRACEOUT(("atapicmd: senddata()"));
// TRACEOUT(("ATAPI CMD: senddata()"));
TRACEOUT(("ATAPI CMD RESULT: SEND DATA[ %d Byte]", size));
ideio.bank[0] = ideio.bank[1] | 0x80; // ????
pic_setirq(IDE_IRQ);
}
@ -84,7 +85,8 @@ static void cmddone(IDEDRV drv) {
drv->asc = ATAPI_ASC_NO_ADDITIONAL_SENSE_INFORMATION;
if (!(drv->ctrl & IDECTRL_NIEN)) {
//TRACEOUT(("atapicmd: cmddone()"));
// TRACEOUT(("ATAPI CMD: cmddone()"));
TRACEOUT(("ATAPI CMD RESULT: COMMAND DONE"));
ideio.bank[0] = ideio.bank[1] | 0x80; // ????
pic_setirq(IDE_IRQ);
}
@ -97,7 +99,8 @@ static void senderror(IDEDRV drv) {
drv->status |= IDESTAT_CHK;
if (!(drv->ctrl & IDECTRL_NIEN)) {
//TRACEOUT(("atapicmd: senderror()"));
// TRACEOUT(("ATAPI CMD: senderror()"));
TRACEOUT(("ATAPI CMD RESULT: SEND ERROR"));
ideio.bank[0] = ideio.bank[1] | 0x80; // ????
pic_setirq(IDE_IRQ);
}
@ -178,7 +181,12 @@ void atapicmd_a0(IDEDRV drv) {
cmd = drv->buf[0];
switch (cmd) {
case 0x00: // test unit ready
//TRACEOUT(("atapicmd: test unit ready"));
// TRACEOUT(("ATAPI CMD: test unit ready"));
// TRACEOUT(("ATAPI CMD: test unit ready:[%02x %02x %02x %02x %02x %02x]",
// drv->buf[0], drv->buf[1], drv->buf[2], drv->buf[3], drv->buf[4], drv->buf[5]));
TRACEOUT(("ATAPI CMD: test unit ready"));
TRACEOUT(("\t[%02x %02x %02x %02x %02x %02x %02x %02x]",
drv->buf[0x00], drv->buf[0x01], drv->buf[0x02], drv->buf[0x03], drv->buf[0x04], drv->buf[0x05], drv->buf[0x06], drv->buf[0x07]));
if (!(drv->media & IDEIO_MEDIA_LOADED)) {
/* medium not present */
ATAPI_SET_SENSE_KEY(drv, ATAPI_SK_NOT_READY);
@ -204,7 +212,7 @@ void atapicmd_a0(IDEDRV drv) {
break;
case 0x03: // request sense
TRACEOUT(("atapicmd: request sense"));
TRACEOUT(("ATAPI CMD: request sense"));
leng = drv->buf[4];
ZeroMemory(drv->buf, 18);
drv->buf[0] = 0x70;
@ -215,29 +223,29 @@ void atapicmd_a0(IDEDRV drv) {
break;
case 0x12: // inquiry
TRACEOUT(("atapicmd: inquiry"));
TRACEOUT(("ATAPI CMD: inquiry"));
leng = drv->buf[4];
CopyMemory(drv->buf, cdrom_inquiry, sizeof(cdrom_inquiry));
senddata(drv, sizeof(cdrom_inquiry), leng);
break;
case 0x1b: // start stop unit
TRACEOUT(("atapicmd: start stop unit"));
TRACEOUT(("ATAPI CMD: start stop unit"));
atapi_cmd_start_stop_unit(drv);
break;
case 0x1e: // prevent allow medium removal
TRACEOUT(("atapicmd: prevent allow medium removal"));
TRACEOUT(("ATAPI CMD: prevent allow medium removal"));
atapi_cmd_prevent_allow_medium_removal(drv);
break;
case 0x25: // read capacity
TRACEOUT(("atapicmd: read capacity"));
TRACEOUT(("ATAPI CMD: read capacity"));
atapi_cmd_read_capacity(drv);
break;
case 0x28: // read(10)
TRACEOUT(("atapicmd: read(10)"));
TRACEOUT(("ATAPI CMD: read(10)"));
lba = (drv->buf[2] << 24) + (drv->buf[3] << 16) + (drv->buf[4] << 8) + drv->buf[5];
leng = (drv->buf[7] << 8) + drv->buf[8];
atapi_cmd_read(drv, lba, leng);
@ -249,22 +257,22 @@ void atapicmd_a0(IDEDRV drv) {
break;
case 0x55: // mode select
TRACEOUT(("atapicmd: mode select"));
TRACEOUT(("ATAPI CMD: mode select"));
atapi_cmd_mode_select(drv);
break;
case 0x5a: // mode sense(10)
TRACEOUT(("atapicmd: mode sense(10)"));
// TRACEOUT(("ATAPI CMD: mode sense(10)"));
atapi_cmd_mode_sense(drv);
break;
case 0x42:
TRACEOUT(("atapicmd: read sub channel"));
// TRACEOUT(("ATAPI CMD: read sub channel"));
atapi_cmd_readsubch(drv);
break;
case 0x43: // read TOC
//TRACEOUT(("atapicmd: read TOC"));
// TRACEOUT(("ATAPI CMD: read TOC"));
atapi_cmd_readtoc(drv);
break;
@ -274,12 +282,12 @@ void atapicmd_a0(IDEDRV drv) {
break;
case 0x47: // Play Audio MSF
TRACEOUT(("atapicmd: Play Audio MSF"));
// TRACEOUT(("ATAPI CMD: Play Audio MSF"));
atapi_cmd_playaudiomsf(drv);
break;
case 0x4b:
TRACEOUT(("atapicmd: pause resume"));
TRACEOUT(("ATAPI CMD: pause resume"));
atapi_cmd_pauseresume(drv);
break;
@ -289,7 +297,7 @@ void atapicmd_a0(IDEDRV drv) {
break;
default:
TRACEOUT(("atapicmd: unknown command = %.2x", cmd));
TRACEOUT(("ATAPI CMD: unknown command = %.2x", cmd));
sendabort(drv);
break;
}
@ -404,7 +412,7 @@ void atapi_dataread(IDEDRV drv) {
drv->bufsize = 2048;
if (!(drv->ctrl & IDECTRL_NIEN)) {
//TRACEOUT(("atapicmd: senddata()"));
TRACEOUT(("ATAPI CMD: senddata()"));
ideio.bank[0] = ideio.bank[1] | 0x80; // ????
pic_setirq(IDE_IRQ);
}
@ -512,13 +520,19 @@ static void atapi_cmd_mode_sense(IDEDRV drv) {
UINT cnt;
UINT8 pctrl, pcode;
TRACEOUT(("ATAPI CMD: mode sense(10)"));
TRACEOUT(("\t[%02x %02x %02x %02x %02x %02x %02x %02x]",
drv->buf[0x00], drv->buf[0x01], drv->buf[0x02], drv->buf[0x03], drv->buf[0x04], drv->buf[0x05], drv->buf[0x06], drv->buf[0x07]));
TRACEOUT(("\t[%02x %02x %02x %02x %02x %02x %02x %02x]",
drv->buf[0x08], drv->buf[0x09], drv->buf[0x0a], drv->buf[0x0b], drv->buf[0x0c], drv->buf[0x0d], drv->buf[0x0e], drv->buf[0x0f]));
leng = (drv->buf[7] << 8) + drv->buf[8];
pctrl = ((drv->buf[2] >> 6) & 3) & ~0x2; // 0: current, 1: changeable, 2: default
pcode = drv->buf[2] & 0x3f;
if (pctrl == 3) {
/* Saved Page is not supported */
//TRACEOUT(("Saved Page is not supported"));
TRACEOUT(("\t\tSaved Page is not supported"));
ATAPI_SET_SENSE_KEY(drv, ATAPI_SK_ILLEGAL_REQUEST);
drv->asc = ATAPI_ASC_SAVING_PARAMETERS_NOT_SUPPORTED;
senderror(drv);
@ -545,7 +559,7 @@ static void atapi_cmd_mode_sense(IDEDRV drv) {
}
/* Mode Page */
//TRACEOUT(("pcode = %.2x", pcode));
TRACEOUT(("\t\tpcode = %.2x", pcode));
switch (pcode) {
#if defined(SUPPORT_NECCDD)
case 0x0f:
@ -731,6 +745,12 @@ static void atapi_cmd_readsubch(IDEDRV drv) {
UINT r;
UINT32 pos;
TRACEOUT(("ATAPI CMD: read sub channel"));
TRACEOUT(("\t[%02x %02x %02x %02x %02x %02x %02x %02x]",
drv->buf[0x00], drv->buf[0x01], drv->buf[0x02], drv->buf[0x03], drv->buf[0x04], drv->buf[0x05], drv->buf[0x06], drv->buf[0x07]));
TRACEOUT(("\t[%02x %02x %02x %02x %02x %02x %02x %02x]",
drv->buf[0x08], drv->buf[0x09], drv->buf[0x0a], drv->buf[0x0b], drv->buf[0x0c], drv->buf[0x0d], drv->buf[0x0e], drv->buf[0x0f]));
sxsi = sxsi_getptr(drv->sxsidrv);
if ((sxsi == NULL) || (sxsi->devtype != SXSIDEV_CDROM) ||
(!(sxsi->flag & SXSIFLAG_READY))) {
@ -924,6 +944,9 @@ static void atapi_cmd_playaudiomsf(IDEDRV drv) {
UINT32 pos;
UINT32 leng;
TRACEOUT(("ATAPI CMD: Play Audio MSF : POS[%02d:%02d:%02d],LEN[%02d:%02d:%02d]",
drv->buf[3], drv->buf[4], drv->buf[5],
drv->buf[6], drv->buf[7], drv->buf[8]));
int M, S, F;
if(drv->damsfbcd){
M = BCD2HEX(drv->buf[3]);

View File

@ -1212,6 +1212,10 @@ static BRESULT SOUNDCALL playdevaudio(IDEDRV drv, SINT32 *pcm, UINT count) {
const UINT8 *ptr;
SINT sampl;
SINT sampr;
UINT skipcnt;
// CDDA
count = count * soundcfg.cddaskip;
sxsi = sxsi_getptr(drv->sxsidrv);
if ((sxsi == NULL) || (sxsi->devtype != SXSIDEV_CDROM) ||
@ -1225,13 +1229,27 @@ const UINT8 *ptr;
count -= r;
ptr = drv->dabuf + 2352 - (drv->dabufrem * 4);
drv->dabufrem -= r;
skipcnt = 0;
do {
sampl = ((SINT8)ptr[1] << 8) + ptr[0];
sampr = ((SINT8)ptr[3] << 8) + ptr[2];
#if 0
pcm[0] += (SINT)((int)(sampl)*np2cfg.davolume/255);
pcm[1] += (SINT)((int)(sampr)*np2cfg.davolume/255);
#else
skipcnt++;
if ((skipcnt % soundcfg.cddaskip) == 0) {
pcm[0] += sampl;
pcm[1] += sampr;
// (kaiE)
pcm[0] = (pcm[0] * np2cfg.vol_cdda) >> 6;
pcm[1] = (pcm[1] * np2cfg.vol_cdda) >> 6;
//
pcm += 2;
}
#endif
ptr += 4;
pcm += 2;
// pcm += 2;
} while(--r);
}
if (count == 0) {

View File

@ -37,6 +37,12 @@ extern const OEMCHAR str_hdd[];
extern const OEMCHAR str_nhd[];
extern const OEMCHAR str_vhd[];
extern const OEMCHAR str_slh[];
// 追加(kai9)
extern const OEMCHAR str_dcp[];
extern const OEMCHAR str_dcu[];
//
extern const OEMCHAR str_nfd[]; // 追加(kaiA)
extern const OEMCHAR str_vfdd[]; // 追加(kaiB)
extern const OEMCHAR str_d[];
extern const OEMCHAR str_u[];

View File

@ -144,14 +144,41 @@ static REG16 MEMCALL memnc_rd16(UINT32 address) {
static void MEMCALL memnc_wr8(UINT32 address, REG8 value) {
(void)address;
(void)value;
// 強制RAM化
// (void)address;
// (void)value;
if (CPU_RAM_D000 & (1 << ((address >> 12) & 15))) {
mem[address] = (UINT8)value;
}
//
}
static void MEMCALL memnc_wr16(UINT32 address, REG16 value) {
(void)address;
(void)value;
// 強制RAM化
// (void)address;
// (void)value;
UINT8 *ptr;
UINT16 bit;
ptr = mem + address;
bit = 1 << ((address >> 12) & 15);
if ((address + 1) & 0xfff) {
if (CPU_RAM_D000 & bit) {
STOREINTELWORD(ptr, value);
}
}
else {
if (CPU_RAM_D000 & bit) {
ptr[0] = (UINT8)value;
}
if (CPU_RAM_D000 & (bit << 1)) {
ptr[1] = (UINT8)(value >> 8);
}
}
//
}
@ -519,6 +546,13 @@ void MEMCALL memp_write8(UINT32 address, REG8 value) {
else {
address = address & CPU_ADRSMASK;
if (address < USE_HIMEM) {
// 強制RAM化
if ((address >= 0xa5000) && (address < 0xa7fff)) {
if (CPU_RAM_D000 & (1 << ((address >> 12) & 15))) {
mem[address] = (UINT8)value;
}
}
//
memfn0.wr8[address >> 15](address, value);
}
else if (address < CPU_EXTLIMIT16) {
@ -553,6 +587,29 @@ void MEMCALL memp_write16(UINT32 address, REG16 value) {
else if ((address + 1) & 0x7fff) { // non 32kb boundary
address = address & CPU_ADRSMASK;
if (address < USE_HIMEM) {
// 強制RAM化
if ((address >= 0xa5000) && (address < 0xa7fff)) {
UINT8 *ptr;
UINT16 bit;
ptr = mem + address;
bit = 1 << ((address >> 12) & 15);
if ((address + 1) & 0xfff) {
if (CPU_RAM_D000 & bit) {
STOREINTELWORD(ptr, value);
}
}
else {
if (CPU_RAM_D000 & bit) {
ptr[0] = (UINT8)value;
}
if (CPU_RAM_D000 & (bit << 1)) {
ptr[1] = (UINT8)(value >> 8);
}
}
}
//
memfn0.wr16[address >> 15](address, value);
}
else if (address < CPU_EXTLIMIT16) {

View File

@ -71,14 +71,41 @@ static REG16 MEMCALL memnc_rd16(UINT32 address) {
static void MEMCALL memnc_wr8(UINT32 address, REG8 value) {
(void)address;
(void)value;
// 強制RAM化
// (void)address;
// (void)value;
if (CPU_RAM_D000 & (1 << ((address >> 12) & 15))) {
mem[address] = (UINT8)value;
}
//
}
static void MEMCALL memnc_wr16(UINT32 address, REG16 value) {
(void)address;
(void)value;
// 強制RAM化
// (void)address;
// (void)value;
UINT8 *ptr;
UINT16 bit;
ptr = mem + address;
bit = 1 << ((address >> 12) & 15);
if ((address + 1) & 0xfff) {
if (CPU_RAM_D000 & bit) {
STOREINTELWORD(ptr, value);
}
}
else {
if (CPU_RAM_D000 & bit) {
ptr[0] = (UINT8)value;
}
if (CPU_RAM_D000 & (bit << 1)) {
ptr[1] = (UINT8)(value >> 8);
}
}
//
}
@ -430,6 +457,13 @@ void MEMCALL memp_write8(UINT32 address, REG8 value) {
else {
address = address & CPU_ADRSMASK;
if (address < USE_HIMEM) {
// 強制RAM化
if ((address >= 0xa5000) && (address < 0xa7fff)) {
if (CPU_RAM_D000 & (1 << ((address >> 12) & 15))) {
mem[address] = (UINT8)value;
}
}
//
memfn0.wr8[address >> 15](address, value);
}
else if (address < CPU_EXTLIMIT16) {
@ -464,6 +498,29 @@ void MEMCALL memp_write16(UINT32 address, REG16 value) {
else if ((address + 1) & 0x7fff) { // non 32kb boundary
address = address & CPU_ADRSMASK;
if (address < USE_HIMEM) {
// 強制RAM化
if ((address >= 0xa5000) && (address < 0xa7fff)) {
UINT8 *ptr;
UINT16 bit;
ptr = mem + address;
bit = 1 << ((address >> 12) & 15);
if ((address + 1) & 0xfff) {
if (CPU_RAM_D000 & bit) {
STOREINTELWORD(ptr, value);
}
}
else {
if (CPU_RAM_D000 & bit) {
ptr[0] = (UINT8)value;
}
if (CPU_RAM_D000 & (bit << 1)) {
ptr[1] = (UINT8)(value >> 8);
}
}
}
//
memfn0.wr16[address >> 15](address, value);
}
else if (address < CPU_EXTLIMIT16) {

View File

@ -136,6 +136,8 @@ void fdcsend_success7(void) {
fdc.buf[5] = fdc.R;
fdc.buf[6] = fdc.N;
fdc.status = FDCSTAT_RQM | FDCSTAT_CB | FDCSTAT_DIO;
TRACEOUT(("\tbuf %02x %02x %02x %02x %02x %02x %02x",
fdc.buf[0], fdc.buf[1], fdc.buf[2], fdc.buf[3], fdc.buf[4], fdc.buf[5], fdc.buf[6]));
fdc.stat[fdc.us] = 0; // ver0.29
fdc_dmaready(0);
dmac_check();

View File

@ -1139,12 +1139,13 @@ void gdc_reset(const NP2CFG *pConfig) {
ZeroMemory(&gdc, sizeof(gdc));
ZeroMemory(&gdcs, sizeof(gdcs));
#if !defined(SUPPORT_PC9821)
if (pConfig->color16 & 1)
#endif
{
#if defined(SUPPORT_PC9821)
gdc.display |= (1 << GDCDISP_ANALOG);
#else
if (np2cfg.color16 & 1) {
gdc.display |= (1 << GDCDISP_ANALOG);
}
#endif
if (!(pccore.dipsw[0] & 0x04)) { // dipsw1-3 on
gdc.display |= (1 << GDCDISP_PLAZMA2);
}

View File

@ -45,8 +45,16 @@ enum tagNEventId
NEVENT_SCSIIO = 27,
NEVENT_CDWAIT = 28, // XXX: 勝手に使ってOK?
NEVENT_CT1741 = 29, // np2sより 28を使っちゃったので29に np21w ver0.86 rev29
#if defined(VAEG_EXT)
NEVENT_FDCTIMER = 29,
NEVENT_FDDMOTOR = 30,
NEVENT_FDCSTEPWAIT = 31,
#endif
#if defined(VAEG_FIX)
NEVENT_FDCSTATE = 32,
#endif
/* ---- */
NEVENT_MAXEVENTS = 32
NEVENT_MAXEVENTS = 33
};
typedef enum tagNEventId NEVENTID;

View File

@ -75,7 +75,7 @@ const OEMCHAR np2version[] = OEMTEXT(NP2VER_CORE);
1, 3, 2, 1, 0x000000, 0xffffff,
44100, 250, 4, 0,
{0, 0, 0}, 0xd1, 0x7f, 0xd1, 0, 0, 1,
3, {0x0c, 0x0c, 0x08, 0x06, 0x03, 0x0c}, 64, 64, 64, 64, 64,
3, {0x0c, 0x0c, 0x08, 0x06, 0x03, 0x0c}, 64, 64, 64, 64, 64, 64,
1, 0x82, 0,
0, {0x17, 0x04, 0x1f}, {0x0c, 0x0c, 0x02, 0x10, 0x3f, 0x3f},
0, 3, 0, 80, 0, 0, 1,

View File

@ -128,6 +128,7 @@ struct tagNP2Config
UINT8 vol_adpcm;
UINT8 vol_pcm;
UINT8 vol_rhythm;
UINT8 vol_cdda; // ’ljÁ(kaiE)
UINT8 mpuenable;
UINT8 mpuopt;

View File

@ -569,6 +569,7 @@ static const INITBL iniitem[] = {
{"volume_A", INIMAX_UINT8, &np2cfg.vol_adpcm, 128},
{"volume_P", INIMAX_UINT8, &np2cfg.vol_pcm, 128},
{"volume_R", INIMAX_UINT8, &np2cfg.vol_rhythm, 128},
{"volume_C", INIMAX_UINT8, &np2cfg.vol_cdda, 128},
{"sndgen", INITYPE_UINT8, &np2cfg.sndgen, 0},

View File

@ -215,6 +215,8 @@ BRESULT sound_create(UINT rate, UINT ms) {
UINT reserve;
ZeroMemory(&sndstream, sizeof(sndstream));
// CDDA
#if 0
switch(rate) {
case 11025:
case 22050:
@ -229,6 +231,23 @@ BRESULT sound_create(UINT rate, UINT ms) {
default:
return(FAILURE);
}
#else
switch(rate) {
case 11025:
soundcfg.cddaskip = 4;
break;
case 22050:
soundcfg.cddaskip = 2;
break;
case 44100:
soundcfg.cddaskip = 1;
break;
default:
soundcfg.cddaskip = 1;
return(FAILURE);
}
#endif
samples = soundmng_create(rate, ms);
if (samples == 0) {
goto scre_err1;

View File

@ -15,6 +15,9 @@ typedef void (SOUNDCALL * SOUNDCB)(void *hdl, SINT32 *pcm, UINT count);
typedef struct {
UINT rate;
// CDDAƒTƒ“ƒvƒŠƒ“ƒOƒf[ƒ^ŠÔˆø‚«‚Ì‚œ‚߂̏¬×H
UINT cddaskip;
//
UINT32 hzbase;
UINT32 clockbase;
UINT32 minclock;

View File

@ -524,6 +524,7 @@ static const PFTBL s_IniItems[] =
PFMAX("volume_A", PFTYPE_UINT8, &np2cfg.vol_adpcm, 128),
PFMAX("volume_P", PFTYPE_UINT8, &np2cfg.vol_pcm, 128),
PFMAX("volume_R", PFTYPE_UINT8, &np2cfg.vol_rhythm, 128),
PFMAX("volume_C", PFTYPE_UINT8, &np2cfg.vol_cdda, 128), // CD-DA(kaiE)
PFVAL("Seek_Snd", PFTYPE_BOOL, &np2cfg.MOTOR),
PFMAX("Seek_Vol", PFTYPE_UINT8, &np2cfg.MOTORVOL, 100),

View File

@ -563,6 +563,7 @@ static INITBL iniitem[] = {
{"volume_A", INIMAX_UINT8, &np2cfg.vol_adpcm, 128},
{"volume_P", INIMAX_UINT8, &np2cfg.vol_pcm, 128},
{"volume_R", INIMAX_UINT8, &np2cfg.vol_rhythm, 128},
{"volume_C", INIMAX_UINT8, &np2cfg.vol_cdda, 128},
{"sndgen", INITYPE_UINT8, &np2cfg.sndgen, 0},