В связи с
уже доказанной кривизной спринтеровской исы слегка изменил логику работы схемы - теперь контрольный бит TX/RX (расположенный по адресу #C100), кроме переключения областей в последних 8кб, теперь ещё и управляет установкой чтения либо записи из визнета либо SPI:
TX (0) - означает, что мы пишем в визнет или SPI - при этом чтение запрещено (защита от мусорных /MEMR);
RX (1) - означает, что мы читаем из визнета или SPI - при этом чтение разрешено (собственно как и запись, которая может работать нестабильно).
ПЗУ разбито на 4 окна, переключемых путём записи в переключаемую область ПЗУ (0xD800...0xDFFF), но для пущей логичности можно считать адресом переключения #DFFF - это адрес последнего байта страницы ПЗУ, в который можно записать порядковый номер страницы плюс некая константа - например #A0, #A1, #A2, #A3, что позволит прочитать этот байт обратно после записи, чтобы удостовериться, что переключение произошло (описанный выше контрольный бит TX/RX не распространяется на ПЗУ, ОЗУ, триггеры и GPIO). Нулевая страница ПЗУ также всегда видна по адресам 0xD000...0xD7FF. В первых трёх байтах будет JP на инициализацию (3 байта), следом за которым (или по другому заранее известному адресу) может идти наименование платы и версия железа и прошивки - текстовая строка, завершающаяся нулём, например "SprinterNet v1.0.1 build 32 (2021-02-01)", 0
Пользователям будет рекомендовано использовать API из ПЗУ для работы с WIZNet и EEPROM, чтобы в будущем была возможность заменить сетевой модулёк или микросхему EEPROM.
ПЗУ в будущем также можно увеличить в объёмах (теоретически до 512 килобайт, адресуя 2КБ-страницы полными байтами вместо теперешних двух битов).
P.S. Также имея уникальные значения в последнем байте каждой страницы, можно достаточно просто узнать размер ПЗУ - пробуем переключиться на страницу #1F, записывая это число в #DFFF, и далее читаем обратно байт по адресу #DFFF:
- если там #A3, то размер ПЗУ 8К (как сейчас);
- если там #A7, то размер ПЗУ 16К;
- если там #AF, то размер ПЗУ 32К;
- если там #BF, то размер ПЗУ 64К.
Большие размеры наверное нет особого смысла задействовать, хотя ничего не мешает дойти до 512К...