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
-
... ... @@ -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 регистркомандисостояния(CSR)589 -AZ$DR регистрданных(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бросAZ592 +; 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вбуферсадресаADREEPROMMEM609 -; результатR3 -адрес,еслиR3=0ошибка610 -; статусчтениявR1 0 - ok611 -; 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 регистркомандисостояния(CSR)663 -AZ$DR регистрданных(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бросAZ664 +; 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 EEPROM679 +; 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-11719 +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-11742 +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часыкакисточникзаполнениябуфераtimestamp759 +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 - чтениеданныхчасовизавтономныхчасовRTC769 -; 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,даннаякомандаотдаетнашинусодержимоебуфераtimestamp780 +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; успешно,вернемадресвR3805 + 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,даннаякомандапринимаетсшиныданныевбуферSimpleIN830 +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наоснованииданныхвбуфереSimpleIN836 +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,даннаякомандаотправляетзапроснаNTPcервер(установленныйв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 - результат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; успешно,вернемадресвR3940 + 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 регистркомандисостояния(CSR)970 -AZ$DR регистрданных(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; долженбытьравен0240986 + unsigned short int tag; // must be equal to 0240 993 993 994 - unsigned int начальныйадресвсловах-прямаязадачавфизическихадресах995 - unsigned int длинавсловах-прямаязадачавфизическихадресах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врежимезаписиуправленияпамятьювSMK1021 - 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; // - регистрвертикальногоскролингаслой21028 - unsigned short int R177246; // - регистрвертикальногоскролингаслой11029 - unsigned short int R177250; // - регистрвертикальногоскролингаслой01030 - unsigned short int R177252; // - регистргозизонтальногоскролингаслой01031 - unsigned short int R177254; // - регистргозизонтальногоскролингаслой11032 - unsigned short int R177256; // - регистргозизонтальногоскролингаслой21017 + 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 - ;76уюстраницуцепляемнаместо77йвременно-тевокно1300001044 - ; тут вход- 240 - 1слово1045 - ; сюда команду с адресами-адрес+длина24бита- 4слова1046 - сюдакомандусостраницами-начальнаястраницаиколичествостраниц- 2слова1047 - cюдаконфигурациюпамятиизрегистров- 22слова1048 - сюдаконфигурациювидеоконтроллера- 10cлов1049 - сюда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 в режиме записи управления памятью в SMK1097 - 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 - регистр вертикального скролинга слой 21108 - mov R3,(R4)+ ;177246 - регистр вертикального скролинга слой 11109 - mov R3,(R4)+ ;177250 - регистр вертикального скролинга слой 01110 - mov R3,(R4)+ ;177252 - регистр гозизонтального скролинга слой 01111 - mov R3,(R4)+ ;177254 - регистр гозизонтального скролинга слой 11112 - mov R3,(R4)+ ;177256 - регистр гозизонтального скролинга слой 21096 + 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хбитные-cмформат,еслиихнет-системасмотритдальше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.SCR1140 - где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 ; обновим информацию в хидере скриншота