|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Обновил исходники сервера в репозитории на гитлабе: https://gitlab.com/sprinter-computer/netА также добавил исходники первой сетевой программы для Спринтера https://gitlab.com/sprinter-computer/net/-/blob/master/apps/tests/inet1.asmСейчас она работает только в эмуляторе (скоро выложу исходники с частичной поддержкой сетевого API): P.S. Вторая сетевая программа для Спринтера: https://gitlab.com/sprinter-computer/net/-/blob/master/apps/tests/inet2.asm
|
25 Jul 2021 15:59 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Как оказалось мой SprinterNet API очень похож на низкоуровневый API Spectranet (документация на сайте автора похерена): https://web.archive.org/web/20120212190609/http://spectrum.alioth.net/doc/index.php/Spectranet:_Tutorial_2Там даже либа для программировании на Си тоже есть, как и я планировал (правда для Z88DK). Отсюда возникла идея - а не подружить ли SprinterNet и Spectranet? А именно: - дать возможность со Спринтера ходить по спректранетовским ресурсам в виде TNFS-серверов; - дать возможность использовать SprinterNet утилиты на ZX со Spectranet (как минимум утилиты командной строки и текстовые утилиты не использующие расширенную память); - допустить собираемость спектранетовских программ под Спринтер с платой SprinterNet. А вот запускаемость уже готовых спектранетовских бинарей на Спринтере вряд ли получится т.к. в Спектранете точки входа в API лежат в нулевом окне процессора и подменяют собой 48к ПЗУ спектрума...
|
01 Aug 2021 15:06 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Сравнение моего SprinterNet API со Spectranet API (по архиву https://web.archive.org/web/20200618075948/http://spectrum.alioth.net/doc/index.php/Software) - как оказалось они очень похожи: https://web.archive.org/web/20120414225619/http://spectrum.alioth.net/doc/index.php/Ifconfig_inetСишный интерфейс: У меня все настройки забираются в один присест плюс ещё будет возможность забрать настройки в человеческом формате через псевдопеременные. https://web.archive.org/web/20120414225619/http://spectrum.alioth.net/doc/index.php/Ifconfig_inet | | | | Code: ; get_ifconfig_inet (HLCALL 0x3E6F) - read the internet protocol address ; get_ifconfig_netmask (HLCALL 0x3E72) - read the netmask ; get_ifconfig_gw (HLCALL 0x3E75) - read the default gateway ; deconfig (HLCALL 0x3E57) - Deconfigure all internet address settings
; all the functions use 4 byte buffers for the ; big endian address (inet_addr_t) ld hl, inet_addr ld ix, IFCONFIG_INET call IXCALL
ld hl, inet_netmask ld ix, IFCONFIG_NETMASK call IXCALL
ld hl, inet_gw ld ix, IFCONFIG_GW call IXCALL
ld hl, DECONFIG call HLCALL
; The ifconfig_inet(), ifconfig_netmask() and ifconfig_gw() functions set the interface configuration for internet addresses. ; The functions take a pointer to a 4 byte big endian internet address, netmask or gateway, defined as in_addr_t. ; The functions make an immediate change to the relevant interface configuration, however, the change is not permanent ; and will be lost when the power is cycled or if the built in DHCP client runs on reset. Permanent changes must be made ; in the configuration stored in flash.
; The deconfig() function resets the IP address, default gateway and netmask with immediate effect. The change is not permament.
| | | | |
Как можно видеть у спектранета эти настройки временные - для постоянных надо перезаписывать флеш. У меня же изменение конфигурации делается одним вызовом и это сразу меняет EEPROM и переинициализирует WizNet. Сишный интерфейс в Спектранете: Плюс в Спектранете есть функции для чтения и записи MAC-адреса, что в случае SprinterNet ненужно (и даже вредно): https://web.archive.org/web/20120212192405/http://spectrum.alioth.net/doc/index.php/Sethwaddr(в спектранете функция записи мак-адреса также является временной - т.е. лишь меняет мак-адрес в ОЗУ) https://web.archive.org/web/20200217222129/http://spectrum.alioth.net/doc/index.php/SocketСишный интерфейс (на самом деле проверка на успешность должна выглядеть как if(sock >= 0) т.к. 0 это валидный номер сокета): У меня ещё предполагалось возможность использования AF_LOCAL (UNIX-сокеты внутри машины) и AF_PACKET (RAW-сокеты): https://web.archive.org/web/20120212191405/http://spectrum.alioth.net/doc/index.php/Bind | | | | Code: ld a, (socket_fd) ; The socket handle, as returned by socket ld de, 2000 ; Port number ld hl, BIND ; Jump table entry point - 0x3E0C call HLCALL jr c, .handle_error ; On error, carry flag is set
; bind() gives the socket sockfd the local address my_addr. In this implementation, only the port address is used ; for the local address, and other parameters in the sockaddr structure are currently ignored. Fields are provided for compatibility. ; It is normally necessary to assign a local address before a SOCK_STREAM can accept incoming connections. ; The port number passed to bind is the port that will be listened on when the listen call is made.
; Return value
; On success, the assembly language interface returns with the carry flag cleared. ; On error, the accumulator contains the error number and the carry flag is set.
| | | | |
Сишный интерфейс: | | | | Code: #include <sys/socket.h> #include <sys/types.h>
int sockfd; struct sockaddr_in addr; sock=socket(AF_INET, SOCK_STREAM, 0); if(sock > 0) { addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); /* provided for compatibility */ addr.sin_port = htons(2000); /* htons is a no-op, but a macro is provided for compatibility */ if(bind(sockfd, &addr, sizeof(addr)) < 0) { handle_error("bind"); } }
// On success, the C interface returns zero. On error, -1 is returned, and errno is set to the error number.
// The port number is the only local address that is used, since the hardware only supports a single // internet protocol address; in the C interface, all other fields in the sockaddr structure are ignored. // C programmers should still avoid invalid values in case these values are used in the future. // It is acceptable to zero out unused values.
| | | | |
В спектранете аналогичной функции (самодостаточный HTTP-клиент для забирания небольших порций данных с произвольного HTTP-сервера) попросту нет. https://web.archive.org/web/20120212111230/http://spectrum.alioth.net/doc/index.php/Gethostbyname | | | | Code: ; gethostbyname (IXCALL 0x3E27) - get network host entry
ld hl, STR_HOSTNAME ld de, BUF_ADDRESS ld ix, GETHOSTBYNAME call IXCALL
; The gethostbyname() call converts the string passed in name to an address. The parameter name may be ; a null-terminated hostname (such as 'www.worldofspectrum.org' or a null-terminated dotted decimal string ; representation of an IP address. If a dotted decimal address is passed, no lookup is made, and the string ; is converted to a 4 byte big-endian representation of the address. If a hostname is passed, the hostname ; is looked up using the DNS protocol, and the resolved address is returned as a 4 byte big-endian value. ; With the current implementation, only one address is returned on a successful lookup.
; For the assembly language interface, the register pair HL points to a null-terminated string containing the ; hostname or dotted decimal IP address, and the DE register pair points to a location in memory with at least ; 4 bytes free to receive the 4 byte big-endian representation of the address.
; Return values
; The assembly language interface returns with the carry flag set on error, with the A register containing the return code.
| | | | |
Сишный интерфейс: Я планирую написать совместимую по заголовочным файлам либу для Спринтера (для z88dk и для SolidC), чтобы одни и те же сишные исходники можно было бы собирать и для ZX+Specranet, и для Sprinter+SprinterNet. В репозитории спектранета есть несколько чисто сишных программ: - сетевая игра ctfgame - клиент irc - tankgame - twitter (с проксей на перле, которую думаю можно переписать на php и внедрить в наш шлюз) ну и ещё пара простых примеров клиентов и серверов под спектранет также можно сделать пересобираемыми под SprinterNet.
|
02 Aug 2021 03:20 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Зарезервировал
|
06 Aug 2021 01:40 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Напомню эпопею с прототипами SprinterNet: Наконец-то дошли руки начать сборку третьего прототипа (через полгода после получения платок):
|
04 Sep 2021 23:26 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Обновил фотку третьего прототипа выше после того как воткнул все микросхемы (сам модулёк WizNet располагается с другой стороны)
|
11 Sep 2021 21:26 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Видеоролики прямых эфиров с этих выходных, в течение которых я реализовывал функций спринтернета в эмуляторе Спринтера под музыку 90х (и AY): https://www.youtube.com/watch?v=4AB8e912gOw (функция resolv - 4 часа) https://www.youtube.com/watch?v=BZxzXnRNljY (функция time - 3 часа) Уже после стрима подправил реализацию time, чтобы отрабатывался функционал на тот случай, когда слишком часто запрашивают (возвращать сохранённое вместо того, чтобы каждый раз лазить на веб-сервер sprinternet.io): Человеческий формат пока возвращает в UTC - потом сделаю коррекцию на текущую таймзону...
|
14 Nov 2021 22:10 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
В третьем прототипе несколько сигналов на плате развелись неправильно и пересеклись - исправляется путём просверливания двух дырок, перерезания двух дорожек и напаивания двух проводков: FIX Однако чтобы на руках были безошибочные платы тоже, я по быстрому заказал в OSHPark исправленный вариант платы в количестве 3 штук ещё в сентябре 2021 года (это уже как бы получается четвёртый прототип платы):
|
15 Nov 2021 19:20 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Как говорится "из-за известных событий" концепция изменилась - теперь я не рассматриваю как рабочий вариант привязку к серийному номеру Спринтера (т.к. пути с репликантами Спринтера у меня разошлись) - теперь я рассматриваю привязку к маку сетевой карточки, которая также должна будет работать на IBM PC совместимых машинах с шиной ISA8 или ISA16...
|
07 May 2022 00:07 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Плюс всё ещё остаётся в планах TS2068 с совместимой картой и в будущем может появиться решение для РК-совместимых машин. Надо ещё на сервере поддержать ZX-совместимые машины с сетевым интерфейсом Spectranet, а также разрешить пользователям ходить через веб и с эмуляторов (т.е. привязка к маку должна быть необязательна), но в то же время надо как-то уметь фильтровать спамеров...
|
18 Mar 2024 23:41 |
|
|
Who is online |
Users browsing this forum: No registered users and 2 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|