Тренировка памяти |
Главная / ЭКВМ / Программы для ЭКВМ / Игры |
Особенности программы для ЭКВМНабор карт определяется при настройке и может быть выбран из ряда предлагаемых или установлен случайным образом. В отличие от скучных своей предсказуемостью аналогичных компьютерных игр количество карт в одной группе может варьироваться от 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 (многоканальный) |