mirror of
https://github.com/libretro/NP2kai.git
synced 2024-10-07 14:53:33 +00:00
Merge kaiE
This commit is contained in:
parent
6694e9c867
commit
d76e116810
@ -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);
|
||||
|
@ -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]);
|
||||
|
20
cbus/ideio.c
20
cbus/ideio.c
@ -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) {
|
||||
|
@ -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[];
|
||||
|
@ -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) {
|
||||
|
@ -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) {
|
||||
|
2
io/fdc.c
2
io/fdc.c
@ -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();
|
||||
|
9
io/gdc.c
9
io/gdc.c
@ -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);
|
||||
}
|
||||
|
10
nevent.h
10
nevent.h
@ -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;
|
||||
|
||||
|
2
pccore.c
2
pccore.c
@ -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,
|
||||
|
1
pccore.h
1
pccore.h
@ -128,6 +128,7 @@ struct tagNP2Config
|
||||
UINT8 vol_adpcm;
|
||||
UINT8 vol_pcm;
|
||||
UINT8 vol_rhythm;
|
||||
UINT8 vol_cdda; // ’ljÁ(kaiE)
|
||||
|
||||
UINT8 mpuenable;
|
||||
UINT8 mpuopt;
|
||||
|
@ -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},
|
||||
|
||||
|
@ -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;
|
||||
|
@ -15,6 +15,9 @@ typedef void (SOUNDCALL * SOUNDCB)(void *hdl, SINT32 *pcm, UINT count);
|
||||
|
||||
typedef struct {
|
||||
UINT rate;
|
||||
// CDDATvOf[^Ôø«Ìœß̬×H
|
||||
UINT cddaskip;
|
||||
//
|
||||
UINT32 hzbase;
|
||||
UINT32 clockbase;
|
||||
UINT32 minclock;
|
||||
|
@ -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),
|
||||
|
@ -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},
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user