VOGONS


First post, by mkarcher

User metadata
Rank l33t
Rank
l33t

You can use the "Add Hardware Wizard" in Windows 2000 to add the old IBM Token Ring adapters to Windows 2000. But I didn't manage to get it work. I analyzed the root cause, and it seems that at least the non-PnP IBM Token Ring cards can not be correctly operated by the Windows 2000 driver - unless I miss something important about the driver architecture.

The problem about the Windows 2000 driver is that the resource model of Windows 2000 doesn't match the approach taken by the IBM driver: In Windows 2000, the resources used by a device must be correctly described in the registry, and the driver is unable to claim resources not listed in the registry. The resource list in the registry is what you see in the "Resources" tab in the device manager. You can not enter any resources in the device manager that conflict with the resources Windows 2000 auto-detected. This yields two problems with the IBM Token Ring driver:

First, the IBM Token Ring card uses an 8KB ISA memory area for both a boot/initialization ROM (up to 7.5KB in size) and a MMIO area for card identification/initialization (the last 512 bytes). Windows 2000 correctly detects the ISA BIOS ROM extension (which is 6KB on the 3c619), and reserves this range as "not usable for ISA memory resources". Yet the .INF file IBMTOK.INF claims that there is a 8KB resource to be assigned to that card. The consequence is that the correct setting of that resource is rejected by Windows 2000 as conflicting with the ROM extension.

Secondly, the IBM Token Ring driver is clearly programmed for a model where the driver is meant to auto-discover and auto-configure the hardware resources. So the only thing the driver actually uses from the resources assigned in the device manager is the ROM base address (the second memory resource). All other resources are either auto-detected (like the I/O port), read from the card (like the shared memory window size or the IRQ number) or chosen by the driver (like the shared memory window address). Yet, if the resources detected/chosen by the driver don't match the settings in the device manager, Windows 2000 declines to assign these resources to the driver and initialization fails.

So I patched the driver and the .INF file to have only the last 512 bytes of the ROM/MMIO area as resource to reserve. By that patch, I damaged the PCMCIA code path of the driver, but as I currently care about legacy ISA only, I don't mind that. To use that driver with a IBM (or 3com) Token Ring card, you need to add the driver by hand, and chose resources like this:

  • Base the resources on "base configuration 0000" if you use a 16K memory window, "base configuration 0001" if you use a 32K memory window, "base configuration 0002" if you use a 64K memory window or "base configuration 0003" if you use an 8K memory window. The size of the window is set by jumpers/dip switches.
  • Chose base address (A20/A24) as configured on the card (by jumpers/dip switches)
  • Chose IRQ as configured on the card. (by jumpers/dip switches)
  • Chose the second memory area to the base address of the card + 1E00, so if the card is jumpered to CC00:0 (the suggested setting), chose CDE00..CDFFF
  • Chose the first memory area as the driver would choose it: Use the first possible setting that is after the second memory area. If you use the suggested setting CC00:0 for the ROM and the suggested memory window size of 16KB, this would be D0000..D3FFF. The setting preceeding that would be CC000..CFFFF, which is not after CDE00..CDFFF.
  • If there is no possible value for the first memory area after the second memory area, use the last setting before instead. So for example if you use the "suggested alternate ROM address" DC00:0, and thus chose the second area to be DDE00..DDFFF, the correct value for the 16KB window would be D8000..DBFFF.

To use the whole 64KB of RAM the IBM 16/4 adapter or the 3c619 provide, you need to choose a window size of 16KB (the driver uses bank switching in that case) or 64KB (the driver accesses the memory without need for banking). Possibly 32KB would work, too, but the banking still happens in 4 banks of 16KB each, and the second half isn't used.

I attach a replacement .INF file and a patch file (in IDA .DIF format - you can find patch application tools for that on the internet) to this post. IBMSGNET.DLL is provided with Windows 2000. I do not attach the whole driver, which is still copyrighted by Microsoft. The original file the patch needs to be applied to is IBMTOK.SYS as provided with Windows 2000, SP4: 100112 bytes, version 12.23.01.50. The patched file needs to be named IBMTOKMK.SYS (to avoid conflicts between the original and the patched driver). The INF file clearly names all devices provided by the patched driver as "Patched ..." to avoid confusion between the original Microsoft driver and my patched driver.