📄 victest.c
字号:
case WM_TIMER:
if (wParam == TimerID) {
if (ActiveHW) {
if (CurrIRQNumber>0 && CurrIRQNumber<16 && !IsIRQMasked(HwCtrl)) {
Ticks ++;
SetDlgItemInt(hDlg, IDE_IRQCOUNT , IRQCounter, FALSE);
SetDlgItemInt(hDlg, IDE_IRQHANDLED, Flag_Intr, FALSE);
SetDlgItemInt(hDlg, IDE_IRQTIME , Ticks / 10, FALSE);
sprintf(buffer, "%02Xh", Scan_Code);
SetDlgItemText(hDlg, IDE_SCAN, buffer);
sprintf(buffer, "%02Xh", Data_Reg );
SetDlgItemText(hDlg, IDE_DATA_REG, buffer);
sprintf(buffer, "%02Xh", Status_Reg);
SetDlgItemText(hDlg, IDE_STATUS_REG, buffer);
}
for (i=0; i<17; i++) {
a = GetPin(HwCtrl,i+1)?1:0;
Id = IDC_RPIN1+i;
CheckDlgButton(
hDlg,Id,a);
}
CheckDlgButton(hDlg,IDC_ACKWL,GetLPTAckwl(HwCtrl)?1:0);
CheckDlgButton(hDlg,IDC_BUSY,GetLPTBusy(HwCtrl)?1:0);
CheckDlgButton(hDlg,IDC_ERROR,GetLPTError(HwCtrl)?1:0);
CheckDlgButton(hDlg,IDC_PE,GetLPTPaperEnd(HwCtrl)?1:0);
CheckDlgButton(hDlg,IDC_SLCT,GetLPTSlct(HwCtrl)?1:0);
};
}
break;
case WM_COMMAND:
switch (wParam) {
case IDC_WPIN1:
case IDC_WPIN2:
case IDC_WPIN3:
case IDC_WPIN4:
case IDC_WPIN5:
case IDC_WPIN6:
case IDC_WPIN7:
case IDC_WPIN8:
case IDC_WPIN9:
case IDC_WPIN10:
case IDC_WPIN11:
case IDC_WPIN12:
case IDC_WPIN13:
case IDC_WPIN14:
case IDC_WPIN15:
case IDC_WPIN16:
case IDC_WPIN17:
if (ActiveHW) {
for (nPin=0; nPin<17; nPin++) {
SetPin(HwCtrl,nPin+1,IsDlgButtonChecked(hDlg,IDC_WPIN1+nPin)>0);
}
}
break;
case IDC_LPT_NUMBER:
ShowButtons(hDlg);
break;
case IDC_INIT:
LPTInit(HwCtrl);
ShowButtons(hDlg);
break;
case IDC_LPT_IRQ:
if (IsDlgButtonChecked(hDlg,IDC_LPT_IRQ))
SetPortByte(HwCtrl,GetLPTBasePort(HwCtrl)+2,0x10);
else
SetPortByte(HwCtrl,GetLPTBasePort(HwCtrl)+2,0);
ShowButtons(hDlg);
break;
case IDB_DRIVER:
CheckDlgButton(hDlg,IDC_HARD,1);
if (ActiveHW) {
SetPortByte(HwCtrl,GetLPTBasePort(HwCtrl)+2,0);
CheckDlgButton(hDlg,IDC_UNMASK,0);
CheckDlgButton(hDlg,IDC_LPT_IRQ,0);
HwCtrl = CloseTVicHW32(HwCtrl);
PointPhys = NULL;
ActiveHW = FALSE;
} else {
if ( HwCtrl = OpenTVicHW32(HwCtrl) ) {
ActiveHW = TRUE;
SetHardAccess( HwCtrl,TRUE );
for (nPin=0; nPin<17; nPin++) {
SetPin(HwCtrl,nPin+1,(BOOL)FALSE);
CheckDlgButton(hDlg,IDC_RPIN1+nPin-1,0);
CheckDlgButton(hDlg,IDC_WPIN1+nPin-1,0);
}
} else {
ActiveHW = FALSE;
MessageBox(hDlg, "Driver VICHWxx not found !", "Error",
MB_APPLMODAL | MB_OK | MB_ICONERROR);
}
}
ShowButtons(hDlg);
break;
case IDB_SETMEM:
GetDlgItemText(hDlg, IDE_MEMADDR, buffer, 40);
PhysAddr = HexToInt(buffer);
sprintf(buffer, "%08X", PhysAddr);
SetDlgItemText(hDlg, IDE_MEMADDR, buffer);
PointPhys = (void*)MapPhysToLinear(HwCtrl,PhysAddr, 256);
sprintf(buffer, "%08X", PointPhys);
SetDlgItemText(hDlg, IDE_MEMADDR2, buffer);
ShowButtons(hDlg);
break;
case IDB_READMEM:
if (PointPhys != NULL) {
memcpy(membuffer, (BYTE*) PointPhys, 256);
SendDlgItemMessage(hDlg, IDL_MEMDUMP, LB_RESETCONTENT, 0, 0);
for (i=0; i<16; i++) {
PrintMemLine(buffer, (LPSTR) &membuffer[i*16], 16, 16, PhysAddr + (DWORD)(i*16));
SendDlgItemMessage(hDlg, IDL_MEMDUMP, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR)buffer);
}
}
break;
case IDB_FILLMEM:
if (PointPhys != NULL) {
for (i=0; i<256; i++)
((BYTE*)PointPhys)[i] = (BYTE) i;
PostMessage(hDlg, WM_COMMAND, IDB_READMEM, 0);
}
break;
case IDB_READ:
for (i=0; i<4; i++) {
GetDlgItemText(hDlg, IDE_ADDR01 + i, buffer, 40);
a = (WORD) HexToInt(buffer);
sprintf(buffer, "%02X", GetPortByte(HwCtrl, a ));
SetDlgItemText(hDlg, IDE_DATA01 + i, buffer);
}
break;
case IDB_WRITE:
for (i=0; i<4; i++) {
GetDlgItemText(hDlg, IDE_ADDR01 + i, buffer, 40);
a = (WORD) HexToInt(buffer);
GetDlgItemText(hDlg, IDE_DATA01 + i, buffer, 40);
d = (BYTE) HexToInt(buffer);
SetPortByte(HwCtrl,a, d);
}
break;
case IDC_HARD:
SetHardAccess(HwCtrl, (bool)((SendDlgItemMessage(hDlg, IDC_HARD, BM_GETSTATE, 0, 0) & 1) != 0) );
break;
case IDC_UNMASK:
Flag_Intr = 0;
Ticks = 0;
if (ActiveHW) {
if ( !IsIRQMasked(HwCtrl) ) {
SetPortByte(HwCtrl,GetLPTBasePort(HwCtrl)+2,0);
MaskIRQ(HwCtrl);
EnableWindow(GetDlgItem(hDlg,IDE_IRQNUMBER),TRUE);
} else {
CurrIRQNumber = (WORD) GetDlgItemInt(hDlg, IDE_IRQNUMBER, NULL, FALSE);
SetIRQ(HwCtrl,(BYTE)CurrIRQNumber, HWCtrlHwInterrupt);
EnableWindow(GetDlgItem(hDlg,IDE_IRQNUMBER),FALSE);
UnmaskIRQ(HwCtrl);
}
}
ShowButtons(hDlg);
break;
case IDM_ABOUT:
lpAbtProc = (DLGPROC) MakeProcInstance( (FARPROC) AboutDialogProc, hInst);
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hDlgMain, lpAbtProc);
break;
case IDM_EXIT:
PostMessage(GetParent(hDlg),WM_CLOSE, (WPARAM)0, (LPARAM)0);
break;
default:
return (FALSE);
}
break;
case WM_DESTROY:
if (TimerID)
KillTimer(hDlg, TimerID);
if (ActiveHW) {
HwCtrl = CloseTVicHW32(HwCtrl);
}
if (hFontMemdump)
DeleteObject(hFontMemdump);
return TRUE;
}
return (FALSE);
}
//----------------------------------------------------------------------------
void ShowButtons(HWND hDlg)
{
unsigned char buffer[255];
WORD nLPTnew, nLPT;
WORD NumLPTs;
//azzera la checkbox dell'accesso diretto
//SendDlgItemMessage(hDlg, IDC_HARD, BM_SETCHECK, (BOOL)TestHardAccess(), 0L);
if (ActiveHW) {
NumLPTs = GetLPTNumPorts(HwCtrl);
SetDlgItemInt(hDlg, IDC_LPTS, NumLPTs, FALSE);
nLPTnew = GetDlgItemInt(hDlg, IDC_LPT_NUMBER, NULL, FALSE);
nLPT = (WORD)GetLPTNumber(HwCtrl);
if (nLPTnew != nLPT) {
if (nLPTnew<=0 || nLPTnew>NumLPTs) {
SetDlgItemInt(hDlg, IDC_LPT_NUMBER,nLPT, FALSE);
MessageBeep(0);
}
else
SetLPTNumber(HwCtrl,nLPTnew);
}
sprintf(buffer, "%03Xh", GetLPTBasePort(HwCtrl));
SendDlgItemMessage(hDlg, IDC_BASE, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)buffer);
SendDlgItemMessage(hDlg, IDB_DRIVER, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)"&Close Driver");
} else {
SendDlgItemMessage(hDlg, IDB_DRIVER, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)"&Open Driver");
}
EnableWindow(GetDlgItem(hDlg, IDB_READ) , (BOOL) ActiveHW);
EnableWindow(GetDlgItem(hDlg, IDB_WRITE) , (BOOL) ActiveHW);
EnableWindow(GetDlgItem(hDlg, IDB_SETMEM), (BOOL) ActiveHW);
EnableWindow(GetDlgItem(hDlg, IDB_READMEM), (BOOL)(ActiveHW && (PointPhys != NULL)));
EnableWindow(GetDlgItem(hDlg, IDB_FILLMEM), (BOOL)(ActiveHW && (PointPhys != NULL)));
EnableWindow(GetDlgItem(hDlg, IDC_UNMASK), (BOOL)(ActiveHW && IsIRQMasked(HwCtrl)));
EnableWindow(GetDlgItem(hDlg, IDC_BASE), (BOOL) ActiveHW);
EnableWindow(GetDlgItem(hDlg, IDC_LPT_NUMBER), (BOOL) ActiveHW);
EnableWindow(GetDlgItem(hDlg, IDC_LPT_IRQ), (BOOL) ActiveHW);
EnableWindow(GetDlgItem(hDlg, IDC_INIT), (BOOL) ActiveHW);
EnableWindow(GetDlgItem(hDlg, IDC_LPTS), (BOOL) ActiveHW);
}
//----------------------------------------------------------------------------
BOOL CALLBACK AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_INITDIALOG:
return TRUE;
case WM_SYSCOMMAND:
SendMessage(hDlgMain, message, wParam, lParam);
break;
case WM_COMMAND:
EndDialog(hDlg, TRUE);
break;
default:
return FALSE;
}
return(TRUE);
}
//--------- END OF FILE -----------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -