Ethernet+RTC для любых Радио-86РК

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

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

Ethernet+RTC для любых Радио-86РК

Post by Shaos »

Отпочковано от Радио-86РК на SRAM 128K Alpha (2014) & Beta (2024) [17]
Shaos wrote:Кстати вот этот вот разъём расширения:
Shaos wrote:введены дополнительные дешифраторы #C000 (разделяемый ресурс с ВГ75), #C800, #D000, #D800 - все эти CS-ы вместе с адресами A0...A10, WR/RD и буферизированной шиной данных выходят наружу через 28-дырочный разъём...
позволит подцепить к компьютеру урезанную версию SprinterNet с косвенным обращением к буферам WizNet-чипа вместо прямого доступа - правда прошивку ПЗУ сетевушки придётся переписать с z80 на 8080 и изменить API, чтобы не использовались индексные регистры...
Вообще WizNet можно использовать в режиме с косвенной адресацией, подцепив вместо дополнительного ВВ5 в разъём X3 (9xxx) - там как раз 4 ячейки адресуются:

Code: Select all

0 - регистр MR (включение косвенного режима и флаг автоинкремента, чтобы каждый раз не менять адрес)
1 - регистр IDM_AR0 (старший байт адреса)
2 - регистр IDM_AR1 (младший байт адреса)
3 - регистр IDM_DR (чтение/запись данных в косвенном режиме)
Для пущей логичности адреса можно перевернуть (инвертировав A0 и A1):

Code: Select all

#9000 - [3] регистр IDM_DR (чтение/запись данных в косвенном режиме)
#9001 - [2] регистр IDM_AR1 (младший байт адреса)
#9002 - [1] регистр IDM_AR0 (старший байт адреса)
#9003 - [0] регистр MR (включение косвенного режима и флаг автоинкремента, чтобы каждый раз не менять адрес)
Тогда оно будет соответствовать квазидисковому интерфейсу что по #Axxx!

Адресное пространство W5100 имеет дырки:
Screenshot from 2024-02-25 02-02-38.png
Когда в 2016 году я начал пилить интернет для TS2068 (который потом превратился в SprinterNet для Спринтера) я в эти дырки планировал воткнуть часы реального времени - в этот раз можно таки это сделать, просто параллельно визнету надо поставить регистры адреса, которые будут сохранять записываемый адрес для дырок, чтобы другие части схемы могли на них реагировать помимо визнета (правда автоинкремент по понятным причинам в этих дырках работать не будет).

Соответственно, косвенные адреса можно расположить таким образом:

Code: Select all

#00XX - WizNET registers (48 bytes)
#01XX - reserved (SPI?)
#02XX - reserved (RTC-addr?)
#03XX - reserved (RTC-data?)
#04XX - 1st socket WizNET (44 bytes)
#05XX - 2nd socket WizNET (44 bytes)
#06XX - 3rd socket WizNET (44 bytes)
#07XX - 4th socket WizNET (44 bytes)
#0800...#1FFF - unused (RTC?)
#2000...#3FFF - ROM-disk (8KB 001...)
#4000...#5FFF - TX memory WizNET (8KB 010...)
#6000...#7FFF - RX memory WizNET (8KB 011...)
В CMOS-памяти RTC может храниться MAC-адрес и локальные настройки сети, а может быть лучше сделать как планировалось в спринтернете - MAC-адрес прошит в защищённую область SPI EEPROM, который также используется для хранений куков (ну и опционально SD-карточку можно подцепить через тот же SPI-интерфейс). Да и RTC по сути ненужен, если есть интернет - тот же sprinternet.io может выдать текущее время по гринвичу. Однако каждую секунду ведь не будешь обращаться к интернету - для этого и нужен RTC, чтобы можно было его дёргать так часто, как нужно, а интернет можно использовать для установки точного времени в самом начале работы (при необходимости).

P.S. Ха - можно ведь там даже ROM с программой разместить для обычных РК-шек :o
Люди будут втыкать эту платку в разъём квазидиска #AXXX (или даже вместо второго ВВ55) и с помощью директивы R вычитать стартовую программку-инициализатор, которая затем всё будет делать, выходя в интернет, и даже программки РК-шные можно было бы читать из интернета директивой R, копируя байты из RX memory WizNET! И часы реального времени лучше в ту же дырку воткнуть - скажем по адресу #1000 пусть будет DS12C887+ (или DS1687-5+), тогда можно одним дешифратором 3:8 обойтись и несколькими вентилями И

P.P.S. Хотя у этих RTC шина мультиплексированная - сначала надо адрес выставить дёрнув ALE, а потом только данные читать-писать...
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: Радио-86РК на SRAM 128K Alpha (2014) & Beta (2024)

Post by Shaos »

Накидал примерную схему (2 регистра для сохранения половинок косвенного адреса для доступа к ROM и RTC не показаны):
rk-wiznet-rtc.jpg
Карта памяти при этом такая получается (при работе с WizNET будет происходить автоинкремент адреса, а для ROM и RTC надо будет программно менять косвенный адрес как при работе с квазидиском):

Code: Select all

#00XX - WizNET registers (48 bytes)
#01XX - WizNET reserved (unused)
#02XX - WizNET reserved (unused)
#03XX - WizNET reserved (unused)
#04XX - 1st socket WizNET (44 bytes)
#05XX - 2nd socket WizNET (44 bytes)
#06XX - 3rd socket WizNET (44 bytes)
#07XX - 4th socket WizNET (44 bytes)
#0800...#0FFF - WizNET reserved (unused)
#1000...#1FFF - RTC (#10xx - data, #11xx - address)
#2000...#3FFF - ROM-disk (8KB)
#4000...#5FFF - TX memory WizNET (8KB)
#6000...#7FFF - RX memory WizNET (8KB)
Обращаться к RTC можно лишь манипулируя старшим байтом косвенного адреса - пишем адрес RTC в #11xx (младшую часть косвенного адреса можно не трогать) и затем читаем или пишем данные RTC по адресу #10xx (опять же младшая часть косвенного адреса тут неважна).

P.S. Подкорректировал схему чтобы строб адреса и строб данных в RTC попадали в один и тот же чипселект. Можно ещё _RD_RTC гейтануть по ИЛИ битом адреса A8, чтобы чтение из RTC было возможно только по адресу #10xx (а хотя наверное это лишнее т.к. ALE без /WR всё равно не появится и чтение из #11xx будет равносильно чтению из #10xx).
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net