Сапёр


Главная / ЭКВМ / Программы для ЭКВМ / Игры
Главное меню

Сапёр - одна из знаменитых игровых программ, известная за рубежом как Mines или Minesweeper. Целью игры является отметка флажками всех мин на поле на основе информации о количестве мин на соседних клетках. Традиционное поле для игры уровня "новичок" представляет собой квадрат 8×8 или 9×9 клеток на котором расположено 10 мин. Соседними для любой клетки в середине поля считаются 8 клеток, соприкасающихся с данной сторонами и вершинами.

Единственным доступным средством обнаружения мин в традиционной игре является щуп или штык, а случайное прикосновение к установленной мине приводит к немедленному проигрышу.

Недавно в популярных ОС появились разновидности игры, в которых мины коварно замаскированы цветами и прочими на первый взгляд безобидными предметами.

Особенности игры для ЭКВМ

Одной из главных особенностей игры, отличающей её от зарубежных аналогов, является экипировка сапёра не только щупом, но и миноискателем. Впервые миноискатель был создан в СССР в 1936 (по другим данным - в 1934) военным инженером Б.Я. Кудымовым. В 1939 году был усовершенствован в Военной электротехнической академии им. С.М. Буденного (миноискатель "ИМВЭТА") военинженерами Н.М. Изюмовым, В.Н. Ивановым, Г.П. Тетериным, а также капитаном В.В. Свяцким и техником А.Ф. Макаровским ("Изобретатель и рационализатор", 10-2010). Во 2-й мировой войне 1939-45 миноискатель был основным средством разведки минных полей во всех воюющих армиях (БСЭ). Только человеконенавистническая империалистическая идеология заставляет создателей аналогов игры "Сапёр" изуверски игнорировать существование миноискателей в XXI веке.

Кроме миноискателя в распоряжение сапёра предоставляются также заряды разминирования, способные удалить мины с выбранной вертикали или горизонтали до границы поля, а также дополнительные средства разминирования и детектирования: пехота, допросы пленных и перебежчиков, а также расширение сознания.

Другой особенностью игры является возможность произвольно менять размер и топологию игрового поля в установленных пределах. Размер может варьироваться в пределах от 1×1 до 9×9 клеток, а поле принимать форму квадрата или тора. Последнее позволяет моделировать разминирование поверхности, к примеру, орбитальной станции. Перемещение по полю может быть либо свободным, либо допускаться только по тем клеткам, которые соседствуют с ранее разведанными.

Количество размещаемых мин определяется пользователем и может изменяться от 1 до максимально возможного количества, а также устанавливаться случайным образом.

После обозначения или подрыва всех мин сапёру требуется подать рапорт. Успешное окончание игры возможно только после получения рапорта командованием. Общее время игры может быть ограничено и заранее играющему не известно.

Успешное окончание игры - при соответствующих настройках - вызывает секундный импульс в линии канала 1 присоединённого внешнего устройства (ВУ), неуспешное, включая подрыв на мине - канала 2 ВУ.




Главное меню

Главное меню выводится на экран после запуска игры. Оно состоит из пунктов "Игра", "Настройка", "О программе" и "Выход". Назначение пунктов определяется их наименованием. Выбор производится клавишами "ВЫБОР" (стрелками), подтверждение - клавишей "ВВОД".

Сапёр - игровое поле 6*6

Пункт "Игра" позволяет инициализировать поле и приступить непосредственно к игре.

Сапёр - настройка

В меню "Настройка" устанавливаются параметры игры. Основные параметры - это размер и топология игрового поля, перемещение (свободное или по границе разведанной области), количество размещаемых мин, а также доступность и ресурсы дополнительных игровых возможностей (нет, случайное количество ресурса или соразмерное величине поля).

Сапёр - о программе

Пункт "О программе" выводит краткие сведения о назначении, номере версии и способах управления.

Пункт "Выход" используется для корректного завершения работы программы. Выход по команде "С/П" в программе заблокирован.




Разминирование

Сапёр - игровое поле 9*9

Перемещение по полю выполняется клавишами "ВЫБОР" (стрелками). Использование щупа - нажатием клавиши "ВВОД", при этом текущая клетка отрывается. Если она соседствует с одной или несколькими минами, то в ней отображается количество мин на соседних клетках с учётом топологии поля. Если на ней установлена мина - игра завершается. Если мин в соседних клетках нет, то открывается область поля.

Установка флагов выполняется клавишей "F". Для установки доступны флаги двух видов, но только тёмные служат в качестве отметки мины. Клавиша "K" позволяет очистить область вокруг текущей клетки при условии совпадения количества отмеченных мин с соседними. При очистке области возможно завершение игры в случае ошибочной установки флагов.

Сапёр - игровое поле 3*3

Для использования миноискателя следует нажать клавишу "P" - это может существенно помочь в ряде затруднительных случаев. Высота тона, излучаемого динамиком ЭКВМ или присоединённых внешних наушников, пропорциональна количеству мин, которые расположены в исследуемой клетке и соседних с ней. Открытия текущей клетки при этом не происходит. Для использования миноискателя и указаных далее специальных средств следует при настройке разрешить дополнительные возможности.

Сапёр - заряд разминирования

Заряд разминирования выбирается нажатием клавиши "Cx". Для его приведения в действие следует указать направление и нажать "ВВОД". Запуск заряда с неисследованной клетки может закончится завершением игры, если в ней находится мина. Запуск заряда без указания направления приводит к окончанию игры.

Сапёр - заряд разминирования отработал

В результате действия заряда будут удалены мины и открыты клетки по заданной вертикали или горизонтали от текущей клетки до границы квадратного поля. На торе - по всей окружности.

Сапёр - пехота

Эффективным средством разминирования является также пехота обычная и облачённая в бронекостюмы. Разминирование проводится от границы поля в указанном направлении. Для запуска следует нажать клавиши "ПП" или "БП", выбрать направление и нажать "ВВОД". Пехота в бронекостюмах более устойчива к действию мин, однако разминирование происходит медленнее вследствие ограниченной подвижности. Отдача приказа без указания направления свидетельствует о недостаточной ясности и чёткости поставленной задачи и приводит к немедленному отстранению.

Сапёр - расширение сознания

Одним из действенных способов определения расположения мин является расширение сознания. Оно производится нажатием клавиши "ИП", после чего пользователю предлагается выбрать одну из карт Зенера. При правильном выборе достоверное расположение мин выводится на экран в течение трёх секунд.

Сапёр - допрос

Менее действенным способом определения расположения является допрос пленных и перебежчиков. Начало допроса - нажатием клавиши "П", после чего на экран выводятся характеристики и шкала, управляемая клавишами "ВЫБОР" (стрелками).

Сапёр - успешный допрос

При наличии сведений на экран выводится приблизительное количество установленных мин и оставшееся время. Допрос можно завершить с выводом на экран расположения мин с определённой степенью достоверности. Его можно продолжить для получения большей достоверности, учитывая, что характеристика состояния уменьшается при каждом вызове.

Сапёр - отсутствие сведений при допросе

При отсутствии сведений допрос можно завершить без вывода расположения мин или продолжить, если это ещё возможно.

Сапёр - рапорт

После успешного разминирования и отметки оставшихся на поле мин следует подать рапорт командованию, что выполняется нажатием клавиши "B↑". Автоматического выхода в программе не предусмотрено, до момента подачи рапорта игровое время продолжает отсчитываться. При совпадении количества отмеченных и реально обнаруженных мин окончание считается успешным, что сопровождается кратковременным включением канала 1 подключенного ВУ.

При несовпадении количества мин рапорт принимается, но выносится выговор за проявление халатности при исполнении. Включения каналов ВУ при этом не происходит.

В программе имеются и другие экранные формы, не отражённые в кратком описании




Программа

Текст игровой программы "Сапёр" приведён ниже и снабжён комментариями.

Файл программы mines1_3.mkp на ЯМК - 9958 байт, КС 774198/216

Текст программы mines1_3.mkl для кросс-компилятора



.CHARSET 1251
; Файл mines
; Игра Сапёр
; версия 1.3 - 07.11.12

; Лицензия GPL 2+
; НПП "СЕМИКО", г. Новосибирск, 2012
; mail@semico.ru

; Команды экранных форм:
TAB	.EQU	96
LDX	.EQU	104
LDY	.EQU	105
TYPE	.EQU	101
ATYPE	.EQU	78
LDADR	.EQU	77
SQU	.EQU	89
FRAME	.EQU	91
DRAWP	.EQU	84
DRAWB	.EQU	86
TXTP	.EQU	83
TXTB	.EQU	85
PREXP	.EQU	92
PRFORM	.EQU	93
PRHEX	.EQU	94
MCALL	.EQU	102
RETUM	.EQU	103
LCALL	.EQU	112
RETUL	.EQU	113
JNEZ	.EQU	1
JM	.EQU	56
END	.EQU	255


FTIMER	.EQU	20
RAZMER	.EQU	21	; размер поля от 1 до 9 клеток
TOR	.EQU	22	; 0 - плоское поле, 1 - тор
KX	.EQU	23	; текущая координата по горизонтали слева-направо от 0, в клетках
KY	.EQU	24	; текущая координата по вертикали сверху-вниз от 0, в клетках
NMINES	.EQU	25	; количество устанавливаемых мин на поле, отрицательное значение - случайное
KXP	.EQU	26	; координата курсора по горизонтали слева-направо от 0, в пикселях
KYP	.EQU	27	; координата курсора по вертикали сверху-вниз от 0, в пикселях

SOSED	.EQU	29	; флаг разрешения перемещения по клеткам, соседствующими с открытыми
			; для тора - разрешить перемещение по границам
KXOLD	.EQU	30	; сохранённое значение KX
KYOLD	.EQU	31	; сохранённое значение KY
FZVUK	.EQU	32	; флаг разрешения звука - миноискателя, ресурс

FTROPA	.EQU	33	; флаг разрешения заряда, ресурс
NTROPA	.EQU	34	; направление тропы
FGUM	.EQU	35	; флаг разрешения пехоты, ресурс
FGUMPP	.EQU	36	; флаг разрешения пехоты в бронекостюмах ПП, ресурс
NGUM	.EQU	37	; номер шага пехоты
XGUM	.EQU	40	; 40-49 массив признаков наличия 

KONETC	.EQU	50	; признак начала и окончания игры

FPARAP	.EQU	51	; флаг разрешения расширения, ресурс
XPARAP	.EQU	52	; значение для расширения
FPLEN	.EQU	53	; флаг разрешения допроса, ресурс
XPLEN	.EQU	54	; коэффициент стойкости 0-10
YPLEN	.EQU	55	; коэффициент здоровья 0-10
ZPLEN	.EQU	56	; коэффициент звания 0-10

MTIME	.EQU	57	; оставшееся время, с
MTIMEPL	.EQU	58	; предполагаемое время, с
RMINES	.EQU	59	; реальное количество установленных мин
RMINESPL .EQU	60	; предполагаемое количество установленных мин
DOST	.EQU	61	; достоверность
DINT	.EQU	62	; сохранённая интенсивность
FTIME	.EQU	63	; флаг проверки времени
NTIME	.EQU	64	; начальное значение времени
FRAPORT .EQU	65	; флаг рапорта: 0 - OK, 1 - халатность при исполнении
VU	.EQU	66	; состояние порта ВУ, маска
FVU	.EQU	67	; флаг управления ВУ, 0 - нет
FDV	.EQU	68	; флаг доп. возможностей, 0 -нет
FDV1	.EQU	69	; флаг ДВ1: 0 - случайно, 1 - пропорционально
FMINES	.EQU	70	; флаг числа мин: 0 - случайно (NMINES<0), 1 - установлено в NMINES

; Константы
C10	.EQU	71	; =10
C11	.EQU	72	; =11
C12	.EQU	73	; =12
C15	.EQU	74	; =15
C16	.EQU	75	; =16
C20	.EQU	76	; =20
C31	.EQU	77	; =31
C32	.EQU	78	; =32
C63	.EQU	79	; =63
C64	.EQU	80	; =64
C100	.EQU	81	; =100
C128	.EQU	82	; =128
C192	.EQU	83	; =192
C255	.EQU	84	; =255
C300	.EQU	85	; =300


; Двоичные данные
STR0	.EQU	1000	; текстовая строка 
STR1	.EQU	1020	; 
STR2	.EQU	1040	;
STR3	.EQU	1060	;
STR4	.EQU	1080	;
STR5	.EQU	1100	;
STR6	.EQU	1120	;
STR7	.EQU	1140	;
STR8	.EQU	1160	;
POLE	.EQU	1200	; игровое поле (11*11 = 121 регистр с учётом каймы )
			; до 1330 кайма поля с запасом
POLE11	.EQU	1211	; поле+11 
POLE12	.EQU	1212	; поле+12

F10TB	.EQU	1340	; вывод сообщения в F10
F10TB1	.EQU	1341	; "\0"

; ====================================================== Начало программы
.ORG 0	
A0:	
	P GSB INITPROG	; инициализация структур

A1:	P RM C64
A2:	PP M 9208	; Отрисовать меню
	P GSB PROV	; Проверка результата выполнения формы
	P X=0 A1	; RX!=0 перерисовать форму заново

A3:	PP RM 9029
	MA		; В RA - код клавиши
	K NOT
	P X!=0 A4
	P GSB KLAVA	; Независимая обработка клавиатуры
	P X=0 A1	; !=0 - клавиша уже обработана
	RMA
	P GOTO A2

A4:	P RM FTIMER
	P X!=0 A3	; не сработал - продолжить опрос клавиатуры
	; сработал таймер

	P GSB OTIMER	
	P X=0 A3
	; время игры кончилось
	P RM FTIME
	P X!=0 A3	
	; при этом время учитывается
	P RM KONETC
	P X=0 A3
	; а игра не завершена
	1
	P M KONETC

	3 ; включить канал 2 ВУ
	P M VU

	19		; F19E0 - время истекло
	PP M 9202
	CX
	PP M 9203
	P GOTO A1

;============================================= п/п Проверка результата выполнения формы
; при выходе 0 - не перерисовывать, 1 - перерисовать заново 

PROV:	PP RM 9209	; Результат выполнения программы формы
	P X=0 PROV1
			; RX=0 - не перерисовывать форму
	RTN		; OK
PROV1:	MB
	1 - 
	P X=0 PROV2
	; 1 - Требуется обработка при выходе из формы
	P GOTO OBRF
		
PROV2:	RMB
	8 - 		; код 7 ввод чисел - в программе не используется
	P X>=0 PROV3
	8		; >8 - неизвестная ошибка 8
	MB
PROV3:	; Определить ошибку интерфейса 2-6, вывести f252-0 и уйти в бесконечный цикл
	; (При работе отлаженной программы эта ситуация возникнуть не может)
	RMB
	.NUM TPROV
	+
	K PRGM
	.NUM TPROVE2 
	+
	PP M 9042	; Здесь начало строки описания ошибки
	.NUM STR1
	MC
PROV11:
	PP RM 9044
	KMC
	P X!=0 PROVE
	RMC 1 + MC
	P GOTO PROV11

PROVE:	PP RM 9202
	MB	; текущая форма с ошибкой
	PP RM 9203
	MC	; активный элемент
	252	; форма 252
	PP M 9202
	0	; элемент 0
	PP M 9203
	P RM C64
	PP M 9208	; вывести форму ошибки интерфейса
	; Разрешить С/П
PROVEE:	GOTO PROVEE	; и зациклить программу

	.BASE
TPROVE2:	.TEXT "Нет формы\0"
TPROVE3:	.TEXT "Нет элемента в форме\0"
TPROVE4:	.TEXT "Нет команды\0"
TPROVE5:	.TEXT "Нет шрифта\0"
TPROVE6:	.TEXT "Нет символа в шрифте\0"
TPROVE7:	.TEXT "Ввод\0"
TPROVE8:	.TEXT "Неизвестная ошибка\0"

TPROV:	.DB	0, 0	; для результатов 0 и 1
	.DBB TPROVE2, TPROVE3, TPROVE4, TPROVE5, 
	.DBB TPROVE6, TPROVE7, TPROVE8	; начальные адреса сообщений 


;==================================================== Обработка данных формы
OBRF:	
; RA,

	.NUM TMOBRF
	PP M 9042	; таблица обработчиков команд
	
	PP RM 9208
	PP M 9213	; адрес по индексу
	P X>=0 OBRFE	; нет обработчика этой команды
	PP M 9042

	PP RM 9208	; код обрабатываемой команды
	P RM C32 -		; команду "выход" обработать отдельно 
	P X!=0 OBRF1

	PP RM 9202
	PP M 9211	; считать адрес таблицы форм
	P X!=0 OBRFE	; нет обработки в этой форме

	PP M 9042
	PP RM 9203
	PP M 9211	; считать адрес подпрограммы для нужного элемента
	MA
	P X!=0 OBRFE	; нет обработки этого события

	K GOTO A		; перейти к подпрограмме RA

OBRF1:	; обработка команды "выход" не содержит различий по номеру элемента
	; используется только номер формы

	PP RM 9202
	PP M 9211	; считать адрес таблицы форм
	P X!=0 OBRFE	; нет обработки выхода в этой форме

	MA
	K GOTO A		; перейти к подпрограмме RA
	
OBRFE:	CX
	RTN	; при RX=0

TMOBRF: ; таблица таблиц обработчиков команд
	.DB 33
	.DA TOBRVVOD	; обработка команды "ввод"
	.DB 32
	.DA TOBRVYHOD	; обработка команды "выход"
	.DB 36
	.DA TOBRVYBU	; обработка команды "вверх"
	.DB 37
	.DA TOBRVYBD	; обработка команды "вниз"
	.DB 34
	.DA TOBRVYBR	; обработка команды "вправо"
	.DB 35
	.DA TOBRVYBL	; обработка команды "влево"
	.DB END

TOBRVVOD:
 	.DA TOBRF0,TOBRFX,TOBRFX,TOBRFX,TOBRFX
	.DA TOBRFX,TOBRFX,TOBRFX,TOBRFX,TOBRFX
	.DA TOBRF10,TOBRF11,TOBRF12,TOBRF13,TOBRF14
	.DA TOBRF15,TOBRF16,TOBRF17,0,0
	.DA 0,0,0,0,TOBRF24



TOBRF0:	.DA OF0E0,0,0,OF0E3			;F0
TOBRFX:	.DA OFXE0			;F1...9
TOBRF10: .DA OF10E0			;F10
TOBRF11: .DA OF11E0			;F11
TOBRF12: .DA OF12E0			;F12
TOBRF13: .DA OF13E0,OF13E0,OF13E0,OF13E0,OF13E0	;F13
TOBRF14: .DA OF14E0,OF14E0,OF14E0,OF14E0,OF14E0	;F14
TOBRF15: .DA OF15E0,OF15E1			;F15
TOBRF16: .DA OF15E0,OF16E1			;F16
TOBRF17: .DA OF16E1			;F17E0=F16E1

TOBRF24: .DA OF24E0,OF24E1,OF24E2,OF24E3,OF24E4	;F24

;----------------------------------------------------- Команда ВВОД

;----------------------------------------------------- F0-E0
OF0E0:

	P RM KONETC
	P X!=0 OF0E0AAA	; продолжить

	; запуск новой игры
	CX
	P M KX
	P M KY
	P M KONETC	; признак окончания игры

	P RM C255
	P M VU		; состояние ВУ - откл

	; инициализировать 
	P RM FDV
	P X!=0 OF0E0D
	; есть доп возможности
	1
	P M FTIME
	P M FVU
	; заполнить поля пропорционально размеру
	P RM RAZMER
	2 *
	P M FTROPA
	P M FGUM
	P M FGUMPP
	P RM RAZMER 
	*
	P M FPLEN
	P M FPARAP
	P M FZVUK
	P RM C10 *
	P M MTIME
	P M NTIME

	P RM FDV1

	P X=0 OF0E0F
	; случайно
	P RM FTROPA
	GSB OF0E0S1
	P M FTROPA	

	P RM FGUM
	GSB OF0E0S1
	P M FGUM	

	P RM FGUMPP
	GSB OF0E0S1
	P M FGUMPP	

	P RM FPLEN
	GSB OF0E0S1
	P M FPLEN	

	P RM FPARAP
	GSB OF0E0S1
	P M FPARAP	

	P RM FZVUK
	GSB OF0E0S1
	P M FZVUK

	P RM MTIME
	GSB OF0E0S1
	P M MTIME
	P M NTIME	
	
	P GOTO OF0E0F

OF0E0S1: ; подпрограмма
	2 * 
	K RAN *
	K INT
	RTN

OF0E0D: ; нет доп. возможностей
	CX
	P M FTIME
	P M FVU
	P M FZVUK
	P M FTROPA
	P M FGUM
	P M FGUMPP
	P M FPARAP
	P M FPLEN
	1
	P M MTIME
	P M NTIME

OF0E0F:
	P RM RAZMER
	.NUM TPOLEX
	+
	K PRGM	; X начало поля
	P M KXP
	P RM RAZMER
	.NUM TPOLEY
	+
	K PRGM	; Y начало поля
	P M KYP

	P GSB RASST
OF0E0AAA:
	P GSB RISZAKR

	; форма 0 элемент 0
	P RM RAZMER
	P X>=0 OF0E0B	; если размер <0
	P X!=0 OF0E0B	; если размер ==0
	P RM C10 -
	P X<0 OF0E0C	; если размер больше 9
OF0E0AA:	; для входа без лишних проверок
	P RM RAZMER
OF0E0A:
	PP M 9202
	CX
	PP M 9203	
	1
	RTN

OF0E0B: ; пока так для 0 размера
	1
	P M RAZMER
	P GOTO OF0E0A

OF0E0C: 9
	P M RAZMER
	P GOTO OF0E0A
;----------------------------------------------------- F0E3
OF0E3:	; выход
	P RM C255
	PP M 9092	; отключение ВУ
	CX
	PP M 9090	; отключение параллельного порта
	PP M 9048	; отмена автоматического запуска
	PP M 9130	; запрет прерываний
	1
	PP M 9148	; сброс всех прерываний
	CX
	ENT
	ENT
	ENT		; очистка стека
	R/S
	P GOTO 0	; переход к адресу 0

;----------------------------------------------------- F1...9-E0
OFXE0:	; форма 1...9 элемент 0
	P RM KONETC
	P X=0 OFXE0C
	; снять невидимость с текущей клетки и проверить содержимое
	.NUM POLE12	; POLE+12
	P RM KY 11 *
	+
	P RM KX +
	MA
	KRMA	; содержимое клетки
	MB
	P RM C16 K AND	; мина?
	P X=0 OFXE0B
	; не мина - открыть и обнулить флаги "?" и "мина"
	RMB
	P RM C31 K AND
	KMA	; записать обратно
	
	P X=0 OFXE0A
	; открыто пустое поле
	P GSB OTKR	; открыть все смежные
	P GSB RISZAKR	; перерисовать всё поле
	1
	RTN

OFXE0A:	P GSB RISZAKRS	; перерисовать текущую строку
	1
	RTN

OFXE0B:	; мина
	P GSB RISOTKR
	P RM C64
	PP M 9208	; перерисовать

	3 ; включить канал 2 ВУ
	P M VU

	P RM C300 PP M 9051
OFXE0B1: PP RM 9051	; задержка на 3 с
	P X=0 OFXE0B1	

	1
	P M KONETC

OFXE0C:	; конец
	P RM C20
	PP M 9202
	CX
	PP M 9203
	1
	RTN

;----------------------------------------------- F10E0
OF10E0:
	; обработка заряда 
	P RM FTROPA
	P X!=0 OF0E0AA	; перейти к F1...F9 при нулевом ресурсе
	1 -
	P M FTROPA	; уменьшить ресурс

	P GSB TROPA	; убрать мины по заданной траектории
	P X=0 OF10E0D	; перейти, если ошибка
	; нормальное выполнение
	P RM TOR
	P X!=0 OF10E0B
	; тор - обработать и в обратную сторону от курсора
	P RM NTROPA
	P X!=0 OF10E0B
	2 +
	P M NTROPA	; 1->3... 4->6
	5 -
	P X>=0 OF10E0A
	1 +
	P M NTROPA	; 3->5->1, 4->6->2
OF10E0A:
	P GSB TROPA
OF10E0B:
	P GSB OF0E0AA	; установить номер формы 1...9
	P RM C64
	PP M 9208	; перерисовать её
	P RM C100 PP M 9051	; задержка на 1 сек через таймер 1
	; без опроса клавиатуры
	; пока задержка - пересчитать поле заново
	P GSB PERESCHET
	P GSB OTKR	; открыть соседние с пустыми клетки
	P GSB RISZAKR	; и перерисовать 
OF10E0C: ; если осталось время - подождать
	PP RM 9051
	P X=0 OF10E0C

	; данные обновлены
	; после задержки - выйти в форму 1...9 с перерисовкой
	1 
	RTN

OF10E0D:
	; Ошибка при использовании - F21E0
	3 ; включить канал 2 ВУ
	P M VU

	1 P M KONETC

	21
	PP M 9202
	CX
	PP M 9203
	1
	RTN
	
;----------------------------------------------- F11E0
OF11E0:
	; обработка пехоты
	P RM FGUM
	P X!=0 OF0E0AA	; перейти к F1...F9 при нулевом ресурсе
	1 -
	P M FGUM	; уменьшить ресурс

	CX
	P M NGUM

	P RM RAZMER
	M0
	.NUMD XGUM
	M4
	1
OF11E0A:	; цикл заполнения признаков
	KM4
	PFL0 OF11E0A

	P GSB OF0E0AA	; установить номер формы 1...9

OF11E0B:
	P GSB GUMAN	; движение
	P X=0 OF11E0E	; RX!=0 - ошибка
	P RM C64
	PP M 9208	; перерисовать форму
	; без опроса клавиатуры
	P RM NGUM
	1 +
	P M NGUM
	P RM RAZMER
	-
	P X<0 OF11E0C
	P GOTO OF11E0B

OF11E0C:
	P RM C100 PP M 9051	; задержка на 1 сек через таймер 1

	P GSB PERESCHET	; пересчитать значения
	P GSB OTKR	; открыть соседние с пустыми клетки
	P GSB RISZAKR	; и перерисовать поле

OF11E0D:
	PP RM 9051
	P X=0 OF11E0D

	; данные обновлены
	; выйти в форму 1...9 с перерисовкой
	1 
	RTN

OF11E0E:
	3 ; включить канал 2 ВУ
	P M VU

	1 P M KONETC

	; Ошибка - F22E0
	22
	PP M 9202
	CX
	PP M 9203
	1
	RTN

;----------------------------------------------- F12E0
OF12E0:
	; обработка пехоты в бронекостюмах
	P RM FGUMPP
	P X!=0 OF0E0AA	; перейти к F1...F9 при нулевом ресурсе
	1 -
	P M FGUMPP	; уменьшить ресурс

	CX
	P M NGUM

	P RM RAZMER
	M0
	.NUMD XGUM
	M4
	1
OF12E0A:	; цикл заполнения признаков
	KM4
	PFL0 OF12E0A

	P GSB OF0E0AA	; установить номер формы 1...9

OF12E0B:
	P GSB GUMANPP	; движение
	P X=0 OF12E0F	; RX!=0 - ошибка
	P RM C64
	PP M 9208	; перерисовать форму
	; без опроса клавиатуры
	P RM NGUM
	1 +
	P M NGUM
	P RM RAZMER
	-
	P X<0 OF12E0D

	; задержка шага для бронекостюма ПП, таймер 1
	P RM C100 PP M 9051
OF12E0C: 
	PP RM 9051
	P X=0 OF12E0C
	P GOTO OF12E0B

OF12E0D:
	P RM C100 PP M 9051	; задержка на 1 сек через таймер 1

	P GSB PERESCHET	; пересчитать значения
	P GSB OTKR	; открыть соседние с пустыми клетки
	P GSB RISZAKR	; и перерисовать поле

OF12E0E:
	PP RM 9051
	P X=0 OF12E0E

	; данные обновлены
	; выйти в форму 1...9 с перерисовкой
	1 
	RTN

OF12E0F:
	3 ; включить канал 2 ВУ
	P M VU

	1 P M KONETC

	; Ошибка - F22E0
	22
	PP M 9202
	CX
	PP M 9203
	1
	RTN

;----------------------------------------------- F13E0
OF13E0:
	; обработка расширения
	; ресурс уменьшается при вызове
	PP RM 9203	; выбранный элемент
	P RM XPARAP
	-
	P X=0 OF0E0AA	; перейти в текущее поле

	; успешное расширение
	P GSB OF0E0AA
	P GSB RISOTKR

	P RM C64 
	PP M 9208	; перерисовать

	P RM C300 PP M 9051	; задержка 3 сек
OF13E0A:	
	PP RM 9051
	P X=0 OF13E0A

	P GSB RISZAKR
	1
	RTN

;----------------------------------------------- F14E0
OF14E0:
	; обработка допроса
	; ресурс уменьшается при вызове
	PP RM 9203	; выбранный элемент
	P M DINT	; сохранить
	K RAN +		; случайная составляющая
	2 *
	MA
	P RM YPLEN	; здоровье
	-
	P X<0 OF14E0B	
	; здоровья хватает
	RMA
	P RM XPLEN	; стойкость
	-
	P X>=0 OF14E0A
	; интенсивность выше стойкости


	P RM ZPLEN	; звание
	RMA
	5 -
	K ABS		; от 0 до 5
	-
	K INT	
	P X<0 OF14E0A0
	CX
OF14E0A0:
	P M DOST	; от 0 до 10
	P RM C10 
	<->
	-	; от 0 до 10, где 0 - достоверно
	K RAN
	*
	5 /
	1 +
	MB

	P RM MTIME
	RMB *
	K INT
	P M MTIMEPL	; в секундах

	P RM RMINES
	RMB *
	K INT
	P M RMINESPL

	15	; F15E0	- есть информация
	P GOTO OF0E0A
OF14E0A: 
	16	; F16E0 - нет информации
	P GOTO OF0E0A
OF14E0B: 
	17	; F17E0 - продолжение невозможно
	P GOTO OF0E0A

;----------------------------------------------- F15E0
OF15E0:	; продолжить допрос
	P RM YPLEN
	1 -		; уменьшить здоровье
	P M YPLEN
	P X<0 OF15E0A
	CX
	P M YPLEN
OF15E0A:
	14
	PP M 9202	; F14E0...4
	P RM DINT
	PP M 9203
	1
	RTN
;----------------------------------------------- F15E1
OF15E1:	; завершить допрос - есть информация

	; вывести расположение

	P GSB OF0E0AA
	P GSB RISDOPR

	P RM C64 
	PP M 9208	; перерисовать

	P RM C300 PP M 9051	; задержка 3 сек
OF15E1A:	
	PP RM 9051
	P X=0 OF15E1A

	P GSB RISZAKR
	1
	RTN

;----------------------------------------------- F16E1
OF16E1:	; завершить допрос - нет информации

	P GOTO OF0E0AA

;----------------------------------------------- F24E0
OF24E0:	; настройка - размер поля
	P RM RAZMER
	1 +
	P M RAZMER
	P RM C10 -
	P X=0 OF24E0A
	1
	P M RAZMER
OF24E0A:
	1
	RTN

;----------------------------------------------- F24E1
OF24E1:	; настройка - топология
	P RM TOR
	P X=0 OF24E1A
	1
	P GOTO OF24E1B
OF24E1A: CX
OF24E1B:
	P M TOR
	1
	RTN

;----------------------------------------------- F24E2
OF24E2:	; настройка - перемещение
	P RM SOSED
	P X=0 OF24E2A
	1
	P GOTO OF24E2B
OF24E2A: CX
OF24E2B:
	P M SOSED
	1
	RTN

;----------------------------------------------- F24E3
OF24E3:	; настройка - мины
	P RM FMINES
	P X=0 OF24E3A
	; было случайно
	1
	P M FMINES	; не случайно
	P M NMINES	; 1 мина
	P GOTO OF24E3B

OF24E3A: ; не случайно
	P RM NMINES
	1 +
	P M NMINES
	P RM RAZMER
	F X^2
	1 +
	-
	P X>=0 OF24E3B
	; допустимое для поля количество мин превышено
	CX
	P M FMINES
	1 +/-
	P M NMINES 	

OF24E3B:
	1
	RTN

;----------------------------------------------- F24E4
OF24E4:	; настройка - доп возможности
	P RM FDV
	P X=0 OF24E4A
	; нет
	1
	P M FDV
	CX
	P M FDV1	;
	P GOTO OF24E4C
OF24E4A: 
	P RM FDV1
	P X=0 OF24E4B
	1
	P M FDV1
	P GOTO OF24E4C
OF24E4B:
	CX
	P M FDV
	P M FDV1
OF24E4C:
	1
	RTN


;--------------------------------------------------------- Команда ВЫХОД
TOBRVYHOD:
; содержит адреса п/п обработчиков для форм, независимо от номера элемента 

 	.DA 0,0,0,0,0
	.DA 0,0,0,0,0
	.DA OBRVYH10,OBRVYH10,OBRVYH10,OBRVYH10,OBRVYH10
	.DA OBRVYH10,OBRVYH10,OBRVYH10,0,0
	.DA 0,0,0,0,OBRVYH24

;----------------------------------------------------- F10...F17 - выход
OBRVYH10:
	P GOTO OF0E0AA	; перейти к текущему полю

;----------------------------------------------------- F24 - выход
OBRVYH24:
	; сохранить настройки в энергонезависимой памяти
	9047 M9
	1 KM9
	P RM RAZMER
	P M RAZMER
	1 KM9
	P RM TOR
	P M TOR
	1 KM9
	P RM FMINES
	P M FMINES
	1 KM9
	P RM NMINES
	P M NMINES
	1 KM9
	P RM FDV
	P M FDV
	1 KM9
	P RM FDV1
	P M FDV1

	CX
	PP M 9202
	1
	PP M 9203
	P M KONETC	; завершить текущую игру

	1
	RTN

;--------------------------------------------------------- Команда ВЫБОР ВНИЗ
TOBRVYBD:
 	.DA 0,TOBRVYBDX,TOBRVYBDX,TOBRVYBDX,TOBRVYBDX
	.DA TOBRVYBDX,TOBRVYBDX,TOBRVYBDX,TOBRVYBDX,TOBRVYBDX
 	.DA TOBRVYBD10,TOBRVYBD10,TOBRVYBD10,0,0,

TOBRVYBDX: 
	.DA OBRVYBDXE0				; F1...F9
TOBRVYBD10: 					
	.DA OBRVYBD10E0				; F10,F11,F12
;------------------------------------------------------ F1...9 выбор вниз
OBRVYBDXE0:
	P RM KX
	P M KXOLD
	P RM KY
	P M KYOLD	; сохранить
	1 +
	P M KY
	P RM RAZMER
	-
	P X>=0 OBRVYBDXE0B
	; выход за границу поля
	P RM TOR
	P X=0 OBRVYBDXE0A
	; не тор - вернуть к границе
	P RM RAZMER
	1 -
	P M KY
	P GOTO OBRVYBDXE0B
OBRVYBDXE0A:
	; тор - перейти к верхней строке
	CX
	P M KY
OBRVYBDXE0B:
	; проверка разрешения перемещения
	P GSB PRSOSED
	P X=0 OBRVYBDXE0C
	RTN	; RX=0 - без перерисовки
OBRVYBDXE0C:
	; координаты
	P RM RAZMER
	.NUM TPOLEK
	+
	K PRGM	; размер клетки
	P RM KY *
	MA	; 
	P RM RAZMER
	.NUM TPOLEY
	+
	K PRGM	; начало поля
	RMA +	; координата курсора на экране
	P M KYP

	1
	RTN

TPOLEK:	.DB 12,12,12,12,12,12,9,9,7,7	; размер клетки
TPOLEX:	.DB 0,25,19,13,7,1,4,0,4,0	; координаты начала поля (x,y)
TPOLEY:	.DB 0,25,19,13,7,1,4,0,4,0

;-------------------------------------------------------- F10,F11,F12 - вниз
OBRVYBD10E0: 
	3
	P M NTROPA	; направление
	199
	PP M F10TB	; стрелка вниз

	1
	RTN

;--------------------------------------------------------- Команда ВЫБОР ВПРАВО
TOBRVYBR:
 	.DA 0,TOBRVYBRX,TOBRVYBRX,TOBRVYBRX,TOBRVYBRX
	.DA TOBRVYBRX,TOBRVYBRX,TOBRVYBRX,TOBRVYBRX,TOBRVYBRX
 	.DA TOBRVYBR10,TOBRVYBR10,TOBRVYBR10,0,0

TOBRVYBRX: 
	.DA OBRVYBRXE0				; F1...9
TOBRVYBR10: 
	.DA OBRVYBR10E0				; F10,F11,F12

;------------------------------------------------------ F1...9 выбор вправо
OBRVYBRXE0:
	P RM KY
	P M KYOLD	; сохранить
	P RM KX
	P M KXOLD
	1 +
	P M KX
	P RM RAZMER
	-
	P X>=0 OBRVYBRXE0B
	; выход за границу поля
	P RM TOR
	P X=0 OBRVYBRXE0A
	; не тор - вернуть к границе
	P RM RAZMER
	1 -
	P M KX
	P GOTO OBRVYBRXE0B
OBRVYBRXE0A:
	; тор - перейти к левому стлобцу
	CX
	P M KX
OBRVYBRXE0B:
	; проверка разрешения перемещения
	P GSB PRSOSED
	P X=0 OBRVYBRXE0C
	RTN	; RX=0 - без перерисовки
OBRVYBRXE0C:
	; координаты
	P RM RAZMER
	.NUM TPOLEK
	+
	K PRGM	; размер клетки
	P RM KX *
	MA	; 
	P RM RAZMER
	.NUM TPOLEX
	+
	K PRGM	; начало поля
	RMA +	; координата курсора на экране
	P M KXP

	1
	RTN

;-------------------------------------------------------- F10,F11,F12 - вправо
OBRVYBR10E0: 
	2
	P M NTROPA		; направление
	197
	PP M F10TB	; стрелка вправо
	1
	RTN

;--------------------------------------------------------- Команда ВЫБОР ВВЕРХ
TOBRVYBU:
 	.DA 0,TOBRVYBUX,TOBRVYBUX,TOBRVYBUX,TOBRVYBUX
	.DA TOBRVYBUX,TOBRVYBUX,TOBRVYBUX,TOBRVYBUX,TOBRVYBUX
 	.DA TOBRVYBU10,TOBRVYBU10,TOBRVYBU10,0,0,


TOBRVYBUX: 
	.DA OBRVYBUXE0				; F1...9
TOBRVYBU10: 
	.DA OBRVYBU10E0				; F10,F11,F12
;------------------------------------------------------ F1...9 - выбор вверх
OBRVYBUXE0:
	P RM KX
	P M KXOLD
	P RM KY
	P M KYOLD	; сохранить
	1 -
	P M KY
	P X<0 OBRVYBDXE0B
	; выход за границу поля
	P RM TOR
	P X=0 OBRVYBUXE0A
	; не тор - обнулить
	CX
	P M KY
	P GOTO OBRVYBDXE0B
OBRVYBUXE0A:
	; тор - перейти к верхней строке
	P RM RAZMER
	1 -
	P M KY
	P GOTO OBRVYBDXE0B
	; продолжение п/п аналогично выбору вниз

;-------------------------------------------------------- F10,F11,F12 - вверх
OBRVYBU10E0: 
	1
	P M NTROPA		; направление
	198
	PP M F10TB	; стрелка вверх
	1
	RTN
;--------------------------------------------------------- Команда ВЫБОР ВЛЕВО
TOBRVYBL:
 	.DA 0,TOBRVYBLX,TOBRVYBLX,TOBRVYBLX,TOBRVYBLX
	.DA TOBRVYBLX,TOBRVYBLX,TOBRVYBLX,TOBRVYBLX,TOBRVYBLX
 	.DA TOBRVYBL10,TOBRVYBL10,TOBRVYBL10,0,0,

TOBRVYBLX: 
	.DA OBRVYBLXE0				; F1...9
TOBRVYBL10: 
	.DA OBRVYBL10E0				; F10...12

;------------------------------------------------------ F1...9 - выбор влево
OBRVYBLXE0:

	P RM KY
	P M KYOLD	; сохранить
	P RM KX
	P M KXOLD
	1 -
	P M KX
	P X<0 OBRVYBRXE0B
	; выход за границу поля
	P RM TOR
	P X=0 OBRVYBLXE0A
	; не тор - обнулить
	CX
	P M KX
	P GOTO OBRVYBRXE0B
OBRVYBLXE0A:
	; тор - перейти к правому столбцу
	P RM RAZMER
	1 -	
	P M KX
	P GOTO OBRVYBRXE0B
	; продолжение п/п аналогично выбору вправо

;-------------------------------------------------------- F10...12 - влево
OBRVYBL10E0: 
	4
	P M NTROPA		; направление
	196
	PP M F10TB	; стрелка влево
	1
	RTN

;==================================================== KLAVA

; Обработка нажатия на клавишу в зависимости от текущей формы
; RA - код клавиши
; RB
KLAVA:	.NUM TKLAVA
	PP M 9042
	PP RM 9202	; номер формы
	PP M 9213
	P X>=0 KLAVAE
	MB

	K GOTO B		; перейти к подпрограмме обработки

KLAVAE:	CX
	RTN		; при RX=0

TKLAVA:	
	.DB 1		; номер формы	
	.DA OKLFX	 ; обработчик клавиш 
	.DB 2	
	.DA OKLFX 
	.DB 3	
	.DA OKLFX 
	.DB 4	
	.DA OKLFX 
	.DB 5
	.DA OKLFX
	.DB 6
	.DA OKLFX 
	.DB 7
	.DA OKLFX
	.DB 8	
	.DA OKLFX 
	.DB 9	
	.DA OKLFX 
	.DB END

;-------------------------------- F1...9
OKLFX:	.NUM TOKLFX
	PP M 9042
	RMA
	PP M 9213
	P X>=0 OKLFXE	; выход 0
	MB
	K GOTO B	; перейти к подпрограмме обработки клавиши
OKLFXE:
	CX
	RTN

TOKLFX:	.DB 20
	.DA OKLF_F	; [F]	флаги 

	.DB 21
	.DA OKLF_K	; [K]	очистка вокруг клетки

	.DB 22
	.DA OKLF_P	; [P]	миноискатель

	.DB 13
	.DA OKLF_CX	; [Cx]	ЗРП-2


	.DB 27
	.DA OKLF_IP	; [ИП]	расширение

	.DB 28
	.DA OKLF_L	; [П]	допрос

	.DB 29
	.DA OKLF_BP	; [БП]	пехота в бронекостюмах ПП

	.DB 30
	.DA OKLF_PP	; [ПП]	пехота

	.DB 14
	.DA OKLF_B	; [B^]	рапорт

	.DB END

;------------------------
OKLF_F:
	; обработка [F] - флаги
	.NUM POLE12	; POLE+12
	P RM KY 
	P RM C11 *
	+
	P RM KX +
	MA
	KRMA	; содержимое клетки
	MB
	P RM C32 K AND	; открыто?
	P X!=0 OKLFXE	; выход с RX=0
	; не открыто - изменить флаги "?" и "мина"

	RMB
	P RM C192 K AND
	P X=0 OKLF_F2
	; нет флагов
	RMB
	P RM C64 K OR	; установить "мина"
OKLF_F1:
	KMA
	P GSB RISZAKRS
	1 
	RTN

OKLF_F2: RMB
	P RM C128 K AND
	P X=0 OKLF_F3
	; установлен флаг 64 "мина"
	RMB
	P RM C63 K AND	; снять флаги
	P RM C128 K OR	; установить "?"
	P GOTO OKLF_F1	

OKLF_F3:
	; установлен флаг "?"
	RMB
	P RM C63 K AND	; снять все флаги
	P GOTO OKLF_F1	

;---------------------------------------
OKLF_K:	; обработка [K] - автоматическое открытие
	.NUM POLE12	; POLE+12
	P RM KY 11 *
	+
	P RM KX +
	MA
	KRMA	; содержимое клетки
	MB
	P RM C32 K AND	; открыто?
	P X=0 OKLFXE	; нет - выход с RX=0

	; открыто - посчитать флаги "мина" вокруг
	CX M4
	RMA P RM C12 - MD
	KRMD P RM C64 K AND 
	P X!=0 OKLF_K1
	KRM4
OKLF_K1:
	RMA P RM C11 - MD
	KRMD P RM C64 K AND 
	P X!=0 OKLF_K2
	KRM4
OKLF_K2:
	RMA P RM C10 - MD
	KRMD P RM C64 K AND 
	P X!=0 OKLF_K3
	KRM4
OKLF_K3:
	RMA 1 - MD
	KRMD P RM C64 K AND 
	P X!=0 OKLF_K4
	KRM4	
OKLF_K4:
	RMA 1 + MD
	KRMD P RM C64 K AND 
	P X!=0 OKLF_K5
	KRM4
OKLF_K5:
	RMA P RM C10 + MD
	KRMD P RM C64 K AND 
	P X!=0 OKLF_K6
	KRM4
OKLF_K6:
	RMA P RM C11 + MD
	KRMD P RM C64 K AND 
	P X!=0 OKLF_K7
	KRM4
OKLF_K7:
	RMA P RM C12 + MD
	KRMD P RM C64 K AND 
	P X!=0 OKLF_K8
	KRM4
OKLF_K8:
	RM4 RMB -
	P X=0 OKLFXE	; количество не совпадает - выйти RX=0

	; количество совпадает - окрыть все соседние, кроме клеток c флагами мин

	RMA P RM C12 - MD
	KRMD P RM C64 K AND
	P X=0 OKLF_K9
	KRMD P RM C31 K AND KMD
	P RM C16 K AND	; проверка на мину
	P X!=0 OKLF_K9	; мины нет
	P GOTO OKLF_K17
OKLF_K9:
	RMA P RM C11 - MD
	KRMD P RM C64 K AND
	P X=0 OKLF_K10
	KRMD P RM C31 K AND KMD
	P RM C16 K AND	
	P X!=0 OKLF_K10	
	P GOTO OKLF_K17
OKLF_K10:
	RMA P RM C10 - MD
	KRMD P RM C64 K AND
	P X=0 OKLF_K11
	KRMD P RM C31 K AND KMD
	P RM C16 K AND
	P X!=0 OKLF_K11
	P GOTO OKLF_K17
OKLF_K11:
	RMA 1 - MD
	KRMD P RM C64 K AND
	P X=0 OKLF_K12
	KRMD P RM C31 K AND KMD
	P RM C16 K AND
	P X!=0 OKLF_K12
	P GOTO OKLF_K17
OKLF_K12:
	RMA 1 + MD
	KRMD P RM C64 K AND
	P X=0 OKLF_K13
	KRMD P RM C31 K AND KMD
	P RM C16 K AND
	P X!=0 OKLF_K13
	P GOTO OKLF_K17
OKLF_K13:
	RMA P RM C10 + MD
	KRMD P RM C64 K AND
	P X=0 OKLF_K14
	KRMD P RM C31 K AND KMD
	P RM C16 K AND
	P X!=0 OKLF_K14
	P GOTO OKLF_K17
OKLF_K14:
	RMA P RM C11 + MD
	KRMD P RM C64 K AND
	P X=0 OKLF_K15
	KRMD P RM C31 K AND KMD
	P RM C16 K AND
	P X!=0 OKLF_K15
	P GOTO OKLF_K17
OKLF_K15:
	RMA P RM C12 + MD
	KRMD P RM C64 K AND
	P X=0 OKLF_K16
	KRMD P RM C31 K AND KMD
	P RM C16 K AND
	P X!=0 OKLF_K16
	P GOTO OKLF_K17
OKLF_K16:	
	P GSB OTKR	; открыть пустые области
	P GSB RISZAKR	; перерисовать поле
	1
	RTN

OKLF_K17:
	; открылась мина
	3 ; включить канал 2 ВУ
	P M VU

	P GSB RISOTKR
	1
	P M KONETC
	RTN


;---------------------------------------
OKLF_P:	; обработка [P] - миноискатель
	P RM FZVUK
	P X!=0 OKLFXE	; нет миноискателя - выход RX=0
	1 -
	P M FZVUK	; уменьшить ресурс

	.NUM POLE12	; POLE+12
	P RM KY P RM C11 *
	+
	P RM KX +
	MA
	KRMA	; содержимое клетки
	MB	; в RB

	; миноискатель включен
	RMB P RM C16 K AND
	P X!=0 OKLF_P1
	; мина
	659 ENT 
	P GOTO OKLF_P2
OKLF_P1:
	.NUM TOKLF_P
	PP M 9042
	RMB 15 K AND
	PP M 9211
OKLF_P2:
	50
	PP M 9052
	CX
	RTN

TOKLF_P:
	.DA 262,294,330,349,392,440,494,523,587,659	; с до 


;---------------------------------------
OKLF_CX:	; обработка [Cx] - заряд разминирования
	P RM FTROPA
	P X!=0 OKLF_CXE0

	CX
	P M NTROPA	; обнулить направление
	PP M F10TB	; обнулить строку направления
	PP M F10TB1

	P RM C10
	P GOTO OF0E0A	; F10E0

OKLF_CXE0:
	CX
	RTN

;---------------------------------------
OKLF_PP:	; обработка [ПП] - пехота
	P RM FGUM
	P X!=0 OKLF_PPE0

	CX
	P M NTROPA	; обнулить направление
	PP M F10TB	; обнулить строку направления
	PP M F10TB1

	P RM C11
	P GOTO OF0E0A	; F11E0

OKLF_PPE0:
	CX
	RTN

;---------------------------------------
OKLF_BP:	; обработка [БП] - пехота в бронекостюмах ПП
	P RM FGUMPP
	P X!=0 OKLF_BPE0

	CX
	P M NTROPA	; обнулить направление
	PP M F10TB	; обнулить строку направления
	PP M F10TB1

	P RM C12
	P GOTO OF0E0A	; F12E0

OKLF_BPE0:
	CX
	RTN

;---------------------------------------
OKLF_IP:	; обработка [ИП] - расширение
	P RM FPARAP
	P X!=0 OKLF_IP0
	1 -
	P M FPARAP	; уменьшить ресурс

	KRAN
	5 *
	K INT
	P M XPARAP	; значение сохраняется _перед_ выбором ;)

	13
	P GOTO OF0E0A	; F13E0

OKLF_IP0:
	CX
	RTN

;---------------------------------------
OKLF_L:	; обработка [П] - допрос 
	P RM FPLEN
	P X!=0 OKLF_L0
	1 -
	P M FPLEN	; уменьшить ресурс однократно при вызове F14

	KRAN
	P RM C11 *
	K INT
	P M XPLEN	; коэффициент стойкости

	KRAN
	P RM C11 *
	K INT
	P M YPLEN	; коэффициент здоровья

	KRAN
	P RM C11 *
	K INT
	P M ZPLEN	; коэффициент звания

	14
	P GOTO OF0E0A	; F14E0

OKLF_L0:
	CX
	RTN

;---------------------------------------
OKLF_B:	; обработка [B^] - рапорт
	
	P GSB RAPORT
	P X!=0 OKLF_B0
	; все клетки открыты или помечены
	1 
	P M KONETC	; конец игры

	P RM FRAPORT
	P X=0 OKLF_B1
	; рапорт принят
	5 ; включить канал 1 ВУ
	P M VU
OKLF_B1:
	23
	P GOTO OF0E0A	; F23E0

OKLF_B0:
	CX
	RTN


;======================================================= Подпрограммы

;------------------------------
RASST:	; начальная расстановка мин на игровом поле

	125 M0
	.NUMD POLE
	M4

	P RM C32		; 32 - признак закрытого поля
RASST1:	KM4
	PFL0 RASST1	; очистка поля включая кайму

	; сделать кайму открытой (для PRSOSED)
	; по горизонталям
	P RM RAZMER
	2 +
	M0
	.NUM POLE
	MA
	P RM RAZMER
	P RM C11 *
	.NUM POLE11	; POLE+11
	+
	MB	
	; цикл по горизонталям
RASST1A1:
	KRMA P RM C31 K AND KMA
	KRMB P RM C31 K AND KMB
	RMA 1 + MA
	RMB 1 + MB
	PFL0 RASST1A1
	
	; по вертикалям
	P RM RAZMER
	2 +
	M0
	.NUM POLE
	MA
	P RM RAZMER
	+
	1 +
	MB	
	; цикл по вертикалям
RASST1A2:
	KRMA P RM C31 K AND KMA
	KRMB P RM C31 K AND KMB
	RMA P RM C11 + MA
	RMB P RM C11 + MB
	PFL0 RASST1A2

	; расстановка мин
	P RM NMINES
	P X<0 RASST1A
	; отрицательное количество мин - установить случайное
	P RM RAZMER 
	3 -
	P X<0 RASST1A3
	; 1*1 или 2*2
	P RM RAZMER
	F X^2
	1 +
	K RAN *
	K INT
	M0
	P M RMINES
	P X!=0 RASSTE	; мин нет - выход
	P GOTO RASST2

RASST1A3:
	P RM RAZMER
	2 *
	K RAN
	*
	2 +
	K INT
	M0
	P M RMINES
	P RM RAZMER
	F X^2
	M1
	-
	P X>=0 RASST2	
	P GOTO RASST1B
	
RASST1A:
	P RM RAZMER
	F X^2
	M1
	P RM NMINES
	M0	
	P M RMINES
	-
	P X<0 RASST2
RASST1B:
	; если мин больше, чем клеток на поле - привести в соответствие	
	RM1
	P M RMINES
	M0	

RASST2:	K RAN
	P RM RAZMER
	*
	K INT
	1 +
	P RM C11 *
	K RAN
	P RM RAZMER
	*
	K INT
	1 +
	+
	.NUM POLE
	+
	MA	; адрес в поле
	KRMA
	P RM C16
	K AND
	P X=0 RASST2	; эта клетка занята - повторить
	
	KRMA 
	P RM C16
	K OR
	KMA 		; поставить мину
	; инкрементировать число мин во всех доступных соседних клетках
	P GSB MINES
	PFL0 RASST2

RASST2A: ; вход для п/п PERESCHET

	P RM TOR
	P X!=0 RASSTE	; не тор - выйти
	; если поле тор - добавить числа с противоположной стороны

	; по горизонталям
	P RM RAZMER
	M0
	.NUMI POLE
	MA
	P RM C11 +
	MB
	.NUMI POLE
	P RM RAZMER
	P RM C11 *
	+
	MC	
	P RM C11 +
	MD
	; цикл по горизонталям (пров)
RASST3:	KRMB KRMD + P RM C31 K AND P RM C32 K OR KMB
	KRMC KRMA + P RM C31 K AND P RM C32 K OR KMC
	RMA 1 + MA
	RMB 1 + MB
	RMC 1 + MC
	RMD 1 + MD
	PFL0 RASST3

	; по вертикалям
	P RM RAZMER
	M0
	.NUM POLE11	; POLE+11
	MA
	1 +
	MB
	.NUM POLE11
	P RM RAZMER
	+
	MC	
	1 +
	MD
	; цикл по вертикалям
RASST4:	KRMB KRMD + P RM C31 K AND P RM C32 K OR KMB
	KRMC KRMA + P RM C31 K AND P RM C32 K OR KMC
	RMA P RM C11 + MA
	RMB P RM C11 + MB
	RMC P RM C11 + MC
	RMD P RM C11 + MD
	PFL0 RASST4

	; по главной диагонали
	.NUM POLE
	MA
	P RM C12 +
	MB
	.NUM POLE
	P RM RAZMER P RM C12 *
	+
	MC
	P RM C12 +
	MD
	KRMB KRMD + P RM C31 K AND P RM C32 K OR KMB
	KRMC KRMA + P RM C31 K AND P RM C32 K OR KMC

	; по второй диагонали
	.NUM POLE
	P RM RAZMER
	+
	1 +
	MA
	P RM C10 +
	MB
	.NUM POLE
	P RM RAZMER P RM C11 *
	+
	1 +
	MC
	P RM C10 +
	MD
	KRMB KRMD + P RM C31 K AND P RM C32 K OR KMB
	KRMC KRMA + P RM C31 K AND P RM C32 K OR KMC

RASSTE:
	RTN

;----------------------------- MINES
MINES:  ; Инкремент числа мин в клетках вокруг адреса в RA
	; не использовать R0 - п/п вызывается в цикле

	.NUM MINES_S1
	M9	; адрес подпрограммы

	P RM C12 +/- K GSB 9
	P RM C11 +/- K GSB 9
	P RM C10 +/- K GSB 9
	1 +/- K GSB 9
	1 K GSB 9
	P RM C10 K GSB 9
	P RM C11 K GSB 9
	P RM C12 K GSB 9
	RTN

MINES_S1:
	; добавляет RX к адресу и инкрементирует содержимое
	RMA + MD
	KRMD 1 + KMD
	RTN
;-------------------------------- PERESCHET
PERESCHET:	
	; обнуляет старые значения в клетках не трогая мин
	; и флагов
	; подсчитывает новые значения
	CX
	P M RMINES	; обнулить реальное количество мин

	122 M0
	.NUM POLE
	MA
	; удаление старых значений
PERESCHET1:	
	KRMA
	P RM C32 K AND
	P X=0 PERESCHET2
	; клетка открыта
	CX KMA	; сбросить все
	P GOTO PERESCHET3
PERESCHET2:
	; клетка закрыта - сохранить мины и флаги
	KRMA 240 K AND KMA
PERESCHET3:
	RMA 1 + MA
	PFL0 PERESCHET1	
	
	122 M0
	.NUM POLE
	MA
	; запись новых значений
PERESCHET4:	
	KRMA
	P RM C16 K AND
	P X!=0 PERESCHET5
	; мина
	P GSB MINES

	P RM RMINES	; подсчёт мин
	1 +
	P M RMINES

PERESCHET5:
	RMA 1 + MA
	PFL0 PERESCHET4	

	P GOTO RASST2A	; если тор - заполнить края

;--------------------------------- RISOTKR
RISOTKR:
	; отрисовать открытое поле
	.NUM POLE 
	MC
	.NUMD STR0
	MD

	1 MA 
RISOTKR1:
	1 MB

	RMD
	M4	; для косвенной адресации очередной строки
	
RISOTKR2:
	RMA P RM C11 *
	RMB +
	RMC +
	ME	; адрес текущей клетки

	KRME
	M9	; содержимое текущей клетки

	P RM C16 K AND	; проверить мину
	P X!=0 RISOTKR3
	
	22 		; отрисовать мину
	P GOTO RISOTKR5

RISOTKR3:
	RM9
	P RM C64 K AND
	P X!=0 RISOTKR4

	23 		; ошибочная мина
	P GOTO RISOTKR5

RISOTKR4:
	RM9
	P RM C15 K AND
	10 +
RISOTKR5:
	KM4	; вывести символ в строку

	P RM RAZMER
	RMB 1 + MB
	-
	P X<0 RISOTKR2	; цикл по строке

	CX
	KM4

	RMD P RM C20 + MD

	P RM RAZMER
	RMA 1 + MA
	-
	P X<0 RISOTKR1	; цикл по строкам

	RTN
	
;--------------------------------- RISZAKR
RISZAKR:
	; отрисовать закрытое поле
	.NUM POLE 
	MC
	.NUMD STR0
	MD

	1 MA 
RISZAKR1:
	1 MB

	RMD
	M4	; для косвенной адресации очередной строки
	
RISZAKR2:
	RMA P RM C11 *
	RMB +
	RMC +
	ME	; адрес текущей клетки

	KRME
	M9	; содержимое текущей клетки

	P RM C32 K AND	; проверить закрытость
	P X!=0 RISZAKR3
	; клетка ещё не открыта
	RM9
	P RM C64 K AND
	P X!=0 RISZAKR2A
	; флаг "мина"
	21
	P GOTO RISZAKR6
RISZAKR2A:
	RM9
	P RM C128 K AND
	P X!=0 RISZAKR2B
	; флаг "?"
	20
	P GOTO RISZAKR6
RISZAKR2B:
	; закрытая клетка
	19
	P GOTO RISZAKR6

RISZAKR3:
	; клетка не закрыта
	RM9
	P RM C16 K AND	; проверить мину
	P X!=0 RISZAKR4
	; выполняется только при ошибке алгоритма игры
	22 		; отрисовать мину 
	P GOTO RISZAKR6

RISZAKR4:
	RM9
	P RM C64 K AND
	P X!=0 RISZAKR5
	; выполняется только при ошибке алгоритма игры
	23 		; ошибочная мина
	P GOTO RISZAKR6

RISZAKR5:
	RM9
	P RM C15 K AND
	10 +
RISZAKR6:
	KM4	; вывести символ в строку

	P RM RAZMER
	RMB 1 + MB
	-
	P X<0 RISZAKR2	; цикл по строке

	CX
	KM4

	RMD P RM C20 + MD

	P RM RAZMER
	RMA 1 + MA
	-
	P X<0 RISZAKR1	; цикл по строкам

	RTN

;--------------------------------- RISDOPR
RISDOPR:
	; отрисовать закрытое поле
	; с возможными минами
	.NUM POLE 
	MC
	.NUMD STR0
	MD

	1 MA 
RISDOPR1:
	1 MB

	RMD
	M4	; для косвенной адресации очередной строки
	
RISDOPR2:
	RMA P RM C11 *
	RMB +
	RMC +
	ME	; адрес текущей клетки

	KRME
	M9	; содержимое текущей клетки

	P RM C32 K AND	; проверить закрытость
	P X!=0 RISDOPR3
	; клетка ещё не открыта
	RM9
	P RM C64 K AND
	P X!=0 RISDOPR2A
	; флаг "мина"
	21
	P GOTO RISDOPR6
RISDOPR2A:
	RM9
	P RM C128 K AND
	P X!=0 RISDOPR2B
	; флаг "?"
	20
	P GOTO RISDOPR6
RISDOPR2B:
	; закрытая клетка
	RM9
	P RM C16 K AND
	P X!=0 RISDOPR2C
	; мина
	P RM DOST	; достоверность
	P RM C10 /
	K RAN
	-
	P X>=0 RISDOPR2C	; дезинформировать об отсутствии
	; достоверность высока
	; нарисовать мину
	22
	P GOTO RISDOPR6

RISDOPR2C:
	; закрытая клетка - не мина
	P RM DOST	; достоверность
	P RM C10 /
	K RAN
	-
	P X>=0 RISDOPR2E
	; достоверность высока
	; нарисовать закрытую клетку
RISDOPR2D:
	19
	P GOTO RISDOPR6
RISDOPR2E:
	K RAN
	5 *
	P X=0 RISDOPR2D	
	; с P=20% дезинформировать о наличии
	; нарисовать мину
	22
	P GOTO RISDOPR6

RISDOPR3:
	; клетка не закрыта
	RM9
	P RM C16 K AND	; проверить мину
	P X!=0 RISDOPR4
	; выполняется только при ошибке алгоритма игры
	22 		; отрисовать мину 
	P GOTO RISDOPR6

RISDOPR4:
	RM9
	P RM C64 K AND
	P X!=0 RISDOPR5
	; выполняется только при ошибке алгоритма игры
	23 		; ошибочная мина
	P GOTO RISDOPR6

RISDOPR5:
	RM9
	P RM C15 K AND
	10 +
RISDOPR6:
	KM4	; вывести символ в строку

	P RM RAZMER
	RMB 1 + MB
	-
	P X<0 RISDOPR2	; цикл по строке

	CX
	KM4

	RMD P RM C20 + MD

	P RM RAZMER
	RMA 1 + MA
	-
	P X<0 RISDOPR1	; цикл по строкам

	RTN

;--------------------------------- RISZAKRS
RISZAKRS:
	; отрисовать строку KY закрытого поля
	P RM KY
	1 +
	P RM C11 * 
	.NUM POLE 
	+
	MC
	.NUMD STR0
	P RM KY P RM C20 *
	+
	M4
	
	1 MB

RISZAKRS1:
	RMC
	RMB +
	ME	; адрес текущей клетки

	KRME
	M9	; содержимое текущей клетки

	P RM C32 K AND	; проверить закрытость
	P X!=0 RISZAKRS2
	; клетка ещё не открыта
	RM9
	P RM C64 K AND
	P X!=0 RISZAKRS1A
	; флаг "мина"
	21
	P GOTO RISZAKRS5
RISZAKRS1A:
	RM9
	P RM C128 K AND
	P X!=0 RISZAKRS1B
	; флаг "?"
	P RM C20
	P GOTO RISZAKRS5
RISZAKRS1B:
	; закрытая клетка
	19
	P GOTO RISZAKRS5

RISZAKRS2:
	; клетка не закрыта
	RM9
	P RM C16 K AND	; проверить мину
	P X!=0 RISZAKRS3
	; выполняется только при ошибке алгоритма игры
	22 		; отрисовать мину 
	P GOTO RISZAKRS5

RISZAKRS3:
	RM9
	P RM C64 K AND
	P X!=0 RISZAKRS4
	; выполняется только при ошибке алгоритма игры
	23 		; ошибочная мина
	P GOTO RISZAKRS5

RISZAKRS4:
	RM9
	P RM C15 K AND
	P RM C10 +
RISZAKRS5:
	KM4	; вывести символ в строку

	P RM RAZMER
	RMB 1 + MB
	-
	P X<0 RISZAKRS1	; цикл по строке

	CX
	KM4

	RTN

;-------------------------------------- OTKR
OTKR:	; открыть клетки вокруг пустой области

	.NUM POLE
	MC

OTKR0:
	CX M4	; счётчик вновь открытых
	1 MA
OTKR1:
	1 MB
OTKR2:	
	RMA P RM C11 * 
	RMB +
	RMC +
	MD
	KRMD	; содержимое ячейки
	P X=0 OTKR10
	; нулевое
	RMD P RM C12 - ME
	KRME P RM C32 K AND 
	P X!=0 OTKR3
	KRM4	; увеличить счётчик	
	KRME P RM C31 K AND KME	; открыть клетку со сбросом флагов
OTKR3:	; далее аналогично
	RMD P RM C11 - ME
	KRME P RM C32 K AND 
	P X!=0 OTKR4
	KRM4	
	KRME P RM C31 K AND KME	
OTKR4:
	RMD P RM C10 - ME
	KRME P RM C32 K AND 
	P X!=0 OTKR5
	KRM4
	KRME P RM C31 K AND KME
OTKR5:
	RMD 1 - ME
	KRME P RM C32 K AND 
	P X!=0 OTKR6
	KRM4
	KRME P RM C31 K AND KME
OTKR6:
	RMD 1 + ME
	KRME 32 K AND 
	P X!=0 OTKR7
	KRM4
	KRME 31 K AND KME
OTKR7:
	RMD P RM C10 + ME
	KRME P RM C32 K AND 
	P X!=0 OTKR8
	KRM4
	KRME P RM C31 K AND KME
OTKR8:
	RMD P RM C11 + ME
	KRME P RM C32 K AND 
	P X!=0 OTKR9
	KRM4
	KRME P RM C31 K AND KME
OTKR9:
	RMD P RM C12 + ME
	KRME P RM C32 K AND 
	P X!=0 OTKR10
	KRM4
	KRME P RM C31 K AND KME

OTKR10:	; цикл по строке
	P RM RAZMER
	RMB 1 + MB
	-
	P X<0 OTKR2
	; цикл по строкам
	P RM RAZMER
	RMA 1 + MA
	-
	P X<0 OTKR1

	RM4	; счётчик
	P X=0 OTKR0	; R4!=0 повторить цикл по всему полю
	; если не было новых открытий на текущем проходе - выйти
	RTN

;-------------------------------------- PRSOSED
PRSOSED:	; проверка допустимости перемещения
	P RM SOSED
	P X=0 PRSOSED1
	; флаг не установлен - не проверять
PRSOSEDE:
	1
	RTN	
PRSOSED1:
	; проверка
	.NUM POLE
	P RM KY
	P RM C11 *
	+
	P RM KX 
	+
	P RM C12 +
	MA	; адрес места перемещения
	RMA P RM C12 - MB
	KRMB P RM C32 K AND
	P X!=0 PRSOSEDE	; одна из соседних клеткок открыта - перемещение допустимо
	RMA P RM C11 - MB
	KRMB P RM C32 K AND
	P X!=0 PRSOSEDE
	RMA P RM C10 - MB
	KRMB P RM C32 K AND
	P X!=0 PRSOSEDE
	RMA 1 - MB
	KRMB P RM C32 K AND
	P X!=0 PRSOSEDE
	RMA 1 + MB
	KRMB P RM C32 K AND
	P X!=0 PRSOSEDE
	RMA P RM C10 + MB
	KRMB P RM C32 K AND
	P X!=0 PRSOSEDE
	RMA P RM C11 + MB
	KRMB P RM C32 K AND
	P X!=0 PRSOSEDE
	RMA P RM C12 + MB
	KRMB P RM C32 K AND
	P X!=0 PRSOSEDE
	; все соседние клетки закрыты - восстановить координаты
	P RM KXOLD
	P M KX
	P RM KYOLD
	P M KY
	CX
	RTN

;------------------------------------------------------- TROPA
TROPA:
	; изменить видимые строки
	; и убрать мины с поля
	; с учётом действия заряда разминирования
	; проверка тора - повторным вхождением
	; 1 - ошибка применения, 0 - нормальное завершение
	
	.NUM STR0
	MD
	P RM KY P RM C20 *
	+
	P RM KX +
	MA		; адрес курсора в строке

	.NUM POLE12
	P RM KY P RM C11 * +
	P RM KX +
	MC		; адрес в поле

	KRMC P RM C16 K AND
	P X=0 TROPAN0	; взрыв под курсором

	.NUM TTROPA
	PP M 9042
	P RM NTROPA
	PP M 9211	; считать адрес перехода
	ME
	K GOTO E

TTROPA:	.DA TROPAN0,TROPANU,TROPANR,TROPAND,TROPANL

TROPAN0:
	; направление не указано
	25	; взрыв
	KMA	; в позиции курсора
	1
	RTN	

TROPANU:	; направление вверх
	P RM KY
	MB
TROPANU1:
	KRMC P RM C16 K AND
	P X!=0 TROPANU2
	25 KMA	; тут была мина
	CX KMC	; убрать её
	P GOTO TROPANU3
TROPANU2:
	26 KMA	; не было мины - вертикаль
	KRMC P RM C31 K AND KMC	; открыть клетку
TROPANU3:
	RMA P RM C20 - MA	; адрес в строке
	RMC P RM C11 - MC	; адрес в поле
	RMB 1 - MB	; позиция KY
	P X<0 TROPANU1	; цикл до верхней клетки
	CX
	RTN

TROPANR:	; направление вправо
	P RM KX
	MB
TROPANR1:
	KRMC P RM C16 K AND
	P X!=0 TROPANR2
	25 KMA
	CX KMC
	P GOTO TROPANR3
TROPANR2:
	27 KMA	; не было мины - горизонталь
	KRMC P RM C31 K AND KMC
TROPANR3:
	RMA 1 + MA	; адрес в строке
	RMC 1 + MC	; адрес в поле
	RMB 1 + MB	; позиция KX
	P RM RAZMER -
	P X>=0 TROPANR1	; цикл до правой клетки
	CX
	RTN

TROPAND:	; направление вниз
	P RM KY
	MB
TROPAND1:
	KRMC P RM C16 K AND
	P X!=0 TROPAND2
	25 KMA
	CX KMC
	P GOTO TROPAND3
TROPAND2:
	26 KMA	; не было мины - вертикаль
	KRMC P RM C31 K AND KMC
TROPAND3:
	RMA P RM C20 + MA	; адрес в строке
	RMC P RM C11 + MC	; адрес в поле
	RMB 1 + MB	; позиция KY
	P RM RAZMER -
	P X>=0 TROPAND1	; цикл до нижней клетки
	CX
	RTN

TROPANL:	; направление влево
	P RM KX
	MB
TROPANL1:
	KRMC P RM C16 K AND
	P X!=0 TROPANL2
	25 KMA
	CX KMC
	P GOTO TROPANL3
TROPANL2:
	27 KMA	; не было мины - горизонталь
	KRMC P RM C31 K AND KMC
TROPANL3:
	RMA 1 - MA	; адрес в строке
	RMC 1 - MC	; адрес в поле
	RMB 1 - MB	; позиция KX
	P X<0 TROPANL1	; цикл до левой клетки
	CX
	RTN

;------------------------------------------------------- GUMAN
GUMAN:
	; изменить видимые строки
	; и убрать мины с поля
	; с учётом действия пехоты
	; отдельной обработки тора нет
	
	.NUM TGUMAN
	PP M 9042
	P RM NTROPA	; направление
	PP M 9211	; считать адрес перехода
	ME
	K GOTO E

TGUMAN:	.DA GUMANN0,GUMANNU,GUMANNR,GUMANND,GUMANNL

GUMANN0:
	; направление не указано
	; ничего не делать, все разбежались
	P RM RAZMER
	P M NGUM
	1
	RTN	

GUMANNU:	; направление вверх
	; начать с нижнего ряда
	P RM RAZMER
	P RM NGUM -
	1 -
	MD		; текущая строка
	P RM C20 *
	.NUM STR0
	+
	MA		; адрес начала очередной строки

	.NUM POLE12 
	RMD P RM C11 * +
	MC		; адрес начала строки в поле

	.NUM XGUM
	MB

	P RM RAZMER
	M0

GUMANNU1:
	KRMB
	P X!=0 GUMANNU3	; в этом столбце ресурс исчерпан

	KRMC P RM C16 K AND
	P X!=0 GUMANNU2
	25 KMA	; тут была мина
	CX KMC	; убрать её
	KMB	; убрать признак
	
	P GOTO GUMANNU3
GUMANNU2:
	28 KMA	; не было мины - следы вертикаль
GUMANNU3:
	RMA 1 + MA	; адрес в строке
	RMC 1 + MC	; адрес в поле
	RMB 1 + MB	; адрес признака
	PFL0 GUMANNU1	; цикл 
	CX
	RTN

GUMANNR:	; направление вправо
	; начать с левого ряда
	.NUM STR0
	P RM NGUM 
	+
	MA		; адрес символа в верхней строке

	.NUM POLE12 
	P RM NGUM  +
	MC		; адрес начала в поле

	.NUM XGUM
	MB

	P RM RAZMER
	M0

GUMANNR1:
	KRMB
	P X!=0 GUMANNR3	
	KRMC P RM C16 K AND
	P X!=0 GUMANNR2
	25 KMA	; тут была мина
	CX KMC	; убрать её
	KMB	; убрать признак

	P GOTO GUMANNR3
GUMANNR2:
	29 KMA	; не было мины - следы горизонталь
GUMANNR3:
	RMA P RM C20 + MA	; адрес в строке
	RMC P RM C11 + MC	; адрес в поле
	RMB 1 + MB	; адрес признака
	PFL0 GUMANNR1	; цикл 
	CX
	RTN

GUMANND:	; направление вниз
	; начать с верхнего ряда
	P RM NGUM
	P RM C20 *
	.NUM STR0
	+
	MA		; адрес начала очередной строки

	.NUM POLE12 	; POLE+12
	P RM NGUM
	P RM C11 * +
	MC		; адрес начала строки в поле

	.NUM XGUM
	MB

	P RM RAZMER
	M0

GUMANND1:
	KRMB
	P X!=0 GUMANND3	

	KRMC P RM C16 K AND
	P X!=0 GUMANND2
	25 KMA	; была мина
	CX KMC	; убрать её
	KMB	; убрать признак

	P GOTO GUMANND3
GUMANND2:
	28 KMA	; не было мины - следы вертикаль
GUMANND3:
	RMA 1 + MA	; адрес в строке
	RMC 1 + MC	; адрес в поле
	RMB 1 + MB	; адрес признака
	PFL0 GUMANND1	; цикл 
	CX
	RTN

GUMANNL:	; направление влево
	; начать с правого ряда
	P RM RAZMER
	P RM NGUM 
	-
	1 -
	MD
	.NUM STR0
	+
	MA		; адрес символа в верхней строке

	.NUM POLE12	; POLE+12
	RMD +
	MC		; адрес начала в поле

	.NUM XGUM
	MB

	P RM RAZMER
	M0

GUMANNL1:
	KRMB
	P X!=0 GUMANNL3	

	KRMC P RM C16 K AND
	P X!=0 GUMANNL2
	25 KMA	; мина
	CX KMC	; убрать её
	KMB	; убрать признак
	P GOTO GUMANNL3
GUMANNL2:
	29 KMA	; не было мины - следы горизонталь
GUMANNL3:
	RMA P RM C20 + MA	; адрес в строке
	RMC P RM C11 + MC	; адрес в поле
	RMB 1 + MB	; позиция KX
	PFL0 GUMANNL1	; цикл 
	CX
	RTN

;------------------------------------------------------- GUMANPP
GUMANPP:
	; изменить видимые строки
	; и убрать мины с поля
	; с учётом действия пехоты
	; в легендарных бронекостюмах ПП
	; отдельной обработки тора нет
	
	.NUM TGUMANPP
	PP M 9042
	P RM NTROPA	; направление
	PP M 9211	; считать адрес перехода
	ME
	K GOTO E

TGUMANPP:
	.DA GUMANPPN0,GUMANPPNU,GUMANPPNR,GUMANPPND,GUMANPPNL

GUMANPPN0:
	; направление не указано
	; ничего не делать, все разбежались
	P RM RAZMER
	P M NGUM
	1
	RTN	

GUMANPPNU:	; направление вверх
	; начать с нижнего ряда
	P RM RAZMER
	P RM NGUM -
	1 -
	MD		; текущая строка
	P RM C20 *
	.NUM STR0
	+
	MA		; адрес начала очередной строки

	.NUM POLE12	; POLE+12
	RMD P RM C11 * +
	MC		; адрес начала строки в поле

	.NUM XGUM
	MB

	P RM RAZMER
	M0

GUMANPPNU1:
	KRMB
	P X!=0 GUMANPPNU3	; в этом столбце ресурс исчерпан

	KRMC P RM C16 K AND
	P X!=0 GUMANPPNU2
	25 KMA	; тут была мина
	CX KMC	; убрать её
	KRAN
	5 *
	K INT
	P X=0 GUMANPPNU3
	KMB	; убрать признак c вероятностью 20%
	P GOTO GUMANPPNU3
GUMANPPNU2:
	28 KMA	; не было мины - следы вертикаль
GUMANPPNU3:
	RMA 1 + MA	; адрес в строке
	RMC 1 + MC	; адрес в поле
	RMB 1 + MB	; адрес признака
	PFL0 GUMANPPNU1	; цикл 
	CX
	RTN

GUMANPPNR:	; направление вправо
	; начать с левого ряда
	.NUM STR0
	P RM NGUM 
	+
	MA		; адрес символа в верхней строке

	.NUM POLE12	; POLE+12
	P RM NGUM  +
	MC		; адрес начала в поле

	.NUM XGUM
	MB

	P RM RAZMER
	M0

GUMANPPNR1:
	KRMB
	P X!=0 GUMANPPNR3	
	KRMC P RM C16 K AND
	P X!=0 GUMANPPNR2
	25 KMA	; тут была мина
	CX KMC	; убрать её
	KRAN
	5 *
	K INT
	P X=0 GUMANPPNR3
	KMB	; убрать признак P=20%

	P GOTO GUMANPPNR3
GUMANPPNR2:
	29 KMA	; не было мины - следы горизонталь
GUMANPPNR3:
	RMA P RM C20 + MA	; адрес в строке
	RMC P RM C11 + MC	; адрес в поле
	RMB 1 + MB	; адрес признака
	PFL0 GUMANPPNR1	; цикл 
	CX
	RTN

GUMANPPND:	; направление вниз
	; начать с верхнего ряда
	P RM NGUM
	P RM C20 *
	.NUM STR0
	+
	MA		; адрес начала очередной строки

	.NUM POLE12 	; POLE+12
	P RM NGUM
	11 * +
	MC		; адрес начала строки в поле

	.NUM XGUM
	MB

	P RM RAZMER
	M0

GUMANPPND1:
	KRMB
	P X!=0 GUMANPPND3	

	KRMC P RM C16 K AND
	P X!=0 GUMANPPND2
	25 KMA	; была мина
	CX KMC	; убрать её
	KRAN
	5 *
	K INT
	P X=0 GUMANPPND3
	KMB	; убрать признак P=20%

	P GOTO GUMANPPND3
GUMANPPND2:
	28 KMA	; не было мины - следы вертикаль
GUMANPPND3:
	RMA 1 + MA	; адрес в строке
	RMC 1 + MC	; адрес в поле
	RMB 1 + MB	; адрес признака
	PFL0 GUMANPPND1	; цикл 
	CX
	RTN

GUMANPPNL:	; направление влево
	; начать с правого ряда
	P RM RAZMER
	P RM NGUM 
	-
	1 -
	MD
	.NUM STR0
	+
	MA		; адрес символа в верхней строке

	.NUM POLE12	; POLE+12
	RMD +
	MC		; адрес начала в поле

	.NUM XGUM
	MB

	P RM RAZMER
	M0

GUMANPPNL1:
	KRMB
	P X!=0 GUMANPPNL3	

	KRMC P RM C16 K AND
	P X!=0 GUMANPPNL2
	25 KMA	; мина
	CX KMC	; убрать её
	KRAN
	5 *
	K INT
	P X=0 GUMANPPNL3
	KMB	; убрать признак P=20%
	P GOTO GUMANPPNL3
GUMANPPNL2:
	29 KMA	; не было мины - следы горизонталь
GUMANPPNL3:
	RMA P RM C20 + MA	; адрес в строке
	RMC P RM C11 + MC	; адрес в поле
	RMB 1 + MB	; позиция KX
	PFL0 GUMANPPNL1	; цикл 
	CX
	RTN

;------------------------------------------------------- RAPORT
RAPORT:
	; проверить поле на открытость
	; пересчитать помеченные мины
	; выход RX=0 - не все открыты

	P RM NTIME
	P RM MTIME
	-
	P M MTIMEPL	; затраченное время в секундах

	.NUM POLE12
	ME	; адрес начала поля+12

	CX
	P M RMINESPL	; для пересчёта флагов

	CX MA 
RAPORT1: ; цикл по строкам
	RME
	RMA
	P RM C11 *
	+
	MD	; адрес начала строки	

	CX MB
RAPORT2: ; цикл по строке
	KRMD
	P RM C32 K AND
	P X!=0 RAPORT3
	; не открыта
	KRMD
	P RM C64 K AND
	P X!=0 RAPORTE0	; выйти при непомеченной и неоткрытой клетке
	; неоткрытая мина с флагом
	P RM RMINESPL
	1 +
	P M RMINESPL
RAPORT3:	
	RMD 1 + MD

	RMB 1 + MB
	P RM RAZMER
	-
	P X=0 RAPORT2

	RMA 1 + MA
	P RM RAZMER
	-
	P X=0 RAPORT1
	
	; поле просканировано
	P RM RMINES
	P RM RMINESPL
	-
	K SGN
	K ABS
	P M FRAPORT	; 1 - количество отличается, 0 - нет

	1	; RX!=0 - рапорт
	RTN

RAPORTE0:
	CX	; RX=0 - преждевременный рапорт не принимается
	RTN


;======================================================= Обработчики флагов прерываний
OTIMER:	; обработка таймера 0
	CX
	P M FTIMER	; очистить флаг

	P RM KONETC
	P X!=0 OTIMER1
	CX		; RX=0
	RTN
OTIMER1:
	P RM MTIME	; декремент времени игры
	P X!=0 OTIMER2	; выход RX=0
	1 -
	P M MTIME
	1		; выход RX!=0
OTIMER2:
	RTN


;======================================================= Инициализация структур программы
INITPROG:
	CX
	PP M 9202	; стартовое меню - 0
	PP M 9203	; активный элемент - 0

	2 PP M 9048	; 1- автоматический запуск, 2 - с блокировкой С/П
	PP M 9010	; инициализация графического экрана

	1 PP M 9200	; 1 - разрешение интерфейса
	.NUM TFORM
	PP M 9201	; главная таблица форм TFORM

	64
	P M C64
	PP M 9208	; нарисовать форму при старте

	1
	PP M 9148	; сброс всех прерываний
	PP M 9130	; разрешение прерываний

	.NUM TIMER
	ENT
	1
	PP M 9131	; Прерывание 1, приоритет 1, вектор TIMER
	; 1
	PP M 9150	; Разрешить аппаратное прерывание таймера 0 

	100 
	P M C100
	PP M 9050	; Инициализировать таймер 0

	CX
	PP M 9171	; отключение мультиплексора АЦП (если он есть)
	1
	PP M 9090	; режим параллельного порта - статический
	PP M 9093	; тип операции

	255
	P M C255
	PP M 9092	; каналы ВУ - откл
	P M VU

	1
	P M KONETC	; при входе в программу - конец игры

	; ограничение параметров при первом запуске
	P RM RAZMER
	P X<0 INIT1
	1 
	P M RAZMER
	P GOTO INIT2
INIT1:	10 -
	P X>=0 INIT2
	9 
	P M RAZMER
INIT2:
	P RM FMINES
	K ABS
	K SGN
	P M FMINES

	P RM TOR
	K ABS
	K SGN
	P M TOR

	P RM SOSED
	K ABS
	K SGN
	P M SOSED	

	; Константы
	10 P M C10
	11 P M C11
	12 P M C12
	15 P M C15
	16 P M C16
	20 P M C20
	31 P M C31
	32 P M C32
	63 P M C63
	; 64 P M C64 - см выше
	; 100 P M C100 - см выше
	128 P M C128
	192 P M C192
	; 255 P M C255 - см выше
	300 P M C300

	RTN

;======================================================= Прерывание 1 - таймер 0
TIMER:	P RM C100		; 1 сек
	PP M 9050	; перезапустить таймер 0
	1
	P M FTIMER	; установить флаг срабатывания таймера

	P RM FVU
	P X!=0 TIMER1
	P RM VU
	PP M 9092	; передать маску ВУ в порт
	P RM C255
	P M VU		
TIMER1:
	PP RTN

; ====================================================== Главная таблица форм
TFORM:
	.DB 0		; 0 - главное меню
	.DA F0

	.DB 1		; 1  - поле 1x1
	.DA F1

	.DB 2		; 2  - поле 2x2
	.DA F2

	.DB 3		; 3  - поле 3x3
	.DA F3

	.DB 4		; 4  - поле 4x4
	.DA F4

	.DB 5		; 5  - поле 5x5
	.DA F5

	.DB 6		; 6  - поле 6x6
	.DA F6

	.DB 7		; 7  - поле 7x7
	.DA F7

	.DB 8		; 8  - поле 8x8
	.DA F8

	.DB 9		; 9  - поле 9x9
	.DA F9

	.DB 10		; 10 - заряд
	.DA F10

	.DB 11		; 11 - пехота
	.DA F11

	.DB 12		; 12 - пехота в ПП
	.DA F12

	.DB 13		; 13 - расширение
	.DA F13

	.DB 14		; 14 - допрос
	.DA F14

	.DB 15		; 15 - допрос, есть информация
	.DA F15

	.DB 16		; 16 - допрос, нет информации
	.DA F16

	.DB 17		; 17 - допрос, невозможен
	.DA F17

	.DB 18		; 18 - о программе
	.DA F18

	.DB 19		; 19 - время истекло
	.DA F19

	.DB 20		; 20 - ошибка разминирования
	.DA F20

	.DB 21		; 21 - ошибка заряда
	.DA F21

	.DB 22		; 22 - ошибка направления
	.DA F22

	.DB 23		; 23 - рапорт
	.DA F23	

	.DB 24		; 24 - настройка
	.DA F24	

	.DB 252		; 252 - ошибка формы
	.DA F252

	.DB END

; F0 ====================================================== Стартовое меню, Форма 0
	.BASE
F0:	.DB 3		;максимальный номер элемента 
	.DBB F0DE, F0PI, F0PO, F0PL, F0PR, F0RI, F0KM

F0DE:	;таблица флагов действий
	.DB 13,5,5,13	; 00 00 01 01 = выбор + ввод, 13- с признаком ввода

F0PI:	
F0PO:	.DB 1,0,24,0,18,0,0,3

F0PL:	.DB 3,0
F0PR:	.DB 1,2,3,0

F0RI:	; рисунок экранной формы
	.DB TYPE, 0h 			; шрифт 0

	.DB TAB, 4, 4
	.DB FRAME, 0, 120, 56	; окно

	.DB TAB, 22,0 
	.DB DRAWP, 0
	.DA RISF22B

	.DB TAB, 33,0 
	.DB DRAWP, 0
	.DA RISF22A

	.DB TAB, 88,0 
	.DB DRAWP, 0
	.DA RISF22B

	.DB TAB, 55,55 
	.DB DRAWP, 0
	.DA RISF22D

	.DB TAB, 110,55 
	.DB DRAWP, 0
	.DA RISF22E

	.DB TAB, 2,8
	.DB DRAWP, 0
	.DA RISF22F

	.DB TAB, 121,32 
	.DB DRAWP, 0
	.DA RISF22G

	.DB TAB, 121,44 
	.DB DRAWP, 0
	.DA RISF22H

	.DB TAB, 84, 24
	.DB DRAWP, 0
	.DA RISF20

	.DB TAB, 50, 8
	.DB TXTP, 16
	.DA F0TZ

	.DB TAB, 14, 18
	.DB SQU, 0, 110, 1

	.DB TAB, 16, 24 
	.DB TXTP, 16
	.DA F0T0
	.DB TAB, 16, 32 
	.DB TXTP, 16
	.DA F0T1
	.DB TAB, 16, 40 
	.DB TXTP, 16
	.DA F0T2
	.DB TAB, 16, 48 
	.DB TXTP, 16
	.DA F0T3
	.DB END

F0KM:	.DBB F0KM0, F0KM1, F0KM2, F0KM3

F0KM0:	.DB TAB, 4,24
	.DB JM  	
	.DBB F0KME
F0KM1:	.DB TAB, 4, 32 	
	.DB JM  	
	.DBB F0KME
F0KM2:	.DB TAB, 4, 40 	
	.DB JM  	
	.DBB F0KME
F0KM3:	.DB TAB, 4, 48 	
F0KME:	.DB DRAWP, 2	; 2=ИЛИ
	.DA RISF22B
	.DB END			

F0TZ:	.TEXT "Сапёр\0"
F0T0:	.TEXT "Игра\0"
F0T1:	.TEXT "Настройка\0"
F0T2:	.TEXT "О программе\0"
F0T3:	.TEXT "Выход\0"

; F1 ====================================================== Поле, Форма 1
	.BASE
F1:	.DB 0		;максимальный номер элемента 
	.DBB F1DE, F1PI, F1PO, F1PL, F1PR, F1RI, F1KM

F1DE:	;таблица флагов действий
	.DB 31		; 00 01 11 11 = выход + обрввод + обрвыбор

F1PI:	
F1PO:	
F1PL:	
F1PR:	.DB 0,0

F1RI:	; рисунок экранной формы

	.DB TYPE, 254 			; шрифт 254 - загружаемый
	.DB ATYPE
	.DA FONT12M

	.DB TAB, 25, 25
	.DB TXTB, 0
	.DA STR0

	.DB TAB, 25, 37
	.DB SQU, 0, 13, 1

	.DB TAB, 37, 25
	.DB SQU, 0, 1, 13

	.DB LCALL
	.DA FXS1

F1KM0:	.DB END

F1KM:	.DBB F1KM0


; F2 ====================================================== Поле 2x2, Форма 2
	.BASE
F2:	.DB 0		;максимальный номер элемента 
	.DBB F2DE, F2PI, F2PO, F2PL, F2PR, F2RI, F2KM

F2DE:	;таблица флагов действий
	.DB 31		; 00 01 11 11 = выход + обрввод + обрвыбор

F2PI:	
F2PO:	
F2PL:	
F2PR:	.DB 0,0

F2RI:	; рисунок экранной формы

	.DB TYPE, 254 			; шрифт 254 - загружаемый
	.DB ATYPE
	.DA FONT12M

	.DB TAB, 19, 19
	.DB TXTB, 0
	.DA STR0
	.DB TAB, 19, 31
	.DB TXTB, 0
	.DA STR1

	.DB TAB, 19, 43
	.DB SQU, 0, 25, 1

	.DB TAB, 43, 19
	.DB SQU, 0, 1, 25

	.DB LCALL
	.DA FXS1

F2KM0:	.DB END

F2KM:	.DBB F2KM0


; F3 ====================================================== Поле 3x3, Форма 3
	.BASE
F3:	.DB 0		;максимальный номер элемента 
	.DBB F3DE, F3PI, F3PO, F3PL, F3PR, F3RI, F3KM

F3DE:	;таблица флагов действий
	.DB 31		; 00 01 11 11 = выход + обрввод + обрвыбор

F3PI:	
F3PO:	
F3PL:	
F3PR:	.DB 0,0

F3RI:	; рисунок экранной формы

	.DB TYPE, 254 			; шрифт 254 - загружаемый
	.DB ATYPE
	.DA FONT12M

	.DB TAB, 13, 13
	.DB TXTB, 0
	.DA STR0
	.DB TAB, 13, 25
	.DB TXTB, 0
	.DA STR1
	.DB TAB, 13, 37
	.DB TXTB, 0, 
	.DA STR2

	.DB TAB, 13, 49
	.DB SQU, 0, 37, 1

	.DB TAB, 49, 13
	.DB SQU, 0, 1, 37

	.DB LCALL
	.DA FXS1

F3KM0:	.DB END

F3KM:	.DBB F3KM0

; F4 ====================================================== Поле 4x4, Форма 4
	.BASE
F4:	.DB 0		;максимальный номер элемента 
	.DBB F4DE, F4PI, F4PO, F4PL, F4PR, F4RI, F4KM

F4DE:	;таблица флагов действий
	.DB 31		; 00 01 11 11 = выход + обрввод + обрвыбор

F4PI:	
F4PO:	
F4PL:	
F4PR:	.DB 0,0

F4RI:	; рисунок экранной формы

	.DB TYPE, 254 			; шрифт 254 - загружаемый
	.DB ATYPE
	.DA FONT12M

	.DB TAB, 7, 7
	.DB TXTB, 0
	.DA STR0
	.DB TAB, 7, 19
	.DB TXTB, 0
	.DA STR1
	.DB TAB, 7, 31
	.DB TXTB, 0, 
	.DA STR2
	.DB TAB, 7, 43
	.DB TXTB, 0
	.DA STR3

	.DB TAB, 7, 55
	.DB SQU, 0, 49, 1

	.DB TAB, 55, 7
	.DB SQU, 0, 1, 49

	.DB LCALL
	.DA FXS1

F4KM0:	.DB END	

F4KM:	.DBB F4KM0
		

; F5 ====================================================== Поле 5x5, Форма 5
	.BASE
F5:	.DB 0		;максимальный номер элемента 
	.DBB F5DE, F5PI, F5PO, F5PL, F5PR, F5RI, F5KM

F5DE:	;таблица флагов действий
	.DB 31		; 00 01 11 11 = выход + обрввод + обрвыбор

F5PI:	
F5PO:	
F5PL:	
F5PR:	.DB 0,0

F5RI:	; рисунок экранной формы

	.DB TYPE, 254 			; шрифт 254 - загружаемый
	.DB ATYPE
	.DA FONT12M

	.DB TAB, 1, 1
	.DB TXTB, 0
	.DA STR0
	.DB TAB, 1, 13
	.DB TXTB, 0
	.DA STR1
	.DB TAB, 1, 25
	.DB TXTB, 0, 
	.DA STR2
	.DB TAB, 1, 37
	.DB TXTB, 0
	.DA STR3
	.DB TAB, 1, 49
	.DB TXTB, 0
	.DA STR4

	.DB TAB, 1, 61
	.DB SQU, 0, 61, 1

	.DB TAB, 61, 1
	.DB SQU, 0, 1, 61

	.DB LCALL
	.DA FXS1

F5KM0:	.DB END

F5KM:	.DBB F5KM0
			

; F6 ====================================================== Поле 6x6, Форма 6
	.BASE
F6:	.DB 0		;максимальный номер элемента 
	.DBB F6DE, F6PI, F6PO, F6PL, F6PR, F6RI, F6KM

F6DE:	;таблица флагов действий
	.DB 31		; 00 01 11 11 = выход + обрввод + обрвыбор

F6PI:	
F6PO:	
F6PL:	
F6PR:	.DB 0,0

F6RI:	; рисунок экранной формы

	.DB TYPE, 254 			; шрифт 254 - загружаемый
	.DB ATYPE
	.DA FONT9M

	.DB TAB, 4, 4
	.DB TXTB, 0
	.DA STR0
	.DB TAB, 4, 13
	.DB TXTB, 0
	.DA STR1
	.DB TAB, 4, 22
	.DB TXTB, 0, 
	.DA STR2
	.DB TAB, 4, 31
	.DB TXTB, 0
	.DA STR3
	.DB TAB, 4, 40
	.DB TXTB, 0
	.DA STR4
	.DB TAB, 4, 49
	.DB TXTB, 0
	.DA STR5

	.DB TAB, 4, 58
	.DB SQU, 0, 55, 1

	.DB TAB, 58, 4
	.DB SQU, 0, 1, 55

	.DB LCALL
	.DA FXS1

F6KM0:	.DB END

F6KM:	.DBB F6KM0
			

; F7 ====================================================== Поле 7x7, Форма 7
	.BASE
F7:	.DB 0		;максимальный номер элемента 
	.DBB F7DE, F7PI, F7PO, F7PL, F7PR, F7RI, F7KM

F7DE:	;таблица флагов действий
	.DB 31		; 00 01 11 11 = выход + обрввод + обрвыбор

F7PI:	
F7PO:	
F7PL:	
F7PR:	.DB 0,0

F7RI:	; рисунок экранной формы

	.DB TYPE, 254 			; шрифт 254 - загружаемый
	.DB ATYPE
	.DA FONT9M

	.DB TAB, 0, 0
	.DB TXTB, 0
	.DA STR0
	.DB TAB, 0, 9
	.DB TXTB, 0
	.DA STR1
	.DB TAB, 0, 18
	.DB TXTB, 0, 
	.DA STR2
	.DB TAB, 0, 27
	.DB TXTB, 0
	.DA STR3
	.DB TAB, 0, 36
	.DB TXTB, 0
	.DA STR4
	.DB TAB, 0, 45
	.DB TXTB, 0
	.DA STR5
	.DB TAB, 0, 54
	.DB TXTB, 0
	.DA STR6

	.DB TAB, 0, 63
	.DB SQU, 0, 64, 1

	.DB TAB, 63, 0
	.DB SQU, 0, 1, 63

	.DB LCALL
	.DA FXS1

F7KM0:	.DB END

F7KM:	.DBB F7KM0
	

; F8 ====================================================== Поле 8x8, Форма 8
	.BASE
F8:	.DB 0		;максимальный номер элемента 
	.DBB F8DE, F8PI, F8PO, F8PL, F8PR, F8RI, F8KM

F8DE:	;таблица флагов действий
	.DB 31		; 00 01 11 11 = выход + обрввод + обрвыбор

F8PI:	
F8PO:	
F8PL:	
F8PR:	.DB 0,0

F8RI:	; рисунок экранной формы

	.DB TYPE, 254 			; шрифт 254 - загружаемый
	.DB ATYPE
	.DA FONT7M

	.DB TAB, 4, 4
	.DB TXTB, 0
	.DA STR0
	.DB TAB, 4, 11
	.DB TXTB, 0
	.DA STR1
	.DB TAB, 4, 18
	.DB TXTB, 0, 
	.DA STR2
	.DB TAB, 4, 25
	.DB TXTB, 0
	.DA STR3
	.DB TAB, 4, 32
	.DB TXTB, 0
	.DA STR4
	.DB TAB, 4, 39
	.DB TXTB, 0
	.DA STR5
	.DB TAB, 4, 46
	.DB TXTB, 0
	.DA STR6
	.DB TAB, 4, 53
	.DB TXTB, 0
	.DA STR7

	.DB TAB, 4, 60
	.DB SQU, 0, 57, 1

	.DB TAB, 60, 4
	.DB SQU, 0, 1, 57

	.DB LCALL
	.DA FXS1

F8KM0:	.DB END

F8KM:	.DBB F8KM0
	


; F9 ====================================================== Поле 9x9, Форма 9
	.BASE
F9:	.DB 0		;максимальный номер элемента 
	.DBB F9DE, F9PI, F9PO, F9PL, F9PR, F9RI, F9KM

F9DE:	;таблица флагов действий
	.DB 31		; 00 01 11 11 = выход + обрввод + обрвыбор

F9PI:	
F9PO:	
F9PL:	
F9PR:	.DB 0,0

F9RI:	; рисунок экранной формы

	.DB TYPE, 254 			; шрифт 254 - загружаемый
	.DB ATYPE
	.DA FONT7M

	.DB TAB, 0, 0
	.DB TXTB, 0
	.DA STR0
	.DB TAB, 0, 7
	.DB TXTB, 0
	.DA STR1
	.DB TAB, 0, 14
	.DB TXTB, 0, 
	.DA STR2
	.DB TAB, 0, 21
	.DB TXTB, 0
	.DA STR3
	.DB TAB, 0, 28
	.DB TXTB, 0
	.DA STR4
	.DB TAB, 0, 35
	.DB TXTB, 0
	.DA STR5
	.DB TAB, 0, 42
	.DB TXTB, 0
	.DA STR6
	.DB TAB, 0, 49
	.DB TXTB, 0
	.DA STR7
	.DB TAB, 0, 56
	.DB TXTB, 0
	.DA STR8

	.DB TAB, 0, 63
	.DB SQU, 0, 64, 1

	.DB TAB, 63, 0
	.DB SQU, 0, 1, 63

	.DB LCALL
	.DA FXS1

F9KM0:	.DB END

F9KM:	.DBB F9KM0
		

;======================================= для F1...F9

F_KURSOR:	.DB 24,0	; курсор

FXS1:	; курсор
	.DB LDX
	.DA KXP
	.DB LDY
	.DA KYP
	.DB TXTP, 19	; вывод с XOR
	.DA F_KURSOR
	.DB RETUL


; F10 ====================================================== Заряд, Форма 10
	.BASE
F10:	.DB 0		;максимальный номер элемента 
	.DBB F10DE, F10PI, F10PO, F10PL, F10PR, F10RI, F10KM

F10DE:	;таблица флагов действий
	.DB 191		; 10 11 11 11 = обрвыход + обрввод + обрвыбор
			; без очистки

F10PI:	
F10PO:	
F10PL:	
F10PR:	.DB 0,0

F10RI:	; рисунок экранной формы

	.DB TYPE, 0	; Шрифт 0

	.DB LCALL
	.DA F10S0

	.DB TAB, 12, 5
	.DB TXTP, 16
	.DA F10T1

	.DB LCALL
	.DA F10S1

F10KM0:	.DB END

F10KM:	.DBB F10KM0
	
F10T1:	.TEXT "Заряд разминирования\0"

; строки для F10 и F11
F10T2:	.TEXT "Направление: \0"
F10T3:	.TEXT "1. Указать направление\0"
F10T4:	.TEXT "клавишей ВЫБОР.\0"
F10T5:	.TEXT "2. Нажать клавишу ВВОД.\0"
F10T6:	.TEXT "Для отмены - ВЫХОД.\0"

; F11 ====================================================== Пехота, Форма 11
	.BASE
F11:	.DB 0		;максимальный номер элемента 
	.DBB F11DE, F11PI, F11PO, F11PL, F11PR, F11RI, F11KM

F11DE:	;таблица флагов действий
	.DB 191		; 10 11 11 11 = обрвыход + обрввод + обрвыбор
			; без очистки

F11PI:	
F11PO:	
F11PL:	
F11PR:	.DB 0,0

F11RI:	; рисунок экранной формы

	.DB TYPE, 0	; Шрифт 0

	.DB LCALL
	.DA F10S0

	.DB TAB, 52, 5
	.DB TXTP, 16
	.DA F11T1

	.DB LCALL
	.DA F10S1

F11KM0:	.DB END

F11KM:	.DBB F11KM0
	
F11T1:	.TEXT "Пехота\0"

; F12 ====================================================== Пехота в ПП, Форма 12
	.BASE
F12:	.DB 0		;максимальный номер элемента 
	.DBB F12DE, F12PI, F12PO, F12PL, F12PR, F12RI, F12KM

F12DE:	;таблица флагов действий
	.DB 191		; 10 11 11 11 = обрвыход + обрввод + обрвыбор
			; без очистки

F12PI:	
F12PO:	
F12PL:	
F12PR:	.DB 0,0

F12RI:	; рисунок экранной формы

	.DB TYPE, 0	; Шрифт 0

	.DB LCALL
	.DA F10S0

	.DB TAB, 7, 5
	.DB TXTP, 16
	.DA F12T1

	.DB LCALL
	.DA F10S1

F12KM0:	.DB END

F12KM:	.DBB F12KM0

F12T1:	.TEXT "Пехота в бронекостюмах\0"

; ==================== подпрограммы вывода для F10-F12
F10S0:
	.DB TAB, 2, 2
	.DB SQU, 4, 124, 60	
	.DB TAB, 3, 3
	.DB FRAME, 0, 122, 58	; окно
	.DB RETUL

F10S1:
	.DB TAB, 7, 13
	.DB TXTP, 16
	.DA F10T2

	.DB TAB, 90, 13
	.DB TXTB, 16
	.DA F10TB

	.DB TAB, 7, 23
	.DB SQU, 0, 114, 1

	.DB TAB, 7, 25
	.DB TXTP, 16
	.DA F10T3

	.DB TAB, 7, 33
	.DB TXTP, 16
	.DA F10T4

	.DB TAB, 7, 41
	.DB TXTP, 16
	.DA F10T5

	.DB TAB, 7, 49
	.DB TXTP, 16
	.DA F10T6
	.DB RETUL

; F13 ====================================================== Расширение, Форма 13
	.BASE
F13:	.DB 4		;максимальный номер элемента 
	.DBB F13DE, F13PI, F13PO, F13PL, F13PR, F13RI, F13KM

F13DE:	;таблица флагов действий
	.DB 61,61,61,61,61		; 00 11 11 01 = обрвыход + обрввод + выбор
			
F13PI:	
F13PO:	.DB 0,0,0,0,0,0,0,0,0,0	; не используются

F13PL:	.DB 4,0
F13PR:	.DB 1,2,3,4,0

F13RI:	; рисунок экранной формы

	.DB TYPE, 0	; Шрифт 0

	.DB LCALL
	.DA F10S0

	.DB TAB, 6, 6
	.DB DRAWP, 0
	.DA RISF13

	.DB TAB, 32, 6
	.DB TXTP, 16
	.DA F13T1

	.DB TAB, 64, 14
	.DB TXTP, 16
	.DA F13T2

	.DB TAB, 24, 24
	.DB SQU, 0, 100, 1

	.DB TAB, 8, 36
	.DB DRAWP, 0
	.DA RISF13A

	.DB TAB, 32, 36
	.DB DRAWP, 0
	.DA RISF13B

	.DB TAB, 56, 36
	.DB DRAWP, 0
	.DA RISF13C

	.DB TAB, 80, 36
	.DB DRAWP, 0
	.DA RISF13D

	.DB TAB, 104, 36
	.DB DRAWP, 0
	.DA RISF13E

	.DB END

F13KM:	.DBB F13KM0,F13KM1,F13KM2,F13KM3,F13KM4

F13KM0:	.DB TAB, 6, 28
	.DB JM
	.DBB F13KME
F13KM1:	.DB TAB, 30, 28
	.DB JM
	.DBB F13KME
F13KM2:	.DB TAB, 54, 28
	.DB JM
	.DBB F13KME
F13KM3:	.DB TAB, 78, 28
	.DB JM
	.DBB F13KME
F13KM4:	.DB TAB, 102, 28
	.DB JM
	.DBB F13KME
F13KME:	.DB FRAME, 0, 19, 30
	.DB END			

F13T1:	.TEXT "Расширение\0"
F13T2:	.TEXT "сознания\0"

; F14 ====================================================== Допрос, Форма 14
	.BASE
F14:	.DB 4		;максимальный номер элемента 
	.DBB F14DE, F14PI, F14PO, F14PL, F14PR, F14RI, F14KM

F14DE:	;таблица флагов действий
	.DB 61,61,61,61,61		; 00 11 11 01 = обрвыход + обрввод + выбор
			
F14PI:	
F14PO:	.DB 0,0,0,0,0,0,0,0,0,0	; не используются

F14PL:	.DB 0,0,1,2,3
F14PR:	.DB 1,2,3,4,4

F14RI:	; рисунок экранной формы

	.DB TYPE, 0	; Шрифт 0

	.DB LCALL
	.DA F10S0

	.DB LCALL
	.DA F14S0

	.DB TAB, 32, 16
	.DB TXTP, 16
	.DA F14T2

	.DB TAB, 100, 16
	.DB PREXP, 16
	.DA ZPLEN

	.DB TAB, 32, 24
	.DB TXTP, 16
	.DA F14T3

	.DB TAB, 100, 24
	.DB PREXP, 16
	.DA XPLEN

	.DB TAB, 32, 32
	.DB TXTP, 16
	.DA F14T4

	.DB TAB, 100, 32
	.DB PREXP, 16
	.DA YPLEN

	.DB TAB, 14, 48
	.DB FRAME, 0, 100, 8

	.DB END

F14KM:	.DBB F14KM0,F14KM1,F14KM2,F14KM3,F14KM4


F14KM4:	.DB TAB, 96, 50
	.DB SQU, 0, 16, 4
F14KM3:	.DB TAB, 76, 50
	.DB SQU, 0, 16, 4
F14KM2:	.DB TAB, 56, 50
	.DB SQU, 0, 16, 4
F14KM1:	.DB TAB, 36, 50
	.DB SQU, 0, 16, 4
F14KM0:	.DB TAB, 16, 50
	.DB SQU, 0, 16, 4
	.DB END


F14T1:	.TEXT "Допрос\0"
F14T2:	.TEXT "Звание:\0"
F14T3:	.TEXT "Стойкость:\0"
F14T4:	.TEXT "Состояние:\0"


; F15 ====================================================== Допрос - есть информация, Форма 15
	.BASE
F15:	.DB 1		;максимальный номер элемента 
	.DBB F15DE, F15PI, F15PO, F15PL, F15PR, F15RI, F15KM

F15DE:	;таблица флагов действий
	.DB 61,61		; 00 11 11 01 = обрвыход + обрввод + выбор
			
F15PI:	
F15PO:	.DB 0,0,0,0	; не используются
F15PL:	
F15PR:	.DB 1,0

F15RI:	; рисунок экранной формы

	.DB TYPE, 0	; Шрифт 0

	.DB LCALL
	.DA F10S0

	.DB LCALL
	.DA F14S0

	.DB TAB, 26, 16
	.DB TXTP, 16
	.DA F15T1

	.DB TAB, 100, 16
	.DB PREXP, 16
	.DA DOST

	.DB TAB, 26, 24
	.DB TXTP, 16
	.DA F15T2

	.DB TAB, 100, 24
	.DB PREXP, 16
	.DA RMINESPL

	.DB TAB, 26, 32
	.DB TXTP, 16
	.DA F15T3
	
	.DB TAB, 100, 32
	.DB PREXP, 16
	.DA MTIMEPL

	.DB TAB, 3, 41
	.DB SQU, 0, 122, 1
	
	.DB TAB, 40, 43
	.DB TXTP, 16
	.DA F15T4

	.DB TAB, 42, 51
	.DB TXTP, 16
	.DA F15T5

	.DB END

F15KM:	.DBB F15KM0,F15KM1


F15KM0:	.DB TAB, 30, 43
	.DB JM
	.DBB F15KME
F15KM1:	.DB TAB, 30, 51
F15KME:	
	.DB DRAWP, 0	; 2=ИЛИ
	.DA RISF22B
	.DB END

F15T1:	.TEXT "Достоверность:\0"
F15T2:	.TEXT "Количество:\0"
F15T3:	.TEXT "Время, с:\0"
F15T4:	.TEXT "Продолжить\0"
F15T5:	.TEXT "Завершить\0"

; F16 ====================================================== Допрос - нет информации, Форма 16
	.BASE
F16:	.DB 1		;максимальный номер элемента 
	.DBB F16DE, F16PI, F16PO, F16PL, F16PR, F16RI, F16KM

F16DE:	;таблица флагов действий
	.DB 61,61		; 00 11 11 01 = обрвыход + обрввод + выбор
			
F16PI:	
F16PO:	.DB 0,0,0,0	; не используются
F16PL:	
F16PR:	.DB 1,0

F16RI:	; рисунок экранной формы

	.DB TYPE, 0	; Шрифт 0

	.DB LCALL
	.DA F10S0

	.DB LCALL
	.DA F14S0

	.DB TAB, 24, 24
	.DB TXTP, 16
	.DA F16T1

	.DB TAB, 3, 41
	.DB SQU, 0, 122, 1

	.DB TAB, 40, 43
	.DB TXTP, 16
	.DA F15T4

	.DB TAB, 42, 51
	.DB TXTP, 16
	.DA F15T5

	.DB END

F16KM:	.DBB F16KM0,F16KM1


F16KM0:	.DB TAB, 30, 43
	.DB JM
	.DBB F16KME
F16KM1:	.DB TAB, 30, 51
F16KME:	.DB DRAWP, 0
	.DA RISF22B
	.DB END

F16T1:	.TEXT "Сведений не получено\0"

; F17 ====================================================== Допрос - невозможен, Форма 17
	.BASE
F17:	.DB 0		;максимальный номер элемента 
	.DBB F17DE, F17PI, F17PO, F17PL, F17PR, F17RI, F17KM

F17DE:	;таблица флагов действий
	.DB 61		; 00 11 11 01 = обрвыход + обрввод + выбор
			
F17PI:	
F17PO:	
F17PL:	
F17PR:	.DB 0,0

F17RI:	; рисунок экранной формы

	.DB TYPE, 0	; Шрифт 0

	.DB LCALL
	.DA F10S0

	.DB LCALL
	.DA F14S0

	.DB TAB, 32, 24
	.DB TXTP, 16
	.DA F17T1

	.DB TAB, 3, 41
	.DB SQU, 0, 122, 1

	.DB TAB, 9, 48
	.DB TXTP, 16
	.DA F17T2
F17KM0:	.DB END

F17KM:	.DBB F17KM0
 
F17T1:	.TEXT "Сведений нет\0"
F17T2:	.TEXT "Продолжение невозможно\0"

; ============================ подпрограмма для F14...F17
F14S0:
	.DB TAB, 10, 20
	.DB DRAWP, 0
	.DA RISF14

	.DB TAB, 48, 5
	.DB TXTP, 16
	.DA F14T1

	.DB TAB, 30, 14
	.DB SQU, 0, 94, 1	

	.DB RETUL

; F18 ================================================== Информация о программе, форма 18

	.BASE
F18:	.DB 0		;максимальный номер элемента 
	.DBB F18DE, F18PI, F18PO, F18PL, F18PR, F18RI, F18KM

F18DE:	;таблица флагов действий
	.DB 20	; 00 01 01 00 = выбор + выход

F18PI:	
F18PO:	
F18PL:	
F18PR:	.DB 0,2

F18RI:	; рисунок экранной формы
	.DB TYPE, 0h 			; шрифт 0

	.DB TAB, 4, 4
	.DB FRAME, 0, 120, 56	; окно

	.DB TAB, 11,0 
	.DB DRAWP, 0
	.DA RISF22B

	.DB TAB, 18,55 
	.DB DRAWP, 0
	.DA RISF22D

	.DB TAB, 32,55 
	.DB DRAWP, 0
	.DA RISF22C

	.DB TAB, 2,8
	.DB DRAWP, 0
	.DA RISF22H

	.DB TAB, 121,20 
	.DB DRAWP, 0
	.DA RISF22H

	.DB TAB, 36, 6 		
	.DB TXTP, 16
	.DA F18T0
	.DB TAB, 12, 16
	.DB TXTP, 16
	.DA F18T1
	.DB TAB, 12, 24		
	.DB TXTP, 16
	.DA F18T2
	.DB TAB, 8, 32 		
	.DB TXTP, 16
	.DA F18T3
	.DB TAB, 8, 40 		
	.DB TXTP, 16
	.DA F18T4
	.DB TAB, 8, 48 		
	.DB TXTP, 16
	.DA F18T5
F18KM0:	.DB END

F18KM:	.DBB F18KM0

F18T0:	.TEXT "Игра Сапёр\0"	
F18T1:	.TEXT "Цель - отметить все\0"
F18T2:	.TEXT "мины и отрапортовать.\0"
F18T3:	.TEXT "Клавиши: Ввод, F, B"
	.DB 198,44,0
F18T4:	.TEXT "K, P, Cx, ИП, П, БП, ПП.\0"

F18T5:	.TEXT "Версия 1.3 от 07.11.12.\0"

; F19 ================================================== Время, форма 19

	.BASE
F19:	.DB 0		;максимальный номер элемента 
	.DBB F19DE, F19PI, F19PO, F19PL, F19PR, F19RI, F19KM

F19DE:	;таблица флагов действий
	.DB 148	; 10 01 01 00 = без перерисовки + выбор + выход

F19PI:	
F19PO:
F19PL:
F19PR:	.DB 0,0

F19RI:	; рисунок экранной формы
	.DB TYPE, 0h 			; шрифт 0

	.DB TAB, 16, 18
	.DB SQU, 4, 96, 28	
	.DB TAB, 17, 19
	.DB FRAME, 0, 94, 26	; окно

	.DB TAB, 20, 24
	.DB DRAWP, 0
	.DA RISF19

	.DB TAB, 40, 28	
	.DB TXTP, 16
	.DA F19T1

F19KM0:	.DB END

F19KM:	.DBB F19KM0
		
F19T1:	.TEXT "Время истекло\0"

; F20 ================================================== Конец, форма 20

	.BASE
F20:	.DB 0		;максимальный номер элемента 
	.DBB F20DE, F20PI, F20PO, F20PL, F20PR, F20RI, F20KM

F20DE:	;таблица флагов действий
	.DB 148	; 10 01 01 00 = без перерисовки + выбор + выход

F20PI:	
F20PO:
F20PL:
F20PR:	.DB 0,0

F20RI:	; рисунок экранной формы
	.DB TYPE, 0h 			; шрифт 0

	.DB TAB, 2, 2
	.DB SQU, 4, 124, 40	
	.DB TAB, 3, 3
	.DB FRAME, 0, 122, 38	; окно

	.DB TAB, 6, 6
	.DB DRAWP, 0
	.DA RISF20

	.DB TAB, 56, 6
	.DB TXTP, 16
	.DA F20T0

	.DB TAB, 40, 20	
	.DB TXTP, 16
	.DA F20T1

	.DB TAB, 70, 30	
	.DB TXTP, 16
	.DA F20T2

	.DB END

F20KM:	.DBB F20KM0
F20KM0:	.DB END			

F20T0:	.TEXT "Ошибка\0"	
F20T1:	.TEXT "Разминирование\0"
F20T2:	.TEXT "завершено\0"

; F21 ================================================== Ошибка заряда, форма 21

	.BASE
F21:	.DB 0		;максимальный номер элемента 
	.DBB F21DE, F21PI, F21PO, F21PL, F21PR, F21RI, F21KM

F21DE:	;таблица флагов действий
	.DB 20	; 00 01 01 00 = выход + ввод

F21PI:	
F21PO:
F21PL:
F21PR:	.DB 0,0

F21RI:	; рисунок экранной формы
	.DB TYPE, 0h 			; шрифт 0

	.DB TAB, 2, 2
	.DB SQU, 4, 124, 58	
	.DB TAB, 3, 3
	.DB FRAME, 0, 122, 56	; окно

	.DB TAB, 6, 6
	.DB DRAWP, 0
	.DA RISF21

	.DB TAB, 40, 6
	.DB TXTP, 16
	.DA F21T0

	.DB TAB, 60, 14	
	.DB TXTP, 16
	.DA F21T1

	.DB TAB, 30, 23
	.DB SQU, 0, 94, 1	

	.DB TAB, 8, 24	
	.DB TXTP, 16
	.DA F21T2

	.DB TAB, 16, 32	
	.DB TXTP, 16
	.DA F21T3

	.DB TAB, 26, 40	
	.DB TXTP, 16
	.DA F21T4

	.DB TAB, 40, 48	
	.DB TXTP, 16
	.DA F21T5

F21KM0:	.DB END

F21KM:	.DBB F21KM0
	
F21T0:	.TEXT "Неаккуратное\0"
F21T1:	.TEXT "обращение\0"
F21T2:	.TEXT "Только в опытных руках\0"
F21T3:	.TEXT "средства борьбы\0"
F21T4:	.TEXT "становятся\0"
F21T5:	.TEXT "грозным оружием.\0"


; F22 ================================================== Ошибка направления, форма 22

	.BASE
F22:	.DB 0		;максимальный номер элемента 
	.DBB F22DE, F22PI, F22PO, F22PL, F22PR, F22RI, F22KM

F22DE:	;таблица флагов действий
	.DB 20	; 00 01 01 00 = выход + ввод

F22PI:	
F22PO:
F22PL:
F22PR:	.DB 0,0

F22RI:	; рисунок экранной формы
	.DB TYPE, 0h 			; шрифт 0

	.DB TAB, 7, 7
	.DB SQU, 4, 114, 36	
	.DB TAB, 8, 8
	.DB FRAME, 0, 112, 34	; окно

	.DB TAB, 44,4 
	.DB DRAWP, 0
	.DA RISF22A

	.DB TAB, 77,4 
	.DB DRAWP, 0
	.DA RISF22B

	.DB TAB, 12,37 
	.DB DRAWP, 0
	.DA RISF22C

	.DB TAB, 66,37 
	.DB DRAWP, 0
	.DA RISF22D

	.DB TAB, 99,37 
	.DB DRAWP, 0
	.DA RISF22E

	.DB TAB, 6,16
	.DB DRAWP, 0
	.DA RISF22F

	.DB TAB, 117,32 
	.DB DRAWP, 0
	.DA RISF22G

	.DB TAB, 40, 14
	.DB TXTP, 16
	.DA F22T0

	.DB TAB, 20, 24	
	.DB TXTP, 16
	.DA F22T1

F22KM0:	.DB END

F22KM:	.DBB F22KM0
	
F22T0:	.TEXT "Отстранены\0"
F22T1:	.TEXT "за нерешительность\0"

; F23 ====================================================== Рапорт, Форма 23
	.BASE
F23:	.DB 0		;максимальный номер элемента 
	.DBB F23DE, F23PI, F23PO, F23PL, F23PR, F23RI, F23KM

F23DE:	;таблица флагов действий
	.DB 20		; 00 01 01 00 = выход + ввод
			
F23PI:	
F23PO:
F23PL:	
F23PR:	.DB 0,0		; F0E0

F23RI:	; рисунок экранной формы

	.DB TYPE, 0	; Шрифт 0

	.DB LCALL
	.DA F10S0

	.DB TAB, 48, 5
	.DB TXTP, 16
	.DA F23T0

	.DB TAB, 20, 14
	.DB SQU, 0, 105, 1	

	.DB TAB, 10, 16
	.DB TXTP, 16
	.DA F23T5

	.DB TAB, 100, 16
	.DB PREXP, 16
	.DA RAZMER

	.DB TXTP, 16
	.DA F23T6

	.DB PREXP, 16
	.DA RAZMER

	.DB TAB, 10, 24
	.DB TXTP, 16
	.DA F23T1

	.DB TAB, 100, 24
	.DB PREXP, 16
	.DA RMINESPL

	.DB TAB, 10, 32
	.DB TXTP, 16
	.DA F23T2

	.DB TAB, 100, 32
	.DB PREXP, 16
	.DA MTIMEPL

	.DB TAB, 3, 41
	.DB SQU, 0, 122, 1

	.DB TAB, 10, 50

	.DB JNEZ 
	.DA FRAPORT
	.DBB F23RI1

	.DB TXTP, 16
	.DA F23T3
	.DB END
F23RI1:		
	.DB TXTP, 16
	.DA F23T4

	.DB TAB, 10, 42
	.DB TXTP, 16
	.DA F23T1

	.DB TAB, 100, 42
	.DB PREXP, 16
	.DA RMINES

F23KM0:	.DB END

F23KM:	.DBB F23KM0
	
F23T0:	.TEXT "Рапорт\0"
F23T1:	.TEXT "Количество мин:\0"
F23T2:	.TEXT "Время, с:\0"
F23T3:	.TEXT "Принят\0"
F23T4:	.TEXT "Проявлена халатность\0"
F23T5:	.TEXT "Поле:\0"
F23T6:	.DB 179,0	; умножение

; F24 ================================================== Настройка, форма 24

	.BASE
F24:	.DB 4		;максимальный номер элемента 
	.DBB F24DE, F24PI, F24PO, F24PL, F24PR, F24RI, F24KM

F24DE:	;таблица флагов действий
	.DB 61,61,61,61,61	; 00 11 11 01 = выход + ввод + выбор

F24PI:	
F24PO:	.DB 0,1,0,1,0,1,0,1,0,1
F24PL:	.DB 4,0
F24PR:	.DB 1,2,3,4,0

F24RI:	; рисунок экранной формы
	.DB TYPE, 0h 			; шрифт 0

	.DB TAB, 3, 3
	.DB FRAME, 0, 122, 56	; окно

	.DB TAB, 40, 4
	.DB TXTP, 16
	.DA F24T0

	.DB TAB, 30, 13
	.DB SQU, 0, 94, 1	

	; размер
	.DB TAB, 8, 16
	.DB TXTP, 16
	.DA F24T1

	.DB TAB, 70, 16
	.DB PREXP, 16
	.DA RAZMER

	.DB TXTP, 16
	.DA F23T6

	.DB PREXP, 16
	.DA RAZMER

	; топология
	.DB TAB, 8, 24
	.DB TXTP, 16
	.DA F24T2

	.DB TAB, 70, 24

	.DB JNEZ
	.DA TOR
	.DBB F24RI1

	.DB TXTP, 16
	.DA F24T20

	.DB JM
	.DBB F24RI2
F24RI1:
	.DB TXTP, 16
	.DA F24T21

F24RI2:
	; перемещение
	.DB TAB, 8, 32
	.DB TXTP, 16
	.DA F24T3

	.DB TAB, 70, 32

	.DB JNEZ
	.DA SOSED
	.DBB F24RI3

	.DB TXTP, 16
	.DA F24T30

	.DB JM
	.DBB F24RI4
F24RI3:
	.DB TXTP, 16
	.DA F24T31

F24RI4:
	; мины
	.DB TAB, 8, 40
	.DB TXTP, 16
	.DA F24T4

	.DB TAB, 70, 40

	.DB JNEZ
	.DA FMINES
	.DBB F24RI5

	.DB TXTP, 16
	.DA F24T40

	.DB JM
	.DBB F24RI6
F24RI5:
	.DB PREXP, 16
	.DA NMINES
F24RI6:
	; дополнительные возможности
	.DB TAB, 8, 48
	.DB TXTP, 16
	.DA F24T5

	.DB TAB, 70, 48

	.DB JNEZ
	.DA FDV
	.DBB F24RI7

	.DB TXTP, 16
	.DA F24T50

	.DB JM
	.DBB F24RI9
F24RI7:
	.DB JNEZ
	.DA FDV1
	.DBB F24RI8

	.DB TXTP, 16
	.DA F24T40

	.DB JM
	.DBB F24RI9

F24RI8:
	.DB TXTP, 16
	.DA F24T51
F24RI9:
	.DB END

F24KM:	.DBB F24KM0,F24KM1,F24KM2,F24KM3,F24KM4
F24KM0: .DB TAB, 1, 16
	.DB JM
	.DBB F24KME
F24KM1: .DB TAB, 1, 24
	.DB JM
	.DBB F24KME
F24KM2: .DB TAB, 1, 32
	.DB JM
	.DBB F24KME
F24KM3: .DB TAB, 1, 40
	.DB JM
	.DBB F24KME
F24KM4: .DB TAB, 1, 48
F24KME:	
	.DB DRAWP, 2
	.DA RISF22G
	.DB END		

F24T0:	.TEXT "Настройка\0"
F24T1:	.TEXT "Размер поля\0"
F24T2:	.TEXT "Топология\0"
F24T20:	.TEXT "квадрат\0"
F24T21:	.TEXT "тор\0"
F24T3:	.TEXT "Перемещение\0"
F24T30:	.TEXT "свободное\0"
F24T31:	.TEXT "по границе\0"
F24T4:	.TEXT "Мины\0"
F24T40:	.TEXT "случайно\0"
F24T5:	.TEXT "Доп. возм.\0"
F24T50:	.TEXT "нет\0"
F24T51:	.TEXT "соразмерно\0"


;============================================= Ошибка интерфейса - форма 252
; Сообщение об ошибке STR1 в форме RB элемент RC
; В отлаженной программе эта форма не вызывается

	.BASE
F252:	.DB 0		;максимальный номер элемента 
	.DBB F252DE, F252PI, F252PO, F252PL, F252PR, F252RI, F252KM

F252DE:	;таблица флагов действий
	.DB 20	; 00 01 01 00 

F252PI:	
F252PO:	
F252PL:	
F252PR:	.DB 0,0

F252RI:	; рисунок экранной формы
	.DB TYPE, 0h 			; шрифт 0
	.DB TAB, 12, 0 		; позиция 
	.DB TXTP, 16
	.DA F252T0
	.DB TAB, 0, 16 		; позиция
	.DB TXTP, 16
	.DA F252T1
	.DB TAB, 0, 24 		; позиция
	.DB TXTP, 16
	.DA F252T2

	.DB TAB, 60, 16 	; позиция
	.DB PREXP, 16
	.DB 0, 11		; RB - форма

	.DB TAB, 60, 24 	; позиция
	.DB PREXP, 16
	.DB 0, 12		; RС - элемент

	.DB TAB, 0, 48 		; позиция
	.DB TXTB, 16
	.DA STR1		; текст из STR1

F252KM0: .DB END

F252KM:	.DBB F252KM0

F252T0:	.TEXT "ОШИБКА ИНТЕРФЕЙСА\0"	
F252T1:	.TEXT "Форма\0"	
F252T2:	.TEXT "Элемент\0"	


;======================================= Загружаемый шрифт M

	.BASE
FONT7M:	.DB 7	; высота шрифта

	.DB 10,7	; символ 10 - пустая клетка
	.DWB CHAR7M10

	.DB 11,7	; символ 11 - 1
	.DWB CHAR7M11

	.DB 12,7	; символ 12 - 2
	.DWB CHAR7M12

	.DB 13,7	; символ 13 - 3
	.DWB CHAR7M13

	.DB 14,7	; символ 14 - 4
	.DWB CHAR7M14

	.DB 15,7	; символ 15 - 5
	.DWB CHAR7M15

	.DB 16,7	; символ 16 - 6
	.DWB CHAR7M16

	.DB 17,7	; символ 17 - 7
	.DWB CHAR7M17

	.DB 18,7	; символ 18 - 8
	.DWB CHAR7M18

	.DB 19,7	; символ 19 - неисследованная область
	.DWB CHAR7M19

	.DB 20,7	; символ 20 - флаг "?"
	.DWB CHAR7M20

	.DB 21,7	; символ 21 - флаг "мина"
	.DWB CHAR7M21

	.DB 22,7	; символ 22 - открытая мина
	.DWB CHAR7M22

	.DB 23,7	; символ 23 - ошибочная мина
	.DWB CHAR7M23

	.DB 24,7	; символ 24 - курсор
	.DWB CHAR7M24

	.DB 25,7	; символ 25 - взрыв
	.DWB CHAR7M25

	.DB 26,7	; символ 26 - вертикаль
	.DWB CHAR7M26

	.DB 27,7	; символ 27 - горизонталь
	.DWB CHAR7M27
	
	.DB 28,7	; символ 28 - следы вертикаль
	.DWB CHAR7M28

	.DB 29,7	; символ 29 - следы горизонталь
	.DWB CHAR7M29

	.DB END

CHAR7M10:	.DB 7Fh,1,1,1,1,1,1

CHAR7M11:	.DB 7Fh,1,1,9,3Dh,1,1

CHAR7M12:	.DB 7Fh,1,1,35h,2Dh,1,1

CHAR7M13:	.DB 7Fh,1,1,25h,3Dh,1,1

CHAR7M14:	.DB 7Fh,1,1,0Dh,3Dh,1,1

CHAR7M15:	.DB 7Fh,1,1,2Dh,35h,1,1

CHAR7M16:	.DB 7Fh,1,1,3Dh,35h,1,1

CHAR7M17:	.DB 7Fh,1,1,35h,0Dh,1,1

CHAR7M18:	.DB 7Fh,1,1,3Dh,3Dh,1,1

CHAR7M19:	.DB 7Fh,1,1,19h,19h,1,1

CHAR7M20:	.DB 7Fh,1,7Dh,25h,25h,3Dh,1

CHAR7M21:	.DB 7Fh,1,7Dh,3Dh,3Dh,3Dh,1

CHAR7M22:	.DB 7Fh,1,3Dh,3Dh,3Dh,3Dh,1

CHAR7M23:	.DB 7Fh,1,3Dh,25h,25h,3Dh,1

CHAR7M24:	.DB 0,7Eh,7Eh,7Eh,7Eh,7Eh,7Eh

CHAR7M25:	.DB 7Eh,1,25h,19h,19h,25h,1

CHAR7M26:	.DB 7Eh,1,1,3Dh,3Dh,1,1

CHAR7M27:	.DB 7Eh,1,19h,19h,19h,19h,1

CHAR7M28:	.DB 7Eh,1,1,55h,2Bh,1,1

CHAR7M29:	.DB 7Eh,9,11h,9,11h,9,11h
;--------------------------------------------------- FONT9M
	.BASE
FONT9M:	.DB 9	; высота шрифта

	.DB 10,9	; символ 10 - пустая клетка
	.DWB CHAR9M10

	.DB 11,9	; символ 11 - 1
	.DWB CHAR9M11

	.DB 12,9	; символ 12 - 2
	.DWB CHAR9M12

	.DB 13,9	; символ 13 - 3
	.DWB CHAR9M13

	.DB 14,9	; символ 14 - 4
	.DWB CHAR9M14

	.DB 15,9	; символ 15 - 5
	.DWB CHAR9M15

	.DB 16,9	; символ 16 - 6
	.DWB CHAR9M16

	.DB 17,9	; символ 17 - 7
	.DWB CHAR9M17

	.DB 18,9	; символ 18 - 8
	.DWB CHAR9M18

	.DB 19,9	; символ 19 - неисследованная область
	.DWB CHAR9M19

	.DB 20,9	; символ 20 - флаг "?"
	.DWB CHAR9M20

	.DB 21,9	; символ 21 - флаг "мина"
	.DWB CHAR9M21

	.DB 22,9	; символ 22 - открытая мина
	.DWB CHAR9M22

	.DB 23,9	; символ 23 - ошибочная мина
	.DWB CHAR9M23

	.DB 24,9	; символ 24 - курсор
	.DWB CHAR9M24

	.DB 25,9	; символ 25 - взрыв
	.DWB CHAR9M25

	.DB 26,9	; символ 26 - вертикаль
	.DWB CHAR9M26

	.DB 27,9	; символ 27 - горизонталь
	.DWB CHAR9M27

	.DB 28,9	; символ 28 - следы вертикаль
	.DWB CHAR9M28

	.DB 29,9	; символ 29 - следы горизонталь
	.DWB CHAR9M29

	.DB END

CHAR9M10:	.DB 0FFh,1
		.DB 1,0,1,0,1,0,1,0
		.DB 1,0,1,0,1,0,1,0

CHAR9M11:	.DB 0FFh,1
		.DB 1,0,1,0,1,0,89h,0
		.DB 0FDh,0,81h,0,1,0,1,0

CHAR9M12:	.DB 0FFh,1
		.DB 1,0,1,0,89h,0,0C5h,0
		.DB 0A5h,0,99h,0,1,0,1,0

CHAR9M13:	.DB 0FFh,1
		.DB 1,0,1,0,85h,0,95h,0
		.DB 95h,0,6Dh,0,1,0,1,0

CHAR9M14:	.DB 0FFh,1
		.DB 1,0,1,0,1Dh,0,21h,0
		.DB 21h,0,0FDh,0,1,0,1,0

CHAR9M15:	.DB 0FFh,1
		.DB 1,0,1,0,9Dh,0,95h,0
		.DB 95h,0,65h,0,1,0,1,0

CHAR9M16:	.DB 0FFh,1
		.DB 1,0,1,0,79h,0,95h,0
		.DB 95h,0,61h,0,1,0,1,0

CHAR9M17:	.DB 0FFh,1
		.DB 1,0,1,0,5,0,0E5h,0
		.DB 15h,0,0Dh,0,1,0,1,0

CHAR9M18:	.DB 0FFh,1
		.DB 1,0,1,0,69h,0,95h,0
		.DB 95h,0,69h,0,1,0,1,0

CHAR9M19:	.DB 0FFh,1
		.DB 1,0,1,0,1,0,31h,0
		.DB 31h,0,1,0,1,0,1,0

CHAR9M20:	.DB 0FFh,1
		.DB 1,0,0FDh,0,45h,0,45h,0
		.DB 45h,0,45h,0,7Dh,0,1,0

CHAR9M21:	.DB 0FFh,1
		.DB 1,0,0FDh,0,7Dh,0,7Dh,0
		.DB 7Dh,0,7Dh,0,7Dh,0,1,0

CHAR9M22:	.DB 0FFh,1
		.DB 1,0,0FDh,0,0FDh,0,0FDh,0
		.DB 0FDh,0,0FDh,0,0FDh,0,1,0

CHAR9M23:	.DB 0FFh,1
		.DB 1,0,0FDh,0,85h,0,85h,0
		.DB 85h,0,85h,0,0FDh,0,1,0

CHAR9M24:	.DB 0,0
		.DB 0FEh,1,0FEh,1,0FEh,1,0FEh,1
		.DB 0FEh,1,0FEh,1,0FEh,1,0FEh,1

CHAR9M25:	.DB 0FFh,1
		.DB 1,0,85h,0,49h,0,31h,0
		.DB 31h,0,49h,0,85h,0,1,0

CHAR9M26:	.DB 0FFh,1
		.DB 1,0,1,0,1,0,0FDh,0
		.DB 0FDh,0,1,0,1,0,1,0

CHAR9M27:	.DB 0FFh,1
		.DB 1,0,19h,0,19h,0,19h,0
		.DB 19h,0,19h,0,19h,0,1,0

CHAR9M28:	.DB 0FFh,1
		.DB 1,0,1,0,1,0,55h,1
		.DB 0ABh,0,1,0,1,0,1,0

CHAR9M29:	.DB 0FFh,1
		.DB 11h,0,21h,0,11h,0,21h,0
		.DB 11h,0,21h,0,11h,0,21h,0

;--------------------------------------------------- FONT12M
	.BASE
FONT12M:	
	.DB 12	; высота шрифта

	.DB 10,12	; символ 10 - пустая клетка
	.DWB CHAR12M10

	.DB 11,12	; символ 11 - 1
	.DWB CHAR12M11

	.DB 12,12	; символ 12 - 2
	.DWB CHAR12M12

	.DB 13,12	; символ 13 - 3
	.DWB CHAR12M13

	.DB 14,12	; символ 14 - 4
	.DWB CHAR12M14

	.DB 15,12	; символ 15 - 5
	.DWB CHAR12M15

	.DB 16,12	; символ 16 - 6
	.DWB CHAR12M16

	.DB 17,12	; символ 17 - 7
	.DWB CHAR12M17

	.DB 18,12	; символ 18 - 8
	.DWB CHAR12M18

	.DB 19,12	; символ 19 - неисследованная область
	.DWB CHAR12M19

	.DB 20,12	; символ 20 - флаг "?"
	.DWB CHAR12M20

	.DB 21,12	; символ 21 - флаг "мина"
	.DWB CHAR12M21

	.DB 22,12	; символ 22 - открытая мина
	.DWB CHAR12M22

	.DB 23,12	; символ 23 - ошибочная мина
	.DWB CHAR12M23

	.DB 24,12	; символ 24 - курсор
	.DWB CHAR12M24

	.DB 25,12	; символ 25 - взрыв
	.DWB CHAR12M25

	.DB 26,12	; символ 26 - вертикаль
	.DWB CHAR12M26

	.DB 27,12	; символ 27 - горизонталь
	.DWB CHAR12M27

	.DB 28,12	; символ 28 - следы вертикаль
	.DWB CHAR12M28

	.DB 29,12	; символ 29 - следы горизонталь
	.DWB CHAR12M29

	.DB END

CHAR12M10:	.DB 0FFh,0Fh
		.DB 1,0,1,0,1,0
		.DB 1,0,1,0
		.DB 1,0
		.DB 1,0,1,0
		.DB 1,0,1,0,1,0

CHAR12M11:	.DB 0FFh,0Fh
		.DB 1,0,1,0,1,0
		.DB 11h,4,9,4
		.DB 0FDh,7
		.DB 1,4,1,4
		.DB 1,0,1,0,1,0

CHAR12M12:	.DB 0FFh,0Fh
		.DB 1,0,1,0,1,0
		.DB 9,6,5,5
		.DB 85h,4
		.DB 45h,4,39h,4
		.DB 1,0,1,0,1,0

CHAR12M13:	.DB 0FFh,0Fh
		.DB 1,0,1,0,1,0
		.DB 9,2,5,4
		.DB 25h,4
		.DB 25h,4,0D9h,3
		.DB 1,0,1,0,1,0

CHAR12M14:	.DB 0FFh,0Fh
		.DB 1,0,1,0,1,0
		.DB 0C1h,0,0A1h,0
		.DB 91h,0
		.DB 89h,0,0FDh,7
		.DB 81h,0,1,0,1,0

CHAR12M15:	.DB 0FFh,0Fh
		.DB 1,0,1,0,1,0
		.DB 3Dh,2,25h,4
		.DB 25h,4
		.DB 25h,4,0C5h,3
		.DB 1,0,1,0,1,0

CHAR12M16:	.DB 0FFh,0Fh
		.DB 1,0,1,0,1,0
		.DB 0F9h,3,25h,4
		.DB 25h,4
		.DB 25h,4,0C9h,3
		.DB 1,0,1,0,1,0

CHAR12M17:	.DB 0FFh,0Fh
		.DB 1,0,1,0,1,0
		.DB 5,0,5,0
		.DB 0C5h,7
		.DB 25h,0,1Dh,0
		.DB 1,0,1,0,1,0

CHAR12M18:	.DB 0FFh,0Fh
		.DB 1,0,1,0,1,0
		.DB 0D9h,3,25h,4
		.DB 25h,4
		.DB 25h,4,0D9h,3
		.DB 1,0,1,0,1,0

CHAR12M19:	.DB 0FFh,0Fh
		.DB 1,0,1,0,1,0
		.DB 1,0,0E1h,0
		.DB 0A1h,0
		.DB 0E1h,0,1,0
		.DB 1,0,1,0,1,0

CHAR12M20:	.DB 0FFh,0Fh
		.DB 1,0,0FDh,0Fh,5,4
		.DB 5,4,15h,4
		.DB 55h,5
		.DB 35h,4,5,4
		.DB 5,4,0FDh,7,1,0

CHAR12M21:	.DB 0FFh,0Fh
		.DB 1,0,0FDh,0Fh,0FDh,7
		.DB 0FDh,7,0FDh,7
		.DB 0FDh,7
		.DB 0FDh,7,0FDh,7
		.DB 0FDh,7,0FDh,7,1,0

CHAR12M22:	.DB 0FFh,0Fh
		.DB 1,0,0FDh,7,0FDh,7
		.DB 0FDh,7,0FDh,7
		.DB 0FDh,7
		.DB 0FDh,7,0FDh,7
		.DB 0FDh,7,0FDh,7,1,0

CHAR12M23:	.DB 0FFh,0Fh
		.DB 1,0,0FDh,7,5,4
		.DB 5,4,5,4
		.DB 5,4
		.DB 5,4,5,4
		.DB 5,4,0FDh,7,1,0

CHAR12M24:	.DB 0,0
		.DB 0FEh,0Fh,0FEh,0Fh,0FEh,0Fh
		.DB 0FEh,0Fh,0FEh,0Fh
		.DB 0FEh,0Fh
		.DB 0FEh,0Fh,0FEh,0Fh
		.DB 0FEh,0Fh,0FEh,0Fh,0FEh,0Fh

CHAR12M25:	.DB 0FFh,0Fh
		.DB 1,0,5,4,9,2
		.DB 11h,1,0A1h,0
		.DB 41h,0
		.DB 0A1h,0,11h,1
		.DB 9,2,5,4,1,0

CHAR12M26:	.DB 0FFh,0Fh
		.DB 1,0,1,0,1,0
		.DB 1,0,1,0
		.DB 0FDh,7
		.DB 1,0,1,0
		.DB 1,0,1,0,1,0

CHAR12M27:	.DB 0FFh,0Fh
		.DB 1,0,41h,0,41h,0
		.DB 41h,0,41h,0
		.DB 41h,0
		.DB 41h,0,41h,0
		.DB 41h,0,41h,0,1,0

CHAR12M28:	.DB 0FFh,0Fh
		.DB 1,0,1,0,1,0
		.DB 1,0,0CDh,0Ch
		.DB 1,0
		.DB 33h,3,1,0
		.DB 1,0,1,0,1,0

CHAR12M29:	.DB 0FFh,0Fh
		.DB 21h,0,81h,0,81h,0
		.DB 21h,0,21h,0
		.DB 81h,0
		.DB 81h,0,21h,0
		.DB 21h,0,81h,0,81h,0

;===================================== Изображения

RISF13:	; технические средства расширения
        .DB 14, 10h
        .DB 0, 20h
        .DB 1Ch, 12h
        .DB 3Eh, 14h
        .DB 3Ah, 28h
        .DB 6Fh, 41h
        .DB 0FBh, 7Fh
        .DB 77h, 42h
        .DB 0DFh, 3Fh
        .DB 7Bh, 11h
        .DB 2Eh, 0
        .DB 36h, 1Eh
        .DB 3Ch, 7Dh
        .DB 18h, 37h
        .DB 0, 0Eh

RISF13A: ; круг
        .DB 15, 10h
        .DB 0E0h, 3
        .DB 18h, 0Ch
        .DB 4, 10h
        .DB 2, 20h
        .DB 2, 20h
        .DB 1, 40h
        .DB 1, 40h
        .DB 1, 40h
        .DB 1, 40h
        .DB 1, 40h
        .DB 2, 20h
        .DB 2, 20h
        .DB 4, 10h
        .DB 18h, 0Ch
        .DB 0E0h, 3

RISF13B:	; крест
        .DB 15, 10h
        .DB 80h, 0
        .DB 80h, 0
        .DB 80h, 0
        .DB 80h, 0
        .DB 80h, 0
        .DB 80h, 0
        .DB 80h, 0
        .DB 0FFh, 7Fh
        .DB 80h, 0
        .DB 80h, 0
        .DB 80h, 0
        .DB 80h, 0
        .DB 80h, 0
        .DB 80h, 0
        .DB 80h, 0

RISF13C:	; волны
        .DB 13, 10h
        .DB 0, 0
        .DB 0C0h, 1
        .DB 20h, 2
        .DB 11h, 44h
        .DB 0Eh, 38h
        .DB 0C0h, 1
        .DB 20h, 2
        .DB 11h, 44h
        .DB 0Eh, 38h
        .DB 0C0h, 1
        .DB 20h, 2
        .DB 11h, 44h
        .DB 0Eh, 38h

RISF13D:	; квадрат
        .DB 15, 10h
        .DB 0FFh, 7Fh
        .DB 1, 40h
        .DB 1, 40h
        .DB 1, 40h
        .DB 1, 40h
        .DB 1, 40h
        .DB 1, 40h
        .DB 1, 40h
        .DB 1, 40h
        .DB 1, 40h
        .DB 1, 40h
        .DB 1, 40h
        .DB 1, 40h
        .DB 1, 40h
        .DB 0FFh, 7Fh

RISF13E:	; звезда
        .DB 15, 10h
        .DB 10h, 0
        .DB 30h, 0
        .DB 50h, 30h
        .DB 90h, 1Ch
        .DB 10h, 13h
        .DB 10h, 8
        .DB 0Ch, 4
        .DB 3, 4
        .DB 0Ch, 4
        .DB 10h, 8
        .DB 10h, 13h
        .DB 90h, 1Ch
        .DB 50h, 30h
        .DB 30h, 0
        .DB 10h, 0

RISF14: ; противогаз
        .DB 11, 10h
        .DB 18h, 0
        .DB 3Ch, 0
        .DB 7Eh, 0
        .DB 7Fh, 0
        .DB 0FFh, 0
        .DB 0FFh, 71h
        .DB 0E7h, 73h
        .DB 0E6h, 7Fh
        .DB 0FCh, 7Fh
        .DB 0C0h, 73h
        .DB 0, 70h

RISF19:	; часы
        .DB 10, 10h
        .DB 1, 80h
        .DB 0Fh, 0F0h
        .DB 31h, 0ECh
        .DB 41h, 0F2h
        .DB 81h, 0F9h
        .DB 81h, 0F9h
        .DB 41h, 0F2h
        .DB 31h, 0ECh
        .DB 0Fh, 0F0h
        .DB 1, 80h


RISF20:	; ошибка разминирования
        .DB 24, 32
        .DB 0, 0C0h, 7Fh, 0
        .DB 0, 40h, 40h, 0
        .DB 0, 40h, 5Fh, 0
        .DB 0E0h, 43h, 44h, 0
        .DB 30h, 44h, 48h, 0
        .DB 8, 4Ch, 44h, 0
        .DB 4, 48h, 5Fh, 8
        .DB 54h, 4Ah, 40h, 4Ah
        .DB 2, 45h, 5Fh, 1Ch
        .DB 0AAh, 46h, 44h, 20h
        .DB 96h, 7Dh, 0C2h, 3Fh
        .DB 5Ah, 42h, 4Fh, 0
        .DB 0ACh, 6Ah, 40h, 55h
        .DB 54h, 7Fh, 0CFh, 3Fh
        .DB 0ACh, 41h, 44h, 8
        .DB 0D8h, 41h, 4Fh, 10h
        .DB 0F0h, 41h, 40h, 0Eh
        .DB 0E0h, 40h, 4Fh, 24h
        .DB 0, 40h, 4Ah, 0
        .DB 0, 40h, 4Ch, 0
        .DB 0, 40h, 40h, 0
        .DB 0, 40h, 5Fh, 0
        .DB 0, 40h, 40h, 0
        .DB 0, 0C0h, 7Fh, 0

RISF21: ; ошибка использования заряда
        .DB 14h, 0Fh
        .DB 0FEh, 3Fh
        .DB 2, 60h
        .DB 0AAh, 6Ah
        .DB 0AAh, 64h
        .DB 0A1h, 56h
        .DB 95h, 56h
        .DB 55h, 54h
        .DB 55h, 52h
        .DB 11h, 55h
        .DB 2, 60h
        .DB 0FEh, 7Fh
        .DB 1, 50h
        .DB 29h, 57h
        .DB 29h, 57h
        .DB 52h, 60h
        .DB 52h, 6Ah
        .DB 52h, 6Ah
        .DB 2, 60h
        .DB 0FEh, 7Fh
        .DB 0FCh, 7Fh
 
RISF22A: 
        .DB 8, 8
        .DB 10h,10h,14h,78h,38h,38h,54h,10h

RISF22B: 
        .DB 8, 8
        .DB 10h,10h,54h,38h,38h,38h,54h,10h

RISF22C: 
        .DB 8, 8
        .DB 10h,10h,54h,38h,38h,74h,10h,10h

RISF22D: 
        .DB 8, 8
        .DB 10h,10h,54h,3Ch,38h,38h,50h,10h

RISF22E: 
        .DB 8, 8
        .DB 10h,10h,94h,78h,38h,38h,54h,10h

RISF22F: 
        .DB 5, 8
        .DB 48h,38h,0FFh,38h,44h
RISF22G: 
        .DB 5, 8
        .DB 44h,38h,0FFh,38h,44h

RISF22H: 
        .DB 5, 8
        .DB 44h,38h,0FFh,38h,64h


.END

НПП "СЕМИКО" (383) 271-01-25 (многоканальный)