![]() |
Quote:
|
Если загрузчик TU58 использует сигнал BREAK, то он не начнёт нормально работать до тех пор, пока в нужные места эмулятора не будут вставлены вызовы SetCommBreak и ClearCommBreak.
|
Эксперимент по запуску эмулятора TU58 с "Эмулятором ДВК" показал, что эмуляция сигнала BREAK для работы с эмулятором TU58 через com0com не обязательна.
После запуска - TU58.exe предлагает нажать клавишу [Esc] и пропустить ожидание сигнала BREAK. После чего начинает обрабатывать пакеты в заданном порту, позволяя результативно выполнить в эмуляторе ДВК команды DIR DD: и BOOT DD: ---------- Post added at 16:05 ---------- Previous post was at 14:48 ---------- Выяснилось, что эксперимент по работе с эмулятором TU58 без сигнала BREAK был не вполне корректным - оказывается, и эмулятор последовательного порта в "Эмуляторе ДВК", и адаптер COM-порта в модульном API поддерживают передачу сигнала BREAK. В описании com0com тоже указано, что передача сигнала BREAK не просто поддерживается, а многократно улучшалась. Однако, эмулятор TU58 начал нормально работать только после отключения ожидания сигнала BREAK нажатием клавиши [Esc]. Так что пока вся эта история с сигналом BREAK выглядит довольно непонятно. |
1 Attachment(s)
как бы вот, после нажатия ESC
http://zx-pk.ru/attachment.php?attac...1&d=1359728766 |
Quote:
Посылку BREAK добавить нетрудно - когда программа устанавливает бит 00 в статусе передатчика - нужно вызвать SetCommBreak( hComPort ) ( и ещё можно сделать Sleep(15) - тогда Windows успевает отреагировать до сброса этого бита эмулятором ), а когда программа обнуляет установленный бит 00 - нужно вызвать ClearCommBreak( hComPort ) ( здесь Sleep уже не нужен ). ---------- Post added at 20:45 ---------- Previous post was at 19:45 ---------- Хотя, если внимательнее присмотреться к сообщениям TU58.exe: Code:
command 2 count 800 block 2Поэтому, ситуация с сигналом BREAK в данном конкретном случае не вполне ясна - если TU58.exe и без сигнала BREAK передал загрузчик, то на чём всё потом остановилось.. Однако, когда я отключил BREAK в эмуляторе ДВК и дал DIR DD: - эффект был нулевой, а с посылкой BREAK - всё работало как надо. ---------- Post added at 20:49 ---------- Previous post was at 20:45 ---------- Возможно, в последнем случае дело было не в самом сигнале BREAK, а в том, что при подаче BREAK эмулятор делал Sleep(15) - вот TU58.exe и успевал ответить до отвала драйвера DD.SYS по таймауту. Сейчас проверю эту гипотезу.. ---------- Post added at 20:59 ---------- Previous post was at 20:49 ---------- ДА! TU58.exe нормально работает без BREAK !!! Если вместо сигнала BREAK просто делать Sleep(15) - TU58.exe без проблем обслуживает любые запросы драйвера DD.SYS Только что загрузил RT-11 c DD: с отключенной посылкой BREAK. |
1 Attachment(s)
Quote:
http://zx-pk.ru/attachment.php?attac...1&d=1359741657 |
Quote:
Есть уже отладочная печать в том месте, где бит переполнения устанавливается ? Из-за переполнения проблема или нет ? |
1 Attachment(s)
Quote:
Quote:
http://zx-pk.ru/attachment.php?attac...1&d=1359744341 Подскажите куда втыкать SetCommBreak, там где порт инициализируется или там где бит 00 обрабатывается. |
Quote:
Code:
void CFirstMemoryController::SetPortByte(WORD address, BYTE byte) |
Я вот думаю -- не проще ли сразу после SystemFrame() вызвать SetCommBreak(), а непосредственно перед SystemFrame() сделать ClearCommBreak().
Если проблема действительно в паузе между фреймами, это может помочь. ---------- Post added at 17:10 ---------- Previous post was at 17:00 ---------- Попробовал -- не помогает. Кроме того, я пробовал запускать загрузку по сети когда оба эмулятора работают на полной скорости (без звука) -- загрузка тоже падает с ошибкой. |
| All times are GMT +4. The time now is 02:52. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.