Терминал на МК-161: Начало

Начал было работу над прошивкой МК-161… и обнаружил, что у меня нет под рукой терминальной программы. Да и COM-порта нет, только эмулируемый через USB. Но если есть два МК-161, у каждого RS-232C, почему бы один не использовать под терминал? Сказано — сделано.

После нескольких экспериментов получилось не просто написать приёмник и передатчик на входном языке МК-161, но ещё и объединить их в один «терминал». Пока он может выводить любые принятые символы, правда только в одну строчку. Передаёт же корректно он лишь цифры и приветствие "Hello, world!" кнопкой В↑. Причём в обе стороны — что набирается на клавиатуре одного МК-161, отображается на экране соседа и наоборот! МК-161 работает в полудуплексе. Если клавиши нажать одновременно и там, и там, передать ничего не получится.
Экраны

Оказалось, что для соединения двух МК-161 достаточно присоединить к каждой фирменный «Переходник зарядного устройства для МК-161», между ними включить фирменный «Кабель связи ЭКВМ с ПЭВМ (RS-232, 9m-9f)» и MINI GENDER CHANGER на 9 штырьков папа-папа. Ниже приведена иллюстрация и код программы терминала.
Кабели

; comtest.mkl (c) Васильев И.В., 2 сентября 2017, Москва
; Терминал последовательного порта (черновик)
; Распространяется под лицензией GNU GPL v3 или выше

		.charset 1251
		.org 0
		Cx
		1 ppm 9070			; Разрешение порта
		12 ppm 9071			; Скорость обмена 12: 38400 бит/с
		Cx ppm 9072			; Режим обмена 0: восьмибитный
		200 ppm 9073			; Время ожидания при приёме данных 200: 250 мс
		1 ppm 9074			; Режим автоматического приёма после окончания передачи 1: запрещён
CLS:		2 ppm 9010			; Инициализация графического экрана, курсор влево-вверх
Start:
		Cx ppm 9085			; Обнулим индексный регистр буфера приёма
		k grph				; Отрисовка графического экрана
		1 ppm 9076			; Приём данных 1: установка разрешения приёма
Wait:
		pprm 9076  px!=0 Receiving	; Регистр разрешения приёма должен обнулиться после завершения приёма
		pprm 9029  knot  fx!=0 Wait	; Чтение кода нажатой кнопки, если нет ждём
		13 fans -  fx!=0 CLS		; Cx очищает экран

		Cx ppm 9080			; Обнулим индексный регистр буфера передачи
		14 fans -  fx!=0 SendMsg	; В^ шлёт привет

		48 fans +  ppm 9082		; Быстро преобразовываем цифры в ASCII и в буфер передачи, автоинкремент
		1 goto SendN
SendMsg:
		15 m0  .numt msg  m5		; Длина и адрес приветствия
StoreMsg:	rm5 k prgm  ppm 9082  krm5	; Очередной символ в буфер передачи, автоинкремент
		fl0 StoreMsg

		15
SendN:		ppm 9077			; Передача данных
SendMore:	pprm 9077  px=0 SendMore	; Регистр передачи данных обнуляется после завершения передачи		
		pgoto Start

Receiving:	pprm 9075  m0			; Счётчик посылок
Print:		pprm 9087  ppm 9020		; Вывод символа из буфера приёма, автоинкремент
		fl0 Print
		pgoto Start

msg:		.text "Hello, world!"		; Полная длина приветствия = 15
		.db 13,10
		.endp
Метки публикаций: