//--------------------------------------------------------------------------- #include #pragma hdrstop #include "cbsampu.h" #include "ACCES32.h" //--------------------------------------------------------------------------- #pragma resource "*.dfm" #define MAXNUMCONFIG 255 TMain *Main; int BaseAddresses[255]; //--------------------------------------------------------------------------- __fastcall TMain::TMain(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TMain::ExitButtonClick(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TMain::ReadByteButtonClick(TObject *Sender) { unsigned long PortNumber = StrToInt("0x" + AddressEdit->Text);//StrToInt("0x" + AddressList->Text);// collect user's port selection unsigned char Value = InPortB(PortNumber); ValueReadLabel->Caption = IntToHex(Value, 2); // display Byte StatusLabel->Caption = "Read was successful"; } //--------------------------------------------------------------------------- void __fastcall TMain::ReadWordButtonClick(TObject *Sender) { unsigned long PortNumber = StrToInt("0x" + AddressEdit->Text);//StrToInt("0x" + AddressList->Text);// collect user's port selection unsigned short Value = InPort(PortNumber); ValueReadLabel->Caption = IntToHex(Value, 4); // display Word StatusLabel->Caption = "Read was successful"; } //--------------------------------------------------------------------------- void __fastcall TMain::WriteByteButtonClick(TObject *Sender) { unsigned long PortNumber = StrToInt("0x" + AddressEdit->Text); // collect user's port # unsigned char Value = StrToInt("0x" + ValueWriteEdit->Text); // collect user's value Value = Value & 0xFF; //Make sure Value is 8 Bit (Byte) OutPortB(PortNumber, Value); StatusLabel->Caption = "Write was successful"; } //--------------------------------------------------------------------------- void __fastcall TMain::WriteWordButtonClick(TObject *Sender) { unsigned long PortNumber = StrToInt("0x" + AddressEdit->Text); // collect user's port # unsigned short Value = StrToInt("0x" + ValueWriteEdit->Text); // collect user's value OutPort(PortNumber, Value); StatusLabel->Caption = "Write was successful"; } //--------------------------------------------------------------------------- AnsiString GetCompanyKey() { AnsiString S; TRegistry *Registry = new TRegistry; try { Registry->RootKey = HKEY_LOCAL_MACHINE; // False because we do not want to create it if it doesn't exist Registry->OpenKey("Software\\PCIFind",false); S = Registry->ReadString("Company"); } catch(...) {} delete Registry; return S; } long unsigned GetHardwareValue(AnsiString Name) { long unsigned V = 0L; TRegistry *Registry = new TRegistry; try { Registry->RootKey = HKEY_LOCAL_MACHINE; // False because we do not want to create it if it doesn't exist Registry->OpenKey("Software\\PCIFind\\NTioPCI\\Parameters",false); V = Registry->ReadInteger(Name); } catch(...) { V = 0L; } delete Registry; return V; } long unsigned GetHardwareBinary(AnsiString Name, byte *data, unsigned long size) { long unsigned V; TRegistry *Registry = new TRegistry; try { Registry->RootKey = HKEY_LOCAL_MACHINE; // False because we do not want to create it if it doesn't exist Registry->OpenKey("Software\\PCIFind\\NTioPCI\\Parameters", false); V = Registry->ReadBinaryData(Name, data, size); } catch(...) { } delete Registry; return V; } void __fastcall TMain::FormCreate(TObject *Sender) { int num, i; AnsiString CompanyKey = "Software\\" + GetCompanyKey() + "\\Cardlist"; TPCI_COMMON_CONFIG buf[MAXNUMCONFIG]; TRegistry *Registry = new TRegistry; AnsiString TempString = ""; int BaseIndexOffset = 0; if (InPortB(0x61) == 0xAA55) { Application->MessageBox("ACCESNT.SYS not detected. Please copy ACCESNT.SYS into [NT]/system32/drivers and re-run this sample.", "Warning", IDOK); } num = GetHardwareValue("NumDevices"); if (num > 0) GetHardwareBinary("PCICommonConfig", (byte*)buf, sizeof(TPCI_COMMON_CONFIG) * num); Registry->RootKey = HKEY_LOCAL_MACHINE; for (i = 0; i < num; i++) { if (buf[i].VendorID == 0x494F) { try { // False because we do not want to create it if it doesn't exist Registry->OpenKey(CompanyKey, false); TempString = Registry->ReadString(IntToHex(buf[i].DeviceID, 4) + '$'); if (TempString.Pos("COM2") != 0) BaseIndexOffset = 2; else BaseIndexOffset = 0; TempString = Registry->ReadString(IntToHex(buf[i].DeviceID, 4)); buf[i].BaseAddresses[2] &= 0xFFFE; buf[i].BaseAddresses[3] &= 0xFFFE; buf[i].BaseAddresses[4] &= 0xFFFE; buf[i].BaseAddresses[5] &= 0xFFFE; if (buf[i].BaseAddresses[2 + BaseIndexOffset] > 0) { // if the card has any base addresses AddressList->Items->Add(TempString + ": " + IntToHex((int)buf[i].BaseAddresses[2 + BaseIndexOffset], 4)); BaseAddresses[AddressList->Items->Count - 1] = buf[i].BaseAddresses[2 + BaseIndexOffset]; } if (buf[i].BaseAddresses[3 + BaseIndexOffset] > 0) { AddressList->Items->Add(TempString + ": " + IntToHex((int)buf[i].BaseAddresses[3+BaseIndexOffset], 4)); BaseAddresses[AddressList->Items->Count - 1] = buf[i].BaseAddresses[3 + BaseIndexOffset]; } if (BaseIndexOffset == 0) { if (buf[i].BaseAddresses[4] > 0) { AddressList->Items->Add(TempString + ": " + IntToHex((int)buf[i].BaseAddresses[4], 4)); BaseAddresses[AddressList->Items->Count - 1] = buf[i].BaseAddresses[4]; } if (buf[i].BaseAddresses[5] > 0) { AddressList->Items->Add(TempString + ": " + IntToHex((int)buf[i].BaseAddresses[5], 4)); BaseAddresses[AddressList->Items->Count - 1] = buf[i].BaseAddresses[5]; } } // end if BaseIndexOffset } // end try catch ( ... ) { } // end try/catch Registry->CloseKey(); } // end if ACCES Card } // end for i delete Registry; AddressList->ItemIndex = 0; AddressEdit->Text = IntToHex(BaseAddresses[0], 4); } //--------------------------------------------------------------------------- void __fastcall TMain::AddressListChange(TObject *Sender) { AddressEdit->Text = IntToHex(BaseAddresses[AddressList->ItemIndex], 4); } // end AddressListChange //---------------------------------------------------------------------------