/* ----------------------------------------------------------- */ /* DEMO 6: Find card number */ /* Comoiler: Borland C++ 3.1 under mode large */ /* step 1: run demo7.exe */ /* step 2: connect a 20-pin flat cable to CON1&CON2 of card_? */ /* step 3: The card number is shown in screen as TEST OK */ /* ----------------------------------------------------------- */ #include "P1002.H" WORD P1002_Do(WORD wDo); void P1002_Di(WORD *wDi); WORD P1002_Select8254(char cChip); WORD P1002_C0(char cConfig, char cLow, char cHigh); WORD P1002_C1(char cConfig, char cLow, char cHigh); WORD P1002_C2(char cConfig, char cLow, char cHigh); WORD wBaseAddr,wIrq,wPLX; Test_Card(int card); delay_one_ms(void); void main() { int i,j,k; WORD wBoards,wRetVal; char c; clrscr(); wRetVal=P1002_DriverInit(&wBoards); printf("\n(1) Threr are %d PCI-1002 Cards in this PC\n",wBoards); if ( wBoards==0 ) { putch(0x07); putch(0x07); putch(0x07); printf("(2) There are no PCI-1002 card in this PC !!!\n"); exit(0); } printf("\n(2) Show the Configuration Space of all PCI-1002:"); for(i=0; i count 0x0fa0 = count 4000 = 0.5 ms */ /* down count from 4000 --> 3999 --> ..... --> 1 --> 0 --> 0xfff */ delay_one_ms() { int low,high; P1002_Select8254(0); /* select 8254-chip-0 */ P1002_C0(0x30,0xa0,0x0f); /* CH-1,mode-0 down count 4000 */ for (;;) { outp(wBaseAddr+0x0C,0x00); /* latch counter_0 */ low =inp(wBaseAddr); high=inp(wBaseAddr); if (high>0x20) return; } } /* -------------------------------------------------------------------- */ WORD P1002_Select8254(char cChip) { outp(wBaseAddr+0x10,cChip); return(NoError); } WORD P1002_C0(char cConfig, char cLow, char cHigh) { outp(wBaseAddr+0x0C,cConfig); outp(wBaseAddr ,cLow); outp(wBaseAddr ,cHigh); return(NoError); } WORD P1002_C1(char cConfig, char cLow, char cHigh) { outp(wBaseAddr+0x0C,cConfig); outp(wBaseAddr+4 ,cLow); outp(wBaseAddr+4 ,cHigh); return(NoError); } WORD P1002_C2(char cConfig, char cLow, char cHigh) { outp(wBaseAddr+0x0C,cConfig); outp(wBaseAddr+8 ,cLow); outp(wBaseAddr+8 ,cHigh); return(NoError); }