Сетевая карточка NE2000
2025-12-01 23:18Раз уж на XT-шке запустился Линукс-16 (ELKS), а в нём имеется сетевой стек, логично будет подключить его к интернету. Для этой цели я обзавёлся сетевой карточкой, умеющей работать в 8-битной шине ISA. Карточка пришла в полном комплекте: с родными флопиками, инструкцией, в фирменной коробке.

Всё важное написано прямо на коробке. Упомянуто наличие драйверов даже для Linux и SCO Unix. Ну, нынче мы и так знаем, что NE2000 самая поддерживаемая софтом карточка во всех операционках.


Сделана карточка в 1997 году, и к этому мода на джамперы прошла. Весь хардвер стал plug-and-play, что для шины ISA означало необходимость прошивать базовый адрес и номер прерывания в NVRAM. Для это и нужны флопики: на них ДОС-овская утилитка конфигурации.
Поддерживается 10-мегабитная витая пара 10-BaseT. Надеюсь, мой домашний роутер поймёт. На плате есть место под дополнительный биос - может оказаться полезным.


Чип был заклеен, но нельзя же не заглянуть.

Цифры мало что говорят. В интернете знатоки бают, что это клон National Semiconductor DP83905. Вот подробный даташит: DP83905.pdf. А вот подробное описание дизайна платы: AN-897.pdf. В общем, есть где разгуляться, если появится желание позабавиться с программированием на уровне железа. Я когда-то на аналогичных платах собаку съел. Назывались WD8003 и 3C503. Тогда это был трёхчиповый комплект DP8390 + DP8391 + DP8392. Приходилось писать и драйверы, и тесты аппаратного уровня.
Прочие полезные ссылки:

Всё важное написано прямо на коробке. Упомянуто наличие драйверов даже для Linux и SCO Unix. Ну, нынче мы и так знаем, что NE2000 самая поддерживаемая софтом карточка во всех операционках.


Сделана карточка в 1997 году, и к этому мода на джамперы прошла. Весь хардвер стал plug-and-play, что для шины ISA означало необходимость прошивать базовый адрес и номер прерывания в NVRAM. Для это и нужны флопики: на них ДОС-овская утилитка конфигурации.
Поддерживается 10-мегабитная витая пара 10-BaseT. Надеюсь, мой домашний роутер поймёт. На плате есть место под дополнительный биос - может оказаться полезным.


Чип был заклеен, но нельзя же не заглянуть.

Цифры мало что говорят. В интернете знатоки бают, что это клон National Semiconductor DP83905. Вот подробный даташит: DP83905.pdf. А вот подробное описание дизайна платы: AN-897.pdf. В общем, есть где разгуляться, если появится желание позабавиться с программированием на уровне железа. Я когда-то на аналогичных платах собаку съел. Назывались WD8003 и 3C503. Тогда это был трёхчиповый комплект DP8390 + DP8391 + DP8392. Приходилось писать и драйверы, и тесты аппаратного уровня.
Прочие полезные ссылки:

no subject
Date: 2025-12-02 09:14 (UTC)no subject
Date: 2025-12-02 09:40 (UTC)no subject
Date: 2025-12-04 22:29 (UTC)no subject
Date: 2025-12-05 08:52 (UTC)https://texelec.com/product/picomem/
Эта штука имитирует NE2000 с подключением по WiFi.
no subject
Date: 2025-12-05 09:46 (UTC)no subject
Date: 2025-12-05 09:48 (UTC)no subject
Date: 2025-12-03 20:50 (UTC)Это для BSD?
Можете пожалуиста прокомментировать
https://www.os2museum.com/wp/was-the-ne2000-really-that-bad/
а именно
> For whatever reason, the Linux driver does not do things by the book, and there is a book. The Linux driver acknowledges receive interrupts as the last thing it does, which is simply backwards. It is important to keep in mind that the driver code which reads received packets from the DP8390’s ring buffer inevitably races the chip which may be receiving new packets at the same time. For that reason, it is necessary to acknowledge (clear) interrupts first, and then remove all received packets. The hardware works in the opposite order and first updates all of its state and writes to memory, and then raises an interrupt. That way, there could be a spurious interrupt for an already-processed packet but nothing will be missed.
The Linux driver does things in the wrong order and risks that the hardware receives a new packet and sets the interrupt status register in the window between the Linux driver removing previously received packets and clearing the interrupt status register. If that happens, the receive interrupt will be lost and Linux will not be aware that another packet was received. In many cases, another packet will arrive very soon and “fix” things by triggering another interrupt. But if the overlooked packet happens to be the last in a sequence, it will be stuck in limbo until something like a retransmission causes the driver to notice it. Depending on the upper layer protocols, that might only cause a slight delay or cause significant confusion. TCP/IP is quite sensitive to lost or duplicated packets
no subject
Date: 2025-12-04 08:10 (UTC)Совет с прерываниями верный. Проблема такая случалась. Не знаю как в Линуксе, а в FreeBSD драйвер if_ed поступает правильно: сначала гасит прерывание, а потом вычитывает пакеты из кольцевого буфера.
no subject
Date: 2025-12-04 11:39 (UTC)no subject
Date: 2025-12-04 08:16 (UTC)http://www.osdever.net/documents/WritingDriversForTheDP8390.pdf