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
-
... ... @@ -1382,226 +1382,233 @@ 1382 1382 Example program: 1383 1383 1384 1384 {{code language="assembler"}} 1385 - call AZRST; reset 1386 1386 1387 -; load the file name into the buffer 1388 -7$: mov #23,(R1); command to write data to the buffer 1389 -5$: TSTB (R1); check execution result 1390 - BPL 5$ ; wait 1391 - TST (R1)+; increment 1392 - mov #FILNM,R3 1393 -1$: mov (R3),(R1); send to controller 1394 - tst (R3)+ 1395 - bne 1$ 1396 - tst -(R1); decrement 1386 + call AZRST; сбросим 1397 1397 1398 -; set the file for reading 1399 - mov #50,(R1); set file for reading 1400 -2$: TSTB (R1); check execution result 1401 - BPL 2$ ; wait 1388 +; заливаем в буфер имя файла 1389 +7$: mov #23,(R1); командуем что будем писать данные в буфер 1390 +5$: TSTB (R1); проверяем результат выполнения 1391 + BPL 5$ ; ждем 1392 + TST (R1)+; инкрементируем 1393 + mov #FILNM,R3 1394 +1$: mov (R3),(R1); отдаем в контроллер 1395 + tst (R3)+ 1396 + bne 1$ 1397 + tst -(R1); декрементируем 1402 1402 1403 -; read the file length 1404 - mov #51,(R1); set file for reading 1405 -3$: TSTB (R1); check execution result 1406 - BPL 3$ ; wait 1407 - TST (R1)+; increment 1408 - mov #FILSZ,R3 1409 - mov (R1),(R3)+; read from controller 1410 - mov (R1),(R3); read from controller 1411 1411 1412 -; display the file length on the screen 1413 - clr R0 1414 - mov #FILSZ+2,R3 1415 - mov (R3),R1 1416 - call DNOZ 1417 - mov -(R3),R1 1418 - call DNOZ 1419 - .print #STMS2 1400 + ; устанавливаем файл на чтение 1401 + mov #50,(R1); устанавливаем файл на чтение 1402 +2$: TSTB (R1); проверяем результат выполнения 1403 + BPL 2$ ; ждем 1420 1420 1421 -; read the file 1422 - mov R1,R4; R1 holds the file length 1423 - MOV #AZ$CSR,R1 1424 - mov #BUFFL,R5 1425 1425 1426 - bit #1,R4; if an odd number of bytes 1427 - beq 47$ 1428 - inc R4; add 1 more byte as we read words 1406 + ; читаем длину файда 1407 + mov #51,(R1); устанавливаем файл на чтение 1408 +3$: TSTB (R1); проверяем результат выполнения 1409 + BPL 3$ ; ждем 1410 + TST (R1)+; инкрементируем 1411 + mov #FILSZ,R3 1412 + mov (R1),(R3)+; читаем с контроллера 1413 + mov (R1),(R3); читаем с контроллера 1429 1429 1430 -47$: tst R4 1431 - beq 45$ ; nothing left to read - exit 1415 + ; выведем длину файла на экран 1416 + clr R0 1417 + mov #FILSZ+2,R3 1418 + mov (R3),R1 1419 + call DNOZ 1420 + mov -(R3),R1 1421 + call DNOZ 1422 + .print #STMS2 1432 1432 1433 - mov #52,(R1); read block into buffer 1434 -4$: TSTB (R1); check execution result 1435 - BPL 4$ ; wait 1436 - mov #22,(R1); start reading buffer 1437 -51$: TSTB (R1); check execution result 1438 - BPL 51$ ; wait 1424 + ; читаем файл 1425 + mov R1,R4; в R1 осталась длина файла 1426 + MOV #AZ$CSR,R1 1427 + mov #BUFFL,R5 1439 1439 1440 - cmp R4,#512.; compare with buffer size in bytes 1441 - Blos 44$ ; less than buffer size left 1429 + bit #1,R4; если нечетное число байт 1430 + beq 47$ 1431 + inc R4; добавим еще 1 байт тк читаем словами 1442 1442 1443 - .print #STMS1 1444 - mov #256.,R2 1445 - TST (R1)+; move to data register 1446 -46$: mov (R1),(R5)+; read into buffer 1447 - sob R2,46$ 1448 - sub #512.,R4; subtract 1449 - TST -(R1); move to command register 1450 - br 47$ 1433 +47$: tst R4 1434 + beq 45$ ; уже нечего читать - выходим 1451 1451 1452 -44$: .print #STMS3 1453 - mov R4,R2 1454 - asr R2 ; /2 since reading words 1455 - TST (R1)+; move to data register 1456 -43$: mov (R1),(R5)+; read into buffer 1457 - sob R2,43$ 1458 1458 1459 -45$: clr (R5); set end of file marker 1437 + mov #52,(R1); читаем блок в буфер 1438 +4$: TSTB (R1); проверяем результат выполнения 1439 + BPL 4$ ; ждем 1440 + mov #22,(R1); будем читать буфер 1441 +51$: TSTB (R1); проверяем результат выполнения 1442 + BPL 51$ ; ждем 1460 1460 1461 -; file read - display on screen 1462 - .print #STMS4 1463 - .print #BUFFL 1464 - .print #STMS5 1444 + cmp R4,#512.; сравниваем c размером буфера в байтах 1445 + Blos 44$ ; осталось меньше чем буфер 1465 1465 1466 - mov #110,@#AZ$CSR; enable network 1467 - .Exit 1468 1468 1448 + .print #STMS1 1449 + mov #256.,R2 1450 + TST (R1)+; переходим на регистр данных 1451 +46$: mov (R1),(R5)+; читаем в буфер 1452 + sob R2,46$ 1453 + sub #512.,R4; вычитаем 1454 + TST -(R1); переходим на регистр команд 1455 + br 47$ 1456 + 1457 +44$: .print #STMS3 1458 + mov R4,R2 1459 + asr R2 ; /2 тк читаем словами 1460 + TST (R1)+; переходим на регистр данных 1461 +43$: mov (R1),(R5)+; читаем в буфер 1462 + sob R2,43$ 1463 + 1464 + 1465 +45$: clr (R5); проставим конец файла 1466 + ; файл считан - выводим на экран 1467 + .print #STMS4 1468 + .print #BUFFL 1469 + .print #STMS5 1470 + 1471 + 1472 + mov #110,@#AZ$CSR; включаем сеть 1473 + .Exit 1469 1469 {{/code}} 1470 1470 1471 1471 1472 1472 1473 -== 053: setthenameofthefilethat we will write==1478 +== **053:** установить имя файла который будем писать == 1474 1474 1475 - Commandcode053,thiscommandopensafilefor writing,receivesopeningparameters(orerrors).1480 +Код команды 053, данная команда открывает файл на запись, получает параметры открытия (или ошибки). 1476 1476 1477 -== 054: Setfilelength==1482 +== **054:** установка длины файла == 1478 1478 1479 - Commandcode054,thiscommandsetstheexpectedfile length,thisisnecessaryforthecorrectformationofthefile at the file level of theMicroSDcard,aswellasfororganizingdata transfer.1484 +Код команды 054, данная команда устанавливает ожидаемую длину файла, это нужно для корректного формирования файла на файловом уровне MicroSD карты, а также для организации передачи данных. 1480 1480 1481 -== 055: writedatafrombuffertofile==1486 +== **055:** записать в файл данные из буфера == 1482 1482 1483 - Commandcode055,thiscommandwritesdatafromthenon-volatilememorybuffertoanopenfile for writing.Thelastcommand055willautomaticallyclosethefilewhenthedeclared file length is reached.1488 +Код команды 055, данная команда записывает в открытый файл на запись данные из буфера энергонезависимой памяти. Последняя команда 055 автоматически закроет файл по достижению заявленной длины файла. 1484 1484 1485 - Thecommandflowchartforwritingis as follows1486 -**023** - fillthefilenameinto the buffer1487 -**053** - setthefilefor reading1488 -**051** fileopening/creationstatus1489 - ifanerror-repeatfromthe beginning023 053 0511490 - ifeverythingisok -moveon1491 -**054** - setthefile length,i.e.wemustimmediatelydeclarewhatthefilelengthwill be1492 -**023** - fillthedatablockinto the buffer1493 -**055** - writefromthebufferto the file1494 - repeatthe023 055pairstherequirednumberoftimesinorder to write the entire file1495 - oncethefileiswritten-thelast055commandwillcloseit automatically1490 +Схема подачи команд при записи вот такая 1491 +**023** - заливаем имя файла в буфер 1492 +**053** - устанавливаем файл на чтение 1493 +**051 **- статус открытия/создания файла 1494 +если ошибка - повторяем сначала 023 053 051 1495 +если все ok - идем дальше 1496 +**054** - установка длины файла, те надо сразу объявить какая у нас будет длина файла 1497 +**023** - заливаем блок данных в буфер 1498 +**055** - пишем из буфера в файл 1499 +пары 023 055 повторяем нужное количество раз дабы записать весь файл 1500 +как файл будет записан - последняя 055 команда закроет его автоматически 1496 1496 1497 1497 1498 1498 Example program: 1499 1499 1500 1500 {{code language="assembler"}} 1501 -; loadthefilenameinto the buffer1502 - MOV #AZ$CSR,R1 1503 -17$: mov #23,(R1); commandtowritedatatothebuffer1504 -15$: TSTB (R1) ; checkexecutionresult1505 - BPL 15$ ; wait1506 - TST (R1)+ ; movetodataregister1507 - mov #FILNM2,R3 1508 -11$: mov (R3),(R1); sendtocontroller1509 - tst (R3)+ 1510 - bne 11$ 1511 - tst -(R1) ; movetocommandregister1506 +; заливаем в буфер имя файла 1507 + MOV #AZ$CSR,R1 1508 +17$: mov #23,(R1); командуем что будем писать данные в буфер 1509 +15$: TSTB (R1) ; проверяем результат выполнения 1510 + BPL 15$ ; ждем 1511 + TST (R1)+ ; переходим на регистр данных 1512 + mov #FILNM2,R3 1513 +11$: mov (R3),(R1); отдаем в контроллер 1514 + tst (R3)+ 1515 + bne 11$ 1516 + tst -(R1) ; переходим на регистр команд 1512 1512 1513 - ;setthefileforwriting1514 - mov #53,(R1); setfileforwriting1515 -12$: TSTB (R1) ; checkexecutionresult1516 - BPL 12$ ; wait1518 + ; устанавливаем файл на запись 1519 + mov #53,(R1); устанавливаем файл на запись 1520 +12$: TSTB (R1) ; проверяем результат выполнения 1521 + BPL 12$ ; ждем 1517 1517 1518 -; read file creation status 1519 - mov #51,(R1) 1520 -13$: TSTB (R1) ; check execution result 1521 - BPL 13$ ; wait 1522 - TST (R1)+ ; move to data register 1523 - mov #STATS,R3 1524 - mov (R1),(R3)+; read from controller 1525 - mov (R1),(R3); read from controller 1526 1526 1527 - ;checkhere-ifthefileiscreated,bothwordsshouldbe zero1528 - mov # STATS,R31529 - 3)+1530 - B NE66$1531 - TST (R 3)1532 - BEQ60$1533 - 66$:.print#ERRMS1printerror1534 - .exit1524 + ; читаем статус создания файла 1525 + mov #51,(R1) 1526 +13$: TSTB (R1) ; проверяем результат выполнения 1527 + BPL 13$ ; ждем 1528 + TST (R1)+ ; переходим на регистр данных 1529 + mov #STATS,R3 1530 + mov (R1),(R3)+; читаем с контроллера 1531 + mov (R1),(R3); читаем с контроллера 1535 1535 1536 - 60$:MOV#AZ$CSR,R11537 - mov # 54,(R1); set file length to be written1538 - 23$:TSTB(R1); check execution result1539 - B PL23$; wait1540 - TST (R 1)+ ; move to data register1541 - mov#FILSZ,R31542 - mov (R3)+,(R1);writeto controller1543 - mov (R3),(R1); write to controller1533 + ; тут надо проверить - если файл создан то оба слова нулевые 1534 + mov #STATS,R3 1535 + TST (R3)+ 1536 + BNE 66$ 1537 + TST (R3) 1538 + BEQ 60$ 1539 +66$: .print #ERRMS1 ; печать ошибки 1540 + .exit 1544 1544 1545 - tst -(R1) ; move to command register 1542 +60$: MOV #AZ$CSR,R1 1543 + mov #54,(R1); установим длину файла который будем писать 1544 +23$: TSTB (R1) ; проверяем результат выполнения 1545 + BPL 23$ ; ждем 1546 + TST (R1)+ ; переходим на регистр данных 1547 + mov #FILSZ,R3 1548 + mov (R3)+,(R1); пишем в контроллер 1549 + mov (R3),(R1); пишем в контроллер 1546 1546 1547 -; write file 1548 - mov @#FILSZ,R4; file length 1549 - MOV #AZ$CSR,R1 1550 - mov #BUFFL,R5; file buffer 1551 + tst -(R1) ; переходим на регистр команд 1551 1551 1552 - bit #1,R4 ; if an odd number of bytes 1553 - beq 147$ 1554 - inc R4 ; add 1 more byte since reading words 1555 1555 1556 -147$: tst R4 ; check length 1557 - beq 145$ ; nothing left to write - exit 1558 1558 1559 - mov #23,(R1); write to buffer 1560 -151$: TSTB (R1) ; check execution result 1561 - BPL 151$ ; wait 1555 + ; пишем файл 1556 + mov @#FILSZ,R4; длина файла 1557 + MOV #AZ$CSR,R1 1558 + mov #BUFFL,R5; буфер файла 1562 1562 1563 - cmp R4,#512.; compare with buffer size in bytes 1564 - Blos 144$ ; less than buffer size left 1560 + bit #1,R4 ; если нечетное число байт 1561 + beq 147$ 1562 + inc R4 ; добавим еще 1 байт тк читаем словами 1565 1565 1566 - .print #STMS6 ; writing full block 1567 - mov #256.,R2 1568 - TST (R1)+ ; move to data register 1569 -146$: mov (R5)+,(R1); write to controller buffer 1570 - sob R2,146$ 1571 - sub #512.,R4; subtract 1572 - TST -(R1) ; move to command register 1564 +147$: tst R4 ; проверим длину 1565 + beq 145$ ; уже нечего писать - выходим 1573 1573 1574 - mov #55,(R1); write buffer to file 1575 -104$: TSTB (R1) ; check execution result 1576 - BPL 104$ ; wait 1577 - br 147$ ; loop back 1567 + mov #23,(R1); будем писать в буфер 1568 +151$: TSTB (R1) ; проверяем результат выполнения 1569 + BPL 151$ ; ждем 1578 1578 1579 -144$: .print #STMS7 ; writing last block 1580 - TST (R1)+ ; move to data register 1581 - mov R4,R2 1582 - asr R2 ; /2 since writing words 1583 -143$: mov (R5)+,(R1); write to controller buffer 1584 - sob R2,143$ 1571 + cmp R4,#512.; сравниваем c размером буфера в байтах 1572 + Blos 144$ ; осталось меньше чем буфер 1585 1585 1586 - TST -(R1) ; move to command register 1587 - mov #55,(R1); write last buffer to file 1588 -105$: TSTB (R1) ; check execution result 1589 - BPL 105$ ; wait 1574 + .print #STMS6 ; заливка полного блока 1575 + mov #256.,R2 1576 + TST (R1)+ ; переходим на регистр данных 1577 +146$: mov (R5)+,(R1); пишем в буфер контроллера 1578 + sob R2,146$ 1579 + sub #512.,R4; вычитаем 1580 + TST -(R1) ; переходим на регистр команд 1590 1590 1591 -145$: .print #STMSE ; end 1592 - mov #110,@#AZ$CSR; enable network 1593 - .Exit ; exit 1582 + mov #55,(R1); запись буфера в файл 1583 +104$: TSTB (R1) ; проверяем результат выполнения 1584 + BPL 104$ ; ждем 1585 + br 147$ ; в начало 1594 1594 1587 +144$: .print #STMS7 ; заливка последнего блока 1588 + TST (R1)+ ; переходим на регистр данных 1589 + mov R4,R2 1590 + asr R2 ; /2 тк пишем словами 1591 +143$: mov (R5)+,(R1); пишем в буфер контроллера 1592 + sob R2,143$ 1593 + 1594 + TST -(R1) ; переходим на регистр команд 1595 + mov #55,(R1); запись пследнего буфера в файл 1596 +105$: TSTB (R1) ; проверяем результат выполнения 1597 + BPL 105$ ; ждем 1598 + 1599 +145$: .print #STMSE ; конец 1600 + mov #110,@#AZ$CSR; включаем сеть 1601 + .Exit ; выходим 1595 1595 {{/code}} 1596 1596 1597 -**[[ theexampleiscompletelyinthe form of theRT11utilityandis posted here>>url:https://forum.maxiol.com/index.php?s=&showtopic=5605&view=findpost&p=57055]]**1604 +**[[пример полностью в виде утилиты RT11 выложен вот тут>>url:https://forum.maxiol.com/index.php?s=&showtopic=5605&view=findpost&p=57055]]** 1598 1598 1599 1599 1600 -== 056: Getdataonthesizeofthemap into thesizecardbuffer==1607 +== **056: Получить данные по размеру карты в буфер sizecard** == 1601 1601 1602 - Commandcode056,thiscommandreadstheparameters of theMicroSDcardintothesizecardbuffer1609 +Код команды 056, данная команда читает параметры MicroSD карты в буфер sizecard 1603 1603 1604 -== 057: Readingsizecardbuffer==1611 +== **057: Чтение буфера sizecard** == 1605 1605 1606 1606 Код команды 057, данная команда отдает буфер sizecard (2 слова) 1607 1607 ... ... @@ -1609,7 +1609,7 @@ 1609 1609 первое слово - общий объем карты доступный для FAT в МБ 1610 1610 второе слово - свободный объем на карте в МБ 1611 1611 1612 - Exampleprogram:1619 +Пример программы: 1613 1613 1614 1614 {{code language="assembler"}} 1615 1615 ; trap 51 - получение объема SD карты всего/свободно в мегабайтах ... ... @@ -1645,7 +1645,7 @@ 1645 1645 1646 1646 Код команды 025, данная команда устанавливает соединение с сервером Hall of Fame, инициализирует шифрованный тоннель и подготавливает API к работе. 1647 1647 1648 - Exampleprogram:1655 +Пример программы 1649 1649 1650 1650 {{code language="assembler"}} 1651 1651 AZ$CSR = 177220 ; регистр команд и состояния (CSR) ... ... @@ -1724,7 +1724,7 @@ 1724 1724 1725 1725 Код команды 026, данная команда осуществляет непосредственный обмен с Hall of Fame 1726 1726 1727 - Exampleprogram:1734 +Пример программы 1728 1728 1729 1729 {{code language="assembler"}} 1730 1730 ;4. авторизация пользователя