А так у же получается аппаратное пошаговое выполнение кода программы! Хорошая идея для дальнейшего развития.
Вид для печати
Прочитать блок с карты SD - потребует времени больше, чем допустимое время таймаута. Только после того, как сектор считан (во внутренний буфер) - можно его (из внутреннего буфера) передавать на шину QBus
Смысла как бы нет - уже сделали AZ
- - - Добавлено - - -
Ну, идея не новая :)
В моем микроконтроллере 196 кБ памяти. По идее этой памяти хватит, чтоб загрузить область с именами файлов и адресами на диске, а дальше можно и отлавливать тайм аут RPLY и отвечать процу Занято, пока ДМА микроконтроллера будет читать данные.
Правда, для этого проц должен понимать, что ему отвечают, те дело в драйвере.
Если напишите последовательность действий, я попробую сделать по правильному.
Вот что на шине за -055 (xs1)
Скрытый текст
160000:0000 160002:8000 160300:C417 160302:0000 172660:2801 160304:0000 160306:0611 160310:0001 160312:DF35 160314:1000 160316:0000 177716:8000 444:0004 177777:0006 177777:0122 440:000C 0:000E
[свернуть]
Alex_K, извини, не переписал как ты просил, тут адреса и перепутанные местами данные. Похоже, что 055 жива.
По правильному это
- есть регистры устройства и общение с ними должно быть по правилам QBus - то есть при обращении к ним ответ сразу и никаких таймаутов.
- есть данные на sd карте - и для чтения/записи их выполняется классический цикл - то есть устройство через регистры получает команду с аргументами и начинает выполнять её, попутно поддерживая работу с регистрами со стороны шины QBus (в каком объёме - это уже второй вопрос, но нормально откликаться оно должно). По завершению - выставление бита готовности и, если устройство работает по прерываниям и они для него разрешены (бит разрешения прерываний), - отработка цикла прерываний.
- если устройство работает по DMA - то по мере чтения (если возможно) или после полного чтения - отработка цикла DMA
Я так и понял, что разговор у нас "слепого и глухого", не поймите меня не правильно! Очень не часто встречаются устройства которые "занято" говорят подтягиванием какой-нибудь ноги на шине, чаще всего в ответ на запрос по адресу памяти/порта/регистра прилетают данные в которых программе (драйверу) говорится, что устройство Занято, а если вообще ни чего не пришло - то устройства там просто нет. Например, те же РЕ хоть и не говорят Занято, но на выставленный адрес и RE всегда отвечают данными, а уже программа (пусть она в РЕшки и зашита) решает, что с этими данными делать.
Честно говоря, ожидал такого: пишу в адрес 1777.. слово хххх, жду от туда уууу и т.д.
- - - Добавлено - - -
Alex_K, интересный момент вот здесь: 160316:0000 - это считалось тестером на XS1, а там CEFF, читалось когда тестер был вместо 205 ПЗУ. 0000 - будут когда действительно там 0000 либо когда SYNC пришел раньше RE или RPLY.
- - - Добавлено - - -
Вот только адреса на XS1:
Скрытый текст
160000 160002 160300 160302 172660 160304 160306 160310 160312 160314 160316 177716 446 444 4 6 442 440 14 16 0 160000 160002 160300 160302 172660 160304 160306 160310 160312 160314 160316 177716 446 444 4 6 442 440 14 16 0 2 436 434 10 12 0 2 432 430 10 12 0 2 426 424 10 12 0 2 422 420 10 12 0 2 416 414 10 12 0 2 412 410 10 12 0 2 406 404 10 12 0 2 402 400 10 12 0 2 376 374 10 12 0 2 372 370 10 12 0 2 366 364 10 12 0 2 362 360 10 12 0 2 356 354 10 12 0 2 352 350 10 12 0 2 346 344 10 12 0 2 342 340 10 12 0 2 336 334 10 12 0 2 332 330 10 12 0 2 326 324 10 12 0 2 322 320 10 12 0 2 316 314 10 12 0 2 312 310 10 12 0 2 306 304 10 12 0 2 302 300 10 12 0 2 276 274 10 12 0 2 272 270 10 12 0 2 266 264 10 12 0 2 262 260 10 12 0 2 256 254 10 12 0 2 252 250 10 12 0 2 246 244 10 12 0 2 242 240 10 12 0 2 236 234 10 12 0 2 232 230 10 12 0 2 226 224 10 12 0 2 222 220 10 12 0 2 216 214 10 12 0 2 212 210 10 12 0 2 206 204 10 12 0 2 202 200 10 12 0 2 176 174 10 12 0 2 172 170 10 12 0 2 166 164 10 12 0 2 162 160 10 12 0 2 156 154 10 12 0 2 152 150 10 12 0 2 146 144 10 12 0 2 142 140 10 12 0 2 136 134 10 12 0 2 132 130 10 12 0 2 126 124 10 12 0 2 122 120 10 12 0 2 116 114 10 12 0 2 112 110 10 12 0 2 106 104 10 12 0 2 102 100 10 12 0 2 76 74 10 12 0 2 72 70 10 12 0 2 66 64 10 12 0 2 62 60 10 12 0 2 56 54 10 12 0 2 52 50 10 12 0 2 46 44 10 12 0 2 42 40 10 12 0 2 36 34 10 12 0 2 32 30 10 12 0 2 26 24 10 12 0 2 22 20 10 12 0 2 16 14 10 12 0 2 12 10 10 12 2 4 6 4 10 12 2 4 2 0 10 12 2 4 160170 160172 160240 160242 160244 172662 500 160246 160250 160614 160616 172664 472 160620 160622 172660 450 160624 160626 172660 160630 160632 450 160634 452 160636 454 160640 456
[свернуть]
- - - Добавлено - - -
А вот как ведет себя живая УКНЦ:
Скрытый текст
160000 160002 160300 160302 172660 160304 160306 160310 160312 160314 160316 177716 160320 160322 160332 160334 160336 177716 160340 160342 446 173252 173254 173256 177010 173260 173262 173264 173266 173270 173272 160000 177014 173274 173276 177010 173300 173302 173270 173272 160002 177014 173274 173276 177010 173300 173302 173270 173272 160004 177014 173274 173276 177010 173300 173302 173270 173272 160006 177014 173274 173276 177010 173300 173302 173270 173272 160010 177014 173274 173276 177010 173300 173302 173270 173272 160012 177014 173274 173276 177010 173300 173302 173270 173272 160014 177014 173274 173276 177010 173300 173302 173270 173272 160016 177014 173274 173276 177010 173300 173302 173270 173272 160020 177014 173274 173276 177010 173300 173302 173270 173272 160022 177014 173274 173276 177010 173300 173302 173270 173272 160024 177014 173274 173276 177010 173300 173302 173270 173272 160026 177014 173274 173276 177010 173300 173302 173270 173272 160030 177014 173274 173276 177010 173300 173302 173270 173272 160032 177014 173274 173276 177010 173300 173302 173270 173272 160034 177014 173274 173276 177010 173300 173302 173270 173272 160036 177014 173274 173276 177010 173300 173302 173270 173272 160040 177014 173274 173276 177010 173300 173302 173270 173272 160042 177014 173274 173276 177010 173300 173302 173270 173272 160044 177014 173274 173276 177010 173300 173302 173270 173272 160046 177014 173274 173276 177010 173300 173302 173270 173272 160050 177014 173274 173276 177010 173300 173302 173270 173272 160052 177014 173274 173276 177010 173300 173302 173270 173272 160054 177014 173274 173276 177010 173300 173302 173270 173272 160056 177014 173274 173276 177010 173300 173302 173270 173272 160060 177014 173274 173276 177010
[свернуть]
Вообще-то я всегда и всем напоминаю: вникаешь в Q-bus/МПИ, читай документ 3.858.382 ТО "Центральный процессор М2". Ну очень полезная книга, несмотря на то, что она про самый первый вариант МПИ, с 16-разрядным адресом. Есть, правда, пара мест, где упоминается 18-разрядный, и все. Но, зная про обмен по МПИ в объеме этой книжки, разобраться с 16/22-разрядными адресами - 5 минут.
В общем, прикинулся я портом 177716, с ответом 20 в восьмеричной системе, получил следующее:
Скрытый текст
160000 160002 160300 160302 172660 160304 160306 160310 160312 160314 160316 177716 160320 160322 160324 0 160326 160330 160332 177777 446 444 4 177777 6 442 440 14 16 0 2 436 434 10 12 0 2 432 430 10 12 0 2 426 424 10 12 0 2 422 420 10 12 0 2 416 414 10 12 0 2 412 410 10 12 0 2 406 404 10 12 0 2 402 400 10 12 0
[свернуть]
Программа обработала сигнал от порта, но все равно "умерла" на 177777 порту. Странный адрес.. 0xFFFF
В общем, я теперь умею не только слушать, но и отвечать.
А вот 020 и не надо было отвечать. Для нормального старта нужно чтобы 4-й бит был нулевым. А так начался исполняться код, который осуществляет запуск с нулевого адреса ОЗУ, а там мусор.
Кстати, а общение шло через разъём XS1? И если через этот разъём, то все сигналы, т.е. не только адрес-данные, но и DIN, SYNC, RPLY?