From 98841f9009d19970bea47e19e9ef55bd243b5e63 Mon Sep 17 00:00:00 2001 From: Tomohiro Yoshidomi Date: Tue, 11 Dec 2018 02:25:53 +0900 Subject: [PATCH] Merge NP21/W rev.48,49 --- README.md | 6 +- bios/bios.c | 3 +- bios/bios18.c | 6 +- bios/bios1c.c | 4 +- cbus/gpibio.c | 1 + cbus/ideio.c | 1 + embed/menu/dlgwab.c | 113 +++- fdd/newdisk.c | 4 +- generic/memdbg32.c | 2 +- generic/np2info.c | 15 + i286c/cpumem.c | 457 ++++++++++---- i286c/cpumem.h | 2 + i386c/cpumem.c | 12 +- i386c/ia32/ia32.c | 35 +- io/emsio.c | 2 +- np2ver.h | 2 +- pccore.c | 5 +- pccore.h | 3 + sdl2/Makefile.mac | 4 +- sdl2/Makefile.unix | 4 +- sdl2/Makefile.win | 4 +- sdl2/cmmidi.c | 6 +- sdl2/ini.c | 6 + sdl2/libretro/libretro.c | 8 +- sound/fmboard.c | 5 + statsave.c | 3 + wab/cirrus_vga.c | 1027 ++++++++++++++++--------------- wab/cirrus_vga_extern.h | 5 + wab/wab.c | 44 +- wab/wab.h | 4 + win9x/dialog/d_sound.cpp | 18 +- win9x/dialog/d_wab.cpp | 7 + win9x/ini.cpp | 28 +- win9x/menu.cpp | 22 +- win9x/np2.cpp | 119 +++- win9x/np2.h | 1 + win9x/np2vs2017.vcxproj | 32 +- win9x/np2vs2017.vcxproj.filters | 78 +++ win9x/resource.h | 9 +- win9x/resources/1252/np2.rc | 11 +- win9x/resources/1252/np2.rc2 | 8 +- win9x/resources/932/np2.rc | 13 +- win9x/resources/932/np2.rc2 | 8 +- win9x/resources/932/np2jp.aps | Bin 282176 -> 294008 bytes win9x/resources/932/np2jp.rc | 3 + win9x/scrnmng.cpp | 13 + win9x/scrnmng.h | 1 + win9x/scrnmng_d3d.cpp | 43 +- win9x/scrnmng_d3d.h | 1 + win9x/scrnmng_dd.cpp | 7 + win9x/scrnmng_dd.h | 1 + win9x/soundmng.cpp | 1 + win9x/soundmng/sddsound3.cpp | 86 +-- win9x/soundmng/sddsound3.h | 2 + x11/Makefile.am | 4 +- x11/gtk2/dialog_wab.c | 154 ++++- x11/ini.c | 6 + 57 files changed, 1674 insertions(+), 795 deletions(-) diff --git a/README.md b/README.md index 67f77c6..10adf7a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -Neko Project II 0.86 kai rev.17 +Neko Project II 0.86 kai rev.18 === -Nov 29, 2018 +Dec 10, 2018 Build SDL2 port --- @@ -601,6 +601,8 @@ WAB Type normally uses 'PC-9821Xe10,Xa7e,Xb10 built-in'. Release --- +* Dec 10, 2018 (rev.18) + - Merge NP21/W 0.86 rev.48,49 * Nov 29, 2018 - Add MIDI support * Nov 25, 2018 diff --git a/bios/bios.c b/bios/bios.c index e3dc14e..c783191 100644 --- a/bios/bios.c +++ b/bios/bios.c @@ -379,6 +379,7 @@ void bios_initialize(void) { mem[ITF_ADRS + 5924] = 0x90; } #endif + np2cfg.memchkmx = 0; // 無効化 (obsolete) if(np2cfg.memchkmx){ // メモリカウント最大値変更 mem[ITF_ADRS + 6057] = mem[ITF_ADRS + 6061] = (UINT8)np2max((int)np2cfg.memchkmx-14, 1); // XXX: 場所決め打ち }else{ @@ -603,7 +604,7 @@ UINT MEMCALL biosfunc(UINT32 adrs) { // 高速メモリチェック if (CPU_ITFBANK && adrs == 0xf9724) { UINT16 subvalue = LOADINTELWORD((mem + ITF_ADRS + 5886)) / 128; - UINT16 memaddr = cpu_codefetch_w(CPU_EIP); + UINT16 memaddr = MEMP_READ16(CPU_EIP); UINT16 counter = MEMR_READ16(CPU_SS, CPU_EBP + 6); if(subvalue == 0) subvalue = 1; if(counter >= subvalue){ diff --git a/bios/bios18.c b/bios/bios18.c index c4992d7..bd4effc 100644 --- a/bios/bios18.c +++ b/bios/bios18.c @@ -961,9 +961,9 @@ void bios0x18(void) { #if defined(BIOS_IO_EMULATION) && defined(CPUCORE_IA32) // np21w ver0.86 rev47 BIOS I/O emulation if (CPU_STAT_PM && CPU_STAT_VM86) { - biosioemu_push8(0x43, 0x3a); - biosioemu_push8(0x43, 0x32); - biosioemu_push8(0x43, 0x16); + biosioemu_enq8(0x43, 0x3a); + biosioemu_enq8(0x43, 0x32); + biosioemu_enq8(0x43, 0x16); ZeroMemory(mem + 0x00502, 0x20); ZeroMemory(mem + 0x00528, 0x13); SETBIOSMEM16(MEMW_KB_SHIFT_TBL, 0x0e00); diff --git a/bios/bios1c.c b/bios/bios1c.c index 4a6d3c2..d4beaf8 100644 --- a/bios/bios1c.c +++ b/bios/bios1c.c @@ -28,7 +28,7 @@ void bios0x1c(void) { SETBIOSMEM16(0x0001c, CPU_BX); SETBIOSMEM16(0x0001e, CPU_ES); SETBIOSMEM16(0x0058a, CPU_CX); -#if defined(BIOS_IO_EMULATION) +#if defined(BIOS_IO_EMULATION) && defined(CPUCORE_IA32) if (CPU_STAT_PM && CPU_STAT_VM86) { biosioemu_enq8(0x77, 0x36); } else @@ -39,7 +39,7 @@ void bios0x1c(void) { /*FALLTHROUGH*/ case 0x03: // continue interval timer -#if defined(BIOS_IO_EMULATION) +#if defined(BIOS_IO_EMULATION) && defined(CPUCORE_IA32) if (CPU_STAT_PM && CPU_STAT_VM86) { biosioemu_enq8(0x71, 0x00); if (pccore.cpumode & CPUMODE_8MHZ) { diff --git a/cbus/gpibio.c b/cbus/gpibio.c index a6f9ac0..48cff0d 100644 --- a/cbus/gpibio.c +++ b/cbus/gpibio.c @@ -342,6 +342,7 @@ void gpibio_reset(const NP2CFG *pConfig) { if (fh != FILEH_INVALID) { // GP-IB BIOS if (file_read(fh, mem + 0x0d4000, 0x2000) == 0x2000) { + CPU_RAM_D000 &= ~(0x3 << 4); TRACEOUT(("load gpib.rom")); }else{ //CopyMemory(mem + 0x0d4000, gpibbios, sizeof(gpibbios)); diff --git a/cbus/ideio.c b/cbus/ideio.c index a68d0e8..597a0d4 100644 --- a/cbus/ideio.c +++ b/cbus/ideio.c @@ -1891,6 +1891,7 @@ void ideio_reset(const NP2CFG *pConfig) { CopyMemory(mem + 0xd8000, idebios, sizeof(idebios)); TRACEOUT(("use simulate ide.rom")); } + CPU_RAM_D000 &= ~(0x3 << 8); //if(ideio.bios==IDETC_NOBIOS){ // UINT16 param_2[] = {0x0598, 0x05b1, 0x058c, 0x058e}; diff --git a/embed/menu/dlgwab.c b/embed/menu/dlgwab.c index 6b9f24e..1893f58 100644 --- a/embed/menu/dlgwab.c +++ b/embed/menu/dlgwab.c @@ -44,7 +44,9 @@ static const OEMCHAR *str_cl_gd54xx_type[] = { OEMTEXT("PC-9821Xe10,Xa7e,Xb10 built-in"), OEMTEXT("PC-9821Cb2 built-in"), OEMTEXT("PC-9821Cx2 built-in"), +#ifdef SUPPORT_PCI OEMTEXT("PC-9821 PCI CL-GD5446 built-in"), +#endif OEMTEXT("MELCO WAB-S"), OEMTEXT("MELCO WSN-A2F"), OEMTEXT("MELCO WSN-A4F"), @@ -52,9 +54,14 @@ static const OEMCHAR *str_cl_gd54xx_type[] = { OEMTEXT("I-O DATA GA-98NBII"), OEMTEXT("I-O DATA GA-98NBIV"), OEMTEXT("PC-9801-96(PC-9801B3-E02)"), +#ifdef SUPPORT_PCI + OEMTEXT("Auto Select(Xe10, GA-98NBI/C), PCI"), + OEMTEXT("Auto Select(Xe10, GA-98NBII), PCI"), + OEMTEXT("Auto Select(Xe10, GA-98NBIV), PCI"), OEMTEXT("Auto Select(Xe10, WAB-S), PCI"), OEMTEXT("Auto Select(Xe10, WSN-A2F), PCI"), OEMTEXT("Auto Select(Xe10, WSN-A4F), PCI"), +#endif OEMTEXT("Auto Select(Xe10, WAB-S)"), OEMTEXT("Auto Select(Xe10, WSN-A2F)"), OEMTEXT("Auto Select(Xe10, WSN-A4F)"), @@ -142,6 +149,7 @@ const TABLISTS *tl; case CIRRUS_98ID_Cx2: type = 6; break; +#ifdef SUPPORT_PCI case CIRRUS_98ID_PCI: type = 7; break; @@ -166,24 +174,65 @@ const TABLISTS *tl; case CIRRUS_98ID_96: type = 14; break; - case CIRRUS_98ID_AUTO_XE_WA_PCI: + case CIRRUS_98ID_AUTO_XE_G1_PCI: type = 15; break; - case CIRRUS_98ID_AUTO_XE_WS_PCI: + case CIRRUS_98ID_AUTO_XE_G2_PCI: type = 16; break; - case CIRRUS_98ID_AUTO_XE_W4_PCI: + case CIRRUS_98ID_AUTO_XE_G4_PCI: type = 17; break; - case CIRRUS_98ID_AUTO_XE10_WABS: + case CIRRUS_98ID_AUTO_XE_WA_PCI: type = 18; break; - case CIRRUS_98ID_AUTO_XE10_WSN2: + case CIRRUS_98ID_AUTO_XE_WS_PCI: type = 19; break; - case CIRRUS_98ID_AUTO_XE10_WSN4: + case CIRRUS_98ID_AUTO_XE_W4_PCI: type = 20; break; + case CIRRUS_98ID_AUTO_XE10_WABS: + type = 21; + break; + case CIRRUS_98ID_AUTO_XE10_WSN2: + type = 22; + break; + case CIRRUS_98ID_AUTO_XE10_WSN4: + type = 23; + break; +#else + case CIRRUS_98ID_WAB: + type = 7; + break; + case CIRRUS_98ID_WSN_A2F: + type = 8; + break; + case CIRRUS_98ID_WSN: + type = 9; + break; + case CIRRUS_98ID_GA98NBIC: + type = 10; + break; + case CIRRUS_98ID_GA98NBII: + type = 11; + break; + case CIRRUS_98ID_GA98NBIV: + type = 12; + break; + case CIRRUS_98ID_96: + type = 13; + break; + case CIRRUS_98ID_AUTO_XE10_WABS: + type = 14; + break; + case CIRRUS_98ID_AUTO_XE10_WSN2: + type = 15; + break; + case CIRRUS_98ID_AUTO_XE10_WSN4: + type = 16; + break; +#endif } menudlg_appends(res_wab0, NELEMENTS(res_wab0)); @@ -257,6 +306,7 @@ static void dlgupdate(void) { case 6: type = CIRRUS_98ID_Cx2; break; +#ifdef SUPPORT_PCI case 7: type = CIRRUS_98ID_PCI; break; @@ -282,23 +332,64 @@ static void dlgupdate(void) { type = CIRRUS_98ID_96; break; case 15: - type = CIRRUS_98ID_AUTO_XE_WA_PCI; + type = CIRRUS_98ID_AUTO_XE_G1_PCI; break; case 16: - type = CIRRUS_98ID_AUTO_XE_WS_PCI; + type = CIRRUS_98ID_AUTO_XE_G2_PCI; break; case 17: - type = CIRRUS_98ID_AUTO_XE_W4_PCI; + type = CIRRUS_98ID_AUTO_XE_G4_PCI; break; case 18: - type = CIRRUS_98ID_AUTO_XE10_WABS; + type = CIRRUS_98ID_AUTO_XE_WA_PCI; break; case 19: - type = CIRRUS_98ID_AUTO_XE10_WSN2; + type = CIRRUS_98ID_AUTO_XE_WS_PCI; break; case 20: + type = CIRRUS_98ID_AUTO_XE_W4_PCI; + break; + case 21: + type = CIRRUS_98ID_AUTO_XE10_WABS; + break; + case 22: + type = CIRRUS_98ID_AUTO_XE10_WSN2; + break; + case 23: type = CIRRUS_98ID_AUTO_XE10_WSN4; break; +#else + case 7: + type = CIRRUS_98ID_WAB; + break; + case 8: + type = CIRRUS_98ID_WSN_A2F; + break; + case 9: + type = CIRRUS_98ID_WSN; + break; + case 10: + type = CIRRUS_98ID_GA98NBIC; + break; + case 11: + type = CIRRUS_98ID_GA98NBII; + break; + case 12: + type = CIRRUS_98ID_GA98NBIV; + break; + case 13: + type = CIRRUS_98ID_96; + break; + case 14: + type = CIRRUS_98ID_AUTO_XE10_WABS; + break; + case 15: + type = CIRRUS_98ID_AUTO_XE10_WSN2; + break; + case 16: + type = CIRRUS_98ID_AUTO_XE10_WSN4; + break; +#endif } if (np2cfg.gd5430type != (UINT16)type) { np2cfg.gd5430type = (UINT16)val; diff --git a/fdd/newdisk.c b/fdd/newdisk.c index 49b85c3..e85127a 100644 --- a/fdd/newdisk.c +++ b/fdd/newdisk.c @@ -214,7 +214,7 @@ void newdisk_nhd_ex_CHS(const OEMCHAR *fname, UINT32 C, UINT16 H, UINT16 S, UINT hddsize = (FILELEN)C * H * S * SS / 1024 / 1024; - if ((fname == NULL) || (hddsize < 5) || (hddsize > NHD_MAXSIZE2)) { + if ((fname == NULL) || (hddsize < 1) || (hddsize > NHD_MAXSIZE2)) { goto ndnhd_err; } fh = file_create(fname); @@ -385,7 +385,7 @@ void newdisk_vpcvhd_ex_CHS(const OEMCHAR *fname, UINT32 C, UINT16 H, UINT16 S, U hddsize = (UINT32)((FILELEN)C * H * S * SS / 1024 / 1024); - if ((fname == NULL) || (hddsize < 5) || (hddsize > NHD_MAXSIZE2)) { + if ((fname == NULL) || (hddsize < 1) || (hddsize > NHD_MAXSIZE2)) { goto vpcvhd_err; } fh = file_create(fname); diff --git a/generic/memdbg32.c b/generic/memdbg32.c index 9827b05..2c4a181 100644 --- a/generic/memdbg32.c +++ b/generic/memdbg32.c @@ -133,7 +133,7 @@ BOOL memdbg32_paint(CMNVRAM *vram, CMNPALCNV cnv, BOOL redraw) { FillMemory(use, 256, MEMDBG32_PALREAL); FillMemory(use + (0xfa0000 >> 12), (0x60000 >> 12), MEMDBG32_PALREAL); if ((CPU_STAT_PM) && (pccore.extmem)) { - FillMemory(use + 256, 256 * pccore.extmem, MEMDBG32_PALPM); + FillMemory(use + 256, np2min(256 * pccore.extmem, sizeof(use) - 256), MEMDBG32_PALPM); } } for (i=0; i<32; i++) { diff --git a/generic/np2info.c b/generic/np2info.c index c5b329c..6f0cccd 100644 --- a/generic/np2info.c +++ b/generic/np2info.c @@ -11,6 +11,9 @@ #if defined(SUPPORT_IDEIO) #include "ideio.h" #endif +#if defined(SUPPORT_GPIB) +#include "gpibio.h" +#endif static const OEMCHAR str_comma[] = OEMTEXT(", "); static const OEMCHAR str_2halfMHz[] = OEMTEXT("2.5MHz"); @@ -257,6 +260,10 @@ static void info_sound(OEMCHAR *str, int maxlen, const NP2INFOEX *ex) lpBoard = OEMTEXT("PC-9801-86 + Mate-X PCM"); break; + case SOUNDID_PC_9801_86_118: + lpBoard = OEMTEXT("PC-9801-86 + PC-9801-118"); + break; + case SOUNDID_MATE_X_PCM: lpBoard = OEMTEXT("Mate-X PCM"); break; @@ -354,6 +361,14 @@ static void info_bios(OEMCHAR *str, int maxlen, const NP2INFOEX *ex) { } milstr_ncat(str, pcidev.biosname, maxlen); } +#endif +#if defined(SUPPORT_GPIB) + if (gpib.enable) { + if (str[0]) { + milstr_ncat(str, str_comma, maxlen); + } + milstr_ncat(str, OEMTEXT("gpib.rom"), maxlen); + } #endif if (str[0] == '\0') { milstr_ncat(str, str_notexist, maxlen); diff --git a/i286c/cpumem.c b/i286c/cpumem.c index 94f38b3..26ab73f 100644 --- a/i286c/cpumem.c +++ b/i286c/cpumem.c @@ -446,24 +446,53 @@ REG8 MEMCALL memp_read8(UINT32 address) { } else { #if defined(SUPPORT_CL_GD5430) - if(np2cfg.usegd5430 && cirrusvga_opaque){ - if(np2clvga.VRAMWindowAddr){ - if(np2clvga.VRAMWindowAddr <= address){ - if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE){ - return cirrus_linear_readb(cirrusvga_opaque, address); - }else if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SIZE){ - if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SHFT) return 0; - return cirrus_linear_readb(cirrusvga_opaque, address); - } - } - if(np2clvga.VRAMWindowAddr + BBLTWINDOW_ADSH <= address){ - if(address < np2clvga.VRAMWindowAddr + BBLTWINDOW_ADSH + BBLTWINDOW_SIZE){ - return cirrus_linear_bitblt_readb(cirrusvga_opaque, address); - } + if(np2clvga.enabled && cirrusvga_opaque && (cirrusvga_wab_46e8 & 0x08)){ + UINT32 vramWndAddr = np2clvga.VRAMWindowAddr; + UINT32 vramWndAddr2 = np2clvga.VRAMWindowAddr2; + UINT32 vramWndAddr3 = np2clvga.VRAMWindowAddr3; + if(np2clvga.pciLFB_Addr && (address & np2clvga.pciLFB_Mask) == np2clvga.pciLFB_Addr){ + UINT32 addrofs = address - np2clvga.pciLFB_Addr; + if(addrofs < 0x1000000){ + return cirrus_linear_readb(cirrusvga_opaque, address); + }else if( addrofs < 0x1000000 + 0x400000){ + return cirrus_linear_bitblt_readb(cirrusvga_opaque, address); + }else{ + return 0xff; } + }else if(np2clvga.pciMMIO_Addr && (address & np2clvga.pciMMIO_Mask) == np2clvga.pciMMIO_Addr){ + if(np2clvga.gd54xxtype==CIRRUS_98ID_PCI || ((np2clvga.pciMMIO_Addr & 0xfff00000) != 0xf00000 || !(gdc.analog & ((1 << GDCANALOG_256) | (1 << GDCANALOG_256E))))) + return cirrus_mmio_read[0](cirrusvga_opaque, address); } - if(np2clvga.VRAMWindowAddr2 && np2clvga.VRAMWindowAddr2 <= address && address < np2clvga.VRAMWindowAddr2 + 0x10000){ - return CIRRUS_VRAMWND2_FUNC_rb(cirrusvga_opaque, address); + if(np2clvga.gd54xxtype!=CIRRUS_98ID_PCI){ + if(vramWndAddr){ + if(vramWndAddr <= address){ + if(address < vramWndAddr + VRAMWINDOW_SIZE){ + return cirrus_linear_readb(cirrusvga_opaque, address); + }else if(address < vramWndAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SIZE){ + if(address >= vramWndAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SHFT) + return cirrus_linear_readb(cirrusvga_opaque, address); + } + } + } + if(vramWndAddr3){ + UINT32 addr3 = address; + if(vramWndAddr3 <= addr3 && addr3 < vramWndAddr3 + VRA3WINDOW_SIZEX && !(gdc.analog & ((1 << GDCANALOG_256) | (1 << GDCANALOG_256E)))){ + return CIRRUS_VRAMWND3_FUNC_rb(cirrusvga_opaque, addr3); + } + } + if(vramWndAddr2 && (vramWndAddr2 != 0xE0000 || !(gdc.analog & ((1 << GDCANALOG_16) | (1 << GDCANALOG_256) | (1 << GDCANALOG_256E))))){ + UINT32 addr2 = address; + if((vramWndAddr2 & 0xfff00000UL) == 0){ + UINT32 addrtmp = addr2 & 0xfff80000UL; + if(addrtmp == 0xfff80000UL || addrtmp == 0x00f80000UL){ + // XXX: 0xFFFA0000 - 0xFFFFFFFF or 0xFA0000 - 0xFFFFFF + addr2 = addr2 & 0xfffff; + } + } + if((addr2 & CIRRUS_VRAMWINDOW2MASK) == vramWndAddr2){ + return CIRRUS_VRAMWND2_FUNC_rb(cirrusvga_opaque, addr2); + } + } } } #endif @@ -506,24 +535,53 @@ REG16 MEMCALL memp_read16(UINT32 address) { } else if ((address + 1) & 0x7fff) { // non 32kb boundary #if defined(SUPPORT_CL_GD5430) - if(np2cfg.usegd5430 && cirrusvga_opaque){ - if(np2clvga.VRAMWindowAddr){ - if(np2clvga.VRAMWindowAddr <= address){ - if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE){ - return cirrus_linear_readw(cirrusvga_opaque, address); - }else if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SIZE){ - if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SHFT) return 0; - return cirrus_linear_readw(cirrusvga_opaque, address); - } - } - if(np2clvga.VRAMWindowAddr + BBLTWINDOW_ADSH <= address){ - if(address < np2clvga.VRAMWindowAddr + BBLTWINDOW_ADSH + BBLTWINDOW_SIZE){ - return cirrus_linear_bitblt_readw(cirrusvga_opaque, address); - } + if(np2clvga.enabled && cirrusvga_opaque && (cirrusvga_wab_46e8 & 0x08)){ + UINT32 vramWndAddr = np2clvga.VRAMWindowAddr; + UINT32 vramWndAddr2 = np2clvga.VRAMWindowAddr2; + UINT32 vramWndAddr3 = np2clvga.VRAMWindowAddr3; + if(np2clvga.pciLFB_Addr && (address & np2clvga.pciLFB_Mask) == np2clvga.pciLFB_Addr){ + UINT32 addrofs = address - np2clvga.pciLFB_Addr; + if(addrofs < 0x1000000){ + return cirrus_linear_readw(cirrusvga_opaque, address); + }else if( addrofs < 0x1000000 + 0x400000){ + return cirrus_linear_bitblt_readw(cirrusvga_opaque, address); + }else{ + return 0xffff; } + }else if(np2clvga.pciMMIO_Addr && (address & np2clvga.pciMMIO_Mask) == np2clvga.pciMMIO_Addr){ + if(np2clvga.gd54xxtype==CIRRUS_98ID_PCI || ((np2clvga.pciMMIO_Addr & 0xfff00000) != 0xf00000 || !(gdc.analog & ((1 << GDCANALOG_256) | (1 << GDCANALOG_256E))))) + return cirrus_mmio_read[1](cirrusvga_opaque, address); } - if(np2clvga.VRAMWindowAddr2 && np2clvga.VRAMWindowAddr2 <= address && address < np2clvga.VRAMWindowAddr2 + 0x10000){ - return CIRRUS_VRAMWND2_FUNC_rw(cirrusvga_opaque, address); + if(np2clvga.gd54xxtype!=CIRRUS_98ID_PCI){ + if(vramWndAddr){ + if(vramWndAddr <= address){ + if(address < vramWndAddr + VRAMWINDOW_SIZE){ + return cirrus_linear_readw(cirrusvga_opaque, address); + }else if(address < vramWndAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SIZE){ + if(address >= vramWndAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SHFT) + return cirrus_linear_readw(cirrusvga_opaque, address); + } + } + } + if(vramWndAddr3){ + UINT32 addr3 = address; + if(vramWndAddr3 <= addr3 && addr3 < vramWndAddr3 + VRA3WINDOW_SIZEX && !(gdc.analog & ((1 << GDCANALOG_256) | (1 << GDCANALOG_256E)))){ + return CIRRUS_VRAMWND3_FUNC_rw(cirrusvga_opaque, addr3); + } + } + if(vramWndAddr2 && (vramWndAddr2 != 0xE0000 || !(gdc.analog & ((1 << GDCANALOG_16) | (1 << GDCANALOG_256) | (1 << GDCANALOG_256E))))){ + UINT32 addr2 = address; + if((vramWndAddr2 & 0xfff00000UL) == 0){ + UINT32 addrtmp = addr2 & 0xfff80000UL; + if(addrtmp == 0xfff80000UL || addrtmp == 0x00f80000UL){ + // XXX: 0xFFFA0000 - 0xFFFFFFFF or 0xFA0000 - 0xFFFFFF + addr2 = addr2 & 0xfffff; + } + } + if((addr2 & CIRRUS_VRAMWINDOW2MASK) == vramWndAddr2){ + return CIRRUS_VRAMWND2_FUNC_rw(cirrusvga_opaque, addr2); + } + } } } #endif @@ -567,35 +625,66 @@ UINT32 MEMCALL memp_read32(UINT32 address) { UINT32 pos; UINT32 ret; -#if defined(SUPPORT_CL_GD5430) - if(np2cfg.usegd5430 && cirrusvga_opaque){ - if(np2clvga.VRAMWindowAddr){ - if(np2clvga.VRAMWindowAddr <= address){ - if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE){ - return cirrus_linear_readl(cirrusvga_opaque, address); - }else if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SIZE){ - if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SHFT) return 0; - return cirrus_linear_readl(cirrusvga_opaque, address); - } - } - if(np2clvga.VRAMWindowAddr + BBLTWINDOW_ADSH <= address){ - if(address < np2clvga.VRAMWindowAddr + BBLTWINDOW_ADSH + BBLTWINDOW_SIZE){ - return cirrus_linear_bitblt_readl(cirrusvga_opaque, address); - } - } - } - if(np2clvga.VRAMWindowAddr2 && np2clvga.VRAMWindowAddr2 <= address && address < np2clvga.VRAMWindowAddr2 + 0x10000){ - return CIRRUS_VRAMWND2_FUNC_rl(cirrusvga_opaque, address); - } - } -#endif if (address < (I286_MEMREADMAX - 3)) { return(LOADINTELDWORD(mem + address)); } - else if (address >= USE_HIMEM) { - pos = address & CPU_ADRSMASK; - if ((pos >= USE_HIMEM) && ((pos + 3) < CPU_EXTLIMIT16)) { - return(LOADINTELDWORD(CPU_EXTMEMBASE + pos)); + else{ +#if defined(SUPPORT_CL_GD5430) + if(np2clvga.enabled && cirrusvga_opaque && (cirrusvga_wab_46e8 & 0x08)){ + UINT32 vramWndAddr = np2clvga.VRAMWindowAddr; + UINT32 vramWndAddr2 = np2clvga.VRAMWindowAddr2; + UINT32 vramWndAddr3 = np2clvga.VRAMWindowAddr3; + if(np2clvga.pciLFB_Addr && (address & np2clvga.pciLFB_Mask) == np2clvga.pciLFB_Addr){ + UINT32 addrofs = address - np2clvga.pciLFB_Addr; + if(addrofs < 0x1000000){ + return cirrus_linear_readl(cirrusvga_opaque, address); + }else if( addrofs < 0x1000000 + 0x400000){ + return cirrus_linear_bitblt_readl(cirrusvga_opaque, address); + }else{ + return 0xffffffff; + } + }else if(np2clvga.pciMMIO_Addr && (address & np2clvga.pciMMIO_Mask) == np2clvga.pciMMIO_Addr){ + if(np2clvga.gd54xxtype==CIRRUS_98ID_PCI || ((np2clvga.pciMMIO_Addr & 0xfff00000) != 0xf00000 || !(gdc.analog & ((1 << GDCANALOG_256) | (1 << GDCANALOG_256E))))) + return cirrus_mmio_read[2](cirrusvga_opaque, address); + } + if(np2clvga.gd54xxtype!=CIRRUS_98ID_PCI){ + if(vramWndAddr){ + if(vramWndAddr <= address){ + if(address < vramWndAddr + VRAMWINDOW_SIZE){ + return cirrus_linear_readl(cirrusvga_opaque, address); + }else if(address < vramWndAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SIZE){ + if(address >= vramWndAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SHFT) + return cirrus_linear_readl(cirrusvga_opaque, address); + } + } + } + if(vramWndAddr3){ + UINT32 addr3 = address; + if(vramWndAddr3 <= addr3 && addr3 < vramWndAddr3 + VRA3WINDOW_SIZEX && !(gdc.analog & ((1 << GDCANALOG_256) | (1 << GDCANALOG_256E)))){ + return CIRRUS_VRAMWND3_FUNC_rl(cirrusvga_opaque, addr3); + } + } + if(vramWndAddr2 && (vramWndAddr2 != 0xE0000 || !(gdc.analog & ((1 << GDCANALOG_16) | (1 << GDCANALOG_256) | (1 << GDCANALOG_256E))))){ + UINT32 addr2 = address; + if((vramWndAddr2 & 0xfff00000UL) == 0){ + UINT32 addrtmp = addr2 & 0xfff80000UL; + if(addrtmp == 0xfff80000UL || addrtmp == 0x00f80000UL){ + // XXX: 0xFFFA0000 - 0xFFFFFFFF or 0xFA0000 - 0xFFFFFF + addr2 = addr2 & 0xfffff; + } + } + if((addr2 & CIRRUS_VRAMWINDOW2MASK) == vramWndAddr2){ + return CIRRUS_VRAMWND2_FUNC_rl(cirrusvga_opaque, addr2); + } + } + } + } +#endif + if (address >= USE_HIMEM) { + pos = address & CPU_ADRSMASK; + if ((pos >= USE_HIMEM) && ((pos + 3) < CPU_EXTLIMIT16)) { + return(LOADINTELDWORD(CPU_EXTMEMBASE + pos)); + } } } if (!(address & 1)) { @@ -617,28 +706,64 @@ void MEMCALL memp_write8(UINT32 address, REG8 value) { } else { #if defined(SUPPORT_CL_GD5430) - if(np2cfg.usegd5430 && cirrusvga_opaque){ - if(np2clvga.VRAMWindowAddr){ - if(np2clvga.VRAMWindowAddr <= address){ - if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE){ - g_cirrus_linear_write[0](cirrusvga_opaque, address, value); - return; - }else if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SIZE){ - if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SHFT); - g_cirrus_linear_write[0](cirrusvga_opaque, address, value); - return; - } + if(np2clvga.enabled && cirrusvga_opaque && (cirrusvga_wab_46e8 & 0x08)){ + UINT32 vramWndAddr = np2clvga.VRAMWindowAddr; + UINT32 vramWndAddr2 = np2clvga.VRAMWindowAddr2; + UINT32 vramWndAddr3 = np2clvga.VRAMWindowAddr3; + if(np2clvga.pciLFB_Addr && (address & np2clvga.pciLFB_Mask) == np2clvga.pciLFB_Addr){ + UINT32 addrofs = address - np2clvga.pciLFB_Addr; + if(addrofs < 0x1000000){ + cirrus_linear_writeb(cirrusvga_opaque, address, value); + }else if( addrofs < 0x1000000 + 0x400000){ + cirrus_linear_bitblt_writeb(cirrusvga_opaque, address, value); } - if(np2clvga.VRAMWindowAddr + BBLTWINDOW_ADSH <= address){ - if(address < np2clvga.VRAMWindowAddr + BBLTWINDOW_ADSH + BBLTWINDOW_SIZE){ - cirrus_linear_bitblt_writeb(cirrusvga_opaque, address, value); - return; - } - } - } - if(np2clvga.VRAMWindowAddr2 && np2clvga.VRAMWindowAddr2 <= address && address < np2clvga.VRAMWindowAddr2 + 0x10000){ - CIRRUS_VRAMWND2_FUNC_wb(cirrusvga_opaque, address, value); return; + }else if(np2clvga.pciMMIO_Addr && (address & np2clvga.pciMMIO_Mask) == np2clvga.pciMMIO_Addr){ + cirrus_mmio_write[0](cirrusvga_opaque, address, value); + if(np2clvga.gd54xxtype==CIRRUS_98ID_PCI) + return; + } + //if(TEST_START_ADDR < address && address <= TEST_END_ADDR){ + // printf("%d: %d\n", address, value); + //} + if(np2clvga.gd54xxtype!=CIRRUS_98ID_PCI){ + if(vramWndAddr){ + if(vramWndAddr <= address){ + if(address < vramWndAddr + VRAMWINDOW_SIZE){ + g_cirrus_linear_write[0](cirrusvga_opaque, address, value); + return; + }else if(address < vramWndAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SIZE){ + if(address >= vramWndAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SHFT){ + g_cirrus_linear_write[0](cirrusvga_opaque, address, value); + return; + } + } + } + } + if(vramWndAddr3){ + UINT32 addr3 = address; + if(vramWndAddr3 <= addr3 && addr3 < vramWndAddr3 + VRA3WINDOW_SIZEX){ + CIRRUS_VRAMWND3_FUNC_wb(cirrusvga_opaque, addr3, value); + TRACEOUT(("mem (write8): %x", address)); + //if(!(gdc.analog & ((1 << GDCANALOG_256) | (1 << GDCANALOG_256E)))) + // return; + } + } + if(vramWndAddr2 && (vramWndAddr2 != 0xE0000 || !(gdc.analog & ((1 << GDCANALOG_16) | (1 << GDCANALOG_256) | (1 << GDCANALOG_256E))))){ + UINT32 addr2 = address; + if((vramWndAddr2 & 0xfff00000UL) == 0){ + UINT32 addrtmp = addr2 & 0xfff80000UL; + if(addrtmp == 0xfff80000UL || addrtmp == 0x00f80000UL){ + // XXX: 0xFFFA0000 - 0xFFFFFFFF or 0xFA0000 - 0xFFFFFF + addr2 = addr2 & 0xfffff; + } + } + if((addr2 & CIRRUS_VRAMWINDOW2MASK) == vramWndAddr2){ + CIRRUS_VRAMWND2_FUNC_wb(cirrusvga_opaque, addr2, value); + //if((vramWndAddr2 != 0xE0000 || !(gdc.analog & ((1 << GDCANALOG_16) | (1 << GDCANALOG_256) | (1 << GDCANALOG_256E)))) && !(gdc.display & (1 << GDCDISP_31))) + // return; + } + } } } #endif @@ -684,28 +809,64 @@ void MEMCALL memp_write16(UINT32 address, REG16 value) { } else if ((address + 1) & 0x7fff) { // non 32kb boundary #if defined(SUPPORT_CL_GD5430) - if(np2cfg.usegd5430 && cirrusvga_opaque){ - if(np2clvga.VRAMWindowAddr){ - if(np2clvga.VRAMWindowAddr <= address){ - if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE){ - g_cirrus_linear_write[1](cirrusvga_opaque, address, value); - return; - }else if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SIZE){ - if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SHFT); - g_cirrus_linear_write[1](cirrusvga_opaque, address, value); - return; - } + if(np2clvga.enabled && cirrusvga_opaque && (cirrusvga_wab_46e8 & 0x08)){ + UINT32 vramWndAddr = np2clvga.VRAMWindowAddr; + UINT32 vramWndAddr2 = np2clvga.VRAMWindowAddr2; + UINT32 vramWndAddr3 = np2clvga.VRAMWindowAddr3; + if(np2clvga.pciLFB_Addr && (address & np2clvga.pciLFB_Mask) == np2clvga.pciLFB_Addr){ + UINT32 addrofs = address - np2clvga.pciLFB_Addr; + if(addrofs < 0x1000000){ + cirrus_linear_writew(cirrusvga_opaque, address, value); + }else if( addrofs < 0x1000000 + 0x400000){ + cirrus_linear_bitblt_writew(cirrusvga_opaque, address, value); } - if(np2clvga.VRAMWindowAddr + BBLTWINDOW_ADSH <= address){ - if(address < np2clvga.VRAMWindowAddr + BBLTWINDOW_ADSH + BBLTWINDOW_SIZE){ - cirrus_linear_bitblt_writew(cirrusvga_opaque, address, value); - return; - } - } - } - if(np2clvga.VRAMWindowAddr2 && np2clvga.VRAMWindowAddr2 <= address && address < np2clvga.VRAMWindowAddr2 + 0x10000){ - CIRRUS_VRAMWND2_FUNC_ww(cirrusvga_opaque, address, value); return; + }else if(np2clvga.pciMMIO_Addr && (address & np2clvga.pciMMIO_Mask) == np2clvga.pciMMIO_Addr){ + cirrus_mmio_write[1](cirrusvga_opaque, address, value); + if(np2clvga.gd54xxtype==CIRRUS_98ID_PCI) + return; + } + //if(TEST_START_ADDR < address && address <= TEST_END_ADDR){ + // printf("%d: %d\n", address, value); + //} + if(np2clvga.gd54xxtype!=CIRRUS_98ID_PCI){ + if(vramWndAddr){ + if(vramWndAddr <= address){ + if(address < vramWndAddr + VRAMWINDOW_SIZE){ + g_cirrus_linear_write[1](cirrusvga_opaque, address, value); + return; + }else if(address < vramWndAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SIZE){ + if(address >= vramWndAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SHFT){ + g_cirrus_linear_write[1](cirrusvga_opaque, address, value); + return; + } + } + } + } + if(vramWndAddr3){ + UINT32 addr3 = address; + if(vramWndAddr3 <= addr3 && addr3 < vramWndAddr3 + VRA3WINDOW_SIZEX){ + CIRRUS_VRAMWND3_FUNC_ww(cirrusvga_opaque, addr3, value); + TRACEOUT(("mem (write16): %x", address)); + //if(!(gdc.analog & ((1 << GDCANALOG_256) | (1 << GDCANALOG_256E)))) + // return; + } + } + if(vramWndAddr2 && (vramWndAddr2 != 0xE0000 || !(gdc.analog & ((1 << GDCANALOG_16) | (1 << GDCANALOG_256) | (1 << GDCANALOG_256E))))){ + UINT32 addr2 = address; + if((vramWndAddr2 & 0xfff00000UL) == 0){ + UINT32 addrtmp = addr2 & 0xfff80000UL; + if(addrtmp == 0xfff80000UL || addrtmp == 0x00f80000UL){ + // XXX: 0xFFFA0000 - 0xFFFFFFFF or 0xFA0000 - 0xFFFFFF + addr2 = addr2 & 0xfffff; + } + } + if((addr2 & CIRRUS_VRAMWINDOW2MASK) == vramWndAddr2){ + CIRRUS_VRAMWND2_FUNC_ww(cirrusvga_opaque, addr2, value); + //if((vramWndAddr2 != 0xE0000 || !(gdc.analog & ((1 << GDCANALOG_16) | (1 << GDCANALOG_256) | (1 << GDCANALOG_256E)))) && !(gdc.display & (1 << GDCDISP_31))) + // return; + } + } } } #endif @@ -768,41 +929,79 @@ void MEMCALL memp_write32(UINT32 address, UINT32 value) { UINT32 pos; -#if defined(SUPPORT_CL_GD5430) - if(np2cfg.usegd5430 && cirrusvga_opaque){ - if(np2clvga.VRAMWindowAddr){ - if(np2clvga.VRAMWindowAddr <= address){ - if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE){ - g_cirrus_linear_write[2](cirrusvga_opaque, address, value); - return; - }else if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SIZE){ - if(address < np2clvga.VRAMWindowAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SHFT); - g_cirrus_linear_write[2](cirrusvga_opaque, address, value); - return; - } - } - if(np2clvga.VRAMWindowAddr + BBLTWINDOW_ADSH <= address){ - if(address < np2clvga.VRAMWindowAddr + BBLTWINDOW_ADSH + BBLTWINDOW_SIZE){ - cirrus_linear_bitblt_writel(cirrusvga_opaque, address, value); - return; - } - } - } - if(np2clvga.VRAMWindowAddr2 && np2clvga.VRAMWindowAddr2 <= address && address < np2clvga.VRAMWindowAddr2 + 0x10000){ - CIRRUS_VRAMWND2_FUNC_wl(cirrusvga_opaque, address, value); - return; - } - } -#endif if (address < (I286_MEMWRITEMAX - 3)) { STOREINTELDWORD(mem + address, value); return; } - else if (address >= USE_HIMEM) { - pos = address & CPU_ADRSMASK; - if ((pos >= USE_HIMEM) && ((pos + 3) < CPU_EXTLIMIT16)) { - STOREINTELDWORD(CPU_EXTMEMBASE + pos, value); - return; + else{ +#if defined(SUPPORT_CL_GD5430) + if(np2clvga.enabled && cirrusvga_opaque && (cirrusvga_wab_46e8 & 0x08)){ + UINT32 vramWndAddr = np2clvga.VRAMWindowAddr; + UINT32 vramWndAddr2 = np2clvga.VRAMWindowAddr2; + UINT32 vramWndAddr3 = np2clvga.VRAMWindowAddr3; + if(np2clvga.pciLFB_Addr && (address & np2clvga.pciLFB_Mask) == np2clvga.pciLFB_Addr){ + UINT32 addrofs = address - np2clvga.pciLFB_Addr; + if(addrofs < 0x1000000){ + cirrus_linear_writel(cirrusvga_opaque, address, value); + }else if( addrofs < 0x1000000 + 0x400000){ + cirrus_linear_bitblt_writel(cirrusvga_opaque, address, value); + } + return; + }else if(np2clvga.pciMMIO_Addr && (address & np2clvga.pciMMIO_Mask) == np2clvga.pciMMIO_Addr){ + cirrus_mmio_write[2](cirrusvga_opaque, address, value); + if(np2clvga.gd54xxtype==CIRRUS_98ID_PCI) + return; + } + //if(TEST_START_ADDR < address && address <= TEST_END_ADDR){ + // printf("%d: %d\n", address, value); + //} + if(np2clvga.gd54xxtype!=CIRRUS_98ID_PCI){ + if(vramWndAddr){ + if(vramWndAddr <= address){ + if(address < vramWndAddr + VRAMWINDOW_SIZE){ + g_cirrus_linear_write[2](cirrusvga_opaque, address, value); + return; + }else if(address < vramWndAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SIZE){ + if(address >= vramWndAddr + VRAMWINDOW_SIZE + EXT_WINDOW_SHFT){ + g_cirrus_linear_write[2](cirrusvga_opaque, address, value); + return; + } + } + } + } + if(vramWndAddr3){ + UINT32 addr3 = address; + if(vramWndAddr3 <= addr3 && addr3 < vramWndAddr3 + VRA3WINDOW_SIZEX){ + CIRRUS_VRAMWND3_FUNC_wl(cirrusvga_opaque, addr3, value); + TRACEOUT(("mem (write32): %x", address)); + //if(!(gdc.analog & ((1 << GDCANALOG_256) | (1 << GDCANALOG_256E)))) + // return; + } + } + if(vramWndAddr2 && (vramWndAddr2 != 0xE0000 || !(gdc.analog & ((1 << GDCANALOG_16) | (1 << GDCANALOG_256) | (1 << GDCANALOG_256E))))){ + UINT32 addr2 = address; + if((vramWndAddr2 & 0xfff00000UL) == 0){ + UINT32 addrtmp = addr2 & 0xfff80000UL; + if(addrtmp == 0xfff80000UL || addrtmp == 0x00f80000UL){ + // XXX: 0xFFFA0000 - 0xFFFFFFFF or 0xFA0000 - 0xFFFFFF + addr2 = addr2 & 0xfffff; + } + } + if((addr2 & CIRRUS_VRAMWINDOW2MASK) == vramWndAddr2){ + CIRRUS_VRAMWND2_FUNC_wl(cirrusvga_opaque, addr2, value); + //if((vramWndAddr2 != 0xE0000 || !(gdc.analog & ((1 << GDCANALOG_16) | (1 << GDCANALOG_256) | (1 << GDCANALOG_256E)))) && !(gdc.display & (1 << GDCDISP_31))) + // return; + } + } + } + } +#endif + if (address >= USE_HIMEM) { + pos = address & CPU_ADRSMASK; + if ((pos >= USE_HIMEM) && ((pos + 3) < CPU_EXTLIMIT16)) { + STOREINTELDWORD(CPU_EXTMEMBASE + pos, value); + return; + } } } if (!(address & 1)) { diff --git a/i286c/cpumem.h b/i286c/cpumem.h index 634ac30..641173f 100644 --- a/i286c/cpumem.h +++ b/i286c/cpumem.h @@ -82,6 +82,8 @@ void MEMCALL memr_writes(UINT seg, UINT off, const void *dat, UINT leng); #define MEMP_READ8(addr) \ memp_read8((addr)) +#define MEMP_READ16(addr) \ + memp_read16((addr)) #define MEMP_WRITE8(addr, dat) \ memp_write8((addr), (dat)) diff --git a/i386c/cpumem.c b/i386c/cpumem.c index 3f2dd4d..2b2c3e5 100644 --- a/i386c/cpumem.c +++ b/i386c/cpumem.c @@ -475,7 +475,7 @@ REG8 MEMCALL memp_read8(UINT32 address) { } else { #if defined(SUPPORT_CL_GD5430) - if(np2clvga.enabled && cirrusvga_opaque){ + if(np2clvga.enabled && cirrusvga_opaque && (cirrusvga_wab_46e8 & 0x08)){ UINT32 vramWndAddr = np2clvga.VRAMWindowAddr; UINT32 vramWndAddr2 = np2clvga.VRAMWindowAddr2; UINT32 vramWndAddr3 = np2clvga.VRAMWindowAddr3; @@ -580,7 +580,7 @@ REG16 MEMCALL memp_read16(UINT32 address) { else { if ((address + 1) & 0x7fff) { // non 32kb boundary #if defined(SUPPORT_CL_GD5430) - if(np2clvga.enabled && cirrusvga_opaque){ + if(np2clvga.enabled && cirrusvga_opaque && (cirrusvga_wab_46e8 & 0x08)){ UINT32 vramWndAddr = np2clvga.VRAMWindowAddr; UINT32 vramWndAddr2 = np2clvga.VRAMWindowAddr2; UINT32 vramWndAddr3 = np2clvga.VRAMWindowAddr3; @@ -691,7 +691,7 @@ UINT32 MEMCALL memp_read32(UINT32 address) { else{ if ((address + 1) & 0x7fff) { // non 32kb boundary #if defined(SUPPORT_CL_GD5430) - if(np2clvga.enabled && cirrusvga_opaque){ + if(np2clvga.enabled && cirrusvga_opaque && (cirrusvga_wab_46e8 & 0x08)){ UINT32 vramWndAddr = np2clvga.VRAMWindowAddr; UINT32 vramWndAddr2 = np2clvga.VRAMWindowAddr2; UINT32 vramWndAddr3 = np2clvga.VRAMWindowAddr3; @@ -953,7 +953,7 @@ void MEMCALL memp_write8(UINT32 address, REG8 value) { } else { #if defined(SUPPORT_CL_GD5430) - if(np2clvga.enabled && cirrusvga_opaque){ + if(np2clvga.enabled && cirrusvga_opaque && (cirrusvga_wab_46e8 & 0x08)){ UINT32 vramWndAddr = np2clvga.VRAMWindowAddr; UINT32 vramWndAddr2 = np2clvga.VRAMWindowAddr2; UINT32 vramWndAddr3 = np2clvga.VRAMWindowAddr3; @@ -1066,7 +1066,7 @@ void MEMCALL memp_write16(UINT32 address, REG16 value) { else{ if ((address + 1) & 0x7fff) { // non 32kb boundary #if defined(SUPPORT_CL_GD5430) - if(np2clvga.enabled && cirrusvga_opaque){ + if(np2clvga.enabled && cirrusvga_opaque && (cirrusvga_wab_46e8 & 0x08)){ UINT32 vramWndAddr = np2clvga.VRAMWindowAddr; UINT32 vramWndAddr2 = np2clvga.VRAMWindowAddr2; UINT32 vramWndAddr3 = np2clvga.VRAMWindowAddr3; @@ -1202,7 +1202,7 @@ void MEMCALL memp_write32(UINT32 address, UINT32 value) { else{ if ((address + 1) & 0x7fff) { // non 32kb boundary #if defined(SUPPORT_CL_GD5430) - if(np2clvga.enabled && cirrusvga_opaque){ + if(np2clvga.enabled && cirrusvga_opaque && (cirrusvga_wab_46e8 & 0x08)){ UINT32 vramWndAddr = np2clvga.VRAMWindowAddr; UINT32 vramWndAddr2 = np2clvga.VRAMWindowAddr2; UINT32 vramWndAddr3 = np2clvga.VRAMWindowAddr3; diff --git a/i386c/ia32/ia32.c b/i386c/ia32/ia32.c index e97358d..9cf6725 100644 --- a/i386c/ia32/ia32.c +++ b/i386c/ia32/ia32.c @@ -83,16 +83,47 @@ ia32_init(void) void ia32_setextsize(UINT32 size) { +//#if defined(SUPPORT_LARGE_MEMORY)&&defined(_WIN32) && !defined(MEMTRACE) && !defined(MEMCHECK) +// static int vallocflag = 0; +// static int vallocsize = 0; +// static LPVOID memblock = NULL; +//#endif if (CPU_EXTMEMSIZE != size) { UINT8 *extmem; extmem = CPU_EXTMEM; if (extmem != NULL) { - _MFREE(extmem); +//#if defined(SUPPORT_LARGE_MEMORY) && defined(_WIN32) && !defined(MEMTRACE) && !defined(MEMCHECK) +// if(vallocflag){ +// VirtualFree((LPVOID)extmem, vallocsize, MEM_DECOMMIT); +// VirtualFree(memblock, 0, MEM_RELEASE); +// vallocflag = 0; +// }else +//#endif + { + _MFREE(extmem); + } extmem = NULL; } if (size != 0) { - extmem = (UINT8 *)_MALLOC(size + 16, "EXTMEM"); +//#if defined(SUPPORT_LARGE_MEMORY) && defined(_WIN32) && !defined(MEMTRACE) && !defined(MEMCHECK) +// if(size > (255 << 20)){ +// HANDLE hp = OpenProcess(PROCESS_ALL_ACCESS, TRUE, GetCurrentProcessId()); +// vallocsize = size + 16; +// SetProcessWorkingSetSize(hp, vallocsize + 50*1024*1024, vallocsize + 50*1024*1024); +// CloseHandle(hp); +// memblock = VirtualAlloc(NULL, vallocsize, MEM_RESERVE, PAGE_READWRITE); +// extmem = (UINT8 *)VirtualAlloc(memblock, vallocsize, MEM_COMMIT, PAGE_READWRITE); +// if(!extmem){ +// extmem = (UINT8 *)_MALLOC(size + 16, "EXTMEM"); +// }else{ +// vallocflag = 1; +// } +// }else +//#endif + { + extmem = (UINT8 *)_MALLOC(size + 16, "EXTMEM"); + } } if (extmem != NULL) { ZeroMemory(extmem, size + 16); diff --git a/io/emsio.c b/io/emsio.c index 3392dc5..03903b6 100644 --- a/io/emsio.c +++ b/io/emsio.c @@ -48,7 +48,7 @@ void emsio_reset(const NP2CFG *pConfig) { ZeroMemory(&emsio, sizeof(emsio)); #if 1 || !defined(CPUCORE_IA32) - emsio.maxmem = pccore.extmem; + emsio.maxmem = (pccore.extmem > 255 ? 255 : pccore.extmem); // XXX: 256MB以上のときどうなる? #endif emsio.addr[0] = 0xc0000; emsio.addr[1] = 0xc4000; diff --git a/np2ver.h b/np2ver.h index 8783f3f..36732d6 100644 --- a/np2ver.h +++ b/np2ver.h @@ -3,7 +3,7 @@ * @brief The version */ -#define NP2VER_CORE "ver.0.86 kai rev.17" +#define NP2VER_CORE "ver.0.86 kai rev.18" // #define NP2VER_WIN9X // #define NP2VER_MACOSX diff --git a/pccore.c b/pccore.c index 20358f0..f38c202 100644 --- a/pccore.c +++ b/pccore.c @@ -146,7 +146,7 @@ const OEMCHAR np2version[] = OEMTEXT(NP2VER_CORE); #endif #endif #if defined(SUPPORT_CL_GD5430) - 0, 0x5B, 0, CIRRUS_MELCOWAB_OFS_DEFAULT, + 0, 0x5B, 0, CIRRUS_MELCOWAB_OFS_DEFAULT, 0, #endif #if defined(SUPPORT_GPIB) 0, 12, 1, 0, 0, @@ -166,6 +166,7 @@ const OEMCHAR np2version[] = OEMTEXT(NP2VER_CORE); #if defined(SUPPORT_FAST_MEMORYCHECK) 1, #endif + 0, }; PCCORE pccore = { PCBASECLOCK25, PCBASEMULTIPLE, @@ -637,7 +638,7 @@ void pccore_reset(void) { #endif epson = (pccore.model & PCMODEL_EPSON) ? TRUE : FALSE; - if (epson) { + if (epson || np2cfg.useram_d) { /* enable RAM (D0000-DFFFF) */ CPU_RAM_D000 = 0xffff; } diff --git a/pccore.h b/pccore.h index ddeac27..6a7e4d7 100644 --- a/pccore.h +++ b/pccore.h @@ -224,6 +224,7 @@ struct tagNP2Config UINT16 gd5430type; UINT8 gd5430fakecur; UINT8 gd5430melofs; + UINT8 ga98nb_bigscrn_ex; #endif #if defined(SUPPORT_GPIB) UINT8 usegpib; // GPIBgp @@ -270,6 +271,8 @@ struct tagNP2Config #if defined(SUPPORT_FAST_MEMORYCHECK) UINT8 memcheckspeed; // `FbNx #endif + + UINT8 useram_d; // EPSONłȂĂD0000h-DFFFFhRAMɁiIDE BIOS D8000h-DBFFFh͑ʖځj }; typedef struct tagNP2Config NP2CFG; /*!< The define of config */ diff --git a/sdl2/Makefile.mac b/sdl2/Makefile.mac index 5a13916..1184104 100644 --- a/sdl2/Makefile.mac +++ b/sdl2/Makefile.mac @@ -31,8 +31,8 @@ SOURCES_C += $(wildcard $(NP2_PATH)/i286c/*.c) \ $(NP2_PATH)/sdl2/unix/main.c OBJECTS = $(SOURCES_CXX:.cpp=.o) $(SOURCES_C:.c=.o) -CXXFLAGS += $(fpic) $(INCFLAGS) $(COMMONFLAGS) -DNP2_SDL2 -DUSE_SDLAUDIO -DUSE_SDLMIXER -DSUPPORT_LARGE_HDD -DSUPPORT_VPCVHD -DSUPPORT_KAI_IMAGES -DHOOK_SYSKEY -DALLOW_MULTIRUN -DUSE_MAME -DSUPPORT_SOUND_SB16 -CFLAGS += $(fpic) $(INCFLAGS) $(COMMONFLAGS) -DNP2_SDL2 -DUSE_SDLAUDIO -DUSE_SDLMIXER -DSUPPORT_LARGE_HDD -DSUPPORT_VPCVHD -DSUPPORT_KAI_IMAGES -DHOOK_SYSKEY -DALLOW_MULTIRUN -DUSE_MAME -DSUPPORT_SOUND_SB16 +CXXFLAGS += $(fpic) $(INCFLAGS) $(COMMONFLAGS) -DNP2_SDL2 -DUSE_SDLAUDIO -DUSE_SDLMIXER -DSUPPORT_LARGE_HDD -DSUPPORT_VPCVHD -DSUPPORT_KAI_IMAGES -DHOOK_SYSKEY -DALLOW_MULTIRUN -DUSE_MAME -DSUPPORT_SOUND_SB16 -DSUPPORT_FMGEN -DSUPPORT_GPIB -DSUPPORT_FAST_MEMORYCHECK +CFLAGS += $(fpic) $(INCFLAGS) $(COMMONFLAGS) -DNP2_SDL2 -DUSE_SDLAUDIO -DUSE_SDLMIXER -DSUPPORT_LARGE_HDD -DSUPPORT_VPCVHD -DSUPPORT_KAI_IMAGES -DHOOK_SYSKEY -DALLOW_MULTIRUN -DUSE_MAME -DSUPPORT_SOUND_SB16 -DSUPPORT_FMGEN -DSUPPORT_GPIB -DSUPPORT_FAST_MEMORYCHECK LDFLAGS += $(fpic) -lm -lpthread $(SDL_LIBS) -lSDL2_ttf -lSDL2_mixer ifeq ($(SUPPORT_NET), 1) diff --git a/sdl2/Makefile.unix b/sdl2/Makefile.unix index 4d023f6..9a8bcd6 100644 --- a/sdl2/Makefile.unix +++ b/sdl2/Makefile.unix @@ -31,8 +31,8 @@ SOURCES_C += $(wildcard $(NP2_PATH)/i286c/*.c) \ $(NP2_PATH)/sdl2/unix/main.c OBJECTS = $(SOURCES_CXX:.cpp=.o) $(SOURCES_C:.c=.o) -CXXFLAGS += $(fpic) $(INCFLAGS) $(COMMONFLAGS) -DNP2_SDL2 -DUSE_SDLAUDIO -DUSE_SDLMIXER -DSUPPORT_LARGE_HDD -DSUPPORT_VPCVHD -DSUPPORT_KAI_IMAGES -DHOOK_SYSKEY -DALLOW_MULTIRUN -DUSE_MAME -DSUPPORT_SOUND_SB16 -DSUPPORT_NVL_IMAGES -CFLAGS += $(fpic) $(INCFLAGS) $(COMMONFLAGS) -DNP2_SDL2 -DUSE_SDLAUDIO -DUSE_SDLMIXER -DSUPPORT_LARGE_HDD -DSUPPORT_VPCVHD -DSUPPORT_KAI_IMAGES -DHOOK_SYSKEY -DALLOW_MULTIRUN -DUSE_MAME -DSUPPORT_SOUND_SB16 -DSUPPORT_NVL_IMAGES +CXXFLAGS += $(fpic) $(INCFLAGS) $(COMMONFLAGS) -DNP2_SDL2 -DUSE_SDLAUDIO -DUSE_SDLMIXER -DSUPPORT_LARGE_HDD -DSUPPORT_VPCVHD -DSUPPORT_KAI_IMAGES -DHOOK_SYSKEY -DALLOW_MULTIRUN -DUSE_MAME -DSUPPORT_SOUND_SB16 -DSUPPORT_NVL_IMAGES -DSUPPORT_FMGEN -DSUPPORT_GPIB -DSUPPORT_FAST_MEMORYCHECK +CFLAGS += $(fpic) $(INCFLAGS) $(COMMONFLAGS) -DNP2_SDL2 -DUSE_SDLAUDIO -DUSE_SDLMIXER -DSUPPORT_LARGE_HDD -DSUPPORT_VPCVHD -DSUPPORT_KAI_IMAGES -DHOOK_SYSKEY -DALLOW_MULTIRUN -DUSE_MAME -DSUPPORT_SOUND_SB16 -DSUPPORT_NVL_IMAGES -DSUPPORT_FMGEN -DSUPPORT_GPIB -DSUPPORT_FAST_MEMORYCHECK LDFLAGS += $(fpic) -lm -lpthread $(SDL_LIBS) -lSDL2_ttf -lSDL2_mixer -ldl ifeq ($(SUPPORT_NET), 1) diff --git a/sdl2/Makefile.win b/sdl2/Makefile.win index 00a637c..3f7e932 100644 --- a/sdl2/Makefile.win +++ b/sdl2/Makefile.win @@ -32,8 +32,8 @@ SOURCES_C += $(wildcard $(NP2_PATH)/i286c/*.c) \ $(NP2_PATH)/sdl2/win32/main.c OBJECTS = $(SOURCES_CXX:.cpp=.o) $(SOURCES_C:.c=.o) -CXXFLAGS += $(fpic) $(INCFLAGS) $(COMMONFLAGS) -DNP2_SDL2 -DUSE_SDLAUDIO -DUSE_SDLMIXER -DSUPPORT_LARGE_HDD -DSUPPORT_VPCVHD -DSUPPORT_KAI_IMAGES -DHOOK_SYSKEY -DALLOW_MULTIRUN -DUSE_MAME -DSUPPORT_SOUND_SB16 -DSUPPORT_NVL_IMAGES -CFLAGS += $(fpic) $(INCFLAGS) $(COMMONFLAGS) -DNP2_SDL2 -DUSE_SDLAUDIO -DUSE_SDLMIXER -DSUPPORT_LARGE_HDD -DSUPPORT_VPCVHD -DSUPPORT_KAI_IMAGES -DHOOK_SYSKEY -DALLOW_MULTIRUN -DUSE_MAME -DSUPPORT_SOUND_SB16 -DSUPPORT_NVL_IMAGES +CXXFLAGS += $(fpic) $(INCFLAGS) $(COMMONFLAGS) -DNP2_SDL2 -DUSE_SDLAUDIO -DUSE_SDLMIXER -DSUPPORT_LARGE_HDD -DSUPPORT_VPCVHD -DSUPPORT_KAI_IMAGES -DHOOK_SYSKEY -DALLOW_MULTIRUN -DUSE_MAME -DSUPPORT_SOUND_SB16 -DSUPPORT_NVL_IMAGES -DSUPPORT_FMGEN -DSUPPORT_GPIB -DSUPPORT_FAST_MEMORYCHECK +CFLAGS += $(fpic) $(INCFLAGS) $(COMMONFLAGS) -DNP2_SDL2 -DUSE_SDLAUDIO -DUSE_SDLMIXER -DSUPPORT_LARGE_HDD -DSUPPORT_VPCVHD -DSUPPORT_KAI_IMAGES -DHOOK_SYSKEY -DALLOW_MULTIRUN -DUSE_MAME -DSUPPORT_SOUND_SB16 -DSUPPORT_NVL_IMAGES -DSUPPORT_FMGEN -DSUPPORT_GPIB -DSUPPORT_FAST_MEMORYCHECK LDFLAGS += $(fpic) -lm $(SDL_LIBS) -lSDL2_ttf -lSDL2_mixer ifeq ($(SUPPORT_NET), 1) diff --git a/sdl2/cmmidi.c b/sdl2/cmmidi.c index df72e23..cb2c083 100644 --- a/sdl2/cmmidi.c +++ b/sdl2/cmmidi.c @@ -395,7 +395,7 @@ midireset(CMMIDI midi) work[1] = 0x7b; work[2] = 0x00; for (work[0] = 0xb0; work[0] < 0xc0; work[0]++) { - keydisp_midi(work); + //keydisp_midi(work); (*midi->outfn)(midi, MIDIOUTS3(work), 3); } } @@ -541,7 +541,7 @@ midiwrite(COMMNG self, UINT8 data) mch->prog = midi->buffer[1]; break; } - keydisp_midi(midi->buffer); + //keydisp_midi(midi->buffer); (*midi->outfn)(midi, MIDIOUTS2(midi->buffer), 2); midi->midictrl = MIDICTRL_READY; return 2; @@ -573,7 +573,7 @@ midiwrite(COMMNG self, UINT8 data) mch->bend = LOADINTELWORD(midi->buffer + 1); break; } - keydisp_midi(midi->buffer); + //keydisp_midi(midi->buffer); (*midi->outfn)(midi, MIDIOUTS3(midi->buffer), 3); midi->midictrl = MIDICTRL_READY; return 3; diff --git a/sdl2/ini.c b/sdl2/ini.c index 344bf92..2121ceb 100644 --- a/sdl2/ini.c +++ b/sdl2/ini.c @@ -665,6 +665,8 @@ static const INITBL iniitem[] = { {"USE_CLGD", INITYPE_BOOL, &np2cfg.usegd5430, 0}, {"CLGDTYPE", INITYPE_UINT16, &np2cfg.gd5430type, 0}, {"CLGDFCUR", INITYPE_BOOL, &np2cfg.gd5430fakecur, 0}, + {"GDMELOFS", INITYPE_UINT8, &np2cfg.gd5430melofs, 0}, + {"GANBBSEX", INITYPE_BOOL, &np2cfg.ga98nb_bigscrn_ex, 0}, #endif {"TIMERFIX", INITYPE_BOOL, &np2cfg.timerfix, 0}, @@ -685,6 +687,10 @@ static const INITBL iniitem[] = { {"cpu_bran", INIRO_STR, np2cfg.cpu_brandstring_o, 63}, {"FPU_TYPE", INITYPE_UINT8, &np2cfg.fpu_type, 0}, +#if defined(SUPPORT_FAST_MEMORYCHECK) + {"memckspd", INITYPE_UINT8, &np2cfg.memcheckspeed, 0}, +#endif + {"USERAM_D", INITYPE_BOOL, &np2cfg.useram_d, 0}, {"keyboard", INITYPE_KB, &np2oscfg.KEYBOARD, 0}, #if !defined(__LIBRETRO__) diff --git a/sdl2/libretro/libretro.c b/sdl2/libretro/libretro.c index 33af974..fcf9c27 100644 --- a/sdl2/libretro/libretro.c +++ b/sdl2/libretro/libretro.c @@ -847,7 +847,7 @@ void retro_set_environment(retro_environment_t cb) { "np2kai_BEEP_vol" , "Volume Beep; 3|0|1|2" }, #if defined(SUPPORT_WAB) { "np2kai_CLGD_en" , "Enable WAB (Restart App); OFF|ON" }, - { "np2kai_CLGD_type" , "WAB Type; PC-9821Xe10,Xa7e,Xb10 built-in|PC-9821Bp,Bs,Be,Bf built-in|PC-9821Xe built-in|PC-9821Cb built-in|PC-9821Cf built-in|PC-9821Cb2 built-in|PC-9821Cx2 built-in|PC-9821 PCI CL-GD5446 built-in|MELCO WAB-S|MELCO WSN-A2F|MELCO WSN-A4F|I-O DATA GA-98NBI/C|I-O DATA GA-98NBII|I-O DATA GA-98NBIV|PC-9801-96(PC-9801B3-E02)|Auto Select(Xe10, WAB-S), PCI|Auto Select(Xe10, WSN-A2F), PCI|Auto Select(Xe10, WSN-A4F), PCI|Auto Select(Xe10, WAB-S)|Auto Select(Xe10, WSN-A2F)|Auto Select(Xe10, WSN-A4F)" }, + { "np2kai_CLGD_type" , "WAB Type; PC-9821Xe10,Xa7e,Xb10 built-in|PC-9821Bp,Bs,Be,Bf built-in|PC-9821Xe built-in|PC-9821Cb built-in|PC-9821Cf built-in|PC-9821Cb2 built-in|PC-9821Cx2 built-in|PC-9821 PCI CL-GD5446 built-in|MELCO WAB-S|MELCO WSN-A2F|MELCO WSN-A4F|I-O DATA GA-98NBI/C|I-O DATA GA-98NBII|I-O DATA GA-98NBIV|PC-9801-96(PC-9801B3-E02)|Auto Select(Xe10, GA-98NBI/C), PCI|Auto Select(Xe10, GA-98NBII), PCI|Auto Select(Xe10, GA-98NBIV), PCI|Auto Select(Xe10, WAB-S), PCI|Auto Select(Xe10, WSN-A2F), PCI|Auto Select(Xe10, WSN-A4F), PCI|Auto Select(Xe10, WAB-S)|Auto Select(Xe10, WSN-A2F)|Auto Select(Xe10, WSN-A4F)" }, { "np2kai_CLGD_fc" , "Use Fake Hardware Cursor; OFF|ON" }, #endif /* defined(SUPPORT_WAB) */ #if defined(SUPPORT_PCI) @@ -1195,6 +1195,12 @@ static void update_variables(void) np2cfg.gd5430type = CIRRUS_98ID_GA98NBIV; else if (strcmp(var.value, "PC-9801-96(PC-9801B3-E02)") == 0) np2cfg.gd5430type = CIRRUS_98ID_96; + else if (strcmp(var.value, "Auto Select(Xe10, GA-98NBI/C), PCI") == 0) + np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE_G1_PCI; + else if (strcmp(var.value, "Auto Select(Xe10, GA-98NBII), PCI") == 0) + np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE_G2_PCI; + else if (strcmp(var.value, "Auto Select(Xe10, GA-98NBIV), PCI") == 0) + np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE_G4_PCI; else if (strcmp(var.value, "Auto Select(Xe10, WAB-S), PCI") == 0) np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE_WA_PCI; else if (strcmp(var.value, "Auto Select(Xe10, WSN-A2F), PCI") == 0) diff --git a/sound/fmboard.c b/sound/fmboard.c index 127d73f..d0ff694 100644 --- a/sound/fmboard.c +++ b/sound/fmboard.c @@ -281,6 +281,11 @@ void fmboard_bind(void) { board86_bind(); break; + case SOUNDID_PC_9801_86_118: + board118_bind(); + board86_bind(); + break; + case SOUNDID_MATE_X_PCM: board118_bind(); break; diff --git a/statsave.c b/statsave.c index 78a8918..434c284 100644 --- a/statsave.c +++ b/statsave.c @@ -834,6 +834,9 @@ static UINT GetSoundFlags(SOUNDID nSoundID) return FLAG_OPNA1 | FLAG_PCM86 | FLAG_CS4231; break; + case SOUNDID_PC_9801_86_118: + return FLAG_OPNA1 | FLAG_OPNA2 | FLAG_PCM86 | FLAG_CS4231; + case SOUNDID_MATE_X_PCM: return FLAG_OPNA1 | FLAG_CS4231; diff --git a/wab/cirrus_vga.c b/wab/cirrus_vga.c index f300f99..bf9ed74 100644 --- a/wab/cirrus_vga.c +++ b/wab/cirrus_vga.c @@ -106,6 +106,7 @@ int cirrusvga_wab_59e1 = 0x06; // int cirrusvga_wab_51e1 = 0xC2; // WSN CHECK IO RETURN VALUE int cirrusvga_wab_5be1 = 0xf7; // bit3:0=4M,1=2M ?????? int cirrusvga_wab_40e1 = 0x7b; +int cirrusvga_wab_42e1 = 0x00; //int cirrusvga_wab_0fe1 = 0xC2; int cirrusvga_wab_46e8 = 0x18; int cirrusvga_melcowab_ofs = CIRRUS_MELCOWAB_OFS_DEFAULT; @@ -214,7 +215,8 @@ DisplayState *graphic_console_init(vga_hw_update_ptr update, #define CIRRUS_SR7_BPP_24 0x04 #define CIRRUS_SR7_BPP_16 0x06 #define CIRRUS_SR7_BPP_32 0x08 -#define CIRRUS_SR7_ISAADDR_MASK 0xe0 +//#define CIRRUS_SR7_ISAADDR_MASK 0xe0 +#define CIRRUS_SR7_ISAADDR_MASK 0xf0 // sequencer 0x0f #define CIRRUS_MEMSIZE_512k 0x08 @@ -657,7 +659,6 @@ static rgb_to_pixel_dup_func *rgb_to_pixel_dup_table[NB_DEPTHS] = { * ***************************************/ - static void cirrus_bitblt_dblbufferswitch(); static void cirrus_bitblt_reset(CirrusVGAState *s); static void cirrus_update_memory_access(CirrusVGAState *s); @@ -1751,7 +1752,7 @@ cirrus_hook_read_sr(CirrusVGAState * s, unsigned reg_index, int *reg_value) break; case 0x05: // ??? case 0x07: // Extended Sequencer Mode - cirrus_update_memory_access(s); +// cirrus_update_memory_access(s); case 0x08: // EEPROM Control case 0x09: // Scratch Register 0 case 0x0a: // Scratch Register 1 @@ -1831,7 +1832,7 @@ cirrus_hook_write_sr(CirrusVGAState * s, unsigned reg_index, int reg_value) s->hw_cursor_y = (reg_value << 3) | (reg_index >> 5); break; case 0x07: // Extended Sequencer Mode - cirrus_update_memory_access(s); +// cirrus_update_memory_access(s); case 0x08: // EEPROM Control case 0x09: // Scratch Register 0 case 0x0a: // Scratch Register 1 @@ -1854,6 +1855,7 @@ cirrus_hook_write_sr(CirrusVGAState * s, unsigned reg_index, int reg_value) case 0x1e: // VCLK 3 Denominator & Post case 0x1f: // BIOS Write Enable and MCLK select s->sr[reg_index] = reg_value; + cirrus_update_memory_access(s); #ifdef DEBUG_CIRRUS printf("cirrus: handled outport sr_index %02x, sr_value %02x\n", reg_index, reg_value); @@ -1954,7 +1956,10 @@ cirrus_hook_read_gr(CirrusVGAState * s, unsigned reg_index, int *reg_value) case 0x02: // Standard VGA case 0x03: // Standard VGA case 0x04: // Standard VGA + return CIRRUS_HOOK_HANDLED; case 0x06: // Standard VGA + *reg_value = s->gr[0x06]; + return CIRRUS_HOOK_HANDLED; case 0x07: // Standard VGA case 0x08: // Standard VGA return CIRRUS_HOOK_NOT_HANDLED; @@ -1991,7 +1996,11 @@ cirrus_hook_write_gr(CirrusVGAState * s, unsigned reg_index, int reg_value) case 0x02: // Standard VGA case 0x03: // Standard VGA case 0x04: // Standard VGA - case 0x06: // Standard VGA + return CIRRUS_HOOK_NOT_HANDLED; + case 0x06: // Standard VGA + s->gr[reg_index] = reg_value & 0x0f; + cirrus_update_memory_access(s); + break; case 0x07: // Standard VGA case 0x08: // Standard VGA return CIRRUS_HOOK_NOT_HANDLED; @@ -3066,27 +3075,6 @@ void cirrus_linear_memwnd_addr_convert(void *opaque, target_phys_addr_t *addrval addr += (offset); addr &= s->cirrus_addr_mask; - //}else if(np2clvga.gd54xxtype == CIRRUS_98ID_GA98NB){ - // addr &= 0x7fff; - // if ((s->gr[0x0b] & 0x01) != 0){ - // /* dual bank */ - // if(addr < 0x4000){ - // offset = s->gr[0x09]; - // }else{ - // addr -= 0x4000; - // offset = s->gr[0x0a]; - // } - // }else{ - // /* single bank */ - // offset = s->gr[0x09]; - // } - // if ((s->gr[0x0b] & 0x20) != 0) - // offset <<= 14; - // else - // offset <<= 12; - - // addr += (offset); - // addr &= s->cirrus_addr_mask; }else if(np2clvga.gd54xxtype == CIRRUS_98ID_WSN || np2clvga.gd54xxtype == CIRRUS_98ID_WSN_A2F){ addr &= 0x7fff; if ((s->gr[0x0b] & 0x01) != 0){ @@ -3150,6 +3138,15 @@ int cirrus_linear_memwnd_addr_convert_iodata(void *opaque, target_phys_addr_t *a target_phys_addr_t addr = *addrval; int ret = 0; + // MMIO + // {... + // SR17[2]=1MMIOCl[u If this bit is set to '1', the BlT source will be system memory rather than display memory. + // {͂ɉGR6[3-2]=01ȂMMIO[hɂȂȂ + // MMIOAhXSR17[6]=0:0xb8000Ɋ蓖āA1:jA̍Ō256byteɊ蓖(CL-GD5430/'36/'40 only) + if ((s->sr[0x17] & CIRRUS_MMIO_ENABLE) != 0 && ((addr & 0xff000) == 0xb8000)) { + ret = 1; // MMIO + } + addr &= 0x7fff; if ((s->gr[0x0b] & 0x01) != 0){ /* dual bank */ @@ -3163,7 +3160,7 @@ int cirrus_linear_memwnd_addr_convert_iodata(void *opaque, target_phys_addr_t *a /* single bank */ offset = s->gr[0x09]; if(addr >= 0x4000){ - ret = 1; + ret = 1; // XXX: hQ[p??? } } if ((s->gr[0x0b] & 0x20) != 0) @@ -3248,7 +3245,10 @@ uint32_t_ cirrus_linear_memwnd_readb(void *opaque, target_phys_addr_t addr) return cirrus_linear_readb(opaque, addr); }else{ int r = cirrus_linear_memwnd_addr_convert_iodata(opaque, &addr); - if (r == 0 && (s->gr[0x31] & CIRRUS_BLT_RESET)!=0 || (s->cirrus_blt_mode & CIRRUS_BLTMODE_MEMSYSDEST)!=0) { // XXX: 炩ɐȂǂƂ肠悤ɒ + //if (r == 0 && (s->gr[0x31] & CIRRUS_BLT_RESET)!=0 || (s->cirrus_blt_mode & CIRRUS_BLTMODE_MEMSYSDEST)!=0) { // XXX: 炩ɐȂǂƂ肠悤ɒ + if ((cirrusvga_wab_40e1 & 0x02) == 0 ) { + return 0xff; //DRAM REFRESH Mode + }else if(r == 0) { return cirrus_linear_readb(opaque, addr); }else{ return cirrus_mmio_readb_iodata(opaque, addr); @@ -3266,7 +3266,10 @@ uint32_t_ cirrus_linear_memwnd_readw(void *opaque, target_phys_addr_t addr) return cirrus_linear_readw(opaque, addr); }else{ int r = cirrus_linear_memwnd_addr_convert_iodata(opaque, &addr); - if (r == 0 && (s->gr[0x31] & CIRRUS_BLT_RESET)!=0 || (s->cirrus_blt_mode & CIRRUS_BLTMODE_MEMSYSDEST)!=0) { // XXX: 炩ɐȂǂƂ肠悤ɒ + //if (r == 0 && (s->gr[0x31] & CIRRUS_BLT_RESET)!=0 || (s->cirrus_blt_mode & CIRRUS_BLTMODE_MEMSYSDEST)!=0) { // XXX: 炩ɐȂǂƂ肠悤ɒ + if ((cirrusvga_wab_40e1 & 0x02) == 0 ) { + return 0xff; //DRAM REFRESH Mode + }else if (r == 0) { return cirrus_linear_readw(opaque, addr); }else{ return cirrus_mmio_readw_iodata(opaque, addr); @@ -3284,7 +3287,10 @@ uint32_t_ cirrus_linear_memwnd_readl(void *opaque, target_phys_addr_t addr) return cirrus_linear_readl(opaque, addr); }else{ int r = cirrus_linear_memwnd_addr_convert_iodata(opaque, &addr); - if (r == 0 && (s->gr[0x31] & CIRRUS_BLT_RESET)!=0 || (s->cirrus_blt_mode & CIRRUS_BLTMODE_MEMSYSDEST)!=0) { // XXX: 炩ɐȂǂƂ肠悤ɒ + //if (r == 0 && (s->gr[0x31] & CIRRUS_BLT_RESET)!=0 || (s->cirrus_blt_mode & CIRRUS_BLTMODE_MEMSYSDEST)!=0) { // XXX: 炩ɐȂǂƂ肠悤ɒ + if ((cirrusvga_wab_40e1 & 0x02) == 0 ) { + return 0xff; //DRAM REFRESH Mode + }else if (r == 0) { return cirrus_linear_readl(opaque, addr); }else{ return cirrus_mmio_readl_iodata(opaque, addr); @@ -3306,47 +3312,23 @@ void cirrus_linear_memwnd3_addr_convert(void *opaque, target_phys_addr_t *addrva target_phys_addr_t addr = *addrval; addr -= np2clvga.VRAMWindowAddr3; - //if(np2clvga.gd54xxtype == CIRRUS_98ID_GA98NB){ - // if(addr < 0x8000){ - // addr &= 0x7fff; - // if ((s->gr[0x0b] & 0x01) != 0){ - // /* dual bank */ - // if(addr < 0x4000){ - // offset = s->gr[0x09]; - // }else{ - // addr -= 0x4000; - // offset = s->gr[0x0a]; - // } - // }else{ - // /* single bank */ - // offset = s->gr[0x09]; - // } - // if ((s->gr[0x0b] & 0x20) != 0) - // offset <<= 14; - // else - // offset <<= 12; - // }else{ - // addr &= ~np2clvga.pciMMIO_Mask; - // } - //}else{ - addr &= 0xffff; - if ((s->gr[0x0b] & 0x01) != 0){ - /* dual bank */ - if(addr < 0x8000){ - offset = s->gr[0x09]; - }else{ - addr -= 0x8000; - offset = s->gr[0x0a]; - } - }else{ - /* single bank */ + addr &= 0xffff; + if ((s->gr[0x0b] & 0x01) != 0){ + /* dual bank */ + if(addr < 0x8000){ offset = s->gr[0x09]; + }else{ + addr -= 0x8000; + offset = s->gr[0x0a]; } - if ((s->gr[0x0b] & 0x20) != 0) - offset <<= 14; - else - offset <<= 12; - //} + }else{ + /* single bank */ + offset = s->gr[0x09]; + } + if ((s->gr[0x0b] & 0x20) != 0) + offset <<= 14; + else + offset <<= 12; addr += (offset); @@ -3359,8 +3341,18 @@ int cirrus_linear_memwnd3_addr_convert_iodata(void *opaque, target_phys_addr_t * int offset; target_phys_addr_t addr = *addrval; int ret = 0; - + + // MMIO + // {... + // SR17[2]=1MMIOCl[u If this bit is set to '1', the BlT source will be system memory rather than display memory. + // {͂ɉGR6[3-2]=01ȂMMIO[hɂȂȂ + // MMIOAhXSR17[6]=0:0xb8000Ɋ蓖āA1:jA̍Ō256byteɊ蓖(CL-GD5430/'36/'40 only) + if ((s->sr[0x17] & CIRRUS_MMIO_ENABLE) != 0 && ((addr & 0xff000) == 0xb8000)) { + ret = 1; // MMIO + } + addr -= np2clvga.VRAMWindowAddr3; + if ((s->gr[0x0b] & 0x01) != 0){ /* dual bank */ if(addr < 0x8000){ @@ -3372,9 +3364,9 @@ int cirrus_linear_memwnd3_addr_convert_iodata(void *opaque, target_phys_addr_t * }else{ /* single bank */ offset = s->gr[0x09]; - if(addr >= 0x8000){ - ret = 1; - } + // if(addr >= 0x8000){ + // ret = 1; + // } } if ((s->gr[0x0b] & 0x20) != 0) offset <<= 14; @@ -3465,7 +3457,10 @@ uint32_t_ cirrus_linear_memwnd3_readb(void *opaque, target_phys_addr_t addr) return cirrus_linear_readb(opaque, addr); }else{ int r = cirrus_linear_memwnd3_addr_convert_iodata(opaque, &addr); - if (r == 0 && (s->gr[0x31] & CIRRUS_BLT_RESET)!=0 || (s->cirrus_blt_mode & CIRRUS_BLTMODE_MEMSYSDEST)!=0) { // XXX: 炩ɐȂǂƂ肠悤ɒ + // if (r == 0 && (s->gr[0x31] & CIRRUS_BLT_RESET)!=0 || (s->cirrus_blt_mode & CIRRUS_BLTMODE_MEMSYSDEST)!=0) { // XXX: 炩ɐȂǂƂ肠悤ɒ + if ((cirrusvga_wab_40e1 & 0x02) == 0 ) { + return 0xff; //DRAM REFRESH Mode + }else if(r == 0) { return cirrus_linear_readb(opaque, addr); }else{ return cirrus_mmio_readb_iodata(opaque, addr); @@ -3483,7 +3478,10 @@ uint32_t_ cirrus_linear_memwnd3_readw(void *opaque, target_phys_addr_t addr) return cirrus_linear_readw(opaque, addr); }else{ int r = cirrus_linear_memwnd3_addr_convert_iodata(opaque, &addr); - if (r == 0 && (s->gr[0x31] & CIRRUS_BLT_RESET)!=0 || (s->cirrus_blt_mode & CIRRUS_BLTMODE_MEMSYSDEST)!=0) { // XXX: 炩ɐȂǂƂ肠悤ɒ + // if (r == 0 && (s->gr[0x31] & CIRRUS_BLT_RESET)!=0 || (s->cirrus_blt_mode & CIRRUS_BLTMODE_MEMSYSDEST)!=0) { // XXX: 炩ɐȂǂƂ肠悤ɒ + if ((cirrusvga_wab_40e1 & 0x02) == 0) { + return 0xffff; //DRAM REFRESH Mode + }else if (r == 0) { return cirrus_linear_readw(opaque, addr); }else{ return cirrus_mmio_readw_iodata(opaque, addr); @@ -3501,7 +3499,10 @@ uint32_t_ cirrus_linear_memwnd3_readl(void *opaque, target_phys_addr_t addr) return cirrus_linear_readl(opaque, addr); }else{ int r = cirrus_linear_memwnd3_addr_convert_iodata(opaque, &addr); - if (r == 0 && (s->gr[0x31] & CIRRUS_BLT_RESET)!=0 || (s->cirrus_blt_mode & CIRRUS_BLTMODE_MEMSYSDEST)!=0) { // XXX: 炩ɐȂǂƂ肠悤ɒ + // if (r == 0 && (s->gr[0x31] & CIRRUS_BLT_RESET)!=0 || (s->cirrus_blt_mode & CIRRUS_BLTMODE_MEMSYSDEST)!=0) { // XXX: 炩ɐȂǂƂ肠悤ɒ + if ((cirrusvga_wab_40e1 & 0x02) == 0) { + return 0xffffffff; //DRAM REFRESH Mode + }else if (r == 0) { return cirrus_linear_readl(opaque, addr); }else{ return cirrus_mmio_readl_iodata(opaque, addr); @@ -3683,6 +3684,27 @@ static void cirrus_update_memory_access(CirrusVGAState *s) { unsigned mode; + // tAhXXV + + // inear address + // sr7[7-4]<>0:sr7[7-4]address23-20Ɋ蓖āAgrb[5]=1̎sr7[4]d.c. + // sr7[7-4] =0:gr6[3-2]=00,01:A0000Ɋ蓖 10,11:B0000Ɋ蓖 + // WSN42e1hĂ邩????? + + ////if ((s->sr[0x07] & CIRRUS_SR7_ISAADDR_MASK) != 0) { + //// np2clvga.VRAMWindowAddr3 = (s->sr[0x07] & CIRRUS_SR7_ISAADDR_MASK) << 20; + if ((cirrusvga_wab_42e1 & 0x18) == 0x18){ + np2clvga.VRAMWindowAddr3 = 0xf00000; + } + else { + if (s->gr[0x06] & 0x08) { + np2clvga.VRAMWindowAddr3 = 0xb0000; + } + else { + np2clvga.VRAMWindowAddr3 = 0xa0000; + } + } + if ((s->sr[0x17] & 0x44) == 0x44) { goto generic_io; } else if (s->cirrus_srcptr != s->cirrus_srcptr_end) { @@ -3714,15 +3736,18 @@ static void cirrus_update_memory_access(CirrusVGAState *s) /* I/O ports */ // PC-98pI/O|[g -> CL-GD54xxlCeBu|[gϊ uint32_t_ vga_convert_ioport(uint32_t_ addr){ +#if defined(SUPPORT_PCI) // PCIł̓|[gԍ̂܂ - if(np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WS_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_W4_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WA_PCI){ + if(pcidev.enable && + (np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WS_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_W4_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WA_PCI || + np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G1_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G2_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G4_PCI)){ if((addr & 0xFF0) == 0x3C0 || (addr & 0xFF0) == 0x3B0 || (addr & 0xFF0) == 0x3D0){ np2clvga.gd54xxtype = CIRRUS_98ID_PCI; cirrusvga->sr[0x1F] = 0x2d; // MemClock cirrusvga->gr[0x18] = 0x0f; // fastest memory configuration - cirrusvga->sr[0x0f] = 0x98; + cirrusvga->sr[0x0f] = CIRRUS_MEMSIZE_2M; cirrusvga->sr[0x17] = 0x20; - cirrusvga->sr[0x15] = 0x04; /* memory size, 3=2MB, 4=4MB */ + cirrusvga->sr[0x15] = 0x03; /* memory size, 3=2MB, 4=4MB */ cirrusvga->device_id = CIRRUS_ID_CLGD5446; cirrusvga->cr[0x27] = cirrusvga->device_id; cirrusvga->bustype = CIRRUS_BUSTYPE_PCI; @@ -3731,6 +3756,7 @@ uint32_t_ vga_convert_ioport(uint32_t_ addr){ pc98_cirrus_vga_initVRAMWindowAddr(); } } +#endif if(np2clvga.gd54xxtype <= 0xff){ // E{[hp if((addr & 0xFF0) == 0xCA0 || (addr & 0xFF0) == 0xC50){ @@ -4412,7 +4438,7 @@ void pc98_cirrus_vga_save() int pos = 0; UINT8 *f = cirrusvga_statsavebuf; //char test[500] = {0}; - uint32_t_ state_ver = 5; + uint32_t_ state_ver = 6; uint32_t_ intbuf; char en[3] = "en"; @@ -4544,6 +4570,8 @@ void pc98_cirrus_vga_save() array_write(f, pos, &cirrusvga_melcowab_ofs, sizeof(cirrusvga_melcowab_ofs)); + array_write(f, pos, &cirrusvga_wab_42e1, sizeof(cirrusvga_wab_42e1)); + TRACEOUT(("CIRRUS VGA datalen=%d, (max %d bytes)", pos, sizeof(cirrusvga_statsavebuf))); #if defined(_WIN32) // eXgp @@ -4606,6 +4634,7 @@ void pc98_cirrus_vga_load() case 3: case 4: case 5: + case 6: array_read(f, pos, en, 2); if(en[0] != 'e' || en[0] != 'n') break; @@ -4733,6 +4762,10 @@ void pc98_cirrus_vga_load() array_read(f, pos, &cirrusvga_wab_46e8, sizeof(cirrusvga_wab_46e8)); array_read(f, pos, &cirrusvga_melcowab_ofs, sizeof(cirrusvga_melcowab_ofs)); } + if(state_ver >= 6){ + array_read(f, pos, &cirrusvga_wab_42e1, sizeof(cirrusvga_wab_42e1)); + } + // break; default: @@ -4754,15 +4787,9 @@ void pc98_cirrus_vga_load() cirrus_update_bank_ptr(s, 0); cirrus_update_bank_ptr(s, 1); - // WABʃTCYXV - if(cirrusvga->get_resolution){ - cirrusvga->get_resolution((VGAState*)cirrusvga, &width, &height); - if((cirrusvga->cirrus_hidden_dac_data & 0xCF) == 0x4A){ - width *= 2; - height *= 2; - } - np2wab_setScreenSize(width, height); - } + // WABʃTCYXV + np2wab.realWidth = 0; + np2wab.realHeight = 0; np2wab.paletteChanged = 1; // pbgς܂ } @@ -4787,9 +4814,9 @@ void cirrus_reset(void *opaque) /* 4MB 64 bit memory config, always PCI */ s->sr[0x1F] = 0x2d; // MemClock s->gr[0x18] = 0x0f; // fastest memory configuration - s->sr[0x0f] = 0x98; + s->sr[0x0f] = CIRRUS_MEMSIZE_2M; //0x98; s->sr[0x17] = 0x20; - s->sr[0x15] = 0x04; /* memory size, 3=2MB, 4=4MB */ + s->sr[0x15] = 0x03; /* memory size, 3=2MB, 4=4MB */ } else { s->sr[0x1F] = 0x22; // MemClock s->sr[0x0F] = CIRRUS_MEMSIZE_2M; @@ -4803,6 +4830,9 @@ void cirrus_reset(void *opaque) } pc98_cirrus_setWABreg(); +#if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) + BitBlt(np2wabwnd.hDCBuf, 0, 0, WAB_MAX_WIDTH, WAB_MAX_HEIGHT, NULL, 0, 0, BLACKNESS); +#endif if ((np2clvga.gd54xxtype & CIRRUS_98ID_GA98NBMASK) == CIRRUS_98ID_GA98NBIC || np2clvga.gd54xxtype == CIRRUS_98ID_WSN || np2clvga.gd54xxtype == CIRRUS_98ID_WSN_A2F) { memset(s->vram_ptr, 0x00, s->real_vram_size); }else{ @@ -4824,13 +4854,17 @@ void cirrus_reset(void *opaque) s->gr[0x26] = 0x20; // XXX: Win2000œ̂ɕKvBR͓ - if(np2clvga.gd54xxtype == CIRRUS_98ID_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WS_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_W4_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WA_PCI){ +#if defined(SUPPORT_PCI) + if(pcidev.enable && (np2clvga.gd54xxtype == CIRRUS_98ID_PCI || + np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WS_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_W4_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WA_PCI || + np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G1_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G2_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G4_PCI)){ s->msr = 0x03; s->sr[0x08] = 0xFE; s->gr[0x0e] &= ~0x20; // XXX: for WinNT4.0 s->gr[0x33] = 0x04; // XXX: for WinNT4.0 s->cr[0x5e] &= ~0x20;//s->cr[0x5e] |= 0x20; // XXX: Part IDǂނ܂GR33݋֎~ɂiWinNT4p̕sj } +#endif //fh = fopen("vgadump.bin", "w+"); //if (fh != FILEH_INVALID) { // fwrite(s, sizeof(CirrusVGAState), 1, fh); @@ -4884,18 +4918,24 @@ void cirrusvga_drawGraphic(){ char* p; #endif + int cursot_ofs_x = 0; + int cursot_ofs_y = 0; + + int realWidth = 0; + int realHeight = 0; // VRAMł1C̃TCYi\ƓȂꍇLj line_offset = cirrusvga->cr[0x13] | ((cirrusvga->cr[0x1b] & 0x10) << 4); - line_offset <<= 3; + line_offset <<= 3; vram_ptr = cirrusvga->vram_ptr + np2wab.vramoffs; - if(cirrusvga->device_id == CIRRUS_ID_CLGD5446 || (np2clvga.gd54xxtype & CIRRUS_98ID_GA98NBMASK) == CIRRUS_98ID_GA98NBIC || (np2clvga.gd54xxtype & CIRRUS_98ID_WABMASK) == CIRRUS_98ID_WAB){ - if((cirrusvga->cr[0x5e] & 0x7) == 0x1){ - cirrusvga->graphics_dblbuf_index = (cirrusvga->graphics_dblbuf_index + 1) & 0x1; - } - if(cirrusvga->graphics_dblbuf_index != 0 || (cirrusvga->cr[0x1a] & 0x2) || (np2clvga.gd54xxtype & CIRRUS_98ID_GA98NBMASK) == CIRRUS_98ID_GA98NBIC || (np2clvga.gd54xxtype & CIRRUS_98ID_WABMASK) == CIRRUS_98ID_WAB){ + //if(cirrusvga->device_id == CIRRUS_ID_CLGD5446 || (np2clvga.gd54xxtype & CIRRUS_98ID_GA98NBMASK) == CIRRUS_98ID_GA98NBIC || (np2clvga.gd54xxtype & CIRRUS_98ID_WABMASK) == CIRRUS_98ID_WAB){ + //if((cirrusvga->cr[0x5e] & 0x7) == 0x1){ + // cirrusvga->graphics_dblbuf_index = (cirrusvga->graphics_dblbuf_index + 1) & 0x1; + //} + //if(cirrusvga->graphics_dblbuf_index != 0 || (cirrusvga->cr[0x1a] & 0x2) || (np2clvga.gd54xxtype & CIRRUS_98ID_GA98NBMASK) == CIRRUS_98ID_GA98NBIC || (np2clvga.gd54xxtype & CIRRUS_98ID_WABMASK) == CIRRUS_98ID_WAB) + { // Screen Start A int addroffset = (((int)(cirrusvga->cr[0x1d] >> 7) & 0x01) << 19)| @@ -4905,11 +4945,11 @@ void cirrusvga_drawGraphic(){ (((int)(cirrusvga->cr[0x0d] >> 0) & 0xff) << 0); vram_ptr += addroffset * 4; // ??? } - } + //} //// DEBUG //////// vram_ptr = mem + 640*16*memshift; - //vram_ptr += 640*16*memshift; + ////vram_ptr += 640*16*memshift; //if(GetKeyState(VK_SHIFT)<0){ // memshift++; //// kdown = 1; @@ -4933,9 +4973,10 @@ void cirrusvga_drawGraphic(){ // Cirrus̐FƉ𑜓x擾 bpp = cirrusvga->get_bpp((VGAState*)cirrusvga); - //bpp = cirrusvga->cirrus_blt_pixelwidth*8; cirrusvga->get_resolution((VGAState*)cirrusvga, &width, &height); + if(bpp==0) return; + // Palette mode > 85MHz (1280x1024) if((cirrusvga->cirrus_hidden_dac_data & 0xCF) == 0x4A){ bpp = 8; @@ -4955,29 +4996,26 @@ void cirrusvga_drawGraphic(){ } } - // WAB𑜓xZbg - np2wab.realWidth = width; - np2wab.realHeight = height; - - //@̕\i2^nɃpfBO邱Ƃ炵ǏȂ̂Ŗj + // WAB𑜓xݒ + realWidth = width; + realHeight = height; + + // CRTC offset ݒ scanW = width*bpp/8; scanpixW = width; if(bpp && line_offset){ - scanW = line_offset; - if(bpp==8) - scanpixW = scanW*8/bpp; - } - if(np2clvga.gd54xxtype == CIRRUS_98ID_WSN || np2clvga.gd54xxtype == CIRRUS_98ID_WAB || np2clvga.gd54xxtype == CIRRUS_98ID_WSN_A2F){ - // XXX: WSNp‚C - if((width==1024 || width==800 || width==640) && bpp==32){ - scanW = width*bpp/8; - scanpixW = width; + // 32bit colorp‚C for GA-98NB & WSN-A2F/A4F + if(bpp==32){ + if((np2clvga.gd54xxtype & CIRRUS_98ID_GA98NBMASK) == CIRRUS_98ID_GA98NBIC || (np2clvga.gd54xxtype & CIRRUS_98ID_WABMASK) == CIRRUS_98ID_WAB){ + line_offset <<= 1; + } } + scanW = line_offset; } + #if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) if(bpp==16){ uint32_t_* bitfleld = (uint32_t_*)(ga_bmpInfo->bmiColors); - scanW = width*2; bitfleld[0] = 0x0000F800; bitfleld[1] = 0x000007E0; bitfleld[2] = 0x0000001F; @@ -4985,24 +5023,37 @@ void cirrusvga_drawGraphic(){ }else{ ga_bmpInfo->bmiHeader.biCompression = BI_RGB; } -#else - if(bpp==16){ - scanW = width*2; - } #endif if(bpp==15){ bpp = 16; - scanW = width*2; } - if(np2clvga.gd54xxtype == CIRRUS_98ID_WAB){ - // XXX: ʕ\JnʒuVtg {͂͂ݏoΑɓ]HHH - scanshift = ((((int)cirrusvga->cr[0x0c])<<8)|(((int)cirrusvga->cr[0x0d]))); - if(scanshift){ - scanshift = ((scanshift)/* % (height)*/);//; + // GA-98NBp + if((np2clvga.gd54xxtype & CIRRUS_98ID_GA98NBMASK) == CIRRUS_98ID_GA98NBIC){ + if(np2cfg.ga98nb_bigscrn_ex && (bpp==8 || bpp==16) && (width==1024 || width==1280) && scanW*8/bpp==1600){ + // 1600x1024 Big Screen Extension + int addroffset = + (((int)(cirrusvga->cr[0x1d] >> 7) & 0x01) << 19)| + (((int)(cirrusvga->cr[0x1b] >> 2) & 0x03) << 17)| + (((int)(cirrusvga->cr[0x1b] >> 0) & 0x01) << 16)| + (((int)(cirrusvga->cr[0x0c] >> 0) & 0xff) << 8)| + (((int)(cirrusvga->cr[0x0d] >> 0) & 0xff) << 0); + addroffset *= 4; + realWidth = 1600; + realHeight = 1024; + width = 1600; + height = 1024; + scanpixW = 1600; + vram_ptr = cirrusvga->vram_ptr + np2wab.vramoffs; + cursot_ofs_x = (addroffset*8/bpp) % 1600; + cursot_ofs_y = (addroffset*8/bpp) / 1600; } } - + + // WAB𑜓xXV + np2wab.realWidth = realWidth; + np2wab.realHeight = realHeight; + #if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) if(ga_bmpInfo->bmiHeader.biBitCount!=8 && bpp==8){ np2wab.paletteChanged = 1; @@ -5032,60 +5083,112 @@ void cirrusvga_drawGraphic(){ np2wab.paletteChanged = 0; } // 256[hȂfɓ]ėǂ - if(scanshift){ - // XXX: WAB̃XLʒuVtgĂ邯ǥ -#if defined(NP2_SDL2) || defined(__LIBRETRO__) - scanptr = vram_ptr; - VRAMBuf = (unsigned int*)malloc(width * height * sizeof(unsigned int)); - p = (unsigned char*)VRAMBuf; - for(j = 0; j < height; j++) { - for(i = 0; i < width; i++) { - p[(j * width + i) * 4 + 2] = cirrusvga->palette[vram_ptr[j * width + i] * 3 ] << 2; - p[(j * width + i) * 4 + 1] = cirrusvga->palette[vram_ptr[j * width + i] * 3 + 1] << 2; - p[(j * width + i) * 4 ] = cirrusvga->palette[vram_ptr[j * width + i] * 3 + 2] << 2; - } - } -#elif defined(NP2_X11) - scanptr = vram_ptr; - if(np2wabwnd.pPixbuf) { - VRAMBuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, width, height); - p = gdk_pixbuf_get_pixels(VRAMBuf); + if(scanpixW*bpp/8==scanW){ + if(scanshift){ + // XXX: WAB̃XLʒuVtgĂ邯ǥ +#if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) + ga_bmpInfo->bmiHeader.biWidth = scanpixW; + ga_bmpInfo->bmiHeader.biHeight = -height; + scanptr = vram_ptr; + SetDIBitsToDevice( + hdc , 0 , 0 , + ga_bmpInfo->bmiHeader.biWidth , -ga_bmpInfo->bmiHeader.biHeight , + 0 , 0 , 0 , -ga_bmpInfo->bmiHeader.biHeight , + vram_ptr+scanshift*bpp/8 , ga_bmpInfo , DIB_PAL_COLORS + ); + //int scanshiftY = scanshift/scanpixW; + //ga_bmpInfo->bmiHeader.biWidth = scanpixW; + //ga_bmpInfo->bmiHeader.biHeight = -height; + //SetDIBitsToDevice( + // hdc , 0 , 0 , + // ga_bmpInfo->bmiHeader.biWidth , -ga_bmpInfo->bmiHeader.biHeight , + // 0 , 0 , scanshiftY , -ga_bmpInfo->bmiHeader.biHeight , + // vram_ptr , ga_bmpInfo , DIB_PAL_COLORS + //); + //SetDIBitsToDevice( + // hdc , 0 , 0 , + // ga_bmpInfo->bmiHeader.biWidth , -ga_bmpInfo->bmiHeader.biHeight , + // 0 , 0 , 0 , scanshiftY , + // vram_ptr , ga_bmpInfo , DIB_PAL_COLORS + //); +#elif defined(NP2_SDL2) || defined(__LIBRETRO__) + scanptr = vram_ptr; + VRAMBuf = (unsigned int*)malloc(width * height * sizeof(unsigned int)); + p = (unsigned char*)VRAMBuf; for(j = 0; j < height; j++) { for(i = 0; i < width; i++) { - p[(j * width + i) * 3 ] = cirrusvga->palette[vram_ptr[j * width + i] * 3 ] << 2; - p[(j * width + i) * 3 + 1] = cirrusvga->palette[vram_ptr[j * width + i] * 3 + 1] << 2; - p[(j * width + i) * 3 + 2] = cirrusvga->palette[vram_ptr[j * width + i] * 3 + 2] << 2; + p[(j * width + i) * 4 + 2] = cirrusvga->palette[vram_ptr[j * width + i] * 3 ] << 2; + p[(j * width + i) * 4 + 1] = cirrusvga->palette[vram_ptr[j * width + i] * 3 + 1] << 2; + p[(j * width + i) * 4 ] = cirrusvga->palette[vram_ptr[j * width + i] * 3 + 2] << 2; + } + } +#elif defined(NP2_X11) + scanptr = vram_ptr; + if(np2wabwnd.pPixbuf) { + VRAMBuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, width, height); + p = gdk_pixbuf_get_pixels(VRAMBuf); + for(j = 0; j < height; j++) { + for(i = 0; i < width; i++) { + p[(j * width + i) * 3 ] = cirrusvga->palette[vram_ptr[j * width + i] * 3 ] << 2; + p[(j * width + i) * 3 + 1] = cirrusvga->palette[vram_ptr[j * width + i] * 3 + 1] << 2; + p[(j * width + i) * 3 + 2] = cirrusvga->palette[vram_ptr[j * width + i] * 3 + 2] << 2; + } } } - } -#else - ga_bmpInfo->bmiHeader.biWidth = scanpixW; - ga_bmpInfo->bmiHeader.biHeight = -height; - scanptr = vram_ptr; - SetDIBitsToDevice( - hdc , 0 , 0 , - ga_bmpInfo->bmiHeader.biWidth , -ga_bmpInfo->bmiHeader.biHeight , - 0 , 0 , 0 , -ga_bmpInfo->bmiHeader.biHeight , - vram_ptr+scanshift*bpp/8 , ga_bmpInfo , DIB_PAL_COLORS - ); - //int scanshiftY = scanshift/scanpixW; - //ga_bmpInfo->bmiHeader.biWidth = scanpixW; - //ga_bmpInfo->bmiHeader.biHeight = -height; - //SetDIBitsToDevice( - // hdc , 0 , 0 , - // ga_bmpInfo->bmiHeader.biWidth , -ga_bmpInfo->bmiHeader.biHeight , - // 0 , 0 , scanshiftY , -ga_bmpInfo->bmiHeader.biHeight , - // vram_ptr , ga_bmpInfo , DIB_PAL_COLORS - //); - //SetDIBitsToDevice( - // hdc , 0 , 0 , - // ga_bmpInfo->bmiHeader.biWidth , -ga_bmpInfo->bmiHeader.biHeight , - // 0 , 0 , 0 , scanshiftY , - // vram_ptr , ga_bmpInfo , DIB_PAL_COLORS - //); #endif + }else{ +#if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) + ga_bmpInfo->bmiHeader.biWidth = scanpixW; + ga_bmpInfo->bmiHeader.biHeight = -height; + scanptr = vram_ptr; + SetDIBitsToDevice( + hdc , 0 , 0 , + ga_bmpInfo->bmiHeader.biWidth , -ga_bmpInfo->bmiHeader.biHeight , + 0 , 0 , 0 , -ga_bmpInfo->bmiHeader.biHeight , + vram_ptr , ga_bmpInfo , DIB_PAL_COLORS + ); +#elif defined(NP2_SDL2) || defined(__LIBRETRO__) + scanptr = vram_ptr; + VRAMBuf = (unsigned int*)malloc(width * height * sizeof(unsigned int)); + p = (unsigned char*)VRAMBuf; + for(j = 0; j < height; j++) { + for(i = 0; i < width; i++) { + p[(j * width + i) * 4 + 2] = cirrusvga->palette[vram_ptr[j * width + i] * 3 ] << 2; + p[(j * width + i) * 4 + 1] = cirrusvga->palette[vram_ptr[j * width + i] * 3 + 1] << 2; + p[(j * width + i) * 4 ] = cirrusvga->palette[vram_ptr[j * width + i] * 3 + 2] << 2; + } + } +#elif defined(NP2_X11) + scanptr = vram_ptr; + if(np2wabwnd.pPixbuf) { + VRAMBuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, width, height); + p = gdk_pixbuf_get_pixels(VRAMBuf); + for(j = 0; j < height; j++) { + for(i = 0; i < width; i++) { + p[(j * width + i) * 3 ] = cirrusvga->palette[vram_ptr[j * width + i] * 3 ] << 2; + p[(j * width + i) * 3 + 1] = cirrusvga->palette[vram_ptr[j * width + i] * 3 + 1] << 2; + p[(j * width + i) * 3 + 2] = cirrusvga->palette[vram_ptr[j * width + i] * 3 + 2] << 2; + } + } + } +#endif + } }else{ -#if defined(NP2_SDL2) || defined(__LIBRETRO__) + // YȂ1C“] +#if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) + scanptr = vram_ptr; + for(i=0;ibmiHeader.biWidth = width; + ga_bmpInfo->bmiHeader.biHeight = 1; + r = SetDIBitsToDevice( + hdc , 0 , i , + width , 1 , + 0 , 0 , 0 , 1 , + scanptr , ga_bmpInfo , DIB_PAL_COLORS + ); + scanptr += scanW; + } +#elif defined(NP2_SDL2) || defined(__LIBRETRO__) scanptr = vram_ptr; VRAMBuf = (unsigned int*)malloc(width * height * sizeof(unsigned int)); p = (unsigned char*)VRAMBuf; @@ -5099,33 +5202,26 @@ void cirrusvga_drawGraphic(){ #elif defined(NP2_X11) scanptr = vram_ptr; if(np2wabwnd.pPixbuf) { - VRAMBuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, width, height); - p = gdk_pixbuf_get_pixels(VRAMBuf); - for(j = 0; j < height; j++) { - for(i = 0; i < width; i++) { - p[(j * width + i) * 3 ] = cirrusvga->palette[vram_ptr[j * width + i] * 3 ] << 2; - p[(j * width + i) * 3 + 1] = cirrusvga->palette[vram_ptr[j * width + i] * 3 + 1] << 2; - p[(j * width + i) * 3 + 2] = cirrusvga->palette[vram_ptr[j * width + i] * 3 + 2] << 2; - } - } + GdkPixbuf *VRAMBuf; + VRAMBuf = gdk_pixbuf_new_from_data(vram_ptr, GDK_COLORSPACE_RGB, FALSE, 8, width, height, width*bpp/8, NULL,NULL); } -#else - ga_bmpInfo->bmiHeader.biWidth = scanpixW; - ga_bmpInfo->bmiHeader.biHeight = -height; - scanptr = vram_ptr; - SetDIBitsToDevice( - hdc , 0 , 0 , - ga_bmpInfo->bmiHeader.biWidth , -ga_bmpInfo->bmiHeader.biHeight , - 0 , 0 , 0 , -ga_bmpInfo->bmiHeader.biHeight , - vram_ptr , ga_bmpInfo , DIB_PAL_COLORS - ); #endif } }else{ if(scanpixW*bpp/8==scanW){ if(scanshift){ // XXX: XLʒuVtg -#if defined(NP2_SDL2) || defined(__LIBRETRO__) +#if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) + ga_bmpInfo->bmiHeader.biWidth = scanpixW; + ga_bmpInfo->bmiHeader.biHeight = -height; + scanptr = vram_ptr; + SetDIBitsToDevice( + hdc , 0 , 0 , + ga_bmpInfo->bmiHeader.biWidth , -ga_bmpInfo->bmiHeader.biHeight , + 0 , 0 , 0 , -ga_bmpInfo->bmiHeader.biHeight , + vram_ptr+scanshift*bpp/8 , ga_bmpInfo , DIB_RGB_COLORS + ); +#elif defined(NP2_SDL2) || defined(__LIBRETRO__) scanptr = vram_ptr; VRAMBuf = (unsigned int*)malloc(width * height * sizeof(unsigned int)); p = (unsigned char*)VRAMBuf; @@ -5142,7 +5238,9 @@ void cirrusvga_drawGraphic(){ VRAMBuf = gdk_pixbuf_new_from_data(vram_ptr, GDK_COLORSPACE_RGB, FALSE, 8, width, height, width*bpp/8, NULL,NULL); p = gdk_pixbuf_get_pixels(VRAMBuf); } -#else +#endif + }else{ +#if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) ga_bmpInfo->bmiHeader.biWidth = scanpixW; ga_bmpInfo->bmiHeader.biHeight = -height; scanptr = vram_ptr; @@ -5150,11 +5248,9 @@ void cirrusvga_drawGraphic(){ hdc , 0 , 0 , ga_bmpInfo->bmiHeader.biWidth , -ga_bmpInfo->bmiHeader.biHeight , 0 , 0 , 0 , -ga_bmpInfo->bmiHeader.biHeight , - vram_ptr+scanshift*bpp/8 , ga_bmpInfo , DIB_RGB_COLORS + vram_ptr , ga_bmpInfo , DIB_RGB_COLORS ); -#endif - }else{ -#if defined(NP2_SDL2) || defined(__LIBRETRO__) +#elif defined(NP2_SDL2) || defined(__LIBRETRO__) scanptr = vram_ptr; VRAMBuf = (unsigned int*)malloc(width * height * sizeof(unsigned int)); p = (unsigned char*)VRAMBuf; @@ -5192,21 +5288,24 @@ void cirrusvga_drawGraphic(){ } } } -#else - ga_bmpInfo->bmiHeader.biWidth = scanpixW; - ga_bmpInfo->bmiHeader.biHeight = -height; - scanptr = vram_ptr; - SetDIBitsToDevice( - hdc , 0 , 0 , - ga_bmpInfo->bmiHeader.biWidth , -ga_bmpInfo->bmiHeader.biHeight , - 0 , 0 , 0 , -ga_bmpInfo->bmiHeader.biHeight , - vram_ptr , ga_bmpInfo , DIB_RGB_COLORS - ); #endif } }else{ // YȂ1C“] -#if defined(NP2_SDL2) || defined(__LIBRETRO__) +#if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) + scanptr = vram_ptr; + for(i=0;ibmiHeader.biWidth = width; + ga_bmpInfo->bmiHeader.biHeight = 1; + r = SetDIBitsToDevice( + hdc , 0 , i , + width , 1 , + 0 , 0 , 0 , 1 , + scanptr , ga_bmpInfo , DIB_RGB_COLORS + ); + scanptr += scanW; + } +#elif defined(NP2_SDL2) || defined(__LIBRETRO__) scanptr = vram_ptr; VRAMBuf = (unsigned int*)malloc(width * height * sizeof(unsigned int)); p = (unsigned char*)VRAMBuf; @@ -5223,28 +5322,23 @@ void cirrusvga_drawGraphic(){ GdkPixbuf *VRAMBuf; VRAMBuf = gdk_pixbuf_new_from_data(vram_ptr, GDK_COLORSPACE_RGB, FALSE, 8, width, height, width*bpp/8, NULL,NULL); } -#else - scanptr = vram_ptr; - for(i=0;ibmiHeader.biWidth = width; - ga_bmpInfo->bmiHeader.biHeight = 1; - r = SetDIBitsToDevice( - hdc , 0 , i , - width , 1 , - 0 , 0 , 0 , 1 , - scanptr , ga_bmpInfo , DIB_RGB_COLORS - ); - scanptr += scanW; - } #endif } } if ((cirrusvga->sr[0x12] & CIRRUS_CURSOR_SHOW)){ - int hwcur_x = cirrusvga->hw_cursor_x; - int hwcur_y = cirrusvga->hw_cursor_y; + int hwcur_x = cirrusvga->hw_cursor_x + cursot_ofs_x; + int hwcur_y = cirrusvga->hw_cursor_y + cursot_ofs_y; + // GA-98NBp CRTC offset + if((np2clvga.gd54xxtype & CIRRUS_98ID_GA98NBMASK) == CIRRUS_98ID_GA98NBIC){ + if(width==320 && height==240){ + hwcur_y /= 2; + } + } if(np2cfg.gd5430fakecur){ // n[hEFAJ[\肭\łȂꍇp -#if defined(NP2_SDL2) || defined(__LIBRETRO__) +#if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) + DrawIcon(hdc, hwcur_x, hwcur_y, ga_hFakeCursor); +#elif defined(NP2_SDL2) || defined(__LIBRETRO__) int fcx, fcy; UINT8 col; for(fcy = 0; fcy < CIRRUS_FMC_H; fcy++) { @@ -5273,8 +5367,6 @@ void cirrusvga_drawGraphic(){ } } } -#else - DrawIcon(hdc, hwcur_x, hwcur_y, ga_hFakeCursor); #endif }else{ //HPALETTE oldCurPalette; @@ -5287,11 +5379,89 @@ void cirrusvga_drawGraphic(){ uint8_t *palette, *src, *base; uint32_t_ *dst; uint32_t_ content; + uint32_t_ colortmp; + const uint8_t *plane0, *plane1; + int b0, b1; int poffset; if (cirrusvga->sr[0x12] & CIRRUS_CURSOR_LARGE) { cursize = 64; } -#if defined(NP2_SDL2) || defined(__LIBRETRO__) +#if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) + BitBlt(ga_hdc_cursor , 0 , 0 , cursize , cursize , hdc , hwcur_x , hwcur_y , SRCCOPY); + + if(np2clvga.gd54xxtype == CIRRUS_98ID_PCI){ + base = cirrusvga->vram_ptr + cirrusvga->real_vram_size - 16 * 1024; + }else if(np2clvga.gd54xxtype <= 0xff){ + base = cirrusvga->vram_ptr + 1024 * 1024 - 16 * 1024; // ??? 1MBOH + }else{ + base = cirrusvga->vram_ptr + cirrusvga->real_vram_size - 16 * 1024; + } + if (height >= hwcur_y && 0 <= (hwcur_y + cursize)){ + int y1, y2; + y1 = hwcur_y; + y2 = hwcur_y+cursize; + h = cursize; + dst = (uint32_t_ *)cursorptr; + dst += 64*64; + dst -= 64; + palette = cirrusvga->cirrus_hidden_palette; + color0 = rgb_to_pixel32(c6_to_8(palette[0x0 * 3]), + c6_to_8(palette[0x0 * 3 + 1]), + c6_to_8(palette[0x0 * 3 + 2])); + color1 = rgb_to_pixel32(c6_to_8(palette[0xf * 3]), + c6_to_8(palette[0xf * 3 + 1]), + c6_to_8(palette[0xf * 3 + 2])); + for(y=y1;ysr[0x12] & CIRRUS_CURSOR_LARGE) { + src += (cirrusvga->sr[0x13] & 0x3c) * 256; + src += (y - (int)hwcur_y) * 16; + poffset = 8; + content = ((uint32_t_ *)src)[0] | + ((uint32_t_ *)src)[1] | + ((uint32_t_ *)src)[2] | + ((uint32_t_ *)src)[3]; + } else { + src += (cirrusvga->sr[0x13] & 0x3f) * 256; + src += (y - (int)hwcur_y) * 4; + poffset = 128; + content = ((uint32_t_ *)src)[0] | + ((uint32_t_ *)(src + 128))[0]; + } + /* if nothing to draw, no need to continue */ + x1 = hwcur_x; + if (x1 < width){ + x2 = hwcur_x + cursize; + w = x2 - x1; + for(x=0;x> 3] >> (7 - ((x) & 7))) & 1; + b1 = (plane1[(x) >> 3] >> (7 - ((x) & 7))) & 1; + switch(b0 | (b1 << 1)) { + case 0: + break; + case 1: + colortmp ^= 0xffffff; + break; + case 2: + colortmp = color0; + break; + case 3: + colortmp = color1; + break; + } + *dst = colortmp; + dst++; + } + dst += (64 - w); + } + dst -= 64*2; + } + } + BitBlt(hdc , hwcur_x , hwcur_y , cursize , cursize , ga_hdc_cursor , 0 , 0 , SRCCOPY); +#elif defined(NP2_SDL2) || defined(__LIBRETRO__) if(np2clvga.gd54xxtype == CIRRUS_98ID_PCI){ base = cirrusvga->vram_ptr + cirrusvga->real_vram_size - 16 * 1024; }else if(np2clvga.gd54xxtype <= 0xff){ @@ -5466,83 +5636,6 @@ void cirrusvga_drawGraphic(){ } } } -#else - BitBlt(ga_hdc_cursor , 0 , 0 , cursize , cursize , hdc , hwcur_x , hwcur_y , SRCCOPY); - - if(np2clvga.gd54xxtype <= 0xff){ - base = cirrusvga->vram_ptr + 1024 * 1024 - 16 * 1024; // ??? 1MBOH - }else{ - base = cirrusvga->vram_ptr + cirrusvga->real_vram_size - 16 * 1024; - } - if (height >= hwcur_y && 0 <= (hwcur_y + cursize)){ - int y1, y2; - uint32_t_ colortmp; - const uint8_t *plane0, *plane1; - int b0, b1; - src = base; - y1 = hwcur_y; - y2 = hwcur_y+cursize; - h = cursize; - dst = (uint32_t_ *)cursorptr; - dst += 64*64; - dst -= 64; - if(y2 > height) y2 = height; - for(y=y1;ysr[0x12] & CIRRUS_CURSOR_LARGE) { - src += (cirrusvga->sr[0x13] & 0x3c) * 256; - src += (y - (int)hwcur_y) * 16; - poffset = 8; - content = ((uint32_t_ *)src)[0] | - ((uint32_t_ *)src)[1] | - ((uint32_t_ *)src)[2] | - ((uint32_t_ *)src)[3]; - } else { - src += (cirrusvga->sr[0x13] & 0x3f) * 256; - src += (y - (int)hwcur_y) * 4; - poffset = 128; - content = ((uint32_t_ *)src)[0] | - ((uint32_t_ *)(src + 128))[0]; - } - /* if nothing to draw, no need to continue */ - x1 = hwcur_x; - if (x1 < width){ - x2 = hwcur_x + cursize; - w = x2 - x1; - palette = cirrusvga->cirrus_hidden_palette; - color0 = rgb_to_pixel32(c6_to_8(palette[0x0 * 3]), - c6_to_8(palette[0x0 * 3 + 1]), - c6_to_8(palette[0x0 * 3 + 2])); - color1 = rgb_to_pixel32(c6_to_8(palette[0xf * 3]), - c6_to_8(palette[0xf * 3 + 1]), - c6_to_8(palette[0xf * 3 + 2])); - for(x=0;x> 3] >> (7 - ((x) & 7))) & 1; - b1 = (plane1[(x) >> 3] >> (7 - ((x) & 7))) & 1; - switch(b0 | (b1 << 1)) { - case 0: - break; - case 1: - colortmp ^= 0xffffff; - break; - case 2: - colortmp = color0; - break; - case 3: - colortmp = color1; - break; - } - *dst = colortmp; - dst++; - } - dst += (64 - w); - } - dst -= 64*2; - } - } - BitBlt(hdc , hwcur_x , hwcur_y , cursize , cursize , ga_hdc_cursor , 0 , 0 , SRCCOPY); #endif } } @@ -5765,9 +5858,7 @@ static void IOOUTCALL cirrusvga_ofab(UINT port, REG8 dat) { break; case 0x02: // jAVRAMANZXpAhXݒ - //if(np2clvga.gd54xxtype != CIRRUS_98ID_PCI){ - if(dat!=0x00 && dat!=0xff) np2clvga.VRAMWindowAddr = (dat<<24); - //} + if(dat!=0x00 && dat!=0xff) np2clvga.VRAMWindowAddr = (dat<<24); //cirrusvga->vram_offset = np2clvga.VRAMWindowAddr; break; case 0x03: @@ -5869,51 +5960,70 @@ static REG8 IOINPCALL cirrusvga_iff82(UINT port) { } // WAB, WSNp +static void cirrusvga_setAutoWABID() { + switch(np2clvga.gd54xxtype){ + case CIRRUS_98ID_AUTO_XE_G1_PCI: + np2clvga.gd54xxtype = CIRRUS_98ID_GA98NBIC; + memset(cirrusvga->vram_ptr, 0x00, cirrusvga->real_vram_size); + cirrusvga_wab_59e1 = 0x06; // d.c. + cirrusvga_wab_51e1 = 0xC2; // d.c. + cirrusvga_wab_5be1 = 0xf7; // d.c. + cirrusvga_wab_40e1 = 0xC2; // bit1=0:DRAM REFRESH MODE?? Ƃ肠lC2hȂWin95hCo̓{[hFȂ + cirrusvga_wab_42e1 = 0x18; // ݂Ȃ + cirrusvga_wab_46e8 = 0x18; + break; + case CIRRUS_98ID_AUTO_XE_G2_PCI: + np2clvga.gd54xxtype = CIRRUS_98ID_GA98NBII; + memset(cirrusvga->vram_ptr, 0x00, cirrusvga->real_vram_size); + cirrusvga_wab_59e1 = 0x06; // d.c. + cirrusvga_wab_51e1 = 0xC2; // d.c. + cirrusvga_wab_5be1 = 0xf7; // d.c. + cirrusvga_wab_40e1 = 0xC2; // bit1=0:DRAM REFRESH MODE?? Ƃ肠lC2hȂWin95hCo̓{[hFȂ + cirrusvga_wab_42e1 = 0x18; // ݂Ȃ + cirrusvga_wab_46e8 = 0x18; + break; + case CIRRUS_98ID_AUTO_XE_G4_PCI: + np2clvga.gd54xxtype = CIRRUS_98ID_GA98NBIV; + memset(cirrusvga->vram_ptr, 0x00, cirrusvga->real_vram_size); + cirrusvga_wab_59e1 = 0x06; // d.c. + cirrusvga_wab_51e1 = 0xC2; // d.c. + cirrusvga_wab_5be1 = 0xf7; // d.c. + cirrusvga_wab_40e1 = 0xC2; // bit1=0:DRAM REFRESH MODE?? Ƃ肠lC2hȂWin95hCo̓{[hFȂ + cirrusvga_wab_42e1 = 0x18; // ݂Ȃ + cirrusvga_wab_46e8 = 0x18; + break; + case CIRRUS_98ID_AUTO_XE10_WABS: + case CIRRUS_98ID_AUTO_XE_WA_PCI: + np2clvga.gd54xxtype = CIRRUS_98ID_WAB; + break; + case CIRRUS_98ID_AUTO_XE10_WSN4: + case CIRRUS_98ID_AUTO_XE_W4_PCI: + np2clvga.gd54xxtype = CIRRUS_98ID_WSN; + break; + default: + np2clvga.gd54xxtype = CIRRUS_98ID_WSN_A2F; + break; + } + pc98_cirrus_setWABreg(); + pc98_cirrus_vga_setvramsize(); + pc98_cirrus_vga_initVRAMWindowAddr(); +} + static REG8 IOINPCALL cirrusvga_i59e1(UINT port) { if((np2clvga.gd54xxtype & CIRRUS_98ID_AUTOMSK) == CIRRUS_98ID_AUTOMSK){ - switch(np2clvga.gd54xxtype){ - case CIRRUS_98ID_AUTO_XE10_WABS: - case CIRRUS_98ID_AUTO_XE_WA_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WAB; - break; - case CIRRUS_98ID_AUTO_XE10_WSN4: - case CIRRUS_98ID_AUTO_XE_W4_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN; - break; - default: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN_A2F; - break; - } - pc98_cirrus_setWABreg(); - pc98_cirrus_vga_setvramsize(); - pc98_cirrus_vga_initVRAMWindowAddr(); + cirrusvga_setAutoWABID(); } return cirrusvga_wab_59e1; } static REG8 IOINPCALL cirrusvga_i51e1(UINT port) { REG8 ret = cirrusvga_wab_51e1; if((np2clvga.gd54xxtype & CIRRUS_98ID_AUTOMSK) == CIRRUS_98ID_AUTOMSK){ - switch(np2clvga.gd54xxtype){ - case CIRRUS_98ID_AUTO_XE10_WABS: - case CIRRUS_98ID_AUTO_XE_WA_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WAB; - break; - case CIRRUS_98ID_AUTO_XE10_WSN4: - case CIRRUS_98ID_AUTO_XE_W4_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN; - break; - default: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN_A2F; - break; - } - pc98_cirrus_setWABreg(); - pc98_cirrus_vga_setvramsize(); - pc98_cirrus_vga_initVRAMWindowAddr(); + cirrusvga_setAutoWABID(); } //if(np2clvga.gd54xxtype == CIRRUS_98ID_WSN){ // ret = 0xC2; //} - if (port == 0x51e1) { + if (port == 0x51e1) { return 0xff; } else { @@ -5922,22 +6032,7 @@ static REG8 IOINPCALL cirrusvga_i51e1(UINT port) { } static void IOOUTCALL cirrusvga_o51e1(UINT port, REG8 dat) { if((np2clvga.gd54xxtype & CIRRUS_98ID_AUTOMSK) == CIRRUS_98ID_AUTOMSK){ - switch(np2clvga.gd54xxtype){ - case CIRRUS_98ID_AUTO_XE10_WABS: - case CIRRUS_98ID_AUTO_XE_WA_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WAB; - break; - case CIRRUS_98ID_AUTO_XE10_WSN4: - case CIRRUS_98ID_AUTO_XE_W4_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN; - break; - default: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN_A2F; - break; - } - pc98_cirrus_setWABreg(); - pc98_cirrus_vga_setvramsize(); - pc98_cirrus_vga_initVRAMWindowAddr(); + cirrusvga_setAutoWABID(); } cirrusvga_wab_51e1 = dat; (void)port; @@ -5945,22 +6040,7 @@ static void IOOUTCALL cirrusvga_o51e1(UINT port, REG8 dat) { } static REG8 IOINPCALL cirrusvga_i5be1(UINT port) { if((np2clvga.gd54xxtype & CIRRUS_98ID_AUTOMSK) == CIRRUS_98ID_AUTOMSK){ - switch(np2clvga.gd54xxtype){ - case CIRRUS_98ID_AUTO_XE10_WABS: - case CIRRUS_98ID_AUTO_XE_WA_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WAB; - break; - case CIRRUS_98ID_AUTO_XE10_WSN4: - case CIRRUS_98ID_AUTO_XE_W4_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN; - break; - default: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN_A2F; - break; - } - pc98_cirrus_setWABreg(); - pc98_cirrus_vga_setvramsize(); - pc98_cirrus_vga_initVRAMWindowAddr(); + cirrusvga_setAutoWABID(); } // return 0xf7; // XXX: 0x08 is VRAM 4M flag? if (np2clvga.gd54xxtype == CIRRUS_98ID_WSN_A2F) { @@ -5968,47 +6048,17 @@ static REG8 IOINPCALL cirrusvga_i5be1(UINT port) { } return cirrusvga_wab_5be1; } -static void IOOUTCALL cirrusvga_o5be3(UINT port, REG8 dat) { - if((np2clvga.gd54xxtype & CIRRUS_98ID_AUTOMSK) == CIRRUS_98ID_AUTOMSK){ - switch(np2clvga.gd54xxtype){ - case CIRRUS_98ID_AUTO_XE10_WABS: - case CIRRUS_98ID_AUTO_XE_WA_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WAB; - break; - case CIRRUS_98ID_AUTO_XE10_WSN4: - case CIRRUS_98ID_AUTO_XE_W4_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN; - break; - default: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN_A2F; - break; - } - pc98_cirrus_setWABreg(); - pc98_cirrus_vga_setvramsize(); - pc98_cirrus_vga_initVRAMWindowAddr(); - } - (void)port; - (void)dat; -} +//static void IOOUTCALL cirrusvga_o5be3(UINT port, REG8 dat) { +// if((np2clvga.gd54xxtype & CIRRUS_98ID_AUTOMSK) == CIRRUS_98ID_AUTOMSK){ +// cirrusvga_setAutoWABID(); +// } +// (void)port; +// (void)dat; +//} static REG8 IOINPCALL cirrusvga_i40e1(UINT port) { if((np2clvga.gd54xxtype & CIRRUS_98ID_AUTOMSK) == CIRRUS_98ID_AUTOMSK){ - switch(np2clvga.gd54xxtype){ - case CIRRUS_98ID_AUTO_XE10_WABS: - case CIRRUS_98ID_AUTO_XE_WA_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WAB; - break; - case CIRRUS_98ID_AUTO_XE10_WSN4: - case CIRRUS_98ID_AUTO_XE_W4_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN; - break; - default: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN_A2F; - break; - } - pc98_cirrus_setWABreg(); - pc98_cirrus_vga_setvramsize(); - pc98_cirrus_vga_initVRAMWindowAddr(); + cirrusvga_setAutoWABID(); } //cirrusvga_wab_40e1--; //TRACEOUT(("CIRRUS VGA: out %04X d=%02X", port, cirrusvga_wab_40e1)); @@ -6016,48 +6066,34 @@ static REG8 IOINPCALL cirrusvga_i40e1(UINT port) { } static void IOOUTCALL cirrusvga_o40e1(UINT port, REG8 dat) { if((np2clvga.gd54xxtype & CIRRUS_98ID_AUTOMSK) == CIRRUS_98ID_AUTOMSK){ - switch(np2clvga.gd54xxtype){ - case CIRRUS_98ID_AUTO_XE10_WABS: - case CIRRUS_98ID_AUTO_XE_WA_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WAB; - break; - case CIRRUS_98ID_AUTO_XE10_WSN4: - case CIRRUS_98ID_AUTO_XE_W4_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN; - break; - default: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN_A2F; - break; - } - pc98_cirrus_setWABreg(); - pc98_cirrus_vga_setvramsize(); - pc98_cirrus_vga_initVRAMWindowAddr(); + cirrusvga_setAutoWABID(); } cirrusvga_wab_40e1 = dat; + np2wab.relaystateint = (np2wab.relaystateint & ~0x1) | (cirrusvga_wab_40e1 & 0x1); np2wab_setRelayState(np2wab.relaystateint|np2wab.relaystateext); // [ORťib‚Cj (void)port; (void)dat; } +static REG8 IOINPCALL cirrusvga_i42e1(UINT port) { + if ((np2clvga.gd54xxtype & CIRRUS_98ID_AUTOMSK) == CIRRUS_98ID_AUTOMSK) { + cirrusvga_setAutoWABID(); + } + return cirrusvga_wab_42e1; +} +static void IOOUTCALL cirrusvga_o42e1(UINT port, REG8 dat) { + if ((np2clvga.gd54xxtype & CIRRUS_98ID_AUTOMSK) == CIRRUS_98ID_AUTOMSK) { + cirrusvga_setAutoWABID(); + } + cirrusvga_wab_42e1 = dat; + cirrus_update_memory_access(cirrusvga); + (void)port; + (void)dat; +} static REG8 IOINPCALL cirrusvga_i46e8(UINT port) { REG8 ret = cirrusvga_wab_46e8; if((np2clvga.gd54xxtype & CIRRUS_98ID_AUTOMSK) == CIRRUS_98ID_AUTOMSK){ - switch(np2clvga.gd54xxtype){ - case CIRRUS_98ID_AUTO_XE10_WABS: - case CIRRUS_98ID_AUTO_XE_WA_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WAB; - break; - case CIRRUS_98ID_AUTO_XE10_WSN4: - case CIRRUS_98ID_AUTO_XE_W4_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN; - break; - default: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN_A2F; - break; - } - pc98_cirrus_setWABreg(); - pc98_cirrus_vga_setvramsize(); - pc98_cirrus_vga_initVRAMWindowAddr(); + cirrusvga_setAutoWABID(); } //np2wab.relaystateint = (np2wab.relaystateint & ~0x1) | (cirrusvga_wab_40e1 & 0x1); //np2wab_setRelayState(np2wab.relaystateint|np2wab.relaystateext); // [ORťib‚Cj @@ -6065,22 +6101,7 @@ static REG8 IOINPCALL cirrusvga_i46e8(UINT port) { } static void IOOUTCALL cirrusvga_o46e8(UINT port, REG8 dat) { if((np2clvga.gd54xxtype & CIRRUS_98ID_AUTOMSK) == CIRRUS_98ID_AUTOMSK){ - switch(np2clvga.gd54xxtype){ - case CIRRUS_98ID_AUTO_XE10_WABS: - case CIRRUS_98ID_AUTO_XE_WA_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WAB; - break; - case CIRRUS_98ID_AUTO_XE10_WSN4: - case CIRRUS_98ID_AUTO_XE_W4_PCI: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN; - break; - default: - np2clvga.gd54xxtype = CIRRUS_98ID_WSN_A2F; - break; - } - pc98_cirrus_setWABreg(); - pc98_cirrus_vga_setvramsize(); - pc98_cirrus_vga_initVRAMWindowAddr(); + cirrusvga_setAutoWABID(); } cirrusvga_wab_46e8 = dat; (void)port; @@ -6185,6 +6206,7 @@ void pc98_cirrus_vga_updatePCIaddr(){ np2clvga.pciMMIO_Addr = 0; } + pc98_cirrus_setMMIOWindowAddr(); cirrus_update_memory_access(cirrusvga); #endif } @@ -6222,24 +6244,20 @@ void pc98_cirrus_vga_initVRAMWindowAddr(){ np2clvga.VRAMWindowAddr = 0; np2clvga.VRAMWindowAddr2 = 0xE0000; np2clvga.VRAMWindowAddr3 = 0xF00000; - //np2clvga.pciLFB_Addr = 0xF00000; - //np2clvga.pciLFB_Mask = 0x100000-1; np2clvga.pciMMIO_Addr = 0xf10000; np2clvga.pciMMIO_Mask = ~(0x10000-1); - //cirrusvga->real_vram_size = CIRRUS_VRAM_SIZE_1MB; }else if ((np2clvga.gd54xxtype & CIRRUS_98ID_GA98NBMASK) == CIRRUS_98ID_GA98NBIC) { np2clvga.VRAMWindowAddr = 0; np2clvga.VRAMWindowAddr2 = 0xE0000; np2clvga.VRAMWindowAddr3 = 0xF00000; - //np2clvga.pciMMIO_Addr = 0xf00000; - //np2clvga.pciMMIO_Mask = ~(0x100000-1); np2clvga.pciMMIO_Addr = 0xf10000; np2clvga.pciMMIO_Mask = ~(0x10000-1); }else{ np2clvga.VRAMWindowAddr = 0; np2clvga.VRAMWindowAddr2 = 0; np2clvga.VRAMWindowAddr3 = 0; - if(np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WS_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_W4_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WA_PCI){ + if(np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WS_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_W4_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WA_PCI || + np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G1_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G2_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G4_PCI){ #if defined(SUPPORT_PCI) pcidev.devices[pcidev_cirrus_deviceid].enable = 1; #endif @@ -6335,11 +6353,15 @@ static void pc98_cirrus_init_common(CirrusVGAState * s, int device_id, int is_pc rop_to_index[CIRRUS_ROP_NOTSRC_AND_NOTDST] = 15; s->device_id = device_id; s->bustype = CIRRUS_BUSTYPE_ISA; + + cirrusvga_wab_46e8 = 0x18; // ftHgŗL if((np2clvga.gd54xxtype & CIRRUS_98ID_AUTOMSK) == CIRRUS_98ID_AUTOMSK || np2clvga.gd54xxtype <= 0xff){ // ONBOARD #if defined(SUPPORT_PCI) - if(np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WS_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_W4_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WA_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_PCI){ + if(pcidev.enable && (np2clvga.gd54xxtype == CIRRUS_98ID_PCI || + np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WS_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_W4_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WA_PCI || + np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G1_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G2_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G4_PCI)){ // Cirrus CL-GD5446 PCI ZeroMemory(pcidev.devices+pcidev_cirrus_deviceid, sizeof(_PCIDEVICE)); pcidev.devices[pcidev_cirrus_deviceid].enable = 1; @@ -6524,7 +6546,7 @@ static void pc98_cirrus_init_common(CirrusVGAState * s, int device_id, int is_pc iocore_attachout(0x40E1 + cirrusvga_melcowab_ofs, cirrusvga_o40e1); iocore_attachinp(0x40E1 + cirrusvga_melcowab_ofs, cirrusvga_i40e1); - + iocore_attachout(0x46E8, cirrusvga_o46e8); iocore_attachinp(0x46E8, cirrusvga_i46e8); @@ -6538,6 +6560,9 @@ static void pc98_cirrus_init_common(CirrusVGAState * s, int device_id, int is_pc ////iocore_attachinp(0x59E0 + cirrusvga_melcowab_ofs, cirrusvga_i59e0); iocore_attachinp(0x59E1 + cirrusvga_melcowab_ofs, cirrusvga_i59e1); // ꂪȂƃhCoNGԂ iocore_attachinp(0x5BE1 + cirrusvga_melcowab_ofs, cirrusvga_i5be1); + + iocore_attachout(0x42E1 + cirrusvga_melcowab_ofs, cirrusvga_o42e1); + iocore_attachinp(0x42E1 + cirrusvga_melcowab_ofs, cirrusvga_i42e1); } if((np2clvga.gd54xxtype & CIRRUS_98ID_AUTOMSK) != CIRRUS_98ID_AUTOMSK){ @@ -6548,12 +6573,26 @@ static void pc98_cirrus_init_common(CirrusVGAState * s, int device_id, int is_pc //if (np2clvga.gd54xxtype == CIRRUS_98ID_GA98NB) { // np2clvga.VRAMWindowAddr2 = 0xf00000; //} - - cirrusvga_wab_59e1 = 0x06; // ̒lȂWSN Win95hCoNGԂ - cirrusvga_wab_51e1 = 0xC2; // WSN CHECK IO RETURN VALUE - cirrusvga_wab_5be1 = 0xf7; // bit3:0=4M,1=2M ?????? - cirrusvga_wab_40e1 = 0x7b; - cirrusvga_wab_46e8 = 0x18; + + if (np2clvga.gd54xxtype == CIRRUS_98ID_WSN || np2clvga.gd54xxtype == CIRRUS_98ID_WSN_A2F || + np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE10_WSN2 || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE10_WSN4 || + np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WS_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_W4_PCI) { + cirrusvga_wab_59e1 = 0x06; // ̒lȂWSN Win95hCoNGԂ + cirrusvga_wab_51e1 = 0xC2; // WSN CHECK IO RETURN VALUE + cirrusvga_wab_5be1 = 0xf7; // bit3:0=4M,1=2M ?????? + cirrusvga_wab_40e1 = 0x7b; + cirrusvga_wab_42e1 = 0x00; + cirrusvga_wab_46e8 = 0x18; // ŏON + }else if ((np2clvga.gd54xxtype & CIRRUS_98ID_GA98NBMASK) == CIRRUS_98ID_GA98NBIC || + np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G1_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G2_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G4_PCI) { + memset(cirrusvga->vram_ptr, 0x00, cirrusvga->real_vram_size); + cirrusvga_wab_59e1 = 0x06; // d.c. + cirrusvga_wab_51e1 = 0xC2; // d.c. + cirrusvga_wab_5be1 = 0xf7; // d.c. + cirrusvga_wab_40e1 = 0xC2; // bit1=0:DRAM REFRESH MODE?? Ƃ肠lC2hȂWin95hCo̓{[hFȂ + cirrusvga_wab_42e1 = 0x18; // ݂Ȃ + cirrusvga_wab_46e8 = 0x10; + } //np2clvga.VRAMWindowAddr3 = 0xF00000; // XXX //np2clvga.VRAMWindowAddr3size = 256*1024; @@ -6603,7 +6642,9 @@ static void pc98_cirrus_deinit_common(CirrusVGAState * s, int device_id, int is_ if((np2clvga.gd54xxtype & CIRRUS_98ID_AUTOMSK) == CIRRUS_98ID_AUTOMSK || np2clvga.gd54xxtype <= 0xff){ // ONBOARD #if defined(SUPPORT_PCI) - if(np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WS_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_W4_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WA_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_PCI){ + if(pcidev.enable && (np2clvga.gd54xxtype == CIRRUS_98ID_PCI || + np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WS_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_W4_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WA_PCI || + np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G1_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G2_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G4_PCI)){ // Cirrus CL-GD5446 PCI pcidev.devices[pcidev_cirrus_deviceid].enable = 0; for(i=0;i<16;i++){ @@ -6732,6 +6773,9 @@ static void pc98_cirrus_deinit_common(CirrusVGAState * s, int device_id, int is_ ////iocore_detachinp(0x59E0 + cirrusvga_melcowab_ofs); iocore_detachinp(0x59E1 + cirrusvga_melcowab_ofs); iocore_detachinp(0x5BE1 + cirrusvga_melcowab_ofs); + + iocore_detachinp(0x42E1 + cirrusvga_melcowab_ofs); + iocore_detachout(0x42E1 + cirrusvga_melcowab_ofs); } } @@ -6829,11 +6873,13 @@ void pc98_cirrus_vga_bind(void) TRACEOUT(("CL-GD54xx: Window Accelerator Disabled")); return; } - //np2clvga.defgd54xxtype = np2cfg.gd5430type; - if(np2clvga.gd54xxtype == CIRRUS_98ID_WAB || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE10_WABS || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WA_PCI){ - cirrusvga_melcowab_ofs = np2cfg.gd5430melofs; - }else{ - cirrusvga_melcowab_ofs = 0x2; // WAB-SȊO2ŌŒ + if (np2clvga.gd54xxtype == CIRRUS_98ID_WSN || np2clvga.gd54xxtype == CIRRUS_98ID_WSN_A2F || + np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE10_WSN2 || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE10_WSN4 || + np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WS_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_W4_PCI) { + cirrusvga_melcowab_ofs = 0x2; // WSN2ŌŒ + } + else { + cirrusvga_melcowab_ofs = np2cfg.gd5430melofs; // WSNȊO͎RI”\@ } s = cirrusvga; @@ -6913,19 +6959,32 @@ void pc98_cirrus_vga_resetresolution(void) cirrusvga->cr[0x12] = 0; cirrusvga->cr[0x07] &= ~0x42; // ‚łVRAMNA - if ((np2clvga.gd54xxtype & CIRRUS_98ID_GA98NBMASK) == CIRRUS_98ID_GA98NBIC || np2clvga.gd54xxtype == CIRRUS_98ID_WSN || np2clvga.gd54xxtype == CIRRUS_98ID_WSN_A2F) { +// if ((np2clvga.gd54xxtype & CIRRUS_98ID_GA98NBMASK) == CIRRUS_98ID_GA98NBIC || np2clvga.gd54xxtype == CIRRUS_98ID_WSN || np2clvga.gd54xxtype == CIRRUS_98ID_WSN_A2F) { + if (np2clvga.gd54xxtype == CIRRUS_98ID_WSN || np2clvga.gd54xxtype == CIRRUS_98ID_WSN_A2F) { memset(cirrusvga->vram_ptr, 0x00, cirrusvga->real_vram_size); cirrusvga_wab_59e1 = 0x06; // ̒lȂWSN Win95hCoNGԂ cirrusvga_wab_51e1 = 0xC2; // WSN CHECK IO RETURN VALUE cirrusvga_wab_5be1 = 0xf7; // bit3:0=4M,1=2M ?????? cirrusvga_wab_40e1 = 0x7b; - cirrusvga_wab_46e8 = 0x18; + cirrusvga_wab_42e1 = 0x00; + cirrusvga_wab_46e8 = 0x18; // ŏON + }else if ((np2clvga.gd54xxtype & CIRRUS_98ID_GA98NBMASK) == CIRRUS_98ID_GA98NBIC) { + memset(cirrusvga->vram_ptr, 0x00, cirrusvga->real_vram_size); + cirrusvga_wab_59e1 = 0x06; // d.c. + cirrusvga_wab_51e1 = 0xC2; // d.c. + cirrusvga_wab_5be1 = 0xf7; // d.c. + cirrusvga_wab_40e1 = 0xC2; // bit1=0:DRAM REFRESH MODE?? Ƃ肠lC2hȂWin95hCo̓{[hFȂ + cirrusvga_wab_42e1 = 0x18; // ݂Ȃ + cirrusvga_wab_46e8 = 0x10; }else{ memset(cirrusvga->vram_ptr, 0xff, cirrusvga->real_vram_size); + cirrusvga_wab_46e8 = 0x18; } #if defined(SUPPORT_PCI) // XXX: Win2000œ̂ɕKvBR͓ - if(np2clvga.gd54xxtype == CIRRUS_98ID_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WS_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_W4_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WA_PCI){ + if(pcidev.enable && (np2clvga.gd54xxtype == CIRRUS_98ID_PCI || + np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WS_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_W4_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_WA_PCI || + np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G1_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G2_PCI || np2clvga.gd54xxtype == CIRRUS_98ID_AUTO_XE_G4_PCI)){ cirrusvga->msr = 0x03; cirrusvga->sr[0x08] = 0xFE; } diff --git a/wab/cirrus_vga_extern.h b/wab/cirrus_vga_extern.h index 4cccba4..5315f1d 100644 --- a/wab/cirrus_vga_extern.h +++ b/wab/cirrus_vga_extern.h @@ -53,6 +53,9 @@ #define CIRRUS_98ID_GA98NBIV 0x202 #define CIRRUS_98ID_GA98NBMASK 0xfffc #define CIRRUS_98ID_AUTOMSK 0xFFF0 +#define CIRRUS_98ID_AUTO_XE_G1_PCI 0xFFF7 +#define CIRRUS_98ID_AUTO_XE_G2_PCI 0xFFF8 +#define CIRRUS_98ID_AUTO_XE_G4_PCI 0xFFF9 #define CIRRUS_98ID_AUTO_XE_WA_PCI 0xFFFA #define CIRRUS_98ID_AUTO_XE_W4_PCI 0xFFFB #define CIRRUS_98ID_AUTO_XE_WS_PCI 0xFFFC @@ -112,6 +115,8 @@ extern CPUWriteMemoryFunc *g_cirrus_linear_write[3]; extern int pcidev_cirrus_deviceid; +extern int cirrusvga_wab_46e8; + void cirrus_linear_mem_writeb(void *opaque, target_phys_addr_t addr, uint32_t_ val); void cirrus_linear_mem_writew(void *opaque, target_phys_addr_t addr, uint32_t_ val); void cirrus_linear_mem_writel(void *opaque, target_phys_addr_t addr, uint32_t_ val); diff --git a/wab/wab.c b/wab/wab.c index cba42b3..d19d730 100644 --- a/wab/wab.c +++ b/wab/wab.c @@ -39,10 +39,6 @@ #include "xnp2.h" #endif -// XXX: 1280x1024ȏɂȂȂ̂ōĂ͂ŏ\ -#define WAB_MAX_WIDTH 1280 -#define WAB_MAX_HEIGHT 1024 - #if !defined(_countof) #define _countof(a) (sizeof(a)/sizeof(a[0])) #endif @@ -72,9 +68,11 @@ static int ga_lastwabheight = 480; static int ga_reqChangeWindowSize = 0; static int ga_reqChangeWindowSize_w = 0; static int ga_reqChangeWindowSize_h = 0; -// -//int np2wab.relaystateint = 0; -//int np2wab.relaystateext = 0; + +static int ga_lastscalemode = 0; +static int ga_lastrealwidth = 0; +static int ga_lastrealheight = 0; +static int ga_screenupdated = 0; /** * ݒ @@ -173,11 +171,19 @@ void np2wab_setScreenSize(int width, int height) np2wab.wndHeight = ga_lastwabheight = height; if(np2wab.relay & 0x3){ if(width < 32 || height < 32){ +#if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) + scrnmng_setsize(0, 0, 640, 480); +#else scrnmng_setwidth(0, 640); scrnmng_setheight(0, 480); +#endif }else{ +#if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) + scrnmng_setsize(0, 0, width, height); +#else scrnmng_setwidth(0, width); scrnmng_setheight(0, height); +#endif } scrnmng_updatefsres(); // tXN[𑜓xXV #if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) @@ -196,6 +202,8 @@ void np2wab_setScreenSizeMT(int width, int height) if(!ga_threadmode){ // }`Xbh[hłȂΒڌĂяo np2wab_setScreenSize(width, height); + ga_lastrealwidth = width; + ga_lastrealheight = height; }else{ // }`Xbh[hȂʃTCYύXvo ga_reqChangeWindowSize_w = width; @@ -368,10 +376,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){ /** * EBhEANZ[^ʓ] */ -static int ga_lastscalemode = 0; -static int ga_lastrealwidth = 0; -static int ga_lastrealheight = 0; -static int ga_screenupdated = 0; #if defined(NP2_X11) || defined(NP2_SDL2) || defined(__LIBRETRO__) void np2wab_drawWABWindow(void) #else @@ -383,10 +387,10 @@ void np2wab_drawWABWindow(HDC hdc) int srcheight = np2wab.realHeight; if(ga_lastrealwidth != srcwidth || ga_lastrealheight != srcheight){ // 𑜓xςĂEBhETCYς - np2wab.paletteChanged = 1; - np2wab_setScreenSizeMT(srcwidth, srcheight); - ga_lastrealwidth = srcwidth; - ga_lastrealheight = srcheight; + if(!ga_reqChangeWindowSize){ + np2wab.paletteChanged = 1; + np2wab_setScreenSizeMT(srcwidth, srcheight); + } if(!np2wabwnd.ready) return; } if(np2wabwnd.multiwindow){ // ʑ[h @@ -481,8 +485,10 @@ void np2wab_drawframe() if(np2wabwnd.hWndWAB!=NULL){ if(ga_reqChangeWindowSize){ // ʃTCYύXvĂʃTCYς - ga_reqChangeWindowSize = 0; np2wab_setScreenSize(ga_reqChangeWindowSize_w, ga_reqChangeWindowSize_h); + ga_lastrealwidth = ga_reqChangeWindowSize_w; + ga_lastrealheight = ga_reqChangeWindowSize_h; + ga_reqChangeWindowSize = 0; np2wabwnd.ready = 1; } if(np2wabwnd.ready && (np2wab.relay&0x3)!=0){ @@ -621,6 +627,8 @@ void np2wab_reset(const NP2CFG *pConfig) ga_screenupdated = 0; np2wab.lastWidth = 0; np2wab.lastHeight = 0; + np2wab.realWidth = 0; + np2wab.realHeight = 0; np2wab.relaystateint = 0; np2wab_setRelayState(np2wab.relaystateint|np2wab.relaystateext); @@ -754,8 +762,12 @@ void np2wab_setRelayState(REG8 state) // [hȂʂ߂ np2wab.lastWidth = 0; np2wab.lastHeight = 0; +#if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) + scrnmng_setsize(dsync.scrnxpos, 0, dsync.scrnxmax, dsync.scrnymax);// XXX: ʃTCYOɖ߂ +#else scrnmng_setwidth(dsync.scrnxpos, dsync.scrnxmax); // XXX: ʕOɖ߂ scrnmng_setheight(0, dsync.scrnymax); // XXX: ʍOɖ߂ +#endif scrnmng_updatefsres(); // tXN[𑜓xXV #if !defined(NP2_X11) && !defined(NP2_SDL2) && !defined(__LIBRETRO__) mousemng_updateclip(); // }EXLv`̃Nbv͈͂C diff --git a/wab/wab.h b/wab/wab.h index 422377a..98d6d5d 100644 --- a/wab/wab.h +++ b/wab/wab.h @@ -11,6 +11,10 @@ #include #endif +// XXX: 1600x1024ȏɂȂȂ̂ōĂ͂ŏ\ +#define WAB_MAX_WIDTH 1600 +#define WAB_MAX_HEIGHT 1024 + #ifdef __cplusplus extern "C" { #endif diff --git a/win9x/dialog/d_sound.cpp b/win9x/dialog/d_sound.cpp index 5979e15..20e3a3e 100644 --- a/win9x/dialog/d_sound.cpp +++ b/win9x/dialog/d_sound.cpp @@ -79,6 +79,10 @@ BOOL SndOptMixerPage::OnInitDialog() m_master.SetStaticId(IDC_VOLMASTERSTR); m_master.SetRange(0, 100); m_master.SetPos(np2cfg.vol_master); + if(!np2oscfg.usemastervolume){ + m_master.SetPos(100); + m_master.EnableWindow(FALSE); + } m_fm.SubclassDlgItem(IDC_VOLFM, this); m_fm.SetStaticId(IDC_VOLFMSTR); @@ -120,12 +124,14 @@ void SndOptMixerPage::OnOK() { bool bUpdated = false; - const UINT8 cMaster = static_cast(m_master.GetPos()); - if (np2cfg.vol_master != cMaster) - { - np2cfg.vol_master = cMaster; - soundmng_setvolume(cMaster); - bUpdated = true; + if(np2oscfg.usemastervolume){ + const UINT8 cMaster = static_cast(m_master.GetPos()); + if (np2cfg.vol_master != cMaster) + { + np2cfg.vol_master = cMaster; + soundmng_setvolume(cMaster); + bUpdated = true; + } } const UINT8 cFM = static_cast(m_fm.GetPos()); diff --git a/win9x/dialog/d_wab.cpp b/win9x/dialog/d_wab.cpp index d201d5b..7971704 100644 --- a/win9x/dialog/d_wab.cpp +++ b/win9x/dialog/d_wab.cpp @@ -218,7 +218,9 @@ static const CComboData::Entry s_type[] = {MAKEINTRESOURCE(IDS_GD5430_XE10), CIRRUS_98ID_Xe10}, {MAKEINTRESOURCE(IDS_GD5430_CB2), CIRRUS_98ID_Cb2}, {MAKEINTRESOURCE(IDS_GD5430_CX2), CIRRUS_98ID_Cx2}, +#ifdef SUPPORT_PCI {MAKEINTRESOURCE(IDS_GD5430_PCI), CIRRUS_98ID_PCI}, +#endif {MAKEINTRESOURCE(IDS_GD5430_WAB), CIRRUS_98ID_WAB}, {MAKEINTRESOURCE(IDS_GD5430_WSN_A2F), CIRRUS_98ID_WSN_A2F}, {MAKEINTRESOURCE(IDS_GD5430_WSN), CIRRUS_98ID_WSN}, @@ -226,9 +228,14 @@ static const CComboData::Entry s_type[] = {MAKEINTRESOURCE(IDS_GD5430_GA98NBII), CIRRUS_98ID_GA98NBII}, {MAKEINTRESOURCE(IDS_GD5430_GA98NBIV), CIRRUS_98ID_GA98NBIV}, {MAKEINTRESOURCE(IDS_GD5430_96), CIRRUS_98ID_96}, + {MAKEINTRESOURCE(IDS_GD5430_AUTO_XE_G1_PCI), CIRRUS_98ID_AUTO_XE_G1_PCI}, + {MAKEINTRESOURCE(IDS_GD5430_AUTO_XE_G2_PCI), CIRRUS_98ID_AUTO_XE_G2_PCI}, + {MAKEINTRESOURCE(IDS_GD5430_AUTO_XE_G4_PCI), CIRRUS_98ID_AUTO_XE_G4_PCI}, +#ifdef SUPPORT_PCI {MAKEINTRESOURCE(IDS_GD5430_AUTO_XE_WA_PCI), CIRRUS_98ID_AUTO_XE_WA_PCI}, {MAKEINTRESOURCE(IDS_GD5430_AUTO_XE_WS_PCI), CIRRUS_98ID_AUTO_XE_WS_PCI}, {MAKEINTRESOURCE(IDS_GD5430_AUTO_XE_W4_PCI), CIRRUS_98ID_AUTO_XE_W4_PCI}, +#endif {MAKEINTRESOURCE(IDS_GD5430_AUTO_XE10_WABS), CIRRUS_98ID_AUTO_XE10_WABS}, {MAKEINTRESOURCE(IDS_GD5430_AUTO_XE10_WSN2), CIRRUS_98ID_AUTO_XE10_WSN2}, {MAKEINTRESOURCE(IDS_GD5430_AUTO_XE10_WSN4), CIRRUS_98ID_AUTO_XE10_WSN4}, diff --git a/win9x/ini.cpp b/win9x/ini.cpp index 87f8948..04df23e 100644 --- a/win9x/ini.cpp +++ b/win9x/ini.cpp @@ -470,7 +470,11 @@ static const PFTBL s_IniItems[] = PFEXT("DIPswtch", PFTYPE_BIN, np2cfg.dipsw, 3), PFEXT("MEMswtch", PFTYPE_BIN, np2cfg.memsw, 8), - PFMAX("ExMemory", PFTYPE_UINT8, &np2cfg.EXTMEM, 244), +#if defined(SUPPORT_LARGE_MEMORY) + PFMAX("ExMemory", PFTYPE_UINT16, &np2cfg.EXTMEM, MEMORY_MAXSIZE), +#else + PFMAX("ExMemory", PFTYPE_UINT8, &np2cfg.EXTMEM, MEMORY_MAXSIZE), +#endif PFVAL("ITF_WORK", PFTYPE_BOOL, &np2cfg.ITF_WORK), PFVAL("USE_BIOS", PFTYPE_BOOL, &np2cfg.usebios), // @BIOSgp @@ -609,6 +613,8 @@ static const PFTBL s_IniItems[] = PFVAL("USEGD5430", PFTYPE_BOOL, &np2cfg.usegd5430), PFVAL("GD5430TYPE",PFTYPE_UINT16, &np2cfg.gd5430type), PFVAL("GD5430FCUR",PFTYPE_BOOL, &np2cfg.gd5430fakecur), + PFVAL("GDMELOFS", PFTYPE_UINT8, &np2cfg.gd5430melofs), + PFVAL("GANBBSEX", PFTYPE_BOOL, &np2cfg.ga98nb_bigscrn_ex), #endif #if defined(SUPPORT_GPIB) PFVAL("USE_GPIB", PFTYPE_BOOL, &np2cfg.usegpib), @@ -649,7 +655,13 @@ static const PFTBL s_IniItems[] = PFVAL("cpu_fecx", PFTYPE_HEX32, &np2cfg.cpu_feature_ecx), PFMAX("FPU_TYPE", PFTYPE_UINT8, &np2cfg.fpu_type, 0), // FPU - + +#if defined(SUPPORT_FAST_MEMORYCHECK) + PFVAL("memckspd", PFTYPE_UINT8, &np2cfg.memcheckspeed), +#endif + + PFMAX("USERAM_D", PFTYPE_BOOL, &np2cfg.useram_d, 0), // EPSONłȂĂD0000h-DFFFFhRAMɁiIDE BIOS D8000h-DBFFFh͑ʖځj + // OSˑH PFVAL("keyboard", PFRO_KB, &np2oscfg.KEYBOARD), @@ -702,6 +714,7 @@ static const PFTBL s_IniItems[] = PFVAL("toolwind", PFTYPE_BOOL, &np2oscfg.toolwin), PFVAL("keydispl", PFTYPE_BOOL, &np2oscfg.keydisp), PFVAL("skbdwind", PFTYPE_BOOL, &np2oscfg.skbdwin), + PFVAL("I286SAVE", PFRO_BOOL, &np2oscfg.I286SAVE), PFVAL("jast_snd", PFTYPE_BOOL, &np2oscfg.jastsnd), PFVAL("useromeo", PFTYPE_BOOL, &np2oscfg.useromeo), PFVAL("thickfrm", PFTYPE_BOOL, &np2oscfg.thickframe), @@ -712,7 +725,7 @@ static const PFTBL s_IniItems[] = PFVAL("fscrnmod", PFTYPE_HEX8, &np2oscfg.fscrnmod), #if defined(SUPPORT_SCRN_DIRECT3D) - PFVAL("D3D_IMODE", PFTYPE_UINT8, &np2oscfg.d3d_imode), + PFVAL("D3D_IMODE", PFTYPE_UINT8, &np2oscfg.d3d_imode), // Direct3D gkԃ[h #endif PFVAL("snddev_t", PFTYPE_UINT8, &np2oscfg.cSoundDeviceType), @@ -723,7 +736,7 @@ static const PFTBL s_IniItems[] = #endif // defined(SUPPORT_VSTi) PFVAL("EMUDDRAW", PFTYPE_BOOL, &np2oscfg.emuddraw), // ŋ߂EMULATIONONLYɂ肷iɃsNZ삷ꍇƂj - PFVAL("DRAWTYPE", PFTYPE_UINT8, &np2oscfg.drawtype), + PFVAL("DRAWTYPE", PFTYPE_UINT8, &np2oscfg.drawtype), // ʃ_ (0: DirectDraw, 1: reserved(DirecrDraw), 2: Direct3D) PFVAL("DRAGDROP", PFRO_BOOL, &np2oscfg.dragdrop), // hbOAhhbvT|[g PFVAL("MAKELHDD", PFRO_BOOL, &np2oscfg.makelhdd), // HDDC[W쐬T|[g @@ -739,12 +752,11 @@ static const PFTBL s_IniItems[] = PFVAL("SCRN_MUL", PFTYPE_UINT8, &np2oscfg.scrn_mul), // ʕ\{i8{j PFVAL("MOUSE_NC", PFTYPE_BOOL, &np2oscfg.mouse_nc), // }EXLv`Rg[ - PFVAL("CPUSTABF", PFTYPE_UINT16, &np2oscfg.cpustabf), // NbNKpEԁit[j - PFVAL("READONLY", PFRO_BOOL, &np2oscfg.readonly), // ύXݒt@Cɏ܂Ȃ - - PFVAL("I286SAVE", PFRO_BOOL, &np2oscfg.I286SAVE) + PFVAL("TICKMODE", PFRO_UINT8, &np2oscfg.tickmode), // TickJE^̃[hIɐݒ肷 + PFVAL("USEWHEEL", PFRO_BOOL, &np2oscfg.usewheel), // }EXzC[ɂ鉹ʁE}EXxݒgp + PFVAL("USE_MVOL", PFRO_BOOL, &np2oscfg.usemastervolume), // }X^{[ݒgp }; //! .ini gq diff --git a/win9x/menu.cpp b/win9x/menu.cpp index 50edf05..ee54459 100644 --- a/win9x/menu.cpp +++ b/win9x/menu.cpp @@ -286,8 +286,8 @@ void xmenu_initialize(HMENU hMenu) EnableMenuItem(hMenu, IDM_WABOPT, MF_BYCOMMAND|MFS_GRAYED); #endif -#ifndef SUPPORT_PHYSICAL_CDDRV - EnableMenuItem(hMenu, IDM_WABOPT, MF_BYCOMMAND|MFS_GRAYED); +#ifndef SUPPORT_PCI + EnableMenuItem(hMenu, IDM_PCIOPT, MF_BYCOMMAND|MFS_GRAYED); #endif if (np2oscfg.I286SAVE) @@ -459,4 +459,22 @@ void xmenu_update(HMENU hMenu) #if defined(SUPPORT_FAST_MEMORYCHECK) CheckMenuItem(hMenu, IDM_FASTMEMCHK, MF_BYCOMMAND | MFCHECK(np2cfg.memcheckspeed != 1)); #endif + +#if !defined(USE_FPU) + EnableMenuItem(hMenu, IDM_FPU80, MF_GRAYED); + EnableMenuItem(hMenu, IDM_FPU64, MF_GRAYED); + EnableMenuItem(hMenu, IDM_FPU64INT, MF_GRAYED); +#endif +#if !defined(SUPPORT_NET) + EnableMenuItem(hMenu, IDM_NETOPT, MF_GRAYED); +#endif +#if !defined(SUPPORT_WAB) + EnableMenuItem(hMenu, IDM_WABOPT, MF_GRAYED); +#endif +#if !defined(SUPPORT_PCI) + EnableMenuItem(hMenu, IDM_PCIOPT, MF_GRAYED); +#endif +#if !defined(SUPPORT_HOSTDRV) + EnableMenuItem(hMenu, IDM_HOSTDRVOPT, MF_GRAYED); +#endif } diff --git a/win9x/np2.cpp b/win9x/np2.cpp index ca2303b..63023c2 100644 --- a/win9x/np2.cpp +++ b/win9x/np2.cpp @@ -96,6 +96,8 @@ #include "Dbt.h" #endif +#include + #ifdef BETA_RELEASE #define OPENING_WAIT 1500 #endif @@ -146,7 +148,7 @@ static TCHAR szClassName[] = _T("NP2-MainWindow"); 0, 0, 1, 0, 1, 1, 0, 0, 0, 8, - 0, 0, 0, TCMODE_DEFAULT, 0 + 0, 0, 0, TCMODE_DEFAULT, 0, 1 }; OEMCHAR fddfolder[MAX_PATH]; @@ -188,20 +190,75 @@ static int WM_QueryCancelAutoPlay; // VXeL[tbNp #ifdef HOOK_SYSKEY +static HANDLE np2_hThreadKeyHook = NULL; // L[tbNpXbh +static int np2_hThreadKeyHookexit = 0; // XbhItO +static HWND np2_hThreadKeyHookhWnd = 0; LRESULT CALLBACK LowLevelKeyboardProc(INT nCode, WPARAM wParam, LPARAM lParam); HHOOK hHook = NULL; -static void start_hook_systemey() +LRESULT CALLBACK np2_ThreadFuncKeyHook_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){ + switch(msg){ + case WM_CLOSE: + if(!np2_hThreadKeyHookexit) return 0; + break; + case WM_DESTROY: + PostQuitMessage(0); + return 0; + } + return DefWindowProc(hWnd, msg, wParam, lParam); +} +static unsigned int __stdcall np2_ThreadFuncKeyHook(LPVOID vdParam) { + MSG msg; + LPCTSTR wndclassname = _T("NP2 Key Hook"); + + WNDCLASSEX wcex ={sizeof(WNDCLASSEX), CS_HREDRAW | CS_VREDRAW, np2_ThreadFuncKeyHook_WndProc, 0, 0, g_hInstance, NULL, NULL, (HBRUSH)(COLOR_WINDOW), NULL, wndclassname, NULL}; + + if(!RegisterClassEx(&wcex)) return 0; + + if(!(np2_hThreadKeyHookhWnd = CreateWindow(wndclassname, _T("NP2 Key Hook"), WS_POPUPWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, g_hInstance, NULL))) return 0; + + ShowWindow( np2_hThreadKeyHookhWnd, SW_HIDE ); // Ô + if(!hHook){ hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, g_hInstance, 0); } -} -static void stop_hook_systemey() -{ + // C bZ[W [v + while( GetMessage(&msg, NULL, 0, 0) > 0 ) { + TranslateMessage(&msg); + DispatchMessage(&msg); + } if(hHook){ UnhookWindowsHookEx(hHook); hHook = NULL; } + np2_hThreadKeyHookhWnd = NULL; + np2_hThreadKeyHook = NULL; + UnregisterClass(wndclassname, g_hInstance); + return 0; +} +static void start_hook_systemkey() +{ + unsigned int dwID; + if(!np2_hThreadKeyHook){ + np2_hThreadKeyHook = (HANDLE)_beginthreadex(NULL, 0, np2_ThreadFuncKeyHook, NULL, 0, &dwID); + } + //if(!hHook){ + // hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, g_hInstance, 0); + //} +} +static void stop_hook_systemkey() +{ + if(np2_hThreadKeyHook && np2_hThreadKeyHookhWnd){ + np2_hThreadKeyHookexit = 1; + SendMessage(np2_hThreadKeyHookhWnd , WM_CLOSE , 0 , 0); + WaitForSingleObject(np2_hThreadKeyHook, INFINITE); + np2_hThreadKeyHook = NULL; + np2_hThreadKeyHookexit = 0; + } + //if(hHook){ + // UnhookWindowsHookEx(hHook); + // hHook = NULL; + //} } #endif @@ -518,6 +575,7 @@ static void OpenSoundDevice(HWND hWnd) pSoundMng->SetPCMVolume(SOUND_PCMSEEK, np2cfg.MOTORVOL); pSoundMng->SetPCMVolume(SOUND_PCMSEEK1, np2cfg.MOTORVOL); pSoundMng->SetPCMVolume(SOUND_RELAY1, np2cfg.MOTORVOL); + pSoundMng->SetMasterVolume(np2cfg.vol_master); } } @@ -663,7 +721,7 @@ static void OnCommand(HWND hWnd, WPARAM wParam) OpenSoundDevice(hWnd); } #ifdef HOOK_SYSKEY - stop_hook_systemey(); + stop_hook_systemkey(); #endif pccore_cfgupdate(); pccore_reset(); @@ -672,7 +730,7 @@ static void OnCommand(HWND hWnd, WPARAM wParam) np2updatemenu(); #endif #ifdef HOOK_SYSKEY - start_hook_systemey(); + start_hook_systemkey(); #endif } break; @@ -1487,10 +1545,17 @@ static void OnCommand(HWND hWnd, WPARAM wParam) update |= SYS_UPDATECFG; break; +#ifdef HOOK_SYSKEY case IDM_SYSKHOOK: np2oscfg.syskhook = !np2oscfg.syskhook; + if(np2oscfg.syskhook){ + start_hook_systemkey(); + }else{ + stop_hook_systemkey(); + } update |= SYS_UPDATECFG; break; +#endif case IDM_DISPCLOCK: np2oscfg.DISPCLK ^= 1; @@ -1785,11 +1850,11 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { // ShiftL[Ă΃Zbg pccore_cfgupdate(); #ifdef HOOK_SYSKEY - stop_hook_systemey(); + stop_hook_systemkey(); #endif pccore_reset(); #ifdef HOOK_SYSKEY - start_hook_systemey(); + start_hook_systemkey(); #endif } } @@ -2382,18 +2447,20 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { sysmng_updatecaption(SYS_UPDATECAPTION_MISC); tmrSysMngHide = SetTimer(hWnd, TMRSYSMNG_ID, 5000, SysMngHideTimerProc); }else{ - int cMaster = np2cfg.vol_master; - cMaster += GET_WHEEL_DELTA_WPARAM(wParam) / WHEEL_DELTA * 5; - if(cMaster < 0) cMaster = 0; - if(cMaster > 100) cMaster = 100; - if (np2cfg.vol_master != cMaster) - { - np2cfg.vol_master = cMaster; - soundmng_setvolume(cMaster); + if(np2oscfg.usemastervolume){ + int cMaster = np2cfg.vol_master; + cMaster += GET_WHEEL_DELTA_WPARAM(wParam) / WHEEL_DELTA * 2; + if(cMaster < 0) cMaster = 0; + if(cMaster > 100) cMaster = 100; + if (np2cfg.vol_master != cMaster) + { + np2cfg.vol_master = cMaster; + soundmng_setvolume(cMaster); + } + sys_miscinfo.showvolume = 1; + sysmng_updatecaption(SYS_UPDATECAPTION_MISC); + tmrSysMngHide = SetTimer(hWnd, TMRSYSMNG_ID, 5000, SysMngHideTimerProc); } - sys_miscinfo.showvolume = 1; - sysmng_updatecaption(SYS_UPDATECAPTION_MISC); - tmrSysMngHide = SetTimer(hWnd, TMRSYSMNG_ID, 5000, SysMngHideTimerProc); } } break; @@ -2439,11 +2506,11 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { case NP2CMD_RESET: pccore_cfgupdate(); #ifdef HOOK_SYSKEY - stop_hook_systemey(); + stop_hook_systemkey(); #endif pccore_reset(); #ifdef HOOK_SYSKEY - start_hook_systemey(); + start_hook_systemkey(); #endif break; } @@ -2828,7 +2895,7 @@ void loadNP2INI(const OEMCHAR *fname){ #endif #ifdef HOOK_SYSKEY - stop_hook_systemey(); + stop_hook_systemkey(); #endif LPTSTR lpFilenameBuf = (LPTSTR)malloc((_tcslen(fname)+1)*sizeof(TCHAR)); @@ -3080,7 +3147,7 @@ void loadNP2INI(const OEMCHAR *fname){ sysmng_updatecaption(SYS_UPDATECAPTION_ALL); #ifdef HOOK_SYSKEY - start_hook_systemey(); + start_hook_systemkey(); #endif } @@ -3394,7 +3461,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, sysmng_updatecaption(SYS_UPDATECAPTION_ALL); #ifdef HOOK_SYSKEY - start_hook_systemey(); + start_hook_systemkey(); #endif lateframecount = 0; @@ -3485,7 +3552,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, } #ifdef HOOK_SYSKEY - stop_hook_systemey(); + stop_hook_systemkey(); #endif // ʕ\{ۑ diff --git a/win9x/np2.h b/win9x/np2.h index c71c18e..8968379 100644 --- a/win9x/np2.h +++ b/win9x/np2.h @@ -110,6 +110,7 @@ typedef struct { UINT8 readonly; // No save changed settings UINT8 usewheel; // Use mouse wheel UINT8 tickmode; // Force Set Tick Counter Mode + UINT8 usemastervolume; // Use MAster Volume } NP2OSCFG; diff --git a/win9x/np2vs2017.vcxproj b/win9x/np2vs2017.vcxproj index 098f3b3..8b536b0 100755 --- a/win9x/np2vs2017.vcxproj +++ b/win9x/np2vs2017.vcxproj @@ -96,7 +96,7 @@ Level3 Disabled - WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions);SUPPORT_KAI_IMAGES + WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;SUPPORT_LARGE_HDD;SUPPORT_NET;SUPPORT_LGY98;SUPPORT_WAB;SUPPORT_CL_GD5430;SUPPORT_VPCVHD;SUPPORT_KAI_IMAGES;SUPPORT_NVL_IMAGES;SUPPORT_FMGEN;SUPPORT_SOUND_SB16;SUPPORT_GPIB;SUPPORT_SCRN_DIRECT3D;HOOK_SYSKEY;ALLOW_MULTIRUN;USE_MAME;%(PreprocessorDefinitions) .\;.\x86;..\;..\common;..\fdd;..\i286x;..\mem;..\io;..\cbus;..\network;..\vram;..\sound;..\generic;..\zlib;\VST_SDK @@ -113,7 +113,7 @@ Level3 Disabled - WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) +WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;SUPPORT_LARGE_HDD;SUPPORT_NET;SUPPORT_LGY98;SUPPORT_WAB;SUPPORT_CL_GD5430;SUPPORT_VPCVHD;SUPPORT_KAI_IMAGES;SUPPORT_NVL_IMAGES;SUPPORT_FMGEN;SUPPORT_SOUND_SB16;SUPPORT_GPIB;SUPPORT_SCRN_DIRECT3D;HOOK_SYSKEY;ALLOW_MULTIRUN;USE_MAME;%(PreprocessorDefinitions) .\;.\x64;..\;..\common;..\fdd;..\i286c;..\mem;..\io;..\cbus;..\network;..\vram;..\sound;..\generic;..\zlib;\VST_SDK @@ -139,7 +139,7 @@ MaxSpeed true true - WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;SUPPORT_KAI_IMAGES;ALLOW_MULTIRUN;%(PreprocessorDefinitions) +WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;SUPPORT_LARGE_HDD;SUPPORT_NET;SUPPORT_LGY98;SUPPORT_WAB;SUPPORT_CL_GD5430;SUPPORT_VPCVHD;SUPPORT_KAI_IMAGES;SUPPORT_NVL_IMAGES;SUPPORT_FMGEN;SUPPORT_SOUND_SB16;SUPPORT_GPIB;SUPPORT_SCRN_DIRECT3D;HOOK_SYSKEY;ALLOW_MULTIRUN;USE_MAME;%(PreprocessorDefinitions) .\;.\x86;..\;..\common;..\fdd;..\i286x;..\mem;..\io;..\cbus;..\network;..\vram;..\sound;..\generic;..\zlib;\VST_SDK @@ -160,7 +160,7 @@ MaxSpeed true true - WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;SUPPORT_KAI_IMAGES;SUPPORT_WAB;SUPPORT_CL_GD5430;SUPPORT_NET;SUPPORT_LGY98;SUPPORT_VPCVHD;HOOK_SYSKEY;ALLOW_MULTIRUN;%(PreprocessorDefinitions) + WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;SUPPORT_LARGE_HDD;SUPPORT_NET;SUPPORT_LGY98;SUPPORT_WAB;SUPPORT_CL_GD5430;SUPPORT_VPCVHD;SUPPORT_KAI_IMAGES;SUPPORT_NVL_IMAGES;SUPPORT_FMGEN;SUPPORT_SOUND_SB16;SUPPORT_GPIB;SUPPORT_SCRN_DIRECT3D;HOOK_SYSKEY;ALLOW_MULTIRUN;USE_MAME;%(PreprocessorDefinitions) .\;.\x64;..\;..\common;..\fdd;..\i286c;..\mem;..\io;..\cbus;..\network;..\vram;..\sound;..\generic;..\zlib;\VST_SDK Speed @@ -202,11 +202,14 @@ + + + @@ -257,6 +260,7 @@ + @@ -596,11 +600,14 @@ + + + @@ -724,7 +731,24 @@ + + + + + + + + + + + + + + + + + diff --git a/win9x/np2vs2017.vcxproj.filters b/win9x/np2vs2017.vcxproj.filters index 935f781..6822e81 100755 --- a/win9x/np2vs2017.vcxproj.filters +++ b/win9x/np2vs2017.vcxproj.filters @@ -247,6 +247,12 @@ {6733dfde-dbb2-424e-971c-aa456d15000c} + + {1fbae04d-6163-4fc0-99e3-af4a99fad012} + + + {69e55071-1b40-4cc2-928d-d45bc986a5af} + @@ -1182,6 +1188,18 @@ ソース ファイル\win9x + + ソース ファイル\fdd + + + ソース ファイル\cbus + + + ソース ファイル\cbus + + + ソース ファイル\cbus + @@ -2021,6 +2039,66 @@ ヘッダー ファイル\win9x + + ヘッダー ファイル\sound\mame + + + ヘッダー ファイル\sound\mame + + + ヘッダー ファイル\sound\mame + + + ヘッダー ファイル\sound\mame + + + ヘッダー ファイル\sound\mame + + + ヘッダー ファイル\sound\fmgen + + + ヘッダー ファイル\sound\fmgen + + + ヘッダー ファイル\sound\fmgen + + + ヘッダー ファイル\sound\fmgen + + + ヘッダー ファイル\sound\fmgen + + + ヘッダー ファイル\sound\fmgen + + + ヘッダー ファイル\sound\fmgen + + + ヘッダー ファイル\sound\fmgen + + + ヘッダー ファイル\sound\fmgen + + + ヘッダー ファイル\sound\fmgen + + + ヘッダー ファイル\sound\fmgen + + + ヘッダー ファイル\sound\fmgen + + + ヘッダー ファイル\cbus + + + ヘッダー ファイル\cbus + + + ヘッダー ファイル\cbus + diff --git a/win9x/resource.h b/win9x/resource.h index af214c2..8bbfe34 100644 --- a/win9x/resource.h +++ b/win9x/resource.h @@ -413,6 +413,9 @@ #define IDS_GD5430_GA98NBIC 30620 #define IDS_GD5430_GA98NBII 30621 #define IDS_GD5430_GA98NBIV 30622 +#define IDS_GD5430_AUTO_XE_G1_PCI 30690 +#define IDS_GD5430_AUTO_XE_G2_PCI 30691 +#define IDS_GD5430_AUTO_XE_G4_PCI 30692 #define IDS_GD5430_AUTO_XE_WA_PCI 30693 #define IDS_GD5430_AUTO_XE_W4_PCI 30694 #define IDS_GD5430_AUTO_XE_WS_PCI 30695 @@ -682,9 +685,6 @@ #define IDM_MEM646 40669 #define IDM_MEM1206 40670 #define IDM_MEM2306 49671 -#define IDM_FPU80 49680 -#define IDM_FPU64 49681 -#define IDM_FPU64INT 49682 #define IDM_MOUSE 40671 #define IDM_SERIAL1 40672 #define IDM_MPUPC98 40673 @@ -694,6 +694,9 @@ #define IDM_WABOPT 40677 #define IDM_HOSTDRVOPT 40678 #define IDM_PCIOPT 40679 +#define IDM_FPU80 49680 +#define IDM_FPU64 49681 +#define IDM_FPU64INT 49682 #define IDM_MOUSENC 40689 #define IDM_MOUSERAW 40690 #define IDM_MOUSE30X 40691 diff --git a/win9x/resources/1252/np2.rc b/win9x/resources/1252/np2.rc index 5042896..c09864e 100644 --- a/win9x/resources/1252/np2.rc +++ b/win9x/resources/1252/np2.rc @@ -550,7 +550,7 @@ STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "LGY-98" FONT 9, "MS Sans Serif", 0, 0, 0x0 BEGIN - CONTROL "Enabled",IDC_LGY98ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,40,10 + CONTROL "Enable",IDC_LGY98ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,40,10 LTEXT "I/O port",IDC_STATIC,8,26,30,8 COMBOBOX IDC_LGY98IO,40,24,40,52,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP LTEXT "Interrupt",IDC_STATIC,104,26,30,8 @@ -573,7 +573,7 @@ STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "CL-GD5430" FONT 9, "MS Sans Serif", 0, 0, 0x0 BEGIN - CONTROL "Enabled",IDC_GD5430ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,40,10 + CONTROL "Enable",IDC_GD5430ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,40,10 LTEXT "Type",IDC_STATIC,8,26,30,8 COMBOBOX IDC_GD5430TYPE,40,24,136,52,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Use Fake Hardware Cursor",IDC_GD5430FAKECURSOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,44,100,10 @@ -616,7 +616,7 @@ CAPTION "Hostdrv Configure" CLASS "np2dialog" FONT 9, "MS Sans Serif", 0, 0, 0x0 BEGIN - CONTROL "Enabled",IDC_HOSTDRVENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,140,10 + CONTROL "Enable",IDC_HOSTDRVENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,140,10 LTEXT "Shared Directory",IDC_STATIC,8,23,76,8 COMBOBOX IDC_HOSTDRVDIR,8,33,130,12, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Browse...",IDC_HOSTDRVBROWSE,140,32,44,14 @@ -633,7 +633,7 @@ STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "General" FONT 9, "MS Sans Serif", 0, 0, 0x0 BEGIN - CONTROL "Enabled",IDC_PCIENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,140,10 + CONTROL "Enable",IDC_PCIENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,140,10 LTEXT "PCMC Type",IDC_STATIC,8,26,30,8 COMBOBOX IDC_PCIPCMCTYPE,40,24,136,52,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Use BIOS32 (not recommended)",IDC_PCIBIOS32,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,44,140,10 @@ -1577,6 +1577,9 @@ BEGIN IDS_GD5430_GA98NBII "I-O DATA GA-98NBII" IDS_GD5430_GA98NBIV "I-O DATA GA-98NBIV" IDS_GD5430_96 "PC-9801-96(PC-9801B3-E02)" + IDS_GD5430_AUTO_XE_G1_PCI "Auto Select(Xe10, GA-98NBI/C, PCI)" + IDS_GD5430_AUTO_XE_G2_PCI "Auto Select(Xe10, GA-98NBII, PCI)" + IDS_GD5430_AUTO_XE_G4_PCI "Auto Select(Xe10, GA-98NBIV, PCI)" IDS_GD5430_AUTO_XE_WA_PCI "Auto Select(Xe10, WAB-S, PCI)" IDS_GD5430_AUTO_XE_WS_PCI "Auto Select(Xe10, WSN-A2F, PCI)" IDS_GD5430_AUTO_XE_W4_PCI "Auto Select(Xe10, WSN-A4F, PCI)" diff --git a/win9x/resources/1252/np2.rc2 b/win9x/resources/1252/np2.rc2 index 1875a0f..7492bee 100644 --- a/win9x/resources/1252/np2.rc2 +++ b/win9x/resources/1252/np2.rc2 @@ -25,8 +25,8 @@ IDR_MANIFEST IRT_MANIFEST MOVEABLE PURE "..\\np2.mnf" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,8,6,47 - PRODUCTVERSION 0,8,6,47 + FILEVERSION 0,8,6,48 + PRODUCTVERSION 0,8,6,48 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -42,10 +42,10 @@ BEGIN BLOCK "040904e4" BEGIN VALUE "CompanyName", "\0" - VALUE "FileVersion", "0, 8, 6, 47\0" + VALUE "FileVersion", "0, 8, 6, 48\0" VALUE "LegalCopyright", "Nekosan development team\0" - VALUE "ProductVersion", "0, 8, 6, 47\0" + VALUE "ProductVersion", "0, 8, 6, 48\0" #ifdef _USRDLL VALUE "FileDescription", "PC-98x1series emulator resource file\0" VALUE "ProductName", "Neko Project II resource file\0" diff --git a/win9x/resources/932/np2.rc b/win9x/resources/932/np2.rc index 5717c3d..e5c9463 100644 --- a/win9x/resources/932/np2.rc +++ b/win9x/resources/932/np2.rc @@ -543,7 +543,7 @@ STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "LGY-98" FONT 9, "lr oSVbN", 0, 0, 0x0 BEGIN - CONTROL "Enabled",IDC_LGY98ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,40,10 + CONTROL "Enable",IDC_LGY98ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,40,10 LTEXT "I/O port",IDC_STATIC,8,26,30,8 COMBOBOX IDC_LGY98IO,40,24,40,52,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP LTEXT "Interrupt",IDC_STATIC,104,26,30,8 @@ -566,7 +566,7 @@ STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "CL-GD54xx" FONT 9, "lr oSVbN", 0, 0, 0x0 BEGIN - CONTROL "Enabled",IDC_GD5430ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,40,10 + CONTROL "Enable",IDC_GD5430ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,40,10 LTEXT "Type",IDC_STATIC,8,26,30,8 COMBOBOX IDC_GD5430TYPE,40,24,136,52,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Use Fake Hardware Cursor",IDC_GD5430FAKECURSOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,44,100,10 @@ -609,7 +609,7 @@ CAPTION "Hostdrv Configure" CLASS "np2dialog" FONT 9, "lr oSVbN", 0, 0, 0x0 BEGIN - CONTROL "Enabled",IDC_HOSTDRVENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,140,10 + CONTROL "Enable",IDC_HOSTDRVENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,140,10 LTEXT "Shared Directory",IDC_STATIC,8,23,76,8 COMBOBOX IDC_HOSTDRVDIR,8,33,130,12, CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Browse...",IDC_HOSTDRVBROWSE,140,32,44,14 @@ -626,7 +626,7 @@ STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "General" FONT 9, "lr oSVbN", 0, 0, 0x0 BEGIN - CONTROL "Enabled",IDC_PCIENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,140,10 + CONTROL "Enable",IDC_PCIENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,8,140,10 LTEXT "PCMC Type",IDC_STATIC,8,26,30,8 COMBOBOX IDC_PCIPCMCTYPE,40,24,136,52,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Use BIOS32 (not recommended)",IDC_PCIBIOS32,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,44,140,10 @@ -1081,7 +1081,7 @@ BEGIN MENUITEM "&Mouse rapid", IDM_MSRAPID MENUITEM "&ITF work", IDM_ITFWORK // MENUITEM "Fix &MMTimer", IDM_TIMERFIX - MENUITEM "&Skip over 16MB memcheck", IDM_SKIP16MEMCHK + // MENUITEM "&Skip over 16MB memcheck", IDM_SKIP16MEMCHK MENUITEM "Fast m&emcheck", IDM_FASTMEMCHK MENUITEM SEPARATOR MENUITEM "&Help...", IDM_HELP @@ -1582,6 +1582,9 @@ BEGIN IDS_GD5430_GA98NBII "I-O DATA GA-98NBII" IDS_GD5430_GA98NBIV "I-O DATA GA-98NBIV" IDS_GD5430_96 "PC-9801-96(PC-9801B3-E02)" + IDS_GD5430_AUTO_XE_G1_PCI "Auto Select(Xe10, GA-98NBI/C, PCI)" + IDS_GD5430_AUTO_XE_G2_PCI "Auto Select(Xe10, GA-98NBII, PCI)" + IDS_GD5430_AUTO_XE_G4_PCI "Auto Select(Xe10, GA-98NBIV, PCI)" IDS_GD5430_AUTO_XE_WA_PCI "Auto Select(Xe10, WAB-S, PCI)" IDS_GD5430_AUTO_XE_WS_PCI "Auto Select(Xe10, WSN-A2F, PCI)" IDS_GD5430_AUTO_XE_W4_PCI "Auto Select(Xe10, WSN-A4F, PCI)" diff --git a/win9x/resources/932/np2.rc2 b/win9x/resources/932/np2.rc2 index db241f9..5997a3b 100644 --- a/win9x/resources/932/np2.rc2 +++ b/win9x/resources/932/np2.rc2 @@ -25,8 +25,8 @@ IDR_MANIFEST IRT_MANIFEST MOVEABLE PURE "..\\np2.mnf" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,8,6,46 - PRODUCTVERSION 0,8,6,46 + FILEVERSION 0,8,6,48 + PRODUCTVERSION 0,8,6,48 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -42,10 +42,10 @@ BEGIN BLOCK "041103a4" BEGIN VALUE "CompanyName", "\0" - VALUE "FileVersion", "0, 8, 6, 46\0" + VALUE "FileVersion", "0, 8, 6, 48\0" VALUE "LegalCopyright", "˂J[\0" - VALUE "ProductVersion", "0, 8, 6, 46\0" + VALUE "ProductVersion", "0, 8, 6, 48\0" #ifdef _USRDLL VALUE "FileDescription", "PC-98x1series emulator resource file\0" VALUE "ProductName", "Neko Project II resource file\0" diff --git a/win9x/resources/932/np2jp.aps b/win9x/resources/932/np2jp.aps index 06215a5d2f62754fcbb9bba89b4fc9544f761ad9..ec44edd8b1460a52b160113ca42f1578ddeb776f 100644 GIT binary patch delta 23628 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 Wu{Pq=bavwVUi{$73i=}T^S=PIA%*q; delta 15450 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 RY}7_oBpWc)9z%NZ^8b7Cw$}gv diff --git a/win9x/resources/932/np2jp.rc b/win9x/resources/932/np2jp.rc index c961cec..a49bc2e 100644 --- a/win9x/resources/932/np2jp.rc +++ b/win9x/resources/932/np2jp.rc @@ -1579,6 +1579,9 @@ BEGIN IDS_GD5430_GA98NBII "I-O DATA GA-98NBII" IDS_GD5430_GA98NBIV "I-O DATA GA-98NBIV" IDS_GD5430_96 "PC-9801-96(PC-9801B3-E02)" + IDS_GD5430_AUTO_XE_G1_PCI "I(Xe10, GA-98NBI/C, PCI)" + IDS_GD5430_AUTO_XE_G2_PCI "I(Xe10, GA-98NBII, PCI)" + IDS_GD5430_AUTO_XE_G4_PCI "I(Xe10, GA-98NBIV, PCI)" IDS_GD5430_AUTO_XE_WA_PCI "I(Xe10, WAB-S, PCI)" IDS_GD5430_AUTO_XE_WS_PCI "I(Xe10, WSN-A2F, PCI)" IDS_GD5430_AUTO_XE_W4_PCI "I(Xe10, WSN-A4F, PCI)" diff --git a/win9x/scrnmng.cpp b/win9x/scrnmng.cpp index 13e57b6..e7fce07 100644 --- a/win9x/scrnmng.cpp +++ b/win9x/scrnmng.cpp @@ -256,6 +256,19 @@ void scrnmng_setheight(int posy, int height) { } } +void scrnmng_setsize(int posx, int posy, int width, int height) { + +#ifdef SUPPORT_SCRN_DIRECT3D + if(scrnmng_current_drawtype==DRAWTYPE_INVALID) return; + if(scrnmng_current_drawtype==DRAWTYPE_DIRECT3D){ + scrnmngD3D_setsize(posx, posy, width, height); + }else +#endif + { + scrnmngDD_setsize(posx, posy, width, height); + } +} + const SCRNSURF *scrnmng_surflock(void) { #ifdef SUPPORT_SCRN_DIRECT3D diff --git a/win9x/scrnmng.h b/win9x/scrnmng.h index 2b7c357..598aea5 100644 --- a/win9x/scrnmng.h +++ b/win9x/scrnmng.h @@ -92,6 +92,7 @@ void scrnmng_destroy(void); void scrnmng_setwidth(int posx, int width); void scrnmng_setextend(int extend); void scrnmng_setheight(int posy, int height); +void scrnmng_setsize(int posx, int posy, int width, int height); #define scrnmng_setbpp(commendablebpp) const SCRNSURF *scrnmng_surflock(void); void scrnmng_surfunlock(const SCRNSURF *surf); diff --git a/win9x/scrnmng_d3d.cpp b/win9x/scrnmng_d3d.cpp index 3de587f..da8ed1c 100644 --- a/win9x/scrnmng_d3d.cpp +++ b/win9x/scrnmng_d3d.cpp @@ -788,9 +788,12 @@ BRESULT scrnmngD3D_create(UINT8 scrnmode) { height = np2oscfg.fscrn_cy; #ifdef SUPPORT_WAB if(!np2wabwnd.multiwindow && (np2wab.relay&0x3)){ - if(np2wab.realWidth>=640 && np2wab.realHeight>=400){ - width = np2wab.realWidth; - height = np2wab.realHeight; + if(scrnstat.width>=640 && scrnstat.height>=400){ + //if(np2wab.realWidth>=640 && np2wab.realHeight>=400){ + //width = np2wab.realWidth; + //height = np2wab.realHeight; + width = scrnstat.width;//np2wab.realWidth; + height = scrnstat.height;//np2wab.realHeight; }else{ width = 640; height = 480; @@ -868,10 +871,11 @@ BRESULT scrnmngD3D_create(UINT8 scrnmode) { RECT crect; #ifdef SUPPORT_WAB - if(!np2wabwnd.multiwindow && (np2wab.relay&0x3)!=0 && np2wab.realWidth>=640 && np2wab.realHeight>=400){ + //if(!np2wabwnd.multiwindow && (np2wab.relay&0x3)!=0 && np2wab.realWidth>=640 && np2wab.realHeight>=400){ + if(!np2wabwnd.multiwindow && (np2wab.relay&0x3)!=0 && scrnstat.width>=640 && scrnstat.height>=400){ // TCY - width = bufwidth = np2wab.realWidth; - height = bufheight = np2wab.realHeight; + width = bufwidth = scrnstat.width;//np2wab.realWidth; + height = bufheight = scrnstat.height;//np2wab.realHeight; bufwidth++; // +1ȂƑʖڂ炵 bufheight++; // +1ȂƑʖڂ炵 }else{ @@ -1182,6 +1186,33 @@ void scrnmngD3D_setheight(int posy, int height) { } } +void scrnmngD3D_setsize(int posx, int posy, int width, int height) { + + if(scrnstat.width != width || scrnstat.height != height){ + scrnstat.width = width; + scrnstat.height = height; + if(d3d.d3dbacksurf){ + if (d3d.scrnmode & SCRNMODE_FULLSCREEN) { + renewalclientsize(TRUE); + update_backbuffer2size(); + clearoutfullscreen(); + }else{ + DEVMODE devmode; + if (EnumDisplaySettings(NULL, ENUM_REGISTRY_SETTINGS, &devmode)) { + while (((width * scrnstat.multiple) >> 3) >= (int)devmode.dmPelsWidth-32){ + scrnstat.multiple--; + if(scrnstat.multiple==1) break; + } + } + d3d_enter_criticalsection(); + scrnmngD3D_destroy(); + scrnmngD3D_create(g_scrnmode); + d3d_leave_criticalsection(); + } + } + } +} + const SCRNSURF *scrnmngD3D_surflock(void) { D3DLOCKED_RECT destrect; diff --git a/win9x/scrnmng_d3d.h b/win9x/scrnmng_d3d.h index dd02367..fbd7595 100644 --- a/win9x/scrnmng_d3d.h +++ b/win9x/scrnmng_d3d.h @@ -11,6 +11,7 @@ void scrnmngD3D_destroy(void); void scrnmngD3D_setwidth(int posx, int width); void scrnmngD3D_setextend(int extend); void scrnmngD3D_setheight(int posy, int height); +void scrnmngD3D_setsize(int posx, int posy, int width, int height); #define scrnmngD3D_setbpp(commendablebpp) const SCRNSURF *scrnmngD3D_surflock(void); void scrnmngD3D_surfunlock(const SCRNSURF *surf); diff --git a/win9x/scrnmng_dd.cpp b/win9x/scrnmng_dd.cpp index 2016184..1443e89 100644 --- a/win9x/scrnmng_dd.cpp +++ b/win9x/scrnmng_dd.cpp @@ -972,6 +972,13 @@ void scrnmngDD_setheight(int posy, int height) { renewalclientsize(TRUE); } +void scrnmngDD_setsize(int posx, int posy, int width, int height) { + + scrnstat.width = width; + scrnstat.height = height; + renewalclientsize(TRUE); +} + const SCRNSURF *scrnmngDD_surflock(void) { DDSURFACEDESC destscrn; diff --git a/win9x/scrnmng_dd.h b/win9x/scrnmng_dd.h index 1de8c3c..b96e436 100644 --- a/win9x/scrnmng_dd.h +++ b/win9x/scrnmng_dd.h @@ -9,6 +9,7 @@ void scrnmngDD_destroy(void); void scrnmngDD_setwidth(int posx, int width); void scrnmngDD_setextend(int extend); void scrnmngDD_setheight(int posy, int height); +void scrnmngDD_setsize(int posx, int posy, int width, int height); #define scrnmngDD_setbpp(commendablebpp) const SCRNSURF *scrnmngDD_surflock(void); void scrnmngDD_surfunlock(const SCRNSURF *surf); diff --git a/win9x/soundmng.cpp b/win9x/soundmng.cpp index 35eb3cf..bd62e40 100644 --- a/win9x/soundmng.cpp +++ b/win9x/soundmng.cpp @@ -58,6 +58,7 @@ void CSoundMng::Initialize() ::CoInitializeEx(NULL, COINIT_MULTITHREADED); #endif // defined(SUPPORT_ASIO) || defined(SUPPORT_WASAPI) + CSoundDeviceDSound3::s_mastervol_available = np2oscfg.usemastervolume ? true : false; CSoundDeviceDSound3::Initialize(); #if defined(SUPPORT_WASAPI) CSoundDeviceWasapi::Initialize(); diff --git a/win9x/soundmng/sddsound3.cpp b/win9x/soundmng/sddsound3.cpp index 4cebdcd..ae3fbad 100644 --- a/win9x/soundmng/sddsound3.cpp +++ b/win9x/soundmng/sddsound3.cpp @@ -20,11 +20,15 @@ #define DSBVOLUME_MIN (-10000) /*!< H[ŏl */ #endif -#define NP2VOLUME2DSDB(a) ((LONG)(10*log10((a)/100.0f)*100)) +#define NP2VOLUME2DSDB(a) ((LONG)(10*log((a)/100.0f)/log(2.0)*100)) //! foCX Xg std::vector CSoundDeviceDSound3::sm_devices; +//! }X^{[gp”\H +bool CSoundDeviceDSound3::s_mastervol_available = true; + + /** * @brief RIFF chunk */ @@ -206,7 +210,7 @@ UINT CSoundDeviceDSound3::CreateStream(UINT nSamplingRate, UINT nChannels, UINT DSBUFFERDESC dsbdesc; ZeroMemory(&dsbdesc, sizeof(dsbdesc)); dsbdesc.dwSize = sizeof(dsbdesc); - dsbdesc.dwFlags = DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | + dsbdesc.dwFlags = DSBCAPS_CTRLPAN | (s_mastervol_available ? DSBCAPS_CTRLVOLUME : 0) | DSBCAPS_CTRLFREQUENCY | DSBCAPS_CTRLPOSITIONNOTIFY | DSBCAPS_STICKYFOCUS | DSBCAPS_GETCURRENTPOSITION2; dsbdesc.lpwfxFormat = reinterpret_cast(&pcmwf); @@ -344,27 +348,33 @@ void CSoundDeviceDSound3::SetMasterVolume(int nVolume) { m_mastervolume = nVolume; - if (m_lpDSStream) - { - if(m_mastervolume == 0){ - m_lpDSStream->SetVolume(DSBVOLUME_MIN); - }else{ - m_lpDSStream->SetVolume(NP2VOLUME2DSDB(m_mastervolume)); + if(s_mastervol_available){ + if (m_lpDSStream) + { + if(m_mastervolume == 0){ + m_lpDSStream->SetVolume(DSBVOLUME_MIN); + }else if(m_mastervolume == 100){ + m_lpDSStream->SetVolume(DSBVOLUME_MAX); + }else{ + m_lpDSStream->SetVolume(NP2VOLUME2DSDB(m_mastervolume)); + } + } + for( auto it = m_pcm.begin(); it != m_pcm.end() ; ++it ) { + LPDIRECTSOUNDBUFFER lpDSBuffer = it->second; + int volume = 100; + if(it->first < PCMVOLUME_MAXCOUNT){ + volume = m_pcmvolume[it->first]; + } + volume *= m_mastervolume; + if(volume == 0){ + lpDSBuffer->SetVolume(DSBVOLUME_MIN); + }else if(volume == 100){ + lpDSBuffer->SetVolume(DSBVOLUME_MAX); + }else{ + lpDSBuffer->SetVolume(NP2VOLUME2DSDB(volume)); + } } } - for( auto it = m_pcm.begin(); it != m_pcm.end() ; ++it ) { - LPDIRECTSOUNDBUFFER lpDSBuffer = it->second; - int volume = 100; - if(it->first < PCMVOLUME_MAXCOUNT){ - volume = m_pcmvolume[it->first]; - } - volume *= m_mastervolume; - if(volume == 0){ - lpDSBuffer->SetVolume(DSBVOLUME_MIN); - }else{ - lpDSBuffer->SetVolume(NP2VOLUME2DSDB(volume)); - } - } } /** @@ -550,7 +560,7 @@ LPDIRECTSOUNDBUFFER CSoundDeviceDSound3::CreateWaveBuffer(LPCTSTR lpFilename) DSBUFFERDESC dsbdesc; ZeroMemory(&dsbdesc, sizeof(dsbdesc)); dsbdesc.dwSize = sizeof(dsbdesc); - dsbdesc.dwFlags = DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY | DSBCAPS_STATIC | DSBCAPS_STICKYFOCUS | DSBCAPS_GETCURRENTPOSITION2; + dsbdesc.dwFlags = DSBCAPS_CTRLPAN | (s_mastervol_available ? DSBCAPS_CTRLVOLUME : 0) | DSBCAPS_CTRLFREQUENCY | DSBCAPS_STATIC | DSBCAPS_STICKYFOCUS | DSBCAPS_GETCURRENTPOSITION2; dsbdesc.dwBufferBytes = chunk.nSize; dsbdesc.lpwfxFormat = reinterpret_cast(&pcmwf); @@ -617,22 +627,26 @@ void CSoundDeviceDSound3::UnloadPCM(UINT nNum) */ void CSoundDeviceDSound3::SetPCMVolume(UINT nNum, int nVolume) { - std::map::iterator it = m_pcm.find(nNum); - if (it != m_pcm.end()) - { - LPDIRECTSOUNDBUFFER lpDSBuffer = it->second; - int volume = nVolume; - if(nNum < PCMVOLUME_MAXCOUNT){ - m_pcmvolume[nNum] = nVolume; - } - volume *= m_mastervolume; + if(s_mastervol_available){ + std::map::iterator it = m_pcm.find(nNum); + if (it != m_pcm.end()) + { + LPDIRECTSOUNDBUFFER lpDSBuffer = it->second; + int volume = nVolume; + if(nNum < PCMVOLUME_MAXCOUNT){ + m_pcmvolume[nNum] = nVolume; + } + volume *= m_mastervolume; - if(volume == 0){ - lpDSBuffer->SetVolume(DSBVOLUME_MIN); - }else{ - lpDSBuffer->SetVolume(NP2VOLUME2DSDB(volume)); + if(volume == 0){ + lpDSBuffer->SetVolume(DSBVOLUME_MIN); + }else if(volume == 100){ + lpDSBuffer->SetVolume(DSBVOLUME_MAX); + }else{ + lpDSBuffer->SetVolume(NP2VOLUME2DSDB(volume)); + } + //lpDSBuffer->SetVolume((((DSBVOLUME_MAX - DSBVOLUME_MIN) * nVolume) / 100) + DSBVOLUME_MIN); } - //lpDSBuffer->SetVolume((((DSBVOLUME_MAX - DSBVOLUME_MIN) * nVolume) / 100) + DSBVOLUME_MIN); } } diff --git a/win9x/soundmng/sddsound3.h b/win9x/soundmng/sddsound3.h index 0ff03b9..6834431 100644 --- a/win9x/soundmng/sddsound3.h +++ b/win9x/soundmng/sddsound3.h @@ -28,6 +28,8 @@ struct DSound3Device class CSoundDeviceDSound3 : public CSoundDeviceBase, protected CThreadBase { public: + static bool s_mastervol_available; //!< }X^{[gp”\H + static void Initialize(); static void EnumerateDevices(std::vector& devices); diff --git a/x11/Makefile.am b/x11/Makefile.am index 7659bd6..6014824 100644 --- a/x11/Makefile.am +++ b/x11/Makefile.am @@ -321,7 +321,7 @@ AM_CPPFLAGS= -I$(real_topsrcdir) \ -I$(real_topsrcdir)/wab \ $(GTK_CFLAGS) $(GDK_CFLAGS) $(GDK_PIXBUF_CFLAGS) $(SDL_CFLAGS) $(LIBUSB1_CFLAGS) \ $(X11_CFLAGS) $(XEXT_CFLAGS) \ - -DNP2_X11 -DSUPPORT_LARGE_HDD -DSUPPORT_VPCVHD -DSUPPORT_KAI_IMAGES -DHOOK_SYSKEY -DALLOW_MULTIRUN -DSUPPORT_NET -DSUPPORT_LGY98 -DSUPPORT_WAB -DSUPPORT_CL_GD5430 -DUSE_MAME -DSUPPORT_SOUND_SB16 -DSUPPORT_NVL_IMAGES + -DNP2_X11 -DSUPPORT_LARGE_HDD -DSUPPORT_VPCVHD -DSUPPORT_KAI_IMAGES -DHOOK_SYSKEY -DALLOW_MULTIRUN -DSUPPORT_NET -DSUPPORT_LGY98 -DUSE_MAME -DSUPPORT_SOUND_SB16 -DSUPPORT_NVL_IMAGES -DSUPPORT_FMGEN -DSUPPORT_GPIB -DSUPPORT_FAST_MEMORYCHECK if BUILD_ALL AM_CPPFLAGS+= -DX11_BUILD_ALL endif @@ -406,7 +406,7 @@ IA32_CPPFLAGS= -I$(real_topsrcdir)/i386c \ -I$(real_topsrcdir)/i386c/ia32/instructions/sse \ -I$(real_topsrcdir)/i386c/ia32/instructions/sse2 \ -I$(real_topsrcdir)/i386c/ia32/instructions/sse3 \ - -DCPUCORE_IA32 -DUSE_FPU -DSUPPORT_FPU_DOSBOX -DSUPPORT_FPU_DOSBOX2 -DSUPPORT_FPU_SOFTFLOAT -DSUPPORT_LARGE_MEMORY -DSUPPORT_GPIB -DSUPPORT_PCI -DUSE_MMX -DUSE_3DNOW -DUSE_SSE -DUSE_SSE2 -DUSE_SSE3 -DUSE_TSC -DUSE_FASTPAGING -DUSE_VME -DBIOS_IO_EMULATION -DSUPPORT_FAST_MEMORYCHECK + -DCPUCORE_IA32 -DUSE_FPU -DSUPPORT_FPU_DOSBOX -DSUPPORT_FPU_DOSBOX2 -DSUPPORT_FPU_SOFTFLOAT -DSUPPORT_LARGE_MEMORY -DSUPPORT_PCI -DUSE_MMX -DUSE_3DNOW -DUSE_SSE -DUSE_SSE2 -DUSE_SSE3 -DUSE_TSC -DUSE_FASTPAGING -DUSE_VME -DSUPPORT_WAB -DSUPPORT_CL_GD5430 -DBIOS_IO_EMULATION if CPUCORE_IA32 if BUILD_ALL diff --git a/x11/gtk2/dialog_wab.c b/x11/gtk2/dialog_wab.c index b5a3143..6fcfbea 100644 --- a/x11/gtk2/dialog_wab.c +++ b/x11/gtk2/dialog_wab.c @@ -39,17 +39,24 @@ static const char *cl_gd54xx_type_str[] = { "PC-9821Xe10,Xa7e,Xb10 built-in", "PC-9821Cb2 built-in", "PC-9821Cx2 built-in", +#ifdef SUPPORT_PCI "PC-9821 PCI CL-GD5446 built-in", +#endif "MELCO WAB-S", "MELCO WSN-A2F", "MELCO WSN-A4F", "I-O DATA GA-98NBI/C", - "I-O DATA GA-98NBII,IV", + "I-O DATA GA-98NBII", "I-O DATA GA-98NBIV", "PC-9801-96(PC-9801B3-E02)", +#ifdef SUPPORT_PCI + "Auto Select(Xe10, GA-98NBI/C), PCI", + "Auto Select(Xe10, GA-98NBII), PCI", + "Auto Select(Xe10, GA-98NBIV), PCI", "Auto Select(Xe10, WAB-S), PCI", "Auto Select(Xe10, WSN-A2F), PCI", "Auto Select(Xe10, WSN-A4F), PCI", +#endif "Auto Select(Xe10, WAB-S)", "Auto Select(Xe10, WSN-A2F)", "Auto Select(Xe10, WSN-A4F)", @@ -165,6 +172,7 @@ ok_button_clicked(GtkButton *b, gpointer d) renewal = TRUE; } break; +#ifdef SUPPORT_PCI case 7: if(np2cfg.gd5430type != CIRRUS_98ID_PCI) { np2cfg.gd5430type = CIRRUS_98ID_PCI; @@ -214,41 +222,121 @@ ok_button_clicked(GtkButton *b, gpointer d) } break; case 15: + if(np2cfg.gd5430type != CIRRUS_98ID_AUTO_XE_G1_PCI) { + np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE_G1_PCI; + renewal = TRUE; + } + break; + case 16: + if(np2cfg.gd5430type != CIRRUS_98ID_AUTO_XE_G2_PCI) { + np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE_G2_PCI; + renewal = TRUE; + } + break; + case 17: + if(np2cfg.gd5430type != CIRRUS_98ID_AUTO_XE_G4_PCI) { + np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE_G4_PCI; + renewal = TRUE; + } + break; + case 18: if(np2cfg.gd5430type != CIRRUS_98ID_AUTO_XE_WA_PCI) { np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE_WA_PCI; renewal = TRUE; } break; - case 16: + case 19: if(np2cfg.gd5430type != CIRRUS_98ID_AUTO_XE_WS_PCI) { np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE_WS_PCI; renewal = TRUE; } break; - case 17: + case 20: if(np2cfg.gd5430type != CIRRUS_98ID_AUTO_XE_W4_PCI) { np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE_W4_PCI; renewal = TRUE; } break; - case 18: + case 21: if(np2cfg.gd5430type != CIRRUS_98ID_AUTO_XE10_WABS) { np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE10_WABS; renewal = TRUE; } break; - case 19: + case 22: if(np2cfg.gd5430type != CIRRUS_98ID_AUTO_XE10_WSN2) { np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE10_WSN2; renewal = TRUE; } break; - case 20: + case 23: if(np2cfg.gd5430type != CIRRUS_98ID_AUTO_XE10_WSN4) { np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE10_WSN4; renewal = TRUE; } break; +#else + case 7: + if(np2cfg.gd5430type != CIRRUS_98ID_WAB) { + np2cfg.gd5430type = CIRRUS_98ID_WAB; + renewal = TRUE; + } + break; + case 8: + if(np2cfg.gd5430type != CIRRUS_98ID_WSN_A2F) { + np2cfg.gd5430type = CIRRUS_98ID_WSN_A2F; + renewal = TRUE; + } + break; + case 9: + if(np2cfg.gd5430type != CIRRUS_98ID_WSN) { + np2cfg.gd5430type = CIRRUS_98ID_WSN; + renewal = TRUE; + } + break; + case 10: + if(np2cfg.gd5430type != CIRRUS_98ID_GA98NBIC) { + np2cfg.gd5430type = CIRRUS_98ID_GA98NBIC; + renewal = TRUE; + } + break; + case 11: + if(np2cfg.gd5430type != CIRRUS_98ID_GA98NBII) { + np2cfg.gd5430type = CIRRUS_98ID_GA98NBII; + renewal = TRUE; + } + break; + case 12: + if(np2cfg.gd5430type != CIRRUS_98ID_GA98NBIV) { + np2cfg.gd5430type = CIRRUS_98ID_GA98NBIV; + renewal = TRUE; + } + break; + case 13: + if(np2cfg.gd5430type != CIRRUS_98ID_96) { + np2cfg.gd5430type = CIRRUS_98ID_96; + renewal = TRUE; + } + break; + case 14: + if(np2cfg.gd5430type != CIRRUS_98ID_AUTO_XE10_WABS) { + np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE10_WABS; + renewal = TRUE; + } + break; + case 15: + if(np2cfg.gd5430type != CIRRUS_98ID_AUTO_XE10_WSN2) { + np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE10_WSN2; + renewal = TRUE; + } + break; + case 16: + if(np2cfg.gd5430type != CIRRUS_98ID_AUTO_XE10_WSN4) { + np2cfg.gd5430type = CIRRUS_98ID_AUTO_XE10_WSN4; + renewal = TRUE; + } + break; +#endif } break; } @@ -368,6 +456,7 @@ create_cl_gd54xx_note(void) case CIRRUS_98ID_Cx2: gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[6]); break; +#ifdef SUPPORT_PCI case CIRRUS_98ID_PCI: gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[7]); break; @@ -392,24 +481,65 @@ create_cl_gd54xx_note(void) case CIRRUS_98ID_96: gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[14]); break; - case CIRRUS_98ID_AUTO_XE_WA_PCI: + case CIRRUS_98ID_AUTO_XE_G1_PCI: gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[15]); break; - case CIRRUS_98ID_AUTO_XE_WS_PCI: + case CIRRUS_98ID_AUTO_XE_G2_PCI: gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[16]); break; - case CIRRUS_98ID_AUTO_XE_W4_PCI: + case CIRRUS_98ID_AUTO_XE_G4_PCI: gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[17]); break; - case CIRRUS_98ID_AUTO_XE10_WABS: + case CIRRUS_98ID_AUTO_XE_WA_PCI: gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[18]); break; - case CIRRUS_98ID_AUTO_XE10_WSN2: + case CIRRUS_98ID_AUTO_XE_WS_PCI: gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[19]); break; - case CIRRUS_98ID_AUTO_XE10_WSN4: + case CIRRUS_98ID_AUTO_XE_W4_PCI: gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[20]); break; + case CIRRUS_98ID_AUTO_XE10_WABS: + gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[21]); + break; + case CIRRUS_98ID_AUTO_XE10_WSN2: + gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[22]); + break; + case CIRRUS_98ID_AUTO_XE10_WSN4: + gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[23]); + break; +#else + case CIRRUS_98ID_WAB: + gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[7]); + break; + case CIRRUS_98ID_WSN_A2F: + gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[8]); + break; + case CIRRUS_98ID_WSN: + gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[9]); + break; + case CIRRUS_98ID_GA98NBIC: + gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[10]); + break; + case CIRRUS_98ID_GA98NBII: + gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[11]); + break; + case CIRRUS_98ID_GA98NBIV: + gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[12]); + break; + case CIRRUS_98ID_96: + gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[13]); + break; + case CIRRUS_98ID_AUTO_XE10_WABS: + gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[14]); + break; + case CIRRUS_98ID_AUTO_XE10_WSN2: + gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[15]); + break; + case CIRRUS_98ID_AUTO_XE10_WSN4: + gtk_entry_set_text(GTK_ENTRY(cl_gd54xx_type_entry), cl_gd54xx_type_str[16]); + break; +#endif } /* Use Fake Hardware Cursor */ diff --git a/x11/ini.c b/x11/ini.c index 1504a64..5a9f96d 100644 --- a/x11/ini.c +++ b/x11/ini.c @@ -663,6 +663,8 @@ static INITBL iniitem[] = { {"USE_CLGD", INITYPE_BOOL, &np2cfg.usegd5430, 0}, {"CLGDTYPE", INITYPE_UINT16, &np2cfg.gd5430type, 0}, {"CLGDFCUR", INITYPE_BOOL, &np2cfg.gd5430fakecur, 0}, + {"GDMELOFS", INITYPE_UINT8, &np2cfg.gd5430melofs, 0}, + {"GANBBSEX", INITYPE_BOOL, &np2cfg.ga98nb_bigscrn_ex, 0}, #endif {"TIMERFIX", INITYPE_BOOL, &np2cfg.timerfix, 0}, @@ -683,6 +685,10 @@ static INITBL iniitem[] = { {"cpu_bran", INIRO_STR, np2cfg.cpu_brandstring_o, 63}, {"FPU_TYPE", INITYPE_UINT8, &np2cfg.fpu_type, 0}, +#if defined(SUPPORT_FAST_MEMORYCHECK) + {"memckspd", INITYPE_UINT8, &np2cfg.memcheckspeed, 0}, +#endif + {"USERAM_D", INITYPE_BOOL, &np2cfg.useram_d, 0}, {"keyboard", INITYPE_KB, &np2oscfg.KEYBOARD, 0}, {"F12_COPY", INITYPE_UINT8, &np2oscfg.F12KEY, 0},