МК-152, МК-161

В этой подшивке мы собираем информацию по ПМК Электроника МК-152 и МК-161: общие сведения, программы, примеры из практики...

MK-152, 161 для новичков

=== Место для самых простых вопросов и умных на них ответов ===

Куда в МК-1хх загружается программа и как ее запустить?

Допустим, файл программы предполагается расположить по адресу ORG 6000:

.CHARSET 1251

; Файл pad_linii
.ORG 6000
	.DB 21h 	; 4421h ?
  1. Где в МК-161 расположится программа, если ее загрузить через утилиту МК.ехе?
    В памяти программ со страницы 60. При загрузке в ЭКВМ номер будет показан в отдельном поле в верхней части окна. Страницы от 0 до 59 и выше конца программы перезаписаны не будут.
  2. Как в МК-161 запустить эту программу?
    Р БП 6000, С/П
    Если, конечно, точка входа совпадает с началом программы.
  3. Как в МК-161 сохранить эту программу в файловой системе под нужным именем и как потом запустить оттуда?
    Для записи нажать ВЫХОД, выбрать "ДОС"-"Диск А", перейти в нужный каталог, нажать клавишу F (файл), выбрать "Создать файл программы", ввести имя, начальную страницу 60 и количество страниц для записи.
    Для чтения нажать ВЫХОД, выбрать "ДОС"-"Диск А", перейти в нужный каталог, выбрать файл программы, нажать ВВОД, выбрать "Загрузить", указать страницу 60.

MK-152/161: Old Russian Motive in a New Space Age.

Russian Way Into the New Millennium.


Hello from Civil Hackers' School, Russia. Today we will speak about «Electronica MK-152» model of Russian programmable calculator (note that a portable model «Electronica MK-161» is available since 2009, see comparison table below), whose appearance was like big "BANG!" for the whole Russian and Ukraine Internet community. In a few days two pictures of MK-152 (mine and from developers site) like computer virus spread from one blog to another, like snowball from one news website to the next.

There were only two English articles about MK-152 (1, 2). Both authors haven't tested MK-152, and saw it only on our pictures. Both articles were based on each other and poorly translated gossips from Russian people, who also haven't seen MK-152. None of them went into technical details or cultural background. So its time to present our newborn for the Internet community and give few firsthand words from «Electronica MK-152» owner.

The philosophy of MK-152 came from Academician A. P. Ershov (1931-1988), pioneer of Soviet computers, mainly from his keynote speech "Programming, the second literacy" at the 3rd IFIP/UNESCO World Conference on Computers in Education, Lausanne, 1981. Since the Summer of 1981 his words "second literacy" became winged.

Andrei Petrovich compared the ability to write program with the ability to write and introduced thesis, that "the second literacy is not only the ability to write computer instructions, but also the way to bring up a man who is resolute and prudent at the same time" in the context, that books of our future could include not only text, but also programs to give readers both knowledge and experience. This Russian idea looks complementary to modern western approach of "computer games", where texts are used inside programs as something secondary and unimportant, that could even be skipped by "clever gamer" in a hurry.

Nowadays we have many books with computer programs inside, I just ordered one of them from Amazon. But those short-lived books are mostly focused on some computer device (mine is devoted to Python translator for Nokia smartphones, that changes every few years). Such western books could be bestsellers, but couldn't became classical.

The idea of Andrei Petrovich is deeper, his stroke of genius outlived his century and went further into the Millennium. The first writer, who fully understood his idea, was soviet science fiction writer Mikhail Puhov (1944-1995), also from Siberia. Being inspired by Ershov's scientific genius, he wrote classical sci-fi novel "Returning to the Earth" (djvu in Russian). This novel was published in "Tehnika-Molodyozhi" magazine (the same magazine, where another Russian classical sci-fi Andromeda Nebula was first published) and illustrated with programs for Soviet programmable calculators, that were written by author and checked by Soviet cosmonaut U. N. Glazkov — flight engineer of Salyut 5, Soviet space station. With the help of this little pocket computers we, Soviet youth, made our first space adventures with Puhov heroes, and of our own.

The novel pictures free society with developed space traveling and became like a heartsong of nostalgia for many Soviet patriots, disappointed by globalization of Russia. "Returning to the Earth" nowadays sounds like returning to the earth of our ancestors. To the Soviet Union, that developed space traveling for the whole humankind, but was betrayed and destroyed by people, fallen for foreign money and American "sex", the love-killer.

Like in all Russian classic, the plot of the novel have nothing to do with money, sex desires or killing. You will not find any "fleet" or "blasters", the closest to military action in this science fiction novel is a single cultural reference to Star Trek computer game. It is more about bravery, friendship and space adventures of free people in the world of their own, with a good sense of humor and no politics at all. Programs for Soviet calculators, that were written together with the novel, made this plot a part of our personal, but common experience.

MK-152 supports language of those old Soviet PMK, breathing a new life into the famous Russian novel of Mikhail Puhov.

Tech Side


Of course, MK-152 is not just a clone of those 20-year old personal machines. MK-152 has 100 times more memory and 1000 times faster. In fact, MK-152 could be compared with the best calculators of HP and TI, but only by its speed and fanbase. Soviet models could display 12 digits (and five special characters), graphical "black on green" screen of a new model can display digits, Russian and English letters, a set of special characters. Keyboard is almost the same, the most important improvements are a new prefix and four directional keys.

Instruction set was almost untouched, but expanded to deal with larger memory — something similar Z80 made to 8080/85 in "United States". Most efforts were put into increasing service of firmware. Now one can see not only instruction code (in real hex!), but also instruction mnemonics. The entry language uses reverse-polish notation and resembles the language of HP-12/HP-15, that were more common outside Russia in 80s.

English-speaking world will be happy to hear, that MK-152 could be programmed not only in traditional Russian notation, but also has special mode with English notation. Novosibirsk published a compiler MK.EXE (ru), that can help:

  • to write programs for MK-152 in English notation (you can use labels)

  • to compile them into hexadecimal bytecode
  • to transfer programs to and from MK-152 via RS-232C interface (COM-port)

Now, with the help of PC, we can share our MK-152 programs via Internet!

The drawback is that keyboard is still in Russian (Cyrillic) notation. People, who are fond of Russian culture, can get used to it, because there is one-to-one conformity between Russian and English notations. At least we all here get used to calculators with English buttons.

One can attach devices to MK-152 with the help of its parallel and serial ports. MK-152 uses Centronics and RS-232C interfaces, Russia nowadays has plenty of dirt-cheap second-hand equipment to connect with.

MK-152 is full of original Russian spirit. Programs for MK-152 are openly shared in the community. No DRM is included. All specifications, charts and instructions of MK-152 are freely available on developers website (sorry, on Russian language, but one can hire translator). MK-152 will not force you to pay money for batteries or trouble about how old is your accumulator. It was made to support Russian culture, not to make money from you. You just plug MK-152 into the wall outlet (220V, European outlets are okay) and play with it.

Russia is a country, where electricity isn't stable everywhere. Thats why MK-152 has non-violative memory to hold everything, that was entered via keyboard — both programs and data. Build-in big electronic disk could keep hundreds of MK-152 programs, and even more external disks could be ordered separately. Newest MK-152 models can be upgraded via flash ROM and have API for user programs to access files in internal and external drives.

MK-152 also came from Siberia. I don't know, whether Novosibirsk wants to ship MK-152 with traditional Soviet instruction set directly to other countries. Not everyone are too happy about foreigners nowadays, with all they did to Soviet Union. But some big reseller, I think, could talk developers into reselling models of the only Russian calculator to amateurs from other countries.

Tech Spec

The pilot model of EKC (Electronic Keyboard Computer) doesn't respect Moore's Law. One can understand MK-152 only in comparison with the last Soviet model, MK-52 (See also MK-52 and MK-161 pages on RSkey.org). Twenty years gave a great progress to the Soviet line:

  МК-52 (MK-52) МК-152 (MK-152) МК-161 (MK-161)
Number of decimal digits,
displayed (total)
8 (8) + 2 8 (14) + 2 8 (14) + 2
Number of basic commands 229 242 242
Instruction length 1 or 2 steps 1, 2 or 3 steps 1, 2 or 3 steps
Instruction mnemonics Russian Russian, English Russian, English
Address modes register,
indirect,
indirect-autoincrement,
indirect-autodecrement
register,
direct,
indirect,
indirect-autoincrement,
indirect-autodecrement
register,
direct,
indirect,
indirect-autoincrement,
indirect-autodecrement
Number and size of stack registers 4+1, 8+2 digits 4+1, 14+2 digits 4+1, 14+2 digits
Number and size of decimal registers 15, 8+2 digits 1000, 12+2 digits 1000, 12+2 digits
Number of byte registers No 7168 7168
Electronic notebook capacity No 65536, 12+2 digits 65536, 12+2 digits
Electronic disk capacity 1024 nibbles (512 bytes) 524288 bytes 524288 bytes
File system No Yes, hierarchical Yes, hierarchical
External disk support Read-only (ROM) Read, write Read, write
Maximum program length 105 steps 10000 steps 10000 steps
Procedure stack size 4 64 64
Display resolution 12 digits, green LED 128x64 dots, monochrome LCD 128x64 dots, monochrome LCD
Serial interface No RS-232C compatible RS-232C compatible, SPI
Parallel interface No Centronics, EPP, Static Static
Proprietary interface Yes, not documented Yes, documented Yes, documented
Other interfaces No No A/D
Paperback manual Included, Russian Included, Russian Included, Russian
Communication software No Downloadable for free, for Windows and wine Downloadable for free, for Windows and wine
Cross-compiler, decompiler and other developer tools No Downloadable for free with source code, for Windows and GNU/Linux Downloadable for free with source code, for Windows and GNU/Linux
CPU model К745ИК13 chipset (original) W77LE516 (MCS-51 series) W77LE516 (MCS-51 series)
CPU frequency 455 KHz 22 MHz 22 MHz
Internal bus width, bits 1 bit (serial) 8 bit 8 bit
Development, city Government, Kiev Commercial, Novosibirsk Commercial, Novosibirsk
Years of production 1983-1991 2007-nowadays 2009-nowadays
Size 212 х 78 х 42 mm 250 x 180 x 75 mm 95 x 160 x 50 mm
Weight 250 g (w/o batteries) 900 g 350 g (with cell)
Batteries 4 x AA No Internal rechargeable cell
External power AC adapter 220V AC adapter (built-in) 220V AC adapter 220V
Price 115 Soviet rubles (about $190) 3800 Russian rubles (about $125) 4700 Russian rubles (about $155)

Адаптация vim под МК-161 (подсветка синтаксиса)

Основная документация по раскраске синтаксиса находится на страничке Vim documentation: syntax (англ.) — там есть всё, но она довольно брутальна. :-) Также этому посвящена секция 24 официального FAQ (англ.). Из того же, что я нагуглил про создание файлов синтаксиса, мне понравились и пригодились вот эти простенькие примеры:

Этот материал — формулировка задачи. Напомню, что vim был выбран из-за его кросс-платформенности (современная среда MK.EXE работает только под Windows) и мощности vim хватит для решения любых практических задач. Впрочем, некий proof of concept мне уже удалось сделать:

Часть I. Включить подсветку синтаксиса для MKL-файлов (это легко)

  1. Скачать и установить Vim с сайта http://www.vim.org/download.php
  2. Создать каталоги (в Windows могут отличаться):
    mkdir ~/.vim
    mkdir ~/.vim/ftdetect
    mkdir ~/.vim/syntax
  3. В каталоге ~/.vim/ftdetect создать файл mkl.vim со следующим содержимым, чтобы научить vim распознавать расширение MKL:
    au BufRead,BufNewFile *.mkl		set filetype=mkl
    
  4. В каталоге ~/.vim/syntax создать ещё один файл mkl.vim — который задаёт правила раскраски синтаксиса. Вот его-то нам и надо довести до ума!
  5. Каждый раз, внося изменения в syntax/mkl.vim , перезапускать редактор и проверять полученное.
  6. Если у вас подсветка не активирована, можете добавить строчку syntax enable в файл .vimrc , находящийся в вашем домашнем каталоге (где вы создали каталог .vim ) или даже вот такой набор (англ.):
    syntax enable
    set background=dark
    set nocompatible
    set autoindent
    set smartindent
    set tabstop=4
    set shiftwidth=4
    set showmatch
    set ruler
    set virtualedit=all
    

Часть II. Написать правила подсветки синтаксиса ЭКВМ.

Вот это и есть серьёзная, но вознаграждающая себя работа, которую пока никто за нас не сделал. Для примера я взял за основу правила для ассемблера GNU — и не всё инородное ещё оттуда выбросил. Ниже выложен очень сырой, жуткий текст — можно взять его за основу или полностью заменить на свой. Напомню, что этот текст надо записать в файл ~/.vim/syntax/mkl.vim

" Vim syntax file
" Language:	EKVM
" Maintainer:	None
" Last Change:	2011 Jan 15


" For version 5.x: Clear all syntax items
" For version 6.0 and later: Quit when a syntax file was already loaded
if version < 600
  syntax clear
elseif exists("b:current_syntax")
  finish
endif

"setlocal iskeyword+=/
syn case ignore

" storage types
syn match mklType "\.DB"
syn region mklData start="\.DB" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.DA"
syn region mklData start="\.DA" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.DAH"
syn region mklData start="\.DAH" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.DAL"
syn region mklData start="\.DAL" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.DD"
syn region mklData start="\.DD" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.DDH"
syn region mklData start="\.DDH" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.DDL"
syn region mklData start="\.DDL" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.DW"
syn region mklData start="\.DW" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.TEXT"
syn region mklData start="\.DB" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.NUM"
syn region mklData start="\.NUM" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.NUMH"
syn region mklData start="\.NUMH" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.NUML"
syn region mklData start="\.NUML" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.NUMT"
syn region mklData start="\.NUMT" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.NUMD"
syn region mklData start="\.NUMD" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.NUMI"
syn region mklData start="\.NUMI" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.DBB"
syn region mklData start="\.DBB" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment

syn match mklType "\.DWB"
syn region mklData start="\.DWB" end="$" transparent contains=mklType,mklString,mklSimpleDec,mklHex,mklComment


syn match mklLabel		"\<[a-zA-Z_][a-zA-Z0-9_]*:"he=e-1
syn match mklIdentifier		"\<[a-zA-Z_][a-zA-Z0-9_]*"

syn match mklOperator "+"
syn match mklOperator "-"
syn match mklOperator "*"
syn match mklOperator "/"
syn match mklOperator "+/-"
syn match mklOperator "<->"

syn match mklStatement "R/S"
syn match mklStatement "10^X"

syn keyword mklStatement RTN GOTO EE CX ENT ANS

"
syn match mklSimpleDec		"\d\+"
syn match decNumber		"[0-9,]\+"
syn match mklHex		"[0-9][0-9a-fA-F]*h"
syn match mklHex		"[0-9][0-9a-fA-F]*H"

syn region mklString         start="'" end="'" oneline
syn region mklString         start='"' end='"' oneline

syn region mklComment		start=";" end="$" oneline

syn match asmInclude		"\.include"
syn match asmCond		"\.if"
syn match asmCond		"\.else"
syn match asmCond		"\.endif"
syn match asmMacro		"\.macro"
syn match asmMacro		"\.endm"


"syn case match

" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_asm_syntax_inits")
  if version < 508
    let did_asm_syntax_inits = 1
    command -nargs=+ HiLink hi link 
  else
    command -nargs=+ HiLink hi def link 
  endif

  " The default methods for highlighting.  Can be overridden later
  HiLink asmSection	Special
  HiLink mklLabel	Label
  HiLink mklComment	Comment
  HiLink asmTodo	Todo
  HiLink mklStatement	Statement

  HiLink asmInclude	Include
  HiLink asmCond	PreCondit
  HiLink asmMacro	Macro

  HiLink mklHex		Number
  HiLink decNumber	Number
  HiLink mklSimpleDec	Number

  HiLink mklOperator	Operator

  HiLink mklIdentifier Identifier
  HiLink mklType	Type

  HiLink mklString      String
  delcommand HiLink
endif

let b:current_syntax = "mkl"

" vim: ts=8

Часть III. Разоблачение чёрной магии.

syn это сокращение от syntax. Всего существуют три команды синаксической разметки (подробнее на англ.):

  • syn keyword — самое простенькое, выделение ключевых слов определённым цветом
  • syn match — позволяет использовать регулярные выражения (англ.) и выделять цветом, скажем, число или команду записи в регистр
  • syn region — самая мощная команда для синтаксических конструкций, способных занимать несколько строчек
" Keywords
syn keyword syntaxElementKeyword keyword1 keyword2 nextgroup=syntaxElement2

" Matches
syn match syntaxElementMatch 'regexp' contains=syntaxElement1 nextgroup=syntaxElement2 skipwhite

" Regions
syn region syntaxElementRegion start='x' end='y'

Синтаксические области могут перекрываться и в них могут действовать правила, отличные от тех, которые вне этих областей. Например, я позволил использовать в команде .DB шестнадцатеричные числа. Любопытно, можно ли таким образом сделать игнорирование синтаксиса после псевдооператора .END

Правила, стоящие в конце, имеют приоритет. Поэтому я определил команду R/S после операции деления / и она сразу заработала. :-)

Когда мы дали названия всем синтаксически различным областям, мы с помощью оператора HiLink связываем их с цветами, которыми выделяются одинаковые конструкции в разных языках программирования. Вот они (ключевые слова со звёздочкой различаются, а остальные лишь если вы их переопределите):

	*Comment	any comment

	*Constant	any constant
	 String		a string constant: "this is a string"
	 Character	a character constant: 'c', '\n'
	 Number		a number constant: 234, 0xff
	 Boolean	a boolean constant: TRUE, false
	 Float		a floating point constant: 2.3e10

	*Identifier	any variable name
	 Function	function name (also: methods for classes)

	*Statement	any statement
	 Conditional	if, then, else, endif, switch, etc.
	 Repeat		for, do, while, etc.
	 Label		case, default, etc.
	 Operator	"sizeof", "+", "*", etc.
	 Keyword	any other keyword
	 Exception	try, catch, throw

	*PreProc	generic Preprocessor
	 Include	preprocessor #include
	 Define		preprocessor #define
	 Macro		same as Define
	 PreCondit	preprocessor #if, #else, #endif, etc.

	*Type		int, long, char, etc.
	 StorageClass	static, register, volatile, etc.
	 Structure	struct, union, enum, etc.
	 Typedef	A typedef

	*Special	any special symbol
	 SpecialChar	special character in a constant
	 Tag		you can use CTRL-] on this
	 Delimiter	character that needs attention
	 SpecialComment	special things inside a comment
	 Debug		debugging statements

	*Underlined	text that stands out, HTML links

	*Ignore		left blank, hidden  |hl-Ignore|

	*Error		any erroneous construct

	*Todo		anything that needs extra attention; mostly the
			keywords TODO FIXME and XXX

Впрочем, для синтаксической разметки ЭКВМ лучше вместо изменчивой «кожи» использовать привычные и устоявшиеся родные цвета, используемые на клавиатуре ПМК со времён СССР — для K синий, для F оранжевый, для Cx красный и т.д. Конечно, не забывая про оба варианта — всё должно проверяться и выглядеть хорошо как на чёрном, так и на белом фоне. Вот эти цвета в PANTONE (сообщены разработчиком), переведённые мной в sRGB:

Process Black C это R44 G42 B41 или HTML 2C2A29
Orange 021 C это R254 G80 B0 или HTML FE5000
1925 C это R224 G0 B77 или HTML E0004D - красный (для Cx)
293 C это R0 G61 B165 или HTML 003DA5 - синий
Cool Gray 1 C это R217 G217 B214 или HTML D9D9D6

Новые синтаксические конструкции (комментарии, псевдооператоры, данные) могут использовать цвета, стандартные для других языков программирования и зависеть от используемой цветовой схемы.

Результат можете смело записывать на эту же страничку — буду этому только рад, она работает как вики. Happy hacking!

Аналоги МК-152 (настольные калькуляторы)

Для сравнения.

Оригинал

Новый МК-152
2007 г. (3800 руб.)

Современные модели

SHARP QS-2122H
В продаже (2008 г., около 90 долл США в розницу)

12-разрядный офисный калькулятор.
Размеры (ширина х длина х высота), см: 21 х 22 х 7,4 (8 9/32"(W) x 8 21/32"(D) x 2 29/32"(H))
Вес: 0,8 кг (0,76 фунтов)
Питание от сети.

Советские модели

Электроника МК-56
1981 г.


Электроника МК-64
1984 г. (250 руб.)


Электроника МС1104
1991 г.

Тот же МК-56, но в разрыв последовательной шины вставлены два микроконтроллера типа КР1816ВЕ35. Первый занимается счетчиком-таймером (индикатор справа), а второй - АЦП и периферией. Плюс добавили еще 7 регистров памяти и ОЗУ на КР537РУ8 на 2048 байт с аккумуляторами.
Год разработки - 1991-й, выпуска - 1992-й.

Внешний многофункциональный модуль для МК-161 на базе микроконтроллера Atmega16

Здесь описан внешний многофункциональный модуль для МК-161, сделанный на базе микроконтроллера Atmega16, подключаемый к МК-161 через последовательную шину SPI.

Внешний параллельный интерфейс для МК-161

В отличие от ЭКВМ "Электроника МК-152", параллельный порт "Электроника МК-161" существенно урезан. Из-за этого, создание самодельных внешних устройств к МК-161 из-за отсутствия удобного параллельного порта, по сравнению с МК-152, несколько затруднено.

Зато у Электроники МК-161 есть последовательный периферийный интерфейс (SPI), который, по сравнению с RS-232C, предельно прост и не требует дополнительного согласования с ТТЛ-уровнями, подробные сведения можно узнать здесь.

Простота SPI-интерфейса позволяет собрать внешний байтовый параллельный порт, управляемый МК-161 по SPI-интерфейсу, на пяти микросхемах малой и средней степени интеграции по несложной схеме.

Краткое описание схемы устройства.

При обращении к устройству, ЭКВМ выставляет низкий логический уровень на выходе CS1. Входной байт по спаду сигнала CS1 защёлкивается в регистре DD5 (КР1533ИР9). Далее ЭКВМ последовательно выводит данные по выходу SI, одновременно принимая данные по входу SO. Приём и передача данных стробируется тактовым сигналом на выходе SCK. По спаду сигнала SCK входной байт побитно передаётся в ЭКВМ, одновременно по фронту сигнала SCK выводимый ЭКВМ байт передаётся в регистр DD3 (КР1533ИР8). После окончания обмена ЭКВМ снимает низкий логический уровень на выходе CS1. Накопленный в регистре DD3 (КР1533ИР8) байт по фронту сигнала CS1 защёлкивается в выходном параллельном регистре DD4 (КР1533ИР22). Схема управления собрана на DD2 (КР1533ЛА3), на DD1 (КР1533ТЛ2) цепочках VD1R5R7C7R10VD3 И VD2R6R8C8R11VD4 собран формирователь управляющих импульсов.

Устройство собрано на макетной плате (увы, печатки пока нет...):

Для устройства написана подпрограмма-драйвер. Для обмена в регистр X стека записывают выводимый байт и вызывают подпрограмму. После обмена подпрограмма возвращает в регистре X входной байт.

Если подключить к устройству по простой схеме индикатор на светодиодах, можно с помощью ЭКВМ создавать различные световые эффекты, например, по программам "мерцающие огни" или "бегущий огонь с автореверсом", см. фото:

Программы для световых эффектов надо загружать с 0-й страницы. Перед запуском набираем в регистре X период обновления, например, 20(х10 мс, то есть 200мс), С/П. Правда, реальный темп переключения будет меньше, за счёт выполнения команд программы.

Источник питания должен обеспечивать напряжение +5В при токе не менее 100мА, это наибольший ток потребления всех микросхем по справочнику, правда, моё устройство кушает всего около 50мА. Нагрузочная способность устройства (по справочнику) - до 30мА втекающего тока (если нагрузку подключить между источником питания +5В до выходом DD4 КР1533ИР22). Если данные не защёлкиваются в регистрах DD4 и DD5, то нужно немного увеличить ёмкость конденсаторов С7 и С8 соответственно. Наличие блокировочных конденсаторов С2 - С5 обязательно, располагать их нужно в непосредственной близости от микросхем, из расчёта один конденсатор ёмкостью 0,047 - 0,1мк на корпус! Внимание, ТТЛШ микросхемы весьма чувствительны к помехам по цепи питания! Вместо микросхем серии КР1533 можно применить микросхемы серии К555, однако придётся уменьшить номиналы всех резисторов в 2 раза и два раза увеличить ёмкость конденсаторов С7 и С8, конденсаторы может быть придётся подбирать.

З. Ы. При желании, можно значительно (до двадцати байт!) увеличить разрядность самодельного параллельного порта, путём подключения дополнительных микросхем КР1533ИР8, КР1533ИР9 и КР1533ИР22! Правда, количество дополнительных микросхем ограничивается нагрузочной способностью микросхемы DD1 КР1533ТЛ2 формирователя импульсов.

Изобретем микрокалькулятор

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

Тем более приятно услышать от главного инженера НПО СЕМИКО Михаила Степанищева, что "...замечания учтем, сейчас над этим работаем. Первым пользователям будем скоро обновления версии делать..."

В связи с этим хотелось бы высказать пожелания по усовершенствованию ПМК, конечно с учетом назначения "МК-152" (стационарный ПМК с портами ввода-вывода для управления внешними устройствами).

Программы для ПМК становятся длиннее. Вводить их руками будет обременительно. Существующее хранение на внешнем диске (флешке) позволяет не вводить программу повторно, но не решает проблемы с обменом.
Как можно организовать обмен программами, кроме традиционного перенабивания текста вручную?

  1. Создать простое устройство наподобие card reader, позволяющее читать диск МК-152 на обычном ПК через USB-порт.
  2. Доработать сам МК-152, позволяя ему использовать в качестве внешнего диска любой стандартный USB-ключ (флешку)
  3. При отсутствии внешнего диска использовать нуль-модемный кабель для СОМ-порта. Никаких аппаратных переделок ПМК не требуется, необходимы лишь утилиты обслуживания для ПМК и для ПК. Утилита для ПК может быть написана для MS-DOS (эмуляторы ДОС есть на любой платформе).
    Данный вариант осложняется тем, что в современных настольных и особенно портативных ПК COM-порт отсутствует. Однако, существуют дешёвые китайские микросхемы, реализующие виртуальный ком-порт и подключающиеся через USB. Например они широко пременяются в шнурах для подключения мобильников к компьютеру и в адаптерах "USB-to-serial".
  4. Кабель "COM-USB" типа HP 50g RS-232 Serial Cable, но в обратную сторону, чем это предусмотрено для калькуляторов HP. С поддержкой на уровне МК-152.

Общий смысл предложений можно выразить коротко: простая стыковка МК-152 и ПК.
При этом программа и данные поставляются, например, в виде одного файла внутреннего формата (редактирование средствами ПК необязательно), который можно переслать по электропочте, опубликовать в сети и т.д.

Обновление от 10 декабря 2007.
Данная возможность реализована. См статью "Среда разработки для МК-152. Обзор возможностей"

Конвертер монохромных BMP файлов в формат файлов MKL

Программа Китайский год замотивировала меня посидеть пару вечеров с интернет-планшеткой.

В результате получился такой скрипт на языке Python, преобразующий монохромный BMP файл в некое подобие исходного текста программы MKL программируемых калькуляторов МК-152/161.

Увеличенный в 4 x 4 раза исходный BMP файл bw_32x32_face.bmp:
>BMP файл



Для упрощения скрипта (а также из-за отсутствия времени) присутствует ряд ограничений:
- Ширина монохромного файла должна быть кратна 4;
- Минимальная ширина файла должна быть не меньше 16 пиксел (может, и при 16 будут глюки, не проверял)

Запускаем в консоли питоновский скрипт:

....>python bmp2mkl.py bw_32x32_face.bmp
--------------------------
File to open:  bw_32x32_face.bmp
File to write:  bw_32x32_face.bmp.txt
BMP file size:  190  bytes
Data start offset:  62  0x3E
DIB header size:  40  bytes
BMP width:  32 pixels
BMP height:  32 pixels
Num of color planes:  1
Num of bits per pixel:  1
Type of compression:  0
Raw bitmap size:  128 bytes
Colors in the palette:  0
Colors used:  0
-----
File converted
Ok



Скрипт создает текстовый файл bw_32x32_face.bmp.txt

;
; BEGIN bitmap file: bw_32x32_face.bmp
;
 .DB FFh,FFh,FFh,FFh
 .DB 80h,0h,0h,1h
 .DB 80h,3Fh,E0h,1h
 .DB 80h,FFh,FCh,1h
 .DB 83h,E0h,Fh,1h
 .DB 87h,80h,7h,81h
 .DB 8Eh,0h,1h,C1h
 .DB 8Ch,0h,0h,C1h
 .DB 98h,Ch,0h,61h
 .DB B8h,33h,0h,71h
 .DB B0h,40h,80h,31h
 .DB 60h,40h,80h,19h
 .DB 60h,80h,40h,19h
 .DB 60h,80h,42h,19h
 .DB 60h,40h,8Dh,99h
 .DB 60h,40h,88h,99h
 .DB 60h,33h,8h,99h
 .DB 60h,Ch,Dh,99h
 .DB 60h,0h,2h,19h
 .DB 60h,0h,0h,19h
 .DB 60h,3h,C0h,19h
 .DB B0h,7Ch,38h,31h
 .DB B9h,80h,0h,71h
 .DB 98h,0h,0h,61h
 .DB 8Ch,0h,0h,C1h
 .DB 8Eh,0h,1h,C1h
 .DB 87h,80h,7h,81h
 .DB 83h,E0h,Fh,1h
 .DB 80h,FFh,FCh,1h
 .DB 80h,3Fh,E0h,1h
 .DB 80h,0h,0h,1h
 .DB FFh,FFh,FFh,FFh
;
; END bitmap file: bw_32x32_face.bmp
;



Путем замены символов в notepad-е и преобразования из шестнадцатеричных чисел в двоичные получаем такой битмап:

11111111111111111111111111111111
1                              1
1         111111111            1
1       11111111111111         1
1     11111         1111       1
1    1111            1111      1
1   111                111     1
1   11                  11     1
1  11       11           11    1
1 111     11  11         111   1
1 11     1      1         11   1
 11      1      1          11  1
 11     1        1         11  1
 11     1        1    1    11  1
 11      1      1   11 11  11  1
 11      1      1   1   1  11  1
 11       11  11    1   1  11  1
 11         11      11 11  11  1
 11                   1    11  1
 11                        11  1
 11           1111         11  1
1 11     11111    111     11   1
1 111  11                111   1
1  11                    11    1
1   11                  11     1
1   111                111     1
1    1111            1111      1
1     11111         1111       1
1       11111111111111         1
1         111111111            1
1                              1
11111111111111111111111111111111


В архиве лежат собственно скрипт и бат-файл для добавления пути к Питону в виндусовой консоли. Для совместимости с интернет-планшеткой я пользовался версией 2.6.4, взятой с питонского сайта

Комментарии, замечания и пожелания приветствуются горячо :)

МК-152. FAQ - ЧаВо. Компиляция по итогам разных обсуждений

Подборка типовых вопросов и ответов, собранная из разных источников.

В. Я не в теме, но было бы интересно узнать, где может использоваться МК-152?
О. Использование возможно:


В. Является ли наличие портов (RS232, Centronix) преимуществом? Ведь есть переходники USB -> RS232, а те же импортные ПМК имеют USB?
О. За USB -> RS232 надо платить. Зарубежные ПМК и научные калькуляторы не поддерживают такой преобразователь. Даже КПК не все: нужна поддержка USB-host, которая имеется в основном у относительно дорогих моделей (около 10 тыс.руб).
Некоторые преобразователи не являются полноценными, например, не имеют линий квитирования.

Centronix можно рассматривать как несколько входов-выходов, в т.ч. двунаправленных. В инструкции прямо указанно, что поддерживается и индивидуальное управление его линиями.

МК-161: Аккумулятор, зарядка и разрядка

Давайте-ка вынесу сюда все откровения об аккумуляторе, которые Михаил Борисович нам в жж-сообществе поведал. А то потом ведь не найдёшь. Заодно добавлю информацию из РЭ, чтобы всё в одном месте было.

1. Проверить заряд аккумулятора можно численно, измерив напряжение на его выходе в Вольтах с помощью команды РРИП 9115. Это не то же самое напряжение, что на выходе зарядного устройства. Там оно вполне официально может скакать от 4,7 Вольт до 11 Вольт, это ничего не означает.

2. МК-161 позволяет заряжать свой аккумулятор слегка «с горкой» и разряжать «до убоя». Т.к. «случаи разные бывают». Поэтому рекомендуется использовать зарядку с умом, ориентируясь на R9115 или символ батарейки. Обычно разряженный МК-161 заряжается за 8-9 часов, при этом позволяя непрерывно работать более 5 часов (реально до 10-15 часов).

3. Делать регулярные полные циклы заряда-разряда аккумулятора не стоит, т.к. аккумулятору это лишь вредит, а система анализа разряда неадаптивная и рассчитана, исходя из паспортной характеристики аккумулятора. Ставить на подзарядку МК-161, когда он разрядился не полностью, разрешается. Даже наоборот, полностью разряжать аккумулятор не рекомендуется.

4. Автоматическое выключение зарядки происходит при напряжении 4,0-4,2 Вольта (точное значение задаётся подстроечным резистором). Это даёт гарантированные 10 лет службы, но на пределе штатного режима. Такая зарядка до полных 1,3 Ампер*часов, да с полного разряда, может занять 15 часов.

5. Символ полностью заряженной батарейки выводится при 3,9 Вольта. При бережном отношении к аккумулятору тогда и стоит вытаскивать МК-161 из розетки. При необходимости полного заряда (скажем, «в дорогу дальнюю» — 15 часов в режиме счёта без подсветки или 8 часов с подсветкой) можно ещё подзарядить час-другой, пока не включится аппаратная блокировка. То есть пока РРИП 9115 не покажет 4,2. Это добавит аккумулятору заряда на 5-10%.

6. При подключении к электросети работающий МК-161 не разряжает аккумулятор, но и заряжает его весьма медленно (даже если выключить подсветку). Технически допустимо всегда держать МК-161 включённым в розетку (как МК-152), но это далеко не самый щадящий вариант использования аккумулятора.

7. Полностью разряжать устройство тоже не следует, защиты от этого не стоит. Оптимальный диапазон напряжения 3,9…3,6 Вольта. В этом случае можно ожидать 15-20 лет работы, хотя гарантировано лишь десять (до 2019 года).

8. Сохранение напряжения в этом диапазоне важнее количества циклов зарядки-разрядки. Поэтому если аккумулятор разряжается, подзарядите его, но не до отказа.

9. Если сильно нужно, МК-161 будет работать и при меньшем напряжении, выводя аккумулятор за другой край оптимального режима эксплуатации. В этом случае сначала будет выведен символ пустой батарейки, потом она станет пунктирной, а ещё через 10-15 минут ЭКВМ сама отключится, вплоть до остановки часов. Такой вариант развития событий, особенно если полностью разряженную машинку долго на подзарядку не ставить, аккумулятору вредит намного сильнее, чем чересчур большой заряд.

10. Выключение подсветки увеличивает срок работы без подзарядки вдвое, т.к. МК-161 начинает потреблять 0,3 Ватта, не 0,6 Ватт. Пользуйтесь другими фонариками. :-)

11. МК-161 потребляет больше энергии в режиме выполнения программы и меньше в режиме ожидания ввода. Но никакого особенного энергосберегающего "ждущего" режима не предусмотрено. Когда калькулятор для вычислений не нужен, выключайте его. Вот и всё энергосбережение.

Периферийное устройство для МК-152/161. Конструкция выходного дня

Схема, исходные тексты и прошивки простого устройства на микроконтроллере Atmega16, управляемого через порт RS232 посредством ASCII команд. Команды можно посылать из любой терминальной программы или, к примеру, из программируемых калькуляторов МК-152 и МК-161.

Версия 0.5

Добавлена команда выбора серво-привода для управления. Теперь можно управлять до 8 серво-приводами (не одновременно):

UART controller
ver. 0.5, 2009
Usage: [options]
Options:
-?       Print help
-ar      Read byte from PortA
-bwHH    Write byte [0xHH] to PortB
-adc     Read value from ADC7 channel
-servN   Set servo [N] (1-8) for commands
-swAAA   Write angle [AAA] (0-180) to selected servo
-v       Firmware version
Ok



Каждый сервопривод калибруется независимо в отдельной таблице (пока во время компиляции. Динамическая калибровка сервоприводов в TODO списке):

// Servos calibration data
#define NUM_OF_SERVOS               8

const servo_calibration_data_t KServosData[NUM_OF_SERVOS] = 
{
//   0deg   90deg   180deg  Pin
    {600,   1500,   2450,   0},      // Servo #1
    {600,   1500,   2450,   1},      // Servo #2
    {600,   1500,   2450,   2},      // Servo #3
    {600,   1500,   2450,   3},      // Servo #4
    {600,   1500,   2450,   4},      // Servo #5
    {600,   1500,   2450,   5},      // Servo #6
    {600,   1500,   2450,   6},      // Servo #7
    {600,   1500,   2450,   7}       // Servo #8    
};



Был достан из-под кровати и отряхнут от пыли (у современных детей есть куча других интересов, к сожалению, или не к сожалению) конструктор Meccano. Оказалось удобной штукой для робото-тестирования:

Сборка сервопривода:

Сборка сервопривода


Сборка узла поворота (спасибо горячему клею!):

Сборка узла поворота


Сборка шасси:

Сборка шасси


Шасси с установленной базой поворотной руки:

Сборка шасси #2




Серво #1 примерно в 0 градусов, серво #2 примерно в 180 градусов (после включения):

После включения




Серво #1 в 90 градусов:

-serv1
Selected servo:1
Ok
-sw090
Servo 1
Angle: 90
Value: 1500
Ok


Серво 1 в 90 градусов




Серво #1 в 180 градусов:

-sw180
Servo 1
Angle: 180
Value: 2450
Ok


Серво 1 в 180 градусов




Серво #2 в 0 градусов:

-serv2
Selected servo:2
Ok
-sw000
Servo 2
Angle: 0
Value: 600
Ok


Серво 2 в 0 градусов




Серво #2 в 90 градусов:

-sw090
Servo 2
Angle: 90
Value: 1500
Ok


Серво 2 в 90 градусов




Серво #2 в 180 градусов:

-sw180
Servo 2
Angle: 180
Value: 2450
Ok


Серво 2 в 180 градусов



Файлы проекта WinAVR и исходные тексты, вер.0.5

============ Владельцы МК-1хх, присоединяйтесь к тестам! :) =============

Версия 0.4

Изменения: миграция в open-source пакет WinAVR под Windows. Добавление новой команды управления сервоприводом Hitec HS-322HD:

Сервопривод

(картинка сервопривода взята с сайта Hitec RCD)

Управляющий вывод сервопривода Hitec HS-322HD подключен к выводу PC1 порта С микроконтроллера (выводы 'питание' и 'общий', соответственно, на Vcc и GND платы микроконтроллера). Сервопривод управляется посредством ШИМ-сигналов.
Работа с сервоприводом:

UART controller
(ver. 0.4)

Usage: [options]
Options:
-?     Print help
-ar    Read from PortA
-awhh  Write 0xhh to PortA
-br    Read from PortB
-bwhh  Write 0xhh to PortB
-adc   Read from ADC7 channel
-swnnn Write angle to servo (0-180)
-v     Firmware version
Ok

Cервопривод в 0 градусов:

-sw000
Value: 600
Ok

0 градусов

Cервопривод в 45 градусов:

-sw045
Value: 1050
Ok

45 градусов

Cервопривод в 90 градусов:

-sw090
Value: 1500
Ok

90 градусов

Cервопривод в 135 градусов:

-sw135
Value: 1975
Ok

135 градусов

Cервопривод в 180 градусов:

-sw180
Value: 2450
Ok

180 градусов

Перед началом работы сервопривод необходимо откалибровать в файле uartctrl.h:
// Servo calibration data
#define SERVO_0_DEG 600
#define SERVO_90_DEG 1500
#define SERVO_180_DEG 2450


Файлы проекта Programmer's Notepad из WinAVR и исходные тексты, вер.0.4




Версия 0.3

Добавлена команда чтения значения с порта 7 аналого-цифрового преобразователя (АЦП):
-adc Read from ADC7 channel
АЦП настроен на режим 8 бит.
Для экспериментов с АЦП на вход 7 порта А подсоединен переменный резистор с сопротивлением 10 КОм:

Переменный резистор

Пример работы через терминальную программу:
Сброс микроконтроллера

UART controller
(ver. 0.3)

Usage: [options]
Options:
-?     Print usage
-ar    Read from PortA
-awhh  Write 0xhh to PortA
-br    Read from PortB
-bwhh  Write 0xhh to PortB
-adc   Read from ADC7 channel
-v     Firmware version
Ok

Вход АЦП подключен к напряжению питания

-adc
0xff
Ok

Вход АЦП подключен к 'земле'

-adc
0x0
Ok

Переменный резистор в положении 1

-adc
0x2c
Ok

Переменный резистор в положении 2

-adc
0x80
Ok

Добавлены файлы:




Версия 0.2

В версии 0.2 изменены командные опции:
-ar Read from PortA - чтение байта данных из порта А (выключатели)
-bwhh Write 0xhh to PortB - запись байта данных в порт В (светодиоды)
На выводы 0 и 1 порта А повешены выключатели, при нажатии на которые порт
замыкается "на землю" и на нем устанавливается низкий логический уровень:

Картинка кнопки порта А

Пример работы через терминальную программу:
Сброс микроконтроллера

UART controller
(ver. 0.2)
Usage: [options]
Options:
-?     Print usage
-ar    Read from PortA
-awhh  Write 0xhh to PortA
-br    Read from PortB
-bwhh  Write 0xhh to PortB
-v     Firmware version
Ok
-ar
0xff
Ok

Нажат выключатель S1

-ar
0xfe
Ok

Нажат выключатель S2

-ar
0xf9
Ok

Добавлены файлы:




Версия 0.1

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

Если а) все подключено правильно б) выбраны правильный CОМ-порт и скорость (38400 бод) c) частота микроконтроллера установлена в 8 МГц, то после старта микроконтроллера или его сброса в окне терминальной программы должно появиться:

Запуск

В данной прошивке с версией 0.1 реализованы 3 команды, или опции:

  • -? - вывод подсказки
  • -l'hh' - управление 8 светодиодами порта В микроконтроллера
  • -v - вывод версии прошивки

Подробнее о команде -l'hh'. Биты шестнадцатеричного числа 'hh' определяют, какие из светодиодов LED0 - LED7 должны светиться. Например, команда -l02

Картинка команды -l02

высветит светодиод LED1 (на принципиальной схеме он обозначен как LED2):

Картинка светодиода LED1

Команда -lf1

Картинка команды -lf1

высветит светодиоды LED7-LED4 и LED0:

Картика светодиодов 1,4,5,6,7

Почему выбран микроконтроллер Atmega16. По нескольким причинам. Во-первых, он просто у меня есть под рукой.
Во-вторых, он обладает развитым набором различной "периферии" (Ссылка на магазин):
8-разрядный однокристальный микроконтроллер на базе архитектуры AVR-RISC Atmel, которая обеспечивает очень быстрое выполнение программы. 131 команда, выполняеются за один цикл. Схема имеет 32 линии ввода-вывода и содержит программируемый последовательный универсальный асинхронный приемопередатчик, 10-разрядный 8-канальный АЦП, интерфейс SPI, контрольный таймер и компаратор. Есть также три таймера/счетчика, два 8-разрядных и один 16-разрядный. Все таймеры содержат каналы ШИМ, часы реального времени и внутренний осциллятор. Схема имеет функции сброса при включении питания и может работать в 2 режимах пониженного потребления мощности. Программы хранятся в памяти Flash EPROM и могут перепрограммироваться (ISP)..

Конечно, можно все сделать посредством собственных средств МК-152, но, к примеру, здесь есть аналого-цифровой преборазователь и широтно-импульсный модулятор (удобно управлять DC моторчиками). И всего один rs232 провод от ПМК.

В следующих прошивках я хочу добавить команду для управления ШИМ - есть идея создать игровой макет с электромотором и датчиками. К сожалению, пока нет МК-152, так что буду по старинке - из линуксового терминала GtkTerm.

Компилировалось под Linux-ом, при помощи avr-gcc, binutils и avr-libc. Примеры тут и тут

Под Windows есть полностью настроенный открытый пакет WinAVR

Подключение МК-152 по USB-порту

Стандартный способ подключения МК-152 к компьютеру, поддерживаемый официальными программами НПП «СЕМИКО» — подключение по интерфейсному кабелю «Стык С2». На компьютерах этот разъём называется COM-портом. Но не на всех современных компьютерах есть COM-порт, западная промышленность сдвинулась в сторону поддержки стандарта USB.

Мною успешно опробовано подключение МК-152 к компьютеру под операционной системой Windows XP через переходник с USB на COM. При этом удалось заставить работать программу MK.EXE — с одной оговоркой, о которой ниже.

Итак, что представляет из себя переходник с USB на COM? Фактически в корпус стандартного COM-разъёма вмонтирована обычная старая добрая плата COM-порта, только в исполнении не для шины ISA, а для шины USB. Чтобы работать, такому переходнику (стоимостью от 500 до 900 рублей) нужно питание и специальные драйверы. Питание берётся прямо из порта USB, драйверы поставляются вместе с переходником на компакт-диске. Скорость обмена по COM-порту маленькая, поэтому даже стандарта USB 1.1 достаточно.

Программа MK.EXE версии 1.02 способна обнаружить лишь стандартные COM-порты. Поэтому если драйвер установил себя, скажем, как COM11 — надо ручками переставить его на COM1 или, скажем, COM3. Драйвер должен поддерживать эту возможность. Надеюсь, что в будущем программа MK.EXE сможет поддерживать и нестандартные номера COM-портов. Это и есть обещанная оговорка. В-остальном каких-либо отличий от кабеля «Стык С2» замечено не было.

Также при покупке следите за тем, чтобы COM-разъём переходника был «папой». В моём случае на переходнике были гайки, поэтому в него вкручивается фирменный новосибирский шнур. Если же на переходнике стоят винты, он должен подключаться к МК-152 напрямую, связывая ЭКВМ с персоналкой по USB без посредников. Поддержка переходником всяких DSR/RI удобна, если вы хотите использовать его для подключения к компьютеру модемов и мышек, но избыточна. Ведь на ИПС-выход МК-152 выведено лишь три проводка — туда, обратно и земля.

В общем, кабель USB/COM - это полезный аксессуар, который рекомендую всем любителям МК-152 наравне с кабелем «Стык С2» — а, может быть, и вместо него.

Подключение ЭКВМ к компьютеру

С момента появления МК-152 начинающие любители ЭКВМ просят у разработчиков одно и то же — возможность использовать метки в своих программах. Опытные любители же давно используют метки. Секрет прост — сложные программы для МК-152 и МК-161 разрабатываются на компьютере с удобной клавиатурой, в удобных текстовых редакторах.

После того, как вы написали и откомпилировали программу (наиболее сложные программы и отлаживаются на компьютере, с помощью интерпретатора ВК-6), её требуется загрузить в ЭКВМ. И тут перед владельцем ЭКВМ с неизбежностью встаёт более животрепещущий вопрос — как подключить его машинку к персоналке? В этом материале я попытаюсь не просто предоставить сухой ответ-инструкцию, но ещё и сделать понятным, как, что и почему.

Подготовим ЭКВМ (начало)

Сначала разберёмся, что к чему подключать. С одной стороны у нас имеется ЭКВМ. У «Электроники МК-152» уже существует стандартный разъём последовательного порта ИПС — 9-штырьковая «мама» (розетка).

У «Электроники МК-161» такой разъём отсутствует, поэтому к её единственному разъёму ВУ надо подключить один из кабелей, идущих в комплекте. Нужный кабель называется Переходник и имеет заводское обозначение НПКД.408320.001. Как только вы подсоединили Переходник к разъёму ВУ своей МК-161, у вашей машинки сразу появился тот же самый 9-штырьковый разъём ИПС, который изначально присутствует на задней панели корпуса МК-152 и все дальнейшие действия по подключению этих ЭКВМ совершенно одинаковы.

Подготовим компьютер (продолжение)

Теперь разберёмся со стороной компьютера. Здесь вариантов больше. Если на компьютере уже стоит стандартный 9-штырьковый разъём COM-порта («папа», вилка — такие разъёмы появились во времена IBM PC AT), вам повезло. Если у вас разъём последовательного порта старинный 25-штырьковый (под названием DB-25, таков был самый первый последовательный порт персоналки IBM PC и IBM PC XT), вам надо приобрести стандартный переходник "COM на COM", делающий из него стандартный 9-штырьковый COM-порт.

Скорее же всего, у вашего компьютера только USB-порты. В этом случае вам потребуется переходник "с USB на COM", который стоит в несколько раз дороже (порядка 1000 рублей) и требует установки драйверов под вашу операционную систему. Кстати, наиболее популярная (если не сказать единственная) программа связи с ЭКВМ рассчитана на операционную систему Windows. Плюс здесь в том, что большинство переходников "с USB на COM" имеют тот самый 9-штырьковый разъём «папа», который вам нужен.

Перед подключением ЭКВМ убедитесь на каких-либо более традиционных устройствах, что ваш COM-порт работоспособен. Некоторые переходники "с USB на COM" требуют настройки, а «планочки», выносящие COM-порт с материнской платы на заднюю стенку компьютера, бывают двух типов — старого и нового. Если вы всё сделали верно, теперь у вас два исправных 9-штырьковых последовательных порта (они называются DB-9). Один из них идёт от ЭКВМ («мама»), а второй — от вашего компьютера («папа»). Теперь небольшая передышка, на теорию последовательной связи.

Немного теории

Последовательный порт RS-232 был разработан для соединения двух устройств — терминала (полноценное рабочее место, дисплей и клавиатура) и коммуникационного оборудования (например, модема — устройства для связи с [другим] компьютером по телефонной линии). Такой комплект, терминал плюс модем, позволял людям работать из дома, связываясь с уникальной большой вычислительной машиной, стоящей в другом здании или даже другом городе. В честь этих древних терминальных устройств (в те времена они стоили намного дешевле и занимали меньше места, чем полноценный компьютер) программы для связи через модем так и называются — терминальные программы или, по-старинке, терминалы.

Стандарт позволял использовать терминалы и модемы разных производителей. Модемная связь быстро развивалась, и пользователь мог вкладывать деньги в разные модемные устройства (DCE = Data Communication Equipment, оборудование связи данных), выбирая изделия различных конкурирующих фирм, поддерживающие разнообразные протоколы. Независимо от этого пользователь мог менять свой терминал (DTE = Data Terminal Equipment, оборудование терминала данных) — от простейших «тупых» терминалов, посылающих модему каждую нажатую кнопку до «умных» терминалов или даже современных ноутбуков и планшеток, вооружённых терминальной программой. Сам стандарт связи DTE-DCE под русским названием «Стык С2» или зарубежным RS-232 оставался и остаётся неизменным.

В концепции DTE-DCE слова «приём» и «передача» принимают чёткое значение. Байты, принятые DCE, идут от DCE к DTE по линии RxD (Receive Data, принять данные) и принимаются DTE. Передаваемые байты передаёт DTE, они идут от DTE к DCE по линии TxD (Transmit Data, передать данные) и уходят дальше — DCE их передаёт в телефонную линию, к DCE на другой стороне. Это очень удобное и легко запоминающееся соглашение, значительно упрощающее разработку коммуникационного оборудования и программ.

Хэкер, вооружённый ЭКВМ, должен чётко понимать отличие устоявшегося протокола RS-232 (между терминалом и модемом) от ассортимента намного более сложных многоуровневых протоколов связи между двумя модемами (V.32bis, V.34 и т.д.) Если модемные протоколы не имеют никакого отношения к нашему узкому делу подключения ЭКВМ к компьютеру и о них сейчас можно забыть и не задумываться, то протокол последовательного порта с его параметрами (например 9600-N-1) нам очень важен.

Со времён разработки стандарта прошло много десятилетий, но разделение устройств, «беседующих» по RS-232, на DTE и DCE осталось неизменным. Сейчас в роли DTE обычно выступает господин компьютер, а роль DCE исполняют периферийные устройства — модемы, мышки, программаторы и т.д. Вооружившись этой теорией, вернёмся к нашей задаче подключения ЭКВМ к компьютеру.

ЭКВМ, как и компьютер, является полноценной электронно-вычислительной машиной. Будучи терминалом (DTE), ЭКВМ позволяет подключать к себе весь набор периферийных, точнее коммуникационных устройств (DCE) — модемы, мышки, программаторы и т.д. Как же соединить два терминала (DTE и DTE): ЭКВМ и компьютер, если стандарт был разработан для несколько другой задачи (подключение DCE к DTE)?

Для решения этой задачи в комплекте с ЭКВМ идёт Кабель связи (распайка), заводское обозначение НПКД.421593.003-01. В Кабеле связи используется тот же трюк, что в нуль-модемах (кабелях, предназначенных для соединения двух компьютеров по COM-порту — напрямую, безо всяких модемов) — провода TxD и RxD, по которым передаются и принимаются данные, перекручены! Если посмотреть в такой кабель со стороны компьютера, все передающиеся им данные будут приниматься ЭКВМ, а данные, передающиеся ЭКВМ, будут приниматься компьютером. Если посмотреть на этот кабель со стороны ЭКВМ, мы увидим ту же самую картину. При таком подключении слова «приём» и «передача» теряют свой абсолютный смысл и получают разное значение для ЭКВМ и компьютера. Блок данных, который ЭКВМ «передаёт», является «принимаемым» на стороне компьютера и наоборот. Каждая из двух сигнальных линий называется на одном конце TxD (линия передачи), а на другом — RxD (линия приёма).

Соединим ЭКВМ и компьютер (окончание)

Решение нашей задачи просто. Имеющимся Кабелем связи мы соединяем 9-штырьковый DTE-порт ЭКВМ (он называется ИПС) и 9-штырьковый DTE-порт компьютера (он называется COM). Всё, на физическом уровне соединение выполнено. Теперь, установив одинаковые с ЭКВМ параметры связи (например 9600-N-1), компьютер может общаться с ЭКВМ в режиме внешнего доступа. Разумеется, для подобного общения на стороне компьютера надо использовать специальные программы, но это уже тема для другого занятия.

Рассуждения на тему

Задача успешно выполнена, давайте закрепим изученное.

1. Несмотря на похожую распайку, Кабель связи отличается от нуль-модемного. Дело в том, что DTE-разъём ЭКВМ является «мамой». Такие разъёмы реже ломаются. Они удобнее для более дорогих, долгоживущих устройств. По стандарту же фирмы IBM компьютерный разъём DTE является «папой» (в котором штырькам намного легче погнуться или отломаться), а «мамы» используются для коммуникационного оборудования DCE. Это решение оказалось неудачным, т.к. со временем в качестве терминального оборудования начали использоваться компьютеры, которые стоят в несколько раз дороже, чем подешевевшие модемы (коммуникационное оборудование). В результате, если вы непредвзято посмотрите на старую COM-овскую мышку то обнаружите, что её разъём лучше защищён от поломок, чем разъём компьютера! :-)

Стандартные нуль-модемные кабели соединяют два IBM-овских DTE-разъёма, то есть имеют «маму» на обоих концах. Несмотря на похожую распайку, такой кабель просто не воткнуть в ЭКВМ. Чтобы нуль-модем заработал в качестве кабеля связи, вам потребуется специальный «прямой» переходник DB-9 на DB-9 («папа»–«папа»), меняющий женский «пол» DB9 (стандарт ЭКВМ) на мужской (стандарт IBM). Этот же переходник, кстати, пригодится для подключения к ЭКВМ стандартной «писишной» периферии. Если вы решитесь на этот подвиг, драйвер для каждого из этих устройств вам придётся писать самостоятельно. В Интернете их пока нет.

2. Также «мама» ЭКВМ и «папа» компьютера создают иллюзию, что их можно воткнуть друг в друга без кабеля связи. Так поступать категорически не рекомендуется, т.к. два DTE-устройства не предназначены для соединения друг с другом. Они оба будут использовать провод TxD для передачи, игнорируя друг друга и даже пытаясь одновременно выставить на нём разные напряжения. И точно также оба будут внимательно слушать, что передаётся по проводу RxD, хотя по этому проводу никто из них никогда не решится ничего передать.

К счастью, у отечественных разъёмов ЭКВМ есть второй уровень защиты (винты и гайки по бокам DB-9), который делает подобное неправильное подключение не самым лёгким делом. :-)

3. Третье заблуждение связано с тем, что Кабель связи имеет на одной (ЭКВМной) стороне «папу» (DB-9M), а другой (компьютерной) — «маму» (DB-9F). Такой кабель выглядит, как простой удлинитель. Поэтому начинающие любители ЭКВМ часто удивляются. Как это — без «удлинителя» ничего «не работало», а «с удлинителем» вдруг всё чудесным образом заработало! Правильный ответ же, как вы уже догадались — никакой это не удлинитель, а самый настоящий Кабель связи двух DTE-устройств. Одно из которых использует стандарт ЭКВМ, а другое совместимо со стандартом IBM.

Плюс такого кабеля в том, что его концы не перепутаешь. Сразу ясно, какой стороной кабель втыкается в ЭКВМ, а какой — в компьютер. По другому его и не воткнёшь. Также от разработчиков известно, что у НПП «СЕМИКО» имеются специальные Кабели связи (заводское обозначение НПКД.421593.003-02), позволяющие соединять несколько ЭКВМ в локальную сеть (эти концы имеют одинаковые 9-штырьковые «папы», включённые в параллель) и подключать к получившейся сети одно управляющее устройство, то есть компьютер (этот конец кабеля единственный, который имеет 9-штырьковую «маму» и перекрученные RxD-TxD). Сам я такого кабеля ещё не видел, но возможность соединять ЭКВМ в локальную сеть очевидна каждому, кто прочитал Руководство по эксплуатации.

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

Полный краткий справочник по ПМК МК-1ХХ

Чтобы лишний раз не блуждать по словообильной документации сделал "шпаргалку", сведя в таблицы функции, команды, коды и пр. Получилось 12 листов. Делал для себя, поэтому возможно некоторые сокращения окажутся не очевидными. Отсутствует "распиновка" разъёмов 152-й модели. Остальное вроде представлено. Делал с учётом двусторонней печати в режиме брошюры, но можно печатать как угодно и выборочно.

Приставка - микрофарадметр для МК-161

Приставка к ЭКВМ "Электроника МК-161" для измерения ёмкости оксидных конденсаторов.

Идея устройства взята из статьи "Микрофарадметр" А. Топникова, опубликованной в журнале "Радио" №2 за 2008 год.

Принцип работы устройства заключается в измерении времени заряда измеряемого конденсатора заданным током до опорного напряжения.

Приставка имеет два поддиапазона измерения: 5..500мкФ с дискретностью 5мкФ и 50 ... 50000мкФ с дискретностью 50мкФ, переключение поддиапазонов происходит автоматически. Реальный диапазон измерения ограничен разбросом емкостей конденсаторов +50-20%, и на практике составляет 6,8...33000мкФ. Точность измерения составляет не менее 4% на верхних краях поддиапазонов.

Время измерения конденсаторов ёмкостью до 500мкФ не превышает 1,5с, до 500мкФ - 3с. Время измерения конденсатора максимальной ёмкости не превышает 12с. Относительно большое время измерения связано с ограниченной мощностью источника питания МК-161.

Краткое описание работы устройства.

Устройство состоит из двух генераторов тока 0,5мА R7R8VT2VD4VD5R9 и 5мА VD1VD2R2R3R4VT1, транзисторного ключа для разряда измеряемого конденсатора VD3R5R6VT3VD6 и компаратора образцового напряжения, построенного на операционном усилителе DA1 и ключе R13R14VT4R15. Образцовое напряжение +1В получено из +5В опорного напряжения АЦП с помощью делителя R11R12.

Управление устройством организовано программно.

Сначала на выходы SELECT_IN и AUTOFEED подаются высокие логические уровни на время 100мс, при этом транзистор VT3 дополнительно разряжает измеряемый конденсатор. Далее, низким логическим уровнем на выходе SELECT_IN включается генератор тока 0,5мА ( первый поддиапазон ). Если, сразу после этого, напряжение на конденсаторе превысит 1В ( низкий логический уровень на входе BUSY ), считается, что конденсатор в обрыве. Как только напряжение на конденсаторе достигнет 1В, по времени заряда рассчитывается ёмкость и прекращается заряд. Если в течении 1с конденсатор не зарядился до 1В, подачей высоких логических уровнней выходы SELECT_IN и AUTOFEED на время 100мс конденсатор разряжается вновь. Далее, низким логическим уровнем на выходе AUTOFEED включается генератор тока на 5мА ( второй поддиапазон ). При достижении напряжения на конденсаторе 1В ёмкость рассчитывается, как для первого поддиапазона. Если в течении 10с напряжение на конденсаторе меньше 1В, считается, что конденсатор пробит.

Для работы приставки необходима программа.

Программу нужно загружать с 0-й страницы.

В/О, С/П.

К клеммам приставки с соблюдением полярности подключается конденсатор ( если смотреть на приставку со стороны зажимов, минус слева плюс справа, см. фото ), и нажимается любая клавиша, кроме С/П.

ВНИМАНИЕ! ПЕРЕД ИЗМЕРЕНИЕМ НЕОБХОДИМО РАЗРЯДИТЬ КОНДЕНСАТОР!

Фото приставки:

Во время измерения выдаётся сообщение:

Если конденсатор отсутствует или его ёмкость меньше 5мкФ, программа сообщает его об обрыве:

Если клеммы замкнуты перемычкой или ёмкость конденсатора больше 50000мкФ ( такие конденсаторы на практике попадаются сравнительно редко ) программа считает, что конденсатор пробит:

Ну а если конденсатор исправен, а его ёмкость укладывается в диапазон измерения, то на экране появляется значение измеренной ёмкости конденсатора.

Измеренная ёмкость конденсатора 330мк х 50В:

Измеренная ёмкость конденсатора 4700мк х 25В:

Также, можно измерять ёмкость целых батарей из конденсаторов:

Конструкция и детали.

Приставка собрана на плате размером 50 х 60 мм из односторонне фольгированного стеклотекстолита толщиной 1,5 мм. Схема, разводка платы и расположение деталей приставки находятся в архиве. Резисторы - МЛТ-0,125, конденсаторы C1,C2 - К10-17, C3 - К50-35. Диоды VD1-VD6 - КД521, КД522; транзисторы VT1,VT2 - КТ3107, VT4 - КТ3102 с любыми буквенными индексами. В качестве компаратора DA1 гарантированно работает микросхема КР140УД1408.

Налаживание устройства.

Приставку подключают к источнику питания напряжением 9 - 12В ( или с помощью соединительного кабеля к разъёму ВУ МК-161 ). Высокоомным вольтметром ( с входным сопротивлением не менее 10 МОм ) измеряют напряжение на инверсном входе микросхемы DA1 ( 2-й вывод ) и подбором резистора R11 устанавливают его равным 1В. Далее, к клеммам приставки подключают миллиамперметр на 10мА. Далее соединяют вход приставки SELECT_IN с общим проводом ( или подают на него низкий логический уровень с соответствующего выхода МК-161 ) и подбором резистора R7 устанавливают ток 0,5мА. Потом отключают SELECT_IN от общего провода и соединяют с общим проводом вход AUTOFEED ( или снимают с низкий логический уровень с выхода SELECT_IN и подают его на выход AUTOFEED МК-161 ) и подбором резистора R5 устанавливают ток 5мА. Не отключая миллиамперметра, проверяют напряжение на выходе микросхемы DA1 ( 6-й вывод ) Если напряжение больше 2В - неисправна микросхема. Если после отключении миллиамперметра напряжение на выходе меньше 6В - неисправна микросхема. Наконец, приставку с помощью соединительного кабеля подключают к разъёму ВУ МК-161 ( калькулятор должен быть выключен ), включают калькулятор, запускают программу и проверяют устройство измерением ёмкости заведомо исправных конденсаторов. На этом, налаживание устройства можно считать законченным.

З. Ы. Корректирующий конденсатор C1 можно не подключать - у меня схема вполне нормально работает и без него.

З. Ы. Если оксидный конденсатор долго находится без напряжения, то происходит его расформовка. При попытке измерения расформованного конденсатора можно получить на 10% и более завышенное значение измеренной ёмкости. Для формовки необходимо подать половинное рабочее напряжение на несколько минут, обычно хватает в течение нескольких секунд подать на конденсатор напряжение от батарейки "Крона". Далее, разрядить, замкнув выводы конденсатора на 3 - 5 секунд, затем, можно приступать к измерениям.

Пробный запуск среды разработки мк-152 под Линуксом

Попробовал запустить среду разработки для МК-152 под Linux-ом в эмуляторе Wine.

Версии:
ОС (Debian 4.0):
Linux dhcppc4 2.6.18-6-686 #1 SMP Wed Jan 23 03:23:22 UTC 2008 i686 GNU/Linux

Wine:
Wine 0.9.25

Среда разработки:
mk_v106.exe.zip

Результат - проблемы с кириллицей (меню не видны совсем):

Среда разработки МК-152 под Линуксом

Было бы неплохо, если бы в СЕМИКО переписали эту среду разработки под GTK, да еще бы скомпилировали под несколько популярных дистрибутивов Linux

Среда разработки для МК-152. Краткое описание

Содержание

  1. Подключение к ПК
  2. Входной язык и расширения
  3. Регистры функций
  4. Типы файлов и преобразования форматов
  5. Загрузить программу

Подключение к ПК

Подключение МК к компьютеру производится через последовательный порт.
Контакты разъемов последовательного порта ЭКВМ и компьютера следует соединить следующим образом:

ЭКВМ "ИПС"		Компьютер
	2	-	3
	3	-	2
	5	-	5

После подключения кабеля следует выполнить установку параметров обмена в программе через пункт меню: "МК - Подключить МК".

При выборе более чем одного порта или сетевого номера вместо установки выполняется поиск подключенных ЭКВМ. Первый обнаруженный МК выбирается как текущий для обмена.

Сетевой номер МК может принимать значения от 0 до 255 и задается в регистре функции 9049. При работе с программой МК должен находиться в режиме калькулятора.

Входной язык и расширения

Полное описание языка МК следует смотреть в эксплуатационной документации или в литературе.

МК имеет 10000 ячеек памяти программ, разбитых на 100 страниц, и может обращаться к 10000 регистрам. Из них первые 1000 хранят десятичные числа, остальные служат для работы с байтами, текстом и обращения к дополнительным функциям.

Команды МК могут быть записаны как в латинской, так и в русской транскрипции.
Для ручного ввода и публикации в формате HTML более привычны русские обозначения. Для компилятора, по историческим причинам, предпочтительны латинские.

Значение HEX	Команда	Описание
00-09	0-9	Ввод цифр
0A	,	Ввод десятичной запятой 
0B	+/-	/-/ Смена знака 
0C	EE	ВП - Ввод порядка 
0D	CX	Cx - Сброс X
0E	ENT	В^ - Ввод в стек
0F	F ANS	F Bx - Вызов в X предыдущего результата из X1
10	+	Сложение
11	-	Вычитание
12	*	Умножение
13	/	Деление
14	<->	Обмен содержимого X и Y
15	F 10^X	Десять в степени X
16	F EXP	e(2,71828...) в степени X
17	F LG	Десятичный логарифм
18	F LN	Натуральный логарифм 
19	F ARCSIN	Арксинус
1A	F ARCCOS	Арккосинус
1B	F ARCTG	Арктангенс
1C	F SIN	Синус
1D	F COS	Косинус
1E	F TG	Тангенс
1F		Не используется
20	F PI	Занесение в стек числа Пи (3,14159...) 
21	F SQRT	Квадратный корень
22	F X^2	Возведение в квадрат
23	F 1/X	Обратная величина
24	F X^Y	Возведение X в степень Y
25	F R	Кольцевое передвижение информации в стеке
26	K M->D	Перевод минут в доли градуса
27	K -	Аварийный останов
28	K PRGM	К ИПРГ - Считывание байта из памяти программ *
29	K /	Аварийный останов
2A	K MS->D	Перевод минут и секунд в доли градуса 
2B-2F		Не используется
30	K D->MS	Перевод долей градуса в минуты и секунды
31	K ABS	K |x| - Абсолютное значение
32	K SGN	К ЗН - Определение знака числа
33	K D->M	Перевод долей градуса в минуты
34	K INT	K [x] - Выделение целой части
35	K FRAC	K {x} - Выделение дробной части
36	K MAX	Определение максимального значения **
37	K AND	Логическое умножение **
38	K OR	Логическое сложение **
39	K XOR	Логическое сложение по модулю 2 **
3A	K NOT	Логическая инверсия **
3B	K RAN	К СЧ - Генерация случайного числа от 0 до 1 **
3C-3F		Не используется 
40-4E	M0-ME	П0-ПЕ - Запись в память 
4F	PM	РП - Запись в память регистра 0-99 (+1)
50	R/S	С/П - Останов и пуск вычислений
51	GOTO	БП - Безусловный переход в пределах страницы (+1)
52	RTN	В/О - Возврат из подпрограммы
53	GSB	ПП - Переход на подпрограмму в пределах страницы(+1)
54	K NOP	К НОП - Нет операции
55	K SCR	К ЭКР - Обновление экрана *
56	K GRPH	К ГРФ - Вывод графической информации *
57	F X!=0	Переход по условию в пределах страницы (+1)
58	F L2	Цикл с R2 в пределах страницы (+1)
59	F X>=0	Переход по условию в пределах страницы (+1)
5A	F L3	Цикл с R3 в пределах страницы (+1)
5B	F L1	Цикл с R1 в пределах страницы (+1)
5C	F X<0	Переход по условию в пределах страницы (+1)
5D	F L0	Цикл с R0 в пределах страницы (+1)
5E	F X=0	Переход по условию в пределах страницы (+1)
5F		Не используется
60-6E	RM 1- RM E	ИП0-ИПЕ - Вызов содержимого регистра
6F	P RM	Вызов содержимого регистра 0-99 (+1)
70-7E	K X!=0 0 - K X!=0 E	Косвенный переход по условию по содержимому R0-RE
7F	PK X!=0	Косвенный переход по условию по содержимому R0-R99 (+1) *
80-8E	K GOTO 0 - K GOTO E	КБПR - Косвенный безусловный переход по содержимому R0-RE
8F	PK GOTO	Косвенный безусловный переход по содержимому R0-R99 (+1) *
90-9E	K X>=0 0 - K X>=0 E	Косвенный переход по условию по содержимому R0-RE
9F	PK X>=0	Косвенный переход по условию по содержимому R0-R99 (+1) *
A0-AE	K GSB 0 - K GSB E	КППR - Косвенный переход на подпрограмму по содержимому R0-RE 
AF	PK GSB	Косвенный переход на подпрограмму по содержимому R0-R99 (+1) *
B0-BE	K M 0 - K M E	КПR - Косвенная запись по содержимому R0-RE
BF	PK M	Косвенная запись по содержимому R0-R99 (+1) *
C0-CE	K X<0 0 - K X<0 E	Косвенный переход по условию по содержимому R0-RE
CF	PK X<0	Косвенный переход по условию по содержимому R0-R99 (+1) *
D0-DE	K RM 0 - K RM E	КИПR - Косвенный вызов в стек по содержимому R0-RE 
DF	PK RM	Косвенный вызов в стек по содержимому R0-R99 (+1) *
E0-EE	K X=0 0 - K X=0 E	Косвенный переход по условию по содержимому R0-RE
EF	PK X=0	Косвенный переход по условию по содержимому R0-R99 (+1) *
F0		Не используется
F1	P GOTO	Р БП - Безусловный переход (+2) *
F2		Не используется
F3	P GSB	Р ПП - Переход на подпрограмму (+2) *
F4	PP M	РР П - Запись R0-R9999 (+2) *
F5		Не используется
F6	PP RM	РР ИП - Вызов R0-R9999 (+2) *
F7	P X!=0	Переход по условию (+2) *
F8	PF L2	Цикл по R2 (+2) *
F9	P X>=0	Переход по условию (+2) *
FA	PF L3	Цикл по R3 (+2) *
FB	PF L1	Цикл по R1 (+2) *
FC	P X<0	Переход по условию (+2) *
FD	PF L0	Цикл по R0 (+2) *
FE	P X=0	Переход по условию (+2) *
FF		Не используется

* Команда отсутствовала в советских ПМК МК-61, МК-52
** Действие команды не совпадает с МК-61, МК-52
+1 После кода команды следует один байт
+2 После кода команды следует два байта

В файле исходного текста операторы могут записываться строчными буквами и без пробелов. Допускается запись нескольких операторов в строке. При этом следует учитывать возможные неоднозначности.

В файле исходного текста кроме операторов языка могут использоваться метки, идентификаторы, псевдооператоры и комментарии.

Метки

Метки обозначают место на которое выполняется переход из другой части программы, также могут обозначать начало какой-либо области памяти программ. В нужном месте программы с начала строки, или по крайней мере
до первого оператора, записывается обозначение метки, после которого ставится двоеточие. Длина метки может быть до 250 символов, но различаются они только по первым 32. Двух одинаковых меток в программе быть не должно.
В командах метка может использоваться вместо адреса перехода или начала области памяти.
Допустимое количество меток - не более 10000.

Идентификаторы

Могут заменять собой любое число в командах вместо адреса или номера регистра. Должны быть определены псевдооператором ".EQU".
Допустимое количество идентификаторов - не более 10000.

Комментарии

Записываются в строке текста после символа точки с запятой до конца строки. Кодировка может быть 866 или 1251, текущее состояние устанавливается псевдооператором ".CHARSET".

Псевдооператоры

Используются для управления процессом компиляции.
.ORG - устанавливает текущий адрес. Должно следовать число от 0 до 9999 или определенный ранее идентификатор

.PAGE - эквивалентно .ORG со следующей страницы, параметров нет.

.OPT - параметр оптимизации. Параметр 1 разрешает использовать шестнадцатиричные адреса и номера регистров. Параметр 0 - запрещает.
Другие значения зарезервированы - не использовать.

.CHARSET - кодировка русских букв. Параметр - число 866 или 1251. Влияет на разбор текста (".TEXT") и комментарии.

.EQU - устанавливает значение идентификатора равное числу. Идентификатор записывается перед оператором, число после него. Допускается не более одного определения в строке.

.DB - вводит строку байт, разделенных запятыми от этого оператора до комментария или до конца текущей строки текста. Каждое число должно быть от 0 до 255 и может быть записано как 0h - 0FFh. Допускается
также использование идентификаторов и меток.

.DA - вводит строку чисел от 0 до 9999 (или до 16665 при ".OPT 1") от оператора до конца строки или до комментария. Каждое число интерпретируется как адрес и занимает 2 байта. Младший байт положение на странице (остаток от деления на сто), старший байт - номер страницы. Допускается использование меток и идентификаторов.

.DAH и .DAL - аналогичны ".DA", но вводят только один байт из числа - старшую или младшую часть соответственно.

.TEXT "строка" - вводит в программу строку символов. При разборе учитывается текущая кодировка. В строке могут использоваться символы: "\n", "\r", "\t", "\\", "\0" - обозначающие перевод строки, возврат каретки,
табуляцию, обратную черту и нулевой символ.

.NUM - вставляет число, идентификатор или адрес метки в программу в виде числа, записываемого в регистр X стека. Формат целого числа - десятичное или шестнадцатиричное. Дробная часть отделяется запятой. Порядок записывается после символа E. Если число или порядок отрицательны, в нужном месте ставится знак минуса.

.END - обозначает конец программы. Весь текст ниже считается комментарием.

Регистры функций

Функции графического экрана
R9000 Начальные координаты объекта
R9001 Атрибуты вывода
R9002 Расстояние между символами
R9003 Номер шрифта
R9004 Индексный регистр экрана
R9005 Работа с графической областью памяти
R9006 Работа с графической областью памяти, автоинкремент
R9007 Прокрутка экрана с заполнением 0
R9008 Прокрутка экрана с заполнением 1
R9010 Инициализация экрана
R9011 Вывод точки
R9012 Вывод линии
R9013 Вывод прямоугольника
R9014 Вывод рамки
R9015 Вывод образа из памяти программ
R9016 Вывод образа из памяти данных
R9020 Вывод символа
R9021 Вывод строки из памяти программ
R9022 Вывод строки из памяти данных
R9023 Вывод числа
R9024 Вывод числа в форматированном виде

Строка комментариев
R9025 Вывод символа
R9026 Вывод строки из памяти программ
R9027 Вывод строки из памяти данных

Буфер клавиатуры
R9029 Чтение кода клавиши и очистка буфера

Универсальный байтовый буфер
R9030 Индексный регистр 0
R9031 Индексный регистр 1
R9032 Запись и чтение по индексному регистру 0
R9033 Запись и чтение по индексному регистру 1
R9034 Запись и чтение по индексному регистру 1, автоинкремент
R9035 Преобразование числа в строку
R9036 Преобразование числа в строку в форматированном виде
R9037 Преобразование числа во внутренний формат и обратно
R9038 Преобразование числа в float и обратно
R9039 Преобразование кода команды в мнемонику

Дополнительные функции
R9040 Вычисление четности байта
R9041 Текущее значение счетчика адреса
R9042 Индексный регистр памяти программ
R9043 Чтение памяти программ
R9044 Чтение памяти программ, автоинкремент
R9045 Размерность аргумента тригонометрических функций
R9046 Инициализация генератора СЧ
R9047 Разрешение записи в энергонезависимую память
R9048 Разрешение автоматического запуска программы
R9049 Задание сетевого номера

Функции реального времени
R9050 Формирование интервалов (таймер 0)
R9051 Формирование интервалов (таймер 1)
R9052 Звуковой сигнал
R9053 Звуковой сигнал клавиатуры
R9055 Чтение и корректировка времени
R9056 Число
R9057 Месяц
R9058 Год
R9059 День недели

Электронный блокнот
R9060 Группа записей
R9061 Запись 0
R9062 Запись 1
R9063 Запись 2
R9064 Запись 3
R9065 Регистр состояния блокнота

Последовательный порт
R9070 Разрешение порта
R9071 Скорость обмена
R9072 Режим обмена
R9073 Время ожидания при приеме
R9074 Режим автоматического приема
R9075 Счетчик посылок
R9076 Прием данных
R9077 Передача данных
R9080 Индексный регистр буфера передачи
R9081 Байт буфера передачи
R9082 Байт буфера передачи, автоинкремент
R9083 Бит 9 буфера передачи
R9084 Бит 9 буфера передачи, автоинкремент
R9085 Индексный регистр буфера приема
R9086 Байт буфера передачи
R9087 Байт буфера передачи, автоинкремент
R9088 Бит 9 буфера передачи
R9089 Бит 9 буфера передачи, автоинкремент

Параллельный порт
R9090 Регистр режима
R9091 Сигналы параллельного порта
R9092 Сигналы параллельного порта
R9093 Регистр типа операции
R9094 Регистр состояния выполненной команды
R9095 Время ожидания ответа

Работа с двоичными числами
R9100 Разрядность двоичного числа
R9101 Вывод на графический экран
R9102 Вывод в строку комментариев
R9103 Преобразование в последовательность байтов и обратно

Типы файлов и преобразования форматов

Исходный текст программы (*.mkl)

Текстовый файл на языке МК в латинской транскрипции.
В МК не передается. Может быть компилирован в программу МК. Для этого выбрать пункт "МК
- Преобразовать файл" и передать в МК.
Для просмотра переключить тип файла "Файл - Тип файла - Программа" или "Исходный текст".

Программа (*.mkp)

Файл содержит коды команд МК и является исполняемой программой.
Длина программы МК кратна странице (100 команд). Длина файла от 1 до 20001 байта.

Формат файла (смещение - назначение):
0 число страниц в программе n;
2i+1 код команды;
2i+2 признак шестнадцатиричного ввода (HEX).

Здесь i от 0 до 100*n-1.

Десятичные данные (*.mkd)

Файл с содержимым регистров от 0 до 999 во внутреннем формате МК.
Размер файла 8000 байт, одно число занимает 8 байт (см. документацию). Файл может быть откорректирован в текстовом виде. Для сохранения изменений выполнить "МК - Преобразовать файл".

Двоичные данные (*.mkb)

Файл с содержимым регистров от 1000 до 5095.
Размер файла 4096 байт, по одному байту на регистр. Файл может быть откорректирован в текстовом виде (можно использовать шестнадцатиричные значения). Для сохранения изменений выполнить "МК - Преобразовать файл".

Текст (*.mkt)

Файл с содержимым регистров от 5096 до 8167.
Размер файла 3072 байта, по одному байту на регистр. Длина отображаемой строки МК - 24 байта. Кодировка символов 866. Для форматирования текста в соответствии с отображением на МК выполнить "МК - Преобразовать файл".

Блокнот (*.mkn)

Файл с содержимым групп записей блокнота от 0 до 16383 во внутреннем формате МК.
Размер файла от 4 до 524292 байт, одно число занимает 8 байт (см. документацию). Первые четыре байта содержат номера начальной и конечной группы. Файл может быть откорректирован в текстовом виде. Для сохранения изменений выполнить "МК - Преобразовать файл".

Графический экран (*.mki)

Файл с содержимым структуры графического экрана МК.
Размер файла 1028 байт. Первые четыре байта содержат координаты начальной точки и размеры, остальные соответствуют структуре графического экрана. Файл может быть просмотрен в виде изображения при выборе пункта "Вид - Изображение". Изменения в текстовом виде не выполняются.

Преобразование форматов

Все файлы могут быть сохранены как текст, совпадающий с текстом на экране. Позиции в текстовом файле разделяются табуляцией.
Все файлы, кроме файлов экрана, могут быть сохранены в виде HTML документа. Для этого предварительно следует установить "Вид - HTML".
Файл графического экрана, может быть сохранен в формате BMP(128 на 64 пикселя, монохромный).

Загрузить программу

Загрузить среду разработки и файл программы "Лунолет-1" вы можете по прямым ссылкам на странице обзора
Список файлов

Среда разработки для МК-152. Обзор возможностей

Разработчики МК-152 (НПП "СЕМИКО") порадовали своих пользователей, предложив пока еще простую, но уже достаточно функциональную среду разработки ПМК-программ на персональном компьютере.
Основные возможности:

  1. Обмен информацией между ПК и ЭКВМ "Электроника МК-152"
  2. Компиляция исходных файлов на расширенном входном языке типа ассемблера
  3. Конвертирование принятых с ПМК файлов в распространенные форматы (текст, HTML, BMP)

Среда в настоящий момент имеет версию 1.04 и представляет собой небольшую программу для Windows, не требующую установки. Вы просто скачиваете архив и распаковываете его на своем компьютере. Программа состоит всего из одного файла с именем mk.exe.

Подключение к компьютеру производится через последовательный порт (кабель входит в комплект поставки). Для обладателей новых компьютеров, не имеющих последовательного порта, дополнительно понадобится переходник типа "Serial-USB".

Среда позволяет передавать и принимать содержимое памяти программ, регистров десятичных и двоичных данных, текста, блокнота и графического экрана.

Что это означает для пользователей?

В эпоху советских ПМК пользователи набирали программы вручную, что называется "с листа". В лучшем случае, программу можно было загрузить с "флешки", но обмениваться программами все равно можно было только через перенабивание руками. Конечно, набрать 105 шагов программы и заполнить 15 регистров памяти - не слишком долгая процедура, но нынешний МК-152 позволяет создавать программы длиной в 10000 шагов при использовании до 10000 регистров.

Среда позволяет нам выгружать и загружать программы в виде двоичных или текстовых файлов ("исходников").
Файл можно переслать другому пользователю по электропочте или просто выложить на веб-страничку.

Проблема обмена и набора программ "с листа" решена.

Вторая проблема - недостаточно мощный входной язык МК-152, совместимый с прежними моделями ПМК МК-61 и МК-52.
Если для разработки 105-шаговых программ его выразительных средств хватало, то для 500 шагов любой сдвиг чреват перекройкой структуры и адресов переходов.
Проблему решает расширенный входной язык, напоминающий ассемблер.
Язык позволяет:

  • определять метки вместо абсолютных адресов переходов
  • использовать идентификаторы вместо абсолютных адресов (номеров) регистров
  • добавлять в программу комментарии
  • вставлять (псевдо)команды для управления компиляцией

Вот так, например, выглядит легендарная программа "Лунолет-1" на ассемблере МК-152:

.ORG 0
	RM D
	F X<0 A9
	ENT
	RM 8
	/
	<->
	GSB A90
A9:	RM A
	F X!=0 A43
	F X<0 A33
	2
	*
	ENT
	RM 4
	RM 3
	-
	*
	RM B
	F X^2
	+
	F SQRT
	RM B
	-
	/
	ENT
	RM 8
	*
	GOTO A90
A33: 	RM D
	F X!=0 A86
	RM 3
	F X^2
	F SQRT
	RM 7
	-
	F X<0 A87
A43: 	RM B
	RM A
	R/S
	M 1
	M 2
	F X!=0 A43
A50:	/
	M 8
	RM 5
	RM D
	+
	/
	RM 6
	*
	M 3
A59:	RM 4
	-
	RM 2
	*
	RM B
	+
	M B
	F ANS
	+
	2
	/
	RM 2
	*
	RM A
	+
	M A
	RM C 
	RM 2 
	RM 0 
	*
	-
	M C
	RM D
	RM 1
	-
	M D
	RTN
A86:	RM 6
A87:	RM 9
	R/S
	CX
A90: 	M 1
	<->
	M 2
	F X<0 A50
	RM 3
	GOTO A59
.END

Из такого текста, кстати, становятся более понятными причины легендарности "Лунолетов": в менее чем сотню машинных команд (!, т.е. примерно в сотню байт + регистры) удалось вместить моделирование полета космического корабля в безвоздушной среде.

Однако, такая запись не единственно возможная. Лексический анализатор воспринимает мнемокод (терминальные символы) без явных разделителей, поэтому ценителям языков write-only (только для кодирования) может понравиться другая запись той же программы.

rmdfx<09 entrm8/<->gsb90rmafx!=043 fx<033 2*entrm4rm3-*rmbfx^2+
fsqrtrmb-/entrm8*goto90rmdfx!=086rm3fx^2fsqrtrm7-fx<087rmbrmar/sm1m2fx!=043
/m8rm5rmd+ /rm6*m3rm4-rm2*rmb+ mbfans+ 2/rm2*rma+
marmcrm2rm0*-mcrmdrm1-mdrtnrm6rm9r/scxm1<->m2fx<050rm3goto59

После компиляции двоичный файл выгружается в МК-152 и исполняется.
Программирование для МК-152 из среды на компьютере по сути превращяется в хорошо знакомый процесс написания ассемблерных программ.

Разумеется, остается возможность программировать на ПМК как и в старые добрые времена: с абсолютными адресами, регистрами, переходами...
Для небольших программ это может быть и быстрее и проще.

Конечно, данная среда - еще не бесплатный обед, но уже похожа на неплохой завтрак.
Что хотелось бы увидеть в новой версии?

  1. Возможность запуска и отладки программы непосредственно на ПК
  2. Подсветку синтаксиса в редакторе
  3. Окошко компиляции встроенное где-нибудь справа: все равно ввиду узкого ассемблерного кода эта область пустует

Более подробно о возможностях среды разработки читайте на странице "Среда разработки для МК-152. Краткое описание"


Обновление от 18 декабря 2007


Доступна версия среды разработки 1.02

  1. Дополнительно введен режим декомпилирования файлов программ MKP в исходный текст.
    Корректно разбираются даже программы с переходами внутрь других команд.
    Простейший пример - 00.БП 01.51 02.БП 03.01 ... 51.БП 52.02.
  2. Убраны замеченные ошибки. Например, в версии 1.01 в меню "Файл" не работал список последних документов


Обновление от 26 декабря 2007


Доступна версия среды разработки 1.03.
Исправлена ошибка: при выводе текста в HTML-формате команда F10X выводилась неправильно.


Обновление от 29 декабря 2007


Доступна версия среды разработки 1.04.
Добавлена поддержка последовательных (COM) портов с 1 по 20. Данная возможность востребована при использовании переходников Serial-USB, драйвер которых может автоматически устанавливать устройство на старшие номера, например COM11.


Обновление от 10 января 2008


Доступна версия среды разработки 1.05.
Устранены ошибки, возникающие при работе программы под ОС Windows XP.

Загрузить

Загрузить среду разработки и файл программы "Лунолет-1" вы можете по ссылкам ниже.

Таблица ASCII и шрифты МК-152.

Давно обещанные таблицы шрифтов МК-152, полученные с помощью программы "Таблица ASCII". В каждой строчке таблицы по 16 символов, включая пробелы и "пустые" символы. Нумерация идёт с нуля, слева направо и сверху вниз. Снимки экрана взяты из прошивки версии 1.06

→ Программирование: как сделать?

Место для заметок о приемах програмирования на МК-152 с короткими примерами кода.

«Сверхчисла» на МК-152

«Сверхчислами» на советских ПМК назывались числа — но такие большие, что их обработка калькулятором не гарантировалась «Руководством по эксплуатации». Если конкретно, то числа с порядком 100 и больше.

Не смотря на недвусмысленные ограничения «Руководства…», на советских ПМК была слабенькая аппаратная поддержка «сверхчисел». С ними можно было производить четыре арифметические операции, их можно было возводить в квадрат, извлекать из них корень и записывать в регистры. С другой стороны, при попытке считать «сверхчисло» из регистра происходили «глюки». Программа останавливалась, регистры портились, калькулятор переходил на другой адрес (иногда переключаясь в режим программирования), а то и вообще зависал с тёмным экраном.

Увлекательный разбор этих «глюков» был опубликован в советском журнале «Техника — молодёжи», хотя сам термин «сверхчисла» чаще использовался в журнале «Наука и жизнь».

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

Можем ли мы использовать на современной «Электронике МК-152» числа большие, чем указано в её «Руководстве по эксплуатации»? Ответ положительный.

Чтобы использовать на МК-152 числа вплоть до ±9,999.999.999.999.9*10±99.999.999.999.999 договоримся хранить порядок отдельно от самого числа. Для этого можно использовать второй регистр стека или отдельный десятичный регистр (конечно, если согласны уменьшить разрядность порядка до 12 знаков).

Время от времени, когда возникает угроза аппаратного переполнения мантиссы «сверхчисла», нам придётся самостоятельно вызывать подпрограмму нормализации «сверхчисла», которая убирает паразитный порядок мантиссы, добавляя его к хранимому отдельно порядку «сверхчисла».

Вот пример подобной подпрограммы нормализации (мантисса «сверхчисла» передаётся через RX, а его порядок хранится в RC):
В↑ Flg K[x] В↑ ИПC + ПC FR F10x ÷ В/0

«Сверхчисла» относительно просто умножать и делить. При этом их мантиссы умножаются (делятся), а порядки складываются (вычитаются). Также просто реализуются возведение «сверхчисла» в квадрат и извлечение из него квадратного корня.

Сложение и вычитание «сверхчисел» немного сложнее, т.к. требует операции по выравниванию порядков — число с меньшим порядком передаёт разницу порядков своей мантиссе (возможно, уводя её в машинный нуль), после чего мантиссы «сверхчисел» складываются (вычитаются).

Впервые подобный трюк был применён в программе «Факториал».

Вывод символов в строку комментариев

На МК-61/52 нам приходилось довольствоваться логическими операциями (89 В↑ 87 Kv даёт 8 с пустышкой, то есть символом F).
МК-152 позволяет выводить по мере вычисления в строку комментария (она находится на экране сразу под регистром X) настоящие символы, включая полноценные шестнадцатеричные цифры.

00.Cx   10.25
01.9    11.FL0
02.П0   12.06
03.9    13.С/П
04.6
05.П6
06.КИП6
07.ИП6
08.PPП
09.90

Пример кода (предоставил AtH), который выводит на экран в строку комментариев первые девять латинских букв от "a" до "i" (ASCII-коды 97…105).
Заглавные русские буквы имеют коды 128…159, а строчные разбиты на два диапазона: от 160 до 175 и от 224 до 239. Кроме сообщений, их также можно использовать в названии файлов.

Как замерить скорость выполнения программы.

В последнее время стали модны тесты для МК-152. Одни и те же программы запускаются на МК-152 и новейших зарубежных калькуляторах. Различные тесты дают разные результаты. И вот пользователи радуются или печалятся, в зависимости от того, оказывается наша ЭКВМ быстрее или медленнее очередного зарубежного "конкурента".

Также запускаются тесты на старых ПМК и новой «Электронике». Здесь всегда есть повод для радости, ведь разные тесты показывают увеличение быстродействия от 100 до 1000 раз.

Но каждый раз пользоваться секундомером некузяво, ведь в МК-152 есть функции реального времени, в частности часы и два таймера. Следующая программа позволяет автоматизировать процесс тестирования, замеряя время работы тестовых программ с точностью до сотых долей секунды.

; Sekundomer.mkl

		.ORG 8900
Start:
		PPM 0949
		Cx 65535 PPM 9051
		FR PPRM 0949
		PGSB 0
		PPRM 9051 65535
		<-> - EE 2 +/-
		R/S
		GOTO Start

		.END 

Программа «Секундомер» загружается в любую страничку памяти (скажем, в 89-ю), использует десятичный регистр R949 (можно использовать любой другой) и таймер 1 (R9051). Программа, быстродействие которой мы измеряем, загружается с нулевой странички и должна заканчиваться не командой С/П, а командой В/О.

После запуска программы-секундомера командой PБП 8900 С/П машинка включает таймер и начинает исполнение основной программы. Когда основная программа завершится, команда В/О произведёт возврат в программу-секундомер. Та произведёт замер затраченного времени и выдаст его на экран, в секундах и долях секунды. Максимальное доступное для измерений время равно 10 минут 55 секунд.

Повторные замеры можно производить, просто нажимая клавишу С/П.

Как передать Hello World! в последовательный порт?

.CHARSET 1251
; Файл helloworldCOM
; Запись в СОМ-порт "Hello World!"
; Скорость 9600, 8 бит, без контроля четности	
;
.ORG 0
	CX
		PP M 9072	; Установить режим 8 бит
	9 	PP M 9071	; Установить скорость 9600
	1 	PP M 9070	; Запись 1 - разрешение использования порта ЭКВМ
	0 	PP M 9080	; Буфер записи, смещение 0
	72 	PP M 9082	; Байт буфера передачи, 'H'
	101 	PP M 9082	; Байт буфера передачи, 'e'
	108 	PP M 9082	; Байт буфера передачи, 'l'
	108 	PP M 9082	; Байт буфера передачи, 'l'
	111 	PP M 9082	; Байт буфера передачи, 'o'
        32 	PP M 9082	; Байт буфера передачи, ' '
	87 	PP M 9082	; Байт буфера передачи, 'W'
	111 	PP M 9082	; Байт буфера передачи, 'o'
	114 	PP M 9082	; Байт буфера передачи, 'r'
	108 	PP M 9082	; Байт буфера передачи, 'l'
	100 	PP M 9082	; Байт буфера передачи, 'd'
	33 	PP M 9082	; Байт буфера передачи, '!'
	12 	PP M 9077	; Передача данных
	R/S
.END

После загрузки в МК и нажатия В/О С/П на экране терминальной программы должно получиться
Hello World!

Как принять несколько строк из COM-порта и отобразить их на графическом экране?

.CHARSET 1251
; Приём текстовой информации с СОМ-порта и вывод ее
; в графический экран.
; Cкорость 9600, 8 бит, без контроля чётности
.ORG 0
	CX
	PP 	M 9072		; Установить режим 8 бит
	9 	PP M 9071	; Установить скорость 9600
	4  PP M 9073	; Задержка между байтами в ответе 4*1,25=6 мс.
	1	PP M 9070	; Разрешение порта, запись 1 - разрешение использования порта ЭКВМ
	2 	PP M 9010	; Инициализация графического экрана
A0:
	0 	PP M 9085	; Буфер приёма, смещение 0
	1 	PP M 9076	; Начать приём данных

A1:
		PP RM 9076	; Проверить окончание приёма, считав содержимое регистра приёма
		F X=0 A1	; пока оно не равно 0 - продолжать считывание
				; Приём окончен, количество принятых байт в R9075, 
				; пакет строк в буфере приёма (R9086-R9089)

		PP RM 9075	; Проверка количества принятых байт
		F X!=0 A0	; Повтор при нулевом значении
		P M 0		; Количество принятых байт - в регистр 0
	0 	PP M 9070	; Запрет на использование порта
	0 	PP M 9085	; Буфер приёма, смещение 0
	5 	P M 1		; Количество выводимых строк => в регистр М1

A2:
	1 	PP M 9007	; Прокрутка одной строки
	56 	ENT 0 
		PP M 9000	; Позиция вывода X0=0, Y0=56

A3:
		PP RM 9087    ; Считать принятый байт с автоинкрементом
		P M 2		; => в регистр 2
		13 -		; Вычесть код символа 'CR' (Возврат каретки)
		F X!=0 A4	; Если не 'CR' ->
		P RM 2        
		PP M 9020	; -> Выдать байт в графический экран
		F L0 A3	; Продолжать, пока не выведутся все байты

A4:           
		K GRPH		; --> Если 'CR', то обновить экран
		F L1 A2
		GOTO A0

.END

После загрузки программы в МК-1хх и нажатия В/О С/П ЭКВМ переходит в режим ожидания приема строки из СОМ-порта.

Устанавливаем в терминальной программе нужные параметры порта и вывод локального эха, копируем из буфера обмена строку символов:

Пять строк в терминале

На экране появится:

Пять строк на ГРФ экране

Как принять строку символов из COM-порта и записать ее в строку комментариев?

.CHARSET 1251
; Прием текстовой строки с СОМ-порта и вывод ее в строку комментариев.
; Cкорость 9600, 8 бит, без контроля чётности.
;
.ORG 0
	1 	PP M 9070	; Разрешение использования порта
	CX
		PP M 9072	; Установить режим 8 бит
	9 	PP M 9071	; Установить скорость 9600
	0 	PP M 9074	; Режим автоматического приема разрешен
	4 	PP M 9073	; Задержка между байтами при приеме 1,25*4 = 6 мс 
	1 	PP M 9076	; Прием

A1:		PP RM 9076	; Проверить окончание приема
		F X=0 A1	; пока не равно 0 - продолжать прием

	0 	PP M 9070	; Запрет на использование порта
	0 	PP M 9085	; Смещение буфера приема на 0
		PP RM 9075	; Количество принятых байтов
		P M 0		; ... записать в регистр 0	 

A2:		PP RM 9087      ; Считать принятый байт с автоинкрементом
		P M 1		; Запомнить его в регистре 1
		13 -		; Вычесть код символа 'CR' (возврат каретки)
		F X!=0 A3	; Если не 'CR' - выдать в строку комментария
		P RM 1        
		PP M 9025	; Выдать байт в строку комментариев

A3:		F L0 A2	        ; Продолжать, пока не выведутся все байты
           
.END

После загрузки программы в МК-1хх и нажатия В/О С/П ЭКВМ переходит в режим ожидания приема строки из СОМ-порта.

Устанавливаем в терминальной программе нужные параметры порта и вывод локального эха, копируем из буфера обмена строку символов:

Вывод из терминала

В строке комментариев появляется:

Вывод из терминала

Операторы защиты

Известно, что в МК-152 условные операторы «обратны» по сравнению с другими языками. Переход по указанному адресу происходит, если условие НЕВЕРНО! Рассмотрим фрагмент:

... 50.Fx≥0 51.99 52.F√ ...

Если число в регистре X отрицательно, команда Fx≥0 произведёт переход на адрес 99 и следующая команда будет исполняться с этого адреса. Если же условие выполнено (в регистре X ноль или положительное число), команда Fx≥0 выполняется аналогично К НОП. То есть ничего не происходит и программа продолжает выполняться со следующего адреса, равного 52. Извлекаем квадратный корень из неотрицательного числа.

Такая мнемоника команды условного перехода наследственная, она применялась ещё на советских калькуляторах МК-52, Б3-34 и т.д. В принципе, это соответствует обычному оператору алгоритмических языков:

IF x>=0 THEN {продолжить выполнять то, что записано по адресу 52} ELSE {выполнить то, что записано с адреса 99}

Получается, что в следующем шаге после Fx≥0 мы записываем адрес части ELSE. Это необычно для тех, кто привык программировать на ассемблере. Ведь там команда условного перехода передаёт управление при выполнении условия, а не как в МК-152 — при невыполнении.

Для понимания этого правила мне, когда я пишу программы для МК-152, помогает восприятие команды условного перехода, как оператора защиты. Предположим, нам надо совершить обычную операцию деления RY на RX. Мы указываем своё требование к RX, например Fx≠0 66. После выполнения условного оператора мы можем быть уверены, что наше требование выполнено и RX≠0. Если это не так, мы уже указали адрес 66, где готовы разобрать оставшийся случай с нулевым делителем.

В некоторых алгоритмических языках существует чем-то схожая конструкция assert. Она проверяет указанное условие на истинность. Если же условие ложно, выполняется другое, некое специальное действие. В случае ЭКВМ адрес этого действия указывается сразу за условным оператором.

Свобода, равенство, братство или парадоксы команды Fx=0.

Равно ли число A числу B? На первый взгляд, вопрос простой. На самом деле на этом вопросе спотыкаются многие программисты-новички. Попробуем подстелить соломку для владельцев МК-152.

Для записи вещественных чисел в МК-152 (да и других компьютерах) используется формат с плавающей запятой. В этом формате вещественное число A приближается двумя целыми числами m и e — такими, что A≈m*10e. Ирония в том, что этот распространённый формат, являясь одним из лучших и эффективных, неспособен записать большинство вещественных чисел (например π, e, √2, ⅓)! Зато «плавучка» может гарантировать программисту точность, с которой в ней записаны числа. В случае МК-152 это ровно 14 значащих цифр мантиссы.

Дальше — хуже. Неустранимые погрешности «плавучки» накапливаются, растут при цепочке вычислений. Дополнительный вклад вносит погрешность самих вычислений, особенно вычислений специальных функций (F√, Fex, Fsin,…). Ещё больший вклад вносит погрешность вводимых в МК-152 данных — которые хорошо, если имеют два-три верных знака. Ведь бытовые измерительные устройства (безмен, часы, линейка) обеспечивают точность 10%…5%, а хорошие лабораторные — 1%…0,1%.

В-общем, если для записи чисел мы используем формат с плавающей запятой, то проведя одинаковые вычисления двумя разными методами, мы не всегда получим одинаковые m и e на выходе. Числа получаются одинаковые, а вот их приближённая запись в «плавучке» может отличаться в последних знаках мантиссы.

Обычно в МК-152 для сравнения двух чисел A и B, записанных в регистрах X и Y, используют следующие команды (три шага):

- Fx=0 адрес

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

Но операция вычитания даст на выходе ноль лишь в том случае, если совпадают записи чисел A и B. Если числа A и B целые, регистры стека в состоянии их хранить без искажений (вплоть до очень больших целых чисел) и вы можете спокойно использовать фрагмент, приведённый выше. Но если сравниваются вещественные числа, то погрешность исходных данных, вычислений и самой «плавучки» делают подобное сравнение бессмысленным.

Если в регистрах X и Y записано одно и тоже вещественное число A, но с разной точностью (или с одинаковой точностью ε, просто RX=A+ε, а RY=A-ε/2), команда Fx=0 всё равно вызовет переход, будто числа отличаются. Точное равенство «плавучки» также недостижимо, как выигрыш в казино. Напомню, что погрешность ε существует даже при идеально точных входных данных (например, целочисленных), возникая из-за несовершенства «плавучки» и накапливаясь при цепочечных вычислениях по разным формулам.

Так как же правильно сравнивать вещественные числа на МК-152? Можно предложить следующий вариант проверки равенства вещественных чисел, записанных в регистры X и Y (шесть шагов):

- K|x| ИП0 - Fx<0 адрес

При этом, разумеется, в регистр 0 надо записать величину ε — разницу, при которой числа начинают считаются различными. У этого метода есть существенный недостаток. Для его использования нужно заранее знать порядок сравниваемых чисел.

Например, мы уверены в восьми десятичных знаках. Ровно столько десятичных знаков отображает МК-152 и позволяет вводить с клавиатуры. Если сравниваемые числа находятся в диапазоне от 1 до 10, нам достаточно записать в R0 число 2*10-8. Если же сравниваются числа от 108 до миллиарда, в регистр 0 потребуется записать двойку.

К счастью, для МК-152 существует более удобное и короткое решение для сравнения вещественных чисел. Достаточно перед сравнением записать исследуемые числа в регистры (пять шагов):

ИП1 ИП2 - Fx=0 адрес

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

Аналогичным образом при сравнении вещественных чисел требуется «обрамлять» команду Fx≠0 и (вы удивитесь!) остальные команды сравнения (Fx<0, Fx≥0). Ведь при равенстве вещественных чисел их «плавучка» будет слегка различаться. В этом случае команды сравнения будут вести себя хаотично. Если же меньшее число отличается от большего на величину, меньшую погрешности, то команда вообще способна наврать. Установленным может считаться лишь такое различие чисел с плавающей запятой, которое превышает заранее заданную погрешность.

Если A и B это вещественные числа, записанные в RX и RY с заданной точностью ε, сравнивающий их алгоритм должен предусмотреть все три варианта:

  1. A<B, то есть RX<RY-2ε (равенство A<B установлено надёжно, но данный случай не исчерпывает все варианты, когда A<B)

  2. A>B, то есть RX>RY+2ε (равенство A>B установлено надёжно, но данный случай не исчерпывает все варианты, когда A>B)
  3. A≈B, то есть |RX-RY|<2ε (числа различаются не настолько сильно, чтобы можно было чётко утверждать, которое из них больше). В отличии от математических теорем и целочисленной арифметики, строгое равенство A=B «плавучка» давать неспособна.

Всё сказанное верно и в том случае, если B=0. Допустим, нам нужно удостовериться, что хранящееся в RX вещественное число A отрицательно и сделать переход во всех остальных случаях (вещественный аналог Fx<0). Точность ε по-прежнему запишем в регистр 0 (четыре шага):

ИП0 + Fx<0 адрес

Сравнение чисел с плавающей запятой это отдельная глава в программировании. Опытные программисты используют похожие методы и при программировании на больших ЭВМ, а программы неопытных программистов сбоят по причине, разобранной в этой статье.

Трюк «двойная точность».

Как известно, МК-152 позволяет хранить числа с точностью 12 десятичных разрядов, но производит вычисления в стеке с точностью целых 14 разрядов. Как же сохранить 14-разрядное число, не пожертвовав точностью? Т.к. в предлагаемом решении для сохранения одного 14-разрядного числа используется пара произвольных 12-разрядных регистров, я назвал его «двойной точностью».

Итак, записать число из RX в регистровую пару R0,1:

П0 ИП0 - П1

Считать 14-разрядное число из регистровой пары R0,1 в RX:

ИП0 ИП1 +

Сохранить 14-разрядное число в регистровой паре R0,1, но оставить его в RX:

ENT M0 RM0 - M1 FR

Предлагаемое решение будет правильным и при дальнейшем увеличении разрядности стека в МК-152, вплоть до 24-разрядных чисел. Замечу, что описанный трюк вовсе не обязательно использовать в программе сразу для всех чисел — используйте «двойную точность» лишь для сохранения наиболее точных чисел, в которых важен каждый из 14 разрядов.

Трюк впервые использован в программе численного интегрирования «Гаусс».

→ Регистры функций

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

R9115. Напряжение источника питания.

Считывание значения напряжения автономного источника питания МК-161 позволяет контролировать степень его заряда.

Операция производится при выполнении команды чтения из регистра памяти с адресом 9115. Стек поднимается и текущее значение напряжения источника в вольтах заносится в регистр X. Операция записи в регистр памяти по указанному адресу не изменяет его значение.

В МК-152 регистр не используется, состояние стека при считывании не изменяется.

Значение регистра 9115

2,557 Вольта Аккумулятор глубоко разряжен. МК-161 подключен к БП и только-только начал подавать признаки жизни.
3,0 Вольта МК-161 работает нормально, но если при недоступности БП включить подсветку, значение R9115 просядет и экранчик начнёт тухнуть.
3,2 Вольта МК-161 работает нормально, даже с включённой подсветкой.
3,57 Вольта меньше этого значения МК-161 выводит символ пунктирной разряженной батарейки.
3,6 Вольта Разработчики рекомендуют начать зарядку аккумулятора, для увеличения срока его службы.
3,644 Вольта МК-161 выводит символ батарейки с одним заряженным делением.
3,72 Вольта МК-161 выводит символ батарейки с двумя заряженными делением.
3,9 Вольта Встроенная программа МК-161 выводит символ полностью заряженной батарейки. Разработчики рекомендуют прекратить зарядку аккумулятора, для увеличения его сроки службы.
3,7-4,2 Вольта
(точное значение задаётся
подстроечным резистором)
МК-161 считает аккумулятор полностью зарядившимся и прекращает зарядку.
4,29 Вольта Напряжение полностью заряженного Li+ аккумулятора. Для экономии ресурса МК-161 останавливает зарядку раньше, поэтому считывание R9115 записывает в стек исправного МК-161 значение, меньше этого числа.

R9116. Номер модели.

Номер модели ЭВМ определяет её конструктивные особенности и набор выполняемых функций.

Считывание номера модели производится при выполнении команды чтения из регистра памяти с адресом 9116. Стек поднимается и число, соответствующее номеру модели, заносится в регистр X. Для МК-152 заносится число 152, для МК-161 - число 161.

Операция записи в регистр памяти с указанным адресом не изменяет его значение.

Значение регистра 9116

6 Калькулятор ВК-6 (свободное вычислительное ядро, написанное на языке Си)
152 ЭКВМ "Электроника МК-152" (выпускается НПП "СЕМИКО")
161 ЭКВМ "Электроника МК-161" (выпускается НПП "СЕМИКО")

R9117. Номер версии ПО.

Номер версии встроенного ПО определяет набор выполняемых функций и особенности их реализации.

Считывание номера версии производится при выполнении команды чтения из регистра памяти с адресом 9117. Стек поднимается и число, соответствующее версии ПО, заносится в регистр X. Целая часть считанного числа соответствует номеру версии, дробная - номеру подверсии.

Операция записи в регистр памяти с указанным адресом не изменяет его значение.

История версий

ЭЛЕКТРОНИКА МК-152 (МК-152М)


1.20 (09.06.11)
- функции работы с таблицами (R9210-9213);
- запрет останова исполняемой программы командой С/П (R9048).
1.19 (05.04.11)
- загружаемый шрифт (R9009).
1.18 (16.02.11)
- функции графического интерфейса пользователя (R9200-9209).
1.17 (17.01.11)
- исправлена ошибка функции R9038.
1.16 (05.03.10)
- введён вывод ошибки при вычислении выражений 0÷0 и 00;
- результат выполнения операции "К ИПРГ" при выходе за верхнюю границу памяти программ приведён в соответствие с описанием в РЭ.
1.15 (25.01.10)
- исправлена ошибка в командах косвенных условных переходов "Kx<0M", "Kx=0M", "Kx≥0M", "Kx≠0M".
1.14 (24.06.09)
- добавлены функции номера модели R9116 и номера версии R9117;
- исправлена ошибка функций "F xy" и "F ex", возникавшая при переполнении.


ЭЛЕКТРОНИКА МК-161


1.08 (25.08.11)
- функции работы с таблицами (R9210-9213);
- запрет останова исполняемой программы командой С/П (R9048).
1.07 (05.04.11)
- загружаемый шрифт (R9009).
1.06 (16.02.11)
- функции графического интерфейса пользователя (R9200-9209).
1.05 (17.01.11)
- исправлена ошибка функции R9038.
1.04 (05.03.10)
- введён вывод ошибки при вычислении выражений 0÷0 и 00;
- результат выполнения операции "К ИПРГ" при выходе за верхнюю границу памяти программ приведён в соответствие с описанием в РЭ.
1.03 (25.01.10)
- исправлена ошибка в командах косвенных условных переходов "Kx<0M", "Kx=0M", "Kx≥0M", "Kx≠0M".
1.02 (24.06.09)
- исправлена ошибка функций "F xy" и "F ex", возникавшая при переполнении.

→ Статьи об МК-152 и МК-161

Статьи, отзывы, комментарии в прессе и на других сайтах

Зарубежная заметка о МК-152

Elektronika MK-152: Retrograde Russian Programmable Calc

While the poster at Paradoxoff is slagging this "Elektronika MK-152" programable calculator—and it is very humble, with only half a meg of memory, membrane keys, and no power supply—I find its sturdy Russian construction and no-fuss design appealing. Of course, I don't have to use it, only admire it from afar.
But as one commentor noted:

The programming language of this device is very easy. There are many problems for non-programmers that should be solved. How much does it spend for engeneer to write program that realize his new function, if he doesn’t programming languages? In C++ it spends more than half of day. In this device it spends less than 15 mins. And about memory for example: a program to calculate square root takes 24 bytes only.

Then again, this thing is going for over $150 in Russia, so expecting a few more modern features is not unreasonable.

Источник и обсуждение

Новая жизнь «Электроники» (обзорная статья из журнала "Мир ПК")

Современной молодежи, для которой компьютер так же естественен и привычен, как для более старшего поколения, например, телевизор, вряд ли знаком термин «программируемый калькулятор». Но многие наверняка помнят, как впервые появились эти устройства, как копились деньги на их приобретение, какой восторг вызывала возможность задать этой машинке программу и получить результат… Сколько радости дарила возможность творчества в области программирования… Как выходили новые, все более совершенные модели… МК-61… МК-52… Программируемые микрокалькуляторы (ПМК) в нашей стране стали первыми персональными вычислительными машинами. Хотя их возможности были весьма ограниченными, использовались они практически повсеместно.


Существует большой класс задач, для решения которых оптимальным средством стала вычислительная машина с возможностями ПМК. Это задачи с небольшим количеством входных числовых параметров. Современным пользователям трудно представить, что на калькуляторе можно было решать дифференциальные и алгебраические уравнения, обращать матрицы, проводить спектральный анализ и выполнять множество других вычислений. Научные сотрудники обрабатывали на калькуляторах данные экспериментов. Инженеры рассчитывали усилительные каскады и несущие элементы. Студенты с их помощью выполняли лабораторные и курсовые работы. Школьники решали задачи по физике и математике. Для калькуляторов создавались даже игровые программы, причем в немалом количестве. Все это оказалось возможным благодаря мощной и гибкой системе команд, заложенной в ПМК.
Может быть, отчасти именно как дань тем восторженным ощущениям по поводу первых ПМК инженеры новосибирского НПП «Семико» разработали и весной этого года запустили в производство изделие, продолжающее линейку МК. "Электроника МК-152" является развитием серии программируемых калькуляторов. (Подробности см. по адресу http://mk.semico.ru) Казалось бы, начинать производство подобных устройств в век сверхмощных компьютеров и КПК совершенно бесперспективно и бессмысленно, но… как показывает опыт, они находят своего покупателя.
Идея создания новой модели портативной ЭВМ возникла в связи с производственной необходимостью в надежном, дешевом и удобном вычислительном устройстве. Потребовалось заменить «глючные» и дорогие компьютеры, которые «зависают», ломаются и устаревают, на что-либо более удобное в использовании и доступное.
Круг потребителей весьма широк — от рабочих до академиков разных специальностей: техники, инженеры, научные сотрудники, преподаватели, студенты, школьники, индивидуальные производители и т.д. Особенно востребованным это устройство может быть в удаленных от столицы районах, где еще не развита сеть дистрибуторов «продвинутого» оборудования и где цена на технику имеет огромное значение. (Стоимость «Электроники МК-152» составляет около 6 тыс. 3800 руб. и, учитывая невысокий уровень доходов в «глубинке», можно предположить, что этот фактор немаловажен.)

К достоинствам машин такого класса относится готовность к вычислениям сразу после включения питания, простая и понятная система команд, обозримые и хорошо документированные аппаратные и программные средства. Калькуляторы не требуют загрузки операционной системы, управляющая программа отлажена и одинакова во всех экземплярах. Вирусами они также не заражаются. Программы просты, не требуют особых затрат труда на разработку и совершенно бесплатны. Их может создавать человек, практически незнакомый с программированием, но хорошо знающий свою сферу деятельности.
Основное назначение новинки — автоматизация в малых и средних лабораторных и промышленных технологических установках. Второе достоинство — значительное упрощение и ускорение численных расчетов. Это может быть полезно для научных работников, инженеров и студентов (ведь результат расчета на ЭВМ получить гораздо проще и быстрее, чем на компьютере). Третье — возможность использовать ЭВМ для обучения информатике в школах и программированию в институтах. Четвертая возможная сфера применения — техническое творчество. Даже такая небольшая программа, как метроном, уже может заменить отдельное изделие. Написать аналогичную утилиту на компьютере или КПК можно, конечно, но есть альтернатива. В этой маленькой ЭВМ есть таймеры, часы реального времени и возможность управлять внешними объектами. Оставлять ее включенной в отсутствие человека вполне допустимо. Поэтому здесь возможности ограничены только фантазией. Техническая документация на ЭВМ доступна всем желающим — разумеется, бесплатно.
"Электроника МК-152" обладает расширенной системой команд, совместимой с калькуляторами Б3-34, МК-61, МК-52. Большинство существующих программ ПМК могут выполняться на ЭВМ без каких-либо изменений — это дает возможность использовать уже имеющуюся базу готовых программ. (Инженерами и научными сотрудниками в Советском Союзе было создано огромное количество подобных программ. Справочники и техническая литература в то время выпускались миллионными тиражами, и они до сих пор имеются во многих библиотеках.)
В общем клавишные ЭВМ — это особый тип вычислительных машин, специализированный для решения задач определённого класса. Если проводить аналогии с транспортом, то легковой автомобиль не является маленьким грузовиком или большим велосипедом. МК-152, в свою очередь, ликвидирует разрыв между высокопроизводительным профессиональным инструментом и ручным трудом в сфере автоматизации умственной деятельности.
С одной стороны, можно рассматривать наследника советских ПМК — самый крупный по размерам калькулятор — как курьез, с другой стороны, как известно, предложение рождается под влиянием спроса, ведь «если звезды зажигают, значит, это кому-то нужно»…

Михаил Степанищев, Юлия Солнцева
"Мир ПК" №7-2007 (приложение к журналу на диске)

ПМК: программируемые микрокалькуляторы (статья из "Мир ПК")

ПМК: программируемые микрокалькуляторы

История микрокалькуляторов (в дальнейшем я буду называть их просто калькуляторами) началась в эпоху миниатюризации, когда были разработаны первые интегральные микросхемы и наступила эпоха ЭВМ третьего поколения. Тогда у производителей появилась возможность создать для математических вычислений компактное устройство индивидуального пользования, предназначенное для работы с числами. Следует отметить, что ранее выпускались так называемые клавишные ЭВМ на базе полупроводниковых элементов, однако их габариты, порой превосходящие размеры пишущих машинок, не позволяют в полной мере относить их к микрокалькуляторам.

Пионером в области калькуляторостроения считается американская фирма Hewlett-Packard, выпустившая в 1968 г. первый в мире настольный программируемый научный калькулятор HP 9100A, а чуть позже, в 1972 г., — первый в мире портативный калькулятор для научных расчетов HP-35. Первый портативный программируемый HP-65 появится двумя годами позже, в 1974-м.

В СССР развитие «железа», т. е. элементной базы, шло с запаздыванием, что, разумеется, сказалось и на сроках промышленного выпуска устройств. Первый советский настольный программируемый калькулятор «Искра 123» появился в 1973 г., первый карманный калькулятор Б3-04 был выпущен через год, а первый портативный программируемый — Б3-21 — через четыре. Обозначение «Б», согласно ГОСТ, соответствовало «бытовой технике».

Калькуляторы тогда разделялись на три основных класса: простейшие, инженерные и программируемые. Простейшие могли выполнять арифметические действия и несложные алгебраические вычисления типа извлечения корня и получения обратного числа. Инженерные позволяли работать с логарифмами, степенями, тригонометрическими функциями, производить вычисления со скобками и статистические расчеты (за рубежом помимо инженерных также выделяют класс финансовых калькуляторов). Программируемые же, как следует из названия, обладая арсеналом инженерных калькуляторов, могли вести вычисления по заранее введенной программе. Об этих устройствах мы и поговорим в нашей статье.


Особенности входных языков ПМК

Входной язык ЭВМ — это основной способ записи и ввода программы в ее память. Исторически в ПМК существовали препятствия для использования языков высокого уровня, таких как Бейсик или Паскаль. Прежде всего это требования по производительности при относительно медленных по сравнению с традиционными ЭВМ процессорах, а также конструктивные особенности: массогабаритные характеристики, цифровые индикаторы в роли дисплея и специализированная клавиатура. Поэтому в качестве входного языка использовалась система мнемокодов, в основном совпадающая с вычислениями в обычном непрограммируемом режиме. Например, вычисление выражения sin20,5 ∙ (1 + cos2√2) на языке ПМК при вводе программы ничем не отличалось от нажатий соответствующих клавиш в режиме ручных вычислений.

Однако даже на таком уровне произошло размежевание на языки с алгебраической логикой (клавиши нажимаются в порядке, близком к математической записи, используются скобки) и языки с обратной польской записью (RPN — Reverse Polish Notation, постфиксная запись). Преимущество первых в несколько большей наглядности, вторых — в эффективности: в общем случае для вычисления требуется меньше нажатий клавиш, чем при алгебраической записи, скорость обработки также выше за счет более «машинной» записи.

Так, для вычисления все того же выражения sin20,5 ∙ (1 + cos2√2) на калькуляторе с алгебраической логикой нужно будет нажать клавиши:

0,5 sin X2 × (1 + 2 √ cos X2) =

Обратная запись короче на три команды:

0,5 sin X2 2 √ cos X2 1 + x

Исторически программируемые калькуляторы Hewlett-Packard, все советские ПМК и новый МК-152 используют обратную польскую нотацию. Калькуляторы Texas Instruments остаются верны алгебраической записи.


Современные калькуляторы

Как массовость телевидения не отменяет радио или наличие даже нескольких личных автомобилей — велосипеды или мопеды, стоящие обычно в том же гараже, так развитие и доступность компьютеров не исключают необходимости в специализированных устройствах-вычислителях. Удобство пользования, постоянная готовность, наличие большого количества встроенных функций и несметного числа программ, как правило, совершенно бесплатных, возможность легкого сопряжения с компьютером по сей день остаются важными для пользователей ПМК во всем мире. Активно используются ПМК в школах и вузах в процессе обучения. Фирма HP предлагает своим потенциальным покупателям даже специальную рекомендательную табличку для выбора модели калькулятора в зависимости от класса школы или курса вуза.

Иллюстрация с французского веб-сайта HP

В представленной табличке слева идут номера моделей калькуляторов, сверху — классы средней школы и курсы вуза. Collége соответствует 5—8-му классам, Lycée — 9—11-му классам. BAC+1/+2 означает 1-й/2-й курсы вуза, BAC+3/+4 — 3-й и 4-й (бакалавриат) и BAC+5/+6 — 5-й и 6-й (магистратура). Темно-синим цветом в середине выделена область программируемых калькуляторов (включая модели с обратной польской нотацией RPN), голубым наверху — инженерные «числогрызы», внизу ярко-голубым отмечены квадратики моделей для финансовой математики и статистики.

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

Для фирмы Hewlett-Packard последней на сегодняшний день является модель HP-50g. Это новейший представитель модельного ряда HP-49, выпущенного в свою очередь в 1999 г. как продолжение популярного HP-48. Отличительной особенностью данных моделей является наличие встроенного пакета так называемой компьютерной математики (СКМ — система компьютерной математики, CAS — Computer Algebra System). Калькулятор позволяет запускать программы, написанные как на своих входных языках (UserRPL, SysRPL, HP-BASIC), так и на ассемблере самого микропроцессора ARM. Программы для HP 50g/49g+ можно также писать на компьютере, используя компилятор диалекта языка Си, имеющий библиотеки для работы со стеком и другими особенностями калькуляторов.

ПМК TI-89. Фото с веб-сайта производителяКонкуренцию HP составляет другая американская фирма — Texas Instruments (TI), также имеющая долгую историю производства ПМК. Современной моделью является TI-89 Titanium из линейки, начатой в 1995 г.

TI-89 и совместимые с ним ПМК этой серии собраны на процессоре Motorola 68000 с частотой 16 МГц. Вначале модель выпускалась в горизонтальном исполнении с QWERTY-клавиатурой под названием Voyage 200. Но клавиатурные модели в гораздо большей степени страдают от конкуренции с КПК и субноутбуками, поэтому массовым продуктом является именно TI-89 Titanium в классическом вертикальном «калькуляторном» исполнении. Основным входным языком является бейсикоподобный TI-BASIC, устройство также располагает пакетом компьютерной математики.

В принципе можно с уверенностью говорить о сходных характеристиках этих двух флагманских моделей. Есть различия в архитектуре, языке, культурных традициях, но по функциональным возможностям HP-50g и TI-89 вполне сравнимы.

Любопытно, что американский сегмент сетевой энциклопедии — википедии — пишет об обязательности отечественных ПМК в американских школах и большой роли, которую играет TI-BASIC для воспитания американских программистов. Посетив непосредственно веб-сайт компании, нетрудно заметить, что TI давно и прочно обосновалась на образовательном рынке собственной страны и обслуживает его, предлагая калькуляторы не только как удобные средства обучения математике, но и в качестве управляющих устройств в составе цифровых лабораторий по другим естественно-научным предметам.

А что у нас?

Распад СССР в 1991 г. сопровождался фактически полным разгромом отечественной радиоэлектронной промышленности. По инерции еще несколько лет небольшими партиями выпускались прежние модели, затем в условиях разорванных хозяйственных связей и длинных технологических цепочек производство замерло.

По сути развитие ПМК остановилось на моделях серии «Электроника» МК-61 и МК-52, спроектированных и запущенных в производство еще в 1985 г. Здесь нельзя не вспомнить микрокомпьютер «Электроника» МК-85, поступивший в продажу в 1986 г. Это уже не был классический ПМК: он обладал миниатюрной алфавитно-цифровой клавиатурой и входным языком типа Бейсика. К сожалению, к середине—концу 1990-х годов подобные устройства во всем мире начали вытесняться портативными компьютерами — КПК и субноутбуками — и в настоящее время массово не производятся. В то же время классические ПМК с новым графическим экраном не только выжили, но и получили серьезное развитие.

В таких условиях появление в 2007 г. новой модели «Электроники» — МК-152 — означало отчаянную попытку продолжить традиции отечественной микроэлектроники. Впервые за 15 лет в стране появился серийный продукт класса микроЭВМ.

Следует оговориться сразу: массовым продуктом устройство МК-152 не назовешь уже хотя бы потому, что выполнено оно в стационарном (настольном) варианте. Его основное назначение — управление приборами в составе цифровых комплексов. Фирма-производитель — НПП СЕМИКО из Новосибирска — так его и использует.

ПМК МК-152. Фото с веб-сайта производителяОднако МК-152 не только полностью совместим с системой команд прежних советских моделей, но и значительно расширяет их возможности. Устройство обладает на два порядка большей памятью для команд и данных и примерно на три порядка более высоким быстродействием. Например, по тесту «8 ферзей» на основном входном языке МК-152 является одним из фаворитов и включен в неофициальный рейтинг на сайте сообщества HP. Для тех, кто подзабыл математику, напомню, что увеличение на один порядок соответствует увеличению в 10 раз. Появилась возможность сохранять программы не только во внутренней памяти (эта функция поддерживалась еще МК-52), но и на внешнем диске — маленьком съемном модуле типа флэш-памяти. Экран размером 160×160 точек дает возможность выводить алфавитно-цифровую и графическую информацию. ПМК соединяется с компьютером по кабелю последовательного интерфейса и позволяет обмениваться не только программами и картинками экрана, но и вести разработку сложных программ в удобной среде с использованием расширенного языка программирования.

МК-152 обладает стандартными внешними портами (параллельный и последовательный), а также относительно простыми командами на уровне языка, что позволяет использовать его для управления внешними устройствами: от домашней елочной гирлянды до цифровых приборов и лабораторного/стендового уникального или мелкосерийного оборудования, где производство специализированного микроконтроллера не всегда экономически оправдано.

Среда разработки ПМК-программ и сопряжения МК-152 с персональным компьютеромКак видим, прогресс в функциональной области сделан немалый, и при этом сохранена совместимость со старыми моделями МК-61 и МК-52. Почему это важно?

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

Настольное исполнение МК-152 и относительно высокая цена (около 4 тыс. руб.) являются серьезными недостатками в глазах многих потенциальных пользователей, которые хотели бы иметь портативный вариант — легкий, с автономным питанием и более дешевый. Поэтому НПП СЕМИКО планирует выпуск «облегченной» модели. Предполагается производить портативную модель микрокалькулятора в максимально дешевом исполнении по цене до 2000 руб. Питание будет осуществляться как от батарейки, так и от сети через подключаемый внешний блок питания, клавиатура будет кнопочной (в МК-152 она пленочная, защищенная от попадания влаги в лабораторных условиях). С целью снижения стоимости в модели будут исключены параллельный порт и электронный блокнот. Внутренний диск, возможность подключения внешнего и последовательный порт для обмена с компьютером, разумеется, останутся.

Хотелось бы от души пожелать производителям отечественного ПМК удачи, а нам с вами — сохранения и при-умножения культурных традиций советской инженерной школы. О нехватке квалифицированных кадров и других проблемах в этой сфере теперь часто говорят на уровне правительства. Это хороший знак — производство высоких технологий требует специалистов и, как минимум, делает попытки подняться из руин прошлых лет.

Литература и ссылки

  1. Дьяконов В. П. Современные зарубежные микрокалькуляторы. М.: Солон-Р, 2002.
  2. Данилов И. Д., Славин Г. В. Пять вечеров с микрокалькулятором. М.:, Финансы и статистика, 1988.
  3. Епанечников В. А., Цветков А. Н. Справочник по прикладным программам для микрокалькуляторов. М.:, Финансы и статистика, 1988.
  4. Фролов С. История советских калькуляторов, http://www.enlight.ru/ib/also/calcs/calcs1.htm.
  5. НПП СЕМИКО. Веб-сайт единственного на сегодняшний день производителя отечественных ПМК, http://mk.semico.ru.
  6. Итоги теста скорости вычислений «8 ферзей», http://arbinada.com/pmk/node/30.
  • Кон-Тики: веб-сайт, целиком посвященный программируемым калькуляторам, http://pmk.arbinada.com.

  • Пример разработки программы

    Попробуем решить на ПМК несложную задачу, требующую пакетной обработки данных. Предположим, нам требуется найти корни у десятка квадратных уравнений, известных каждому школьнику. Уравнение имеет вид: ax2 + bx + c = 0, а его корни находятся по формулам:

    x1 = (–b + √(b2 – 4ac)) / 2

    x2 = (–b – √(b2 – 4ac)) / 2

    Можно решать эту задачку с помощью карандаша и бумаги. Для пары уравнений ручные вычисления будут быстрее, но для нескольких десятков имеет смысл воспользоваться программой. Конечно, для ПМК уже есть готовые программы, которые надо просто ввести или загрузить с диска и начать работу. Но мы составим ее самостоятельно. У МК-152 есть 10 000 регистров памяти, куда можно записывать числа. Мы воспользуемся для нашей задачи только шестью: в регистры A, B и C будем вводить соответствующие коэффициенты уравнения, в регистре 3 запомним промежуточный результат вычисления дискриминанта (b2 – 4ac), в регистрах 1 и 2 будем записывать вычисленные корни x1 и x2.

    Переводим калькулятор в режим программирования нажатием клавиш F ПРГ и вводим нашу программу начиная с адреса 00. После окончания ввода переходим в режим ручных вычислений F АВТ, нажимаем В/0 и начинаем вычисления: вводим коэффициент А, нажимаем С/П, вводим коэффициент В, С/П, коэффициент С, С/π.— через мгновение на экране загорается значение первого корня, в регистре 2 находится второй. Оба корня также видны на индикаторе: первый корень — в регистре X, второй — в регистре Y.

    Например, решим уравнение 2x2 + 5x + 3 = 0. Вводим 2 С/П 5 С/П 3 С/П. На экране загораются значения корней: –1,5 и –1.

    Конечно, приведенная программа не оптимальна по размеру, ее можно сократить на десяток команд. В ней отсутствует проверка
    «a = 0», когда квадратное уравнение превращается в линейное. А еще можно было бы добавить блок вычисления комплексных корней. Все это вы сможете сделать самостоятельно, заглянув в прилагаемую к ПМК инструкцию на русском языке. Для тех, кто не располагает временем на программирование, доступен огромный банк бесплатных программ и целых пакетов, опубликованный в книгах и периодических изданиях.

    Сергей Тарасов, февраль 2008

    Статья опубликована в журнале "Мир ПК" №4-2008

    P.S. Вынужден извиниться перед читателями журнала "Мир ПК", которым была дана слишком преждевременная информация по поводу возможного возрождения в РФ массовых отечественных ПМК.

    Программируемые калькуляторы - умному достаточно

    Сегодня мы опять возвращаемся к теме программируемых калькуляторов. Небольшая дискуссия в комментариях неожиданно нашла своё продолжение, и сегодня мы публикуем статью, присланную нам Михаилом Степанищевым, главным инженером НПП “СЕМИКО”.

    Другой путь

    В статье “О вычислительной мощности и сложности решаемых задач” уже поднимался вопрос о направлении развития вычислительной техники. Вроде ведь и прогресс налицо, скорость обработки информации и ее объемы растут на порядок каждые несколько лет. Но, по большому счету, сложность решаемых задач при этом мало изменяется, а все возможности тратятся на украшательства, попутно снижая надежность систем и подрывая доверие к результатам вычислений.

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

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

    Для расчетов, если они хоть немного выходят за рамки общеупотребительного, использовать современный персональный компьютер тоже проблематично. Существующие специализированные приложения или чрезмерно сложны для освоения и крайне дороги, или выдают результат сомнительного качества. А еще чаще необходимые приложения отсутствуют вовсе. Получается парадоксальная ситуация - посмотреть фильм через интернет на компьютере можно, поиграть в игру с динамической трехмерной графикой тоже. Но вот, к примеру, обсчитать кривую титрования в химической лаборатории (десяток чисел) - абсолютно не на чем.

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

    Для того, чтобы программирование стало массовой профессией, были созданы визуальные средства программирования. Но их применение с весьма большой натяжкой можно назвать прогрессом. Создавая иллюзию простоты в использовании, эти технологии мешают достижению главной цели - созданию эффективных и надежных приложений.

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

    Для решения задач управления объектами, устройствами и приборами сейчас используются системы, построенные на базе микроконтроллеров. Немалая часть оставшихся толковых программистов работает сейчас в этой области. Но и здесь наблюдаются достаточно тревожные тенденции. Недостаток ума программиста нередко восполняется завышенными требованиями к быстродействию и объему памяти в самом устройстве, что с радостью поддерживается производителями микросхем.

    Применение языков высокого уровня для микропроцессорных систем тоже вряд ли можно считать большим достижением. Даже Си, уже практически вытесненный с персональных машин визуальными подделками, плохо приспособлен к архитектуре микроконтроллеров. Написать эффективное приложение в этой области практически можно только на ассемблере. И здесь мы попадаем в замкнутый круг. Разработка программ на ассемблере все таки слишком трудоемка для повсеместного использования.

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

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

    С выпускаемыми нашим предприятием изделиями можно ознакомиться на сайте mk.semico.ru. Фактически, ЭВМ “Электроника МК-152″ - это программируемый микрокалькулятор с портами последовательного и параллельного ввода-вывода. Встроенный язык команд является развитием системы команд советских микрокалькуляторов “Электроника МК-61″, “МК-52″.

    Не будем повторять здесь технические характеристики. Желающие могут почерпнуть всю информацию, вплоть до принципиальных схем, на указанном сайте. Остановимся на тех моментах, которые вызывают различную реакцию. От недоумения - “а зачем это, когда все уже есть”, до резкого неприятия - “дорого, убого и не современно”. Немалая часть людей, увидев знакомое слово “калькулятор”, сразу теряет интерес и думает, что им уже все понятно. Поэтому без конца приходится отвечать на однотипные вопросы и замечания от тех, кто не захотел читать дальше.

    Первый вопрос обычно звучит так - “зачем было воспроизводить это убожество, а если уж воспроизвели для коллекционеров, то почему не МК-52 на 100%, неужели трудно было микропрограмму проэмулировать?”

    МК-152 в документации намеренно назван не просто программируемым микрокалькулятором, а клавишной электронной вычислительной машиной. По возможностям ЭВМ значительно превышает прототипы, имеет связь с внешними устройствами, часы реального времени, таймеры, дисковую операционную систему и т.п.

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

    Почему за основу для разработки взяты именно микрокалькуляторы - отдельный вопрос. Целью работы было создание функционально законченного устройства с максимально простой системой команд, стабильной конфигурацией, обозримыми ресурсами и разумной ценой. Другие проанализированные платформы не обладали всем набором требуемых качеств.

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

    Система команд калькуляторов обладает удивительной емкостью. Например, программа вычисления корней квадратного уравнения на языке МК имеет длину всего 24 байта. Аналогичная программа на Си под DOS после компиляции займет около 24 килобайт. На современном объектно-ориентированном языке программирования нетрудно составить аналогичную программу длиной 24 мегабайта, требующую как минимум гигабайт оперативной памяти, которая будет работать на Pentium IV раз в сто медленнее, чем аналог на советском калькуляторе.

    Лаконичность языка МК позволяет не просто обмениваться программами, которые фактически представляют собой исходные тексты, но и публиковать их. В обычную книгу без затруднений входит несколько сотен программ с формулами, подробными описаниями и тестовыми примерами.

    Язык МК уникален также своей однозначностью. Выпустить сборник полезных прикладных программ на другом языке практически невозможно. Даже BASIC, задуманный как простой язык для обучения программированию, не способен выполнить эту роль. Он имеет такое количество диалектов, что любую опубликованную программу проще переписать заново, чем адаптировать.

    Стандартный язык Си может выступать в этом качестве, но для его практического применения лучше все же быть профессиональным программистом. А язык калькуляторов, как показала практика 80-х годов, доступен для изучения и применения каждому специалисту, независимо от сферы его деятельности.

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

    Программирование на ЭВМ позволяет получить полузабытое удовольствие от самого процесса, сравнимое с работой на ассемблере для микроконтроллеров. Хотя разработка программ на МК-152 гораздо доступнее, поскольку не требуется дополнительное оборудование и не нужно заботиться об аппаратной части. Простота и гибкость языка, в сочетании с полной документированностью ЭВМ, дает ощущение владения ситуацией. То есть то чувство, которое полностью отсутствует при работе на персональных компьютерах.

    Второе замечание к МК-152, опуская отдельные обороты, звучит так: “солидные зарубежные фирмы предлагают настоящие продвинутые калькуляторы раскрученных брендов по значительно меньшим ценам. А вы отечественные производители, что уже само по себе не круто, так почему же не сделали еще сложнее, но в разы дешевле”.

    Прямых аналогов МК-152 за рубежом нет. В целом, импортные калькуляторы все больше напоминают узко специализированные КПК. Ближе всего к ЭВМ стоит ряд моделей графических программируемых калькуляторов HP, имеющих выход на внешние устройства (по фирменному интерфейсу).

    Принципиальное отличие МК-152 от импортных калькуляторов заключается в том, что в нем есть стандартные порты и нет лишних функций и библиотек подпрограмм. Для операций, которые в системе команд МК реализовать невозможно, используются регистры функций - аналоги прерываний DOS и BIOS в персональных компьютерах. Все, что может быть реализовано в программе пользователя, в ней и выполняется.

    Типичный пример - гиперболические функции. Практически в каждом зарубежном калькуляторе они есть, но много ли пользователей сможет объяснить что это и зачем. А те, кто понимает, без труда составят на ЭВМ программу вычисления sh(x) длиной семь байт (она есть в справочнике по расчетам на микрокалькуляторе В.П. Дьяконова): Fex, B ↑, F1/x, -, 2, ÷, С/П. Даже те, кто не знал или забыл, глядя на программу поймут или вспомнят, что sh(x) = (ex - 1/ex)/2.

    Сказанное относится и к статистическим расчетам, преобразованию величин в различные единицы измерений, численному интегрированию и дифференцированию, матричным операциям, а также ко многим другим вещам, загромождающим зарубежные модели.

    Погоня за впечатляющими характеристиками по быстродействию и памяти также не велась, хотя МК-152 вполне сопоставим с иностранными калькуляторами. Увеличить в рекламных целях все параметры на современной элементной базе как раз не сложно, а вот найти оптимум - более трудная задача.

    Сохранение в МК-152 обратной польской нотации и стековой архитектуры также выглядит несколько архаично по сравнению с графическим отрисовыванием формул в современных импортных калькуляторах. Но это компенсируется предсказуемостью поведения ЭВМ при выполнении программы, что важнее в большинстве случаев. А про совместимость со старыми программами, которая намеренно сохранена, уже сказано.

    Вопрос цен нами также изучался. Цены на импортные программируемые калькуляторы в России не меньше чем у нашей продукции. Для справки можно посмотреть прайс-лист с сайта www.calculator.ru. Разумеется, на зарубежных сайтах, особенно предлагающих подержанный товар, можно найти и значительно меньшие цены, но это ничего не говорит о реальных, если учесть затраты на пересылку и таможенное оформление.

    Цена нашей продукции складывается из стоимости комплектующих и затрат на производство. К сожалению, существенно снизить издержки в ближайшее время не реально. Однако, приобретая ЭВМ, пользователь получает функционально законченное изделие и может использовать этот инструмент в дальнейшем по своему усмотрению. Никакие затраты на лицензирование программного обеспечения, бесконечные апгрейды и абонентскую плату ему не угрожают.

    Цены на импортное электронное оборудование зачастую намеренно занижены, поскольку первоначальные затраты покупателя являются только прелюдией к пожизненному оплачиванию счетов. Каждый может рассмотреть, к примеру, собственные расходы на сотовый телефон, компьютер и DVD-проигрыватель за последние пару лет и сопоставить их с первоначальной ценой устройства.

    Специализированные дополнительные принадлежности для МК-152 также не требуются. Стыковочные параметры ЭВМ приведены в документации. К ней, через последовательный и параллельный порты, может быть подключено любое стандартное или самодельное устройство. Даже сменный электронный диск можно собрать самостоятельно из доступных компонентов, руководствуясь схемой.

    Еще одно замечание звучит так: “так ведь это можно на КПК или на десктопе проэмулировать”.

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

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

    Ну и самое странное, хотя и нередко высказываемое, замечание: “использование 8051 - это убого и не современно”.

    В ЭВМ стоит современный представитель серии - микросхема W77LE516 с тактовой частотой 22 МГц. Развитая система команд, и достаточные размеры памяти позволили уместить всю управляющую программу во внутреннем ПЗУ, что значительно увеличило надежность устройства в целом. Именно W77LE516 выбрана еще по двум критериям. В отличие от 8051, цикл шины занимает не 12 тактов, а 4. При этом, длительность цикла может варьироваться для обмена с медленными устройствами, такими как индикатор.

    Система команд серии iMCS-51 весьма удобна и хорошо продумана. О чем уже было написано в статье Р.В. Абраша “О вкусах не спорят…”. Успешная реализация ЭВМ на контроллере этой серии говорит сама за себя.

    По нашему мнению, размещение управляющей программы, интерпретатора команд, текстового редактора, библиотеки функций, системы ввода-вывода и операционной системы ЭВМ вместе со шрифтами, экранами и сообщениями в памяти объемом 64 килобайта - также говорит в пользу выбора данной микросхемы и системы команд.

    Почему использование в зарубежных калькуляторах 16/32-х разрядных процессоров и соответствующих объемов внутренней памяти для получения практически тех же рабочих характеристик устройства считается некоторыми более “продвинутым” и “современным” подходом - совершенно непонятно.

    И в заключение хочется обратить внимание инженеров на ряд преимуществ МК-152 по сравнению с другой вычислительной техникой.

    Взаимодействие с любым оборудованием через последовательный или параллельный порт типичная задача для МК-152. Параллельный порт может функционировать в различных режимах, в том числе в режиме непосредственного управления отдельными сигналами. Последовательный порт работает с различными скоростями обмена и длиной слова 8 и 9 бит. Необходимые для этого функции реализованы как программно, так и аппаратно. Поэтому изготовление различных стендов и проверочных устройств не вызывает затруднений.

    Все экземпляры МК-152 одинаковы. При замене или увеличении количества рабочих мест достаточно взять ЭВМ и переписать на нее отлаженную программу. При замене одного компьютера на другой, даже похожий, времени уйдет значительно больше.

    Описание работы также не вызывает затруднений. Вид экрана и нажимаемые клавиши можно привести совершенно однозначно. Текст программы размещается прямо в документе. К примеру, программа для проверки связи приборов Мультитест с ЭВМ, имеет длину около 300 байт вместе с драйвером протокола. Таблица с этой программой на языке МК занимает примерно одну страницу машинописного текста. Полное и исчерпывающее описание работы с ней требует всего четыре абзаца. Пример заведомо работоспособен и будет одинаково выполнен на всех исправных комплектах из прибора, кабеля и ЭВМ - вне зависимости от других факторов. Что, собственно, и требуется для целей контроля.

    МК-152 может неограниченное время работать непрерывно. Большой объем памяти электронного блокнота и возможность обмениваться данными с другими ЭВМ позволяют создать распределенные системы накопления и обработки информации.

    Решение прикладных вычислительных задач, вместе с составлением и вводом небольшой программы, занимает не больше времени, чем включение и загрузка ОС персонального компьютера. Лицензирование программного обеспечения для ЭВМ не требуется.

    ЭВМ полностью документирована. Исчерпывающая информация о системе команд, функциях, описание работы, электрические схемы и прочая документация находятся в свободном доступе. И это тоже выделяет МК-152 на фоне современной вычислительной техники, даже простейшая документация по которой чаще всего не доступна или является чьей-либо интеллектуальной собственностью.

    Хотя клавишные ЭВМ МК-152 и не исчерпывают все возможные сферы применения вычислительных устройств малой и средней мощности, по нашему мнению, они могут быть полезны.

    гл. инженер НПП “СЕМИКО”
    Степанищев Михаил Борисович

    Источник: Берлога инженера