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
-
... ... @@ -472,57 +472,57 @@ 472 472 To write the opposite way, you first need to transfer the entire data block from the CPU memory to the controller and then issue the command "Write the contents of the buffer to disk" 473 473 474 474 475 -== 016: Receivedatablockintobuffer==475 +== **016: Принять блок данных в буфер** == 476 476 477 - Commandcode016.Thecommandsetsthecontrollertoreceiveablockofdataand place it in the buffer.Thenext256writecyclestoDRwillplacethedatatransferredviathe QBUS in the buffer.478 -\\ Exampleprogram:477 +Код команды 016. Команда настраивает контроллер на прием блока данных и помещении его в буфер. Следующие 256 циклов записи в DR поместят данные, переданные через МПИ, в буфер. 478 +\\Пример программы. 479 479 480 480 {{code language="assembler"}} 481 481 ;.................................. 482 482 483 -WrBuf=016; Symbolicnameof the command483 +WrBuf=016; Символическое наименование команды 484 484 485 -; Beforewriting,youneedtoperformthesameactionsas in486 -; pp. 3.1.-3.3.Usually,thisisthesameprogram,487 -; justafterpoint3.3.acheckis performed"What488 -; is required:readingorwriting?"andabranch is made to the489 -; readingorwritingprogram.485 +; Перед записью нужно выполнить те же действия, что и в 486 +; пп. 3.1.-3.3. Обычно, это одна и та же программа, 487 +; просто после пункта 3.3. выполняется проверка "Что 488 +; требуется: чтение или запись?" и разветвление на 489 +; программу чтения или записи. 490 490 491 -; Afterthefragmentinpoint3.3.,theCSRaddress492 -; (177220) remains in R3.WewillassumethatR2containstheaddress in the CPU493 -; memorywheretheblocktobewritten is located.494 -; Theprogramforobtainingthisaddress is not shown.491 +; После фрагмента в п. 3.3. в R3 остался адрес CSR 492 +; (177220). Будем считать, что в R2 находится адрес в 493 +; памяти ЦП, где находится блок, подлежащий записи. 494 +; Программа получения этого адреса не показана. 495 495 496 - MOV #400,R1; Preparing the counter496 + MOV #400,R1; Готовим счетчик 497 497 498 - MOV #WrBuf,(R3)+; Let'sforwardthe command to theCSRand499 - ;switchtheaddressinR3to500 -; DR 498 + MOV #WrBuf,(R3)+; Перешлем команду в CSR и 499 + ; переключим адрес в R3 на 500 + ; DR 501 501 502 -4$: MOV (R2)+,@R3; Let'sforward the next word503 -; data504 - SOB R1,4$; andrepeatthis256times502 +4$: MOV (R2)+,@R3; Перешлем очередное слово 503 + ; данных 504 + SOB R1,4$; и повторим это 256 раз 505 505 ;.................................. 506 506 {{/code}} 507 507 508 -== 017: Getramdisk size,large==508 +== **017: Получить размер псевдодиска, большой** == 509 509 510 - Therearetwocommandstoget the size of a pseudo-disk,i.e.theAZnfile-imagemountedonthe selected pseudo-drive.511 -\\ IftheOSbeing used(oraprogramworkingwithdiskswithout an OS)canworkwithlarge(morethan32M)disks,youshouldusethecommandwith the code017.Thesequence of actions:resetthecontroller(p. 3.1),selectthedrive(p. 3.2)andsendthecode017to the CSR,andthen,withoutanywaiting,readfromDRfirstthe lower word,andthenthehigherwordofthesizeofthe selected drive(image file).512 -\\ IftheOSyouareusingcannotworkwithdiskslarger than32M(RT-11),youshouldusethe007command-getthepseudo-disksizewithalimit of up to32M.Thesteps are similar:resetthe controller,selectthe disk,sendthe007 code to theCSRandreade wordofthepseudo-disksize fromDR.Ifthesizeoftheimagefilemountedontheselectedpseudo-driveis larger than65534blocks,thecontrollerreturnsthenumber65534instead of this "large" size.Weremindyouthat the number65535isusedinsomeplacesforspecialpurposesandcannotbe the disk size.513 -\\ Wealsoremindyouthatiftheimagefileis not mounted on this drive,thesequenceofactionswill not work(command001selectdevice)andtheprogramexecutionwillsimplynotreachthis point.Therefore,thesecommandsdonotprovidefor errors.514 -\\ Exampleofaprogramwith large disks510 +Есть две команды получения размера псевдодиска, т.е. смонтированного на выбранный псевдопривод AZn файл-образа. 511 +\\Если используемая ОС (или программа, работающая с дисками без ОС) умеет работать с большими (больше 32М) дисками, следует пользоваться командой с кодом 017. Последовательность действий: сбросить контроллер (п. 3.1), выбрать накопитель (п. 3.2) и переслать в CSR код 017, а затем, без каких-либо ожиданий, считать из DR сначала младшее, и следом за ним старшее слово размера выбранного накопителя (файл-образа). 512 +\\Если используемая ОС не умеет работать с дисками бОльшими, чем 32М (RT-11), следует пользоваться командой 007 - получить размер псевдодиска с ограничением до 32М. Действия похожие: сбрасываем контроллер, выбираем диск, посылаем в CSR код [[007>>doc:||anchor="H007:41F43E43B44344743844244C44043043743C43544043F44143543243443E43443844143A430"]] и считываем из DR одно слово размера псевдодиска. Если размер файл-образа, смонтированного на выбранный псевдопривод, больше 65534 блоков, вместо этого "большого" размера, контроллер возвращает число 65534. Напоминаем, что число 65535 кое-где используется в специальных целях и не может быть размером диска. 513 +\\Также напоминаем, что если на этот накопитель не смонтирован файл-образ, последовательность действий не пройдет (команда 001 выбор устройства) и исполнение программы до этого места просто не дойдет. Поэтому ошибок у этих команд не предусмотрено. 514 +\\Пример программы с большими дисками 515 515 516 516 {{code language="assembler"}} 517 517 ;...................................... 518 518 519 -GetBig=017; Getthe"big"disksize519 +GetBig=017; Получить "большой" размер диска 520 520 521 -; Fromfragment3.2 (diskselection)wehaveinR3522 -; DR address(177222)521 +; От фрагмента 3.2 (выбор диска) у нас в R3 остался 522 +; адрес DR (177222) 523 523 524 - MOV #GetBig,-(R3); sendthe command525 - TST (R3)+; returntheaddressinR3backtoDR524 + MOV #GetBig,-(R3); пошлем команду 525 + TST (R3)+; вернем адрес в R3 назад, на DR 526 526 MOV @R3,BigSiz 527 527 MOV @R3,BigSiz+2 528 528 ;......................................