Ethernet для Timex Sinclair 2068 и пр. (Sprinternet)

Старый спектрумистский форум

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Timex Sinclair 2068

Post by Shaos »

Shaos wrote:
Shaos wrote:Развёл платку прототипа сетевушки в стандартном игле и заказал 5 штучек у китайцев...
Китайцы написали, что платки сделаны, но их перехватила таможня, что значит что они будут их там мурыжить до трёх недель...
Платки кстати пришли - собираю потихоньку, причём подцепить такую платку можно как к TS2068, так и к ZX16K (проводочками)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Timex Sinclair 2068

Post by Shaos »

DimkaM wrote:
А вообще наличие WizNET в конце памяти, а не поверх ПЗУ, хорошо тем, что ленивые люди могут юзать её прямо из бейсика без всяких хитрых уловок
Вот тут какраз зхусбнет втыкаетсч с адреса с000 http://forum.nedopc.com/download/file.php?id=1949
а в какой комп? и как? у спеков там обычно неподменяемое ОЗУ...

P.S. судя по комментам это baseconf в пентеве:

 WIZNET

Code: Select all

	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

Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Timex Sinclair 2068

Post by Shaos »

И кстати что это? W5300? Я всё ещё на W5100 сижу
Я тут за главного - если что шлите мыло на me собака shaos точка net
DimkaM
Maniac
Posts: 261
Joined: 22 Jun 2005 04:35
Location: МО Россия

Re: Timex Sinclair 2068

Post by DimkaM »

5300
DimkaM
Maniac
Posts: 261
Joined: 22 Jun 2005 04:35
Location: МО Россия

Re: Timex Sinclair 2068

Post by DimkaM »

Shaos, если будет возможность, то как нить драйвера под визнет сделай обособленно.
Если конечно софт будешь писать какой.

А то у меня в софте они интегрированы гвоздями, под другую железку уже не переделаешь.

Вообще б все обращения к железу надо было через либы
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Timex Sinclair 2068

Post by Shaos »

Угу - более того, я код хочу сделать перемещаемым :)

И конфигурация (ip,mask,mac) будет хранится во внешнем EEPROM (т.к. задавание мак-адреса программно это очень плохая практика, как и хардкод IP)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

SprinterNet

Post by Shaos »

Shaos wrote:
Shaos wrote:
Shaos wrote:Развёл платку прототипа сетевушки в стандартном игле и заказал 5 штучек у китайцев...
Китайцы написали, что платки сделаны, но их перехватила таможня, что значит что они будут их там мурыжить до трёх недель...
Платки кстати пришли - собираю потихоньку, причём подцепить такую платку можно как к TS2068, так и к ZX16K (проводочками)...
Платку что собирал я чото пока не нашeл, а вообще платки пришли вот такие, но вот незадача - я посеял исходники похоже :(
ShaosCart1.jpg
Теперь вот думаю для Спринтера это приспособить как макетку для сетевушки...

P.S. Исходники нашел на своем старом PowerPC ноутбуке с Mac OS X 10.4 (там у меня лицензионная версия Eagle v5 стоит) - вот картинка схемы:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: SprinterNet

Post by Shaos »

Shaos wrote:
Shaos wrote:
Shaos wrote:
Shaos wrote:Развёл платку прототипа сетевушки в стандартном игле и заказал 5 штучек у китайцев...
Китайцы написали, что платки сделаны, но их перехватила таможня, что значит что они будут их там мурыжить до трёх недель...
Платки кстати пришли - собираю потихоньку, причём подцепить такую платку можно как к TS2068, так и к ZX16K (проводочками)...
Платку что собирал я чото пока не нашeл...
Нашёл :)
ShaosCart0.jpg
Но она не сильно далеко в сборке ушла с 2016 года...

P.S. Переношу с предыдущей страницы про то, что собственно на платке есть:
Shaos wrote:
Shaos wrote:С другой стороны а нафига тут RTC? MAC-адрес с IP и маской можно в какой-то EEPROM записать (например последовательный SPI), а точное время легко берётся из сети...
Развёл платку прототипа сетевушки в стандартном игле и заказал 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)
Гребёнка контактов слева (первый контакт находится снизу):

Code: Select all

 1 - 5V
 2 - GND
 3 - /CS (должно быть заземлено для нормальной работы схемы, а "1" тут будет непускать /MREQ в схему)
 4 - /MREQ
 5 - /RD
 6 - /WR
 7 - D0
 8 - D1
 9 - D2
10 - D3
11 - D4
12 - D5
13 - D6
14 - D7
15 - A0
16 - A1
17 - A2
18 - A3
19 - A4
20 - A5
21 - A6
22 - A7
23 - A8
24 - A9
25 - A10
26 - A11
27 - A12
28 - A13
29 - A14
30 - A15
Возможные расширение на будущее - добавление разъёма 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 в следующей версии платы...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: SprinterNet

Post by Shaos »

Припаял резисторы/конденсаторы/разъёмы/диоды/светодиоды - теперь дело за микросхемами:
ShaosCart2.jpg
P.S. Все микросхемы нашлись по сусекам, кроме одной - докупил на ебее - как придёт - дособираю...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Пришла микросхема - дособирал :)
ShaosCart3.jpg
и подключил :)
SprinterNet-proto1.jpg
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Вобщем триггеры IC4 как и предполагалось при старте устанавливаются в нули, а триггеры IC5 - в единицы.
Запись работает - установка пар триггеров IC4 и IC5 (надо бы светодиодики к ним приделать), а также запись в регистр IC16 (выходы).
А вот чтение почему-то не работает - всегда FF-ы читает отовсюду :(

P.S. Хотя нет - чтение с EEPROM похоже работает (если физически сигнал SO замкнуть на землю), но не с ОЗУ или GPIO (входы).

P.P.S. Наверно с SPI EEPROM надо несколько пересмотреть схему - там SCK похоже надо инвертировать если идёт чтение - у меня SCK просто тупо с /MREQ идёт - для записи норм (на диаграмме внизу INPUT), а для чтения появляется смещение (см. OUTPUT - хотя может тоже норм - надо пробовать):
SPI-EEPROM.gif
P.P.P.S. Хотя наверное дело в том, что данные надо держать неизменными после фронта SCK как минимум 50 нс, а если делать как сейчас, то они пропадают сразу же. Можно скажем прозрачную защёлку поставить, чтобы сохраняло бит до следующего такта, а можно и тупо кондёр воткнуть с резистором, чтобы подержало чуток ;)
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Нашёл в чём проблема с чтением - /CS для WizNET неправильно формировался на последнем этапе покрывая почти всё адресное пространство и т.к. оно ещё и на TTL буфер подавалось, которым WizNET прикрыт от шины (ибо он трёхвольтовый, хоть и 5V-tolerant), у этого буфера конфликт получался со всем остальным на плате - хорошо у меня свободные гейты остались - просто порежу дорожек и напаяю проводочек...

P.S. По поводу программирования SPI - вот например как я сейчас делаю "WRITE ENABLE SEQUENCE":

Code: Select all

  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 тактов на бит, но их надо ведь ещё куда-то копировать...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Shaos wrote:Нашёл в чём проблема с чтением - /CS для WizNET неправильно формировался на последнем этапе покрывая почти всё адресное пространство и т.к. оно ещё и на TTL буфер подавалось, которым WizNET прикрыт от шины (ибо он трёхвольтовый, хоть и 5V-tolerant), у этого буфера конфликт получался со всем остальным на плате - хорошо у меня свободные гейты остались - просто порежу дорожек и напаяю проводочек...
Напаял - теперь GPIO и RAM работают как надо и на запись, и на чтение :)
ShaosCart4.jpg
А вот EEPROM видимо по другому надо цеплять - трюк с /MREQ как SCK чего-то не сработал - читает то все нули, то все единички...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Втыкаем WizNET и идём дальше:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

По ходу ISA-шина Спринтера быстровата для визнета - запись байта не всегда с первого раза удаётся если в турбо-режиме работаем - можно попробовать вейтать проц на немного, если визнет выбран.
Ну или чисто программно - запись с верификацией и если не совпадает, то повторная запись...

P.S. Записки на полях - в интернетах пишут, что для UDP у W5100 есть ограничение на размер пакета в 1472 байт
Я тут за главного - если что шлите мыло на me собака shaos точка net