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

From version 2.37
edited by Max
on 2025/02/25 14:26
Change comment: (Autosaved)
To version 2.66
edited by Max
on 2025/02/25 16:32
Change comment: (Autosaved)

Summary

Details

Page properties
Content
... ... @@ -579,24 +579,24 @@
579 579  == 022: Transfer the read block of non-volatile memory from the buffer to the bus ==
580 580  
581 581  (% class="wikigeneratedid" %)
582 -Код команды 022, данная команда обеспечивает передачу буфера энергонезависимой памяти в регистр DR для считывания.
582 +Command code 022, this command ensures that the non-volatile memory buffer is transferred to the DR register for reading.
583 583  
584 584  (% class="wikigeneratedid" %)
585 -Пример программы
585 +Example program
586 586  
587 587  {{code language="assembler"}}
588 -AZ$CSR = 177220; регистр команд и состояния (CSR)
589 -AZ$DR = 177222; регистр данных (DR)
588 +AZ$CSR = 177220; command and status register (CSR)
589 +AZ$DR = 177222; data register (DR)
590 590  
591 591  
592 -; trap 50 - cброс AZ
592 +; trap 50 - reset AZ
593 593  ; результат в R1 =0 ok
594 594  AZreset: MOV #AZ$CSR,R1
595 -1$: CLR (R1); Пошлем команду "Сброс"
596 - TSTB (R1); Проверим готовность контроллера
597 - BPL 1$; Если не готов, сбрасываем еще
598 - ; раз и проверяем снова
599 - TST (R1); Проверим на ошибку,
595 +1$: CLR (R1); Send the "Reset" command
596 + TSTB (R1); Check the controller readiness
597 + BPL 1$; If not ready, reset again
598 +; once and check again
599 + TST (R1); Check for an error,
600 600   BMI 0ERR$
601 601   CLR R1
602 602   return
... ... @@ -605,30 +605,30 @@
605 605   return
606 606  
607 607  
608 -; trap 54 - чтение энергонезависимой памяти блока 1 EEPROM в буфер с адреса ADREEPROMMEM
609 -; результат R3 - адрес, если R3=0 ошибка
610 -; статус чтения в R1 0 - ok
611 -; 1 - размер не соответствует сохраненному
612 -; 2 - oшибка версии
613 -; 3 - oшибка контрольной суммы
608 +; trap 54 - reading non-volatile memory of block 1 EEPROM to the buffer from the address ADREEPROMMEM
609 +; result R3 - address, if R3=0 error
610 +; read status in R1 0 - ok
611 +; 1 - size does not match saved
612 +; 2 - version error
613 +; 3 - checksum error
614 614  ReadEEPROM: push R2
615 - call AZreset; сбросим
615 + call AZreset; reset
616 616   tst R1
617 617   bne 0ERR$
618 618  ; теперь читаем
619 619   MOV #AZ$CSR,R1
620 - mov #21,(R1); считать блок 1 энергонезависимой памяти в буфер
621 -0$: TSTB (R1); проверяем результат выполнения
622 - BPL 0$; ждем
623 - mov #22,(R1); отдать на шину считанный блок энергонезависимой памяти из буфера
624 -1$: TSTB (R1); проверяем результат выполнения
625 - BPL 1$; ждем
626 - TST (R1)+; инкрементируем
620 + mov #21,(R1); read block 1 of non-volatile memory into buffer
621 +0$: TSTB (R1); check execution result
622 + BPL 0$; wait
623 + mov #22,(R1); send read block of non-volatile memory from buffer to bus
624 +1$: TSTB (R1); check execution result
625 + BPL 1$; wait
626 + TST (R1)+; increment
627 627   mov #ADREEPROMMEM,R3
628 - mov #256.,R2; читаем 256. слов; первое слово - результат чтения
629 -2$: mov (R1),(R3)+; читаем блок слов в память
628 + mov #256.,R2; read 256. words; first word is reading result
629 +2$: mov (R1),(R3)+; read block of words into memory
630 630   sob R2,2$
631 - mov #ADREEPROMMEM,R3; успешно
631 + mov #ADREEPROMMEM,R3; successful
632 632   mov (R3),R1
633 633   br 0END$
634 634  0ERR$: CLR R3
... ... @@ -636,41 +636,39 @@
636 636   return
637 637  {{/code}}
638 638  
639 -очевидно, после считывания памяти необходимо проверить код результата в первом слове - см расшифровку кодов ошибок
640 -\\Примеры возвращаемых данных по командам
641 -\\последовательная подача команды 021 и затем 022 позволит считать 256. слов
642 -из энергонезависимой памяти
643 -**Внимание! **первое слово это будет статус успешности чтения
644 -
639 +obviously, after reading the memory, it is necessary to check the result code in the first word - see the decoding of error codes
640 +\\Examples of returned data for commands
641 +\\sequentially issuing the command 021 and then 022 will allow reading 256 words from non-volatile memory
642 +Attention! The first word will be the reading success status
645 645  
646 646  * 0 - ok
647 -* 1 - размер не соответствует сохраненному
648 -* 2 - oшибка версии
649 -* 3 - oшибка контрольной суммы
645 +* 1 - size does not match saved
646 +* 2 - version error
647 +* 3 - checksum error
650 650  
651 -== **023: Принять с шины в буфер данные для последующей записи в буфер** ==
649 +== 023: Receive data from the bus into the buffer for subsequent writing into the buffer ==
652 652  
653 -Код команды 023, данная команда позволяет наполнить буфер энергонезависимой памяти
651 +Command code 023, this command allows you to fill the non-volatile memory buffer
654 654  
655 -== **024: Записать из буфера в блок энергонезависимой памяти** ==
653 +== 024: Write from buffer to non-volatile memory block ==
656 656  
657 -Код команды 024, данная команда вызывает запись блока энергонезависимой памяти из буфера энергонезависимой памяти.
655 +Command code 024, this command causes a non-volatile memory block to be written from the non-volatile memory buffer.
658 658  
659 -Пример программы
657 +Example program
660 660  
661 661  {{code language="assembler"}}
662 -AZ$CSR = 177220; регистр команд и состояния (CSR)
663 -AZ$DR = 177222; регистр данных (DR)
660 +AZ$CSR = 177220; Command and Status Register (CSR)
661 +AZ$DR = 177222; Data Register (DR)
664 664  
665 665  
666 -; trap 50 - cброс AZ
664 +; trap 50 - reset AZ
667 667  ; результат в R1 =0 ok
668 668  AZreset: MOV #AZ$CSR,R1
669 -1$: CLR (R1); Пошлем команду "Сброс"
670 - TSTB (R1); Проверим готовность контроллера
671 - BPL 1$; Если не готов, сбрасываем еще
672 - ; раз и проверяем снова
673 - TST (R1); Проверим на ошибку,
667 +1$: CLR (R1); Send the "Reset" command
668 + TSTB (R1); Check the controller readiness
669 + BPL 1$; If not ready, reset again
670 +; once and check again
671 + TST (R1); Check for an error,
674 674   BMI 0ERR$
675 675   CLR R1
676 676   return
... ... @@ -678,27 +678,27 @@
678 678   COM R1
679 679   return
680 680  
681 -; trap 55 - запись энергонезависимой памяти из буфера с адреса ADREEPROMMEM в блок 1 EEPROM
679 +; trap 55 - write non-volatile memory from the buffer at address ADREEPROMMEM в блок 1 EEPROM
682 682  WriteEEPROM: push R1
683 683   push R2
684 684   push R3
685 - call AZreset; сбросим
683 + call AZreset; reset
686 686   tst R1
687 687   bne 0ERR$
688 688  
689 689   MOV #AZ$CSR,R1
690 - mov #23,(R1); командуем что будем писать данные в буфер
691 -0$: TSTB (R1); проверяем результат выполнения
692 - BPL 0$; ждем
693 - TST (R1)+; инкрементируем
688 + mov #23,(R1);command that we will write data to the buffer
689 +0$: TSTB (R1); check the result of executio
690 + BPL 0$; wait
691 + TST (R1)+; increment
694 694   mov #ADREEPROMMEM+2,R3
695 - mov #255.,R2; пишем 255. слов; первое слово пропускаем - результат чтения
696 -1$: mov (R3)+,(R1); отдаем в контроллер
693 + mov #255.,R2; write 255. words; skip the first word - the result of reading
694 +1$: mov (R3)+,(R1); send to the controller
697 697   sob R2,1$
698 - tst -(R1); декрементируем
699 - mov #24,(R1); записать из буфера в блок 1 энергонезависимой памяти
700 -2$: TSTB (R1); проверяем результат выполнения
701 - BPL 2$; ждем
696 + tst -(R1); decrement
697 + mov #24,(R1); write from the buffer to block 1 of non-volatile memory
698 +2$: TSTB (R1); check the result of execution
699 + BPL 2$; we are waiting
702 702   br 0END$
703 703  0ERR$: CLR R3
704 704  0END$: pop R3
... ... @@ -707,23 +707,21 @@
707 707   return
708 708  {{/code}}
709 709  
710 -**Обращаю внимание**, при записи, буфер идет сразу с данными, те нет первого слова со статусом.
708 +**Please note** that when recording, the buffer immediately comes with the data, i.e. there is no first word with the statu
711 711  
712 712  
713 713  
714 -= Блок команд для работы с RTC и NTP =
712 += Block of commands for working with RTC and NTP =
715 715  
716 -В контроллере AZ®  есть 2 источника получения даты-времени, первый это RTC встроенный в STM32, второй это часы в стеке TCP/IP.  Часы RTC работают автономно при наличии установленной батарейки 2032. Часы в стеке TCP/IP устанавливаются на основании данных с NTP-сервера.
714 +The AZ® controller has 2 sources of date-time, the first is the RTC built into the STM32, the second is the clock in the TCP/IP stack. The RTC clock works autonomously with a 2032 battery installed. The clock in the TCP/IP stack is set based on data from the NTP server.
717 717  
718 718  
719 -== Формат буфера timestamp (доступен по чтению) ==
717 +== Buffer format timestamp (readable) ==
720 720  
721 -API контроллера сразу готовит время в нескольких форматах, дабы его было удобно применить на стороне PDP-11
719 +The controller API immediately prepares time in several formats, so that it can be conveniently used on the PDP-11 side
722 722  
723 723  {{info}}
724 -формат буфера даты-времени
725 -offset в восьмеричной системе - те слова
726 -формат буфера даты-времени
722 +datetime buffer format octal offset - those words datetime buffer format
727 727  \\[0]=rtc_rt11date();
728 728  [2]=rt11 time 50Hz big word;
729 729  [4]=rt11 time 50Hz little word;
... ... @@ -741,72 +741,72 @@
741 741  {{/info}}
742 742  
743 743  
744 -== Формат буфера SimpleIN (при записи) ==
740 +== SimpleIN buffer format (when writing) ==
745 745  
746 -формат максимально упрощен, для работы со стороны PDP-11
742 +the format is simplified as much as possible, for work with PDP-11
747 747  
748 748  {{info}}
749 -offset в восьмеричной системе - те слова
745 +offset in octal - those words
750 750  
751 -[0]=year       год, младшие две цифры - те 22 а не 2022(!)
752 -[2]=month;     месяц
753 -[4]=day;       день
754 -[6]=wday;      день недели =0 не установлен, 1- понедельник 2 - вторник итд
755 -[10]=hour;     час
756 -[12]=min;      минута
757 -[14]=sec;      секунда
747 +[0]=year, the lower two digits are 22 and not 2022(!)
748 +[2]=month; month
749 +[4]=day; day
750 +[6]=wday; day of the week =0 not set, 1 - Monday 2 - Tuesday etc.
751 +[10]=hour; hour
752 +[12]=min; minute
753 +[14]=sec; second
758 758  {{/info}}
759 759  
760 760  
761 -== **031:  Получить время из RTC в буфер timestamp** ==
757 +== 031: Get time from RTC to timestamp buffer ==
762 762  
763 -Код команды 031, данная команда использует RTC часы как источник заполнения буфера timestamp
759 +Command code 031, this command uses RTC clock as a source of filling the timestamp buffer
764 764  
765 -Пример программы:
761 +Example program:
766 766  
767 767  {{code language="assembler"}}
768 -; trap 61 - чтение данных часов из автономных часов RTC
769 -; R3 - адрес буфера куда надо считать
770 -; результат в R3 адрес, если успешно. R3=0 если ошибка
764 +; trap 61 - reading clock data from autonomous RTC clock
765 +; R3 - buffer address where to read
766 +; result in R3 address if successful. R3=0 if error
771 771  GetDateFromRTC: push R0
772 772   push R1
773 773   push R2
774 - call AZreset; сбросим
770 + call AZreset; reset
775 775   tst R1
776 776   bne G60ERR
777 777   MOV #AZ$CSR,R1
778 778   mov #31,(R1)
779 - br G60; идем туда тк дальше код одинаковый
775 + br G60; let's go there because further code is the same
780 780  {{/code}}
781 781  
782 -== **032:  Получить время из буфера timestamp** ==
778 +== 032: Get time from timestamp buffer ==
783 783  
784 -Код команды 032, данная команда отдает на шину содержимое буфера timestamp
780 +Command code 032, this command sends the contents of the timestamp buffer to the bus
785 785  
786 786  {{code language="assembler"}}
787 -; работа с часами
788 -; trap 60 - чтение данных часов из TCP/IP стека
789 -; R3 - адрес буфера куда надо считать
790 -; результат в R3 адрес, если успешно. R3=0 если ошибка
783 +; working with clock
784 +; trap 60 - reading clock data from TCP/IP stack
785 +; R3 - buffer address where to read
786 +; result in R3 address if successful. R3=0 if error
791 791  GetDateFromLAN: push R0
792 792   push R1
793 793   push R2
794 - call AZreset; сбросим
790 + call AZreset; reset
795 795   tst R1
796 796   bne G60ERR
797 797   MOV #AZ$CSR,R1
798 798   mov #42,(R1)
799 -G60: TSTB (R1); проверяем результат выполнения
800 - BPL G60; ждем
795 +G60: TSTB (R1); check execution result
796 + BPL G60; wait
801 801   mov #32,(R1)
802 -1$: TSTB (R1); проверяем результат выполнения
798 +1$: TSTB (R1); check execution result
803 803   BPL 1$; ждем
804 - TST (R1)+; инкрементируем
805 - mov R3,R0; запомним R3 - адрес
806 - mov #10.,R2; читаем 10 слов
807 -2$: mov (R1),(R3)+; читаем блок слов в память
800 + TST (R1)+; increment
801 + mov R3,R0; remember R3 address
802 + mov #10.,R2; read 10 words
803 +2$: mov (R1),(R3)+; read block of words into memory
808 808   sob R2,2$
809 - mov R0,R3; успешно, вернем адрес в R3
805 + mov R0,R3; successful, return address to R3
810 810   br 0END$
811 811  G60ERR: CLR R3
812 812  0END$: pop R2
... ... @@ -815,11 +815,11 @@
815 815   return
816 816  {{/code}}
817 817  
818 -Стоит проверить корректность полученного времени:
814 +It is worth checking the correctness of the received time:
819 819  
820 820  {{code language="assembler"}}
821 -; trap 63 - проверка корректности времени
822 -; R3 - адрес буфера, результат в R3, если адрес буфера то OK, =0 ошибка
817 +; trap 63 - check time correctness
818 +; R3 - buffer address, result in R3, if buffer address then OK, =0 error
823 823  CheckDateTime: Cmp 6(r3),#2021.
824 824   Blos 1err
825 825   Cmp 6(r3),#2100.
... ... @@ -829,119 +829,119 @@
829 829   return
830 830  {{/code}}
831 831  
832 -== **033:  Запись времени-даты в буфер SimpleIN** ==
828 +== 033: Write time-date to SimpleIN buffer ==
833 833  
834 -Код команды 033, данная команда  принимает с шины данные в буфер SimpleIN
830 +Command code 033, this command receives data from the bus into the SimpleIN buffer
835 835  
836 -Работа данной команды аналогична работе команд [[023>>doc:||anchor="H023:41F44043843D44F44244C44144843843D44B43243144344443544043443043D43D44B43543443B44F43F43E44143B43543444344E44943543943743043F438441438432431443444435440"]] и [[016>>doc:||anchor="H016:A041F44043843D44F44244C43143B43E43A43443043D43D44B445432431443444435440"]].
832 +The operation of this command is similar to the operation of commands 023 and 016.
837 837  
838 -== **034:  Установка RTC на основании данных из буфера** ==
834 +== 034: Set RTC based on buffer data ==
839 839  
840 -Код команды 034, данная команда  устанавливает RTC на основании данных в буфере SimpleIN
836 +Command code 034, this command sets the RTC based on the data in the SimpleIN buffer
841 841  
842 -Данная команда выполняется быстро, но для исключения проблем цикл ожидания выполнения рекомендуется.
838 +This command executes quickly, but to avoid problems, a wait loop is recommended.
843 843  
844 -== **035:  Стимуляция запроса времени с NTP сервера, установка на основании ответа** ==
840 +== 035: Stimulate time request from NTP server, set based on response ==
845 845  
846 -Код команды 035, данная команда отправляет запрос на NTP cервер (установленный в AZ.INI файле или полученный от DHCP) и устанавливает часы в стеке TCP/IP.
842 +Command code 035, this command sends a request to the NTP server (set in the AZ.INI file or received from DHCP) and sets the clock in the TCP/IP stack.
847 847  
848 -Пример программы: отсылка запроса на установку времени с NTP сервера
844 +Example program: sending a request to set the time from an NTP server
849 849  
850 850  {{code language="assembler"}}
851 -; trap 62 - отсылка запроса на установку времени с NTP сервера
847 +; trap 62 - sending a request to set the time from the NTP server
852 852  GetDateNTPtoNET:push R1
853 - call AZreset; сбросим
849 + call AZreset; reset
854 854   tst R1
855 855   bne 0ERR$
856 856   MOV #AZ$CSR,R1
857 857   mov #35,(R1)
858 -0$: TSTB (R1); проверяем результат выполнения
859 - BPL 0$; ждем
854 +0$: TSTB (R1); check the result of execution
855 + BPL 0$; wait
860 860  0ERR$: pop R1
861 861   return
862 862  {{/code}}
863 863  
864 -Выполнение команды занимает 1-2 секунды в среднем. Данная команда требует работы стека TCP/IP, соответственно нужны циклы ожидания при включенном стеке.
860 +The command execution takes 1-2 seconds on average. This command requires the TCP/IP stack to work, so waiting cycles are needed when the stack is enabled.
865 865  
866 -Пример цикла опроса с целью получить время с сети
862 +An example of a polling cycle to get time from the network
867 867  
868 868  {{code language="assembler"}}
869 -; дата-время
865 +; date-time
870 870   mov #S_DateTime_0,R3; "Lan Date:"
871 871   trap 10
872 - mov #20,R4; количество циклов ожидания
873 -$datry: trap 62; отослали запрос к NTP серверу
874 - mov #110,@#AZ$CSR; включим сеть
875 - trap 47; ожидание
876 - trap 47; ожидание
868 + mov #20,R4; number of wait cycles
869 +$datry: trap 62; sent a request to the NTP server
870 + mov #110,@#AZ$CSR; enable the network
871 + trap 47; waiting
872 + trap 47; waiting
877 877   mov #ADRTMPSTR,R3
878 - trap 60; считали в буфер дату-время
879 - trap 63; проверили дату-время
874 + trap 60; read the date-time into the buffer
875 + trap 63; checked the date-time
880 880   tst R3
881 881   bne $ok
882 882  $sob: sob R4,$datry
883 - mov #S_DateTime_2,R3; печать ошибки
879 + mov #S_DateTime_2,R3; print error
884 884   trap 7
885 885   br $go
886 886  
887 887  $ok: mov #ADRTMPSTR,R3
888 - trap 24; печать даты
889 - trap 25; времени
890 -$go: mov #110,@#AZ$CSR; включим сеть
884 + trap 24; print date
885 + trap 25; time
886 +$go: mov #110,@#AZ$CSR; let's turn on the network
891 891  {{/code}}
892 892  
893 -Тут мы явно отсылаем запрос к NTP серверу, затем включаем работу сети и ждем результата, периодически опрашивая и проверяя корректность результата.
889 +Here we explicitly send a request to the NTP server, then turn on the network and wait for the result, periodically polling and checking the correctness of the result.
894 894  
895 -== **036:  Установка RTC на основании часов TCP/IP стека** ==
891 +== 036: Setting RTC based on TCP/IP stack clock ==
896 896  
897 -Код команды 036,  данная команда устанавливает RTC на основании часов в TCP/IP стека. Предварительно надо установить часы в TCP/IP - команда 036.
893 +Command code 036, this command sets the RTC based on the clock in the TCP/IP stack. You must first set the clock in TCP/IP - command 036.
898 898  
899 -Пример программы:
895 +Example program:
900 900  
901 901  {{code language="assembler"}}
902 -; trap 64 - установка времени RTC на основании времени стека
903 -; R1 - результат R1=0 - OK
904 -SetDateNETtoRTC:call AZreset; сбросим
898 +; trap 64 - set RTC time based on stack time
899 +; R1 - result R1=0 - OK
900 +SetDateNETtoRTC:call AZreset; reset
905 905   tst R1
906 906   bne 0ERR$
907 907   MOV #AZ$CSR,R1
908 908   mov #36,(R1)
909 -0$: TSTB (R1); проверяем результат выполнения
910 - BPL 0$; ждем
905 +0$: TSTB (R1); check execution result
906 + BPL 0$; wait
911 911   clr R1
912 912  0ERR$: return
913 913  {{/code}}
914 914  
915 -== **042:  Получить время из часов TCP/IP стека в буфер timestamp** ==
911 +== 042: Get time from TCP/IP stack clock into timestamp buffer ==
916 916  
917 -Код команды 042,   данная команда использует часы TCP/IP стека как источник заполнения буфера timestamp.
913 +Command code 042, this command uses the TCP/IP stack clock as a source for filling the timestamp buffer.
918 918  
919 -Пример программы:
915 +Example program:
920 920  
921 921  {{code language="assembler"}}
922 -; работа с часами
923 -; trap 60 - чтение данных часов из TCP/IP стека
924 -; R3 - адрес буфера куда надо считать
925 -; результат в R3 адрес, если успешно. R3=0 если ошибка
918 +; working with clock
919 +; trap 60 - reading clock data from TCP/IP stack
920 +; R3 - buffer address where to read
921 +; result in R3 address if successful. R3=0 if error
926 926  GetDateFromLAN: push R0
927 927   push R1
928 928   push R2
929 - call AZreset; сбросим
925 + call AZreset; reset
930 930   tst R1
931 931   bne G60ERR
932 932   MOV #AZ$CSR,R1
933 933   mov #42,(R1)
934 -G60: TSTB (R1); проверяем результат выполнения
935 - BPL G60; ждем
930 +G60: TSTB (R1); check execution result
931 + BPL G60; wait
936 936   mov #32,(R1)
937 -1$: TSTB (R1); проверяем результат выполнения
938 - BPL 1$; ждем
939 - TST (R1)+; инкрементируем
940 - mov R3,R0; запомним R3 - адрес
933 +1$: TSTB (R1); check execution result
934 + BPL 1$; wait
935 + TST (R1)+; increment
936 + mov R3,R0; remember R3 address
941 941   mov #10.,R2; читаем 10 слов
942 -2$: mov (R1),(R3)+; читаем блок слов в память
938 +2$: mov (R1),(R3)+; read block of words into memory
943 943   sob R2,2$
944 - mov R0,R3; успешно, вернем адрес в R3
940 + mov R0,R3; successful, return address to R3
945 945   br 0END$
946 946  G60ERR: CLR R3
947 947  0END$: pop R2
... ... @@ -950,52 +950,50 @@
950 950   return
951 951  {{/code}}
952 952  
953 -все команды устанавливают бит готовности по завершению.
949 +All commands set the ready bit upon completion.
954 954  
955 955  
956 -= **Команды специфические для [[AZБК®>>doc:Контроллеры AZБК® для компьютеров БК-0010 БК-0010\.01 БК-0011М.WebHome]]** =
952 += **[[AZБК®>>doc:Контроллеры AZБК® для компьютеров БК-0010 БК-0010\.01 БК-0011М.WebHome]] **specific commands =
957 957  
958 -Данные команды предназначены для работы контроллера AZБК®, разработанного для серии компьютеров БК - БК-0010/БК-0010.01/БК-0011М.
954 +These commands are intended for operation of the AZБК® controller, developed for the BK series of computers - BK-0010/BK-0010.01/BK-0011M.
959 959  
960 -Другие контроллеры AZ® игнорируют эти команды
956 +Other AZ® controllers ignore these commands.
961 961  
962 -== **037: перезапуск контроллера [[AZБК®>>doc:Контроллеры AZБК® для компьютеров БК-0010 БК-0010\.01 БК-0011М.WebHome]] и всей БК** ==
958 +== 037: Restart of the** [[AZБК®>>doc:Контроллеры AZБК® для компьютеров БК-0010 БК-0010\.01 БК-0011М.WebHome]] **controller and the entire computer ==
963 963  
964 -Код команды 037,  данная команда осуществляет перезапуск микроконтроллера AZ®, что вызывает и перезапуск самой БК-0010/БК-0010.01/БК-0011М
960 +Command code 037, this command restarts the AZ® microcontroller, which also causes a restart of the BK-0010/BK-0010.01/BK-0011M itself
965 965  
966 -Пример программы
962 +Example program
967 967  
968 968  {{code language="assembler"}}
969 -AZ$CSR = 177220; регистр команд и состояния (CSR)
970 -AZ$DR = 177222; регистр данных (DR)
965 +AZ$CSR = 177220; command and status register (CSR)
966 +AZ$DR = 177222; data register (DR)
971 971  
972 972  
973 -; trap 57 - перезапуск БК полный
974 -AZcouldReboot: call AZreset; сбросим AZ дабы он был готов принимать команды
969 +; trap 57 - full restart
970 +AZcouldReboot: call AZreset; reset AZ so it is ready to receive
975 975   mov #037,@#AZ$CSR
976 976   return
977 977  {{/code}}
978 978  
979 -== **044: Cохранение скриншота в файл** ==
975 +== 044: Saving a screenshot to a file ==
980 980  
981 -Код команды 044,  данная команда предназначена для снятия образа памяти указанного размера (или определенного автоматически на основании сохраненных параметров)
982 -технически команда может служить как средство отладки ибо способная снимать образ памяти
983 -общее ограничение на снятие образа памяти - 2МБ на один образ
984 -\\в качестве параметров используется служебная страница памяти 76(8)
977 +Command code 044, this command is designed to take a memory image of the specified size (or determined automatically based on saved parameters) technically, the command can serve as a debugging tool because it is capable of taking a memory image the general limitation on taking a memory image is 2MB per image
978 +\\service memory page 76(8) is used as parameters
985 985  
986 -Структура заполнения информации о скриншоте
980 +Structure of filling information about a screenshot
987 987  
988 988  {{code language="c"}}
989 -// структура хидера скриншота
983 +// screenshot header structure
990 990  typedef __packed struct screen_header
991 991  {
992 - unsigned short int tag; // должен быть равен 0240
986 + unsigned short int tag; // must be equal to 0240
993 993  
994 - unsigned int begin_adress; // начальный адрес в словах - прямая задача в физических адресах
995 - unsigned int length; // длина в словах - прямая задача в физических адресах
988 + unsigned int begin_adress; // start address in words - forward task in physical addresses
989 + unsigned int length; // length in words - forward task in physical addresses
996 996  
997 - unsigned short int begin_page; // начальная страница - номер - прямая задача в номерах страниц
998 - unsigned short int len_pages; // количество страниц - прямая задача в номерах страниц
991 + unsigned short int begin_page; // start page - number - forward task in page numbers
992 + unsigned short int len_pages; // number of pages - forward task in page numbers
999 999  
1000 1000   unsigned short int R177300; //
1001 1001   unsigned short int R177302; //
... ... @@ -1013,57 +1013,56 @@
1013 1013   unsigned short int R177332; //
1014 1014   unsigned short int R177334; //
1015 1015   unsigned short int R177336; //
1016 - unsigned short int R177340; // - Регистр управления активацией окно - маски окон
1017 - unsigned short int R177342; // - Регистр управления r/o на окно
1018 - unsigned short int R177344; // - Регистр управления shadow окон - маски окон
1019 - unsigned short int R177346; // - Регистр управления маппером
1020 - unsigned short int R177350; // - регистр копия по записи 177130 в режиме записи управления памятью в SMK
1021 - unsigned short int R177352; // - регистр копия по записи 177716 в режиме записи управления памятью в БК11М
1010 + unsigned short int R177340; // - Window activation control register - window masks
1011 + unsigned short int R177342; // - Control register r/o per window
1012 + unsigned short int R177344; // - Shadow window control register - window masks
1013 + unsigned short int R177346; // - Mapper control register
1014 + unsigned short int R177350; // - copy by record register 177130 in memory management write mode in SMK
1015 + unsigned short int R177352; // - copy by record register 177716 in memory management write mode in BK11M
1022 1022  
1023 - unsigned short int R177230; // - регистр управления
1024 - unsigned short int R177232; // - регистр номера страницы начала отображения - верхняя страница (слой 0)
1025 - unsigned short int R177240; // - регистр номера страницы начала отображения - средняя страница (слой 1)
1026 - unsigned short int R177242; // - регистр номера страницы начала отображения - нижняя страница (слой 2)
1027 - unsigned short int R177244; // - регистр вертикального скролинга слой 2
1028 - unsigned short int R177246; // - регистр вертикального скролинга слой 1
1029 - unsigned short int R177250; // - регистр вертикального скролинга слой 0
1030 - unsigned short int R177252; // - регистр гозизонтального скролинга слой 0
1031 - unsigned short int R177254; // - регистр гозизонтального скролинга слой 1
1032 - unsigned short int R177256; // - регистр гозизонтального скролинга слой 2
1017 + unsigned short int R177230; // - control register
1018 + unsigned short int R177232; // - display start page number register - upper page (layer 0)
1019 + unsigned short int R177240; // - display start page number register - upper page (layer 1)
1020 + unsigned short int R177242; // - display start page number register - upper page (layer 2)
1021 + unsigned short int R177244; // - vertical scroll register layer 2
1022 + unsigned short int R177246; // - vertical scroll register layer 1
1023 + unsigned short int R177250; // - vertical scroll register layer 0
1024 + unsigned short int R177252; // - horizontal scroll register layer 0
1025 + unsigned short int R177254; // - horizontal scroll register layer 1
1026 + unsigned short int R177256; // - horizontal scroll register layer 2
1033 1033  
1034 1034   unsigned short int paldata[338]; //
1035 1035  } screen_header_t;
1036 1036  {{/code}}
1037 1037  
1038 -Пример кода для заполнения страницы памяти
1032 +Example code for filling a memory page
1039 1039  
1040 1040  {{code language="assembler"}}
1041 1041  ;--------------------------------------------------
1042 -; карта 76й страницы - туда мы готовим данные для команды скринщотов
1043 - SCR_PAGE = 130000 ; 76ую страницу цепляем на место 77й временно - те в окно 130000
1044 - SCR_TAG = SCR_PAGE+0 ; тут вход - 240 - 1 слово
1045 - SCR_ADDR_CONF = SCR_TAG+2 ; сюда команду с адресами - адрес+длина 24 бита - 4 слова
1046 - SCR_PAGE_CONF = SCR_ADDR_CONF+8. ; сюда команду со страницами - начальная страница и количество страниц - 2 слова
1047 - SCR_MEM_CONF = SCR_PAGE_CONF+4. ; cюда конфигурацию памяти из регистров - 22 слова
1048 - SCR_VGA_CONF = SCR_MEM_CONF+44. ; сюда конфигурацию видеоконтроллера - 10 cлов
1049 - SCR_PAL = SCR_VGA_CONF+20. ; сюда 338. значений(слов) палитры 338 слов
1036 +; 76th page map - we prepare data for the screenshot command there
1037 +SCR_PAGE = 130000 ; we temporarily attach the 76th page to the 77th - that is, into the 130000 window
1038 +SCR_TAG = SCR_PAGE+0 ; here is the input - 240 - 1 word
1039 +SCR_ADDR_CONF = SCR_TAG+2 ; here is the command with addresses - address+length 24 bits - 4 words
1040 +SCR_PAGE_CONF = SCR_ADDR_CONF+8. ; here is the command with pages - the starting page and the number of pages - 2 words
1041 +SCR_MEM_CONF = SCR_PAGE_CONF+4. ; here is the memory configuration from the registers - 22 words
1042 +SCR_VGA_CONF = SCR_MEM_CONF+44. ; here video controller configuration - 10 words
1043 +SCR_PAL = SCR_VGA_CONF+20. ; here 338. values ??(words) of palette 338 words
1050 1050  ;--------------------------------------------------
1051 1051  
1046 +; trap 41 - preparation of default information for screenshot functionality
1047 +PrepSRC: jsr R5, PUSHA ; batch saving of registers
1048 + mov @#177326,-(SP) ; save page 130k which was before the call
1049 + mov #76,@#177326 ; hook 76th page into window
1052 1052  
1053 -; trap 41 - подготовка дефолтной информации для работы функционала скриншотов
1054 -PrepSRC: jsr R5, PUSHA ; пакетное сохранение регистров
1055 - mov @#177326,-(SP) ; сохраним страницу 130k которая была до вызова
1056 - mov #76,@#177326 ; цепляем 76ую страницу в окно
1057 -
1058 - mov #100377,R3 ; константа-заполнитель
1051 + mov #100377,R3 ; constant-filler
1059 1059   mov #SCR_PAGE,R4
1060 1060   mov #2047.,R2
1061 1061  4$: mov R3,(R4)+
1062 1062   sob R2,4$
1063 1063  
1064 - mov #240,@#SCR_TAG ; проставляем тег
1057 + mov #240,@#SCR_TAG ; put the tag
1065 1065  
1066 - ; чистим участок адресов - дефолтно автоматическое определение адресов
1059 + ; clean the address section - default is automatic address detection
1067 1067   clr R3
1068 1068   mov #SCR_ADDR_CONF,R4
1069 1069   mov #10,R2
... ... @@ -1070,7 +1070,7 @@
1070 1070  2$: mov R3,(R4)+
1071 1071   sob R2,2$
1072 1072  
1073 - ;конфигурация памяти - дефолтная
1066 + ; memory configuration - default
1074 1074   mov #SCR_MEM_CONF,R4
1075 1075   mov #30,(R4)+ ;177300
1076 1076   mov #31,(R4)+ ;177302
... ... @@ -1089,29 +1089,29 @@
1089 1089   mov #110,(R4)+ ;177334
1090 1090   mov #100,(R4)+ ;177336
1091 1091  
1092 - mov #170000,(R4)+ ;177340 - Регистр управления активацией окно - маски окон
1093 - mov R3,(R4)+ ;177342 - Регистр управления r/o на окно
1094 - mov #7777,(R4)+ ;177344 - Регистр управления shadow окон - маски окон
1095 - mov #40404,(R4)+ ;177346 - Регистр управления маппером
1096 - mov R3,(R4)+ ;177350 - регистр копия по записи 177130 в режиме записи управления памятью в SMK
1097 - mov #16000,(R4)+ ;177352 - регистр копия по записи 177716 в режиме записи управления памятью в БК11М
1085 + mov #170000,(R4)+ ;177340
1086 + mov R3,(R4)+ ;177342
1087 + mov #7777,(R4)+ ;177344
1088 + mov #40404,(R4)+ ;177346
1089 + mov R3,(R4)+ ;177350
1090 + mov #16000,(R4)+ ;177352
1098 1098  
1099 - ;конфигурация видеоконтроллера - дефолтная
1092 + ;Video controller configuration - default
1100 1100   ; 177230-177256
1101 1101   mov #SCR_VGA_CONF,R4
1102 1102  
1103 - mov #12201,(R4)+ ;177230 - регистр управления
1104 - mov #4,(R4)+ ;177232 - регистр номера страницы начала отображения - верхняя страница (слой 0)
1105 - mov R3,(R4)+ ;177240 - регистр номера страницы начала отображения - средняя страница (слой 1) "под спрайты"
1106 - mov R3,(R4)+ ;177242 - регистр номера страницы начала отображения - нижняя страница (слой 2) "под фон"
1107 - mov R3,(R4)+ ;177244 - регистр вертикального скролинга слой 2
1108 - mov R3,(R4)+ ;177246 - регистр вертикального скролинга слой 1
1109 - mov R3,(R4)+ ;177250 - регистр вертикального скролинга слой 0
1110 - mov R3,(R4)+ ;177252 - регистр гозизонтального скролинга слой 0
1111 - mov R3,(R4)+ ;177254 - регистр гозизонтального скролинга слой 1
1112 - mov R3,(R4)+ ;177256 - регистр гозизонтального скролинга слой 2
1096 + mov #12201,(R4)+ ;177230
1097 + mov #4,(R4)+ ;177232
1098 + mov R3,(R4)+ ;177240
1099 + mov R3,(R4)+ ;177242
1100 + mov R3,(R4)+ ;177244
1101 + mov R3,(R4)+ ;177246
1102 + mov R3,(R4)+ ;177250
1103 + mov R3,(R4)+ ;177252
1104 + mov R3,(R4)+ ;177254
1105 + mov R3,(R4)+ ;177256
1113 1113  
1114 - ; закачиваем палитру - берем дефолтную из этой ПЗУшки
1107 + ; download the palette - take the default one from this ROM
1115 1115   mov #SCR_PAL,R4
1116 1116   mov #PalData,R2
1117 1117   mov #338.,R3
... ... @@ -1118,32 +1118,31 @@
1118 1118  1$: mov (R2)+,(R4)+
1119 1119   sob R3,1$
1120 1120  
1121 - mov (SP)+,@#177326; вернем страницу с которой был вызов
1114 + mov (SP)+,@#177326; return the page from which the call was made
1122 1122   return
1123 1123  {{/code}}
1124 1124  
1125 -Вариантов указания участков памяти три
1118 +There are three options for specifying memory areas.
1126 1126  
1127 -1. указать адрес и длину 24х битные - формат, если их нет - система смотрит дальше
1128 -1. указать номер страницы и количество страницы, если их нет
1129 -1. система смотрит дальше - те делает скриншот на основании данных о регистрах 177230 и т.д..
1120 +1. specify the address and length 24-bit - see format, if they are not there - the system looks further
1121 +1. specify the page number and page quantity, if they are not there
1122 +1. the system looks further - that is, it makes a screenshot based on the data about registers 177230, etc.
1130 1130  
1131 -Cкриншот сохраняется в формате
1132 -- страница 76 - ее первый килобайт
1133 -- сам образ памяти (если режим слоеный - то все три слоя)
1124 +The screenshot is saved in the format
1125 +- page 76 - its first kilobyte
1126 +- the memory image itself (if the mode is layered - then all three layers)
1134 1134  
1135 1135  
1136 -Перед вызовом команды можно загрузить имя файла для сохранения скриншота [в cmosmem буфер], однако при его отсутствии (в буфере не будет имени - строки заканчивающейся 0) система сформирует свое имя, на основании следующего правила:
1137 -дефолтный путь для сохранения скриншотов
1129 +Before calling the command, you can load the file name for saving the screenshot [in the cmosmem buffer], but if it is missing (there will be no name in the buffer - a line ending with 0), the system will generate its own name based on the following rule: default path for saving screenshots
1138 1138  0:/SCREENS/
1139 -формат имени - DDHHMISS.SCR
1140 -где DD - две цифры дня месяца, HH - час, MI - минута, SS-секунда
1141 -\\Если в процессе выполнения команды возникнет ошибка - вместо имени будет "ERROR *"
1142 -к примеру
1131 +name format - DDHHMISS.SCR
1132 +where DD is two digits of the day of the month, HH is the hour, MI is the minute, SS is the second
1133 +\\If an error occurs during the command execution, the name will be "ERROR *"
1134 +for example
1143 1143  "ERROR f_open 6"
1144 1144  
1145 1145  
1146 -Пример программы
1138 +Example program
1147 1147  
1148 1148  {{code language="assembler"}}
1149 1149  ; обновим информацию в хидере скриншота