VOGONS


First post, by JAKra85

User metadata
Rank Newbie
Rank
Newbie

I've encountered an error and spent many hours in solving it, will post the details here for future reference.

-=Everything below is summarized with the help of AI.=-

The Symptoms:
When setting up an original IBM PC XT (5160) with a 3Com EtherLink III (3C509B) network card (running Nestor’s 8088-patched packet driver) and an original IBM 1816101 (Xebec) MFM Hard Disk Controller, the following behavior occurs:
1)
DHCP.EXE and SNTP.EXE work flawlessly.
2)
The network card configuration utility (3CCNFG.EXE) opens fine on a clean boot, and the EEPROM can be saved to a safe 8-bit IRQ (like IRQ 3 or 5) and a clean base I/O address (like 0x210).
3)
As soon as the packet driver is loaded (3C509.COM 0x60), running 3CCNFG.EXE instantly freezes the system. Furthermore, trying to download/upload data via mTCP FTPSRV.EXE causes a hard lockup in a second or a couple of light directory commands.

The Root Cause: 10-bit Address Aliasing & the Untouchable 3Com ID Port

The issue is a hardware clash caused by a combination of the IBM XT's 8-bit ISA bus limitations and the physical ASIC architecture of the 3Com 3C509.

1)
The 10-bit Address Aliasing (Ghosting) Bug
The original IBM PC XT motherboard was designed to look only at the first 10 bits of an I/O address to decode peripherals, completely ignoring the upper 6 bits.

In a 16-bit address, hexadecimal 0x110 and 0x310 are actually written like this:
0x110 in binary is: 0000 0001 0001 0000
0x310 in binary is: 0000 0011 0001 0000
On the IBM XT's 8-bit ISA bus, only address lines A0 through A9 are connected to decode standard I/O devices. This means the motherboard reads only the lowest 10 bits of the address and completely ignores the highest 6 bits (lines A10 through A15).
If we look strictly at the lowest 10 bits (counting from the right)and we strip the top 6 bits (which the XT motherboard is blind to), both addresses resolve to the exact same 10-bit footprint: 01 0001 0000.
------Ignored (6 bits) │ Decoded by XT (10 bits)
Port 0x110: 0 0 0 0 0 0 │ 0 1 0 0 0 1 0 0 0 0
Port 0x310: 0 0 0 0 0 1 │ 0 1 0 0 0 1 0 0 0 0

Because of this, any write operation sent to 0x110 by a network utility physically echoes/ghosts onto 0x310 across the ISA bus.

2)
The Hardcoded 3Com ID Port
The 3C509 is a jumperless card that utilizes a specialized "ASIC ID Port pattern match" routine to wake up from its dormant state or re-verify itself during high-traffic buffer states. This ID Port is hardcoded into the silicon chip at 0x110 and cannot be disabled or re-routed by any configuration utility.

3)
The Xebec MFM Controller Matrix
The IBM 1816101 (Xebec) MFM controller is a hardwired factory-default board locked entirely to base I/O address 0x320 (monitoring the range of 0x320 to 0x32F). Because of its early 8-bit design, its address decoding matrix listens broadly to data cycles hitting the 0x300–0x32F block.

4)
Why DHCP Works, but FTP/3CCNFG Crashes the System
- DHCP/SNTP: These are tiny, instantaneous network packets. They push data to the network card’s operational buffer (e.g., 0x240), bypassing the ID Port entirely after initialization.
- 3CCNFG.EXE Post-Driver: When the driver is loaded, the card is active. Running 3CCNFG.EXE triggers a secondary query sweep to the hardcoded ID Port (0x110). Due to the XT's 10-bit aliasing, this pattern sequence is simultaneously slammed right into the Xebec controller's 0x310 command registers. The MFM controller misinterprets these network bytes as a malformed disk command, enters an unhandled loop, and permanently locks up the ISA bus.
- FTP File Transfers: During a continuous, heavy TCP data stream, the 3Com card's internal FIFO buffer fills up or hits a network collision. The 3C509 ASIC automatically fires an internal synchronization check back through its 0x110 ID Port to check its bus state. The second it touches 0x110, it injects garbage data into the active Xebec disk writing sequence, corrupting the disk controller state and freezing the CPU.

The Permanent Solutions
Since neither the 3Com hardware ID Port (0x110) nor the stock IBM/Xebec MFM controller (0x320) can be shifted via software, you must modify the hardware configuration to isolate the address blocks.

-=AI summary over=-

I have replaced the IBM/Xebec MFM Controller with a Western Digital WD1002A-WX1 one. Made in 1985, so somewhat era-correct.
It would have been nice to leave the original Xebec controller... oh well...
I can now copy data easily from my modern Win11 PC to the IBM with XTFTPSRV.EXE and other network functions will no longer crash the system.

Retro PC Gallery:
https://docs.google.com/document/d/1ara32t4rV … nU/edit?tab=t.0

Reply 1 of 25, by jakethompson1

User metadata
Rank l33t
Rank
l33t

0x310 and 0x110 both fit in 10 bits, so there is more to it than that.

Reply 2 of 25, by JAKra85

User metadata
Rank Newbie
Rank
Newbie
jakethompson1 wrote on 2026-07-14, 15:13:

0x310 and 0x110 both fit in 10 bits, so there is more to it than that.

They fit and they are exactly the same. 😀

In a 16-bit address, hexadecimal 0x110 and 0x310 are written like this in binary:
0x110 is: 0000 0001 0001 0000
0x310 is: 0000 0011 0001 0000
Since the motherboard reads only the lowest 10 bits of the address, they look like this:
0x110 is: 01 0001 0000.
0x310 is: 01 0001 0000.

Retro PC Gallery:
https://docs.google.com/document/d/1ara32t4rV … nU/edit?tab=t.0

Reply 3 of 25, by Grzyb

User metadata
Rank l33t
Rank
l33t

10-bit I/O decoding allows for addresses up to 0x3FF.

0x110 can't clash with 0x310.

0x110 will clash with 0x510, 0x910, 0xD10, and so on.

Never trust the Artificial Idiocy!

In 2003, I voted in favour of joining the European Union. However, due to later developments - especially the restrictions on cash usage - I have withdrawn my support. DOWN WITH THE EU!

Reply 4 of 25, by Grzyb

User metadata
Rank l33t
Rank
l33t
JAKra85 wrote on 2026-07-14, 14:44:

safe 8-bit IRQ (like IRQ 3 or 5)

XT HDD controllers use IRQ 5 - it's *not* a safe option for a NIC!

IRQ 3 is OK, but only if there's no COM2 port, or there's nothing connected to COM2.

Again, never trust the Artificial Idiocy!

In 2003, I voted in favour of joining the European Union. However, due to later developments - especially the restrictions on cash usage - I have withdrawn my support. DOWN WITH THE EU!

Reply 5 of 25, by the3dfxdude

User metadata
Rank Oldbie
Rank
Oldbie

Yeah this is AI slop.

Normally I would set the 3C509B to IRQ 2 (IRQ 9 in the setup program) in a PC/XT and that won't conflict with the IBM MFM controller on IRQ 5 which is all it can support. The reason why the Western Digital card will work, is that you can select IRQ 2 via jumper on the Western Digital controller instead of IRQ 5. So you did it the other way around. It would be better not to use IRQ 5 for the 3C509B so as not to conflict with standard PC/XT hard disk controllers.

The answer to solving conflicts like this is to list out all your controllers for address, I/O port, IRQ, etc, and just make sure not to use the same resource at the same time.

Reply 6 of 25, by mbbrutman

User metadata
Rank Oldbie
Rank
Oldbie

If DHCP and SNTP were both working, then why did you try to reconfigure the card?

Reply 7 of 25, by JAKra85

User metadata
Rank Newbie
Rank
Newbie
Grzyb wrote on 2026-07-14, 15:41:
XT HDD controllers use IRQ 5 - it's *not* a safe option for a NIC! […]
Show full quote
JAKra85 wrote on 2026-07-14, 14:44:

safe 8-bit IRQ (like IRQ 3 or 5)

XT HDD controllers use IRQ 5 - it's *not* a safe option for a NIC!

IRQ 3 is OK, but only if there's no COM2 port, or there's nothing connected to COM2.

Again, never trust the Artificial Idiocy!

Never used IRQ5 for the NIC.
Tried: IRQ2,3 and 7.
It was not an IRQ it's an I/O conflict and since it is hard coded the only option I got is to change the network card or MFM controller.
I've worked 12+ hours on this to figure it out.

Last edited by JAKra85 on 2026-07-14, 18:56. Edited 1 time in total.

Retro PC Gallery:
https://docs.google.com/document/d/1ara32t4rV … nU/edit?tab=t.0

Reply 8 of 25, by JAKra85

User metadata
Rank Newbie
Rank
Newbie
the3dfxdude wrote on 2026-07-14, 16:31:

Yeah this is AI slop.

Normally I would set the 3C509B to IRQ 2 (IRQ 9 in the setup program) in a PC/XT and that won't conflict with the IBM MFM controller on IRQ 5 which is all it can support. The reason why the Western Digital card will work, is that you can select IRQ 2 via jumper on the Western Digital controller instead of IRQ 5. So you did it the other way around. It would be better not to use IRQ 5 for the 3C509B so as not to conflict with standard PC/XT hard disk controllers.

The answer to solving conflicts like this is to list out all your controllers for address, I/O port, IRQ, etc, and just make sure not to use the same resource at the same time.

To me it seems that no one understands what I've wrote...
Yeah, I was assisted by AI, however I think it's dead on.

This is not an IRQ conflict issue.
3C509B is set and was set to IRQ 2. I've tried different IO addresses 0x210, 0x280, 0x290, 0x300... all froze with the Xebec Controller.
This 3C509B also has a special ID address 0x110, it's hard coded not editable in any way.
Xebec Controller uses IO address 0x310 also by default not editable.
These two addresses get in conflict and there is no way to modify them.

Western Digital WD1002A-WX1 is set to use IRQ5 and works well on address 0x320.

Last edited by JAKra85 on 2026-07-14, 19:00. Edited 3 times in total.

Retro PC Gallery:
https://docs.google.com/document/d/1ara32t4rV … nU/edit?tab=t.0

Reply 9 of 25, by JAKra85

User metadata
Rank Newbie
Rank
Newbie
mbbrutman wrote on 2026-07-14, 16:41:

If DHCP and SNTP were both working, then why did you try to reconfigure the card?

Because it is not enough. 😀

I wanted to use FTPSRV.EXE to copy files to the IBM XT easily over the network. It now works perfectly.
I am planning using it to send simple e-mails.

Every network operation that is a bit more resource intensive crashed the system.

Retro PC Gallery:
https://docs.google.com/document/d/1ara32t4rV … nU/edit?tab=t.0

Reply 10 of 25, by mbbrutman

User metadata
Rank Oldbie
Rank
Oldbie

If DHCP worked you were sending and receiving packets. If SNTP worked you were getting out to the Internet past your router. That basically means everything was working. So why did you need to reconfigure anything? FTPSRV should have been fine.

Reply 11 of 25, by jakethompson1

User metadata
Rank l33t
Rank
l33t
JAKra85 wrote on 2026-07-14, 18:50:

This 3C509B also has a special ID address 0x110, it's hard coded not editable in any way.
Xebec Controller uses IO address 0x310 also by default not editable.
These two addresses get in conflict and there is no way to modify them.

They only conflict if you somehow have a 9-bit address bus on the expansion slots rather than a 10-bit one.

Reply 12 of 25, by Grzyb

User metadata
Rank l33t
Rank
l33t

I'm not denying that there's some I/O address conflict between 3C509B and the Xebec.

But it can't be due to the 10-bit decoding of 0x110 and 0x310, as the 10 least significant bits are different:
01 0001 0000
11 0001 0000

In 2003, I voted in favour of joining the European Union. However, due to later developments - especially the restrictions on cash usage - I have withdrawn my support. DOWN WITH THE EU!

Reply 13 of 25, by the3dfxdude

User metadata
Rank Oldbie
Rank
Oldbie
JAKra85 wrote on 2026-07-14, 18:50:
To me it seems that no one understands what I've wrote... Yeah, I was assisted by AI, however I think it's dead on. […]
Show full quote

To me it seems that no one understands what I've wrote...
Yeah, I was assisted by AI, however I think it's dead on.

This is not an IRQ conflict issue.
3C509B is set and was set to IRQ 2. I've tried different IO addresses 0x210, 0x280, 0x290, 0x300... all froze with the Xebec Controller.
This 3C509B also has a special ID address 0x110, it's hard coded not editable in any way.
Xebec Controller uses IO address 0x310 also by default not editable.
These two addresses get in conflict and there is no way to modify them.

Western Digital WD1002A-WX1 is set to use IRQ5 and works well on address 0x320.

Since you weren't writing what you posted, then I'll just say the message is unclear what you did to solve your problem.

You are saying there is an IO port conflict. I pulled up the driver source code from linux. There is a port *0x100 called ID_PORT, which is used to access the eeprom. That ID_PORT is used to find the actual IO port.
*The driver code technically scans 0x100-0x200, but all things considered, it's probably on 0x100. This means it is NOT hardcoded.

There is also the fact that I/O ports go up to 0x3FF on PC/XT.

If you got this adapter new, it'd likely default to IO port 0x300 and IRQ 10, which means you'd want to fix the IRQ. But who knows what you got initially. If it was using both 0x100 and 0x300 addresses I can't say why you think those addresses would overlap, likewise, I don't think anyone would have used any IO port above 0x2FF in the PC/XT era if it truncated/rolled over, but they did.

So there are issues with the information that has been shared.

Reply 14 of 25, by Grzyb

User metadata
Rank l33t
Rank
l33t

The Xebec docs - https://minuszerodegrees.net/oa/OA%20-%20IBM% … k%20Adapter.pdf - clearly state 0x320..0x323, with 10 bits decoded.

3C509B already supports ISA PnP, and that's when 16-bit I/O decoding became mandatory, right?

Hard to believe any of them is actually decoding LESS than 10 bits...

In 2003, I voted in favour of joining the European Union. However, due to later developments - especially the restrictions on cash usage - I have withdrawn my support. DOWN WITH THE EU!

Reply 15 of 25, by JAKra85

User metadata
Rank Newbie
Rank
Newbie
Grzyb wrote on 2026-07-14, 20:19:

The Xebec docs - https://minuszerodegrees.net/oa/OA%20-%20IBM% … k%20Adapter.pdf - clearly state 0x320..0x323, with 10 bits decoded.

3C509B already supports ISA PnP, and that's when 16-bit I/O decoding became mandatory, right?

Hard to believe any of them is actually decoding LESS than 10 bits...

Yes it is a PnP card, however PnP was disabled with the network card configuration utility 3CCNFG.EXE.
Running it in an IBM XT 5160.

Retro PC Gallery:
https://docs.google.com/document/d/1ara32t4rV … nU/edit?tab=t.0

Reply 16 of 25, by rasz_pl

User metadata
Rank l33t
Rank
l33t

classic AI slop, JAKra85 you even pasted nonsense without reading it

JAKra85 wrote on 2026-07-14, 15:22:

They fit and they are exactly the same. 😀

then you proceed to show they are not 😀

JAKra85 wrote on 2026-07-14, 15:22:

0x110 is: 0000 0001 0001 0000
0x310 is: 0000 0011 0001 0000

some LLMs are really hopeless when it comes to counting bits, yours definitely is one of those

JAKra85 wrote on 2026-07-14, 15:22:

0x110 is: 01 0001 0000.
0x310 is: 01 0001 0000.

LLM ate highest 1 bit and turned
11 0001 0000
into
01 0001 0000

classic glue on pizza moment

https://github.com/raszpl/sigrok-disk FM/MFM/RLL decoder
https://github.com/raszpl/FIC-486-GAC-2-Cache-Module (AT&T Globalyst)
https://github.com/raszpl/386RC-16 ram board
https://github.com/raszpl/Zenith_ZBIOS Zenith Z-386 MFM-300 ZBIOS disassembly

Reply 17 of 25, by JAKra85

User metadata
Rank Newbie
Rank
Newbie
rasz_pl wrote on 2026-07-14, 21:40:
classic AI slop, JAKra85 you even pasted nonsense without reading it […]
Show full quote

classic AI slop, JAKra85 you even pasted nonsense without reading it

JAKra85 wrote on 2026-07-14, 15:22:

They fit and they are exactly the same. 😀

then you proceed to show they are not 😀

JAKra85 wrote on 2026-07-14, 15:22:

0x110 is: 0000 0001 0001 0000
0x310 is: 0000 0011 0001 0000

some LLMs are really hopeless when it comes to counting bits, yours definitely is one of those

JAKra85 wrote on 2026-07-14, 15:22:

0x110 is: 01 0001 0000.
0x310 is: 01 0001 0000.

LLM ate highest 1 bit and turned
11 0001 0000
into
01 0001 0000

classic glue on pizza moment

You are right and I did notice this.
I asked multiple times if this is correct and the AI corrected me each time that I'm wrong and he is correct.
In the end he was so sure it convinced me and I took over this AI slop... 😁

In the end, what helped was changing the Xebec Controller.
According to previous posts Xebec Controller uses IRQ5 and I/O 0x320(not 0x310). Same configuration the WD controller is set to.
Yet, if freezes with Xebec and works with WD whenever I use the network card heavily (transfer files).

Retro PC Gallery:
https://docs.google.com/document/d/1ara32t4rV … nU/edit?tab=t.0

Reply 18 of 25, by Grzyb

User metadata
Rank l33t
Rank
l33t

I'm wondering what may be the true source of problems...
Something like Xebec causing noise on the bus due to old capacitors?

In 2003, I voted in favour of joining the European Union. However, due to later developments - especially the restrictions on cash usage - I have withdrawn my support. DOWN WITH THE EU!

Reply 19 of 25, by Grzyb

User metadata
Rank l33t
Rank
l33t

BTW: there's something special about slot 8 in IBM 5160 - some cards can't work correctly in there.

Is there anything in that slot?

In 2003, I voted in favour of joining the European Union. However, due to later developments - especially the restrictions on cash usage - I have withdrawn my support. DOWN WITH THE EU!