This project is defunct. I have not worked on the code for over two years now and have no intention of restarting this project any time in the near future. The snapshot below is the state of the project as it exists on my hard disk. Anyone is open to take this code and finish the task of writing a driver.
DISCLAMER: The information in this page comes with ABSOLUTLY no warranty, or guarantee as to is accuracy, either express or implied. I have no connection to Xircom other than owning one of their adaptors. I have not at any stage disassembled any Xircom supplied code
Xircom manufacture a number of networking products for portables. They are distinguished by their refusal to release the necessary information required to write device drivers for their products without signing a Non-disclosure Aggrements. This makes the writing of device drivers for freely redistributable operating systems such as Linux difficult if not impossible.
Following the success that Grant had in writting a driver for the parallel port Zip drive by logging the activity on the parallel port using Dosemu, it occured to me that the process could be repeated for a Xircom parallel port ethernet adaptor.
Xircom have in the past made noises to the effect that they have created a method by which they would release the information necessary to allow a driver for Linux to be written. This is infact a con, and actually requires a pile of NDA's and signing code of to them which if derived from any existing Linux code (which would be difficult not to do) you couldn't.
By logging the activity on the parallel port whilst loading the MSDOS packet driver under Dosemu under different conditions I have been able to glean quite a bit of information about the adaptor.
I have started work on a driver and currently it is able to detect the presence of the adaptor, get it to raise an interrupt to check it's working, detect the mode of the parallel port (nibble or byte), and download the onboard EEPROM which contains the adaptor model, ethernet address and time/date of manufacture, and perform a RAM test.
This represents fully the trace produced by loading the packet driver under Dosemu, for both byte and nibble modes.
The latest snapshot is avaliable to download from here. I would like to here from other people whether it works on their PE3 and especially on different parallel ports.
Xircom use what I believe is a unique form of nibble mode. Most adaptors use either the lower 4 bits of the control port, or bits 6,5,4,3 of the status port, leading to an obvious decoding of the two reads to reconstruct the byte.Xircom on the other hand use bits 7,5,4,3 of the status port to transfer the information, and to make things even more odd the first read represents bits 6,2,1,0 of the final byte, and the second read, bits 7,5,4,3.
At first sight this is going to lead to some complicated decoding, until you realize that as bits 2,1,0 are unused on the status port and hence are always set, if you use three signed right shifts you get the bits in the right place. This works because in bit 7 is set then with signed shifts bits 2,1,0 get rotated round and fill bits 7,6,5, but if bit 7 is not set the bits 7,6,5 get filled with zero's. Hence the status of bit 6 reflects that of bit 7 which is what is required.
What does all this achieve? Well you can save one shift operation per byte downloaded from the adaptor!!! Now while this might not seem very significant, on the sort of laptops that the Original Xircom Pocket Ethernet adaptor ran on (i.e. Toshiba T1000's etc.), the million shifts required to download one megabyte over the network would amount to over 1 second, and was significant. This is a very cunning approach to nibble mode and as far as I am aware is not used by anyother manufacture.
Xircom have manufactured a number of other ethernet adaptors that connect to the parallel port. These include:
These are no longer produced by Xircom and are therefore difficult to get hold of.
Visit The Linux Parallel Port Home Page for information about related projects and other useful links.