Changes for page API контроллеров AZ®
Last modified by Max on 2025/03/02 15:18
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -311,61 +311,61 @@ 311 311 {{code language="assembler"}} 312 312 ;...................................... 313 313 314 -GetSiz=007; Получить"малый"размердиска314 +GetSiz=007; Get the "small" disk size 315 315 316 -; Отфрагмента3.2 (выбордиска)унасвR3остался317 -; адресDR (177222)316 +; From fragment 3.2 (disk selection) we have in R3 317 +; DR address (177222) 318 318 319 - MOV #GetSiz,-(R3); пошлемкоманду320 - TST (R3)+; вернемадресвR3назад,наDR319 + MOV #GetSiz,-(R3); send the command 320 + TST (R3)+; return the address in R3 back to DR 321 321 MOV @R3,DskSiz 322 322 ;...................................... 323 323 {{/code}} 324 324 325 -== **010:Разрешитьработусети**==325 +== 010: Allow network operation == 326 326 327 -Код команды 010. Закончив последовательность действий по передаче очередной порции данных, и ожидая, что следующий запрос последует не сразу же, можно "утилизировать" процессорное время микроконтроллера STM32, составляющего основу AZ - занять его обслуживанием сети. В той же RT-11 это можно сделать перед выходом из драйвера AZ, перед макрокомандой .DRFIN, завершающей исполнение запроса ввода-вывода. 328 -\\Действительно, операция ввода-вывода завершена, программа ЦП в системе будет готовить новую порцию данных для вывода, или соображать (на основании предыдущих прочитанных данных), где ей еще что-то прочитать, или вообще размышлять о чем-то своём. [[image:https://forum.maxiol.com/style_emoticons/default/smile.gif||alt="smile.gif"]] Другими словами, после окончания запроса ввода-вывода, довольно высока вероятность того, что последует пауза в работе с дисками AZ. Вот, время этой паузы и можно отдать на обслуживание сети. Для этого, перед исполнением макрокоманды .DRFIN в RT-11 или ее аналога в других ОС следует отправить в CSR код 110 (разрешить сеть плюс разрешить прерывания). 329 -\\Прерывание в этом случае не произойдет, оно активируется только по завершении "длительных" операций, которые переводят контроллер в состояние "Думаю, прошу не мешать", а установленный в "1" триггер разрешения прерываний, кроме этого, разрешает еще и работу сети, если она активирована. При запуске следующей операции ввода-вывода действия в п. 3.1 (сброс контроллера) сбросят и этот триггер, после чего программа обслуживания сети, обнаружив сброс этого триггера, прекратит (приостановит) свою работу и вернет управление основной программе обслуживания дисков AZ. Максимум, что можно заметить со стороны ЦП - это небольшая (10-20 мкс) задержка исполнения команды сброса, но это вполне умеренная плата за сетевые возможности. 330 - 327 +Command code 010. Having completed the sequence of actions for transferring the next portion of data, and expecting that the next request will not follow immediately, you can "utilize" the processor time of the STM32 microcontroller, which is the basis of AZ - occupy it with servicing the network. In the same RT-11, this can be done before exiting the AZ driver, before the .DRFIN macro command, which completes the execution of the input-output request. 328 +\\Indeed, the I/O operation is completed, the CPU program in the system will prepare a new portion of data for output, or figure out (based on the previously read data) where it should read something else, or generally think about something of its own. smile.gif In other words, after the I/O request is completed, there is a fairly high probability that there will be a pause in working with the AZ disks. So, the time of this pause can be given to servicing the network. To do this, before executing the .DRFIN macro in RT-11 or its analogue in other OS, you should send code 110 (enable network plus enable interrupts) to the CSR. 331 331 332 -== **011: Получить таблицу назначений приводов AZn** == 333 333 334 -Код команды 011. Получив эту команду, контроллер переключается с буфера для блока на свою внутреннюю таблицу назначений (32 строки по 140 байт каждая)* . Перед выдачей этой команды следует сбросить контроллер. После выдачи этой команды следует выдать команду 015 (чтение буфера), но в этом случае будет читаться не буфер, а та самая таблица, последовательно, слово за словом. 335 -\\* начиная с версии v17, длина имени файла уже не 130 байт, а 386 байт (последнее слово - нулевое, для окончания строки) 331 +In this case, the interrupt will not occur, it is activated only upon completion of "long" operations that transfer the controller to the "Thinking, please do not interfere" state, and the interrupt enable trigger set to "1" also enables network operation if it is activated. When the next input-output operation is started, the actions in paragraph 3.1 (controller reset) will also reset this trigger, after which the network service program, having detected the reset of this trigger, will stop (suspend) its work and return control to the main disk service program AZ. The maximum that can be noticed from the CPU side is a small (10-20 µs) delay in executing the reset command, but this is a very reasonable price for network capabilities. 336 336 337 - [[**//примерутилитыAZSMNT//**>>url:https://forum.maxiol.com/index.php?s=&showtopic=5605&view=findpost&p=59420]]333 +== 011: Get AZn drive assignment table == 338 338 335 +Command code 011. Upon receiving this command, the controller switches from the block buffer to its internal assignment table (32 lines of 140 bytes each)*. Before issuing this command, the controller should be reset. After issuing this command, command 015 (read buffer) should be issued, but in this case it will not be the buffer that is read, but the same table, sequentially, word by word. 336 +\\* starting with v17, the file name length is no longer 130 bytes, but 386 bytes (the last word is zero, to end the line) 339 339 340 - Примерпрограммы:338 +[[AZSMNT utility example>>url:https://forum.maxiol.com/index.php?s=&showtopic=5605&view=findpost&p=59420]] 341 341 340 + 341 +Example program: 342 + 342 342 {{code language="assembler"}} 343 343 ;................................... 344 -AZ$CSR = 177220; CSR контроллера345 -RdBuf = 012; Команда"Читатьизпамятиконтроллера"346 -RdTbl = 011; Команда"Читатьтаблицуназначений"347 -TblSiz = 1120.; Длинатаблицывбайтах(десятичная)345 +AZ$CSR = 177220; Controller CSR 346 +RdBuf = 012; Command "Read from controller memory" 347 +RdTbl = 011; Command "Read assignment table" 348 +TblSiz = 1120.; Table length in bytes (decimal) 348 348 349 -; Считаем, что в R2 находится адрес первого слова 350 -; области памяти для таблицы назначений. Процедуру 351 -; получения этого адреса не показываем. 350 +; We assume that R2 contains the address of the first word of the 351 +; memory area for the assignment table. We do not show the procedure for obtaining this address. 352 352 353 - MOV #AZ$CSR,R3; ГотовимCSRконтроллера353 + MOV #AZ$CSR,R3; Preparing the controller CSR 354 354 10$: CLR @R3; 355 - TSTB @R3; Сбросимконтроллер355 + TSTB @R3; Reset the controller 356 356 BPL 10$; 357 357 358 - MOV #RdTbl,@R3; Команда"Передать359 - ; таблицу"358 + MOV #RdTbl,@R3;Command "Transfer 359 + ; table" 360 360 361 - MOV #RdBuf,(R3+); Команда"Читатьиз362 -; памятиконтроллера.ОдновременнопередвинемадресвR3363 -; наDRконтроллера(177222).361 + MOV #RdBuf,(R3+); Command "Read from 362 +; controller memory. At the same time, move the address in R3 363 +; to the DR of the controller (177222). 364 364 365 - MOV #TblSiz/2,R1; Готовимсчетчикслов365 + MOV #TblSiz/2,R1; Prepare the word counter 366 366 367 -11$: MOV @R3,(R2)+; Перешлемтекущееслово368 - иповторим560раз367 +11$: MOV @R3,(R2)+; Send the current word 368 +SOB R1,11$; and repeat 560 times 369 369 ;................................... 370 370 {{/code}} 371 371