nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 18 Mar 2024 20:27



Reply to topic  [ 70 posts ]  Go to page 1, 2, 3, 4, 5  Next
Ethernet для Timex Sinclair 2068 и пр. (SprinterNet) 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22379
Location: Silicon Valley
Reply with quote
А вот не прикрутить ли мне к Таймексу WizNET с полным подключением его адресного пространства в адресное пространство процессора? ;)

Ну или разделять последнее 8К окно между буферами передатчика и приёмника - типа вот так:

Предпоследнее 8К окно:
0xC0XX - WizNET registers
0xC1XX - WIZ-CTRL (write only)
0xC2XX - RTC-ADDR (write only)
0xC3XX - RTC-DATA (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)

Если кто не узнал - это распределение памяти моей операционки ShaOS и сильно напоминает ShaosBox :)

Ну и последнее 8К окно:
0xE000...0xFFFF - доступ к области буферов WizNET (либо RX, либо TX)


P.S. Переключать буфера WizNET-а можно скажем путём записи 0 или 1 по адресу 0xC100 - 0 будет означать TX, а 1 - RX. Аналогичным же образом можно переключать страницы ПЗУ 2К - путём записи номера страницы по адресу 0xDFFF (кстати в подменяемых ПЗУ в этой ячейке может стоять номер ПЗУ - получается как бы оттуда читается тот же байт, что и пишется)...

P.P.S. Область #C000...#DFFF выделяется путём ловли на шине адреса состояния A15=1, A14=1, A13=0 - назовём этот сигнал /CSCD. Область #E000...#FFFF выделяется путём ловли на шине адреса состояния A15=1, A14=1, A13=1 - назовём этот сигнал /CSEF. Сигнал /CSCD разрешает половинку дешифратора 74LS139, который дешифрует адресные биты A12 и A11, выдавая 4 новых сигнала выборки /CSC07, /CSRAM, /CSROM1 и /CSROM2. Сигнал /CSC07 разрешает дешифратор 74LS138, который дешифрует адресные биты A10, A9 и A8, выдавая 8 сигналов выборки - /CSC0.../CSC7, пять из которых объеденены по AND для того, чтобы вместе с /CSEF сформировать сигнал выборки WizNET-а /CSWIZ, при этом адреса для него надо перепутать определённым образом:
#С000 -> #0000 для WizNET
#E000 -> #4000 либо #6000 для WizNET (в зависимости от состояния триггера по адресу #C100)
т.е. 110->000 и 111->010/011 или
Code:
A13|TRG => A14'|A13'
 0 | 0  =>  0  |  0
 0 | 1  =>  0  |  0
 1 | 0  =>  1  |  0
 1 | 1  =>  1  |  1
т.е. A14' для WizNET это A13 с шины адреса, а A13' для WizNET это AND(A13,TRG).

Вторая половинка 74LS139 может пойти на формирование 4 выборок для подменяемого ПЗУ, т.е. оно должно управляться двумя битами, значит запись по адресу #DFFF должна устанавливать 2 триггера...

P.P.P.S. Чуть позже решил выкинуть RTC и добавить serial EEPROM - после этого карта памяти такая получилась (последнее изменение сделано 23 января 2021):
Code:
0xC0XX - WizNET registers (read/write controlled by TX/RX)
0xC1XX - CONTROL (write only):
   bit 0 - TX/RX (0 is TX/write, 1 is RX/read)
   bit 1 - SPI0 - (SPI device: 00-Nothing, 01-EEPROM, 10-MMC, 11-External)
   bit 2 - SPI1 /
   bit 3 - SCK (sync for SPI)
   bit 4 - OUT1 (user output 1)
   bit 5 - OUT2 (user output 2)
   bit 6 - OUT3 (user output 3)
   bit 7 - MOSI (serial output to SPI)
0xC2XX - SPI (bit 0 - read only from MISO SPI)
0xC3XX - INPUTS (read only)
0xC4XX - WizNET socket 0 (read/write controlled by TX/RX)
0xC5XX - WizNET socket 1 (read/write controlled by TX/RX)
0xC6XX - WizNET socket 2 (read/write controlled by TX/RX)
0xC7XX - WizNET socket 3  (read/write controlled by TX/RX)
0xC800...0xCFFF - RAM 2K (read/write)
0xD000...0xD7FF - ROM 2K (always read only)
0xD800...0xDFFF - ROM 2K (switchable on write)
0xE000...0xFFFF - WizNET buffers (RX or TX)

_________________
:dj: https://mastodon.social/@Shaos


14 Jun 2016 19:33
Profile WWW
Doomed
User avatar

Joined: 23 Nov 2007 15:53
Posts: 441
Location: Saint Petersburg, Russia
Reply with quote
Ты WizNET на краевой подключать собрался, или в док?

_________________
"Очень трудно найти чёрную кошку в тёмной комнате... особенно, если её там нет.", "Forever!". :wink:
zx.clan.su - Soviet Union ZX Spectrum Community - форум посвящённый развитию Спека.


15 Jun 2016 07:18
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22379
Location: Silicon Valley
Reply with quote
Black_Cat wrote:
Ты WizNET на краевой подключать собрался, или в док?


В док т.к. краевой на ТС бесполезен как я вижу ибо крив до невозможности...

_________________
:dj: https://mastodon.social/@Shaos


15 Jun 2016 10:26
Profile WWW
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
в зхусбнете(вдруг чего интересного увидишь). В кратце, реализована возможность чтения\записи буферов визнета ldir'ом:
 
Code:
Базовый адрес (младшие 8 бит): #AB

Порты #00AB..#7FAB -- либо регистр данных sl811 (для возможности использовать
INIR/OTIR -- предекремент B), либо часть регистрового пространства w5300 (определяется
битом w5300_ports).

#80AB - регистр адреса sl811 (LD BC,#80AB: OUT (C),reg: INIR/OTIR). НЕДОСТУПЕН,
если w5300_ports=1.

#83AB, #82AB, #81AB -- управляющие регистры карты.


==========================================================================================================
#83AB (порт управления прерываниями и сбросом):

бит 0,ro: 1 -- установлен сигнал /INT от w5300 (/INT=0)
0 -- не установлен

бит 1,ro: 1 -- установлен сигнал INTRQ от sl811 (INTRQ=1)
0 -- не установлен

бит 2,rw: 1 -- сигнал /INT от w5300 участвует в формировании внутреннего сигнала прерывания
0 -- не участвует
0 после сброса

бит 3,rw: 1 -- сигнал INTRQ от sl811 участвует в формировании внутреннего сигнала прерывания
0 -- не участвует
0 после сброса

бит 4,rw: управление сбросом w5300:
0 -- установлен сброс для w5300 (/RESET=0)
1 -- не установлен
0 после сброса

бит 5,rw: управление сбросом sl811:
0 -- установлен сброс для sl811 (nRST=0)
1 -- не установлен
0 после сброса

бит 6,rw: 1 -- внутренний сигнал прерывания формирует /INT на zx-bus (устанавливает в 0)
0 -- не формирует
0 после сброса

бит 7,ro: состояние внутреннего сигнала прерывания:
0 -- нет сигнала (всегда 0, если биты 0 и 1 ==0)
1 -- есть сигнал


==========================================================================================================
#82AB (порт управления w5300):

биты 0..1,rw: область адресного пространства zxbus, где происходит маппинг ROM на регистры w5300:
2'b00 -- #0000..#3FFF
2'b01 -- #4000..#7FFF
2'b10 -- #8000..#BFFF
2'b11 -- #C000..#FFFF
2'b00 после сброса. Для клонов, которые позволяют иметь ROM только в #0000..#3FFF,
устанавливать в 2'b00.

бит 2,rw: 1 -- разрешить подстановку регистров w5300 вместо ROM
0 -- запретить
0 после сброса

бит 3,rw: 1 -- производить инверсию A0 на w5300
0 -- не производить
0 после сброса

бит 4,rw: 1 -- подстановка адресного пространства w5300 в порты #00AB..#7FAB.
при этом регистр данных sl811 в этих портах недоступен.
применяется для работы в w5300 в indirect mode.
0 после сброса

ВНИМАНИЕ: биты 2 и 4 этого порта не могут одновременно быть в 1.

биты 5..7,rw: старшие 3 бита адреса w5300 при обращении к ней через порты #00AB..#7FAB.
при этом младшая часть формируется из битов 14..8 адреса порта, бит 0
адреса w5300 опционально инвертируется, в зависимости от бита 3 данного
порта.
Code:

адресное пространство w5300 мапится в пространство zx-bus ROM 16k так:

zx-bus ROM  |  w5300
------------+-----------------------------
#0000-#1FFF | повторение 8 раз
            | неизменного адресного пр-ва
            | w5300 размером #400 байт
------------+-----------------------------
------------+-----------------------------
#2000-#21FF | повторение 256 раз регистров
            | w5300 с адресами #22E,#22F
            | (socket 0 TX FIFO register)
------------+-----------------------------
#2200-#23FF | повторение 256 раз регистров
            | w5300 с адресами #26E,#26F
            | (socket 1 TX FIFO register)
------------+-----------------------------
#2400-#25FF | повторение 256 раз регистров
            | w5300 с адресами #2AE,#2AB
            | (socket 2 TX FIFO register)
------------+-----------------------------
#2600-#27FF | повторение 256 раз регистров
            | w5300 с адресами #2EE,#2EF
            | (socket 3 TX FIFO register)
------------+-----------------------------
#2800-#29FF | повторение 256 раз регистров
            | w5300 с адресами #32E,#32F
            | (socket 4 TX FIFO register)
------------+-----------------------------
#2A00-#2BFF | повторение 256 раз регистров
            | w5300 с адресами #36E,#36F
            | (socket 5 TX FIFO register)
------------+-----------------------------
#2C00-#2DFF | повторение 256 раз регистров
            | w5300 с адресами #3AE,#3AB
            | (socket 6 TX FIFO register)
------------+-----------------------------
#2E00-#2FFF | повторение 256 раз регистров
            | w5300 с адресами #3EE,#3EF
            | (socket 7 TX FIFO register)
------------+-----------------------------
------------+-----------------------------
#3000-#31FF | повторение 256 раз регистров
            | w5300 с адресами #230,#231
            | (socket 0 RX FIFO register)
------------+-----------------------------
#3200-#33FF | повторение 256 раз регистров
            | w5300 с адресами #270,#271
            | (socket 1 RX FIFO register)
------------+-----------------------------
#3400-#35FF | повторение 256 раз регистров
            | w5300 с адресами #2B0,#2B1
            | (socket 2 RX FIFO register)
------------+-----------------------------
#3600-#37FF | повторение 256 раз регистров
            | w5300 с адресами #2F0,#2F1
            | (socket 3 RX FIFO register)
------------+-----------------------------
#3800-#39FF | повторение 256 раз регистров
            | w5300 с адресами #330,#331
            | (socket 4 RX FIFO register)
------------+-----------------------------
#3A00-#3BFF | повторение 256 раз регистров
            | w5300 с адресами #370,#371
            | (socket 5 RX FIFO register)
------------+-----------------------------
#3C00-#3DFF | повторение 256 раз регистров
            | w5300 с адресами #3B0,#3B1
            | (socket 6 RX FIFO register)
------------+-----------------------------
#3E00-#3FFF | повторение 256 раз регистров
            | w5300 с адресами #3F0,#3F1
            | (socket 7 RX FIFO register)
------------+-----------------------------


логика преобразования адресов:

если za[13]=0, то wa[9..1]=za[9..1]

если za[13:12]=10, то:
 { 22e, 26e, 2ae, 2ee, 32e, 36e, 3ae, 3ee}
 {2000,2200,2400,2600,2800,2a00,2c00,2e00}

 wa[9]=1
 wa[8:6]=za[11:9]
 wa[5:1]=10111

если za[13:12]=11, то:
 { 230, 270, 2b0, 2f0, 330, 370, 3b0, 3f0}
 {3000,3200,3400,3600,3800,3a00,3c00,3e00}

 wa[9]=1
 wa[8:6]=za[11:9]
 wa[5:1]=11000
Регистры фифо w5300 обязательно нужно считывать сначала первый байт - потом второй байт(потому что после чтения второго происходит сдвиг данных в фифо). Поэтому если включена инверсия А0, то нужно читать наоборот. Также если включена инверсия А0 и вычитываются буфера ldir'ом, то нужно начинать вычитывать с нечетного адреса.


16 Jun 2016 23:38
Profile ICQ
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22379
Location: Silicon Valley
Reply with quote
Мне танцы с бубном ненужны - вся память визнеты W5100 включена в доступное адресное пространство проца (точнее RX и TX буфера накладываются друг на друга, чтобы не 32К занимать, а только 16, но это терпимо)

P.S. Всё - понял. У вас там W5300, где прямого доступа к буферам сокетов нету - только через FIFO - поэтому я остаютсь со старым W5100, где этого гемора нету и всё торчит наружу :rotate:

_________________
:dj: https://mastodon.social/@Shaos


17 Jun 2016 04:17
Profile WWW
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
Ну я с 5100 тоже баловался. Там тоже по моему гемор, надо какбы вручную реализовывать фифо, если память не изменяет надо самому следить где щас указатель фифо. Но могу ошибатся. Но то что тоже гемор есть это точно


17 Jun 2016 06:07
Profile ICQ
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
не удержался, решился на рефреш памяти своей, глянул драйвер w5100
Code:
void send_data_processing(SOCKET s, uint8 *data, uint16 len)
{
   uint16 ptr;
   ptr = IINCHIP_READ(Sn_TX_WR0(s));
   ptr = ((ptr & 0x00ff) << 8) + IINCHIP_READ(Sn_TX_WR0(s) + 1);
   write_data(s, data, (uint8 *)(ptr), len);
   ptr += len;
   IINCHIP_WRITE(Sn_TX_WR0(s),(uint8)((ptr & 0xff00) >> 8));
   IINCHIP_WRITE((Sn_TX_WR0(s) + 1),(uint8)(ptr & 0x00ff));
}
память не подвела, фифо вручную надо поддерживать
в 5300 это аппаратно


17 Jun 2016 06:26
Profile ICQ
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22379
Location: Silicon Valley
Reply with quote
Да просто отслеживать начало и конец активного буфера - зато все доступно непосредственно в твоей памяти

_________________
:dj: https://mastodon.social/@Shaos


17 Jun 2016 06:52
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22379
Location: Silicon Valley
Reply with quote
Надо ещё два ОЗУ 8К поставить для опциональной подмены первых 16К памяти, чтобы можно было ромы подгружать с инета :)

А вообще наличие WizNET в конце памяти, а не поверх ПЗУ, хорошо тем, что ленивые люди могут юзать её прямо из бейсика без всяких хитрых уловок типа перехвата подпрограммы вывода ошибок, городёжки спектрумовских каналов и т.д. как сделано в спектранете...

_________________
:dj: https://mastodon.social/@Shaos


17 Jun 2016 16:37
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22379
Location: Silicon Valley
Reply with quote
С другой стороны а нафига тут RTC? MAC-адрес с IP и маской можно в какой-то EEPROM записать (например последовательный SPI), а точное время легко берётся из сети...

_________________
:dj: https://mastodon.social/@Shaos


18 Jun 2016 09:50
Profile WWW
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
нащёт мака, помню помаялся.
в одной софтине накодил один мак, в другой - другой мак.
ип статично выставлял, один и тотже в обоих прогах.
при этом ещё и в рутере сделал аренду этого ипа к одному из маков в выше указанных софтах.

И понеслось. Соответственно прога с неправильным маком неработала(визнет даже не пинговался), ибо работала с ипом который был в аренде на другом маке.
Я чё тока не делал, одна софтина робит, вторая нет.
пока не догадался на рутер зайти и посмотреть, что в одной из дырок ункновн-девайс висит и мак в нём совсем не тот который надо.

Кстати ни кто не в курсе, как мак себе сгенерить грамотно? Или можно тупо const char[] mac="DimkaM";


20 Jun 2016 00:05
Profile ICQ
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22379
Location: Silicon Valley
Reply with quote
Есть внутренние номера, которые только для внутренних сетей, например 02:xx:xx:xx:xx:xx смело можешь ставить (подробнее http://serverfault.com/questions/40712/what-range-of-mac-addresses-can-i-safely-use-for-my-virtual-machines) - главное чтобы в пределах сети не повторялся

_________________
:dj: https://mastodon.social/@Shaos


20 Jun 2016 06:56
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22379
Location: Silicon Valley
Reply with quote
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)

_________________
:dj: https://mastodon.social/@Shaos


21 Jun 2016 00:51
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22379
Location: Silicon Valley
Reply with quote
Shaos wrote:
Развёл платку прототипа сетевушки в стандартном игле и заказал 5 штучек у китайцев...

Китайцы написали, что платки сделаны, но их перехватила таможня, что значит что они будут их там мурыжить до трёх недель...

_________________
:dj: https://mastodon.social/@Shaos


28 Jun 2016 08:46
Profile WWW
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
Quote:
А вообще наличие WizNET в конце памяти, а не поверх ПЗУ, хорошо тем, что ленивые люди могут юзать её прямо из бейсика без всяких хитрых уловок
Вот тут какраз зхусбнет втыкаетсч с адреса с000 http://forum.nedopc.com/download/file.php?id=1949


18 Jul 2016 12:34
Profile ICQ
Display posts from previous:  Sort by  
Reply to topic   [ 70 posts ]  Go to page 1, 2, 3, 4, 5  Next

Who is online

Users browsing this forum: No registered users and 4 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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.