Ну или разделять последнее 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: Select all
A13|TRG => A14'|A13'
0 | 0 => 0 | 0
0 | 1 => 0 | 0
1 | 0 => 1 | 0
1 | 1 => 1 | 1
Вторая половинка 74LS139 может пойти на формирование 4 выборок для подменяемого ПЗУ, т.е. оно должно управляться двумя битами, значит запись по адресу #DFFF должна устанавливать 2 триггера...
P.P.P.S. Чуть позже решил выкинуть RTC и добавить serial EEPROM - после этого карта памяти такая получилась (последнее изменение сделано 23 января 2021):
Code: Select all
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)