Я размышлял, как бы сделать в проекте с микропроцессором 1801ВМ2 загрузку
программы в ОЗУ через LPT-порт без программы-загрузчика в ПЗУ, да и без
самой ПЗУ в составе системы так, как
я делал вот в этом своём проекте.
Вся трудность заключается в том, что процессор был 8-битный, и 8-разрядный
LPT-порт справлялся с задачей без проблем.
Для 16-разрядного процессора загрузка через 8-разрядный LPT-порт уже не так
проста. И я вспомнил, что в этой ветке топикстартер делал загрузку в свою
16-разрядную систему через LPT-порт.
Однако данное решение, хотя и работоспособно в принципе, в современных версиях
ОС Windows реализовать довольно затруднительно: ну не любят современные ОС
прямое обращение к битам LPT-порта, а предпочитают работу по своему протоколу
интерфейса Centronics.
Ситуация, когда LPT-порта физически нет, а есть переходник USB-LPT, как в большинстве
современных ноутбуков, практически однозначно не позволяет управлять LPT-портом
побитно, поскольку переходники, позволяющие это, весьма редки...
Немного поразмыслив и проведя небольшой эксперимент, я пришел к выводу, что
проблема имеет довольно несложное решение при весьма незначительном усложнении
схемотехники узла загрузки программы через LPT-порт по протоколу Centronics.
Я ввёл в схему узла D-триггер в качестве счётчика до двух, и два вентиля, которые
распределяют сигнал /STROBE LPT-порта на два регистра, и лишь после записи
во второй регистр, когда данные для 16-разрядного процессора готовы, сигнал
RDY разрешает микропроцессору их считать.
После выполнения считанной команды, процессор снова обращается к памяти сигналом
чтения, чем опять вызывает состояние Wait, которое разрешает LPT-порту принтера
и управляющей программе "впечатать" очередные данные.
Ниже приведена принципиальная схема узла.
LPT_Load.gif
В архиве - проект, иллюстрирующий подобный принцип работы с регистрами.
LPT_LOAD.zip
Формирование сигнала BUSY происходит лишь на момент, когда процессор
исполняет "впечатанную" команду. В этот момент "печать" следует приостановить.
По протоколу Centronics перед началом цикла передачи данных компьютер должен
убедиться, что сняты сигналы BUSY и /ACK. После этого выставляются данные,
формируется строб, снимается строб, и снимаются данные.
Сигнал /ACK вырабатывается при каждом обращении, поскольку LPT-порт вырабатывает
аппаратное прерывание по импульсу на входе /ACK, и, как пишут, Windows работает
с печатью сугубо по прерываниям.
Устройство примерно соблюдает следующую диаграмму обмена:
LPT_Centronics.gif
You do not have the required permissions to view the files attached to this post.