B.M. Рабинович (г. Харьков), М. Дмитровский (г. Москва)
Выход из «отладки» [$] в ФОКАЛ без стирания информации в ОЗУ
Способ 1
$Щ $120020А26Д0П $262А1И <СТОП>
Способ 2
$ 120000А16Д1000П $1016A12737,1,262,137,121110И $1000G
Первый способ хорош для редких переходов из отладки в ФОКАЛ, а второй - тем, что постоянно «живёт» в ОЗУ с адреса 1000, и можно каждый раз (потом после пересылки и ввода кодов с адреса 1016) возвращаться в ФОКАЛ по команде 1000G.
Комментарий рецензента
На способы выхода из режима отладки в систему ФОКАЛ без стирания информации в ОЗУ
1. Первый способ для сравнительно редких переходов из режима отладки в систему ФОКАЛ.
В этом случае, как правильно считают авторы, действительно не происходит стирания информации из ОЗУ при возврате в ФОКАЛ.
Этот способ достаточно удобен при отладке программ, если приходится переходить из режима работы с ФОКАЛом в режим отладки и обратно. Возможность такого перехода обеспечивается при снятии защиты с системных переменных и замене векторов прерываний путём пересылки их стандартных значений из области ПЗУ с адресом 120020 длиной 26 байтов. Дополнительно устанавливается ненулевое содержимое ячейки с адресом 262. Эго выполняется для того, чтобы при нажатии клавиши «ВВОД» в рабочую программу передавался код 15, а не код 12.
Конечно, возвращаться в ФОКАЛ без потери информации в ОЗУ можно, восстанавливая в области системных переменных и меньшее количество байтов, например:
$Ш $120024А22Д4П $262А1И <СТОП>
или
$Щ $120024А10Д4П $262А1И <СТОП>
После пересылки векторов прерывания способом авторов область ОЗУ, начиная с нулевого адреса, будет содержать:
Адрес |
Содержание |
---|---|
0 |
137 |
2 |
122212 |
4 |
121110 |
6 |
340 |
10 |
125636 |
12 |
100 |
14 |
121110 |
16 |
340 |
20 |
122420 |
22 |
340 |
24 |
126116 |
Способ, предложенный Рабиновичем и Дмитровским для возврата режима отладки в систему ФОКАЛ, весьма полезен.
2. При втором способе перехода, который можно рекомендовать при частых переходах из режима отладки в ФОКАЛ и обратно в ОЗУ, начиная с адреса 1000, создаётся программа:
Адрес |
Содержание |
Ассемблер |
||
---|---|---|---|---|
1000 |
5000 |
|
CLR |
R0 |
1002 |
12701 |
|
MOV |
#120020,R1 |
1004 |
120020 |
|
|
|
1006 |
12120 |
А: |
MOV |
(R1)+,(R0)+ |
1010 |
22701 |
|
СМР |
#120046,R1 |
1012 |
120046 |
|
|
|
1014 |
2374 |
|
BGE |
A |
1016 |
12737 |
|
MOV |
#1,@#262 |
1020 |
1 |
|
|
|
1022 |
262 |
|
|
|
1024 |
137 |
|
JMP |
@#121110 |
1026 |
121110 |
|
|
|
Программа заменяет вектора прерываний в области системного стека на вектора, необходимые ФОКАЛу, и переходит в систему ФОКАЛ по адресу 121110. Эту программу нецелесообразно сбрасывать на магнитную ленту, так как она быстро создаётся в ОЗУ командами отладки.
Л.Н. Жариков