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

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

Summary

Details

Page properties
Content
... ... @@ -657,18 +657,18 @@
657 657  Example program
658 658  
659 659  {{code language="assembler"}}
660 -AZ$CSR = 177220; Command and Status Register (CSR)
661 -AZ$DR = 177222; Data Register (DR)
660 +AZ$CSR = 177220; регистр команд и состояния (CSR)
661 +AZ$DR = 177222; регистр данных (DR)
662 662  
663 663  
664 -; trap 50 - reset AZ
664 +; trap 50 - cброс AZ
665 665  ; результат в R1 =0 ok
666 666  AZreset: MOV #AZ$CSR,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,
667 +1$: CLR (R1); Пошлем команду "Сброс"
668 + TSTB (R1); Проверим готовность контроллера
669 + BPL 1$; Если не готов, сбрасываем еще
670 + ; раз и проверяем снова
671 + TST (R1); Проверим на ошибку,
672 672   BMI 0ERR$
673 673   CLR R1
674 674   return
... ... @@ -676,27 +676,27 @@
676 676   COM R1
677 677   return
678 678  
679 -; trap 55 - write non-volatile memory from the buffer at address ADREEPROMMEM в блок 1 EEPROM
679 +; trap 55 - запись энергонезависимой памяти из буфера с адреса ADREEPROMMEM в блок 1 EEPROM
680 680  WriteEEPROM: push R1
681 681   push R2
682 682   push R3
683 - call AZreset; reset
683 + call AZreset; сбросим
684 684   tst R1
685 685   bne 0ERR$
686 686  
687 687   MOV #AZ$CSR,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
688 + mov #23,(R1); командуем что будем писать данные в буфер
689 +0$: TSTB (R1); проверяем результат выполнения
690 + BPL 0$; ждем
691 + TST (R1)+; инкрементируем
692 692   mov #ADREEPROMMEM+2,R3
693 - mov #255.,R2; write 255. words; skip the first word - the result of reading
694 -1$: mov (R3)+,(R1); send to the controller
693 + mov #255.,R2; пишем 255. слов; первое слово пропускаем - результат чтения
694 +1$: mov (R3)+,(R1); отдаем в контроллер
695 695   sob R2,1$
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
696 + tst -(R1); декрементируем
697 + mov #24,(R1); записать из буфера в блок 1 энергонезависимой памяти
698 +2$: TSTB (R1); проверяем результат выполнения
699 + BPL 2$; ждем
700 700   br 0END$
701 701  0ERR$: CLR R3
702 702  0END$: pop R3
... ... @@ -705,21 +705,23 @@
705 705   return
706 706  {{/code}}
707 707  
708 -**Please note** that when recording, the buffer immediately comes with the data, i.e. there is no first word with the statu
708 +**Обращаю внимание**, при записи, буфер идет сразу с данными, те нет первого слова со статусом.
709 709  
710 710  
711 711  
712 -= Block of commands for working with RTC and NTP =
712 += Блок команд для работы с RTC и NTP =
713 713  
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.
714 +В контроллере AZ®  есть 2 источника получения даты-времени, первый это RTC встроенный в STM32, второй это часы в стеке TCP/IP.  Часы RTC работают автономно при наличии установленной батарейки 2032. Часы в стеке TCP/IP устанавливаются на основании данных с NTP-сервера.
715 715  
716 716  
717 -== Buffer format timestamp (readable) ==
717 +== Формат буфера timestamp (доступен по чтению) ==
718 718  
719 -The controller API immediately prepares time in several formats, so that it can be conveniently used on the PDP-11 side
719 +API контроллера сразу готовит время в нескольких форматах, дабы его было удобно применить на стороне PDP-11
720 720  
721 721  {{info}}
722 -datetime buffer format octal offset - those words datetime buffer format
722 +формат буфера даты-времени
723 +offset в восьмеричной системе - те слова
724 +формат буфера даты-времени
723 723  \\[0]=rtc_rt11date();
724 724  [2]=rt11 time 50Hz big word;
725 725  [4]=rt11 time 50Hz little word;
... ... @@ -737,72 +737,72 @@
737 737  {{/info}}
738 738  
739 739  
740 -== SimpleIN buffer format (when writing) ==
742 +== Формат буфера SimpleIN (при записи) ==
741 741  
742 -the format is simplified as much as possible, for work with PDP-11
744 +формат максимально упрощен, для работы со стороны PDP-11
743 743  
744 744  {{info}}
745 -offset in octal - those words
747 +offset в восьмеричной системе - те слова
746 746  
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
749 +[0]=year       год, младшие две цифры - те 22 а не 2022(!)
750 +[2]=month;     месяц
751 +[4]=day;       день
752 +[6]=wday;      день недели =0 не установлен, 1- понедельник 2 - вторник итд
753 +[10]=hour;     час
754 +[12]=min;      минута
755 +[14]=sec;      секунда
754 754  {{/info}}
755 755  
756 756  
757 -== 031: Get time from RTC to timestamp buffer ==
759 +== **031:  Получить время из RTC в буфер timestamp** ==
758 758  
759 -Command code 031, this command uses RTC clock as a source of filling the timestamp buffer
761 +Код команды 031, данная команда использует RTC часы как источник заполнения буфера timestamp
760 760  
761 -Example program:
763 +Пример программы:
762 762  
763 763  {{code language="assembler"}}
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
766 +; trap 61 - чтение данных часов из автономных часов RTC
767 +; R3 - адрес буфера куда надо считать
768 +; результат в R3 адрес, если успешно. R3=0 если ошибка
767 767  GetDateFromRTC: push R0
768 768   push R1
769 769   push R2
770 - call AZreset; reset
772 + call AZreset; сбросим
771 771   tst R1
772 772   bne G60ERR
773 773   MOV #AZ$CSR,R1
774 774   mov #31,(R1)
775 - br G60; let's go there because further code is the same
777 + br G60; идем туда тк дальше код одинаковый
776 776  {{/code}}
777 777  
778 -== 032: Get time from timestamp buffer ==
780 +== **032:  Получить время из буфера timestamp** ==
779 779  
780 -Command code 032, this command sends the contents of the timestamp buffer to the bus
782 +Код команды 032, данная команда отдает на шину содержимое буфера timestamp
781 781  
782 782  {{code language="assembler"}}
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
785 +; работа с часами
786 +; trap 60 - чтение данных часов из TCP/IP стека
787 +; R3 - адрес буфера куда надо считать
788 +; результат в R3 адрес, если успешно. R3=0 если ошибка
787 787  GetDateFromLAN: push R0
788 788   push R1
789 789   push R2
790 - call AZreset; reset
792 + call AZreset; сбросим
791 791   tst R1
792 792   bne G60ERR
793 793   MOV #AZ$CSR,R1
794 794   mov #42,(R1)
795 -G60: TSTB (R1); check execution result
796 - BPL G60; wait
797 +G60: TSTB (R1); проверяем результат выполнения
798 + BPL G60; ждем
797 797   mov #32,(R1)
798 -1$: TSTB (R1); check execution result
800 +1$: TSTB (R1); проверяем результат выполнения
799 799   BPL 1$; ждем
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
802 + TST (R1)+; инкрементируем
803 + mov R3,R0; запомним R3 - адрес
804 + mov #10.,R2; читаем 10 слов
805 +2$: mov (R1),(R3)+; читаем блок слов в память
804 804   sob R2,2$
805 - mov R0,R3; successful, return address to R3
807 + mov R0,R3; успешно, вернем адрес в R3
806 806   br 0END$
807 807  G60ERR: CLR R3
808 808  0END$: pop R2
... ... @@ -811,11 +811,11 @@
811 811   return
812 812  {{/code}}
813 813  
814 -It is worth checking the correctness of the received time:
816 +Стоит проверить корректность полученного времени:
815 815  
816 816  {{code language="assembler"}}
817 -; trap 63 - check time correctness
818 -; R3 - buffer address, result in R3, if buffer address then OK, =0 error
819 +; trap 63 - проверка корректности времени
820 +; R3 - адрес буфера, результат в R3, если адрес буфера то OK, =0 ошибка
819 819  CheckDateTime: Cmp 6(r3),#2021.
820 820   Blos 1err
821 821   Cmp 6(r3),#2100.
... ... @@ -825,119 +825,119 @@
825 825   return
826 826  {{/code}}
827 827  
828 -== 033: Write time-date to SimpleIN buffer ==
830 +== **033:  Запись времени-даты в буфер SimpleIN** ==
829 829  
830 -Command code 033, this command receives data from the bus into the SimpleIN buffer
832 +Код команды 033, данная команда  принимает с шины данные в буфер SimpleIN
831 831  
832 -The operation of this command is similar to the operation of commands 023 and 016.
834 +Работа данной команды аналогична работе команд [[023>>doc:||anchor="H023:41F44043843D44F44244C44144843843D44B43243144344443544043443043D43D44B43543443B44F43F43E44143B43543444344E44943543943743043F438441438432431443444435440"]] и [[016>>doc:||anchor="H016:A041F44043843D44F44244C43143B43E43A43443043D43D44B445432431443444435440"]].
833 833  
834 -== 034: Set RTC based on buffer data ==
836 +== **034:  Установка RTC на основании данных из буфера** ==
835 835  
836 -Command code 034, this command sets the RTC based on the data in the SimpleIN buffer
838 +Код команды 034, данная команда  устанавливает RTC на основании данных в буфере SimpleIN
837 837  
838 -This command executes quickly, but to avoid problems, a wait loop is recommended.
840 +Данная команда выполняется быстро, но для исключения проблем цикл ожидания выполнения рекомендуется.
839 839  
840 -== 035: Stimulate time request from NTP server, set based on response ==
842 +== **035:  Стимуляция запроса времени с NTP сервера, установка на основании ответа** ==
841 841  
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.
844 +Код команды 035, данная команда отправляет запрос на NTP cервер (установленный в AZ.INI файле или полученный от DHCP) и устанавливает часы в стеке TCP/IP.
843 843  
844 -Example program: sending a request to set the time from an NTP server
846 +Пример программы: отсылка запроса на установку времени с NTP сервера
845 845  
846 846  {{code language="assembler"}}
847 -; trap 62 - sending a request to set the time from the NTP server
849 +; trap 62 - отсылка запроса на установку времени с NTP сервера
848 848  GetDateNTPtoNET:push R1
849 - call AZreset; reset
851 + call AZreset; сбросим
850 850   tst R1
851 851   bne 0ERR$
852 852   MOV #AZ$CSR,R1
853 853   mov #35,(R1)
854 -0$: TSTB (R1); check the result of execution
855 - BPL 0$; wait
856 +0$: TSTB (R1); проверяем результат выполнения
857 + BPL 0$; ждем
856 856  0ERR$: pop R1
857 857   return
858 858  {{/code}}
859 859  
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.
862 +Выполнение команды занимает 1-2 секунды в среднем. Данная команда требует работы стека TCP/IP, соответственно нужны циклы ожидания при включенном стеке.
861 861  
862 -An example of a polling cycle to get time from the network
864 +Пример цикла опроса с целью получить время с сети
863 863  
864 864  {{code language="assembler"}}
865 -; date-time
867 +; дата-время
866 866   mov #S_DateTime_0,R3; "Lan Date:"
867 867   trap 10
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
870 + mov #20,R4; количество циклов ожидания
871 +$datry: trap 62; отослали запрос к NTP серверу
872 + mov #110,@#AZ$CSR; включим сеть
873 + trap 47; ожидание
874 + trap 47; ожидание
873 873   mov #ADRTMPSTR,R3
874 - trap 60; read the date-time into the buffer
875 - trap 63; checked the date-time
876 + trap 60; считали в буфер дату-время
877 + trap 63; проверили дату-время
876 876   tst R3
877 877   bne $ok
878 878  $sob: sob R4,$datry
879 - mov #S_DateTime_2,R3; print error
881 + mov #S_DateTime_2,R3; печать ошибки
880 880   trap 7
881 881   br $go
882 882  
883 883  $ok: mov #ADRTMPSTR,R3
884 - trap 24; print date
885 - trap 25; time
886 -$go: mov #110,@#AZ$CSR; let's turn on the network
886 + trap 24; печать даты
887 + trap 25; времени
888 +$go: mov #110,@#AZ$CSR; включим сеть
887 887  {{/code}}
888 888  
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.
891 +Тут мы явно отсылаем запрос к NTP серверу, затем включаем работу сети и ждем результата, периодически опрашивая и проверяя корректность результата.
890 890  
891 -== 036: Setting RTC based on TCP/IP stack clock ==
893 +== **036:  Установка RTC на основании часов TCP/IP стека** ==
892 892  
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.
895 +Код команды 036,  данная команда устанавливает RTC на основании часов в TCP/IP стека. Предварительно надо установить часы в TCP/IP - команда 036.
894 894  
895 -Example program:
897 +Пример программы:
896 896  
897 897  {{code language="assembler"}}
898 -; trap 64 - set RTC time based on stack time
899 -; R1 - result R1=0 - OK
900 -SetDateNETtoRTC:call AZreset; reset
900 +; trap 64 - установка времени RTC на основании времени стека
901 +; R1 - результат R1=0 - OK
902 +SetDateNETtoRTC:call AZreset; сбросим
901 901   tst R1
902 902   bne 0ERR$
903 903   MOV #AZ$CSR,R1
904 904   mov #36,(R1)
905 -0$: TSTB (R1); check execution result
906 - BPL 0$; wait
907 +0$: TSTB (R1); проверяем результат выполнения
908 + BPL 0$; ждем
907 907   clr R1
908 908  0ERR$: return
909 909  {{/code}}
910 910  
911 -== 042: Get time from TCP/IP stack clock into timestamp buffer ==
913 +== **042:  Получить время из часов TCP/IP стека в буфер timestamp** ==
912 912  
913 -Command code 042, this command uses the TCP/IP stack clock as a source for filling the timestamp buffer.
915 +Код команды 042,   данная команда использует часы TCP/IP стека как источник заполнения буфера timestamp.
914 914  
915 -Example program:
917 +Пример программы:
916 916  
917 917  {{code language="assembler"}}
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
920 +; работа с часами
921 +; trap 60 - чтение данных часов из TCP/IP стека
922 +; R3 - адрес буфера куда надо считать
923 +; результат в R3 адрес, если успешно. R3=0 если ошибка
922 922  GetDateFromLAN: push R0
923 923   push R1
924 924   push R2
925 - call AZreset; reset
927 + call AZreset; сбросим
926 926   tst R1
927 927   bne G60ERR
928 928   MOV #AZ$CSR,R1
929 929   mov #42,(R1)
930 -G60: TSTB (R1); check execution result
931 - BPL G60; wait
932 +G60: TSTB (R1); проверяем результат выполнения
933 + BPL G60; ждем
932 932   mov #32,(R1)
933 -1$: TSTB (R1); check execution result
934 - BPL 1$; wait
935 - TST (R1)+; increment
936 - mov R3,R0; remember R3 address
935 +1$: TSTB (R1); проверяем результат выполнения
936 + BPL 1$; ждем
937 + TST (R1)+; инкрементируем
938 + mov R3,R0; запомним R3 - адрес
937 937   mov #10.,R2; читаем 10 слов
938 -2$: mov (R1),(R3)+; read block of words into memory
940 +2$: mov (R1),(R3)+; читаем блок слов в память
939 939   sob R2,2$
940 - mov R0,R3; successful, return address to R3
942 + mov R0,R3; успешно, вернем адрес в R3
941 941   br 0END$
942 942  G60ERR: CLR R3
943 943  0END$: pop R2
... ... @@ -946,50 +946,52 @@
946 946   return
947 947  {{/code}}
948 948  
949 -All commands set the ready bit upon completion.
951 +все команды устанавливают бит готовности по завершению.
950 950  
951 951  
952 -= **[[AZБК®>>doc:Контроллеры AZБК® для компьютеров БК-0010 БК-0010\.01 БК-0011М.WebHome]] **specific commands =
954 += **Команды специфические для [[AZБК®>>doc:Контроллеры AZБК® для компьютеров БК-0010 БК-0010\.01 БК-0011М.WebHome]]** =
953 953  
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.
956 +Данные команды предназначены для работы контроллера AZБК®, разработанного для серии компьютеров БК - БК-0010/БК-0010.01/БК-0011М.
955 955  
956 -Other AZ® controllers ignore these commands.
958 +Другие контроллеры AZ® игнорируют эти команды
957 957  
958 -== 037: Restart of the** [[AZБК®>>doc:Контроллеры AZБК® для компьютеров БК-0010 БК-0010\.01 БК-0011М.WebHome]] **controller and the entire computer ==
960 +== **037: перезапуск контроллера [[AZБК®>>doc:Контроллеры AZБК® для компьютеров БК-0010 БК-0010\.01 БК-0011М.WebHome]] и всей БК** ==
959 959  
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
962 +Код команды 037,  данная команда осуществляет перезапуск микроконтроллера AZ®, что вызывает и перезапуск самой БК-0010/БК-0010.01/БК-0011М
961 961  
962 -Example program
964 +Пример программы
963 963  
964 964  {{code language="assembler"}}
965 -AZ$CSR = 177220; command and status register (CSR)
966 -AZ$DR = 177222; data register (DR)
967 +AZ$CSR = 177220; регистр команд и состояния (CSR)
968 +AZ$DR = 177222; регистр данных (DR)
967 967  
968 968  
969 -; trap 57 - full restart
970 -AZcouldReboot: call AZreset; reset AZ so it is ready to receive
971 +; trap 57 - перезапуск БК полный
972 +AZcouldReboot: call AZreset; сбросим AZ дабы он был готов принимать команды
971 971   mov #037,@#AZ$CSR
972 972   return
973 973  {{/code}}
974 974  
975 -== 044: Saving a screenshot to a file ==
977 +== **044: Cохранение скриншота в файл** ==
976 976  
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
979 +Код команды 044,  данная команда предназначена для снятия образа памяти указанного размера (или определенного автоматически на основании сохраненных параметров)
980 +технически команда может служить как средство отладки ибо способная снимать образ памяти
981 +общее ограничение на снятие образа памяти - 2МБ на один образ
982 +\\в качестве параметров используется служебная страница памяти 76(8)
979 979  
980 -Structure of filling information about a screenshot
984 +Структура заполнения информации о скриншоте
981 981  
982 982  {{code language="c"}}
983 -// screenshot header structure
987 +// структура хидера скриншота
984 984  typedef __packed struct screen_header
985 985  {
986 - unsigned short int tag; // must be equal to 0240
990 + unsigned short int tag; // должен быть равен 0240
987 987  
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
992 + unsigned int begin_adress; // начальный адрес в словах - прямая задача в физических адресах
993 + unsigned int length; // длина в словах - прямая задача в физических адресах
990 990  
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
995 + unsigned short int begin_page; // начальная страница - номер - прямая задача в номерах страниц
996 + unsigned short int len_pages; // количество страниц - прямая задача в номерах страниц
993 993  
994 994   unsigned short int R177300; //
995 995   unsigned short int R177302; //
... ... @@ -1007,56 +1007,57 @@
1007 1007   unsigned short int R177332; //
1008 1008   unsigned short int R177334; //
1009 1009   unsigned short int R177336; //
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
1014 + unsigned short int R177340; // - Регистр управления активацией окно - маски окон
1015 + unsigned short int R177342; // - Регистр управления r/o на окно
1016 + unsigned short int R177344; // - Регистр управления shadow окон - маски окон
1017 + unsigned short int R177346; // - Регистр управления маппером
1018 + unsigned short int R177350; // - регистр копия по записи 177130 в режиме записи управления памятью в SMK
1019 + unsigned short int R177352; // - регистр копия по записи 177716 в режиме записи управления памятью в БК11М
1016 1016  
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
1021 + unsigned short int R177230; // - регистр управления
1022 + unsigned short int R177232; // - регистр номера страницы начала отображения - верхняя страница (слой 0)
1023 + unsigned short int R177240; // - регистр номера страницы начала отображения - средняя страница (слой 1)
1024 + unsigned short int R177242; // - регистр номера страницы начала отображения - нижняя страница (слой 2)
1025 + unsigned short int R177244; // - регистр вертикального скролинга слой 2
1026 + unsigned short int R177246; // - регистр вертикального скролинга слой 1
1027 + unsigned short int R177250; // - регистр вертикального скролинга слой 0
1028 + unsigned short int R177252; // - регистр гозизонтального скролинга слой 0
1029 + unsigned short int R177254; // - регистр гозизонтального скролинга слой 1
1030 + unsigned short int R177256; // - регистр гозизонтального скролинга слой 2
1027 1027  
1028 1028   unsigned short int paldata[338]; //
1029 1029  } screen_header_t;
1030 1030  {{/code}}
1031 1031  
1032 -Example code for filling a memory page
1036 +Пример кода для заполнения страницы памяти
1033 1033  
1034 1034  {{code language="assembler"}}
1035 1035  ;--------------------------------------------------
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
1040 +; карта 76й страницы - туда мы готовим данные для команды скринщотов
1041 + SCR_PAGE = 130000 ; 76ую страницу цепляем на место 77й временно - те в окно 130000
1042 + SCR_TAG = SCR_PAGE+0 ; тут вход - 240 - 1 слово
1043 + SCR_ADDR_CONF = SCR_TAG+2 ; сюда команду с адресами - адрес+длина 24 бита - 4 слова
1044 + SCR_PAGE_CONF = SCR_ADDR_CONF+8. ; сюда команду со страницами - начальная страница и количество страниц - 2 слова
1045 + SCR_MEM_CONF = SCR_PAGE_CONF+4. ; cюда конфигурацию памяти из регистров - 22 слова
1046 + SCR_VGA_CONF = SCR_MEM_CONF+44. ; сюда конфигурацию видеоконтроллера - 10 cлов
1047 + SCR_PAL = SCR_VGA_CONF+20. ; сюда 338. значений(слов) палитры 338 слов
1044 1044  ;--------------------------------------------------
1045 1045  
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
1050 1050  
1051 - mov #100377,R3 ; constant-filler
1051 +; trap 41 - подготовка дефолтной информации для работы функционала скриншотов
1052 +PrepSRC: jsr R5, PUSHA ; пакетное сохранение регистров
1053 + mov @#177326,-(SP) ; сохраним страницу 130k которая была до вызова
1054 + mov #76,@#177326 ; цепляем 76ую страницу в окно
1055 +
1056 + mov #100377,R3 ; константа-заполнитель
1052 1052   mov #SCR_PAGE,R4
1053 1053   mov #2047.,R2
1054 1054  4$: mov R3,(R4)+
1055 1055   sob R2,4$
1056 1056  
1057 - mov #240,@#SCR_TAG ; put the tag
1062 + mov #240,@#SCR_TAG ; проставляем тег
1058 1058  
1059 - ; clean the address section - default is automatic address detection
1064 + ; чистим участок адресов - дефолтно автоматическое определение адресов
1060 1060   clr R3
1061 1061   mov #SCR_ADDR_CONF,R4
1062 1062   mov #10,R2
... ... @@ -1063,7 +1063,7 @@
1063 1063  2$: mov R3,(R4)+
1064 1064   sob R2,2$
1065 1065  
1066 - ; memory configuration - default
1071 + ;конфигурация памяти - дефолтная
1067 1067   mov #SCR_MEM_CONF,R4
1068 1068   mov #30,(R4)+ ;177300
1069 1069   mov #31,(R4)+ ;177302
... ... @@ -1082,29 +1082,29 @@
1082 1082   mov #110,(R4)+ ;177334
1083 1083   mov #100,(R4)+ ;177336
1084 1084  
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
1090 + mov #170000,(R4)+ ;177340 - Регистр управления активацией окно - маски окон
1091 + mov R3,(R4)+ ;177342 - Регистр управления r/o на окно
1092 + mov #7777,(R4)+ ;177344 - Регистр управления shadow окон - маски окон
1093 + mov #40404,(R4)+ ;177346 - Регистр управления маппером
1094 + mov R3,(R4)+ ;177350 - регистр копия по записи 177130 в режиме записи управления памятью в SMK
1095 + mov #16000,(R4)+ ;177352 - регистр копия по записи 177716 в режиме записи управления памятью в БК11М
1091 1091  
1092 - ;Video controller configuration - default
1097 + ;конфигурация видеоконтроллера - дефолтная
1093 1093   ; 177230-177256
1094 1094   mov #SCR_VGA_CONF,R4
1095 1095  
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
1101 + mov #12201,(R4)+ ;177230 - регистр управления
1102 + mov #4,(R4)+ ;177232 - регистр номера страницы начала отображения - верхняя страница (слой 0)
1103 + mov R3,(R4)+ ;177240 - регистр номера страницы начала отображения - средняя страница (слой 1) "под спрайты"
1104 + mov R3,(R4)+ ;177242 - регистр номера страницы начала отображения - нижняя страница (слой 2) "под фон"
1105 + mov R3,(R4)+ ;177244 - регистр вертикального скролинга слой 2
1106 + mov R3,(R4)+ ;177246 - регистр вертикального скролинга слой 1
1107 + mov R3,(R4)+ ;177250 - регистр вертикального скролинга слой 0
1108 + mov R3,(R4)+ ;177252 - регистр гозизонтального скролинга слой 0
1109 + mov R3,(R4)+ ;177254 - регистр гозизонтального скролинга слой 1
1110 + mov R3,(R4)+ ;177256 - регистр гозизонтального скролинга слой 2
1106 1106  
1107 - ; download the palette - take the default one from this ROM
1112 + ; закачиваем палитру - берем дефолтную из этой ПЗУшки
1108 1108   mov #SCR_PAL,R4
1109 1109   mov #PalData,R2
1110 1110   mov #338.,R3
... ... @@ -1111,31 +1111,32 @@
1111 1111  1$: mov (R2)+,(R4)+
1112 1112   sob R3,1$
1113 1113  
1114 - mov (SP)+,@#177326; return the page from which the call was made
1119 + mov (SP)+,@#177326; вернем страницу с которой был вызов
1115 1115   return
1116 1116  {{/code}}
1117 1117  
1118 -There are three options for specifying memory areas.
1123 +Вариантов указания участков памяти три
1119 1119  
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.
1125 +1. указать адрес и длину 24х битные - формат, если их нет - система смотрит дальше
1126 +1. указать номер страницы и количество страницы, если их нет
1127 +1. система смотрит дальше - те делает скриншот на основании данных о регистрах 177230 и т.д..
1123 1123  
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)
1129 +Cкриншот сохраняется в формате
1130 +- страница 76 - ее первый килобайт
1131 +- сам образ памяти (если режим слоеный - то все три слоя)
1127 1127  
1128 1128  
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
1134 +Перед вызовом команды можно загрузить имя файла для сохранения скриншота [в cmosmem буфер], однако при его отсутствии (в буфере не будет имени - строки заканчивающейся 0) система сформирует свое имя, на основании следующего правила:
1135 +дефолтный путь для сохранения скриншотов
1130 1130  0:/SCREENS/
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
1137 +формат имени - DDHHMISS.SCR
1138 +где DD - две цифры дня месяца, HH - час, MI - минута, SS-секунда
1139 +\\Если в процессе выполнения команды возникнет ошибка - вместо имени будет "ERROR *"
1140 +к примеру
1135 1135  "ERROR f_open 6"
1136 1136  
1137 1137  
1138 -Example program
1144 +Пример программы
1139 1139  
1140 1140  {{code language="assembler"}}
1141 1141  ; обновим информацию в хидере скриншота