Last modified by Max on 2025/03/02 15:18

From version 1.13
edited by Max
on 2025/02/25 11:46
Change comment: (Autosaved)
To version 1.2
edited by Max
on 2025/02/25 10:51
Change comment: (Autosaved)

Summary

Details

Page properties
Content
... ... @@ -113,60 +113,59 @@
113 113  
114 114  
115 115  To perform these actions, you must send the required part of the block number bits to DR and then send the command code to CSR, after which you must check for an error. The commands are instantaneous, i.e. they are executed in one QBUS access cycle.
116 -\\Example of a program - 16-bit  version block number:
116 +\\Example of a program - 16-bit  version :
117 117  
118 118  {{code language="assembler"}}
119 119  ;.......................................
120 120  
121 -SetBlk=002; Symbolic name of the command
122 -; "Set the lower 16 bits of the block number"
121 +SetBlk=002; Символическое наименование команды
122 +; "Установить младшие 16 разрядов номера блока"
123 123  
124 -; The address DR
125 -; (177222) remained in R3 from the previous fragment
126 -; We assume that the cell labeled BLCUR contains the 16-
127 -; bit disk address (the block number to be
128 -; input or output). The procedure for obtaining this number is not
129 -; shown
124 +; От предыдущего фрагмента в R3 остался адрес DR
125 +; (177222)
126 +; Считаем, что в ячейке с меткой BLCUR находится 16-
127 +; разрядный дисковый адрес (номер блока, подлежащего
128 +; вводу или выводу). Процедура получения этого номера не
129 +; показана
130 130  
131 - MOV BLCUR,@R3;We place the block number to be exchanged in DR.
132 -
131 + MOV BLCUR,@R3; Помещаем в DR номер блока,
132 + ; подлежащего обмену.
133 133  
134 - MOV #SetBlk,-(R3); We send the command to the CSR
135 -; do not forget that the address in R3 will decrease by
136 -; 2 before sending and will remain so
134 + MOV #SetBlk,-(R3); Посылаем команду в CSR
135 +; не забываем, адрес в R3 перед пересылкой уменьшится на
136 +; 2 и таким останется
137 137  
138 - TST @R3; We check for an error
138 + TST @R3; Проверяем на ошибку
139 139  
140 140   BMI ERR3
141 141  
142 -; In the 32-bit version, the same actions should be
143 -; repeat for the senior 16 bits (actually,
144 -; senior 7, the rest should be zeros, because the maximum
145 -; size of a pseudo disk is 4G) of the disk address.
142 +; В 32-разрядном варианте те же действия следует
143 +; повторить для старших 16 разрядов (на самом деле,
144 +; старших 7, остальные должны быть нулями, ибо максимум
145 +; размера псевдодиска - 4Г) дискового адреса.
146 146  
147 -; Note that in R3 the CSR address remains, and not
148 -; DR, as in the two previous fragments. This is done
149 -; on purpose.
147 +; Обратите внимание, что в R3 остался адрес CSR, а не
148 +; DR, как в двух предыдущих фрагментах. Это сделано
149 +; специально.
150 150  
151 151  ;.......................................
152 152  {{/code}}
153 153  
154 154  
155 -== 003: Open HFS Table of Contents ==
155 +== **003: Открыть оглавление HFS** ==
156 156  
157 -Sequence of actions:
157 +Последовательность действий
158 +\\• [[сбросить контроллер>>doc:||anchor="H000:A042143144043E44143A43E43D44244043E43B43B435440430"]]
159 +• подать в CSR команду "Принять блок данных в буфер" и передать пословно всю строку с полным текстом пути (Full Path) к требуемому оглавлению. Строка должна завершаться нулевым байтом (0х00) и быть не длиннее 384 байт (192 слов).
160 +• переслать в CSR код команды "Открыть оглавление"
161 +• дождаться ее окончания (команда длительная)
162 +• проверить на ошибку
158 158  
159 -• reset the controller
160 -• send the command "Accept data block to buffer" to the CSR and transmit the entire line with the full path text (Full Path) to the required table of contents word by word. The line must end with a zero byte (0x00) and be no longer than 384 bytes (192 words).
161 -• send the "Open table of contents" command code to the CSR
162 -• wait for it to finish (the command is long)
163 -• check for errors
164 +[[**//Пример утилиты - AZDIR//**>>url:https://forum.maxiol.com/index.php?s=&showtopic=5605&view=findpost&p=59418]]
164 164  
165 -[[Example utility - AZDIR>>url:https://forum.maxiol.com/index.php?s=&showtopic=5605&view=findpost&p=59418]]
166 166  
167 +Пример программы:
167 167  
168 -Example program:
169 -
170 170  {{code language="assembler"}}
171 171  ;.............................
172 172  AZ$CSR = 177220
... ... @@ -174,44 +174,46 @@
174 174  OpnDir = 003
175 175  
176 176   MOV #AZ$CSR,R3
177 -; The DirPtr cell contains a pointer to the beginning of the field with Full
178 -; Path. We assume that the string is terminated by three zero
179 -; bytes in order to recognize the end of the transfer of the
180 -; string word by word by zero. Indeed, if the number of
181 -; characters in the string is even, then the next two bytes of zeros
182 -; form a zero word; if it is odd, then one zero
183 -; will go away with the last character of the string, and the zero
184 -; word is formed by the second and third zero bytes,
185 -; ending the string. That is, such an end of the string,
186 -; transferred word by word, is quite reliable.
176 +
177 +; Ячейка DirPtr содержит указатель на начало поля с Full
178 +; Path. Считаем, что строка завершается тремя нулевыми
179 +; байтами, чтобы распознать по нулю окончание пересылки
180 +; строки пословно. Действительно, если количество
181 +; символов в строке четное, то следующие два байта нулей
182 +; образуют нулевое слово; если же нечетное, то один ноль
183 +; уйдет вместе с последним символом строки, а нулевое
184 +; слово образуют второй и третий нулевые байты,
185 +; оканчивающие строку. То есть, такое окончание строки,
186 +; передаваемой пословно, вполне надежно.
187 187   MOV DirPtr,R2
188 188  
189 - MOV #WrBuf,(R3)+; We issue the "Write to
190 - ; buffer" command and transmit the string
191 -11$: MOV (R2)+,@R3; word by word,
192 - BNE 11$ ;until zero is sent,
189 + MOV #WrBuf,(R3)+; Подаем команду "Запись в
190 + ; буфер" и передаем строку
191 +11$: MOV (R2)+,@R3; пословно, до тех пор,
192 + BNE 11$ ; пока не перешлется ноль
193 193  
194 - MOV #OpnDir,-(R3); We issue the "Open
195 - ; table of contents" command
194 + MOV #OpnDir,-(R3); Подаем команду "Открыть
195 + ; оглавление"
196 196  
197 -12$: TSTB @R3; and wait for the controller to
198 - BPL 12$; execute it,
199 - TST @R3; after which we check for an error.
200 - BMI Err10; Error -->
197 +12$: TSTB @R3; и ждем, когда контроллер ее
198 + BPL 12$; выполнит,
199 + TST @R3; после чего проверяем на ошибку.
200 + BMI Err10; Ошибка -->
201 201  ;.............................
202 202  {{/code}}
203 203  
204 -== 004: Mount a disk ==
204 +== **004: Монтировать диск** ==
205 205  
206 -Sequence of actions:
207 -• Reset the controller
208 -• Send a line to the controller with a record similar to the lines describing the disks in the AZ.INI file
209 -• Issue the "Mount disk" command
210 -• Wait for it to finish (the command is long)
211 -• Check for errors
212 -The selected AZnn drive MUST NOT have a disk mounted. If it is mounted, the old disk should be unmounted before mounting a new one - command 014
206 +Порядок действий:
207 +• [[Сбросить контроллер>>doc:||anchor="H000:A042143144043E44143A43E43D44244043E43B43B435440430"]]
208 +• Переслать в контроллер строку с записью, подобной строкам описания дисков в файле AZ.INI
209 +• Выдать команду "Монтировать диск"
210 +• Дождаться ее окончания (команда длительная)
211 +• Проверить на ошибки
212 +На выбранный накопитель AZnn НЕ ДОЛЖЕН быть смонтирован диск. Если он таки смонтирован, перед монтированием туда нового диска следует размонтировать старый - команда 014
213 +
213 213  
214 -Example program:
215 +Пример программы:
215 215  
216 216  {{code language="assembler"}}
217 217  ;..................
... ... @@ -221,20 +221,20 @@
221 221   MOV #AZ$CSR,R3
222 222  
223 223  20$: CLR @R3;
224 - TSTB @R3; Reset the controller
225 + TSTB @R3; Сбросим контроллер
225 225   BPL 20$;
226 226  
227 - MOV #WrBuf,(R3)+; Send it a string
228 - MOV #MDTXT,R2; with the assignment command
228 + MOV #WrBuf,(R3)+; Перешлем в него строку
229 + MOV #MDTXT,R2; с командой назначения
229 229   MOV #MDLEN/2,R1;
230 230  21$: MOV (R2)+,@R3;
231 231   SOB R1,21$;
232 232  
233 - MOV #AZMNT,-(R3); and pass it to
234 -22$: TSTB @R3 ; execution
234 + MOV #AZMNT,-(R3); и отдадим ее на
235 +22$: TSTB @R3 ; исполнение
235 235   BPL 22$ ;
236 236  
237 - TST @R3; then check for an error
238 + TST @R3; после чего проверим на ошибку
238 238   BMI Err11;
239 239  ;.........................
240 240  
... ... @@ -243,12 +243,12 @@
243 243  ;..................
244 244  {{/code}}
245 245  
246 -In this fragment, the 51SYS_DS.DSK image file is mounted on the AZ4 disk, located in the SYSTEM folder, which is located in the DISKS folder, which is located in the root directory of the micro-SD card.
247 +В этом фрагменте на диск AZ4 монтируется файл-образ 51SYS_DS.DSK, лежащий в папке SYSTEM, которая лежит в папке DISKS, лежащей в корневом оглавлении карточки микро-SD.
247 247  
248 248  
249 -== 005: Reading block into buffer ==
250 +== **005: Чтение блока в буфер** ==
250 250  
251 -The controller has a built-in buffer for 256 words (512 bytes). In fact, this is part of the STM32 microcontroller's RAM, allocated in its program for this buffer. All exchange in the main command block goes through this buffer.
252 +У контроллера имеется [[встроенный буфер на 256 слов (512 байт).>>doc:||anchor="H411443444435440430"]] Фактически, это часть оперативной памяти микроконтроллера STM32, выделенная в его программе под этот буфер. Весь обмен в основном блоке команд идет через этот буфер.
252 252  \\Память дисков AZ представлена, как набор блоков объемом 512 байт каждый. Такой блок - единственная доступная единица для обмена данными с дисками AZ. Блоки пронумерованы от нуля до 65533 для 16-разрядного варианта или до 8388607 для 32-разрядного - это при использовании накопителей AZ максимально допустимой емкости. Никто не мешает использовать накопители меньшей емкости - фактический размер накопителя равен размеру файл-образа, смонтированного на этот накопитель. При попытке обратиться за пределы файл-образа будет зарегистрирована ошибка.
253 253  \\Команда 005 - чтение блока с MicroSD в [[буфер>>doc:||anchor="Micro"]]. С псевдодиска AZn, выбранного ранее командой "Выбор устройства" запускается на чтение блок, номер которого передан командой (командами) "Установка номера блока". Команда длительного действия.
254 254  \\Фактически, блок с карточки MicroSD читается, примерно, 500-800 мкс. На это время контроллер переходит в состояние, которое во время обсуждения проекта получило название "Думаю, прошу не мешать." А именно, на все время ее исполнения отключаются все регистры устройства, кроме CSR, в котором считывается ноль до тех пор, пока контроллер занят исполнением этой команды. По окончании считывания блока к МПИ подключаются остальные регистры контроллера, взводится бит D7 (готовность) в CSR и, если был установлен бит D6 (разрешение прерываний) в CSR, вырабатывается прерывание с вектором 0174.