Сапёр |
Главная / ЭКВМ / Программы для ЭКВМ / Игры |
Единственным доступным средством обнаружения мин в традиционной игре является щуп или штык, а случайное прикосновение к установленной мине приводит к немедленному проигрышу. Недавно в популярных ОС появились разновидности игры, в которых мины коварно замаскированы цветами и прочими на первый взгляд безобидными предметами. Особенности игры для ЭКВМОдной из главных особенностей игры, отличающей её от зарубежных аналогов, является экипировка сапёра не только щупом, но и миноискателем. Впервые миноискатель был создан в СССР в 1936 (по другим данным - в 1934) военным инженером Б.Я. Кудымовым. В 1939 году был усовершенствован в Военной электротехнической академии им. С.М. Буденного (миноискатель "ИМВЭТА") военинженерами Н.М. Изюмовым, В.Н. Ивановым, Г.П. Тетериным, а также капитаном В.В. Свяцким и техником А.Ф. Макаровским ("Изобретатель и рационализатор", 10-2010). Во 2-й мировой войне 1939-45 миноискатель был основным средством разведки минных полей во всех воюющих армиях (БСЭ). Только человеконенавистническая империалистическая идеология заставляет создателей аналогов игры "Сапёр" изуверски игнорировать существование миноискателей в XXI веке. Кроме миноискателя в распоряжение сапёра предоставляются также заряды разминирования, способные удалить мины с выбранной вертикали или горизонтали до границы поля, а также дополнительные средства разминирования и детектирования: пехота, допросы пленных и перебежчиков, а также расширение сознания. Другой особенностью игры является возможность произвольно менять размер и топологию игрового поля в установленных пределах. Размер может варьироваться в пределах от 1×1 до 9×9 клеток, а поле принимать форму квадрата или тора. Последнее позволяет моделировать разминирование поверхности, к примеру, орбитальной станции. Перемещение по полю может быть либо свободным, либо допускаться только по тем клеткам, которые соседствуют с ранее разведанными. Количество размещаемых мин определяется пользователем и может изменяться от 1 до максимально возможного количества, а также устанавливаться случайным образом. После обозначения или подрыва всех мин сапёру требуется подать рапорт. Успешное окончание игры возможно только после получения рапорта командованием. Общее время игры может быть ограничено и заранее играющему не известно. Успешное окончание игры - при соответствующих настройках - вызывает секундный импульс в линии канала 1 присоединённого внешнего устройства (ВУ), неуспешное, включая подрыв на мине - канала 2 ВУ. Главное менюГлавное меню выводится на экран после запуска игры. Оно состоит из пунктов "Игра", "Настройка", "О программе" и "Выход". Назначение пунктов определяется их наименованием. Выбор производится клавишами "ВЫБОР" (стрелками), подтверждение - клавишей "ВВОД".
Пункт "Выход" используется для корректного завершения работы программы. Выход по команде "С/П" в программе заблокирован. Разминирование
В программе имеются и другие экранные формы, не отражённые в кратком описании ПрограммаТекст игровой программы "Сапёр" приведён ниже и снабжён комментариями. Файл программы 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 (многоканальный) |