Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Эмуляторы отечественных компьютеров (http://zx-pk.ru/forumdisplay.php?f=61)
-   -   Эмуляция сети (http://zx-pk.ru/showthread.php?t=15130)

psb 24th February 2011 10:35

Вот лучше бы так опа и дать ссылку на сетевой софт для спека...

b2m 24th February 2011 13:03

Quote:

Originally Posted by БК-0010 (Post 361476)
Схема подключения NE2000 к Спеку

Пара ламерских вопросов.

Если я правильно понимаю, порты NemoIDE доступны только из ПЗУ в режиме dos. Тогда прога для работы с сетевой картой должна сидеть вместо, например, glukpen.rom, так? В эмуляторе-то я чего хошь на какие угодно порты повесить могу, а вот как на реале будет?

Если порты (при каких-то условиях) доступны и из области 4000-FFFFh, то как удобнее всего перевести скомпилированный бинарник в нечто, загружаемое на реальном компьютере?

Error404 24th February 2011 14:21

Quote:

Originally Posted by psb (Post 361493)
Вот лучше бы так опа и дать ссылку на сетевой софт для спека...

Экий вы быстрый. :)

Сначала сделаем стек - возьмем готовый uIP. Там надо обеспечить всего-то 2 подпрограммы: оправить буфер и принять буфер. На это уйдет год, не меньше (тут я ориентируюсь на свою скорость разработки :v2_dizzy_sleep2: ). Затем надо адаптировать библиотеку BSD-сокетов. Это еще год минимум. А уж тогда - заходите. :)

Black_Cat 24th February 2011 15:58

Quote:

Originally Posted by b2m (Post 361522)
Если я правильно понимаю, порты NemoIDE доступны только из ПЗУ в режиме dos

не, NemoIDE в оригинале как раз в режиме DOS не работает, но на части современных компов это изменено, и можно работать везде. Как это реализовано в эмуляторах я не знаю.

---------- Post added at 14:57 ---------- Previous post was at 14:53 ----------

Quote:

Originally Posted by b2m (Post 361522)
Если порты (при каких-то условиях) доступны и из области 4000-FFFFh, то как удобнее всего перевести скомпилированный бинарник в нечто, загружаемое на реальном компьютере?

имхо SNA образ проще всего для современных компов на FPGA, для более старых - TRD, его понимают все без исключения

b2m 24th February 2011 16:53

Quote:

Originally Posted by БК-0010 (Post 361556)
не, NemoIDE в оригинале как раз в режиме DOS не работает

Ясно, это я смотрел в твой guide по портам, и всё, что ниже shadow ports посчитал доступными только из режима dos. А там, оказывается, ещё отделено peripheral devices ports. Проглядел-с :)

Quote:

Originally Posted by БК-0010 (Post 361556)
имхо SNA образ проще всего для современных компов на FPGA, для более старых TRD

Придётся доделывать чтение/запись SNA в эмуляторе :)

Black_Cat 24th February 2011 17:30

SNA щас можно запустить токо на ZXEvo, т.к. остальные новые компы не имеют NemoBus и NemoIDE, а более старые - KAY, ZXM-Phoenix, Scorpion - понимают пока токо TRD

Error404 4th March 2011 11:31

Quote:

Originally Posted by b2m (Post 360430)

Я посмотрел исходники QEMU, и сделал аналогично.

А ты как определяешь длину входящего Ethernet-фрейма? Т.е. сколько читать из TAP. Из-за того, что фрейм Ethernet II не имеет в пакете поля длины, а только поле тип, то не понятно сколько читать. В мануалах пишут "конец фрейма определяйте по концу несущей". Откуда взяться несущей в ТAP-адаптере? :)

В QEMU чтобы определить сколько вычитывать они, как я понял, лезут в тело IP-пакетов, в заголовки (т.е. делают на уровне Layer2 что положено делать уже на Layer3). Т.е. если у меня в IP-стеке глюк, и значения в заголовке не соответствует реальной длине пакета, то в эмуляторе все развалится нафиг. Или нет?
Как ты это порешал?

b2m 4th March 2011 12:13

Quote:

Originally Posted by Error404 (Post 363514)
А ты как определяешь длину входящего Ethernet-фрейма?

А никак :) Сколько считал, столько и есть. Как я понял, TAP-драйвер выдаёт весь пакет за одно чтение. Ему ведь тоже приходит уже полный пакет. На уровне интерфейса минидрайвера пакеты не делятся. Это рутеры в сети могут поделить длинный TCP/IP пакет на более короткие, но это будут вполне полноценные TCP/IP пакеты.

Если вопрос о технике программирования в асинхронном режиме, то количество считанных байт выдаёт функция GetOverlappedResult.

И где ты там нашёл, что QEMU лезет в сам пакет? Вся работа с TAP-драйвером описана в tap_win32.c.

Error404 12th May 2011 20:31

2 Attachment(s)
Ну вот, полгода спустя :) собрался с духом и сваял программку для работы с TAP. В примере она делает обслугу TAP-адаптера и генерирует ICMP-reply (по аналогии с тем, что у b2m, только на Паскале) - можно пинговать программку из-под Винды обычным ping-ом (IP-адрес и маска TAP-а естественно должна быть в этой же подсетке, что и у программки).

Во вложении исходники и TAP-драйвер.
Можно использовать как пример методики эмуляции Ethernet в своих эмуляторах, если кому то это интересно (чего по активности в этом треде не скажешь :v2_dizzy_bye: ).

anasana 13th May 2011 00:57

Теперь что бы понять как это заюзать нужно будет перетащить всё с Паскаля в Студию на 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 пустое, в ХРхе всё есть).

Error404 13th May 2011 01:16

Quote:

Originally Posted by anasana (Post 384498)
Теперь что бы понять как это заюзать нужно перетащить всё с Паскаля в Студию на VС :).

Не знаю как насчет именно в VC, но в синтаксисе С в исходниках это все есть в эмуляторе Q-Emu (я вприглядку туда писал). Я себе задачу ставил противоположную: для понятности максимально упростить (в исходниках Q-Emu из-за интеграции собственно с остальным Q-Emu в этом модуле много лишних сложностей)

Quote:

Originally Posted by anasana (Post 384498)
"Enumerator" под в Вин7 судя по всему не отработал (выпадающее меню Connections пустое, в ХРхе всё есть).

Я для простоты просто из реестра читаю. В винде7 видимо это в другом месте. Надо значит делать более сложный енумератор.

Quote:

Originally Posted by anasana (Post 384498)
Теперь что можно с этим сделать... на машинке уже есть лан-сеть 192.168.0.100, я поставил драйвер TAP, запускаю TestEth.exe при нажатии на кнопку "Start Process Packets" новому TAP интерфейсу "даётся кабель" и присваивается адрес 169.254.154.131, я с этой машины могу его пинговать, а при попытке пропинговать с соседнего компа (lan адрес 192.168.0.222), тот комп в котором есть ТАР (+ lan адрес 192.168.0.100) отвечает, что недоступен.

ТАР-адаптер видимо пытается получать адрес по DHCP, и не получив (оно и понятно - адаптер пока что обособлен от всего) назначает себе автоконфигурируемый IP 169.254.154.131. Соотвтетсвнно в testeth.exe в поле IP-адреса перед выполнением "Start Process Packets" надо назначить IP-адрес из этой же сети (типа 169.254.154.135) и маску такую же). Или для ТАР-адаптера установить фиксированный IP как 172.20.0.13 (к примеру) - т.е. одно из двух, но чтобы и testeth.exe и ТАР-адаптер логически были в общем сегменте IP-сети (физически они и так, понятно, в общем сегменте - типа как кросовером соединены). Тогда из Винды можно будет пинговать IP-адрес, назначенный в testeth.exe. Снаружи ни адрес testeth.exe ни адрес ТАР-адаптера пинговать нельзя, если в Винде не включен форвардинг пакетов (т.е. между реальным адаптером и TAP-адаптером). Также чтобы выпустить эмулятор "наружу" есть вариант с бриджем - когда ТAP и реальный адаптер объединяются в общее (единое) метаустройство с единственным IP (единым), но это уже совсем другая история.

Quote:

Originally Posted by anasana (Post 384498)
Какие варианты доступа вообще можно придумать, кроме как по IP, вообще в будующем интересует вывод сетевой которая в эмуляторе должна откликаться как "узел" DecNET.

В testeth.exe любые протоколы можно нарисовать, в т.ч. и "узел" DecNET. Она получает сырые пакета уровня Layer2 - это в модуле EthThrd.pas. Если посмотришь, дальше в файле Unit1.pas написан самый начальный уровень стека TCP (столько, сколько по минимуму надо чтобы описать ICMP echo reply). Если вместо него написать инкапсуляцию содержимого пакетов по правилам стека DecNET, то это будет эмулятор "узла" DecNET.

Если же есть реальный эмулятор, то DecNET будет эмулировать сам VAX-код в эмуляторе (самому писать стек не надо будет) - надо только правильно (через эмуляцию Ethernet-чипа/контроллера) предоставить VAX-коду доступ к этим самым сырым пакетам уровня Layer2 (т.е. тогда интерес будет представлять только модуль EthThrd.pas и его интеграция в готовый эмулятор через эмуляцию Ethernet-чипа).

Error404 17th May 2011 16:37

Quote:

Originally Posted by b2m (Post 360515)
Исходник я уже поместил в архив. Если кто-то из реальщиков сможет подключить ISA-карту (и не спалить комп), то будет вообще замечательно. А я могу к любому из эмулируемых компов прикрутить.

b2m, а ты ассемблерный примерчик на основе чего делал? Есть какое-то хавту "программируем rtl8019"? Этого же нет в фирменной спецификации на чип.
Просто я пытаюсь понять что в этом примере к чему, накладывая на фирменную спецификацию, и местами недопонимаю: в исходничке непонятно зачем некие биты в командах дергаются, а некоторые наоборот недодергиваются (если сравнивать с исходниками драйверов на rtl8019, которые удалось найти по инет-помойкам).

b2m 17th May 2011 18:56

Error404, я же сначала эмуляцию rtl8019as сделал, а уж потом писал примерчик, чтобы мой rtl8019as заработал. Фактически, этот пример, может быть, нигде кроме моего эмулятора и не заработает. :) Цель примерчика была иная - проверить, правильно ли я сделал работу с TAP-драйвером.

Я нагуглил какую-то другую доку по NE2000-совместимому чипу (DP83901A), там подробно рассказывается, как работает сетевая карта.

Реальный пример можно взять из софта для ObsoNET на MSX. Я, кстати, пробовал запускать ихний софт в своём эмуляторе. Результат был, вобщем-то, не очень. Я всякие loopback-и не стал пока делать (не разобрался окончательно), а они, похоже, используют эту фичу, чтобы MAC-адрес адаптера получить (при инициализации). Пришлось сделать костыль, чтобы ихний софт всё-таки получил MAC-адрес, заданный для адаптера в конфиге. Потом ещё какой-то бит статуса пришлось подкорректировать. Зато после всех манипуляций ихний аналог telnet-а заработал у меня в эмуляторе! Другой софт, правда, не работает. То ли оттого, что у меня в эмуляторе только первая версия msx dos, то ли где-то глюк в эмуляции. Но главное, это то, что ихний TCP/IP стек и драйвер ObsoNET работает с моей версией rtl8019as.

Error404 17th May 2011 19:22

1 Attachment(s)
Quote:

Originally Posted by b2m (Post 385995)
Error404, я же сначала эмуляцию rtl8019as сделал, а уж потом писал примерчик, чтобы мой rtl8019as заработал. Фактически, этот пример, может быть, нигде кроме моего эмулятора и не заработает. :) Цель примерчика была иная - проверить, правильно ли я сделал работу с TAP-драйвером.

Я нагуглил какую-то другую доку по NE2000-совместимому чипу (DP83901A), там подробно рассказывается, как работает сетевая карта.

Реальный пример можно взять из софта для ObsoNET на MSX. Я, кстати, пробовал запускать ихний софт в своём эмуляторе. Результат был, вобщем-то, не очень. Я всякие loopback-и не стал пока делать (не разобрался окончательно), а они, похоже, используют эту фичу, чтобы MAC-адрес адаптера получить (при инициализации). Пришлось сделать костыль, чтобы ихний софт всё-таки получил MAC-адрес, заданный для адаптера в конфиге. Потом ещё какой-то бит статуса пришлось подкорректировать. Зато после всех манипуляций ихний аналог telnet-а заработал у меня в эмуляторе! Другой софт, правда, не работает. То ли оттого, что у меня в эмуляторе только первая версия msx dos, то ли где-то глюк в эмуляции. Но главное, это то, что ихний TCP/IP стек и драйвер ObsoNET работает с моей версией rtl8019as.

Понятно. А после корректировки эмуляции rtl8019as, твой тутошний пример работает?

Я пытаюсь найти готовый пример, под который подгоню эмуляцию чипа. Т.к. голая спецификация оставляет слишком обширный полет для фантазии.
Соответственно, интересует поправленный пример, а то я там такого наподгоняю. :)
У меня есть на С примеры, но на асм было бы удобнее (его трассировать удобнее).

Во вложении наиболее читабельно оформленный примерчик драйвера rtl8019 из тех что попадались мне, как раз для режима без ДМА и прерываний - для режима поллинга (который, кстати, они делают через опрос регистра ISR, а не по указателям буфера, - может и в ObsoNET так же?). Но опять же - это С. Его еще сначала надо странслировать, и шагать неудобно (в CP/M нет source-level отладчиков для С).

Вот где написано, что poll надо делать на регистре ISR? Во всех драйверах делают именно так. Но в спеке про это явно не пишут. Значит, где-то есть мануал по применению чипа именно с точки зрения его программирования. Вот такой мануал и хотелось бы найти. А то потом можно долго будет гадать отчего в эмуляторе моя писанина заработает, а на реале - нет.

b2m 17th May 2011 19:44

Quote:

Originally Posted by Error404 (Post 386007)
Понятно. А после корректировки эмуляции rtl8019as, твой тутошний пример работает?

А что ему сделается то, конечно работает :)

Quote:

Originally Posted by Error404 (Post 386007)
Соответственно, интересует поправленный пример, а то я там такого наподгоняю. :)

Во-во. Может не стоит ориентироваться на мой пример?

Quote:

Originally Posted by Error404 (Post 386007)
Его еще сначала надо странслировать, и шагать неудобно (в CP/M нет source-level отладчиков для С)

Вот, кстати, тоже интересная задачка. А нет ли кросс-компиляторов для i8080/Z80, которые бы отладочную информацию выдавали? В идеале, хотелось бы какой-нибудь source-level отладчик к эмулятору прикрутить. :)

Error404 24th May 2011 19:11

Quote:

Originally Posted by b2m (Post 385995)
Я нагуглил какую-то другую доку по NE2000-совместимому чипу (DP83901A), там подробно рассказывается, как работает сетевая карта.

Кое-что можно почерпнуть здесь:
"Networking and internetworking with microcontrollers" By Fred Eady

читаю на ночь, засыпаю почти мгновенно. :)

Error404 10th June 2011 14:05

Quote:

Originally Posted by Error404 (Post 387952)
Кое-что можно почерпнуть здесь:
"Networking and internetworking with microcontrollers" By Fred Eady

читаю на ночь, засыпаю почти мгновенно. :)

Допилил таки и я свой эмулятор до эмуляции RTL8019AS.
Примерчик от b2m под CP/M пингуется. :)
Что дальше делать будем?
Что наиболее перспективно для портирования? Особенно по критерию простоты реализации и естественно наличия исходников.

b2m 10th June 2011 17:14

Quote:

Originally Posted by Error404 (Post 392199)
Что наиболее перспективно для портирования? Особенно по критерию простоты реализации и естественно наличия исходников.

Quote:

Originally Posted by Error404
А все это obso* - оно в исходниках?
Насколько сложное, привязано ли к MSX? Как оно будет в плане портируемости на другие 8-битки под CP/M (при наличии там rtl8019)?

Можно ознакомится с исходниками INL (они есть на sourceforge). Исходники утилит - прямо на сайте konamiman-а.

Те, что написаны исключительно для MSXDOS2 надо будет адаптировать, т.к. они используют "новые" функции, которых нет в CP/M.

Зато некоторые исходники на С, ты это любишь :)

Error404 16th June 2011 18:06

Quote:

Originally Posted by b2m (Post 392257)
Можно ознакомится с исходниками INL (они есть на sourceforge). Исходники утилит - прямо на сайте konamiman-а.

Те, что написаны исключительно для MSXDOS2 надо будет адаптировать, т.к. они используют "новые" функции, которых нет в CP/M.

Зато некоторые исходники на С, ты это любишь :)

Посмотрел по диагонали.
Исходники на C заточены под SDCC, его я как раз и не люблю. :)
В принципе не беда, можно было бы адаптировать.
Странно, а на MSX что - нет нормального нативного С-компилятора, что разработка ведется на РС?

Исходники INL на АSM конечно убили. Слабо откоментированы, и 250кб исходника резидента (плюс сколько-то нерезидента) - это конечно перебор чтобы вот так вот снаскоку всё порешать (как я люблю). А что за компилятор ассемблера они используют? Явно не M80\L80. Тож PC-версию какую-нибудь?

Поэтому решил пока ковырять uIP - он очень хорошо описан. Хотя по логике строения программ он мне не нравится - вариант от MSX как-то симпатичнее (и более лег бы как на архитектуру Ориона, так и на ZX). Но в привязках к архитектуре MSX я, боюсь, зароюсь, поэтому пока будем по принципу "лучшее враг хорошего" - ковырять uIP.


All times are GMT +4. The time now is 02:51.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.