Если у нас будет возможность писать с хоста в оба порта (запоминая младший бит адреса на триггере), то управляющий протокол может быть таким:
Code: Select all
xxxx xx00 - application specific
xxxx xx01 - application specific
xxxx xx10 - used by ACIA emulator
xxxx x011 - reset to application (00000011 - default app, otherwise one of 31 specific apps)
xxxx 0111 - set least significant nibble of the working address (and keep most significant nibble as is)
xxxx 1111 - set most significant nibble of the working address (least significant nibble is cleared in this case)
Данные вычитываемые из порта контроля и порта данных после перезагрузки приложения будет зависеть от приложения.
Чтение из порта данных после установки адреса будет выдавать байт по текущему адресу, смещая адрес на 1 после выдачи (порт контроля будет выдавать флаг готовности).
Запись в порт данных после установки адреса будет производить запись байта по текущему адресу, смещая адрес на 1 (порт контроля будет выдавать флаг вычитки).
Два обязательных бита в порту контроля:
бит 0 - флаг готовности входных данных
бит 1 - флаг пустоты выходного буфера
Диапазоны адресов:
Code: Select all
#00...#3F - EEPROM (64 bytes, read & write)
#40...#7F - reserved for future (2nd EEPROM area)
#80...#9F - function calls (32 functions, no address increment, ports behavior depends on function)
#A0...#BF - variables from dedicated area of data memory (32 bytes, read & writes)
#C0...#FF - constants from dedicated area of code memory (64 bytes, read only)
Начало области EEPROM будет доступно пользователю. Конец области будет использоваться системой, но пользователь все равно может туда что-то писать, например:
EEPROM ячейка с адресом #3F (63) может содержать номер приложения, запускаемого по умолчанию (при включении питания либо по дефолтному ресету 00000011).
Константы могут сообщать юзеру о конфигурации сайдкиковой системы, например:
#FF - байт, описывающий целевую систему: #00 - ошибка, #01 - PIC16F871, #02 - PIC16F874. #03 - PIC16F877 (сюда же можно писать количество покрываемых системой портов - скажем в старшие 2 бита: 01 это 2 порта, 10 это 4 порта и 11 это 8 портов - хотя это наверное уже вряд ли);
#FE - две старшие цифры версии прошивки (каждая 0...15);
#FD - младшая цифра версии (0...255);
#FC - количество предзашитых приложений (их запрещается стирать, в отличие от приложений, прошиваемых пользователем);
#C0... - тут может быть строка, идентифицирующая конкретную сборку, например "nedoPC Sidekick with nedoText for RC2014" (41 байт с нулём).
Имя автора и дату сборки наверное тоже можно, но наверное пока ненужно...