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

From version 2.54
edited by Max
on 2025/02/25 15:37
Change comment: (Autosaved)
To version 2.72
edited by Max
on 2025/02/25 17:02
Change comment: (Autosaved)

Summary

Details

Page properties
Content
... ... @@ -972,26 +972,24 @@
972 972   return
973 973  {{/code}}
974 974  
975 -== **044: Cохранение скриншота в файл** ==
975 +== 044: Saving a screenshot to a file ==
976 976  
977 -Код команды 044,  данная команда предназначена для снятия образа памяти указанного размера (или определенного автоматически на основании сохраненных параметров)
978 -технически команда может служить как средство отладки ибо способная снимать образ памяти
979 -общее ограничение на снятие образа памяти - 2МБ на один образ
980 -\\в качестве параметров используется служебная страница памяти 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
981 981  
982 -Структура заполнения информации о скриншоте
980 +Structure of filling information about a screenshot
983 983  
984 984  {{code language="c"}}
985 -// структура хидера скриншота
983 +// screenshot header structure
986 986  typedef __packed struct screen_header
987 987  {
988 - unsigned short int tag; // должен быть равен 0240
986 + unsigned short int tag; // must be equal to 0240
989 989  
990 - unsigned int begin_adress; // начальный адрес в словах - прямая задача в физических адресах
991 - 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
992 992  
993 - unsigned short int begin_page; // начальная страница - номер - прямая задача в номерах страниц
994 - 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
995 995  
996 996   unsigned short int R177300; //
997 997   unsigned short int R177302; //
... ... @@ -1009,57 +1009,55 @@
1009 1009   unsigned short int R177332; //
1010 1010   unsigned short int R177334; //
1011 1011   unsigned short int R177336; //
1012 - unsigned short int R177340; // - Регистр управления активацией окно - маски окон
1013 - unsigned short int R177342; // - Регистр управления r/o на окно
1014 - unsigned short int R177344; // - Регистр управления shadow окон - маски окон
1015 - unsigned short int R177346; // - Регистр управления маппером
1016 - unsigned short int R177350; // - регистр копия по записи 177130 в режиме записи управления памятью в SMK
1017 - 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
1018 1018  
1019 - unsigned short int R177230; // - регистр управления
1020 - unsigned short int R177232; // - регистр номера страницы начала отображения - верхняя страница (слой 0)
1021 - unsigned short int R177240; // - регистр номера страницы начала отображения - средняя страница (слой 1)
1022 - unsigned short int R177242; // - регистр номера страницы начала отображения - нижняя страница (слой 2)
1023 - unsigned short int R177244; // - регистр вертикального скролинга слой 2
1024 - unsigned short int R177246; // - регистр вертикального скролинга слой 1
1025 - unsigned short int R177250; // - регистр вертикального скролинга слой 0
1026 - unsigned short int R177252; // - регистр гозизонтального скролинга слой 0
1027 - unsigned short int R177254; // - регистр гозизонтального скролинга слой 1
1028 - 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
1029 1029  
1030 1030   unsigned short int paldata[338]; //
1031 1031  } screen_header_t;
1032 1032  {{/code}}
1033 1033  
1034 -Пример кода для заполнения страницы памяти
1032 +Example code for filling a memory page
1035 1035  
1036 1036  {{code language="assembler"}}
1037 1037  ;--------------------------------------------------
1038 -; карта 76й страницы - туда мы готовим данные для команды скринщотов
1039 - SCR_PAGE = 130000 ; 76ую страницу цепляем на место 77й временно - те в окно 130000
1040 - SCR_TAG = SCR_PAGE+0 ; тут вход - 240 - 1 слово
1041 - SCR_ADDR_CONF = SCR_TAG+2 ; сюда команду с адресами - адрес+длина 24 бита - 4 слова
1042 - SCR_PAGE_CONF = SCR_ADDR_CONF+8. ; сюда команду со страницами - начальная страница и количество страниц - 2 слова
1043 - SCR_MEM_CONF = SCR_PAGE_CONF+4. ; cюда конфигурацию памяти из регистров - 22 слова
1044 - SCR_VGA_CONF = SCR_MEM_CONF+44. ; сюда конфигурацию видеоконтроллера - 10 cлов
1045 - 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
1046 1046  ;--------------------------------------------------
1045 +; trap 41 - preparation of default information for screenshot functionality
1046 +PrepSRC: jsr R5, PUSHA ; batch saving of registers
1047 + mov @#177326,-(SP) ; save page 130k which was before the call
1048 + mov #76,@#177326 ; hook 76th page into window
1047 1047  
1048 -
1049 -; trap 41 - подготовка дефолтной информации для работы функционала скриншотов
1050 -PrepSRC: jsr R5, PUSHA ; пакетное сохранение регистров
1051 - mov @#177326,-(SP) ; сохраним страницу 130k которая была до вызова
1052 - mov #76,@#177326 ; цепляем 76ую страницу в окно
1053 -
1054 - mov #100377,R3 ; константа-заполнитель
1050 + mov #100377,R3 ; constant-filler
1055 1055   mov #SCR_PAGE,R4
1056 1056   mov #2047.,R2
1057 1057  4$: mov R3,(R4)+
1058 1058   sob R2,4$
1059 1059  
1060 - mov #240,@#SCR_TAG ; проставляем тег
1056 + mov #240,@#SCR_TAG ; put the tag
1061 1061  
1062 - ; чистим участок адресов - дефолтно автоматическое определение адресов
1058 + ; clean the address section - default is automatic address detection
1063 1063   clr R3
1064 1064   mov #SCR_ADDR_CONF,R4
1065 1065   mov #10,R2
... ... @@ -1066,7 +1066,7 @@
1066 1066  2$: mov R3,(R4)+
1067 1067   sob R2,2$
1068 1068  
1069 - ;конфигурация памяти - дефолтная
1065 + ; memory configuration - default
1070 1070   mov #SCR_MEM_CONF,R4
1071 1071   mov #30,(R4)+ ;177300
1072 1072   mov #31,(R4)+ ;177302
... ... @@ -1085,29 +1085,29 @@
1085 1085   mov #110,(R4)+ ;177334
1086 1086   mov #100,(R4)+ ;177336
1087 1087  
1088 - mov #170000,(R4)+ ;177340 - Регистр управления активацией окно - маски окон
1089 - mov R3,(R4)+ ;177342 - Регистр управления r/o на окно
1090 - mov #7777,(R4)+ ;177344 - Регистр управления shadow окон - маски окон
1091 - mov #40404,(R4)+ ;177346 - Регистр управления маппером
1092 - mov R3,(R4)+ ;177350 - регистр копия по записи 177130 в режиме записи управления памятью в SMK
1093 - mov #16000,(R4)+ ;177352 - регистр копия по записи 177716 в режиме записи управления памятью в БК11М
1084 + mov #170000,(R4)+ ;177340
1085 + mov R3,(R4)+ ;177342
1086 + mov #7777,(R4)+ ;177344
1087 + mov #40404,(R4)+ ;177346
1088 + mov R3,(R4)+ ;177350
1089 + mov #16000,(R4)+ ;177352
1094 1094  
1095 - ;конфигурация видеоконтроллера - дефолтная
1091 + ;Video controller configuration - default
1096 1096   ; 177230-177256
1097 1097   mov #SCR_VGA_CONF,R4
1098 1098  
1099 - mov #12201,(R4)+ ;177230 - регистр управления
1100 - mov #4,(R4)+ ;177232 - регистр номера страницы начала отображения - верхняя страница (слой 0)
1101 - mov R3,(R4)+ ;177240 - регистр номера страницы начала отображения - средняя страница (слой 1) "под спрайты"
1102 - mov R3,(R4)+ ;177242 - регистр номера страницы начала отображения - нижняя страница (слой 2) "под фон"
1103 - mov R3,(R4)+ ;177244 - регистр вертикального скролинга слой 2
1104 - mov R3,(R4)+ ;177246 - регистр вертикального скролинга слой 1
1105 - mov R3,(R4)+ ;177250 - регистр вертикального скролинга слой 0
1106 - mov R3,(R4)+ ;177252 - регистр гозизонтального скролинга слой 0
1107 - mov R3,(R4)+ ;177254 - регистр гозизонтального скролинга слой 1
1108 - mov R3,(R4)+ ;177256 - регистр гозизонтального скролинга слой 2
1095 + mov #12201,(R4)+ ;177230
1096 + mov #4,(R4)+ ;177232
1097 + mov R3,(R4)+ ;177240
1098 + mov R3,(R4)+ ;177242
1099 + mov R3,(R4)+ ;177244
1100 + mov R3,(R4)+ ;177246
1101 + mov R3,(R4)+ ;177250
1102 + mov R3,(R4)+ ;177252
1103 + mov R3,(R4)+ ;177254
1104 + mov R3,(R4)+ ;177256
1109 1109  
1110 - ; закачиваем палитру - берем дефолтную из этой ПЗУшки
1106 + ; download the palette - take the default one from this ROM
1111 1111   mov #SCR_PAL,R4
1112 1112   mov #PalData,R2
1113 1113   mov #338.,R3
... ... @@ -1114,107 +1114,105 @@
1114 1114  1$: mov (R2)+,(R4)+
1115 1115   sob R3,1$
1116 1116  
1117 - mov (SP)+,@#177326; вернем страницу с которой был вызов
1113 + mov (SP)+,@#177326; return the page from which the call was made
1118 1118   return
1119 1119  {{/code}}
1120 1120  
1121 -Вариантов указания участков памяти три
1117 +There are three options for specifying memory areas.
1122 1122  
1123 -1. указать адрес и длину 24х битные - формат, если их нет - система смотрит дальше
1124 -1. указать номер страницы и количество страницы, если их нет
1125 -1. система смотрит дальше - те делает скриншот на основании данных о регистрах 177230 и т.д..
1119 +1. specify the address and length 24-bit - see format, if they are not there - the system looks further
1120 +1. specify the page number and page quantity, if they are not there
1121 +1. the system looks further - that is, it makes a screenshot based on the data about registers 177230, etc.
1126 1126  
1127 -Cкриншот сохраняется в формате
1128 -- страница 76 - ее первый килобайт
1129 -- сам образ памяти (если режим слоеный - то все три слоя)
1123 +The screenshot is saved in the format
1124 +- page 76 - its first kilobyte
1125 +- the memory image itself (if the mode is layered - then all three layers)
1130 1130  
1131 1131  
1132 -Перед вызовом команды можно загрузить имя файла для сохранения скриншота [в cmosmem буфер], однако при его отсутствии (в буфере не будет имени - строки заканчивающейся 0) система сформирует свое имя, на основании следующего правила:
1133 -дефолтный путь для сохранения скриншотов
1128 +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 1134  0:/SCREENS/
1135 -формат имени - DDHHMISS.SCR
1136 -где DD - две цифры дня месяца, HH - час, MI - минута, SS-секунда
1137 -\\Если в процессе выполнения команды возникнет ошибка - вместо имени будет "ERROR *"
1138 -к примеру
1130 +name format - DDHHMISS.SCR
1131 +where DD is two digits of the day of the month, HH is the hour, MI is the minute, SS is the second
1132 +\\If an error occurs during the command execution, the name will be "ERROR *"
1133 +for example
1139 1139  "ERROR f_open 6"
1140 1140  
1141 1141  
1142 -Пример программы
1137 +Example program
1143 1143  
1144 1144  {{code language="assembler"}}
1145 -; обновим информацию в хидере скриншота
1140 +; update the information in the screenshot header
1146 1146  ;--------------------------------------------------
1147 -; карта 76й страницы - туда мы готовим данные для команды скринщотов
1148 - SPAGE = 170000 ; 76ую страницу цепляем на место 77й временно - те в окно 130000
1149 - STAG = SPAGE+0 ; тут вход - 240 - 1 слово
1150 - SADDRC = STAG+2 ; сюда команду с адресами - адрес+длина 24 бита - 4 слова
1151 - SPAGEC = SADDRC+8. ; сюда команду со страницами - начальная страница и количество страниц - 2 слова
1152 - SMEMC = SPAGEC+4. ; cюда конфигурацию памяти из регистров - 22 слова
1153 - SVGAC = SMEMC+44. ; сюда конфигурацию видеоконтроллера - 10 cлов
1154 - SPAL = SVGAC+20. ; сюда 338. значений(слов) палитры 338 слов
1142 +; 76th page map - we prepare data for the screenshot command there
1143 +SCR_PAGE = 130000 ; we temporarily attach the 76th page to the 77th - that is, into the 130000 window
1144 +SCR_TAG = SCR_PAGE+0 ; here is the input - 240 - 1 word
1145 +SCR_ADDR_CONF = SCR_TAG+2 ; here is the command with addresses - address+length 24 bits - 4 words
1146 +SCR_PAGE_CONF = SCR_ADDR_CONF+8. ; here is the command with pages - the starting page and the number of pages - 2 words
1147 +SCR_MEM_CONF = SCR_PAGE_CONF+4. ; here is the memory configuration from the registers - 22 words
1148 +SCR_VGA_CONF = SCR_MEM_CONF+44. ; here video controller configuration - 10 words
1149 +SCR_PAL = SCR_VGA_CONF+20. ; here 338. values (words) of palette 338 words
1155 1155  ;--------------------------------------------------
1151 + mov @#177326,R5 ; save page 130k which was before the call
1152 + mov #76,@#177336 ; hook the 76th page into the window
1156 1156  
1157 - mov @#177326,R5 ; сохраним страницу 130k которая была до вызова
1158 - mov #76,@#177336 ; цепляем 76ую страницу в окно
1159 -
1160 - ;конфигурация видеоконтроллера
1154 + ;video controller configuration
1161 1161   ; 177230-177256
1162 1162   mov #SVGAC,R4
1163 1163  
1164 - mov @#177230,(R4)+;177230 - регистр управления
1165 - mov @#177232,(R4)+;177232 - регистр - верхняя страница (слой 0)
1166 - mov @#177240,(R4)+;177240 - регистр - средняя страница (слой 1)
1167 - mov @#177242,(R4)+;177242 - регистр - нижняя страница (слой 2)
1168 - mov @#177244,(R4)+;177244 - регистр вертикального скролинга слой 2
1169 - mov @#177246,(R4)+;177246 - регистр вертикального скролинга слой 1
1170 - mov @#177250,(R4)+;177250 - регистр вертикального скролинга слой 0
1171 - mov @#177252,(R4)+;177252 - регистр гозизонтального скролинга слой 0
1172 - mov @#177254,(R4)+;177254 - регистр гозизонтального скролинга слой 1
1173 - mov @#177256,(R4)+;177256 - регистр гозизонтального скролинга слой 2
1158 + mov @#177230,(R4)+;177230 - control register
1159 + mov @#177232,(R4)+;177232 - register - top page (layer 0)
1160 + mov @#177240,(R4)+;177240 - register - top page (layer 1)
1161 + mov @#177242,(R4)+;177242 - register - top page (layer 2)
1162 + mov @#177244,(R4)+;177244 - vertical scroll register layer 2
1163 + mov @#177246,(R4)+;177246 - vertical scroll register layer 1
1164 + mov @#177250,(R4)+;177250 - vertical scroll register layer 0
1165 + mov @#177252,(R4)+;177252 - horizontal scroll register layer 0
1166 + mov @#177254,(R4)+;177254 - horizontal scroll register layer 1
1167 + mov @#177256,(R4)+;177256 - horizontal scroll register layer 2
1174 1174  
1175 - mov R5,@#177336; вернем страницу с которой был вызов
1169 + mov R5,@#177336; return the page from which the call was made
1176 1176  
1177 1177  
1178 1178   ;-------------------------
1179 - MOV #AZ$CSR,R3 ; Готовим CSR контроллера
1180 - MOV #AZ$DR,R4 ; Готовим DR контроллера
1181 -20$: CLR (R3) ; Сбросим контроллер
1173 + MOV #AZ$CSR,R3 ; Preparing controller CSR
1174 + MOV #AZ$DR,R4 ; Preparing controller DR
1175 +20$: CLR (R3) ; Reset the controller
1182 1182   TSTB (R3)
1183 1183   BPL 20$
1184 1184  
1185 - ; очистим блок памяти для имени - дабы система сделала дефолтное имя файла
1186 - mov #23,(R3) ; командуем что будем писать данные в буфер
1187 -128$: TSTB (R3) ; проверяем результат выполнения
1188 - BPL 128$ ; ждем
1179 + ; clear the memory block for the name - so that the system makes a default file name
1180 + mov #23,(R3) ; command that we will write data to the buffer
1181 +128$: TSTB (R3) ; check the result of execution
1182 + BPL 128$ ; wait
1189 1189   clr R1
1190 1190  
1191 1191   mov #256.,R2 ;
1192 -129$: mov R1,(R4) ; отдаем в контроллер
1186 +129$: mov R1,(R4) ; give to the controller
1193 1193   sob R2,129$
1194 1194  
1195 1195  
1196 - MOV #044,(R3) ; команда скриншот
1190 + MOV #044,(R3) ; screenshot command
1197 1197  22$: TSTB (R3) ;
1198 1198   BPL 22$ ;
1199 1199  
1200 - ; получим имя скриншота
1201 - mov #22,(R3) ; отдать на шину считанный блок памяти из буфера
1202 -121$: tstb (R3) ; проверяем результат выполнения
1203 - bpl 121$ ; ждем
1194 + ; get the screenshot name
1195 + mov #22,(R3) ; give the read memory block from the buffer to the bus
1196 +121$: tstb (R3) ; check the result of execution
1197 + bpl 121$ ; wait
1204 1204  
1205 1205   mov #BUF,R1
1206 - mov #256.,R2 ; читаем 256. слов; первое слово - результат чтения
1207 -122$: mov (R4),(R1)+ ; читаем блок слов в память
1200 + mov #256.,R2 ; read 256. words; the first word is the result of reading
1201 +122$: mov (R4),(R1)+ ; read a block of words into memory
1208 1208   sob R2,122$
1209 1209  
1210 1210   .PRINT #RESOK
1211 1211   .Print #BUF
1212 1212  
1213 - mov #110,@#AZ$CSR; включаем сеть по-умолчанию сеть должна быть постоянно включена
1207 + mov #110,@#AZ$CSR; enable the network by default, the network should be constantly enabled
1214 1214   .Exit
1215 1215  {{/code}}
1216 1216  
1217 -Для распаковки скриншота можно использовать вот эту утилиту
1211 +To unpack a screenshot, you can use this utility -
1218 1218  
1219 1219  
1220 1220