Вот лучше бы так опа и дать ссылку на сетевой софт для спека...
Вид для печати
Вот лучше бы так опа и дать ссылку на сетевой софт для спека...
Пара ламерских вопросов.
Если я правильно понимаю, порты NemoIDE доступны только из ПЗУ в режиме dos. Тогда прога для работы с сетевой картой должна сидеть вместо, например, glukpen.rom, так? В эмуляторе-то я чего хошь на какие угодно порты повесить могу, а вот как на реале будет?
Если порты (при каких-то условиях) доступны и из области 4000-FFFFh, то как удобнее всего перевести скомпилированный бинарник в нечто, загружаемое на реальном компьютере?
Экий вы быстрый. :)
Сначала сделаем стек - возьмем готовый uIP. Там надо обеспечить всего-то 2 подпрограммы: оправить буфер и принять буфер. На это уйдет год, не меньше (тут я ориентируюсь на свою скорость разработки :v2_dizzy_sleep2: ). Затем надо адаптировать библиотеку BSD-сокетов. Это еще год минимум. А уж тогда - заходите. :)
не, NemoIDE в оригинале как раз в режиме DOS не работает, но на части современных компов это изменено, и можно работать везде. Как это реализовано в эмуляторах я не знаю.
---------- Post added at 14:57 ---------- Previous post was at 14:53 ----------
имхо SNA образ проще всего для современных компов на FPGA, для более старых - TRD, его понимают все без исключения
SNA щас можно запустить токо на ZXEvo, т.к. остальные новые компы не имеют NemoBus и NemoIDE, а более старые - KAY, ZXM-Phoenix, Scorpion - понимают пока токо TRD
А ты как определяешь длину входящего Ethernet-фрейма? Т.е. сколько читать из TAP. Из-за того, что фрейм Ethernet II не имеет в пакете поля длины, а только поле тип, то не понятно сколько читать. В мануалах пишут "конец фрейма определяйте по концу несущей". Откуда взяться несущей в ТAP-адаптере? :)
В QEMU чтобы определить сколько вычитывать они, как я понял, лезут в тело IP-пакетов, в заголовки (т.е. делают на уровне Layer2 что положено делать уже на Layer3). Т.е. если у меня в IP-стеке глюк, и значения в заголовке не соответствует реальной длине пакета, то в эмуляторе все развалится нафиг. Или нет?
Как ты это порешал?
А никак :) Сколько считал, столько и есть. Как я понял, TAP-драйвер выдаёт весь пакет за одно чтение. Ему ведь тоже приходит уже полный пакет. На уровне интерфейса минидрайвера пакеты не делятся. Это рутеры в сети могут поделить длинный TCP/IP пакет на более короткие, но это будут вполне полноценные TCP/IP пакеты.
Если вопрос о технике программирования в асинхронном режиме, то количество считанных байт выдаёт функция GetOverlappedResult.
И где ты там нашёл, что QEMU лезет в сам пакет? Вся работа с TAP-драйвером описана в tap_win32.c.
Ну вот, полгода спустя :) собрался с духом и сваял программку для работы с TAP. В примере она делает обслугу TAP-адаптера и генерирует ICMP-reply (по аналогии с тем, что у b2m, только на Паскале) - можно пинговать программку из-под Винды обычным ping-ом (IP-адрес и маска TAP-а естественно должна быть в этой же подсетке, что и у программки).
Во вложении исходники и TAP-драйвер.
Можно использовать как пример методики эмуляции Ethernet в своих эмуляторах, если кому то это интересно (чего по активности в этом треде не скажешь :v2_dizzy_bye: ).
Теперь что бы понять как это заюзать нужно будет перетащить всё с Паскаля в Студию на VС для экспериментов :).
Теперь что можно с этим сделать... на машинке, спрятанной за роутером, уже есть лан-подсеть и выдан адрес 192.168.0.100, я поставил ещё и драйвер TAP (создался новый интерфейс), запускаю TestEth.exe и выбираю его, при нажатии на кнопку "Start Process Packets" (влияние полей ввода "IP address" и "Mask" на что-либо не увидел), TAP интерфейсу "даётся кабель" и присваивается адрес 169.254.154.131, после чего я с этой машины могу этот адрес (169.254.154.131) пинговать, а при попытке пропинговать с соседнего компа (lan адрес 192.168.0.222), тот комп в котором есть ТАР (+ lan адрес 192.168.0.100) отвечает, что недоступен (Ответ от 192.168.0.100: Заданный узел недоступен.).
Какие варианты доступа вообще можно придумать, кроме как по IP, и как издалека, вообще же в будующем, интересует такой сетевой выход, который со стороны эмулятора должен откликаться как "узел" DECNet.
P.S. "Enumerator" под в Вин7 судя по всему не отработал (выпадающее меню Connections пустое, в ХРхе всё есть).