Таймер для медитаций (МК-161)

Программа «Таймер Дзэн» позволяет отмерять промежутки времени от 0,5 минуты до нескольких часов и предназначена в помощь тем, кто проводит дзадзэн или медитирует самостоятельно.

Наберите, сколько минут собираетесь сидеть и нажмите В/О С/П. Программа выведет полный круг. Для начала первого отсчёта нажмите любую клавишу. Круг начнёт уменьшаться пропорционально пройденному времени.

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


		.CHARSET 1251

; Файл ZenTimer.mkl
; Программа "Таймер Дзэн"
; Разработана в Москве, 12 июля 2010 года
; Автор Васильев И.В.
;
; Таймер для медитаций замеряет время в широком диапазоне:
; от 0,5 минуты до нескольких часов, с точностью до единиц
; секунд.
;
; Для компиляции используйте программу MKL2MKP.
;
; Инструкция:
; 1. Набрать продолжительность медитации в минутах, например 45
;    и нажать В/О С/П.
; 2. Дождаться знака паузы и изображения круга.
; 3. Приготовиться к медитации и нажать любую клавишу, кроме С/П.
;    Знак паузы исчез с экрана, круг начал уменьшаться.
;    Именно с этого момента МК-161 начал отсчёт времени.
; 4. По завершении периода медитации МК-161 издаст короткий
;    звуковой сигнал и вновь отобразит символ паузы и полный круг.
; 5. При желании можно нажать любую клавишу (см. пункт 3),
;    чтобы повторить сеанс медитации той же длительности.
;
; ВНИМАНИЕ!  Программа "Таймер Дзэн" не проверяет, хватит ли
; у МК-161 питания на запрошенный интервал времени.  Если
; аккумулятор сильно подсажен, выключите подсветку МК-161 или
; даже включите ЭКВМ в сеть питания.
;

		.ORG 0

		ENT 60 / M0				; Продолжительность медитации, теперь в часах
		9 EE 3 Me				; Регистр начальных координат объекта
		44 + Ma					; Регистр чтения памяти программ
		11 + Mb					; Регистр текущего времени
		Cx PPM 9045				; Размерность: градусы
NextPeriod:
		2 PPM 9010				; Инициализация графического экрана
		19 PPM 9020				; Вывод знака паузы
		KGRPH					; Отображаем паузу, ещё до вывода круга
;
; Нарисуем круг.
;
		.NUMT tblCircle				; Предвычисленный круг
		PPM 9042				; Запись индексного регистра
		32 M1					; Половина количества линий в круге
Circle:
		32 RM1 -				; Координата y верхней линии
		64					; Середина горизонтали
		KRMa					; Чтение содержимого памяти программ
		- M2					; Левая граница отрезка
		KMe					; Начальные координаты отрезка
		Cx 63 FANS + M3				; Границы отрезка по горизонтали
		PPM 9012				; Вывод линии
		31 RM1 +				; Координата y нижней линии
		RM2 KMe					; Начальные координаты отрезка
		FR RM3 PPM 9012				; Вывод линии
		KGRPH					; Отобразить графический экран
		FL1 Circle				; Заполнить круг до конца
KeyWait:
		PPRM 9029				; Чтение кода нажатой клавиши
		KNOT FX!=0 KeyWait			; Ожидание нажатия
		KRMb KMS->D Mc				; Засечь время начала медитации
;
; Постепенно стираем круг.
;
		.NUMT tblErase				; Таблица с инструкциями для 4 квадрантов
		PPM 9042				; Запись индексного регистра
;
; R0  продолжительность медитации, в часах и долях часа
; R1  счётчик по точкам
; R2  счётчик по сторонам квадранта
; R3  счётчик по квадрантам: 4, 3, 2, 1
; R4  x0 центр
; R5  y0 центр
; R6  x конец радиус-вектора
; R7  y конец радиус-вектора
; R8  dx шаг радиус-вектора
; R9  dy шаг радиус-вектора
; Ra  =9044
; Rb  =9055
; Rc  время начала медитации, в часах и долях часа
; Rd  требуемое время от начала медитации
; Re  =9000
;
		4 M3 PPM 9001				; Четыре квадранта, рисование стирает
		64 M6 Cx M7				; Конец радиус-вектора, направленного вверх
		ENT KMe					; Объект (прямоугольник) в начале координат
		8 ENT 3 PPM 9013			; Сотрём знак паузы
		KGRPH					; Обновим экран без знака паузы
NxtUgol:
		KRMa M5 KRMa M4 KMe			; Считаем из таблицы координаты радиус-вектора
		2 M2					; В каждом квадранте две стороны
		31					; Длина первой стороны
NxtLine:
		M1					; Сохраним длину текущей стороны в R1
		KRMa Fcos M8 KRMa Fcos M9		; Считаем dx, dy из таблицы в регистры 8, 9
NxtDot:
;
; Вычисляем новый градус.
;
		RM6 RM4 - RM5 RM7 -			; Вычислим проекции радиус-вектора на оси
		Fx=0 Atangens				; Если отрезок горизонтален, особый случай
		90					; это прямой угол, где арктангенс сбоит
		RM3 3 - Fx>=0 Plus180			; В квадрантах 1 и 2 это 180+90 градусов
		FR GOTO StoreGradus			; В квадрантах 4 и 3 это 90 градусов
Atangens:
		/ Farctg				; Вычислим угол радиус-вектора через арктангенс
Gradus:
		4 RM3 - Fx!=0 Done			; В квадранте 4 это и есть угол
		3 - Fx=0 Plus180			; В квадрантах 3, 2 вычисляем 180+угол
		Cx 360					; В квадранте 1 вычисляем 360+угол
		GOTO Done
Plus180:
		Cx 180					; Заменяем число в RX на 180
Done:
		+					; Корректируем градусную меру угла
StoreGradus:
;
; RX: величина очищаемого сектора круга, в градусах.
; Вычисляем требуемую задержку.
;
		RM0 * 360 / Md				; За 360 градусов должно пройти R0 часов
;
; Временная задержка.
;
WaitTime:
		KRMb KMS->D RMc -			; Сколько длится медитация?
		FX<0 General				; Если длительность отрицательная,
		24 +					; значит мы перешли через полночь
General:	RMd -					; Сравнить с требуемой длительностью
		FX>=0 WaitTime				; Если не дождались, ждать
;
; Стираем очередную линию.
;
		RM7 RM6 PPM 9012			; Вывод радиус-вектора
		KGRPH					; Обновляем экран
		RM8 + M6 FR RM9 + M7			; Вычисляем координаты следующего радиус-вектора
		FL1 NxtDot				; Обработать сторону до конца
		32					; Количество точек во второй стороне
		PFL2 NxtLine				; Обработать обе стороны
		PFL3 NxtUgol				; Обработать все четыре квадранта

		440 ENT 10 PPM 9052			; Звуковая сигнализация
WaitSound:
		PPRM 9052				; Звук всё ещё звучит?
		FX=0 WaitSound				; Дождёмся окончания звука
		PGOTO NextPeriod			; Переходим на ожидание следующего периода

tblCircle:						; Данные для рисования круга
		.DB 6, 10, 12, 15, 16, 18, 19, 21	; Ширина линий 0..31 (63..32)
		.DB 22, 23, 24, 25, 25, 26, 27, 27
		.DB 28, 29, 29, 29, 30, 30, 31, 31
		.DB 31, 31, 32, 32, 32, 32, 32, 32
tblErase:						; Данные для стирания круга
		.DB 31,64, 0,90, 90,0			; y0,x0, dx,dy, dx,dy
		.DB 32,64, 90,0, 180,90
		.DB 32,63, 180,90, 90,180
		.DB 31,63, 90,180, 0,90

		.END
  0 1 2 3 4 5 6 7 8 9
0000 B↑ 6 0 ÷ П 0 9 ВП 3 П E 4
0010 4 + П A 1 1 + П B Cx PP П 90
0020 45 2 PP П 90 10 1 9 PP П 90 20
0030 K ГРФ 2 2 3 PP П 90 42 3 2 П 1
0040 3 2 ИП 1 - 6 4 K ИП A - П 2 K П E
0050 Cx 6 3 F Bx + П 3 PP П 90 12 3
0060 1 ИП 1 + ИП 2 K П E F O ИП 3 PP П 90 12
0070 K ГРФ F L1 40 PP ИП 90 29 K NOT F x≠0 73 K ИП B
0080 K МС→Г П C 2 5 5 PP П 90 42 4 П 3
0090 PP П 90 01 6 4 П 6 Cx П 7 B↑ K П E
0100 8 B↑ 3 PP П 90 13 K ГРФ K ИП A П 5 K ИП A
0110 П 4 K П E 2 П 2 3 1 П 1 K ИП A F cos П 8
0120 K ИП A F cos П 9 ИП 6 ИП 4 - ИП 5 ИП 7 - F x=0
0130 41 9 0 ИП 3 3 - F x≥0 58 F O БП
0140 63 ÷ F arctg 4 ИП 3 - F x≠0 62 3 -
0150 F x=0 58 Cx 3 6 0 БП 62 Cx 1
0160 8 0 + ИП 0 × 3 6 0 ÷ П D
0170 K ИП B K МС→Г ИП C - F x<0 79 2 4 + ИП D
0180 - F x≥0 70 ИП 7 ИП 6 PP П 90 12 K ГРФ ИП 8
0190 + П 6 F O ИП 9 + П 7 F L1 23 3 2
0200 PF L2 01 16 PF L3 01 07 4 4 0 B↑
0210 1 0 PP П 90 52 PP ИП 90 52 F x=0 15
0220 P БП 00 21 06h 0Ah 0Ch 0Fh 10h 12h 13h
0230 15h 16h 17h 18h 19h 19h 1Ah 1Bh 1Bh 1Ch
0240 1Dh 1Dh 1Dh 1Eh 1Eh 1Fh 1Fh 1Fh 1Fh 20h
0250 20h 20h 20h 20h 20h 1Fh 40h 00h 5Ah 5Ah
0260 00h 20h 40h 5Ah 00h B4h 5Ah 20h 3Fh B4h
0270 5Ah 5Ah B4h 1Fh 3Fh 5Ah B4h 00h 5Ah FFh
0280 FFh FFh FFh FFh FFh FFh FFh FFh FFh FFh
0290 FFh FFh FFh FFh FFh FFh FFh FFh FFh FFh

Контрольная сумма ADD 23224

Контрольная сумма XOR 130

Страничка программы на официальном сайте ЭКВМ, с дополнительными картинками:
http://mk.semico.ru/mkpr_58.htm

Прикрепленный файлРазмер
zentimer.mkl5.58 кб
zentimer.mkp601 байта