Тренировка памяти |
Главная / ЭКВМ / Программы для ЭКВМ / Игры |
Особенности программы для ЭКВМНабор карт определяется при настройке и может быть выбран из ряда предлагаемых или установлен случайным образом. В отличие от скучных своей предсказуемостью аналогичных компьютерных игр количество карт в одной группе может варьироваться от 1 до 36, а также быть различным для разных групп. Сложность игры изменяется в широких пределах в зависимости от размера группы. Случайная установка набора вносит в игру элемент неопределённости и значительно повышает её занимательность, особенно в режиме коллективной игры. Возможность использования отличающихся разновидностей карт позволяет самостоятельно устанавливать различные правила коллективной игры для двоих, троих и большего количества участников. Каналы 1 и 2 подключенного к ЭКВМ внешнего устройства могут использоваться в целях отображения текущего хода игры или установления обратной связи с тренирующимся. Главное менюГлавное меню выводится на экран после запуска игры. Оно состоит из пунктов "Новая игра", "Настройка", "О программе" и "Выход". Назначение пунктов определяется их наименованием. Выбор производится клавишами "ВЫБОР" (стрелками), подтверждение - клавишей "ВВОД". Пункт "Новая игра" позволяет инициализировать поле и приступить к тренировке. В меню "Настройка" устанавливаются параметры игры, основные из которых - набор используемых карт и количество игроков. Пункт "О программе" выводит краткие сведения о назначении, способе управления и номере версии. Пункт "Выход" используется для корректного завершения работы программы. Выход по команде "С/П" из программы невозможен. В левой части экрана расположено анимированное изображение условного игрового поля, которое выполняет декоративные функции. Настройка
Пункт "Набор карт" позволяет выбрать вид и состав набора при помощи отдельного меню. Пункт "Игроки" - их количество, от 1 до 3 включительно. Пункт "Звук" разрешает или запрещает звуковые сигналы. Пункт "ВУ" определяет возможность использования каналов внешнего устройства. Набор карт
Тип выбирается при помощи соответствующего пункта из следующих перечисленных: "Из набора", "Случайный 1", "Случайный 2", Случайный 3". Из записанных в программу наборов требуемый выбирается при помощи пункта "Номер". При этом ниже номера выводится строка с описанием, состоящая из общего множителя - количества разновидностей карт, и одного или нескольких описаний групп, расположенных в порядке (количество групп)*(количество карт в группе). Разновидности карт различаются обозначением групп. Разновидность "1" имеет обозначение из одного символа - цифры от '1' до '9' или латинской буквы от 'A' до 'I', а "2" и "3" - из двух символов, латинской буквы 'A' или 'B' (для "3" добавляется вариант 'C') и цифры от '1' до '9'. Для случайных типов номер обозначает максимально возможное количество групп каждой разновидности. Тип "Случайный 1" использует карты разновидности "1". Для случайных типов "2" и "3" количество групп и карт в них одинаково для каждой из разновидностей. Пункт "Изображение" позволяет выбрать обозначение для неоткрытой ("перевёрнутой") карты. Для удобства выбора одновременно с условным номером изображения выводится также и его вид. Тренировка
Перемещение курсора по полю выполняется клавишами "ВЫБОР" (стрелками). Переворачивание закрытой карты - нажатием клавиши "ВВОД". Если открыта не последняя из карт в группе одинаковых, то игрок получает возможность выбора следующей карты. Если открыта последняя из карт в группе, то вся группа удаляется с поля, игрок получает дополнительные очки (от 1 до 46656) и возможность следующего хода. При подсчёте очков учитывается количество карт в удалённой группе и количество карт, оставшихся на игровом поле. Если открытая карта не принадлежит к той же группе, что и первая перевёрнутая игроком, то открытые карты переворачиваются в исходное положение. Если игроков несколько, то очередь хода переходит к следующему, номер которого кратковременно выводится в виде сообщения "Ход игрока ..." в середине экрана. При разрешении использования внешних устройств (ВУ), успешное открытие всех карт группы вызывает импульс в линии канала 1 присоединённого внешнего устройства (ВУ), неуспешное - канала 2 ВУ. При разрешении выдачи звукового подтверждения успешное или неуспешное открытие группы сопровождается звуковыми сигналами различающейся тональности. Игра заканчивается автоматически, когда на поле не остаётся ни одной карты. Нажатие клавиши "ВЫХОД" не приводит к прекращению игры, а лишь выводит справочное сообщение о необходимости нажатия "Cx" для её завершения. Для досрочного выхода из текущей игры требуется нажать красную клавишу "Cx" в нижней правой части клавиатуры. Дополнительных подтверждений не требуется - игра завершается немедленно. Результаты
В строке с номером игрока выводится количество открытых им групп, суммарное количество карт в этих группах и количество набранных очков. В одной или двух строках ниже выводятся обозначения групп, открытых данным игроком, в порядке последовательности их удаления. Для одного игрока дополнительно выводится затраченное на тренировку время в минутах и секундах, что является дополнительным фактором, отражающим её эффективность. При тренировке нескольких игроков время не подсчитывается. Для перехода из экрана результатов в главное меню необходимо нажать клавишу "ВВОД" или "ВЫХОД". ПрограммаТекст программы "Тренировка памяти" приведён ниже и снабжён комментариями. Файл программы memory-0_6.mkp на ЯМК - 6163 байта, КС 392451/109 Текст программы memory-0_6.mkl для кросс-компилятора .CHARSET 1251 ; Программа "Тренировка памяти". ; Для одного, двух или трёх игроков. ; Цель игры - очистка поля от карточек. ; Карточки удаляются с поля группами. ; Для переворачивания в режиме игры ; используются клавиши "ВЫБОР" и "ВВОД". ; Выход из режима игры - клавиша "Cx" ; (без дополнительных запросов). ; Звук и выход на ВУ. ; v0.1 - 01.07.14 ; v0.2 - 02.07.14 ; v0.3 - 28.07.14 ; Изменён ГИ ; v0.4 - 20.10.14 ; Удалены режимы "джокеров" ; v0.5 - 12.01.15 ; Расширены возможности настройки ; Выбор рисунка закрытой карточки ; v0.6 - 18.02.15 ; Мультипликация в главном меню ; НПП "СЕМИКО", GPL2+ NPL .EQU 20 ; номер игры KPL .EQU 21 ; количество участников 1-3 KGR .EQU 22 ; количество элементов в группе (от 2 до 4; 0-произвольное) KGRT .EQU 23 ; количество элементов данной группа при KGR==0 (v0.5) MPOS .EQU 24 ; позиция маркера (1...36) 0-нет TPL .EQU 25 ; текущий игрок (TPL <= KPL) SHAG .EQU 26 ; текущий шаг TOTKR .EQU 27 ; первая открытая T2OTKR .EQU 28 ; не первая открытая XPL .EQU 29 ; тип игры: 0-набор из предопределённых, 1-3-случайный для 1-3 ADPOLE .EQU 30 ; указатель на POLE-1 TPEREM .EQU 31 ; текущая таблица для перемещения маркера (передача параметров в п/п) NOTK1 .EQU 40 ; количество открытых первым (от 0 до 28) NOTK2 .EQU 41 ; -"- 2-м NOTK3 .EQU 42 ; -"- 3-м TIME1 .EQU 45 ; момент начала для 1 участника TIME2 .EQU 46 ; момент окончания для 1 участника TIMEDM .EQU 47 ; разность - минуты TIMEDS .EQU 48 ; разность - секунды FKON .EQU 49 ; признак окончания !=0 FZVUK .EQU 50 ; звук 1-есть 0-нет FVU .EQU 51 ; срабатывание ВУ 1-есть 0-нет IPL .EQU 52 ; изображение реверса (0...) ; ----- не разрывать SOTK1 .EQU 53 ; очки 1-го SOTK2 .EQU 54 ; очки 2-го SOTK3 .EQU 55 ; очки 3-го KOTK1 .EQU 56 ; карты 1-го KOTK2 .EQU 57 ; карты 2-го KOTK3 .EQU 58 ; карты 3-го ; ----- FL1 .EQU 60 ; флаг наличия одного (при ==0) FL2 .EQU 61 ; флаг наличия 2-го (при ==0) FL3 .EQU 62 ; флаг наличия 3-го (при ==0) KOTKX .EQU 63 ; для подсчёта количества карт и очков KOTKY .EQU 64 ; для подсчёта количества карт и очков TIME .EQU 65 ; текущее время POLE .EQU 100 ; поле 0-нет, 1...N - открыто, -1...-N=закрыто STR .EQU 1000 ; строка STR1 .EQU 1050 ; строка 1 OTK1 .EQU 1100 ; строка открытий 1-го OTK2 .EQU 1130 ; -"- 2-го OTK3 .EQU 1160 ; -"- 3-го STR1A .EQU 1200 ; строка 1 вывода при выходе для 1 STR1B .EQU 1230 ; строка 2 вывода при выходе для 1 STR2A .EQU 1260 ; строка 1 вывода при выходе для 2 STR2B .EQU 1290 ; строка 2 вывода при выходе для 2 STR3A .EQU 1320 ; строка 1 вывода при выходе для 3 STR3B .EQU 1350 ; строка 2 вывода при выходе для 3 KRUB .EQU 1400 ; данные изображения реверса ; ---- изображение заставки - не разрывать (до +250) ZAST .EQU 1500 ; генерируемое изображение заставки ZASTF .EQU 1700 ; состояние позиций (для инверсии) ; ---- ;============================== .ORG 0 P GSB INIT 1 PP M 9202 0 PP M 9203 ; F1E0 ; Основной цикл программы A1: 64 A2: PP M 9208 ; Отрисовать меню P GSB PROV ; Проверка результата выполнения формы F X=0 A1 ; RX!=0 перерисовать форму заново A3: PP RM 9029 MA ; В RA - код клавиши K NOT F X!=0 A4 RMA GOTO A2 ; Передать клавишу в меню A4: PP RM 9055 P RM TIME - F X!=0 A2 P GSB SEC F X=0 A1 GOTO A2 ;============================================= п/п Проверка результата выполнения формы ; при выходе 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 7 - P X>=0 PROV3 8 ; >=7 - неизвестная ошибка 8 MB PROV3: ; Определить ошибку интерфейса 2-6, вывести сообщение в строку и остановить программу ; (При работе отлаженной программы эта ситуация возникнуть не может) .NUM TPROVE PP M 9026 0 PP M 9048 ; разрешить останов PP RM 9202 ; RZ = форма PP RM 9203 ; RY = элемент RMB ; RX = ошибка R/S P GOTO 0 TPROVE: .TEXT "ГИ: ошибка X в Z - Y\0" ;==================================================== Обработка данных формы OBRF: .NUM TMOBRF PP M 9042 ; таблица обработчиков команд PP RM 9208 PP M 9213 ; адрес по индексу P X>=0 OBRFE ; нет обработчика этой команды PP M 9042 PP RM 9208 ; код обрабатываемой команды 32 - ; команду "выход" обработать отдельно 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 ; обработка команды "ввод" .END TOBRVVOD: .DA 0,TOBRF1, TOBRF2, TOBRF3 ;F0 TOBRF1: .DA OF1E0,0,0,OF1E3 ;F1 TOBRF2: .DA OF2E0,OF2E1,OF2E2,OF2E3 ;F2 TOBRF3: .DA OF3E0,OF3E1,OF3E2 ;F3 ;----------------------------------------------------- Команда ВВОД ;----------------------------------------------------- F1-E0 OF1E0: ; перейти к основному циклу игры P GSB OSNIGRA ; после завершения вернуться в меню 4 4 PP M 9202 0 PP M 9203 1 RTN ;----------------------------------------------------- F1-E3 OF1E3: ; выход 255 PP M 9092 ; выключить ВУ 0 PP M 9090 ; отключить параллельный порт ; Cохранить параметры в ЭСППЗУ 9047 MA 1 KMA P RM FZVUK P M FZVUK 1 KMA P RM FVU P M FVU 1 KMA P RM KPL P M KPL 1 KMA P RM XPL P M XPL 1 KMA P RM NPL P M NPL 1 KMA P RM IPL P M IPL ; Вывести строку и очистить стек .NUM TOF1E3 PP M 9026 0 PP M 9048 ; отмена блокировки С/П ENT ENT ENT R/S P GOTO 0 ; на случай перезапуска без В/О TOF1E3: .TEXT "\nТренировка завершена\0" ;----------------------------------------------------- F2-E0 OF2E0: ; Набор P RM XPL P X=0 OF2E0A P GSB NPLS OF2E0A: P GSB MEM2KRUB 3 PP M 9202 ; F3E0 0 PP M 9203 1 RTN ;----------------------------------------------------- F2-E1 OF2E1: ; Кол-во игроков ; Набор P RM KPL 1 + P M KPL 4 - P X>=0 OF2E1A 1 P M KPL OF2E1A: 1 RTN ;----------------------------------------------------- F2-E2 OF2E2: ; звук вкл/выкл P RM FZVUK P X=0 OF2E2A 1 P GOTO OF2E2B OF2E2A: CX OF2E2B: P M FZVUK 1 RTN ;----------------------------------------------------- F2-E3 OF2E3: ; ВУ вкл/выкл P RM FVU P X=0 OF2E3A 1 P GOTO OF2E3B OF2E3A: CX OF2E3B: P M FVU 1 RTN ;----------------------------------------------------- F3-E0 OF3E0: ; Набор - тип P RM XPL 1 + P M XPL 4 - P X>=0 OF3E0A CX P M XPL OF3E0A: P RM XPL P X!=0 OF3E0C ; Для XPL!=0 проверить if (NPL>18) NPL=18 P RM NPL 19 - P X>=0 OF3E0B 18 P M NPL OF3E0B: P GSB NPLS OF3E0C: 1 RTN ;----------------------------------------------------- F3-E1 OF3E1: ; Набор - номер P RM NPL 1 + P M NPL P RM XPL P X=0 OF3E1B ; для XPL==0: NPL<=20 P RM NPL 21 - P X>=0 OF3E1C OF3E1A: 1 P M NPL P GOTO OF3E1C OF3E1B: ; Для XPL!=0: NPL<=18 P RM NPL 19 - P X<0 OF3E1A OF3E1C: P RM XPL P X=0 OF3E1D P GSB NPLS OF3E1D: 1 RTN ;----------------------------------------------------- F3-E2 OF3E2: ; Набор - изображение P RM IPL 1 + P M IPL 19 - P X>=0 OF3E2A CX P M IPL OF3E2A: P GSB MEM2KRUB 1 RTN ; ============================= Основной цикл игры OSNIGRA: ; сброс набранных ранее CX P M NOTK1 P M NOTK2 P M NOTK3 P M SOTK1 P M SOTK2 P M SOTK3 P M KOTK1 P M KOTK2 P M KOTK3 PP M STR1A PP M STR1B PP M STR2A PP M STR2B PP M STR3A PP M STR3B .NUMD OTK1 M4 100 M0 CX OSNIGRA0: KM4 ; обнуление строк открытия OTK PFL0 OSNIGRA0 P GSB MEM2KRUB P GSB ZAP ; заполнение поля P GSB RISPOLE 1 P GSB MARK K GRPH CX PP M 9029 ; очистка буфера клавиатуры OSNIGRA1: PP RM 9029 K NOT P X!=0 OSNIGRA1 K NOT MC .NUM TKLAV PP M 9042 RMC PP M 9213 ; адрес по индексу MC P X>=0 OSNIGRA1 ; не найден код клавиши P X!=0 OSNIGRA1 ; нет обработчика K GSB C ; подпрограмма обработки клавиши P RM FKON P X!=0 OSNIGRA1 RTN ;========================= TKLAV: .DB 34 .DA K_R ; вправо .DB 35 .DA K_L ; влево .DB 36 .DA K_U ; вверх .DB 37 .DA K_D ; вниз .DB 33 .DA K_ENT ; ввод .DB 32 .DA K_EXIT ; выход .DB 13 .DA K_CX ; Cx .END ;====================== K_R: .NUM TRPEREM P GOTO K_PER K_L: .NUM TLPEREM P GOTO K_PER K_U: .NUM TUPEREM P GOTO K_PER K_D: .NUM TDPEREM K_PER: P M TPEREM ; сохранить адрес таблицы P GSB MPEREM ; перемещение маркера K GRPH ; обновить графику RTN ;====================== K_EXIT: ; нажата клавиша "ВЫХОД" 5 PP M 9202 0 PP M 9203 64 PP M 9208 P GSB PAUZA P GSB RISSRPOLE 1 P GSB MARK K GRPH RTN ;====================== K_CX: ; нажата клавиша "Cx" P GOTO VYVODAB ;====================== K_ENT: P RM ADPOLE P RM MPOS + MA ; адрес значения KRMA P X>=0 K_ENT1 RTN ; >=0 - ничего не делать: открыта или отсутствует K_ENT1: +/- ; изменить знак и перевернуть KMA P M T2OTKR P RM MPOS P GSB PCARD ; была закрыта - открыть K GRPH P RM SHAG P X=0 K_ENT2 ; шаг 0 - первая открытая P RM T2OTKR P M TOTKR ; записать текущее значение 1 P M SHAG ; следующий шаг ; v0.5 - проверка KGR и запись KGRT P RM KGR P M KGRT P X=0 K_ENT1C ; выход при KGR!=0 ; KGR==0 - определить KGRT 36 M0 .NUMD POLE M4 K_ENT1A: KRM4 K ABS P RM T2OTKR - P X=0 K_ENT1B P RM KGRT 1 + P M KGRT K_ENT1B: PFL0 K_ENT1A ; Проверка на KGRT==1 P RM KGRT 1 - P X!=0 K_ENT2A ; KGRT==1 т.е. первая - она же последняя K_ENT1C: RTN ; выход K_ENT2: ; не первая открытая P RM T2OTKR P RM TOTKR - P X=0 K_ENT3 ; ОК - значения совпадают P RM SHAG 1 + P M SHAG P RM KGRT - P X=0 K_ENTE ; выход если не последняя в группе ; последняя карта в группе K_ENT2A: CX P M SHAG ; добавить к количеству и списку открытий .NUM OTK1 P RM TPL 1 - 30 * + ; начало строки текущего игрока MA .NUMD NOTK1 P RM TPL + MB KRMB RMA + MA ; смещение на количество ранее открытых P RM TOTKR ; значение KMA ; сохранить открытое в строку открытий KRMB 1 + KMB ; увеличить на 1 количество открытий P RM FVU P X!=0 K_ENT2B ; включить канал 1 ВУ 5 PP M 9092 K_ENT2B: ; Звук 1 P RM FZVUK P X!=0 K_ENT2C 1000 ENT 20 PP M 9052 K_ENT2C: ; обнулить все ранее открытые P GSB UDAL P RM FKON P X!=0 K_ENT4 ; перейти к выводу следующего, если не конец игры RTN K_ENT3: ; значения не совпадают P RM FVU P X!=0 K_ENT3A ; включить канал 2 ВУ 3 PP M 9092 K_ENT3A: ; Звук 2 P RM FZVUK P X!=0 K_ENT3B 200 ENT 20 PP M 9052 K_ENT3B: P GSB PAUZA P GSB ZAKR CX P M SHAG ; обнулить номер шага ; переключить игрока если их два и больше P RM KPL 2 - P X>=0 K_ENTE P RM TPL 1 + P M TPL P RM KPL 1 + - ; TPL-KPL F X>=0 K_ENT4 ; номер больше допустимого 1 P M TPL K_ENT4: ; если один игрок - не выводить P RM KPL 1 - P X!=0 K_ENTE ; обработать строку для игрока P RM TPL ; номер P GSB VYVOTK ; OTK -> STR ; вывести информацию о переключении игрока, 12 PP M 9202 0 PP M 9203 64 PP M 9208 P GSB PAUZA P GSB RISSRPOLE K_ENTE: 1 P GSB MARK K GRPH ; выключить каналы ВУ 255 PP M 9092 RTN ;========================= INIT: CX 2 PP M 9048 ; 1- автоматический запуск, 2 - с блокировкой С/П, 0 - отладка ; 2 PP M 9010 ; инициализация графического экрана 1 PP M 9090 ; Статический режим параллельного порта ;1 PP M 9200 ; 1 - разрешение интерфейса 0 PP M 9202 ; о программе - F0 ;0 PP M 9203 ; активный элемент - F0E0 .NUM TFORM PP M 9201 ; главная таблица форм TFORM .NUMD POLE P M ADPOLE ; генерация заставки P GSB GENZAST CX P M TIME ; Проверка и преобразование сохраняемых настроек P RM FZVUK K SGN K ABS P M FZVUK P RM FVU K SGN K ABS P M FVU ; проверка и коррекция KPL (количество игроков) P RM KPL K ABS K INT P M KPL 1 - P X<0 INIT01 1 P GOTO INIT02 INIT01: 3 - P X>=0 INIT03 3 INIT02: P M KPL INIT03: ; проверка и коррекция XPL (тип) P RM XPL K ABS K INT P M XPL 4 - P X>=0 INIT04 CX P M XPL INIT04: ; проверка и коррекция NPL (набор) P RM XPL P X=0 INIT05 21 P GOTO INIT06 INIT05: 19 INIT06: MA P RM NPL K ABS K INT P M NPL 1 - P X<0 INIT07 1 P GOTO INIT08 INIT07: RMA - P X>=0 INIT09 CX INIT08: P M NPL INIT09: P RM IPL K ABS K INT P M IPL 21 - P X>=0 INIT0A CX P M IPL INIT0A: RTN ;======================== Перенос изображения в ОЗУ ; в IPL - номер от 0 до ... MEM2KRUB: .NUMD KRUB M4 P RM IPL 22 * .NUM KPUST + PP M 9042 22 M0 MEM2KRUB1: PP RM 9044 KM4 PFL0 MEM2KRUB1 RTN ;========================= PEREV: ; RX= значение карты для переворота ; Используются R0,R6...RE M6 ; поиск P RM ADPOLE M7 36 M0 PEREV1: RM7 RM0 + M8 KRM8 ; проверить RM6 + P X=0 PEREV2 ; перевернуть закрытую RM6 KM8 ; сохранить и перерисовать, если перевернулась RM0 P GSB PCARD ; вывести PEREV2: PFL0 PEREV1 RTN ;============================ UDAL: ; удалить все открытые ; R0,R6,R7,R8,R9,RA P RM ADPOLE M7 CX P M KOTKX ; открытые карты P M KOTKY ; оставшиеся карты 36 M0 UDAL1: RM7 RM0 + M8 KRM8 P X>=0 UDAL1A P X!=0 UDAL2 ; обнулить, сохранить и перерисовать, если была открыта P RM KOTKX 1 + P M KOTKX ; открытых +1 CX KM8 RM0 P GSB PCARD ; вывести UDAL1A: P RM KOTKY 1 + P M KOTKY ; оставшихся +1 UDAL2: PFL0 UDAL1 K GRPH CX P M SHAG ; обнулить номер шага ; количество открытых карт^2 * количество оставшихся включая открытые P RM KOTKX FX^2 P RM KOTKY * P M KOTKY ; Добавить сумму очков игроку .NUMD SOTK1 P RM TPL + MB KRMB P RM KOTKY + KMB ; SOTKn += очки RMB 3 + MB KRMB P RM KOTKX + KMB ; KOTKn += открытые карты ; проверить наличие оставшихся карт P RM ADPOLE M7 36 M0 UDAL3: RM7 RM0 + M8 KRM8 P X=0 UDALE ; Есть обычная карта - выйти UDAL4: PFL0 UDAL3 ; карт нет - конец P GOTO VYVODAB UDALE: RTN ; ========================= ZAKR: ; перевернуть все, ранее открытые ; R0,R7,R8 P RM ADPOLE M7 36 M0 ZAKR1: RM7 RM0 + M8 KRM8 ; перевернуть +/- P X<0 ZAKR2 ; сохранить и перерисовать, если перевернулась KM8 RM0 P GSB PCARD ; вывести ZAKR2: PFL0 ZAKR1 ; K GRPH RTN ; ========================= Заполнение поля случайное ; для одного (TPL==1, NPL от 1 до 18) ZAPSL: CX P M KGR P RM NPL MA ZAPSL0: P RM ADPOLE M4 36 M0 ZAPSL1: K RAN RMA * 1 + K INT +/- KM4 PFL0 ZAPSL1 ; продолжить через п/п ZAP P GOTO ZAP1A ; ========================= Заполнение поля случайное ; для двух (TPL==2, NPL от 1 до 9) ZAPSLL: CX P M KGR P RM NPL MA P RM ADPOLE M4 18 M0 ZAPSLL1: K RAN RMA * K INT MB 21 + +/- KM4 RMB 31 + +/- KM4 PFL0 ZAPSLL1 ; продолжить через п/п ZAP P GOTO ZAP1A ; ========================= Заполнение поля случайное ; для трёх (TPL==3, NPL от 1 до 9) ZAPSLLL: CX P M KGR P RM NPL MA P RM ADPOLE M4 12 M0 ZAPSLLL1: K RAN RMA * K INT MB 21 + +/- KM4 RMB 31 + +/- KM4 RMB 41 + +/- KM4 PFL0 ZAPSLLL1 ; продолжить через п/п ZAP P GOTO ZAP1A ; ========================= Заполнение поля из таблиц ZAP: P RM XPL ; тип игры P X!=0 ZAP0A 1 - P X!=0 ZAPSL ; тип 1 - случайный 1 1 - P X!=0 ZAPSLL ; тип 2 - случайный 2 P GOTO ZAPSLLL ; тип 3 - случайный 3 ZAP0A: ; тип 0 - из набора ; заполнение поля и переменных игры (NPL= 1-20) .NUM TZAP PP M 9042 P RM NPL PP M 9211 ; адрес по номеру M5 ; адрес нужной таблицы -1 P RM ADPOLE M4 RM5 K PRGM P M KGR ; первый байт - количество элементов в группе KRM5 36 M0 ; для поля 36 ZAP1: RM 5 K PRGM +/- ; отрицательные элементы - закрыты, положительные - открыты K M 4 K RM 5 P FL0 ZAP1 ZAP1A: ; запомнить время начала PP RM 9055 P M TIME1 CX P M FKON ; обнулить признак окончания P M SHAG ; текущий шаг = 0 1 P M TPL ; игрок 1 ; вывод маркера в случайном месте при запуске K RAN 36 * K INT P M MPOS ; RTN - выход без перемешивания ; поле заполнено - перемешать .NUM POLE MA MB 36 M0 ZAP2: K RAN 36 * K INT RMB + MC K RM C MD K RM A K M C RMD K M A RMA 1 + MA P FL0 ZAP2 RTN TZAP: .DA 0, TZAP1, TZAP2, TZAP3, TZAP4, TZAP5 .DA TZAP6, TZAP7, TZAP8, TZAP9, TZAP10, TZAP11 .DA TZAP12, TZAP13, TZAP14, TZAP15, TZAP16 .DA TZAP17, TZAP18, TZAP19, TZAP20 TZAP1: ; 1*(18*2) .DB 2 .DB 1, 2, 3, 4, 5, 6, 7, 8, 9 .DB 10, 11, 12, 13, 14, 15, 16, 17, 18 .DB 1, 2, 3, 4, 5, 6, 7, 8, 9 .DB 10, 11, 12, 13, 14, 15, 16, 17, 18 TZAP2: ; 1*(12*3) .DB 3 .DB 1, 2, 3, 4, 5, 6 .DB 7, 8, 9, 10, 11, 12 .DB 1, 2, 3, 4, 5, 6 .DB 7, 8, 9, 10, 11, 12 .DB 1, 2, 3, 4, 5, 6 .DB 7, 8, 9, 10, 11, 12 TZAP3: ; 1*(9*4) .DB 4 .DB 1, 2, 3, 4, 5, 6, 7, 8, 9 .DB 1, 2, 3, 4, 5, 6, 7, 8, 9 .DB 1, 2, 3, 4, 5, 6, 7, 8, 9 .DB 1, 2, 3, 4, 5, 6, 7, 8, 9 TZAP4: ; 1*(7*5) .DB 5 .DB 1, 2, 3, 4, 5, 6, 7 .DB 1, 2, 3, 4, 5, 6, 7 .DB 1, 2, 3, 4, 5, 6, 7 .DB 1, 2, 3, 4, 5, 6, 7 .DB 1, 2, 3, 4, 5, 6, 7 .DB 0 TZAP5: ; 1*(6*6) .DB 5 .DB 1, 2, 3, 4, 5, 6 .DB 1, 2, 3, 4, 5, 6 .DB 1, 2, 3, 4, 5, 6 .DB 1, 2, 3, 4, 5, 6 .DB 1, 2, 3, 4, 5, 6 .DB 1, 2, 3, 4, 5, 6 TZAP6: ; 1*(5*7) .DB 5 .DB 1, 2, 3, 4, 5 .DB 1, 2, 3, 4, 5 .DB 1, 2, 3, 4, 5 .DB 1, 2, 3, 4, 5 .DB 1, 2, 3, 4, 5 .DB 1, 2, 3, 4, 5 .DB 1, 2, 3, 4, 5 .DB 0 TZAP7: ; 2*(9*2) .DB 2 .DB 21, 22, 23, 24, 25, 26, 27, 28, 29 .DB 31, 32, 33, 34, 35, 36, 37, 38, 39 .DB 21, 22, 23, 24, 25, 26, 27, 28, 29 .DB 31, 32, 33, 34, 35, 36, 37, 38, 39 TZAP8: ; 2*(6*3) .DB 3 .DB 21, 22, 23, 24, 25, 26 .DB 31, 32, 33, 34, 35, 36 .DB 21, 22, 23, 24, 25, 26 .DB 31, 32, 33, 34, 35, 36 .DB 21, 22, 23, 24, 25, 26 .DB 31, 32, 33, 34, 35, 36 TZAP9: ; 2*(4*4) .DB 4 .DB 21, 22, 23, 24 .DB 31, 32, 33, 34 .DB 21, 22, 23, 24 .DB 31, 32, 33, 34 .DB 21, 22, 23, 24 .DB 31, 32, 33, 34 .DB 21, 22, 23, 24 .DB 31, 32, 33, 34 .DB 0, 0, 0, 0 TZAP10: ; 3*(6*2) .DB 2 .DB 21, 22, 23, 24, 25, 26 .DB 31, 32, 33, 34, 35, 36 .DB 41, 42, 43, 44, 45, 46 .DB 21, 22, 23, 24, 25, 26 .DB 31, 32, 33, 34, 35, 36 .DB 41, 42, 43, 44, 45, 46 TZAP11: ; 3*(4*3) .DB 3 .DB 21, 22, 23, 24 .DB 31, 32, 33, 34 .DB 41, 42, 43, 44 .DB 21, 22, 23, 24 .DB 31, 32, 33, 34 .DB 41, 42, 43, 44 .DB 21, 22, 23, 24 .DB 31, 32, 33, 34 .DB 41, 42, 43, 44 TZAP12: ; 3*(3*4) .DB 4 .DB 21, 22, 23 .DB 31, 32, 33 .DB 41, 42, 43 .DB 21, 22, 23 .DB 31, 32, 33 .DB 41, 42, 43 .DB 21, 22, 23 .DB 31, 32, 33 .DB 41, 42, 43 .DB 21, 22, 23 .DB 31, 32, 33 .DB 41, 42, 43 TZAP13: ; 1*(3*1+6*2+7*3) .DB 0 .DB 1, 2, 3, 4, 4, 5, 5, 6, 6 .DB 7, 7, 8, 8, 9, 9, 10, 10, 10 .DB 11, 11, 11, 12, 12, 12, 13, 13, 13 .DB 14, 14, 14, 15, 15, 15, 16, 16, 16 TZAP14: ; 2*(3*1+2*2+2*3+1*5) .DB 0 .DB 21, 22, 23, 24, 24, 25, 25, 26, 26 .DB 26, 27, 27, 27, 28, 28, 28, 28, 28 .DB 31, 32, 33, 34, 34, 35, 35, 36, 36 .DB 36, 37, 37, 37, 38, 38, 38, 38, 38 TZAP15: ; 2*(2*2+2*3+2*4) .DB 0 .DB 21, 21, 22, 22, 23, 23, 23 .DB 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26 .DB 31, 31, 32, 32, 33, 33, 33 .DB 34, 34, 34, 35, 35, 35, 35, 36, 36, 36, 36 TZAP16: ; 2*(2*2+2*3+1*4) .DB 0 .DB 21, 21, 22, 22, 23, 23, 23 .DB 24, 24, 24, 25, 25, 25, 25, 0, 0, 0, 0 .DB 31, 31, 32, 32, 33, 33, 33 .DB 34, 34, 34, 35, 35, 35, 35, 0, 0, 0, 0 TZAP17: ; 3*(2*1+2*2+2*3) .DB 0 .DB 21, 22, 23, 23, 24, 24 .DB 25, 25, 25, 26, 26, 26 .DB 31, 32, 33, 33, 34, 34 .DB 35, 35, 35, 36, 36, 36 .DB 41, 42, 43, 43, 44, 44 .DB 45, 45, 45, 46, 46, 46 TZAP18: ; 3*(3*2+2*3) .DB 0 .DB 21, 21, 22, 22, 23, 23 .DB 24, 24, 24, 25, 25, 25 .DB 31, 31, 32, 32, 33, 33 .DB 34, 34, 34, 35, 35, 35 .DB 41, 41, 42, 42, 43, 43 .DB 44, 44, 44, 45, 45, 45 TZAP19: ; 3*(1*1+1*2+3*3) .DB 0 .DB 21, 22, 22, 23, 23, 23 .DB 24, 24, 24, 25, 25, 25 .DB 31, 32, 32, 33, 33, 33 .DB 34, 34, 34, 35, 35, 35 .DB 41, 42, 42, 43, 43, 43 .DB 44, 44, 44, 45, 45, 45 TZAP20: ; 3*(1*1+1*2+2*3) .DB 0 .DB 21, 22, 22, 23, 23, 23 .DB 24, 24, 24, 0, 0, 0 .DB 31, 32, 32, 33, 33, 33 .DB 34, 34, 34, 0, 0, 0 .DB 41, 42, 42, 43, 43, 43 .DB 44, 44, 44, 0, 0, 0 ; =========================== Заполнение STR по NPL для вывода NPLS: .NUMD STR M4 .NUM TNPLS PP M 9042 ; таблица строк P RM NPL PP M 9211 ; адрес по номеру P X!=0 NPLSE ; нет строки PP M 9042 NPLS1: ; цикл переноса строки до '\0' включительно PP RM 9044 KM4 P X=0 NPLS1 NPLSE: RTN TNPLS: .DA 0, TNPLS1, TNPLS2, TNPLS3, TNPLS4 .DA TNPLS5, TNPLS6, TNPLS7, TNPLS8, TNPLS9 .DA TNPLS10, TNPLS11, TNPLS12, TNPLS13, TNPLS14 .DA TNPLS15, TNPLS16, TNPLS17, TNPLS18, TNPLS19 .DA TNPLS20 TNPLS1: .TEXT "1*(18*2)\0" TNPLS2: .TEXT "1*(12*3)\0" TNPLS3: .TEXT "1*(9*4)\0" TNPLS4: .TEXT "1*(7*5)\0" TNPLS5: .TEXT "1*(6*6)\0" TNPLS6: .TEXT "1*(5*7)\0" TNPLS7: .TEXT "2*(9*2)\0" TNPLS8: .TEXT "2*(6*3)\0" TNPLS9: .TEXT "2*(4*4)\0" TNPLS10: .TEXT "3*(6*2)\0" TNPLS11: .TEXT "3*(4*3)\0" TNPLS12: .TEXT "3*(3*4)\0" TNPLS13: .TEXT "1*(3*1+6*2+7*3)\0" TNPLS14: .TEXT "2*(3*1+2*2+2*3+1*5)\0" TNPLS15: .TEXT "2*(2*2+2*3+2*4)\0" TNPLS16: .TEXT "2*(2*2+2*3+1*4)\0" TNPLS17: .TEXT "3*(2*1+2*2+2*3)\0" TNPLS18: .TEXT "3*(3*2+2*3)\0" TNPLS19: .TEXT "3*(1*1+1*2+3*3)\0" TNPLS20: .TEXT "3*(1*1+1*2+2*3)\0" ; ============================ Вывод карты ; вход : RX - номер карты от 1 до 36 ; регистры 9,A,B,C,D,E PCARD: ME ; позиция .NUM TPOS PP M 9042 RME 1 - PP M 9210 ; значение по индексу 256 / MB K INT MA ; координата Y RMB K FRAC 256 * MB ; координата X RMA RMB PP M 9000 ; координаты вывода карты RME P RM ADPOLE ; POLE-1 + ; +RX (==1...36) M9 KRM9 MC ; RC - значение P X!=0 PCARD0 ; ==0 - нет карты, очистка и выход ; есть карта P X<0 PCARD1 ; закрыта .NUM KRUB PP M 9016 ; вывод рубашки RTN PCARD0: 4 PP M 9001 ; NOT ; прямоугольник 14 ENT 10 PP M 9013 CX PP M 9001 ; восстановить атрибуты вывода RTN PCARD1: RMC K ABS MC ; >0 есть открытая карта .NUM KPUST PP M 9015 ; вывод прямоугольника ; адрес таблицы символов .NUM TPCHAR PP M 9042 RMC PP M 9212 ; значение по индексу 256 / M9 K INT MC ; верхний символ RM9 K FRAC 256 * MD ; нижний символ .NUM FONTM PP M 9009 ; адрес загружаемого шрифта 254 PP M 9003 ; номер шрифта RMC P X!=0 PCARD2 ; есть оба символа RMA 2 + RMB 2 + PP M 9000 RMC PP M 9020 RMA 7 + RMB 5 + P GOTO PCARD3 PCARD2: ; есть один символ RMA 3 + RMB 3 + PCARD3: PP M 9000 RMD PP M 9020 CX PP M 9003 PCARDE: RTN ;============================== Вывод маркера ; вход : ; RX ==0 - убрать, ==1 - поставить MARK: MD ; действие .NUM TPOS PP M 9042 P RM MPOS ; позиция маркера P X!=0 MARKE ; ==0 - выход 1 - PP M 9210 ; значение по индексу 256 / MB K INT MA ; координата Y RMB K FRAC 256 * MB ; координата X RMA 1 - RMB 1 - PP M 9000 ; координаты вывода маркера RMD P X=0 MARK1 ; убрать рамку 4 PP M 9001 ; NOT MARK1: ; поставить рамку 16 ENT 12 PP M 9014 CX PP M 9001 ; восстановить атрибуты вывода MARKE: RTN ;==================================== Перемещение маркера ; перемещение по содержимому TPEREM ; позиция маркера из MPOS MPEREM: CX P GSB MARK ; удалить старый маркер P RM TPEREM 1 - P RM MPOS + K PRGM ; считать байт из памяти программ P M MPOS ; новая позиция маркера 1 P GOTO MARK ; выйти через вывод новой позиции TUPEREM: ; перемещение вверх .DB 28, 29, 30, 31, 32, 33, 34, 35, 36 .DB 1, 2, 3, 4, 5, 6, 7, 8, 9 TDPEREM: ; перемещение вниз (таблица связана с предыдущей - не разрывать) .DB 10, 11, 12, 13, 14, 15, 16, 17, 18 .DB 19, 20, 21, 22, 23, 24, 25, 26, 27 .DB 28, 29, 30, 31, 32, 33, 34, 35, 36 .DB 1, 2, 3, 4, 5, 6, 7, 8, 9 TRPEREM: ; перемещение вправо .DB 2, 3, 4, 5, 6, 7, 8, 9, 1 .DB 11, 12, 13, 14, 15, 16, 17, 18, 10 .DB 20, 21, 22, 23, 24, 25, 26, 27, 19 .DB 29, 30, 31, 32, 33, 34, 35, 36, 28 TLPEREM: ; перемещение влево .DB 9, 1, 2, 3, 4, 5, 6, 7, 8 .DB 18, 10, 11, 12, 13, 14, 15, 16, 17 .DB 27, 19, 20, 21, 22, 23, 24, 25, 26 .DB 36, 28, 29, 30, 31, 32, 33, 34, 35 ;====================== Рисунок поля RISPOLE: 2 PP M 9010 ; очистка экрана 36 M0 RISPOLE1: RM0 P GSB PCARD PFL0 RISPOLE1 RTN ;====================== Восстановление середины поля RISSRPOLE: 11 PP M 9202 ; F11 - очистка CX PP M 9203 64 PP M 9208 18 M0 9 M4 RISSRPOLE1: KRM4 RM4 P GSB PCARD PFL0 RISSRPOLE1 RTN ;===================== Пауза PAUZA: ; пауза 1,5 сек. 150 PP M 9050 CX PP M 9029 ; очистка буфера клавиатуры PAUZA2: PP RM 9050 ; время задержки P X!=0 PAUZA3 PP RM 9029 K NOT P X!=0 PAUZA2 ; выход по нажатию клавиши PAUZA3: RTN ;====================== Вывод строки ОТК в STR и STR1 VYVOTK: MB ; на входе - номер игрока 1 - 30 * .NUM OTK1 + MA ; адрес начала строки OTK .NUMD NOTK1 RMB + MB ; адрес регистра NOTK .NUMD STR M4 ; адрес строки STR .NUM TPCHAR ; таблица символьных кодов PP M 9042 KRMB ; количество P X!=0 VYVOTK2 ; если нет данных - закрыть строки M0 9 - P X>=0 VYVOTK1 ; если чисел больше 9 - то остальные поместить в STR1 9 M0 VYVOTK1: P GSB SVYVOTK ; Если чисел больше 9 - заполнить STR1 .NUMD STR1 M4 ; адрес строки STR1 KRMB 9 - M0 P X>=0 VYVOTK3 P X!=0 VYVOTK3 ; заполнить STR1 при необходимости ; и выйти через п/п P GOTO SVYVOTK VYVOTK2: ; закрыть STR CX KM4 VYVOTK3: ; очистить и закрыть STR1 .NUMD STR1 M4 CX KM4 RTN ; ==== ; Подпрограмма цикла вывода для VYVOTK ; На входе заполнены R0 R4 RA SVYVOTK: ; цикл по всем открытиям KRMA ; код PP M 9212 ; чтение значения по индексу P X>=0 SVYVOTK3 ; неизвестный символ 256 / M9 K INT F X!=0 SVYVOTK2 ; если не 0 - напечатать KM4 ; "верхний" символ SVYVOTK2: RM9 K FRAC 256 * KM4 ; "нижний" символ P GOTO SVYVOTK4 SVYVOTK3: 63 ; '?' KM4 SVYVOTK4: RMA 1 + MA KRMA P X!=0 SVYVOTK5 ; если есть следующий символ строки ОТК 44 KM4 ; ',' SVYVOTK5: PFL0 SVYVOTK ; конец цикла открытий SVYVOTK6: CX KM4 ; закрыть строку RTN ;====================== Вывод строки ОТК в строки STRnA STRnB VYVOTKAB: MB ; на входе - номер игрока 1 - 30 * .NUM OTK1 + MA ; адрес начала строки OTK .NUMD NOTK1 RMB + MC ; адрес регистра NOTK RMB 1 - 60 * .NUMD STR1A + M4 ; адрес строки STRnA .NUM TPCHAR ; таблица символьных кодов PP M 9042 KRMC ; количество P X!=0 VYVOTKAB2 ; если нет данных - закрыть строки M0 9 - P X>=0 VYVOTKAB1 ; если чисел больше 9 - то остальные поместить в STRnB 9 M0 VYVOTKAB1: P GSB SVYVOTK ; Если чисел больше 9 - заполнить STRnB RMB 1 - 60 * .NUMD STR1B + M4 ; адрес строки STRnB KRMC 9 - M0 P X>=0 VYVOTKAB3 P X!=0 VYVOTKAB3 ; заполнить STRnB при необходимости ; и выйти через п/п P GOTO SVYVOTK VYVOTKAB2: ; закрыть STRn CX KM4 VYVOTKAB3: ; очистить и закрыть STRnB RMB 1 - 60 * .NUMD STR1B + M4 CX KM4 RTN ;=========================================== Вывод результатов для F4 ; VYVODAB: ; записать время окончания PP RM 9055 P M TIME2 P RM KPL 1 - P X=0 VYVODAB2 ; Один участник ; Рассчитать TIMEDM и TIMEDS P RM TIME2 K MS->D P RM TIME1 K MS->D - P X<0 VYVODAB1 24 + VYVODAB1: 60 * MA K INT P M TIMEDM ; разность - минуты RMA K FRAC 60 * K INT P M TIMEDS ; разность - секунды CX P M FL1 1 P M FL2 P M FL3 P GSB VYVOTKAB P GOTO VYVODABE VYVODAB2: 1 - P X=0 VYVODAB3 ; Два участника CX P M FL2 1 P M FL1 P M FL3 P GSB VYVOTKAB 2 P GSB VYVOTKAB P GOTO VYVODABE VYVODAB3: ; Три участника CX P M FL2 P M FL3 1 P M FL1 P GSB VYVOTKAB 2 P GSB VYVOTKAB 3 P GSB VYVOTKAB VYVODABE: 1 P M FKON ; установить признак окончания RTN ;===================================== Генерация заставки GENZAST: .NUMD ZAST M4 46 KM4 32 KM4 ; изображение X=45, Y=32 (187 байт) 250 ; перекрыть и ZASTF M0 CX GENZAST1: KM4 PFL0 GENZAST1 36 M0 GENZAST2: P GSB GZAST PFL0 GENZAST2 RTN ;====================== Замена случайной карты в заставке GZAST: K RAN 36 * K INT MA RMA 4 / K INT MB RMA 4 / K FRAC 4 * RMB 20 * + 2 + .NUM ZAST + MC RMA .NUM ZASTF + MB KRMB P X=0 GZAST1 ; в позиции RA было пусто 1 KMB 126 KMC RMC 4 + MC 66 KMC RMC 4 + MC 66 KMC RMC 4 + MC 126 KMC P GOTO GZASTE GZAST1: ; в позиции RA была карта 0 KMB CX KMC RMC 4 + MC CX KMC RMC 4 + MC CX KMC RMC 4 + MC CX KMC GZASTE: 1 RTN ;======================= Обработка секунды SEC: PP RM 9055 P M TIME PP RM 9202 1 - P X!=0 SEC1 CX RTN ; Выход если не F1 SEC1: P GSB GZAST P GOTO GZAST ; Перейти к GZAST при F1 (и выйти через неё) ; ====================== Главная таблица форм TFORM: .DB 1 ; Форма 1 "Основной экран" .DA F1 .DB 2 ; Форма 2 "Настройка" .DA F2 .DB 3 ; Форма 3 "Набор" .DA F3 .DB 4 ; Форма 4 "Вывод результатов" .DA F4 .DB 5 ; Форма 5 "Выход" .DA F5 .DB 6 ; Форма 6 "О программе" .DA F6 .DB 11 ; Форма 11 "Очистка середины" .DA F11 .DB 12 ; Форма 12 "Переключение игрока" .DA F12 .END ; =========================================================== F1 "Основной экран" F1: .FORM 3, F1DE, F1PI, F1PO, F1PL, F1PR, F1RI, F1KM F1DE: ;таблица флагов действий .DB 29, 21, 21, 29 F1PI: .DB 1,0,2,0,6,0,1,3 F1PO: .DB 1,0,1,1,1,2,1,3 F1PL: .DB 3, 0 F1PR: .DB 1, 2, 3, 0 F1RI: .TYPE 0 ; шрифт 0 .TAB 20, 0 .TXTP 16, F1TZ .TAB 0, 10 .SQU 0, 127, 1 .TAB 48 ,14 .SQU 0, 1, 48 .TAB 56, 16 .TXTP 16, F1T0 .TAB 56, 28 .TXTP 16, F1T1 .TAB 56, 40 .TXTP 16, F1T2 .TAB 56, 52 .TXTP 16, F1T3 .TAB 0, 16 .DRAWB 16, ZAST .END F1KM: .DBB F1KM0, F1KM1, F1KM2, F1KM3 F1KM0: .TAB 50, 14 .JM F1KME F1KM1: .TAB 50, 26 .JM F1KME F1KM2: .TAB 50, 38 .JM F1KME F1KM3: .TAB 50, 50 F1KME: .SQU 3, 76, 12 ; XOR прямоугольник .END F1TZ: .TEXT "Тренировка памяти\0" F1T0: .TEXT "Новая игра\0" F1T1: .TEXT "Настройка\0" F1T2: .TEXT "О программе\0" F1T3: .TEXT "Выход\0" ; =========================================================== F2 "Настройка" F2: .FORM 3, F2DE, F2PI, F2PO, F2PL, F2PR, F2RI, F2KM F2DE: ;таблица флагов действий .DB 29, 29, 29, 29 F2PI: .DB 3,0,2,1,2,2,2,3 F2PO: .DB 1,1,1,1,1,1,1,1 F2PL: .DB 3, 0 F2PR: .DB 1, 2, 3, 0 F2RI: .TYPE 0 ; шрифт 0 .TAB 40, 0 .TXTP 16, F1T1 ; "Настройка" .TAB 0,10 .SQU 0, 127, 1 .TAB 4, 16 .TXTP 16, F2T0 .TAB 4, 28 .TXTP 16, F2T1 .TAB 64, 28 .PREXP 16, KPL .TAB 4, 40 .TXTP 16, F2T2 .TAB 64, 40 .JNEZ FZVUK, F2RI1 .TXTP 16, F2TN .JM F2RI2 F2RI1: .TXTP 16, F2TY F2RI2: .TAB 4, 52 .TXTP 16, F2T3 .TAB 64, 52 .JNEZ FVU, F2RI3 .TXTP 16, F2TN .JM F2RI4 F2RI3: .TXTP 16, F2TY F2RI4: .END F2KM: .DBB F2KM0, F2KM1, F2KM2, F2KM3 F2KM0: .TAB 2, 14 .JM F2KME F2KM1: .TAB 2, 26 .JM F2KME F2KM2: .TAB 2, 38 .JM F2KME F2KM3: .TAB 2, 50 F2KME: .SQU 3, 60, 12 ; XOR прямоугольник .END F2T0: .TEXT "Набор карт\0" F2T1: .TEXT "Игроки\0" F2T2: .TEXT "Звук\0" F2T3: .TEXT "ВУ\0" F2TY: .TEXT "есть\0" F2TN: .TEXT "нет\0" ; =========================================================== F3 "Набор" F3: .FORM 2, F3DE, F3PI, F3PO, F3PL, F3PR, F3RI, F3KM F3DE: ;таблица флагов действий .DB 29, 29, 29 F3PI: .DB 3,0,3,1,3,2 F3PO: .DB 2,0,2,0,2,0 F3PL: .DB 2, 0 F3PR: .DB 1, 2, 0 F3RI: .TYPE 0 ; шрифт 0 .TAB 40, 0 .TXTP 16, F2T0 ; "Набор" .TAB 0,10 .SQU 0, 127, 1 .TAB 4, 16 .TXTP 16, F3T0 .TAB 64, 16 .JNEZ XPL, F3RI1 .TXTP 16, F3T3 .TAB 4, 40 .TXTP 16, F3T5 .TXTB 16, STR ; описание .JM F3RI2 F3RI1: .TXTP 16, F3T4 .PREXP 16, XPL F3RI2: .TAB 4, 28 .TXTP 16, F3T1 .TAB 64, 28 .PREXP 16, NPL .TAB 4, 54 .TXTP 16, F3T2 .TAB 64, 54 .PREXP 16, IPL .TAB 100, 50 .DRAWB 16, KRUB .END F3KM: .DBB F3KM0, F3KM1, F3KM2 F3KM0: .TAB 2, 14 .JM F3KME F3KM1: .TAB 2, 26 .JM F3KME F3KM2: .TAB 2, 52 F3KME: .SQU 3, 60, 12 ; XOR прямоугольник .END F3T0: .TEXT "Тип\0" F3T1: .TEXT "Номер\0" F3T2: .TEXT "Изображение\0" F3T3: .TEXT "Из набора\0" F3T4: .TEXT "Случайный \0" F3T5: .TEXT "> \0" ; =========================================================== F4 "Очки" F4: .FORM 0, F4DE, F4PI, F4PO, F4PL, F4PR, F4RI, F4KM F4DE: ;таблица флагов действий .DB 21 F4PI: F4PO: .DB 1 ; (1,0) F4PL: F4PR: .DB 0 F4RI: .TYPE 254 ; шрифт 254 .ATYPE FONTM .TAB 0, 0 .TXTP 16, F4T1 .PREXP 16, NOTK1 .TXTP 16, F4T4 .PREXP 16, KOTK1 .TXTP 16, F4T4 .PREXP 16, SOTK1 .TAB 10, 7 .TXTB 16, STR1A .TAB 10, 14 .TXTB 16, STR1B .JNEZ FL1, F4RI1 .TAB 0, 28 .TXTP 16, F4T5 .PREXP 16, TIMEDM .TXTP 16, F4T6 .PREXP 16, TIMEDS .TXTP 16, F4T7 .JM F4RI2 F4RI1: .JNEZ FL2, F4RI2 .TAB 0, 21 .TXTP 16, F4T2 .PREXP 16, NOTK2 .TXTP 16, F4T4 .PREXP 16, KOTK2 .TXTP 16, F4T4 .PREXP 16, SOTK2 .TAB 10, 28 .TXTB 16, STR2A .TAB 10, 35 .TXTB 16, STR2B .JNEZ FL3, F4RI2 .TAB 0, 42 .TXTP 16, F4T3 .PREXP 16, NOTK3 .TXTP 16, F4T4 .PREXP 16, KOTK3 .TXTP 16, F4T4 .PREXP 16, SOTK3 .TAB 10, 49 .TXTB 16, STR3A .TAB 10, 56 .TXTB 16, STR3B F4RI2: .TYPE 0 F4KM0: .END F4KM: .DBB F4KM0 F4T1: .TEXT "1: \0" F4T2: .TEXT "2: \0" F4T3: .TEXT "3: \0" F4T4: .TEXT " -- \0" F4T5: .TEXT "Время: \0" F4T6: .TEXT " мин \0" F4T7: .TEXT " сек \0" ; =========================================================== F5 "Выход" F5: .FORM 0, F5DE, F5PI, F5PO, F5PL, F5PR, F5RI, F5KM F5DE: ;таблица флагов действий .DB 128 ; без очистки F5PI: F5PO: F5PL: F5PR: .DB 0,0 F5RI: .TYPE 0 ; шрифт 0 .TAB 2, 16 ; позиция .SQU 4, 124, 32 ; инверсный прямоугольник .TAB 2, 16 ; позиция .FRAME 0, 124, 32 ; рамка .TAB 16, 24 .TXTP 16, F5T1 F5KM0: .END F5KM: .DBB F5KM0 F5T1: .TEXT "Выход - клавиша [Cx]\0" ; =========================================================== F6 "О программе" F6: .FORM 0, F6DE, F6PI, F6PO, F6PL, F6PR, F6RI, F6KM F6DE: ;таблица флагов действий .DB 21 F6PI: F6PO: .DB 1,2 F6PL: F6PR: .DB 0 F6RI: .TYPE 0 ; шрифт 0 .TAB 20, 0 .TXTP 16, F1TZ .TAB 0, 10 .SQU 0, 127, 1 .TAB 0, 16 .TXTP 16, F6T0 .TAB 0, 24 .TXTP 16, F6T1 .TAB 0, 32 .TXTP 16, F6T2 .TAB 0, 40 .TXTP 16, F6T3 .TAB 0, 48 .TXTP 16, F6T4 .TAB 0, 56 .TXTP 16, F6T5 F6KM0: .END F6KM: .DBB F6KM0 F6T0: .TEXT "Цель игры - очистка поля\0" F6T1: .TEXT "от карточек, сбрасываемых\0" F6T2: .TEXT "группами. Для 1-3 игроков.\0" F6T3: .TEXT "Выбор и переворачивание -\0" F6T4: .TEXT "клавишами ВЫБОР и ВВОД.\0" F6T5: .TEXT "Версия 0.6 от 18.02.2015\0" ; =========================================================== F11 "Очистка середины" F11: .FORM 0, F11DE, F11PI, F11PO, F11PL, F11PR, F11RI, F11KM F11DE: ;таблица флагов действий .DB 128 ; без очистки F11PI: F11PO: F11PL: F11PR: .DB 0,0 F11RI: .TAB 2, 16 ; позиция .SQU 4, 124, 32 ; инверсный прямоугольник F11KM0: .END F11KM: .DBB F11KM0 ; =========================================================== F12 "Номер игрока" F12: .FORM 0, F12DE, F12PI, F12PO, F12PL, F12PR, F12RI, F12KM F12DE: ;таблица флагов действий .DB 128 ; без очистки F12PI: F12PO: F12PL: F12PR: .DB 0,0 F12RI: .TYPE 0 ; шрифт 0 .TAB 2, 16 ; позиция .SQU 4, 124, 32 ; инверсный прямоугольник .TAB 2, 16 ; позиция .FRAME 0, 124, 32 ; рамка .TAB 32, 18 .TXTP 16, F12T1 .PREXP 16, TPL .TYPE 254 .ATYPE FONTM ; шрифт 5 .TAB 8, 28 .TXTB 16, STR ; вывод строки OTK из STR .TAB 8, 36 .TXTB 16, STR1 ; вывод строки OTK из STR1 .TYPE 0 ; шрифт 0 F12KM0: .END F12KM: .DBB F12KM0 F12T1: .TEXT "Ход игрока \0" ;================================================= TPCHAR: .DB 1, 0, 49 ; " 1" .DB 2, 0, 50 ; " 2" .DB 3, 0, 51 ; " 3" .DB 4, 0, 52 ; " 4" .DB 5, 0, 53 ; " 5" .DB 6, 0, 54 ; " 6" .DB 7, 0, 55 ; " 7" .DB 8, 0, 56 ; " 8" .DB 9, 0, 57 ; " 9" .DB 10, 0, 65 ; " A" .DB 11, 0, 66 ; " B" .DB 12, 0, 67 ; " C" .DB 13, 0, 68 ; " D" .DB 14, 0, 69 ; " E" .DB 15, 0, 70 ; " F" .DB 16, 0, 71 ; " G" .DB 17, 0, 72 ; " H" .DB 18, 0, 73 ; " I" .DB 21, 65, 49 ; "A1" .DB 22, 65, 50 ; "A2" .DB 23, 65, 51 ; "A3" .DB 24, 65, 52 ; "A4" .DB 25, 65, 53 ; "A5" .DB 26, 65, 54 ; "A6" .DB 27, 65, 55 ; "A7" .DB 28, 65, 56 ; "A8" .DB 29, 65, 57 ; "A9" .DB 31, 66, 49 ; "B1" .DB 32, 66, 50 ; "B2" .DB 33, 66, 51 ; "B3" .DB 34, 66, 52 ; "B4" .DB 35, 66, 53 ; "B5" .DB 36, 66, 54 ; "B6" .DB 37, 66, 55 ; "B7" .DB 38, 66, 56 ; "B8" .DB 39, 66, 57 ; "B9" .DB 41, 67, 49 ; "C1" .DB 42, 67, 50 ; "C2" .DB 43, 67, 51 ; "C3" .DB 44, 67, 52 ; "C4" .DB 45, 67, 53 ; "C5" .DB 46, 67, 54 ; "C6" .DB 47, 67, 55 ; "C7" .DB 48, 67, 56 ; "C8" .DB 49, 67, 57 ; "C9" .END TPOS: ; позиции вывода .DB 1, 3 ; для 1 и т.д. .DB 1, 17 .DB 1, 31 .DB 1, 45 .DB 1, 59 .DB 1, 73 .DB 1, 87 .DB 1, 101 .DB 1, 115 .DB 17, 3 .DB 17, 17 .DB 17, 31 .DB 17, 45 .DB 17, 59 .DB 17, 73 .DB 17, 87 .DB 17, 101 .DB 17, 115 .DB 33, 3 .DB 33, 17 .DB 33, 31 .DB 33, 45 .DB 33, 59 .DB 33, 73 .DB 33, 87 .DB 33, 101 .DB 33, 115 .DB 49, 3 .DB 49, 17 .DB 49, 31 .DB 49, 45 .DB 49, 59 .DB 49, 73 .DB 49, 87 .DB 49, 101 .DB 49, 115 ;================================ ; изображения, начиная с пустой KPUST: .DB 10,14 .DB 0FFh, 3Fh .DB 1, 20h, 1, 20h .DB 1, 20h, 1, 20h .DB 1, 20h, 1, 20h .DB 1, 20h, 1, 20h .DB 0FFh, 3Fh ;1 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 0C9h, 24h .DB 25h, 29h .DB 13h, 32h .DB 0D5h, 2Ah .DB 0D5h, 2Ah .DB 13h, 32h .DB 25h, 29h .DB 0C9h, 24h .DB 0FFh, 3Fh ;2 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 9, 24h .DB 35h, 2Bh .DB 0C3h, 30h .DB 15h, 2Ah .DB 15h, 2Ah .DB 0C3h, 30h .DB 35h, 2Bh .DB 9, 24h .DB 0FFh, 3Fh ;3 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 29h, 25h .DB 0C5h, 28h .DB 2Bh, 35h .DB 0D5h, 2Ah .DB 0D5h, 2Ah .DB 2Bh, 35h .DB 0C5h, 28h .DB 29h, 25h .DB 0FFh, 3Fh ;4 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 0C9h, 24h .DB 0FDh, 2Fh .DB 17h, 3Ah .DB 0D5h, 2Ah .DB 0D5h, 2Ah .DB 17h, 3Ah .DB 0FDh, 2Fh .DB 0C9h, 24h .DB 0FFh, 3Fh ;5 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 0C3h, 30h .DB 39h, 27h .DB 0CDh, 2Ch .DB 35h, 2Bh .DB 35h, 2Bh .DB 0CDh, 2Ch .DB 39h, 27h .DB 0C3h, 30h .DB 0FFh, 3Fh ;6 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 1, 20h .DB 0CDh, 2Ch .DB 0CDh, 2Ch .DB 31h, 23h .DB 31h, 23h .DB 0CDh, 2Ch .DB 0CDh, 2Ch .DB 1, 20h .DB 0FFh, 3Fh ;7 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 11h, 22h .DB 2Dh, 2Dh .DB 0D5h, 2Ah .DB 23h, 31h .DB 23h, 31h .DB 0D5h, 2Ah .DB 2Dh, 2Dh .DB 11h, 22h .DB 0FFh, 3Fh ;8 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 1, 20h .DB 19h, 26h .DB 39h, 27h .DB 0C1h, 20h .DB 0C1h, 20h .DB 39h, 27h .DB 19h, 26h .DB 1, 20h .DB 0FFh, 3Fh ;9 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 1, 20h .DB 0E1h, 21h .DB 0F1h, 23h .DB 0F1h, 23h .DB 0F1h, 23h .DB 0F1h, 23h .DB 0E1h, 21h .DB 1, 20h .DB 0FFh, 3Fh ;10 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 1, 20h .DB 0E5h, 29h .DB 15h, 2Ah .DB 0D5h, 2Ah .DB 0D5h, 2Ah .DB 15h, 2Ah .DB 0E5h, 29h .DB 1, 20h .DB 0FFh, 3Fh ;11 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 0C1h, 20h .DB 0FDh, 2Fh .DB 0E5h, 29h .DB 0Fh, 3Ch .DB 0Fh, 3Ch .DB 0E5h, 29h .DB 0FDh, 2Fh .DB 0C1h, 20h .DB 0FFh, 3Fh ;12 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 1, 20h .DB 11h, 22h .DB 0E9h, 25h .DB 5, 28h .DB 5, 28h .DB 0E9h, 25h .DB 11h, 22h .DB 1, 20h .DB 0FFh, 3Fh ;13 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 1, 20h .DB 25h, 29h .DB 0F9h, 27h .DB 5, 28h .DB 5, 28h .DB 0F9h, 27h .DB 25h, 29h .DB 1, 20h .DB 0FFh, 3Fh ;14 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 1, 20h .DB 0A1h, 2Ah .DB 0A9h, 2Ah .DB 0A9h, 2Ah .DB 0A9h, 2Ah .DB 0A9h, 2Ah .DB 0A1h, 2Ah .DB 1, 20h .DB 0FFh, 3Fh ;15 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 1, 20h .DB 1, 22h .DB 61h, 24h .DB 1, 25h .DB 1, 25h .DB 61h, 24h .DB 1, 22h .DB 1, 20h .DB 0FFh, 3Fh ;16 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 0E1h, 21h .DB 71h, 23h .DB 0D9h, 26h .DB 0F9h, 26h .DB 0F9h, 26h .DB 0D9h, 26h .DB 71h, 23h .DB 0E1h, 21h .DB 0FFh, 3Fh ;17 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 1, 20h .DB 41h, 20h .DB 95h, 21h .DB 1Dh, 22h .DB 0E9h, 2Fh .DB 1Dh, 24h .DB 15h, 23h .DB 1, 20h .DB 0FFh, 3Fh ;18 .DB 0Ah, 0Eh .DB 0FFh, 3Fh .DB 1, 20h .DB 31h, 20h .DB 39h, 20h .DB 9, 2Bh .DB 89h, 2Bh .DB 0F9h, 20h .DB 71h, 20h .DB 1, 20h .DB 0FFh, 3Fh ;================================== ; Шрифт 5 .BASE FONTM: .DB 5 ; высота шрифта .DB 32,2 .DWB CHAR32 ; 48-57 цифры .DB 48,3 .DWB CHAR48 .DB 49,3 .DWB CHAR49 .DB 50,3 .DWB CHAR50 .DB 51,3 .DWB CHAR51 .DB 52,3 .DWB CHAR52 .DB 53,3 .DWB CHAR53 .DB 54,3 .DWB CHAR54 .DB 55,3 .DWB CHAR55 .DB 56,3 .DWB CHAR56 .DB 57,3 .DWB CHAR57 ; русские буквы .DB 128,3 .DWB CHAR128 .DB 160,3 .DWB CHAR128 .DB 129,3 .DWB CHAR129 .DB 161,3 .DWB CHAR129 .DB 130,4 .DWB CHAR130 .DB 162,4 .DWB CHAR130 .DB 131,3 .DWB CHAR131 .DB 163,3 .DWB CHAR131 .DB 132,5 .DWB CHAR132 .DB 164,5 .DWB CHAR132 .DB 133,3 .DWB CHAR133 .DB 165,3 .DWB CHAR133 .DB 134,5 .DWB CHAR134 .DB 166,5 .DWB CHAR134 .DB 135,3 .DWB CHAR135 .DB 167,3 .DWB CHAR135 .DB 136,4 .DWB CHAR136 .DB 168,4 .DWB CHAR136 .DB 137,5 .DWB CHAR137 .DB 169,5 .DWB CHAR137 .DB 138,4 .DWB CHAR138 .DB 170,4 .DWB CHAR138 .DB 139,4 .DWB CHAR139 .DB 171,4 .DWB CHAR139 .DB 140,5 .DWB CHAR140 .DB 172,5 .DWB CHAR140 .DB 141,3 .DWB CHAR141 .DB 173,3 .DWB CHAR141 .DB 142,4 .DWB CHAR142 .DB 174,4 .DWB CHAR142 .DB 143,3 .DWB CHAR143 .DB 175,3 .DWB CHAR143 .DB 144,3 .DWB CHAR144 .DB 224,3 .DWB CHAR144 .DB 145,3 .DWB CHAR145 .DB 225,3 .DWB CHAR145 .DB 146,3 .DWB CHAR146 .DB 226,3 .DWB CHAR146 .DB 147,3 .DWB CHAR147 .DB 227,3 .DWB CHAR147 .DB 148,5 .DWB CHAR148 .DB 228,5 .DWB CHAR148 .DB 149,3 .DWB CHAR149 .DB 229,3 .DWB CHAR149 .DB 150,4 .DWB CHAR150 .DB 230,4 .DWB CHAR150 .DB 151,4 .DWB CHAR151 .DB 231,4 .DWB CHAR151 .DB 152,5 .DWB CHAR152 .DB 232,5 .DWB CHAR152 .DB 153,6 .DWB CHAR153 .DB 233,6 .DWB CHAR153 .DB 154,4 .DWB CHAR154 .DB 234,4 .DWB CHAR154 .DB 155,5 .DWB CHAR155 .DB 235,5 .DWB CHAR155 .DB 156,3 .DWB CHAR156 .DB 236,3 .DWB CHAR156 .DB 157,3 .DWB CHAR157 .DB 237,3 .DWB CHAR157 .DB 158,5 .DWB CHAR158 .DB 238,5 .DWB CHAR158 .DB 159,4 .DWB CHAR159 .DB 239,4 .DWB CHAR159 .DB 240,5 .DWB CHAR240 .DB 241,5 .DWB CHAR240 ; латинские буквы .DB 65,3 .DWB CHAR128 .DB 97,3 .DWB CHAR128 .DB 66,4 .DWB CHAR130 .DB 98,4 .DWB CHAR130 .DB 67,3 .DWB CHAR145 .DB 99,3 .DWB CHAR145 .DB 68,4 .DWB CHAR68 .DB 100,4 .DWB CHAR68 .DB 69,3 .DWB CHAR133 .DB 101,3 .DWB CHAR133 .DB 70,3 .DWB CHAR70 .DB 102,3 .DWB CHAR70 .DB 71,3 .DWB CHAR71 .DB 103,3 .DWB CHAR71 .DB 72,3 .DWB CHAR141 .DB 104,3 .DWB CHAR141 .DB 73,3 .DWB CHAR73 .DB 105,3 .DWB CHAR73 .DB 74,4 .DWB CHAR74 .DB 106,4 .DWB CHAR74 .DB 75,4 .DWB CHAR138 .DB 107,4 .DWB CHAR138 .DB 76,3 .DWB CHAR76 .DB 108,3 .DWB CHAR76 .DB 77,5 .DWB CHAR140 .DB 109,5 .DWB CHAR140 .DB 78,4 .DWB CHAR78 .DB 110,4 .DWB CHAR78 .DB 79,4 .DWB CHAR142 .DB 111,4 .DWB CHAR142 .DB 80,3 .DWB CHAR144 .DB 112,3 .DWB CHAR144 .DB 81,5 .DWB CHAR81 .DB 113,5 .DWB CHAR81 .DB 82,4 .DWB CHAR82 .DB 114,4 .DWB CHAR82 .DB 83,4 .DWB CHAR83 .DB 115,4 .DWB CHAR83 .DB 84,3 .DWB CHAR146 .DB 116,3 .DWB CHAR146 .DB 85,4 .DWB CHAR85 .DB 117,4 .DWB CHAR85 .DB 86,5 .DWB CHAR86 .DB 118,5 .DWB CHAR86 .DB 87,5 .DWB CHAR87 .DB 119,5 .DWB CHAR87 .DB 88,3 .DWB CHAR149 .DB 120,3 .DWB CHAR149 .DB 89,3 .DWB CHAR147 .DB 121,3 .DWB CHAR147 .DB 90,4 .DWB CHAR90 .DB 122,4 .DWB CHAR90 ; 33-47 .DB 33,1 .DWB CHAR33 .DB 34,3 .DWB CHAR34 .DB 35,5 .DWB CHAR35 .DB 36,5 .DWB CHAR36 .DB 37,5 .DWB CHAR37 .DB 38,5 .DWB CHAR38 .DB 39,1 .DWB CHAR39 .DB 40,2 .DWB CHAR40 .DB 41,2 .DWB CHAR41 .DB 42,3 .DWB CHAR42 .DB 43,3 .DWB CHAR43 .DB 44,2 .DWB CHAR44 .DB 45,3 .DWB CHAR45 .DB 46,1 .DWB CHAR46 .DB 47,5 .DWB CHAR47 ; 58-64, 91-96 .DB 58,1 .DWB CHAR58 .DB 59,2 .DWB CHAR59 .DB 60,3 .DWB CHAR60 .DB 61,3 .DWB CHAR61 .DB 62,3 .DWB CHAR62 .DB 63,3 .DWB CHAR63 .DB 64,4 .DWB CHAR64 ; 91-96 .DB 91,2 .DWB CHAR91 .DB 92,5 .DWB CHAR92 .DB 93,2 .DWB CHAR93 .DB 94,3 .DWB CHAR94 .DB 95,3 .DWB CHAR95 .DB 96,2 .DWB CHAR96 ; 123-127 .DB 123,3 .DWB CHAR123 .DB 124,1 .DWB CHAR124 .DB 125,3 .DWB CHAR125 .DB 126,4 .DWB CHAR126 .DB 127,5 .DWB CHAR127 .DB 255 CHAR32: .DB 0,0 CHAR33: .DB 17h CHAR34: .DB 3,0,3 CHAR35: .DB 0Ah,1Fh,0Ah,1Fh,0Ah CHAR36: .DB 17h,15h,1Fh,15h,1Dh CHAR37: .DB 13h,0Bh,4,1Ah,19h CHAR38: .DB 1Ch,13h,17h,8,14h CHAR39: .DB 3 CHAR40: .DB 0Eh,11h CHAR41: .DB 11h,0Eh CHAR42: .DB 0Ah,4,0Ah CHAR43: .DB 4,0Eh,4 CHAR44: .DB 10h,8 CHAR45: .DB 4,4,4 CHAR46: .DB 10h CHAR47: .DB 10h,8,4,2,1 CHAR48: .DB 1Fh,11h,1Fh CHAR49: .DB 12h,1Fh,10h CHAR50: .DB 19h,15h,13h CHAR51: .DB 11h,15h,1Fh CHAR52: .DB 7,4,1Fh CHAR53: .DB 17h,15h,1Dh CHAR54: .DB 1Eh,15h,1Dh CHAR55: .DB 1,1Dh,3 CHAR56: .DB 1Bh,15h,1Bh CHAR57: .DB 17h,15h,0Fh CHAR58: .DB 0Ah CHAR59: .DB 10h,0Ah CHAR60: .DB 4,0Ah,11h CHAR61: .DB 0Ah,0Ah,0Ah CHAR62: .DB 11h,0Ah,4 CHAR63: .DB 1,15h,3 CHAR64: .DB 0Eh,11h,17h,17h CHAR91: .DB 1Fh,11h CHAR92: .DB 1,2,4,8,10h CHAR93: .DB 11h,1Fh CHAR94: .DB 2,1,2 CHAR95: .DB 10h,10h,10h CHAR96: .DB 1,2 CHAR123: .DB 4,1Bh,11h CHAR124: .DB 1Fh CHAR125: .DB 11h,1Bh,4 CHAR126: .DB 2,1,2,1 CHAR127: .DB 1Ch,12h,11h,12h,1Ch CHAR128: .DB 1Eh,9,1Eh CHAR129: .DB 1Fh,15h,1Dh CHAR130: .DB 1Fh,15h,15h,0Ah CHAR131: .DB 1Fh,1,1 CHAR132: .DB 10h,1Eh,11h,1Fh,10h CHAR133: .DB 1Fh,15h,11h CHAR134: .DB 1Bh,4,1Fh,4,1Bh CHAR135: .DB 11h,15h,1Bh CHAR136: .DB 1Fh,8,4,1Fh CHAR137: .DB 1Fh,10h,9,4,1Fh CHAR138: .DB 1Fh,4,0Ah,11h CHAR139: .DB 10h,1Eh,1,1Fh CHAR140: .DB 1Fh,2,4,2,1Fh CHAR141: .DB 1Fh,4,1Fh CHAR142: .DB 0Eh,11h,11h,0Eh CHAR143: .DB 1Fh,1,1Fh CHAR144: .DB 1Fh,5,7 CHAR145: .DB 1Fh,11h,11h CHAR146: .DB 1,1Fh,1 CHAR147: .DB 17h,14h,1Fh CHAR148: .DB 7,5,1Fh,5,7 CHAR149: .DB 1Bh,4,1Bh CHAR150: .DB 1Fh,10h,1Fh,10h CHAR151: .DB 3,4,4,1Fh CHAR152: .DB 1Fh,10h,1Fh,10h,1Fh CHAR153: .DB 1Fh,10h,1Fh,10h,1Fh,10h CHAR154: .DB 1,1Fh,14h,1Ch CHAR155: .DB 1Fh,14h,1Ch,0,1Fh CHAR156: .DB 1Fh,14h,1Ch CHAR157: .DB 11h,15h,0Eh CHAR158: .DB 1Fh,4,0Eh,11h,0Eh CHAR159: .DB 16h,0Dh,5,1Fh CHAR240: .DB 1Eh,17h,16h,17h,12h CHAR68: .DB 11h,1Fh,11h,0Eh CHAR70: .DB 1Fh,5,1 CHAR71: .DB 0Eh,11h,19h CHAR73: .DB 11h,1Fh,11h CHAR74: .DB 8,11h,1Fh,1 CHAR76: .DB 1Fh,10h,10h CHAR78: .DB 1Fh,2,4,1Fh CHAR81: .DB 0Eh,11h,19h,0Eh,10h CHAR82: .DB 1Fh,5,0Dh,16h CHAR83: .DB 12h,15h,15h,9 CHAR85: .DB 0Fh,10h,10h,0Fh CHAR86: .DB 7,8,10h,8,7 CHAR87: .DB 0Fh,10h,8,10h,0Fh CHAR90: .DB 19h,15h,15h,13h .ENDP |
||||||||||
НПП "СЕМИКО" (383) 271-01-25 (многоканальный) |