|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Платки кстати пришли - собираю потихоньку, причём подцепить такую платку можно как к TS2068, так и к ZX16K (проводочками)...
|
18 Jul 2016 12:38 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
а в какой комп? и как? у спеков там обычно неподменяемое ОЗУ... P.S. судя по комментам это baseconf в пентеве: WIZNET | | | | Code: DEVICE ZXSPECTRUM128
ORG 0x8000 START ;регистры чипа WIZ_BASE_ADDR = 0xc000 W_MR = WIZ_BASE_ADDR+0x0000 W_SHAR = WIZ_BASE_ADDR+0x0008
S0_MR = WIZ_BASE_ADDR+0x0201 ;мл.байт S0_CR = WIZ_BASE_ADDR+0x0203 ;мл.байт S0_SSR = WIZ_BASE_ADDR+0x0209 ;мл.байт S0_PORTR = WIZ_BASE_ADDR+0x020a S0_DPORTR = WIZ_BASE_ADDR+0x0212 S0_DIPR = WIZ_BASE_ADDR+0x0214 S0_TX_WRSR = WIZ_BASE_ADDR+0x0222 ;мл.слово S0_RX_RSR = WIZ_BASE_ADDR+0x022a S0_TX_FAKE = WIZ_BASE_ADDR+0x2000 S0_RX_FAKE = WIZ_BASE_ADDR+0x3000 ;/***************************************/ ;/* The bit of Sn_MR regsiter defintion */ ;/***************************************/ Sn_MR_CLOSE = 0x00 ;/**< Protocol bits of Sn_MR. */ Sn_MR_TCP = 0x01 ;/**< Protocol bits of Sn_MR. */ Sn_MR_UDP = 0x02 ;/**< Protocol bits of Sn_MR. */ Sn_MR_IPRAW = 0x03 ;/**< Protocol bits of Sn_MR. */ Sn_MR_MACRAW = 0x04 ;/**< Protocol bits of Sn_MR. */ Sn_MR_PPPoE = 0x05 ;/**< Protocol bits of Sn_MR. */
/******************************/ /* The values of CR defintion */ /******************************/ Sn_CR_OPEN = 0x01 ;/**< OPEN command value of Sn_CR. */ Sn_CR_LISTEN = 0x02 ;/**< LISTEN command value of Sn_CR. */ Sn_CR_CONNECT = 0x04 ;/**< CONNECT command value of Sn_CR. */ Sn_CR_DISCON = 0x08 ;/**< DISCONNECT command value of Sn_CR. */ Sn_CR_CLOSE = 0x10 ;/**< CLOSE command value of Sn_CR. */ Sn_CR_SEND = 0x20 ;/**< SEND command value of Sn_CR. */ Sn_CR_SEND_MAC = 0x21 ;/**< SEND_MAC command value of Sn_CR. */ Sn_CR_SEND_KEEP = 0x22 ;/**< SEND_KEEP command value of Sn_CR */ Sn_CR_RECV = 0x40 ;/**< RECV command value of Sn_CR */ Sn_CR_PCON = 0x23 ;/**< PCON command value of Sn_CR */ Sn_CR_PDISCON = 0x24 ;/**< PDISCON command value of Sn_CR */ Sn_CR_PCR = 0x25 ;/**< PCR command value of Sn_CR */ Sn_CR_PCN = 0x26 ;/**< PCN command value of Sn_CR */ Sn_CR_PCJ = 0x27 ;/**< PCJ command value of Sn_CR */
;/**********************************/ ;/* The values of Sn_SSR defintion */ ;/**********************************/ SOCK_CLOSED = 0x00 ;< SOCKETn is released */ SOCK_ARP = 0x01 ;< ARP-request is transmitted in order to acquire destination hardware address. */ SOCK_INIT = 0x13 ;< SOCKETn is open as TCP mode. */ SOCK_LISTEN = 0x14 ;< SOCKETn operates as "TCP SERVER" and waits for connection-request (SYN packet) from "TCP CLIENT". */ SOCK_SYNSENT = 0x15 ;< Connect-request(SYN packet) is transmitted to "TCP SERVER". */ SOCK_SYNRECV = 0x16 ;< Connect-request(SYN packet) is received from "TCP CLIENT". */ SOCK_ESTABLISHED = 0x17 ;< TCP connection is established. */ SOCK_FIN_WAIT = 0x18 ;< SOCKETn is closing. */ SOCK_CLOSING = 0x1A ;< SOCKETn is closing. */ SOCK_TIME_WAIT = 0x1B ;< SOCKETn is closing. */ SOCK_CLOSE_WAIT = 0x1C ;< Disconnect-request(FIN packet) is received from the peer. */ SOCK_LAST_ACK = 0x1D ;< SOCKETn is closing. */ SOCK_UDP = 0x22 ;< SOCKETn is open as UDP mode. */ SOCK_IPRAW = 0x32 ;< SOCKETn is open as IPRAW mode. */ SOCK_MACRAW = 0x42 ;< SOCKET0 is open as MACRAW mode. */ SOCK_PPPoE = 0x5F ;< SOCKET0 is open as PPPoE mode. */
di ld sp,0xc000 ld hl,0x4000 ld (hl),0 ld de,0x4001 ld bc,192*256/8-1 ldir ;делаем хардресет чипа ;Все тайминги округлены до 50мс ei halt ld bc,0x83ab in a,(c) and 0xee out (c),a ; ресет halt or 0x10 out (c),a ; снятие ресета halt ;Проецирование регистров в адресное пространство z80. ;Для примера проецируем в адреса 0xc000-0xffff (в условиях ZX-Evo baseconf). ;Проецирование будет происходить только при подключенном ПЗУ в заданном адресном окне. ;Страница ПЗУ не имеет значения ld a,1 out (0xbf),a ld bc,0xfff7 ld a,0x3f out (c),a ;Теперь включаем проецирование ld bc,0x82ab ld a,7 out (c),a ;далее софтресет чипа(насчёт нужности неуверен, но непомешает) ld a,0x80 ld (W_MR+1),a halt ld a,0x3c ld (W_MR),a di ;закидываем MAC, шлюз, маску и ИП. Поменять под себя!!! ld hl,mac ld de,W_SHAR ld bc,20 ldir ;С этого момента чип будет пинговаться и настройки можно считать завершёнными. ;Эстетам можно почитать пдфку и настроить чёнить ещё, но для примера и этого достаточно. ;---------------------------------------------------------- ;теперь подключимся к TCP(НТТР) серверу и чегонить получим ;----------------------------------------------------------
;настроим сокет soc_noinit ld a,Sn_CR_CLOSE ;закроем соединение ld (S0_CR),a ld a,Sn_MR_TCP ;режим сокета TCP ld (S0_MR),a ld hl,(source_port) ;приращивем внутренний порт, чтоп с предыдущим не пересечся inc hl ld (source_port),hl ld e,h ;бигендиан, меняем байты местами ld d,l ld (S0_PORTR),de ld a,Sn_CR_OPEN ;даем команду открытия сокета ld (S0_CR),a wait_cr0 ld a,(S0_CR) ;ожидаем исполнения команды or a jr nz,wait_cr0 ld a,(S0_SSR) ;если не инициализировался, то заново cp SOCK_INIT jr nz,soc_noinit ;-------------------- ;конектимся к серверу ;-------------------- ld hl,S0_DPORTR ;порт сервера !бигендиан! ld (hl),0 inc hl ld (hl),80 ld hl,S0_DIPR ;ip сервера мароза1999 217.146.69.13 ld (hl),217 inc hl ld (hl),146 inc hl ld (hl),69 inc hl ld (hl),13 ld a,Sn_CR_CONNECT ;даем команду конекта ld (S0_CR),a wait_cr1 ld a,(S0_CR) ;ожидаем исполнения команды or a jr nz,wait_cr1 ;ожидаем коннекта с сервером wait_con ld a,(S0_SSR) or a jp z,soc_noinit ;Сервер чёйта закрыл(неоткрыл) коннект cp SOCK_ESTABLISHED ;вообще то тут надо проверять и насчёт тайм аута, и другой фигни jr nz,wait_con ;но мы забьём на это дело wait_con_end
;приконектились, отошлём GET запрос ;-------------------- ;отправка пакета ;-------------------- ld hl,get_str ;закидываем дату в буфер чипа ld de,S0_TX_FAKE ld bc,get_str_end-get_str inc bc ;закидывать надо чётное количество байт res 0,c ;поэтому округлим до чётного ldir ;ахтунг говнокод!!! ldir'ить можно не более 512 байт, смотри описание платки, ;но мы опустим этот момент, т.к. строка у нас явно короче ld a,high (get_str_end-get_str) ld (S0_TX_WRSR),a ;закидываем длинну даты, не забывая про бигэндиан ld a,low (get_str_end-get_str) ld (S0_TX_WRSR+1),a ;а вот сдесь нужно указывать точное кол-во байт, невзирая на нечётность ld a,Sn_CR_SEND ;даем команду отправки ld (S0_CR),a wait_cr2 ld a,(S0_CR) ;ожидаем исполнения команды or a jr nz,wait_cr2 ;-------------------- ;ожидаем пакет от сервера ;-------------------- ld de,0 wait_pack0 ld de,(S0_RX_RSR) ;читаем длинну пакета ld a,d or e ;если нулевая, то ждём дальше jr z,wait_pack0 wait_pack1 ld hl,(S0_RX_RSR) ;ога, пришло ex de,hl ;теперь ждём устаканивания даты xor a ;повторно читаем и если не сходится, то читаем ещё раз длинну sbc hl,de ld a,h or l jr nz,wait_pack1 ;пакет получен чипом полностью, надо его вычитать ;т.к. в S0_RX_RSR длинна кратна двум, то...
;-------------------- ;сейчас прочитаем реальную длинну, она лежит в первых двух байтах буфера приема ;-------------------- ld hl,(S0_RX_FAKE) ld b,l ;долбанный бигендиан ld c,h ;-------------------- ;читаем пакет, в de у нас лежит длинна кратная двум(бигендиан) ;-------------------- ;выёживатся с лдиром небудем ld b,e ld c,d dec bc ;в регистре длинна пакета была с учётом двух первых байт, dec bc ;которые добавил сам визнет(точная длинна пакета) ld hl,S0_RX_FAKE ld de,buf_rx loop_read ld l,0 ld a,c or b jr z,end_read ldi ldi jr loop_read end_read ld a,Sn_CR_RECV ;даем знать что пакет забрали ld (S0_CR),a wait_cr3 ld a,(S0_CR) ;ожидаем исполнения команды or a jr nz,wait_cr3 ;типа всё, далее разбираем пакет, получаем следующий, отправляем. Но это уже сами, я закрываю соединение. ;-------------------- ;закроем соединение ;-------------------- ld a,Sn_CR_CLOSE ;закроем соединение ld (S0_CR),a ;-------------------- ;Всё, пример окончен. ;--------------------
ld bc,768 ;Не много по говнокодим. ld hl,buf_rx+478 ;Эта цифра получена ваяшарком(очень рекомендую, чтоп наглядно было и познавательно) ld de,0x5800 ;А вообщебы тут надо распарсить HTTP реквест ldir di halt
;конфиг сети(!!!Эти значения измените под конфигвашей сети!!!) mac db 0x00,0x08,0xDC,0x01,0x02,0x03 ;цифры от балды взял, из визнетовой доки reserved db 0x00,0x00 ;это для того, чтоб одним лдиром закинуть gateway db 192,168,0,1 mask db 255,255,255,0 ip db 192,168,0,77 ;внутренний порт source_port dw 0
;http://zx.maros.pri.ee/file/id/15733/filename/Yerzmyey_-_Cat_42_%282009%29_%28_International_Vodka_Party_5%2C_4%29.atr get_str db "GET /file/id/15733/filename/Yerzmyey_-_Cat_42_%282009%29_%28_International_Vodka_Party_5%2C_4%29.atr HTTP/1.1",13,10 db "Host: zx.maros.pri.ee",13,10 db 13,10,0 get_str_end buf_rx ENDPROG SAVEHOB "s1.$C","s1.C",START,ENDPROG-START SAVEBIN "s1",START,ENDPROG-START
| | | | |
|
18 Jul 2016 12:41 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
И кстати что это? W5300? Я всё ещё на W5100 сижу
|
18 Jul 2016 13:57 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
5300
|
18 Jul 2016 21:02 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
Shaos, если будет возможность, то как нить драйвера под визнет сделай обособленно. Если конечно софт будешь писать какой.
А то у меня в софте они интегрированы гвоздями, под другую железку уже не переделаешь.
Вообще б все обращения к железу надо было через либы
|
26 Jul 2016 02:43 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Угу - более того, я код хочу сделать перемещаемым И конфигурация (ip,mask,mac) будет хранится во внешнем EEPROM (т.к. задавание мак-адреса программно это очень плохая практика, как и хардкод IP)
|
26 Jul 2016 07:11 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Платку что собирал я чото пока не нашeл, а вообще платки пришли вот такие, но вот незадача - я посеял исходники похоже Теперь вот думаю для Спринтера это приспособить как макетку для сетевушки... P.S. Исходники нашел на своем старом PowerPC ноутбуке с Mac OS X 10.4 (там у меня лицензионная версия Eagle v5 стоит) - вот картинка схемы:
|
19 Dec 2020 02:52 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Нашёл Но она не сильно далеко в сборке ушла с 2016 года... P.S. Переношу с предыдущей страницы про то, что собственно на платке есть: | | | | Shaos wrote: Развёл платку прототипа сетевушки в стандартном игле и заказал 5 штучек у китайцев... P.S. Пока без 16К ОЗУ что вместо бортового рома опционально подставлялся бы. Кроме сетевого модулька WizNet на плате ещё 16 микросхем - в основном мелкая логика, а также ПЗУ 8К, ОЗУ 2К и SPI EEPROM 25C320 (4K) для хранения MAC-адреса, IP-адреса, маски подсети и шлюза (ну и всего что влезет). Если всё заведётся, то в боевой вариант воткну ещё и SD-карточку. И да - платка может подключаться как к TS2068, так и к ZX16K... P.P.S. Карта памяти такая получается - предпоследнее 8К окно: 0xC0XX - WizNET registers 0xC1XX - CONTROL (write only): bit 0 - TX/RX, bit 1 - SPI EEPROM enabled 0xC2XX - SPI (read/write) 0xC3XX - GPIO (read/write) 0xC4XX - 1st socket WizNET 0xC5XX - 2nd socket WizNET 0xC6XX - 3rd socket WizNET 0xC7XX - 4th socket WizNET 0xC800...0xCFFF - RAM 2K 0xD000...0xD7FF - ROM 2K 0xD800...0xDFFF - ROM 2K (switchable on write) и последнее 8К окно: 0xE000...0xFFFF - доступ к области буферов WizNET (либо RX, либо TX) | | | | |
Гребёнка контактов слева (первый контакт находится снизу): Возможные расширение на будущее - добавление разъёма SD-карточки и возможности работы с WizNET через SPI (в этом случае в регистре CONTROL добавится ещё 2 бита, позволяющих адресовать ещё 2 SPI-устройства, работающих параллельно с SPI-EEPROM) - чисто чтобы попробовать накопить Z80 кода для этого всего - новое возможное описание битов в CONTROL под спойлером: NEW_CONTROL bit 0: TXRX - TX (0), RX (1); bit 1: CSA0 \ bit 2: CSA1 - 00 - No SPI, 01 - SPI EEPROM, 10 - SD card SPI, 11 - WizNET SPI; bit 3: WNSE - WizNET SPI mode Enabled (т.е.чтобы работать с WizNET по SPI нужно, чтобы все три бита 1,2,3 были взведены в "1"). ну и сейчас GPIO разведено 8 бит на вывод, и только 3 бита на ввод (видимо я хотел SD карту так попробовать - навесиком - поэтому входов развёл по минимуму) - можно увеличить до 8 в следующей версии платы...
|
24 Dec 2020 03:05 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Припаял резисторы/конденсаторы/разъёмы/диоды/светодиоды - теперь дело за микросхемами: P.S. Все микросхемы нашлись по сусекам, кроме одной - докупил на ебее - как придёт - дособираю...
|
26 Dec 2020 00:16 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Пришла микросхема - дособирал и подключил
|
07 Jan 2021 18:11 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Вобщем триггеры IC4 как и предполагалось при старте устанавливаются в нули, а триггеры IC5 - в единицы. Запись работает - установка пар триггеров IC4 и IC5 (надо бы светодиодики к ним приделать), а также запись в регистр IC16 (выходы). А вот чтение почему-то не работает - всегда FF-ы читает отовсюду P.S. Хотя нет - чтение с EEPROM похоже работает (если физически сигнал SO замкнуть на землю), но не с ОЗУ или GPIO (входы). P.P.S. Наверно с SPI EEPROM надо несколько пересмотреть схему - там SCK похоже надо инвертировать если идёт чтение - у меня SCK просто тупо с /MREQ идёт - для записи норм (на диаграмме внизу INPUT), а для чтения появляется смещение (см. OUTPUT - хотя может тоже норм - надо пробовать): P.P.P.S. Хотя наверное дело в том, что данные надо держать неизменными после фронта SCK как минимум 50 нс, а если делать как сейчас, то они пропадают сразу же. Можно скажем прозрачную защёлку поставить, чтобы сохраняло бит до следующего такта, а можно и тупо кондёр воткнуть с резистором, чтобы подержало чуток
|
07 Jan 2021 21:19 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Нашёл в чём проблема с чтением - /CS для WizNET неправильно формировался на последнем этапе покрывая почти всё адресное пространство и т.к. оно ещё и на TTL буфер подавалось, которым WizNET прикрыт от шины (ибо он трёхвольтовый, хоть и 5V-tolerant), у этого буфера конфликт получался со всем остальным на плате - хорошо у меня свободные гейты остались - просто порежу дорожек и напаяю проводочек... P.S. По поводу программирования SPI - вот например как я сейчас делаю "WRITE ENABLE SEQUENCE": | | | | Code: ld (#C100),2 ; enable SPI-EEPROM ld hl,#C200 ld b,#00 ld c,#FF ld (hl),b ld (hl),b ld (hl),b ld (hl),b ld (hl),b ld (hl),c ld (hl),c ld (hl),b ld (#C100),0 ; disable SPI-EEPROM
| | | | |
Это получается в пределе 7 тактов на бит при передаче или миллион битов в секунду на Спринтере, но при записи данных в память будет сильно меньше т.к. на ожидание окончания записи страницы данных по даташиту может уйти до 5 мс. Чтение можно сделать через LDIR/LDI (да и запись тоже можно сделать, только будет медленее) - если делать через LDIR (область доступа к SPI имеет размер 256 байт - так что можно копировать до 32 байтов за раз), то скорость будет только 21 такт на бит, а если через цепочку LDI, то 16 тактов на бит (плюс время на восстановление байтов из битов). P.P.S. Можно ещё с PUSH и POP позаморачиваться, тогда в пределе будет 5.5 тактов на бит, но их надо ведь ещё куда-то копировать...
|
08 Jan 2021 01:54 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Напаял - теперь GPIO и RAM работают как надо и на запись, и на чтение А вот EEPROM видимо по другому надо цеплять - трюк с /MREQ как SCK чего-то не сработал - читает то все нули, то все единички...
|
08 Jan 2021 22:21 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
Втыкаем WizNET и идём дальше:
|
09 Jan 2021 00:10 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22729 Location: Silicon Valley
|
По ходу ISA-шина Спринтера быстровата для визнета - запись байта не всегда с первого раза удаётся если в турбо-режиме работаем - можно попробовать вейтать проц на немного, если визнет выбран. Ну или чисто программно - запись с верификацией и если не совпадает, то повторная запись...
P.S. Записки на полях - в интернетах пишут, что для UDP у W5100 есть ограничение на размер пакета в 1472 байт
|
09 Jan 2021 06:14 |
|
|
Who is online |
Users browsing this forum: No registered users and 7 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
|
|