Книга перемен на МК-161

И-Цзин («Книга перемен») это классический китайский труд, включённый в китайское Пятикнижье. Предположительно он появился до возникновения письменности и представлял из себя простейший способ записи 64 наиболее важных и часто повторяющихся ситуаций (с помощью шести палочек, целых или сломанных). В последующие тысячелетия человечество накапливало опыт, развивало вокабуляр и изобразительные средства, а в «Книгу перемен» добавлялись новые смысловые пласты: афоризмы, комментарии, трактовки,… Сейчас она представляет из себя самую древнюю базу данных, к которой охотно обращаются за мудрым советом писатели, учёные и политики Востока — как жившие в прошлых веках, так и современные.

«Книга перемен» настолько повлияла на культуру Китая, Японии и других стран Востока, что исследователи-востоковеды сравнивают её с «Библией» стран Запада. В России и на Западе «Книга перемен» в-основном используется эмигрантами из стран Востока, а также гадалками-«эзотериками». В доме книги на Арбате две книжные полки заполнены книгами с различными трактовками И-цзин. Моя инструкция даже не пытается заменить подобную книгу, но программа «Книга перемен» способна помочь читателю любой из них.

Предлагаемая программа рисует на экране МК-161 (и МК-152, не проверялось) все 64 гексограммы «Книги перемен», а также их номера и названия на китайском и русском языках. Для определённости мной использовался академический перевод Щуцкого, но представители аутентичных школ могут использовать собственный, изменив текст (содержимое регистров R5096…8167) во встроенном текстовом редакторе МК-161.

При запуске программы на экран выводится случайная гексограмма, выбранная в соответствии с КСЧ. Чтобы МК-161 самостоятельно (и независимо от вас) генерировал последующие случайные гексограммы, нажимайте клавишу Cx. Для просмотра соседних гексограмм используйте клавиши ШГ. Чтобы перейти на нужную гексограмму, просто наберите её двухзначный номер (например, 02 для перехода на гексограмму «Кунь»).

Также в программе реализован способ гадания, традиционный для ПМК. Стоит нажать клавишу Р-ГРД-Г, как ЭКВМ начнёт последовательно перебирать все 64 гексограммы по нескольку за секунду, начиная с последней отображённой. При повторном нажатии на клавишу Р-ГРД-Г на экран будет выведена та гексограмма, которая рассматривалась микрокалькулятором в момент вашего вмешательства.

Существует множество других, не менее традиционных, способов гадания по «Книге перемен». Можно гадать на дату рождения или события. Некоторые школы китайской медицины и астрономии используют гексограммы в качестве ключа к своим научным базам данных. Чтобы облегчить реализацию вашего проверенного способа использования «Книги перемен», программа составлена из удобных подпрограмм, обращение к которым вынесено в самое начало нулевой страницы. Просто закодируйте собственный алгоритм, а выводом гексограмм и их преобразованием между стандартной нумерацией Вэнь-вана и двоичным представлением Фу-си займутся мои мощные подпрограммы.

Программа «Книга перемен» представляет из себя пакет, то есть требует наличия в памяти ЭКВМ заранее подготовленного набора байтовых регистров, что реализуется загрузкой кроме программного кода (MKP) двух дополнительных файлов, двоичного (MKB) и текстового (MKT). Все необходимые файлы (и приведённый скриншот) присутствуют в архиве YiJing.zip

Для записи «Книги перемен» в МК-161 рекомендую использовать MK.EXE версии 1.16 или выше, т.к. в предыдущих содержалась ошибка передачи двоичных файлов. Подходящую версию MK.EXE можно скачать с сайта производителя, то есть отсюда:
http://mk.semico.ru/prog.htm


		.CHARSET 1251

; Файл YiJing.mkl
; Разработан в Москве, 31 июля 2009 года
; Автор Васильев И.В.
; Вывод гексограмм по "Книге перемен"
;
; Не забудьте загрузить в ЭКВМ файлы MKT и MKB
;
; Файл MKT содержит перевод гексограмм по Щуцкому:
; Щуцкий Ю.К. Китайская классическая "Книга перемен": 2-е изд., испр. и доп.
; под ред. А.И.Кобзева. -- М.: Изд. фирма "Восточная литература" РАН, 1997.
; -- 606 c. -- ISBN 5-02-017991-4
;
; Структура файла MKB:
; 000..004  R1000..R1004  Картинка символа №
; 010..019  R1016..R1025  Заголовок экрана гадания
; 020..037  R1032..R1055  Первая строчка экрана гадания
; 040..054  R1064..R1084  Вторая строчка экрана гадания
; 060..078  R1096..R1119  Третья строчка экрана гадания
; FA1..FE0  R5001..R5064  Двоичные картинки гексограмм 1..64 (номера Фу-си)
;

		.ORG 0

; ======= № 33
; ======= Дунь
; =======
; =======
; === ===
; === ===
;
; Бегство
;
;

BIN_IMG_N	.EQU	1000
BIN_HEADER	.EQU	1016
BIN_LINE1	.EQU	1032
BIN_LINE2	.EQU	1064
BIN_LINE3	.EQU	1096

;
; Функции "Книги перемен" используют (портят) регистры R0, R1, R6, Ra, Rc
;
		GOTO	Start			; 0000 Dialog
		KNOP
		GOTO	StartN			; 0003 N --> (dialog)
		KNOP
		PGOTO	DrawN			; 0006 N --> (screen)
		PGOTO	DrawBin			; 0009 Фу-си -->
		GOTO	CreateN			; 0012 N --> Фу-си
		KNOP
		GOTO	SearchBin		; 0015 Фу-си --> N
		KNOP
		GOTO	MachineN		; 0018 --> N (1..64)
		KNOP
		PGOTO	UserN			; 0021 --> N (1..64)
		GOTO	TextChi			; 0024 N --> text
		KNOP
;		GOTO	TextRus			; 0027 N --> text

TextRus:	GSB TextChi			; Получить китайское название
		M6				; Известно, что первый символ не ноль
SearchZ:	KRM6 FX=0 SearchZ		; Поиск первого нуля
		RM6 1 + RTN			; Искомая строка после него

TextChi:	ENT 48 * 5048 + RTN		; Китайское название идёт первым

;----------------------------------
; Найти гексограмму с рисунком в RX
; Ответ в R0 и RX
; Изменяет R1
;
SearchBin:	ENT 64 M0 5 EE 3 + M1		; Ищем 64 раза, начиная с R5064
CmpBin:
		FX!=0 FoundBin			; Если найдена, выдать её номер
		FR ENT KRM1 - FL0 CmpBin	; Сравнить и перейти к следующей
FoundBin:	RM0 RTN				; Возвращаем найденную тетраграмму

CreateN:	ENT 5 EE 3 + MA KRMA RTN	; Преобразовать N в двоичный код Фу-си

MachineN:	KRAN 64 * 1 + KINT RTN		; Получить случайное N от 1 до 64

Start:
		GSB MachineN			; Получить случайную гексограмму
StartN:
		PGSB DrawN			; Вывести картинку с гексограммой
;
; ШГ -- перейти на соседнюю гексограмму
; Cx -- перейти на случайную гексограмму (RND)
; 0..9 -- задать номер гексограммы
; Р-ГРД-Г -- гадать (до повторного нажатия Р-ГРД-Г)
;
Wait:
		PPRM 9029
		10 - PX>=0 Key09		; 0..9 выбирает номер с клавиатуры
		3  - FX!=0 Start		; Cx выводит случайную гексограмму
		10 - FX!=0 KeyRight		; ШГ> Последующая гексаграмма
		1  - FX!=0 KeyLeft		; ШГ< Предыдущая гексаграмма
		7  - PX=0  Wait			; Р-ГРД-Г, гадание
		PGSB	UserN
		GOTO	StoreN

Key09:
		FANS + RMC FANS / KFRAC
		100 * 60 KMAX FR
jPlusStoreN:
		+ 64 KMAX FR EE
StoreN:
		PGOTO StartN
KeyLeft:
		RMC 1 - FX=0 StoreN
		64 GOTO StoreN
KeyRight:
		RMC 63 KAND 1
		GOTO jPlusStoreN

;--------------------------------------------
; Выводим гексограмму с номером в RX.
; Помимо гексограммы выводится всё обрамление
; Переходим на графический экран
; Изменяет регистры R0, R6, RA, RC
;
DrawN:
		MC				; Запомним номер гексограммы в RC
		PGSB CreateN			; Перевести гексограмму в двоичный код Фу-си
		PGSB DrawBin			; Вывести гексограмму на экран
		0 ENT 40 PPM9000
		78 PPM 9020			; N
		.NUM BIN_IMG_N			; №
		PPM 9016			; Вывод графического образа из памяти данных
		0 ENT 52 PPM9000
		RMC PPM9023			; Вывести номер гексограммы
		8 ENT 40 PPM9000
		RMC PGSB TextChi M6 PPM 9022	; Вывести название гексограммы
		48 ENT 0 PPM9000
		PGSB SearchZ PGSB MLit		; Вывести перевод гексограммы
		K GRPH				; Графический режим
		RTN

; R4=8 расстояние между линиями плюс R5 (8)
; R5=5 толщина линии (5)
; R7=16 длина малой чёрточки (15)
; R8=8 зазор между малыми чёрточками (5)

;----------------------------------------------------------
; Выводим гексограмму Фу-си RX.
; Изменяет регистры R0, RA
; Инициализирует графический экран, но не переходит на него
;
DrawBin:	MA
		2 PPM 9010			; Инициализация экрана (Графический экран)
		6 M0				; Обработать 6 линий
NextLine:	RMA 2 / KINT MA			; Перейти к следующей линии
		FANS KFRAC FX!=0 OutLine0	; Какую черту выводим?
		5 ENT 35			; Вывести длинную чёрточку
		GOTO OutRect			; Вывод прямоугольника (Графический экран)
OutLine0:					; Вывести прерывистую черту
		5 ENT 15			; Вывести малую чёрточку
		PPM 9013			; Вывод прямоугольника (Графический экран)
		PPRM 9000			; Считать начальные координаты объекта (Графический экран)
		20 +				; Сдвинуть вправо на чёрточку и зазор
		PPM 9000			; Установить начальные координаты объекта (Графический экран)
		5 ENT 15			; Вывести малую чёрточку
OutRect:	PPM 9013			; Вывод прямоугольника (Графический экран)
		7 RM0 - 8 *			; На следующую строчку
		0
		PP M 9000			; Начальные координаты объекта (Графический экран)
		FL0 NextLine			; Вывести следующую линию
		RTN

;------------------------------------------------------
; Получаем случайный номер гексограммы от пользователя.
; Ответ в RC и RX.
;
UserN:
		2 PPM 9010			; Инициализация экрана (Графический экран)
		0 ENT PPM 9000
		.NUM BIN_HEADER
		PPM 9022			; Вывод строки символов из памяти программ
		16 ENT 0 PPM 9000
		.NUM BIN_LINE1
		PPM 9022
		32 ENT 0 PPM 9000
		.NUM BIN_LINE2
		PPM 9022
		48 ENT 0 PPM 9000
		.NUM BIN_LINE3
		PPM 9022
		K GRPH
Razdumja:
		RMC 63 KAND 1 + MC
		PPRM 9029 31 - FX=0 Razdumja
		RMC
MLfinished:	RTN

;--------------------------------------------------
; Вывести строчку, начиная с R6+1
; Результат может занимать несколько строчек экрана
; при этом символ FF служит переводом строки
;
Multiline:	RM6 1 +
MLit:		PPM9022				; Вывод строки символов из памяти данных
Search255:	KRM6 FX!=0 MLfinished		; Строчка заканчивается нулевым символом
		KNOT FX=0 Search255		; Поиск символа с кодом 255
		PPRM9000			; Программирование начальных координат объекта
		Cx 8 + 0 PPM9000		; Переход на следующую строчку
		GOTO Multiline

		.END

Прикрепленный файлРазмер
YiJing.zip5.08 кб
YiJing.mkl6.12 кб
YiJing.mkp801 байта
YiJing.mkb4 кб
YiJing.mkt3 кб