
Сообщение от
pvlad
Мне кажется, приделывание временных решений к новому изделию - это и есть "колхозить". Не в обиду!
Как мне представляется решение этой проблемы?
Во первых, в ПЛИС незачем держать два Монитора - достаточно одного М3. Он грузится в F800 и имеет контрольную сумму. Если при последующих Ресетах контрольная сумма подтверждается, то Монитор повторно не загружается из ПЛИС, а сохраняется неизменным содержимое в F800-FFFF. Это позволит вместо М3 загрузить свой Монитор со своей контрольной суммой. При этом он не будет перезаписываться М3 из ПЛИС при нажатии кнопки Reset. Чтобы восстановить М3, необходимо будет временно выключить питание-получить сбой по контрольной сумме.
Так решим проблему приверженности к "своей" версии Монитора. Да и записанный в ПЛИС Монитор не должен быть панацеей на все случаи, а лишь стартовой ступенькой.
На месте освободившихся 2К в ПЛИСС, необходимо сделать универсальный загрузчик. Такую мысль уже высказывал svofski в 212 топике.
Алгоритм этого загрузчика следующий: после RESET (с Мониторами уже разобрались!) загрузчик проверяет наличие SD-карты. Если она есть - грузится ВООТ (не важно чей он - СРМ или еще что-то) и передается ему управление. Можно в буте иметь адрес его загрузки, и не обязательно грохать его в 0000Н. Мы же зачем-то делали "дырки" в памяти между портами?
Если SD-карты нет, то проверяется наличия РОМ-диска. Критерий следующий: если первый байт "С3" - значит в ПЗУ ОРДОС (грузится по известным правилам), если "FF" - ПЗУ пустое - переход на выполнение далее. Если же любой другой байт, то он расценивается как наличие в ПЗУ новых параметров загрузки, где первые два байта - адрес загрузки, следующие два байта - количество загружаемых байт, и еще два байта - адрес передачи управления. Сама информация в ПЗУ находится с адреса 10Н.
Если в первом байте ПЗУ "FF" (нет ПЗУ-флешки, или она не запрограммирована), то управление передается загрузчику по RS-232. Он в цикле опрашивает готовность RS-232 и статус клавиатуры. Висит до бесконечности, пока не получит байт по RS-232, или не будет нажата клавиша клавиатуры. Загрузка начинается с адреса 0000Н и заканчивается по команде "конец передачи" (?), при этом контролируется переполнение ОЗУ до адреса конца экрана. По окончанию загрузки, управление автоматически передается по адресу 0000Н.
Если же была нажата клавиша клавиатуры, как во время ожидания приема так и в процессе приема (а также при отпускании RESET!), то загрузчик переходит в командный режим, где можно указать любой свой адрес загрузки, а затем передать управление на адрес по своему желанию. Здесь можно иметь еще три дополнительные команды: просмотр дампа памяти, модификация ячейки памяти и программатор флеша.
Вот при таком алгоритме загрузки можно "угодить" всем. ERROR404 будет вставлять свою SD-шку и грузить СРМ, а не вставив ее, ортодоксальные ордошники получат свою ОРДОС или еще что-то по своему усмотрению. А если и флешка пустая (или не нужна!!!) - есть прямая загрузка по RS-232. Хочешь - выполняй загруженную программу, а хочешь - запиши во флешку - программатор под рукой.
Ну, вот и вся постановка задачи - осталось только написать (2-3 вечера!). Это тянет где-то на полкило, так что в ПЛИС еще останется место для будущих задумок. И что главное, Сергей - нет никакой графики, как ты и хотел!