Beispiel #1
0
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {

	PAINTSTRUCT	ps;
	RECT		rc;
	HDC			hdc;
	UINT		update;

	switch (msg) {
		case WM_CREATE:
#ifndef __GNUC__
			WINNLSEnableIME(hWnd, FALSE);
#endif
			break;

		case WM_SYSCOMMAND:
			update = 0;
			switch(wParam) {
				case IDM_MEMORYDUMP:
					debugsub_memorydump();
					break;

				default:
					return(DefWindowProc(hWnd, msg, wParam, lParam));
			}
			sysmng_update(update);
			break;

		case WM_COMMAND:
			np2cmd(hWnd, LOWORD(wParam));
			break;

		case WM_ACTIVATE:
			if (LOWORD(wParam) != WA_INACTIVE) {
				scrnmng_update();
				keystat_allrelease();
				mousemng_enable(MOUSEPROC_BG);
			}
			else {
				mousemng_disable(MOUSEPROC_BG);
			}
			break;

		case WM_PAINT:
			hdc = BeginPaint(hWnd, &ps);
			if (np2opening) {
				HINSTANCE	hinst;
				RECT		rect;
				int			width;
				int			height;
				HBITMAP		hbmp;
				BITMAP		bmp;
				HDC			hmdc;
				HBRUSH		hbrush;

#if defined(_WIN64)
				hinst = reinterpret_cast<HINSTANCE>(::GetWindowLongPtr(hWnd, GWLP_HINSTANCE));
#else
				hinst = reinterpret_cast<HINSTANCE>(::GetWindowLong(hWnd, GWL_HINSTANCE));
#endif
				GetClientRect(hWnd, &rect);
				width = rect.right - rect.left;
				height = rect.bottom - rect.top;
				hbmp = LoadBitmap(hinst, _T("NP2BMP"));
				GetObject(hbmp, sizeof(BITMAP), &bmp);
				hbrush = (HBRUSH)SelectObject(hdc,
												GetStockObject(BLACK_BRUSH));
				PatBlt(hdc, 0, 0, width, height, PATCOPY);
				SelectObject(hdc, hbrush);
				hmdc = CreateCompatibleDC(hdc);
				SelectObject(hmdc, hbmp);
				BitBlt(hdc, (width - bmp.bmWidth) / 2,
						(height - bmp.bmHeight) / 2,
							bmp.bmWidth, bmp.bmHeight, hmdc, 0, 0, SRCCOPY);
				DeleteDC(hmdc);
				DeleteObject(hbmp);
			}
			else {
//				scrnmng_update();
				scrndraw_redraw();
			}
			EndPaint(hWnd, &ps);
			break;

		case WM_QUERYNEWPALETTE:
			scrnmng_querypalette();
			break;

		case WM_MOVE:
			if ((!scrnmng_isfullscreen()) &&
				(!(GetWindowLong(hWnd, GWL_STYLE) &
									(WS_MAXIMIZE | WS_MINIMIZE)))) {
				GetWindowRect(hWnd, &rc);
				np2oscfg.winx = rc.left;
				np2oscfg.winy = rc.top;
				sysmng_update(SYS_UPDATEOSCFG);
			}
			break;

		case WM_SIZE:
			if (wParam == SIZE_RESTORED) {
				scrnmng_restoresize();
			}
			break;

		case WM_ENTERMENULOOP:
			winuienter();
			if (scrnmng_isfullscreen()) {
				DrawMenuBar(hWnd);
			}
			break;

		case WM_EXITMENULOOP:
			winuileave();
			break;

		case WM_ENTERSIZEMOVE:
			soundmng_disable(SNDPROC_MAIN);
			mousemng_disable(MOUSEPROC_WINUI);
			break;

		case WM_EXITSIZEMOVE:
			mousemng_enable(MOUSEPROC_WINUI);
			soundmng_enable(SNDPROC_MAIN);
			break;

		case WM_KEYDOWN:
			if (wParam == VK_F11) {
				return(DefWindowProc(hWnd, WM_SYSKEYDOWN, VK_F10, lParam));
			}
			if ((wParam == VK_F12) && (!np2oscfg.F12COPY)) {
				mousemng_toggle(MOUSEPROC_SYSTEM);
				xmenu_setmouse(np2oscfg.MOUSE_SW ^ 1);
				sysmng_update(SYS_UPDATECFG);
			}
			else {
				winkbd_keydown(wParam, lParam);
			}
			break;

		case WM_KEYUP:
			if (wParam == VK_F11) {
				return(DefWindowProc(hWnd, WM_SYSKEYUP, VK_F10, lParam));
			}
			if ((wParam != VK_F12) || (np2oscfg.F12COPY)) {
				winkbd_keyup(wParam, lParam);
			}
			break;

		case WM_SYSKEYDOWN:
			winkbd_keydown(wParam, lParam);
			break;

		case WM_SYSKEYUP:
			winkbd_keyup(wParam, lParam);
			break;

		case WM_LBUTTONDOWN:
			if (!mousemng_buttonevent(MOUSEMNG_LEFTDOWN)) {
				return(DefWindowProc(hWnd, msg, wParam, lParam));
			}
			break;

		case WM_LBUTTONUP:
			if (!mousemng_buttonevent(MOUSEMNG_LEFTUP)) {
				return(DefWindowProc(hWnd, msg, wParam, lParam));
			}
			break;

		case WM_MBUTTONDOWN:									// ver0.26
			mousemng_toggle(MOUSEPROC_SYSTEM);
			xmenu_setmouse(np2oscfg.MOUSE_SW ^ 1);
			sysmng_update(SYS_UPDATECFG);
			break;

		case WM_RBUTTONDOWN:
			if (!mousemng_buttonevent(MOUSEMNG_RIGHTDOWN)) {
				return(DefWindowProc(hWnd, msg, wParam, lParam));
			}
			break;

		case WM_RBUTTONUP:
			if (!mousemng_buttonevent(MOUSEMNG_RIGHTUP)) {
				return(DefWindowProc(hWnd, msg, wParam, lParam));
			}
			break;

		case WM_CLOSE:
			DestroyWindow(hWnd);
			break;

		case WM_DESTROY:
			PostQuitMessage(0);
			break;

		case WM_NP2CMD:
			switch(LOWORD(lParam)) {
				case NP2CMD_EXIT:
					np2quitmsg = 1;
					PostQuitMessage(0);
					break;

				case NP2CMD_EXIT2:
					np2quitmsg = 2;
					PostQuitMessage(0);
					break;

				case NP2CMD_RESET:
					pccore_cfgupdate();
					pccore_reset();
					break;
			}
			break;

		default:
			return(DefWindowProc(hWnd, msg, wParam, lParam));
	}
	return(0L);
}
Beispiel #2
0
void CPUCALL steptrap(UINT cs, UINT32 eip) {

//	TRACEOUT(("%.4x:%.4x", cs, eip));

#if IPTRACE
	trcs[trpos & (IPTRACE - 1)] = cs;
	treip[trpos & (IPTRACE - 1)] = eip;
	trpos++;
#endif


// ---- ここにトラップ条件コードを書きます
{
	static UINT32 x;
	UINT32 tmp;
	tmp = *(UINT32 *)(mem + 0x7ade1);
	if (x != tmp) {
		TRACEOUT(("%.4x:%.4x: %.8x -> %.8x", cs, eip, x, tmp));
		x = tmp;
	}
}

	return;

	if ((cs == 0x1ea) && (eip == 0x0617)) {
		TRACEOUT(("ES:BP+1 = %.2x", CPU_AL));
	}
	return;

	if ((cs == 0x0601) && (eip == 0x025c)) {
		TRACEOUT(("INT-D2 AX=%.4x BX=%.4x DX=%.4x", CPU_AX, CPU_BX, CPU_DX));
	}
	return;

// if (cs4231.intflag) TRACEOUT(("%.4x:%.4x", cs, eip));
	if (cs == 0x1311) TRACEOUT(("%.4x:%.4x", cs, eip));
	if (cs == 0x0d77) TRACEOUT(("%.4x:%.4x", cs, eip));
	if (cs == 0x0f5d) TRACEOUT(("%.4x:%.4x", cs, eip));
	if (cs == 0x0e91) TRACEOUT(("%.4x:%.4x", cs, eip));

#if 0
{
	static UINT tmp = 0;
	if (tmp != *(UINT16 *)(mem + 0xa0000 + 18 * 2)) {
		TRACEOUT(("change text %.4x -> %.4x at %.4x:%.4x", tmp, *(UINT16 *)(mem + 0xa0000 + 18 * 2), cs, eip));
		tmp = *(UINT16 *)(mem + 0xa0000 + 18 * 2);
		if (tmp == 0x4303) {
			steptrap_hisfileout();
		}
	}
}
#endif


	// IDEテスト用
#if 0
	if ((cs == 0x1300) && (eip == 0x1E97)) {
		TRACEOUT(("-------- NECCD: function: %.2x", CPU_AL));
	}
	if (cs == 0xdf6) TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP));
#endif
#if 1
	if ((cs == 0x0620) && (eip == 0x1E97)) {
		TRACEOUT(("-------- NECCD: function: %.2x", CPU_AL));
	}
#endif

	return;

#if 0
	if (cs == 0x05a0) {
		if (eip == 0xe2) {
			TRACEOUT(("result: %.2x", CPU_AH));
		}
	}
#endif
#if 0
	if (cs == 0x0000) {
		if (eip == 0x1191) {
			char buf[10];
			int i;
			for (i=0; i<6; i++) {
				buf[i] = MEML_READ8(0x1000, CPU_BX + i);
			}
			buf[6] = '\0';
			TRACEOUT(("load: %s", buf));
		}
		if (eip == 0x1265) {
			TRACEOUT(("%.4x:%.4x addr=%.4x ret=%.4x",
									cs, eip, CPU_DX,
										MEML_READ16(CPU_SS, CPU_SP)));
		}
	}
#endif
#if 0
	if (cs == 0x0080) {
		if (eip == 0x052A) {
			UINT i;
			UINT addr;
			char fname[9];
			addr = MEML_READ16(CPU_SS, CPU_BP + 4);
			for (i=0; i<8; i++) {
				fname[i] = MEML_READ8(CPU_DS, addr + i);
			}
			fname[8] = 0;
			TRACEOUT(("%.4x:%.4x play... addr:%.4x %s",
											cs, eip, addr, fname));
		}
	}
#endif
#if 0
	if (cs == 0x800) {
		if (eip == 0x017A) {
			TRACEOUT(("%.4x:%.4x solve... DS=%.4x SIZE=%.4x KEY=%.4x",
								cs, eip,
								MEML_READ16(CPU_SS, CPU_BP - 0x06),
								CPU_DX,
								MEML_READ16(CPU_SS, CPU_BP - 0x08)));
		}
	}
#endif
#if 0
	if (cs == 0x3d52) {
		if (eip == 0x4A57) {
			TRACEOUT(("%.4x:%.4x %.4x:%.4x/%.4x/%.4x",
								CPU_DX, CPU_BX, CPU_DS,
								MEML_READ16(CPU_SS, CPU_BP + 0x06),
								MEML_READ16(CPU_SS, CPU_BP + 0x08),
								MEML_READ16(CPU_SS, CPU_BP + 0x0a)));
		}
		if (eip == 0x4BF8) {
			debugsub_memorydump();
		}
#if 0
		if (eip == 0x4B7A) {
			TRACEOUT(("datum = %x", CPU_AX));
		}
		if (eip == 0x4B87) {
			TRACEOUT(("leng = %x", CPU_AX));
		}
		if (eip == 0x4BD5) {
			TRACEOUT(("%.4x:%.4x <- %.2x[%.4x]",
						CPU_ES, CPU_BX, CPU_AL, CPU_DI));
		}
#endif
	}
#endif
#if 0	// DC
	if (cs == 0x1000) {
		if (eip == 0x5924) {
			TRACEOUT(("%.4x:%.4x -> %.4x:%.4x", cs, eip,
							MEML_READ16(CPU_DS, 0x6846),
							MEML_READ16(CPU_DS, 0x6848)));
		}
	}
#endif
#if 0	// 羅針盤
	if (cs == 0x60) {
		if (eip == 0xADF9) {
			TRACEOUT(("%.4x:%.4x -> %.4x:%.4x:%.4x", cs, eip, CPU_BX, CPU_SI, CPU_AX));
		}
		else if (eip == 0xC7E1) {
			TRACEOUT(("%.4x:%.4x -> %.4x:%.4x", cs, eip, CPU_ES, CPU_BX));
		}
	}
#endif
#if 0
	if (cs == 0x60) {
		if (eip == 0x8AC2) {
			UINT pos = CPU_SI + (CPU_AX * 6);
			TRACEOUT(("%.4x:%.4x -> %.4x:%.4x-%.4x:%.4x [%.2x %.2x %.2x %.2x %.2x %.2x]", cs, eip, CPU_SI, CPU_AX, CPU_DX, CPU_DI,
									MEML_READ8(CPU_DS, pos+0),
									MEML_READ8(CPU_DS, pos+1),
									MEML_READ8(CPU_DS, pos+2),
									MEML_READ8(CPU_DS, pos+3),
									MEML_READ8(CPU_DS, pos+4),
									MEML_READ8(CPU_DS, pos+5)));
		}
	}
#endif
}