В этой подшивке мы собираем информацию по ПМК Электроника МК-152 и МК-161: общие сведения, программы, примеры из практики...
=== Место для самых простых вопросов и умных на них ответов ===
Допустим, файл программы предполагается расположить по адресу ORG 6000:
.CHARSET 1251 ; Файл pad_linii .ORG 6000 .DB 21h ; 4421h ?

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.

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:
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.
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 documentation: syntax (англ.) — там есть всё, но она довольно брутальна. :-) Также этому посвящена секция 24 официального FAQ (англ.). Из того же, что я нагуглил про создание файлов синтаксиса, мне понравились и пригодились вот эти простенькие примеры:
Этот материал — формулировка задачи. Напомню, что vim был выбран из-за его кросс-платформенности (современная среда MK.EXE работает только под Windows) и мощности vim хватит для решения любых практических задач. Впрочем, некий proof of concept мне уже удалось сделать:

au BufRead,BufNewFile *.mkl set filetype=mkl
syntax enable set background=dark set nocompatible set autoindent set smartindent set tabstop=4 set shiftwidth=4 set showmatch set ruler set virtualedit=all
Вот это и есть серьёзная, но вознаграждающая себя работа, которую пока никто за нас не сделал. Для примера я взял за основу правила для ассемблера 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
syn это сокращение от syntax. Всего существуют три команды синаксической разметки (подробнее на англ.):
" 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
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 через последовательную шину SPI.
В отличие от ЭКВМ "Электроника МК-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" (стационарный ПМК с портами ввода-вывода для управления внешними устройствами).
Программы для ПМК становятся длиннее. Вводить их руками будет обременительно. Существующее хранение на внешнем диске (флешке) позволяет не вводить программу повторно, но не решает проблемы с обменом.
Как можно организовать обмен программами, кроме традиционного перенабивания текста вручную?
Общий смысл предложений можно выразить коротко: простая стыковка МК-152 и ПК.
При этом программа и данные поставляются, например, в виде одного файла внутреннего формата (редактирование средствами ПК необязательно), который можно переслать по электропочте, опубликовать в сети и т.д.
Обновление от 10 декабря 2007.
Данная возможность реализована. См статью "Среда разработки для МК-152. Обзор возможностей"
Программа Китайский год замотивировала меня посидеть пару вечеров с интернет-планшеткой.
В результате получился такой скрипт на языке Python, преобразующий монохромный BMP файл в некое подобие исходного текста программы MKL программируемых калькуляторов МК-152/161.
Увеличенный в 4 x 4 раза исходный BMP файл bw_32x32_face.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?
О. Использование возможно:
В. Является ли наличие портов (RS232, Centronix) преимуществом? Ведь есть переходники USB -> RS232, а те же импортные ПМК имеют USB?
О. За USB -> RS232 надо платить. Зарубежные ПМК и научные калькуляторы не поддерживают такой преобразователь. Даже КПК не все: нужна поддержка USB-host, которая имеется в основном у относительно дорогих моделей (около 10 тыс.руб).
Некоторые преобразователи не являются полноценными, например, не имеют линий квитирования.
Centronix можно рассматривать как несколько входов-выходов, в т.ч. двунаправленных. В инструкции прямо указанно, что поддерживается и индивидуальное управление его линиями.
Давайте-ка вынесу сюда все откровения об аккумуляторе, которые Михаил Борисович нам в жж-сообществе поведал. А то потом ведь не найдёшь. Заодно добавлю информацию из РЭ, чтобы всё в одном месте было.
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 потребляет больше энергии в режиме выполнения программы и меньше в режиме ожидания ввода. Но никакого особенного энергосберегающего "ждущего" режима не предусмотрено. Когда калькулятор для вычислений не нужен, выключайте его. Вот и всё энергосбережение.
Схема, исходные тексты и прошивки простого устройства на микроконтроллере Atmega16, управляемого через порт RS232 посредством ASCII команд. Команды можно посылать из любой терминальной программы или, к примеру, из программируемых калькуляторов МК-152 и МК-161.
Добавлена команда выбора серво-привода для управления. Теперь можно управлять до 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. Оказалось удобной штукой для робото-тестирования:
Сборка сервопривода:

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

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

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

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

Серво #1 в 90 градусов:
-serv1 Selected servo:1 Ok -sw090 Servo 1 Angle: 90 Value: 1500 Ok

Серво #1 в 180 градусов:
-sw180 Servo 1 Angle: 180 Value: 2450 Ok

Серво #2 в 0 градусов:
-serv2 Selected servo:2 Ok -sw000 Servo 2 Angle: 0 Value: 600 Ok

Серво #2 в 90 градусов:
-sw090 Servo 2 Angle: 90 Value: 1500 Ok

Серво #2 в 180 градусов:
-sw180 Servo 2 Angle: 180 Value: 2450 Ok

Файлы проекта WinAVR и исходные тексты, вер.0.5
============ Владельцы МК-1хх, присоединяйтесь к тестам! :) =============
Изменения: миграция в 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

Cервопривод в 45 градусов:
-sw045 Value: 1050 Ok

Cервопривод в 90 градусов:
-sw090 Value: 1500 Ok

Cервопривод в 135 градусов:
-sw135 Value: 1975 Ok

Cервопривод в 180 градусов:
-sw180 Value: 2450 Ok

Перед началом работы сервопривод необходимо откалибровать в файле 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
Добавлена команда чтения значения с порта 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 изменены командные опции:
-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
Добавлены файлы:
Принципиальная схема не совсем полная - отсутствуют цепи питания и элементы обвязки микроконтроллера. Но, так как микроконтроллер можно использовать любой, то и обвязка потребуется соответствующая. В Сети очень много схем, относительно несложно.
Если а) все подключено правильно б) выбраны правильный CОМ-порт и скорость (38400 бод) c) частота микроконтроллера установлена в 8 МГц, то после старта микроконтроллера или его сброса в окне терминальной программы должно появиться:

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

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

высветит светодиоды LED7-LED4 и LED0:
Почему выбран микроконтроллер 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 к компьютеру, поддерживаемый официальными программами НПП «СЕМИКО» — подключение по интерфейсному кабелю «Стык С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). Сам я такого кабеля ещё не видел, но возможность соединять ЭКВМ в локальную сеть очевидна каждому, кто прочитал Руководство по эксплуатации.
Надеюсь, что данный текст рассеет много заблуждений и даст вам понимание, что за кабели прилагаются к вашей ЭКВМ и как их правильно использовать для подключения к самым разным компьютерам. Возможно, если вы в точности следовали моим инструкциям, у вас получился небольшой работающий «паровозик» из кабелей. Если после изучения этого материала у вас не осталось вопросов, вы легко сможете выбрать или спаять один-единственный кабель, который заменит всю цепочку кабелей, использованных вами.
Чтобы лишний раз не блуждать по словообильной документации сделал "шпаргалку", сведя в таблицы функции, команды, коды и пр. Получилось 12 листов. Делал для себя, поэтому возможно некоторые сокращения окажутся не очевидными. Отсутствует "распиновка" разъёмов 152-й модели. Остальное вроде представлено. Делал с учётом двусторонней печати в режиме брошюры, но можно печатать как угодно и выборочно.
Приставка к ЭКВМ "Электроника МК-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 под 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
Результат - проблемы с кириллицей (меню не видны совсем):

Было бы неплохо, если бы в СЕМИКО переписали эту среду разработки под GTK, да еще бы скомпилировали под несколько популярных дистрибутивов Linux
Содержание
Подключение МК к компьютеру производится через последовательный порт.
Контакты разъемов последовательного порта ЭКВМ и компьютера следует соединить следующим образом:
ЭКВМ "ИПС" Компьютер 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 Преобразование в последовательность байтов и обратно
Текстовый файл на языке МК в латинской транскрипции.
В МК не передается. Может быть компилирован в программу МК. Для этого выбрать пункт "МК
- Преобразовать файл" и передать в МК.
Для просмотра переключить тип файла "Файл - Тип файла - Программа" или "Исходный текст".
Файл содержит коды команд МК и является исполняемой программой.
Длина программы МК кратна странице (100 команд). Длина файла от 1 до 20001 байта.
Формат файла (смещение - назначение):
0 число страниц в программе n;
2i+1 код команды;
2i+2 признак шестнадцатиричного ввода (HEX).
Здесь i от 0 до 100*n-1.
Файл с содержимым регистров от 0 до 999 во внутреннем формате МК.
Размер файла 8000 байт, одно число занимает 8 байт (см. документацию). Файл может быть откорректирован в текстовом виде. Для сохранения изменений выполнить "МК - Преобразовать файл".
Файл с содержимым регистров от 1000 до 5095.
Размер файла 4096 байт, по одному байту на регистр. Файл может быть откорректирован в текстовом виде (можно использовать шестнадцатиричные значения). Для сохранения изменений выполнить "МК - Преобразовать файл".
Файл с содержимым регистров от 5096 до 8167.
Размер файла 3072 байта, по одному байту на регистр. Длина отображаемой строки МК - 24 байта. Кодировка символов 866. Для форматирования текста в соответствии с отображением на МК выполнить "МК - Преобразовать файл".
Файл с содержимым групп записей блокнота от 0 до 16383 во внутреннем формате МК.
Размер файла от 4 до 524292 байт, одно число занимает 8 байт (см. документацию). Первые четыре байта содержат номера начальной и конечной группы. Файл может быть откорректирован в текстовом виде. Для сохранения изменений выполнить "МК - Преобразовать файл".
Файл с содержимым структуры графического экрана МК.
Размер файла 1028 байт. Первые четыре байта содержат координаты начальной точки и размеры, остальные соответствуют структуре графического экрана. Файл может быть просмотрен в виде изображения при выборе пункта "Вид - Изображение". Изменения в текстовом виде не выполняются.
Все файлы могут быть сохранены как текст, совпадающий с текстом на экране. Позиции в текстовом файле разделяются табуляцией.
Все файлы, кроме файлов экрана, могут быть сохранены в виде HTML документа. Для этого предварительно следует установить "Вид - HTML".
Файл графического экрана, может быть сохранен в формате BMP(128 на 64 пикселя, монохромный).
Загрузить среду разработки и файл программы "Лунолет-1" вы можете по прямым ссылкам на странице обзора
Список файлов
Разработчики МК-152 (НПП "СЕМИКО") порадовали своих пользователей, предложив пока еще простую, но уже достаточно функциональную среду разработки ПМК-программ на персональном компьютере.
Основные возможности:
Среда в настоящий момент имеет версию 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 из среды на компьютере по сути превращяется в хорошо знакомый процесс написания ассемблерных программ.

Разумеется, остается возможность программировать на ПМК как и в старые добрые времена: с абсолютными адресами, регистрами, переходами...
Для небольших программ это может быть и быстрее и проще.
Конечно, данная среда - еще не бесплатный обед, но уже похожа на неплохой завтрак.
Что хотелось бы увидеть в новой версии?
Более подробно о возможностях среды разработки читайте на странице "Среда разработки для МК-152. Краткое описание"
Обновление от 18 декабря 2007
Доступна версия среды разработки 1.02
Обновление от 26 декабря 2007
Доступна версия среды разработки 1.03.
Исправлена ошибка: при выводе текста в HTML-формате команда F10X выводилась неправильно.
Обновление от 29 декабря 2007
Доступна версия среды разработки 1.04.
Добавлена поддержка последовательных (COM) портов с 1 по 20. Данная возможность востребована при использовании переходников Serial-USB, драйвер которых может автоматически устанавливать устройство на старшие номера, например COM11.
Обновление от 10 января 2008
Доступна версия среды разработки 1.05.
Устранены ошибки, возникающие при работе программы под ОС Windows XP.
Загрузить среду разработки и файл программы "Лунолет-1" вы можете по ссылкам ниже.
Давно обещанные таблицы шрифтов МК-152, полученные с помощью программы "Таблица ASCII". В каждой строчке таблицы по 16 символов, включая пробелы и "пустые" символы. Нумерация идёт с нуля, слева направо и сверху вниз. Снимки экрана взяты из прошивки версии 1.06


Место для заметок о приемах програмирования на МК-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 секунд.
Повторные замеры можно производить, просто нажимая клавишу С/П.
.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!
.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хх и нажатия В/О С/П ЭКВМ переходит в режим ожидания приема строки из СОМ-порта.
Устанавливаем в терминальной программе нужные параметры порта и вывод локального эха, копируем из буфера обмена строку символов:

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

.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. Она проверяет указанное условие на истинность. Если же условие ложно, выполняется другое, некое специальное действие. В случае ЭКВМ адрес этого действия указывается сразу за условным оператором.
Равно ли число 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 с заданной точностью ε, сравнивающий их алгоритм должен предусмотреть все три варианта:
Всё сказанное верно и в том случае, если 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, с возможностью их обсуждения.
Считывание значения напряжения автономного источника питания МК-161 позволяет контролировать степень его заряда.
Операция производится при выполнении команды чтения из регистра памяти с адресом 9115. Стек поднимается и текущее значение напряжения источника в вольтах заносится в регистр X. Операция записи в регистр памяти по указанному адресу не изменяет его значение.
В МК-152 регистр не используется, состояние стека при считывании не изменяется.
| 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 значение, меньше этого числа. |
Номер модели ЭВМ определяет её конструктивные особенности и набор выполняемых функций.
Считывание номера модели производится при выполнении команды чтения из регистра памяти с адресом 9116. Стек поднимается и число, соответствующее номеру модели, заносится в регистр X. Для МК-152 заносится число 152, для МК-161 - число 161.
Операция записи в регистр памяти с указанным адресом не изменяет его значение.
| 6 | Калькулятор ВК-6 (свободное вычислительное ядро, написанное на языке Си) |
| 152 | ЭКВМ "Электроника МК-152" (выпускается НПП "СЕМИКО") |
| 161 | ЭКВМ "Электроника МК-161" (выпускается НПП "СЕМИКО") |
Номер версии встроенного ПО определяет набор выполняемых функций и особенности их реализации.
Считывание номера версии производится при выполнении команды чтения из регистра памяти с адресом 9117. Стек поднимается и число, соответствующее версии ПО, заносится в регистр X. Целая часть считанного числа соответствует номеру версии, дробная - номеру подверсии.
Операция записи в регистр памяти с указанным адресом не изменяет его значение.
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", возникавшая при переполнении.
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", возникавшая при переполнении.
Статьи, отзывы, комментарии в прессе и на других сайтах
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 предлагает своим потенциальным покупателям даже специальную рекомендательную табличку для выбора модели калькулятора в зависимости от класса школы или курса вуза.
В представленной табличке слева идут номера моделей калькуляторов, сверху — классы средней школы и курсы вуза. Collége соответствует 5—8-му классам, Lycée — 9—11-му классам. BAC+1/+2 означает 1-й/2-й курсы вуза, BAC+3/+4 — 3-й и 4-й (бакалавриат) и BAC+5/+6 — 5-й и 6-й (магистратура). Темно-синим цветом в середине выделена область программируемых калькуляторов (включая модели с обратной польской нотацией RPN), голубым наверху — инженерные «числогрызы», внизу ярко-голубым отмечены квадратики моделей для финансовой математики и статистики.
Современные
ПМК, в отличие от своих предков, обладают относительно большим экраном, сравнимым
с монохромными дисплеями простейших КПК, позволяющим выводить не только числовую,
но и символьную информацию, а также строить графики. Устройства интегрируются с
компьютерами, тем самым многократно расширяя возможности по обмену данными и программами.
Наконец, их быстродействие возросло на порядки.
Для фирмы Hewlett-Packard последней на сегодняшний день является модель HP-50g. Это новейший представитель модельного ряда HP-49, выпущенного в свою очередь в 1999 г. как продолжение популярного HP-48. Отличительной особенностью данных моделей является наличие встроенного пакета так называемой компьютерной математики (СКМ — система компьютерной математики, CAS — Computer Algebra System). Калькулятор позволяет запускать программы, написанные как на своих входных языках (UserRPL, SysRPL, HP-BASIC), так и на ассемблере самого микропроцессора ARM. Программы для HP 50g/49g+ можно также писать на компьютере, используя компилятор диалекта языка Си, имеющий библиотеки для работы со стеком и другими особенностями калькуляторов.
Конкуренцию
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 не только полностью совместим с системой команд прежних советских моделей,
но и значительно расширяет их возможности. Устройство обладает на два порядка большей
памятью для команд и данных и примерно на три порядка более высоким быстродействием.
Например, по тесту «8 ферзей» на основном входном языке МК-152 является одним из
фаворитов и включен в неофициальный рейтинг на сайте сообщества HP. Для тех, кто
подзабыл математику, напомню, что увеличение на один порядок соответствует увеличению
в 10 раз. Появилась возможность сохранять программы не только во внутренней памяти
(эта функция поддерживалась еще МК-52), но и на внешнем диске — маленьком съемном
модуле типа флэш-памяти. Экран размером 160×160 точек дает возможность выводить
алфавитно-цифровую и графическую информацию. ПМК соединяется с компьютером по кабелю
последовательного интерфейса и позволяет обмениваться не только программами и картинками
экрана, но и вести разработку сложных программ в удобной среде с использованием
расширенного языка программирования.
МК-152 обладает стандартными внешними портами (параллельный и последовательный), а также относительно простыми командами на уровне языка, что позволяет использовать его для управления внешними устройствами: от домашней елочной гирлянды до цифровых приборов и лабораторного/стендового уникального или мелкосерийного оборудования, где производство специализированного микроконтроллера не всегда экономически оправдано.
Как
видим, прогресс в функциональной области сделан немалый, и при этом сохранена совместимость
со старыми моделями МК-61 и МК-52. Почему это важно?
В СССР книги по теме ПМК издавались миллионными тиражами, были написаны не только десятки тысяч прикладных программ, но и целые пакеты. Программируемые калькуляторы использовались в широком спектре отраслей, от строительства и геологоразведки до астрономии и радиотехники. Сейчас все это наследие становится доступным для изучения, использования и развития. Причем совершенно бесплатно. А поставщики говорят с покупателем на его родном языке.
Настольное исполнение МК-152 и относительно высокая цена (около 4 тыс. руб.) являются серьезными недостатками в глазах многих потенциальных пользователей, которые хотели бы иметь портативный вариант — легкий, с автономным питанием и более дешевый. Поэтому НПП СЕМИКО планирует выпуск «облегченной» модели. Предполагается производить портативную модель микрокалькулятора в максимально дешевом исполнении по цене до 2000 руб. Питание будет осуществляться как от батарейки, так и от сети через подключаемый внешний блок питания, клавиатура будет кнопочной (в МК-152 она пленочная, защищенная от попадания влаги в лабораторных условиях). С целью снижения стоимости в модели будут исключены параллельный порт и электронный блокнот. Внутренний диск, возможность подключения внешнего и последовательный порт для обмена с компьютером, разумеется, останутся.
Хотелось бы от души пожелать производителям отечественного ПМК удачи, а нам с вами — сохранения и при-умножения культурных традиций советской инженерной школы. О нехватке квалифицированных кадров и других проблемах в этой сфере теперь часто говорят на уровне правительства. Это хороший знак — производство высоких технологий требует специалистов и, как минимум, делает попытки подняться из руин прошлых лет.
Попробуем решить на ПМК несложную задачу, требующую пакетной обработки данных. Предположим, нам требуется найти корни у десятка квадратных уравнений, известных каждому школьнику. Уравнение имеет вид: 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
Сегодня мы опять возвращаемся к теме программируемых калькуляторов. Небольшая дискуссия в комментариях неожиданно нашла своё продолжение, и сегодня мы публикуем статью, присланную нам Михаилом Степанищевым, главным инженером НПП “СЕМИКО”.
В статье “О вычислительной мощности и сложности решаемых задач” уже поднимался вопрос о направлении развития вычислительной техники. Вроде ведь и прогресс налицо, скорость обработки информации и ее объемы растут на порядок каждые несколько лет. Но, по большому счету, сложность решаемых задач при этом мало изменяется, а все возможности тратятся на украшательства, попутно снижая надежность систем и подрывая доверие к результатам вычислений.
При этом ощущается все более заметный разрыв между двумя способами использования вычислительной техники. С одной стороны, по ее прямому назначению - для проведения расчетов, моделирования, управления и автоматизации процессов. С другой, при использовании вычислительной техники как бытовой аппаратуры, для удовлетворения искусственно созданных и всевозрастающих запросов потребителей.
Не так давно большую часть задач управления технологическими процессами можно было решить на базе универсальных вычислительных машин. И даже персональные компьютеры под 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 и не исчерпывают все возможные сферы применения вычислительных устройств малой и средней мощности, по нашему мнению, они могут быть полезны.
гл. инженер НПП “СЕМИКО”
Степанищев Михаил Борисович
Источник: Берлога инженера