#include <stdio.h>

long get_pci_io(unsigned VENDOR_ID_KOLTER, unsigned PRODUKT_ID_KOLTER)
{
//union REGS inregs, outregs;
unsigned int 	bus;
unsigned int 	slot_no;
long			io_adr; 
unsigned		v_id, p_id;
io_adr 			= 0;
v_id			= 0;
p_id			= 0;

// alle Produkt-ID
for (PRODUKT_ID_KOLTER = 0; (PRODUKT_ID_KOLTER < 256 ); PRODUKT_ID_KOLTER++)
{
// such auf dem bus
  for (bus = 0; (bus < 7 ) && (io_adr == 0); bus++)
  {
  	for (slot_no=0;(slot_no<=0x00F8) && (io_adr==0);slot_no+=8)
  	{
	__asm mov bx,word ptr (slot_no)
	__asm mov ax,word ptr (0xb109)
  	__asm mov di,word ptr (0x0000)
	__asm INT (0x1a)
	__asm mov v_id,ecx

// ist KOLTER Karte mit Vendor-ID 
	if (v_id == VENDOR_ID_KOLTER)
	{
	__asm mov bx,word ptr (slot_no)
	__asm mov di,word ptr (0x0002)
	__asm mov ax,word ptr (0xb109)
	__asm INT(0x1a)
	__asm mov p_id,ecx

// ist KOLTER Produkt-ID
	if (p_id == PRODUKT_ID_KOLTER)
	{
	__asm mov ax,word ptr (0xb109)
	__asm mov bx,word ptr (slot_no)
	__asm mov di,word ptr (PRODUKT_ID_KOLTER)
	__asm INT (0x1a)
	__asm mov io_adr,ecx	
	}
  	}
	}
  }
}

io_adr &= 0xfff0; 	/* I/O-Adresse wird maskiert */

if ((p_id >= 0) && (v_id == 0x1001)) 
	{ 
	return (io_adr); 
	}
  else
	{
	io_adr = -2;
	return (-2);
	}
}