Материалы о программируемых микрокалькуляторах Hewlett-Packard.
См. также фирменный материал «Обратная польская запись, основные сведения об обратной польской записи».
Пакет HPGCC для разработки программ под ПМК серии HP-48/49/50 на языке Си может также с небольшими изменениями настроек использоваться для программирования на C++.
Вначале необходимо скачать и установить пакет для разработки (http://sourceforge.net/projects/hpgcc/). В него входят компиляторы GNU, библиотеки, заголовочные файлы, исходники и собственно простая среда разработки на базе Programmer Notepad. Качаем здесь: Windows, Linux.
Предположим, вы установили пакет в каталог C:\HPGCC. В корне лежит файл "Default_Makefile". Сделаем его резервную копию, затем запустим нашу среду (Start -> HPGCC 2.0 for Windows -> HPGCC Programmer's Notepad) и откроем в ней Default_Makefile-файл. Делаем замену ".c" на ".cpp", а к опциям компилятора (строка 66, ARM_ELF_CFLAGS=...) добавляем "-fno-rtti -fno-exceptions" и сохраняем.
Создаем в среде новый файл, скопируем в него текст из примера "Hello, world!" (examples\hiworld.c). Сделаем небольшие изменения: обернем include главного заголовочного файла.
#ifdef __cplusplus
#define size_t long unsigned int
extern "C" {
#endif
#include <hpgcc49.h> // the standard HP lib
#ifdef __cplusplus
}
#endifРазумеется, есть способы поэлегантнее, например, внести эту обвязку в отдельный заголовочный файл вроде hpcpp.h, включая его в свои исходники. В рамках нашего обзора это не столь уж и важно.
Сохраняем файл под именем, например, hello2.cpp и жмем Ctrl+F7. Компиляция и сборка проходят успешно.
Теперь проверим "сиплюсплюснутость" :) Добавим перед основной функцией простенький класс.
class MyClass
{
public:
MyClass() {}
void SayHello() { printf("Hello, World!"); }
};Однако, попытка компоновки вызывает ошибку: не определены основные операторы работы с памятью в Си++: new и delete.
Это понятно, т.к. компоновать нужно с С++-библиотеками типа libsupc++.a или libstdc++.a. Первая из них доступна на том же сайте HPGCC, но пока не входит в пакет и является неофициальной.
Тем не менее, разработчики подсказывают, что если просто руками добавить соответствующие операторы, то выделение памяти будет работать и в существующем пакете.
Добавляем операторы перед нашим классом. Полный текст программы будет выглядеть так.
#define TINY_PRINTF
#ifdef __cplusplus
#define size_t long unsigned int
extern "C" {
#endif
#include <hpgcc49.h> // the standard HP lib
#ifdef __cplusplus
}
#endif
void * operator new(size_t size)
{
void *ptr = malloc(size);
return ptr;
}
void * operator new[](size_t size)
{
void *ptr = malloc(size);
return ptr;
}
void operator delete(void *p)
{
free(p);
}
class MyClass
{
public:
MyClass() {}
void SayHello() {printf("Hello, World!");}
};
int main(void)
{
clear_screen();
MyClass *hello = new MyClass();
hello->SayHello();
WAIT_CANCEL; // loop until ON pressed
delete hello;
}
После компиляции и компоновки в каталоге исходного файла должен появиться "hello2.hp" для выполнения на конечном устройстве.
Если физического устройства нет, можно воспользоваться мощным эмулятором ПМК серии HP-48/49/50 под названием Debug4x, детально показывающим даже внешний вид калькулятора. Его можно загрузить на сайте разработчиков (англ.яз.): http://www.debug4x.com. Эмулятор, кстати, написан на Delphi.
Для HP 49g+, HP 50g, TI-89 и CASIO ClassPad есть реализации ЯВУ Lua.
Доброе Утро !
Жаль, нет питона для HP-50g. Сколько можно было бы скриптов запустить... SysRPL - весьма мрачная "вещь в себе", ассемблер x86 или, тем более, PDP-шных машин, покажется веселее.
Для HP 49g+, HP 50g, TI-89 и CASIO ClassPad есть реализации ЯВУ Lua ( HPLua, Lua89 и CPLua, соответственно ) :
Lua (programming language)
http://ru.wikipedia.org/wiki/Lua
http://en.wikipedia.org/wiki/Lua_(programming_language)
HPLua для HP 49g+, HP 50g
http://www.voidware.com/hplua/index.php?title=HPLua
HPLua, Lua for HP Calculators HP49g+ & HP50g
Download Now!
hplua-1.0.1.zip (1.0 MB)
http://sourceforge.net/projects/hplua/
Lua89 для TI-89
http://lekernel.net/scrapbook/old/lua.html
http://lekernel.net/scrapbook/old/download/lua89-5.0.2-1.tar.bz2
http://www.ticalc.org/archives/files/fileinfo/358/35869.html
http://www.ticalc.org/pub/89/asm/programs/kernel/lua89.zip
CPLua для CASIO ClassPad
http://www.casiocalc.org/?showforum=19
Project: Cplua
http://www.casiocalc.org/?showtopic=2314
Download Cplua
http://www.casiocalc.org/?showtopic=2364
8-queen C-> Cplua
http://www.casiocalc.org/?showtopic=3217
Тест "8 ферзей" для HP 50g и CASIO ClassPad 300 PLUS :
http://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/articles.cgi?read=700
Calculator Benchmark
Posted by Xerxes on 12 Feb 2007, 7:35 a.m.
Calculator Speed Benchmark using the N-Queens Problem
Lua
-----
local a,r,s,t,x,y,n
for n=1,100 do
r=8
s=0
x=0
a={}
repeat
x=x+1
a[x]=r
repeat
s=s+1
y=x
while y>1 do
y=y-1
t=a[x]-a[y]
if t<0 then
t=-t
end
if (t==0) or (x-y==t) then
y=0
a[x]=a[x]-1
while a[x]==0 do
x=x-1
a[x]=a[x]-1
end
end
end
until y==1
until x==r
end
print(s)
- 2:20 ClassPad 330 Formula / List / Ver.3.3
- 2:08 ClassPad 300+ Formula / List / Ver.2.2
- 1:30 HP-50G UserRPL
- 1:29 TI-Nspire Formula / List / TI-84+ Keypad / Ver.3.0
- 1:13 TI-Nspire Formula / List / TI-84+ Keypad / Ver.1.2
- 1:10 TI-Nspire Formula / List / TI-84+ Keypad / Ver.1.3
- 8.3 TI-Nspire CAS Formula / List / Ver.1.2
- 7.5 TI-Nspire Formula / List / Ver.1.2
- 4.2 TI-Nspire CAS Formula / List / Ver.1.3
- 3.9 TI-Nspire Formula / List / Ver.1.3
- 2.3 TI-Nspire CAS Formula / List / Ver.3.0
- 2.1 TI-Nspire Formula / List / Ver.3.0
- 1.10 ClassPad 300+ Lua / CPLua 0.8 / Bytecode
- 0.915 HP-50G HP Pascal Studio 2.1 / Cross Compiler
- 0.243 HP-50G Lua / HPLua 0.4 / Bytecode
- 0.125 TI-Nspire CAS Lua / Bytecode
- 0.120 TI-Nspire Lua / Bytecode
- 0.0504 TI-Nspire CAS Lua / Bytecode / OS 3.1
- 0.0445 TI-Nspire CX CAS Lua / Bytecode / OS 3.1
- 0.000484 HP-50G C / RegVars / HPGCC 3.0 / Cross Compiler
- 0.000404 HP-50G Assembly / ARM9 @ 75 MHz
8-queen C-> Cplua
http://www.casiocalc.org/?showtopic=3217
ClassPad 300 PLUS ускоряется в 116 раз; HP 50g - в 370 раз.
_________________
Dima Masalov
FIDO-NET - 2:461/640.9 AKA 2:461/43.9
E-MAIL - mds at ire dot kharkov dot ua
В дискуссии всплыла тема питона, как скриптового языка и среды исполнения для ПМК. Питона, насколько я знаю, для HP нет. Но есть, например, паскаль.
Ссылки:
http://djludo.online.fr/home/pages/hp_pascal.htm
http://hppascal.free.fr/pages/home.htm
Матрица показывает оптимальные с точки зрения производителя (Hewllet Packard, HP) модели калькуляторов для разных классов средней школы и курсов ВУЗа.
Пояснения.
Слева идут номера моделей калькуляторов HP, сверху - классы средней школы и курсы ВУЗа (Франция).
Collége соответствует советским 4-7 классам (не в курсе, какие они по номерам в новой системе)
Lycée - 8, 9 и 10 выпускной классы (советская 10-летка)
BAC+1/+2 - первый/второй курсы ВУЗа (у нас называлось ОТФ - общетехнический факультет)
BAC+3/+4 - 3 и 4 курсы (бакалавриат)
BAC+5/+6 - 5 и 6 курсы (магистратура)
Темно-синим цветом в середине выделена область программируемых калькуляторов (включая модели с обратной польской нотацией RPN). Голубым наверху - инженерные алгебраические числогрызы. Внизу циановым отмечены квадратики моделей для финансовой математики и статистики.

Обнаружил весьма интересный, на мой взгляд, обзор истории развития ПМК от HP - пионеров этого направления. Авторский текст привожу без правок, без закругления полемических углов. В конце заметки публикую последовавшую по итогам нашу небольшую дискуссию.
В очередной раз на очередном форуме прочитал: "Не все так плохо было у нас. Если и отставали от TI, HP и Casio, то года на два-три (и то, имхо это не с разработкой связано, а с выпуском, привязаным к пятилеткам)." Несколько лет мне было лень, но сейчас молчать уже не могу. Расскажу про программируемые HP - мне это ближе.
1974.
Итак, в 1974 году выходит HP-65 - первый в мире программируемый калькулятор.
Конечно же, обратная польская запись. Сто (100) шагов программы, девять регистров. Правда, практически любое нажатие клавиши, даже каждого из трех шифтов, занимает отдельный шаг - шаги у него шестибитные, в один шаг много не всунешь. Причем таблицу кодов учить не нужно - коды совпадают с положением на клавиатуре. Внутри, конечно, они преобразуются в шестибитные шаги (а склеивающиеся коды типа чтения-записи в регистр - по два в один шаг), но пользователю это не видно и не особо интересно.
Зато совершенно нет номеров шагов - можно ставить метки и потом делать переходы на них. Даже так: пять буквенных меток определяют подпрограммы, которые можно вызывать вручную нажатием одной клавиши или вызывать из других подпрограмм (правда, вложенные вызовы не поддерживаются). А десять цифровых меток - только для переходов.
Благодаря наличию меток можно удалять команды из середины программы, не набивая весь остаток заново (а замены нет вообще, только вставка). Правда, эта функциональность очень странная и смешная: для удаления надо сначала нажать один из шифтов, он немедленно вставляется в код, и, если программа упирается в конец памяти, последняя команда теряется. Зато, так как по шагам можно ходить только вперед, а назад нельзя, иногда легче удалить несколько команд и потом вставить заново, чем идти с самого начала или от ближайшей буквенной метки :)
Проверка условий тоже сделана довольно забавно - если условие не выполняется, то управление перескакивает на два шага вперед. А если выполняется, то идет на эти самые два шага, где может быть, например, переход или короткое действие.
А, да, чуть не забыл. МАГНИТНЫЕ КАРТЫ! Именно с них вроде как грузили программы расчета коррекции курса при стыковке "Союза-19" и "Аполлона" (у нас подобное безумие запланировали только как резерв в 1988 году на "Союзе ТМ-7" и МК-52, да и то, кажется, не пригодилось). Для простых людей, естественно, они тоже были полезны - сначала на них сохраняли свои программы, потом ими менялись, а потом покупали готовые пакеты, которые выглядели как немаленьких размеров книжка с маленькой коробочкой.
Стоила вся эта радость $795, хотя по сравнению с другими программируемыми устройствами того времени это было очень по-божески.
Калькулятор стал настолько популярным, что уже через несколько месяцев после выпуска энтузиасты начали выпускать и распостранять по почте ежемесячный самиздатовский журнал. Первый номер, правда, занимал всего две страницы, но со временем объем дошел до полусотни-сотни страниц.
1975.
Через год после HP-65 был объявлен HP-55. Хотя выглядел он довольно похоже, внутри его зачем-то изрядно поменяли. Всего 49 шагов программы, зато зачем-то 20 регистров. Правда, преобразование единиц и статистические функции, но разве в них счастье?
Никаких меток больше нет. Все как мы привыкли, с номерами шагов и без вставок-удалений. Наконец-то сделали листание программы назад. Шаги наконец-то восьмибитные, поэтому команда перехода влезает в один шаг. Условий вместо четырех осталось только два, но теперь они совмещены с переходами и тоже влезают в один шаг. Зато чтение-запись в регистры занимает два шага вместо одного. Никаких магнитных карт нет, зато зачем-то есть таймер.
Но все же это $395 - в два раза дешевле. В самиздатовском журнале обсуждают HP-55 и пишут для него программы, хотя HP-65 намного популярнее. Отдельные личности мечтают о SUPER 65 с сохраняющейся памятью, тысячей шагов, сотней регистров, двумя шифтами с подвыподвертом (я серьезно), защитой от копирования, вводом-выводом звука и термопринтером.
А пока они мечтают, выходит HP-25, поменьше и попроще.
Шагов все так же 49, регистров осталось 8, зато любая функция с любыми шифтами и переход влезают в одну команду. Условия вернули как в HP-65 - с перескоком на шаг вперед. И условий теперь целых восемь - сравнение двух чисел и числа с нулем. Да, кстати, десятичная точка перестала занимать отдельный разряд.
Но так как он стоит $195 - спасибо новой платформе - и переносится одной рукой, спрос огромный.
А в самиздате тем временем забывают про HP-55, бодро программируют для двух остальных, фотографируют потроха HP-65 и собирают из рассыпухи принтер. И, понимая, что ждать SUPER 65 с энергонезависимой памятью пока бессмысленно, начинают мечтать о чем-нибудь типа HP-75, изменения в котором будут чисто косметическими - всего один лист A4 через один интервал. От безысходности даже появляется раздел по кстати вышедшему TI SR-52 аж с целыми 224 шагами и 20 регистрами.
1976.
Безысходность в самиздате нарастает. В майском номере любители HP-65 расправляются с любителями SR-52 и выгоняют их в их собственный самиздат. Ну какой толк, говорят, от удвоенной памяти, если решение квадратного уравнения занимает 110 шагов вместо 45? А разложение на множители - 162 вместо 90? И вообще у них корпус неудобный и кнопки мелкие.
И тут появляется лесник во всем белом. Во-вторых, в HP-25 добавляют, да-да, не шифты с подвыподвертом, а энергонезависимую память, называют эту штуку HP-25C и начинают продавать всего за $200. А во-первых...
224 шага! (естественно, одношаговые команды) 26 регистров! (правда, десять из них доступны с трудом) HP-67!
О командах в несколько шагов, загубивших те же 224 шага в SR-52, уже никто не вспоминает. При редактировании программы можно двигаться налево, направо и в другие стороны. Меток, повешенных на клавиши, уже не 5, а 10. Конечно же, никаких номеров шагов. Процедуры можно вызывать до трех уровней вложенности. А еще можно читать и писать на карты не только программы, но и куски программ или данные из регистров. И даже делать все это программно.
А еще косвенная адресация.
И еще настольный вариант с принтером HP-97.
Самиздат в восторге, фотографирует потроха, пишет "жизнь" (первая версия - 50 минут на поколение на доске 10x10), блэкджек и стартрек. А другие занимаются "еггогологией", она даже смешнее, чем у нас: они засовывают в HP-67 карты от HP-65 или вообще выключают питание на середине записи или включают на уже полупрочитанной карте. После того как искомый байт пойман, его можно записать на отдельную карту и делиться с друзьями :)
Да, кстати, стоил HP-67 $450, а HP-97 - $750.
1977.
Выходит замена для HP-25 - HP-29C с 98 шагами программы и 30 регистрами (14 опять доступны с трудом). Из HP-67 переползли метки (правда, только цифровые) с переходами, три уровня подпрограмм и косвенная адресация, а из HP-25C энергонезависимая память (кроме этих злосчастных 14 регистров).
Стоит $195, и опять есть HP-19C с принтером за $345.
И вот тут-то и появляется наш Б3-21, первоначально по 350 рублей. На первый взгляд он находится где-то между HP-55 и HP-25. Но:
- краткого исследования картинок достаточно, чтобы осознать пропасть в наборе функций, нет даже арктангенса;
- регистров только два (вместо традиционных четырех) стековых, семь нормальных и шесть кривых;
- шагов программы вроде бы больше, но из-за маленького стека приходится постоянно пользоваться регистрами, что раздувает программу.
Например, неполная гамма-функция занимает больше шагов, чем даже на HP-55, у которого двухшаговая работа с регистрами. А на HP-25 не только одношаговое чтение-запись регистров, но есть еще и одношаговая арифметика в них, что позволяет делать в его 49 шагах гораздо более интересные вещи.
И, куда ни ткнись, всюду отвратительные неудобства, даже адрес перехода приходится вводить по табличке. О глюках я лучше промолчу. Если кому-нибудь еще интересно, могу рассказать, что творилось в цивилизованном мире в 1978-1979 годах, пока у нас готовили Б3-34...
Оригинал заметки в ЖЖ автора tolstopuz
arbinada:
Хороший обзор.
Насчет 2-3 года - не слышал, а 5-6 лет - реальная цифра, собсно, вы к ней тоже приходите.
В условиях бурного развития рынка, кстати, задержка лет на 5 экономит массу усилий: не нужно воспроизводить то, что умерло за эти годы.
Сейчас, правда, говорить о задержке вообще не приходится в связи с отсутствием отрасли, как таковой.
tolstopuz:
в 1979 у них был hp-41c (с алфавитным жк дисплеем), а у нас б3-34 (хуже, чем hp-29c).
в 1982 у них hp-75c (бейсик), а у нас мк-54 (то есть вообще ничего нового).
а дальше у них в 1986 случилась маленькая революция - переход на rpl и выпуск легендарных 28 и 48. у нас же после выпуска мк-52 (потрясающий уродец, опять же на уровне моделей hp 1977 года) и мк-85 (аналог hp-75c) произошло не отставание, а тупик.
то есть общий итог получается такой - до 1986 года сделали три аналога далеко не лучших моделей 1978-79 года и одну с бейсиком. ничего даже близко похожего на модели 70-х(!) годов hp-41 и даже hp-67 сделано не было. про rpl я даже не говорю - это для нас просто ракетная техника.
arbinada:
RPL...
А оно нужно для калькуляторов? Там уже вполне компутерные задачки вырисовываются.
Действительно похоже на реактивный ранец за плечами, только что с ним делать в городе-то? :)) Лучше на велике или на авто.
По мне так и бейсик нафиг сдался (хотя опять же разница между hp-75с и мк-85 - 4 года). Бейсик - он для Excel хорош.
Алфавтный индикатор на hp-41c, если не ошибаюсь, только для вывода. С символьной информацией калькулятор не работал. То есть, да, удобнее читать сообщение "Ошибка" вместо ЕГГ0Г, но это не качественная разница.
Магнитные карты - да, качественная. Она была изначально, и, как мне кажется, не воспроизводилась по причине контроля за копированием информации в СССР (вспомните учет копий документов на предприятиях, а тут массовое копирование программ)
tolstopuz:
любая методика программирования имеет некий запас расширяемости, за которым с ней становится работать очень неудобно. если вы заметили, абсолютную адресацию у hp имели только 49-шаговые калькуляторы. при большем размере программы правка, меняющая число шагов, становится мучительной, я сам отлично помню это на мк-54. система меток (буквенные для подпрограмм и цифровые для переходов) хорошо работает для нескольких сотен шагов, но с тысячами не хватает и ее. точно так же начинают мешать другие детские ограничения типа уровня вложенности подпрограмм.
еще более серьезная проблема возникает с библиотеками подпрограмм. во-первых, они наверняка либо находятся на одних и тех же шагах программы, либо используют одни и те же метки. а что еще хуже - одни и те же регистры. то есть подключить к своей программе две разные чужие подпрограммы невозможно - надо переписывать одну из них.
rpl как раз и был ответом на эти вопросы. никаких шагов, никаких однобуквенных меток, никаких нумерованных регистров - только именованные переменные и ограниченный только объемом памяти стек. а переменные (и стековые регистры) могут хранить не только числа, но и строки, массивы и программы.
идея оказалась настолько удачной, что бейсик действительно нафиг сдался.
(кстати, главный недостаток мк-152 именно в том, что количество шагов просто зашкаливает для модели программирования, оставшейся от мк-52. представьте себе, как будет выглядеть использование чужой подпрограммы из 1000 шагов, если один из регистров занят другой подпрограммой из 500 шагов, да и номера шагов перекрываются.)
hp-41c имел на клавишах полный английский алфавит, один специальный регистр на 24 символа и возможность хранить по 6 символов в числовых регистрах. но главное не это, а объем памяти - 200 шагов и 63 регистра (которые можно отдать и под шаги программы, что увеличит их до 441), а если докупить модуль расширения, то уже 319 регистров и 1000 шагов (2231, если отдать все регистры под программу). это принципиально новая вычислительная мощность для калькулятора. вон, например, покер:
http://www.hpmuseum.org/software/41/41poker.htm
arbinada:
Со всем этим трудно не согласиться.
Просто я стою на позиции, что "калькулятору - калькуляторово", поэтому заниматься интеграцией подпрограмм да еще от разных авторов - это какое-то неправильное занятие для рядового пользователя, пусть даже и продвинутого. Авторам прикладных пакетов - да, но они спокойно разберутся в коллизиях при сборке (этакая ручная линковка, которую, несомненно, можно заменить более интеллектуальной автоматической процедурой на полноценном компьютере).
А рядовой просто возьмет машинку в руки, введет/загрузит готовую программу и сделает с ее помощью свое дело.
Судя по фронтальном виду hp-41c с символьной информацией он все-таки не работал (в смысле функций обработки, из программы "Покер", где 5 регистров используются для отрисовки 5 вариантов скрытых карт, это тоже видно), а ввод там был гораздо более убогим, чем, нынешние манипуляции SMS на мобилах. То есть, все-таки, эта фишка использовалась для удобства вывод информации пользователю.
tolstopuz:
ну да. загрузит готовую программу для решения системы дифуров, а потом загрузит готовую подпрограмму для специальной функции, используемой в его дифуре. и на rpl у него не будет никаких проблем.
без возможности оперировать со сложными данными как с единым целым работа с матрицами превращается в мучительное перетасовывание регистров. а на hp-48 рядовой пользователь просто возьмет машинку в руки, загрузит готовую программу и получит библиотеку линейной алгебры, где операции над матрицами делаются так же просто, как над числами, и массив собственных значений считается одной функцией, причем одной и той же для любого размера матрицы, лишь бы хватило памяти и терпения.
разве не для этого существуют калькуляторы?
символьные операции в hp-41c, конечно, убогие, но почему убог ввод при наличии полного алфавита, никак не пойму.
|
Электронный теодолит и ноутбук. |
Вам не приходилось записывать данные из COM порта в файл? А в полевых условиях (ночью, на улице)? Современные геодезические приборы, GPS приемники и др. имеют возможность записи результатов измерений во внутреннюю память и в порт RS-232, могут проводить сложные вычисления. Но если пользователю потребуется провести заранее не предусмотренные вычисления, сохранить данные в своем формате и т.п., то потребуется внешний компьютер. Часто в полевых условиях используют ноутбуки, но у них большая масса, а заряда батареи может не хватить на рабочую смену. Можно использовать внешние аккумуляторы (растет масса!). Работа геодезиста в принципе связана с постоянным переходом между объектами измерения, поэтому крайне важно уменьшить массу и размеры накопителя данных. Любой отказ накопителя приводит к потере рабочего времени, поэтому сбоев быть не должно. Пользователи не разбираются в компьютерах, поэтому интерфейс программы и порядок работы должны быть максимально простыми. Из всего этого следует, что нужен маленький и легкий накопитель данных с возможностью вычислений, записи данных в файл и со связью по RS-232. Этим требованиям соответствуют графические калькуляторы серии HP-48 и HP-49. Их можно купить в России. 3 батареи ААА в зависимости от режима (COM-порт, звук) работают от месяца до года (и больше). Заметим, что сейчас полно разных карманных ПК, но многие ли умеют программировать на них? Встроенный язык UserRPL HP48/49 довольно прост, можно скачать пример рабочей программы. Можно программировать и на SysRPL, на ассемблере, но это гораздо труднее. Единственный недостаток применения такого калькулятора - требуется сравнительно высокая квалификация того, кто будет работать с таким накопителем :(. Но вообще все, с кем я работал, смогли его освоить. Кроме того, в новейших (и дорогих) геодезических приборах уже встроен аналогичный накопитель. |
![]() |
HP-48GX Память 128 (до 1,128) кБ |
![]() |
HP-49G HP-49 - более новая модель. |
![]() |
Необходимы начальные знания основ HP-48/HP-49, чтобы повторить этот пример. Программу на языке RPL (LISP) можно ввести прямо с клавиатуры HP и сохранить в файл для дальнейшего быстрого вызова. |
![]() |
Программа инициализации COM-порта. |
![]() |
Программа отправляет строку символов + CR + LF в COM-порт |
![]() |
Программа получает строку символов из COM-порта и показывает ее на экране. Размер буфера 255 символов. |
![]() |
Если соединить ПК и калькулятор проводом (самодельным или фирменным), то можно передавать данные. |
![]() |
Результаты приема данных калькулятором размещены в т.н. стеке, и могут быть сохранены в файл. |
![]() |
Сохраним строку в файл. |
![]() |
В HP-48/HP-49 есть встроенный файловый менеджер. |
![]() |
В файловом менеджере можно просмотреть полученный файл. |
![]() |
Просмотр. |
![]() |
Для обмена данными с ПК нужно запустить в калькуляторе Server и использовать программа для передачи данных в ПК. |
![]() |
Программа для передачи данных в ПК (входит в набор для связи с компьютером). Ее можно скачать на www.hp.com. |
Приведу пример практического использования накопителя. Из прибора при измерении получаем текстовые данные в известном формате:
81..00+00003596 82..00-00007783 83..00+00001324 32..00+00008574
812.00-00000027 822.00-00000013 832.00+00000001 32..00+00008753
21.103+16181600 22.103+08178800 32..00+00008766 33..00+00001408
21.103+16181600 81..00+00002736 82..00-00008328 32..00+00008766
11....+00000000 21.103+16181500 22.103+08178900 31..00+00008856
Наша задача перебрать их и записать в файл в памяти накопителя:
%%HP: T(1)A(R)F(.);
"File started at 22.28 13.032001
200 31388 16793 -114 35598 M8 22.29 XYZgp
200 -1568 -2034 -315 2568 M9 22.30 XYZgp
200 -1566 -2032 -314 2566 22.30 XYZgp
200 -38171 -7653 -105 38931 M10 22.31 XYZgp
200 -33912 -20809 50 39787 M11 22.32 XYZgp
200 -33155 -18373 -1651 37905 3 22.34 XYZgp
200 -20812 -11158 -1675 23614 3 22.35 XYZgp
200 -1835 287 -1640 1858 3 22.36 XYZgp
"
Получение, разбор данных и запись в файл делает моя программа на RPL.
Пример рабочей программы на языке RPL.
В Интернете много софта под HP-48/HP-49. Есть эмулятор, среда разработки на SysRPL, множество исходников. Исходники можно взять на сайте www.hpcalc.org. Ключевые слова для поиска в Интернет - HP-48, HP-49, RPL, SysRPL, EMU48, EMU49, DEBUG2, Visual RPL, HORN.
Источник (автор не указан): http://emb.hut.ru/hp48/hp48-49.html
Если зайти в CHARS, то можно заметить, что символы можно редактировать. Появилась идея поместить на первых 24 пустых ячейках русские буквы. Нарисовал - работает. В инструкции сказано, что будет работать до первого ресета. Проверил - буквы стираются. Однако, выяснилось, что на пустых ячейках буквы можно нарисовать, только пользоваться ими будет нельзя - эти места зарезервированы (см. AUG приложения). Появилась идея написать русские буквы вместо букв с точками сверху и умляутами разными (я лично ими не пользуюсь и не собирался), начиная, например, с 192 номера. Теперь русские буквы можно писать где угодно, даже шорткаты есть. Как сохранять изменения (режим RPN):
FONT-> 'My.fnt' STO
И теперь записать строчку в STARTUP:
<< My.fnt ->FONT >> 'STARTUP' STO
Наши буковки сохранятся даже после рестарта! А My.fnt можно скопировать на SD-карточку. Сделал в итоге и прописные, и строчные буквы. Вместил весь алфавит, чтобы рядом все буквы были. Мой шрифт приложен (только сотрите расширение после скачивания, иначе не прикрепляется).
P.S. Обновил шрифт. Переставил буквы ж и ц, чтобы остались значки умножения и деления. Исчезла буква х, но ее всегда можно с клавиатуры написать. Изменил начертания букв с, э, ы и ю. Последние две - чтобы было межбуквенное расстояние в один пиксель. Раньше они сливались с последующей буквой.

Для стыковки HP 50g через последовательный интерфейс RS-232 необходим дополнительный кабель (прежняя модель HP 48 комплектовалась им для сопряжения с ПК, а HP 50 использует уже USB).
Приобрести кабель и нуль-модемный переходник можно на веб-сайте сообщества пользователей калькуляторов HP. Стоимость кабеля - 20 долларов, переходник можно взять в придачу бесплатно, доставка во Францию из США обошлась менее чем в 2 евро.
Как я и предполагал, подобный кабель нужен весьма ограниченному числу пользователей, посему он изготавливается небольшими партиями и может отсутствовать на складе. Например, во время заказа в начале марта я был уведомлен, что шнур будет доступен примерно к началу апреля. То есть, существует некоторая вероятность, что придется подождать недели 2-3. В реальности задержка составила 2 недели, посылка шла 4 дня.
Посылка умещается в небольшом пластиковом конвертике

Кабель и переходник

Тема использования языка Си и Си++ для разработки программ к ПМК уже затрагивалась в моей обзорной статье с примерами.
По ссылке - подробная и полная примеров статья (англ.яз.) об использовании компилятора HPGCC для создания программ к ПМК HP 50g. Я приведу только основные моменты, важные при выборе средства разработки.
В статье освещены две основные темы:
HPGCC является кросс-компилятором доступным на платформах x86 Linux, Mac, Windows; он способен создавать исполняемые файлы для процессора ARM HP 50g. HPGCC основан на семействе компиляторов GCC (GNU Compiler Collection).
Официально HPGCC 2.0SP2 поддерживает только C, однако Jean-Yves Avenard создал Mac и Linux версии, которые также поддерживают Си++. С небольшим усилием можно было бы добавить и другие языки, например Fortran. Представьте себе компиляцию существующих Fortran-программ для вашего 50g. Они, вероятно, будут работать быстрее, чем на компьютере, на котором были изначально написаны!
В отличие от UserRPL, SysRPL, и ассемблера Saturn, исполняемые 50g ARM файлы запускаются вне среды UserRPL 50g. Это имеет некоторые преимущества, например, скорость и доступ к памяти. HPGCC создает непрерывный блок памяти неиспользуемых портов "0" и "1" для приложений, а также есть добавляет 90 KB оперативной памяти неиспользованные операционной системой 50g. Это в общей сложности дает до 459 KB (если порты 0 и 1 пусты). Хотя исполняемые файлы 50g ARM запускаются за пределами UserRPL, всё еще можно взаимодействовать со стеком.
Вы используете компилятор на свой страх и риск. Хотя никто не сообщал о поломке их 50g при работе с HPGCC, думаю, что всё возможно. Я полагаю, худшее, что может случиться, это поломка кнопки аппаратного сброса из-за большого числа перезапусков. Должен же был я вас хоть чем-то напугать. Искажения линий в области пересканирования ЖКИ появлялись после аппаратного сброса, но после примерно 10 секунд они исчезали. Я не был этим напуган, потому что повторял и видел результат.
Материалы по калькулятору HP-50g
11 мая 2012 года, в самый разгар антипутинских выступлений, ко мне в Москву прибыл принтер и новый калькулятор, купленный взамен сломавшемуся. Как и ожидалось, блока питания в комплекте не было — ни к принтеру, ни к калькулятору. Батарейки были и там, и там. Калькулятор пришёл в другом исполнении, с более качественным чехлом, «горизонтальным» Quick Start Guide и в чёрной упаковке.
Соединение с принтером очень слабое и ненадёжное. Сам принтер выполнил self-test нормально, но по ИК долгое время не удавалось добиться надёжной связи. Необходимость держать оба устройство выровненными раздражает, т.к. скорость обмена информацией весьма далека от желаемой. На мой взгляд, кабель или радиоволны лучше.
Чтобы печатать с HP 50g, надо приставить ИК-окошечки калькулятора и принтера вплотную. Потом сбросить флаги 34 ("Print via IR") и 38 ("Add linefeeds"). Дальше можно печатать экран одновременным нажатием ON и стрелки вверх. Или через меню APPS → "2. I/O functions…", пункты "3. Print display" и "4. Print…" .
HP 50g позволяет корректно работать с размерностями физических величин. К сожалению, во-первых акцент сделан на преобразования из метрической системы мер в разные варианты британской — проблема, актуальная лишь для западников и потребителей западного. Исторически же важные древнерусские величины и национальные, принятые в соседствующих с Россией странах с древней культурой (Китай, Япония) практически игнорируются.
Во-вторых, обозначения физических величин латиницей не соответствуют отечественным научным традициям и легко приводят к конфузу.
В-третьих, калькулятор не умеет упрощать размерность автоматически. Умножив 1_A на 1_Ω получим не 1 В, а 1_(A*Ω). Попытка применить UBASE ни к чему хорошему не приводит. Перейти в другую размерность можно с помощью CONVERT, но для этого вам надо её знать или придётся гадать.
Надеюсь, что в отечественных калькуляторах эти проблемы будут решены. Пока же публикую перевод физических величин из вида, закодированного в HP 50g, в общепринятый.
| m (meter) | м (метр) | 1_m = 1 м |
| cm (centimeter) | см (сантиметр) | 1_cm = 0,01 м |
| mm (millimeter) | мм (миллиметр) | 1_mm = 0,001 м |
| yd (yard) | ярд | 1_yd = 0,9144 м |
| ft (feet) | фут | 1_ft = 0,3048 м |
| in (inch) | дюйм | 1_in = 0,0254 м |
| Mpc (Mega parsec) | Мпк (мегапарсек) | 1_Mpc = 3,08567818585E22 м |
| pc (parsec) | пк (парсек) | 1_pc = 3,08567818585E16 м |
| lyr (light-year) | св.г. (световой год) | 1_lyr = 9,46052840488E15 м |
| au (astronomical unit) | а.е. (астрономическая единица) | 1_au = 149597900000 м |
| km (kilometer) | км (километр) | 1_km = 1000 м |
| mi (international mile) | миля (сухопутная, международная) | 1_mi = 1609,344 м |
| nmi (nautical mile) | морская миля | 1_nmi = 1852 м |
| miUS (US statute mile) | миля (уставная, статутная) | 1_miUS = 1609,34721869 м |
| chain (chain) | чейн (геодезический) | 1_chain = 20,1168402337 м |
| rd (rod) | род | 1_rd = 5,02921005842 м |
| fath (fathom) | фатом (морская сажень) | 1_fath = 1,82880365761 м |
| ftUS (survey foot) | фут (геодезический) | 1_ftUS = 0,304800609601 м |
| mil (mil) | мил | 1_mil = 0,0000254 м |
| μ (micron) | мкм (микрометр, микрон) | 1_μ = 0,000001 м |
| A° (Angstrom) | A° (ангстрем) | 1_A° = 0,0000000001 м |
| fermi (fermi) | ферми | 1_fermi = 1E-15 м |
| m² (square meter) | м² (квадратный метр) | 1_m² = 1 м² |
| cm² (square centimeter) | см² (квадратный сантиметр) | 1_cm² = 0,0001 м² |
| b (barn) | барн | 1_b = 1E-28 м² |
| yd² (square yard) | кв. ярд | 1_yd² = 0,83612736 м² |
| ft² (square feet) | кв. фут | 1_ft² = 0,09290304 м² |
| in² (square inch) | кв. дюйм | 1_in² = 0,00064516 м² |
| km² (square kilometer) | км² (квадратный километр) | 1_km² = 1000000 м² |
| ha (hectare) | га (гектар) | 1_ha = 10000 м² |
| a (are) | ар | 1_a = 100 м² |
| mi² (square mile) | кв. миля (сухопутная, международная) | 1_mi² = 2589988,11034 м² |
| miUS² (square statute mile) | кв. миля (уставная, статутная) | 1_miUS² = 2589998,47032 м² |
| acre (acre) | акр | 1_acre = 4046,87260987 м² |
| m³ (cubic meter) | м³ (кубометр) | 1_m³ = 1 м³ |
| st (stere) | 1_st = 1 м³ | |
| cm³ (cubic centimeter) | см³ (кубический сантиметр) | 1_cm³ = 0,000001 м³ |
| yd³ (cubic yard) | 1_yd³ = 0,764554857984 м³ | |
| ft³ (cubic feet) | 1_ft³ = 0,028316846592 м³ | |
| in³ (cubic inch) | 1_in³ = 0,000016387064 м³ | |
| l (liter) | л (литр) | 1_l = 0,001 м³ |
| galUK (UK gallon) | 1_galUK = 0,004546092 м³ | |
| galC (Canadian gallon) | 1_galC = 0,00454609 м³ | |
| gal (US gallon) | 1_gal = 0,003785411784 м³ | |
| qt (quart) | 1_qt = 0,000946352946 м³ | |
| pt (pint) | 1_pt = 0,000473176473 м³ | |
| ml (mililiter) | мл (миллилитр) | 1_ml = 0,000001 м³ |
| cu (US cup) | 1_cu = 2,365882365E-4 м³ | |
| ozfl (US fluid ounce) | 1_ozfl = 2,95735295625E-5 м³ | |
| ozUK (UK fluid ounce) | 1_ozUK = 0,000028413075 м³ | |
| tbsp (tablespoon) | 1_tbsp = 1,47867647813E-5 м³ | |
| tsp (teaspoon) | 1_tsp = 4,92892159375E-6 м³ | |
| bbl (barrel) | 1_bbl = 0,158987294928 м³ | |
| bu (bushel) | 1_bu = 0,03523907 м³ | |
| pk (peck) | 1_pk = 0,0088097675 м³ | |
| fbm (board foot) | 1_fbm = 0,002359737216 м³ |
| yr (year) | г. (год) | 1_yr = 31556925,9747 с |
| d (day) | день | 1_d = 86400 с |
| h (hour) | ч. (час) | 1_h = 3600 с |
| min (minute) | минута | 1_min = 60 с |
| s (second) | с (секунда) | 1_s = 1 с |
| Hz (hertz) | Гц (Герц) | 1_Hz = 1 с⁻¹ |
| m/s (meter per second) | м/с (метр в секунду) | 1_m/s = 1 м/с |
| cm/s (centimeter per second) | см/с (сантиметр в секунду) | 1_cm/s = 0,01 м/с |
| ft/s (feet per second) | 1_ft/s = 0,3048 м/с | |
| kph (kilometer per hour) | км/ч (километр в час) | 1_kph = 0,2(7) м/с |
| mph (mile per hour) | 1_mph = 0,44704 м/с | |
| knot (nautical miles per hour) | 1_knot = 0,51(4) м/с | |
| c (speed of light) | 1_c = 299792458 м/с | |
| ga (acceleration of gravity) | 1_ga = 9,80665 м/с² |
| kg (kilogram) | кг (килограмм) | 1_kg = 1 кг |
| g (gram) | г (грамм) | 1_g = 0,001 кг |
| lb (avoirdupois pound) | 1_lb = 0,45359237 кг | |
| oz (ounce) | 1_oz = 0,028349523125 кг | |
| slug (slug) | 1_slug = 14,5939029372 кг | |
| lbt (Troy pound) | 1_lbt = 0,3732417216 кг | |
| ton (short ton) | 1_ton = 907,18474 кг | |
| tonUK (long ton) | 1_tonUK = 1016,0469088 кг | |
| t (metric ton) | 1_t = 1000 кг | |
| ozt (Troy ounce) | 1_ozt = 0,0311034768 кг | |
| ct (carat) | 1_ct = 0,0002 кг | |
| grain (grain) | 1_grain = 0,00006479891 кг | |
| u (unified atomic mass) | 1_u = 1,6605402E-27 кг | |
| mol (mole) | моль | 1_mol = 1 моль |
| N (newton) | Н (Ньютон) | 1_N = 1 Н = 1 кг*м/с² |
| dyn (dyne) | 1_dyn = 0,00001 Н | |
| gf (gram-force) | 1_gf = 0,00980665 Н | |
| kip (kilopound-force) | 1_kip = 4448,22161526 Н | |
| lbf (pound-force) | 1_lbf = 4,44822161526 Н | |
| pdl (poundal) | 1_pdl = 0,138254954376 Н |
| J (joule) | Дж (Джоуль) | 1_J = 1 Дж = 1 кг*(м/с)² |
| erg (erg) | эрг | 1_erg = 0,0000001 Дж |
| kcal (kilocalorie) | 1_kcal = 4186,8 Дж | |
| cal (calorie) | 1_cal = 4,1868 Дж | |
| Btu (International table btu) | 1_Btu = 1055,05585262 Дж | |
| ftxlbf (foot-pound) | 1_(ft*lbf) = 1,35581794833 Дж | |
| therm (EEC therm) | 1_therm = 105506000 Дж | |
| MeV (mega electron-volt) | 1_MeV = 1,60217733E-13 Дж | |
| eV (electron-volt) | 1_eV = 1,60217733E-19 Дж |
| W (watt) | Вт (Ватт) | 1_W = 1 Вт = 1 кг*м²/с³ |
| hp (horse power) | 1_hp = 745,699871582 Вт |
| Pa (pascal) | Па (Паскаль) | 1_Pa = 1 Па = 1 кг/(м*с²) |
| atm (atmosphere) | атм. (атмосфера) | 1_atm = 101325 Па |
| bar (bar) | 1_bar = 100000 Па | |
| psi (pounds per square inch) | 1_psi = 6894,75729317 Па | |
| torr (torr) | 1_torr = 133,322368421 Па | |
| mmHg (millimeters of mercury) | 1_mmHg = 133,322368421 Па | |
| inHg (inches of mercury) | 1_inHg = 3386,38815789 Па | |
| inH2O (inches of water) | 1_inH2O = 248,84 Па |
| °C (degree Celsius) | °C (градус по Цельсию) | 0_°C = 273,15 K 100_°C = 373,15 K |
| °F (degree Fahrenheit) | °F (градус по Фаренгейту) | 0_°F = 255,37(2) K 90_°F = 305,37(2) K |
| K (Kelvin) | К (Кельвин) | 0_K = 0 K |
| °R (degree Rankine) | 0_°R = 0 K 90_°R = 50 K |
| V (volt) | В (вольт) | 1_V = 1 В |
| A (ampere) | А (ампер) | 1_A = 1 А |
| C (coulomb) | Кл (кулон) | 1_C = 1 Кл = 1 А*с |
| Ω (ohm) | ом | 1_Ω = 1 Ом |
| F (farad) | фарада | 1_F = 1 Ф |
| W (watt) | Вт (ватт) | 1_W = 1 Вт |
| Fdy (faraday) | Фарадей | 1_Fdy = 1 Фарадей = 96487 Кл |
| H (henry) | генри | 1_H = 1 Гн |
| mho (mho) | мо | 1_mho = 1 мо = 1 Ом⁻¹ |
| S (siemens) | См (сименс) | 1_S = 1 См = 1 Ом⁻¹ |
| T (tesla) | тесла | 1_T = 1 Тл |
| Wb (weber) | вебер | 1_Wb = 1 Вб |
| ° (sexagesimal degree) | 1_° = 1,74532925199E-2 радиан | |
| r (radian) | радиан | 1_r = 1 радиан |
| grad (grade) | 1_grad = 1,57079632679E-2 радиан | |
| arcmin (minute of arc) | 1_arcmin = 2,90888208666E-4 радиан | |
| arcs (second of arc) | 1_arcs = 4,8481368111E-6 радиан | |
| sr (steradian) | 1_sr = 1 стерадиан |
| fc (footcandle) | 1_fc = 10,7639104167 лк | |
| flam (footlambert) | 1_flam = 3,42625909964 кд/м² | |
| lx (lux) | лк (люкс) | 1_lx = 1 лк = 1 кд*стерадиан/м² |
| ph (phot) | 1_ph = 10000 лк | |
| sb (stilb) | 1_sb = 10000 кд/м² | |
| lm (lumen) | лм (люмен) | 1_lm = 1 лм = 1 лк*м² = 1 кд*стерадиан |
| cd (candela) | кд (кандела) | 1_cd = 1 кд |
| lam (lambert) | 1_lam = 3183,09886184 кд/м² |
| Gy (gray) | 1_Gy = 1 м²/с² | |
| rad (rad) | 1_rad = 0,01 м²/с² | |
| rem (rem) | 1_rem = 0,01 м²/с² | |
| Sv (sievert) | 1_Sv = 1 м²/с² | |
| Bq (becquerel) | 1_Bq = 1 с⁻¹ | |
| Ci (curie) | 1_Ci = 37000000000 с⁻¹ | |
| R (roentgen) | 1_R = 0,000258 А*с/кг |
| P (poise) | 1_P = 1 кг/(м*с) | |
| St (stokes) | 1_St = 0,0001 м²/с |
| gmol (gram-mole) | 1_gmol = 1 моль | |
| lbmol (pound-mole) | 1_lbmol = 453,59237 моль | |
| rpm (revolutions per minute) | об/мин (обороты в минуту) | 1_rpm = 1,(6)E-2 с⁻¹ |
| dB (decibels) | 1_dB = 1 |
| NA | Avogadro's number | 6.0221367E23_1/gmol |
| k | Boltzmann | 1.380658E-23_J/K |
| Vm | molar volume | 22.4141_l/gmol |
| R | universal gas | 8.31451_J/(gmol*K) |
| StdT | std temperature | 273.15_K |
| StdP | std pressure | 101.325_kPa |
| σ | Stefan-Boltzmann | 5.67051E-8_W/(m²*K^4) |
| c | speed of light | 299792458._m/s |
| ε0 | permittivity | 8.85418781761E-12_F/m |
| μ0 | permeability | 1.25663706144E-6_H/m |
| g | accel of gravity | 9.80665_m/s² |
| G | gravitation | 6,67259E-11_m³/(s²*kg) |
| h | Planck's | 6.6260755E-34_J*s |
| hbar | Dirac's | 1.05457266E-34_J*s |
| q | electronic charge | 1.60217733E-19_C |
| me | electron mass | 9.1093897E-31_kg |
| qme | q/me ratio | 175881962000._C/kg |
| mp | proton mass | 1.6726231E-27_kg |
| mpme | mp/me ratio | 1836.152701 |
| α | fine structure | .00729735308 |
| φ | mag flux quantum | 2.06783461E-15_Wb |
| F | Faraday | 96485.309_C/gmol |
| R∞ | Rydberg | 10973731.534_1/m |
| a0 | Bohr radius | .0529177249_nm |
| μB | Bohr magneton | 9.2740154E-24_J/T |
| μN | nuclear magneton | 5.0507866E-27_J/T |
| λ0 | photon wavelength | 1239.8425_nm |
| f0 | photon frequency | 2.4179883E14_Hz |
| λc | Compton wavelen | .00242631058_nm |
| rad | 1 radian | 1_r |
| twoπ | 2π radians | 6.28318530718_r |
| angl | ∠ in trig mode | 180_° |
| c3 | Wien's | .002897756_m*K |
| kq | k/q | .00008617386_J/(K*C) |
| ε0q | ε0/q | 55263469.6_F/(m*C) |
| qε0 | q*ε0 | 1.4185979E-30_F*C/m |
| εsi | dielectric const | 11.9 |
| εox | SiO2 dielec cons | 3.9 |
| I0 | ref intensity | .000000000001_W/m² |
При составлении таблиц использовался калькулятор HP 50g с прошивкой 2.09, руководство пользователя HP 50g (UG Edition 1) и словарь Мюллера 1998 года издания (тот, где правильно написано русское слово хэкер). Постинг находится в процессе написания.
Также см. странички Table of HP48/49 Units и Table of HP48/HP49 Constants наших зарубежных коллег.
Статья замышлялась, как единое место для сбора недокументированных особенностей HP 50g, установленных зарубежным сообществом любителей калькуляторов и опубликованных на HP Forum, comp.sys.hp48 или англоязычных сайтах. По мере её существования на замечательном сайте Сергея Тарасова она обновлялась русскоязычными советами любителей HP 50g.
Для того, кто читает первоисточники регулярно, здесь много знакомого. Более того, часть подобных особенностей линейки HP 48/49 постепенно документировалась фирмой HP. То есть традиционно «недокументированная» особенность HP 48 вполне может быть описана в UG по HP 49, процедура написания которого отличалась от использованной для предыдущих руководств. Очевидно также, что Эрик Рехлин, готовя свой неофициальный AUR по HP 50g, должен был включить в руководство всё вышеописанное — или, по меньшей мере, постараться это сделать.
Довольно быстро выяснилось, что разделение по признаку документированности оказалось не только расплывчатым, но также произвольным и непрактичным. Например, описание недокументированной или плохо документированной комбинации клавиш выглядело искусственным и неполным без описания схожих, но хорошо документированных комбинаций. Поэтому в статью было включено довольно большое количество просто полезных трюков (включая описанных в руководстве, хорошо или плохо другой вопрос), описание которых оказалось полезным держать в одном месте, под рукой. Это отразилось в окончательном названии статьи.
Данная статья содержит способы использования калькуляторов, не рекомендованные изготовителем. Автор статьи не несёт ответственность за ущерб, нанесённый благодаря следованию приведённым советам или их игнорированию. Статья публикуется в ознакомительных целях и вся ответственность за применение или неприменение изложенных знаний лежит на вас, уважаемый читатель.
Пр это правый Shift (оранжевый, ранее красный или зелёный), Лв это левый Shift (белый, ранее синий или purple), а BS это Backspace. Запятая означает последовательное нажатие клавиш, а знак сложения означает одновременное удержание двух или более клавиш. Пробел означает оба эти варианта. Через дробную черту указаны альтернативные клавиши, на выбор.
Во всех режимах:
В режиме RPN дополнительно:
Некоторые специальные символы не обозначены на клавиатуре HP 50g. Их вводят следующим образом (см. также Table of HP48/HP49 Characters):
Американский калькулятор не поддерживает русский алфавит, зато имеет небольшой ассортимент греческих букв, помимо указанных на клавиатуре π и Σ (маленькая пи и заглавная сигма). Обычно они вводятся в режиме ALPHA с помощью правого Shift'а и кнопки с более-менее похожей латинской буквой:
Также любой имеющийся символ можно ввести, выбрав его из таблицы символов с помощью Пр, CHARS. Внизу таблицы будет указано, как ввести выбранный символ с клавиатуры HP 50g. Так можно ввести, скажем, греческие буквы γ (гамма) и η (эта), недоступные с клавиатуры.
Команда MINEHUNT запускает игру «Сапёр». Игру можно остановить, нажав клавишу STO. Это сохранит игру в текущем каталоге, в переменной MHPar . Мин обычно 20, но их количество (от 1 до 64) можно указать, создав переменную Nmines . Если число будет отрицательным, мины будут видны.
Если в режиме редактирования EQW набрать MINEISBETTER, выделить стрелкой вверх и нажать программную клавишу F6 (SIMP), запустится тетрис. Управлять клавишами 2, 4, 5 и 6. Во время игры нельзя выключить калькулятор, тетрис останавливается при проигрыше игрока. Также игру можно остановить клавишей BS, не дожидаясь проигрыша (отобразится число убранных линий).
Если этот тетрис показался очень простым и скучным, наберите "HpMad" (с кавычками) в любой форме ввода. Например в поле BEEP меню CALCULATOR MODES.
Команда RULES выводит кроссворд из имён разработчиков и северо-американских национальных героев.
HP 50g поддерживает не только SD, но и MMC-карточки. Любые MMC-карточки (microMCC,..) пойдут, если есть соответствующий адаптер.
Фирма обещает, что максимальная ёмкость карточки равна 2Гб. Тем не менее встроенный FILER неспособен отображать правильно количество свободного места на карточке, если оно больше гигабайта. Как только карточка заполнится и свободное место станет меньше гигабайта, оно начнёт отображаться корректно. На практике программы для HP 50g и данные занимают мало места, поэтому карточки с ёмкостью 256-512Мб вполне достаточно.
Сам HP 50g форматирует карточки (которые больше 64Мб), как FAT32. Напомню о существовании в калькуляторе неизменяемого загрузчика, который способен обновлять с карточки содержимое прошивки (из меню ON+F4). Только последние выпуски загрузчика cпособны считывать эти обновления с FAT32. У промежуточных версий загрузчика были проблемы с прочтением FAT12. Фирма гарантирует обновление прошивки на всех выпусках HP 50g лишь при использовании на карточке файловой системы FAT16, то есть при форматировании её на компьютере.
KEYTIME содержит время реакции клавиатуры на нажатую клавишу. Если точнее, то количество «тиков» (от 0 до 4096; в секунде 8192 «тиков»), в течении которых будет игнорироваться повторное нажатие клавиши. Чтобы клавиатура не глотала клавиши при быстром вводе, запишите туда 500…400 или даже 150…300.
STARTUP содержит программу, выполняющуюся при каждой «мягкой» перезагрузке. Запишите сюда всю инициализацию, включая настройку переменной KEYTIME, установку RPN, «мягких» меню, режима клавиатуры USER (-62 SF) и сохраните её копию во флэш-памяти или на SD-карточке.
Переменная STARTOFF содержит программу, выполняемую при автоматическом выключении питания (фактически вместо выключения). Если в ней нет команды OFF, автовыключения не происходит.
Переменная TOFF содержит #xxxx шестнадцатеричное время бездействия в тиках (вплоть до #FFFFFFFFh), через которое калькулятор выключается автоматически. Его нельзя сделать меньше 5 секунд, а при отсутствии этой переменной HP 50g автовыключается через 5 минут. Например, записав #5A000h в TOFF мы получим 45-секундное автоматическое выключение.
Переменные STARTED и EXITED содержат программы, исполняемые при входе и выходе из редактора. Они могут содержать команды, скажем, убирающие и восстанавливающие строчки заголовка для расширения области редактирования.
X — наличие этого имени является главной причиной, почему у новичков не работают дифференцирование и другие функции СКМ. Удалите её и живите спокойно.
С помощью команды →LANGUAGE можно заставить систему говорить на одном из трёх встроенных языков. Для этого предварительно занесите в стек его код (0=английский, 1=французский и 2=испанский). Кстати, калькуляторы HP популярны во Франции.
Команда →Q (выбирается из конца меню CAT, то есть Пр SYMB, или набирается через ALPHA, Пр 0) переводит дробь из десятичной в рациональную. Например 0.625 →Q даст 1/16 . Перевести дробь обратно в десятичную можно с помощью команды →NUM (Пр ENTER).
Для появления разделителя тысячей (123456.78 = 123,456.780) сбросьте флаг Approx и установите формат числа Fix (допустим Fix 3). Кстати, режим FIX n влияет на точность вычислений интегралов (гарантировано вычисляются лишь n десятичных знаков после запятой).
WSLOG выдаёт в стек журнал с датами и временем «жёсткой» перезагрузки кнопкой RESET на обратной стороне калькулятора.
TEVAL вычисляет значение на вершине стека аналогично EVAL, выдавая в качестве результата длительность выполнения команды.
Для перевода числа на вершине стека в другую размерность нажмите Лв и программируемую клавишу, соответствующую искомой размерности. (Подразумевается, что 117 флаг Soft MENU установлен.)
{A B FOO SWAP} MENU создаст настраиваемое меню с командами A, B, FOO и SWAP. Вызывать меню можно по команде CUSTOM, то есть Лв+MODE. На калькуляторах семейства HP 48 эта клавиша называлась CST и нажималась без префикса, поэтому некоторые любители перепрограммируют клавиатуру, меняя местами CUSTOM и MODE. Также популярен обмен между клавишами HIST (которая всё равно вызывается стрелкой вверх) и более удобной CMD.
Узнать код клавиши можно, выполнив в режиме RPN команды 0 WAIT и нажав её (можно ввести префикс). Это даст код клавиши, например у клавиши SYMB код 44.1. Код клавиши записывается, как rc.ph (row column . plane, а h равно 1 если префиксная клавиша удерживается и 0 если отпускается). «Нажать» клавишу можно и программно, дав её код на вход команды KEYEVAL.
В режиме USR (для перехода дважды нажать Лв, ALPHA) можно переназначать клавиши. Например последовательность {'Blabla' 44.1} STOKEYS повесит на редкоиспользуемую клавишу SYMB программу с именем Blabla.
Талмуды под номером 2 и 3 (UG и AUR) можно скачать с сайта HP. Их лучше иметь в печатном виде, т.к. без овладения ими калькулятор будет больше простаивать, чем отрабатывать свою стоимость. Даже если печатать экономно (на двух сторонах листов A4, по четыре страницы на одной стороне), затраты на получение комплекта документации могут сравняться с ценой МК-152 (приводятся московские цены на январь 2008 года):
Учитывайте, что начиная с HP 49/50 кардинально поменялся стиль документации. Теперь вместо детального описания всех возможностей всё более усложняющегося устройства руководство «танцует» от типовых научных и инженерных задач. Иллюстрируя, с помощью нажатия каких кнопок предлагается их решать. Тем владельцам, кто привык к старому исчерпывающему технократическому стилю, рекомендую достать или распечатать руководства от HP 48. Большая часть информации оттуда всё ещё актуальна для HP 50g.
На сайте HP выложена прошивка 2.15, вышедшая 14 сентября 2009. После обновления прошивки может потребоваться установить новые версии библиотек L226 (EqnData.Lib = Equation Data) и L227 (EqnLib.lib = Equation Lib).
Также можно установить L229 — таблицу Менделеева (PerTbl.lib = Periodic Table), которую Jean-Yves Avenard перенёс из HP 48GX в 50g.
Проверить версию прошивки можно командой VERSION. Для «вирусной» передачи прошивки из одного калькулятора в другой служит команда ROMUPLOAD. Команда VER выводит версию CAS.
Не-СКМ команды HP 49/50, отсутствующие в HP 48:
{ ANS COLLECT DBUG DEF DISPXY DRAW3DMATRIX DROPN DROP2 DUPDUP DUPN e
EQW EXITED EXPAND FAST3D FILER FLASHEVAL FONT→ →FONT FONT6 FONT7
FONT8 GROBADD HEADER→ →HEADER i ∞ INT I→R KEYTIME LANGUAGE
LOCAL MENUXY MINIFONT →NDISP NDUPN NIP PICK3 PLOT RCLVX REF RENAME R
→I ROMUPLOAD SCALEH SCALEW SCROLL ∑X2 ∑Y2 SREPL STARTED STARTEQW
STARTERR STARTOFF STARTUP STOVX TABLE TBLSET TOFF TPAR TRAN UNBIND
UNPICK UNROT VER WIN ZFACT ZPAR }
Команды СКМ:
{ ? ABCUV ACOS2S ADDTMOD ALGB ARIT ASIN2C ASIN2T ATAN2S AXL AXM AXQ
CASCFG CASCMD CHINREM CMPLX CURL DERIV DERVX DESOLVE DIFF DIV DIV2
DIV2MOD DIVIS DIVMOD DIVPC EGCD EPSX0 EULER EXLR EXP&LN EXPAND
EXPANDMOD EXPLN FACTOR FACTORMOD FACTORS FCOEF FOURIER FROOTS FXND
GAUSS GCD GCDMOD GROBADD HADAMARD HALFTAN HERMITE HESS HILBERT HORNER
IABCUV IBP ICHINREM IDIV2 IEGCD ILAP INTVX INVMOD IQUOT IREMAINDER
ISPRIME? JORDAN KEYEVAL LAGRANGE LAP LAPL LCM LCXM LDEC LEGENDRE LGCD
lim LIN LINSOLVE LNAME LNCOLLECT LVAR MAD MAIN MAP MATR MENUXY MODSTO
MULTMOD NEXTPRIME PA2B2 PARTFRAC PCAR PLOT PLOTADD POWMOD PREVAL
PREVPRIME PROMPTSTO PROPFRAC PTAYL QUOT QXA REF REMAINDER REORDER
RISCH rref RREFMOD SCROLL SERIES SEVAL SIGNTAB SIMP2 SINCOS SOLVE
SOLVER SOLVEVX SUBST SUBTMOD SYLVESTER TABVAL TABVAR TAN2SC TAN2SC2
TAYLOR0 TCHEBYCHEFF TCOLLECT TEVAL TEXPAND TLIN TRAN TRIG TRIGCOS
TRIGO TRIGSIN TRIGTAN TRUNC TSIMP VANDERMONDE VER XNUM ZEROS ∞ }
HP 50g способен питаться от компьютера (или специального сетевого адаптера) через USB-кабель, что позволяет экономить ресурс батареек. Также потребление существенно снизится, если вставлять в калькулятор SD-карточку лишь в случае необходимости, не пренебрегайте этим советом. Кстати, при каждом нажатии клавиши ON калькулятор обращается к карточке и если ваш корневой каталог захламлён, пауза может стать ощутимой. Пользуйтесь каталогами.
Очень много энергии отнимает форматирование SD-карточки, поэтому эту операцию лучше производить на компьютере (где, к тому же, можно выбрать FAT16) или при питании от USB.
Другим устройством, пожирающим энергию батареек, является ИК-порт. Особенно если он включён на приём.
Обычно калькуляторы HP славятся низким энергопотреблением. HP 50g требует сразу четыре батарейки и при умеренном использовании может проработать от одного «алкалайнового» комплекта дольше полугода и более полутора лет — от литиевого. В случае появления сигнала о слабых батарейках немедленно замените «пальчики» на новые, иначе подсадите «таблетку», рассчитанную на долгую пятилетнюю службу.
Вышеописанное написалось после (или во время) изучения следующих рекомендуемых сайтов, большей частью англоязычных. Материал проверялся по мере возможности и необходимости на HP 50g с прошивкой 2.09 . Многое должно работать и на других калькуляторах семейства HP 49.
Обнаружил расхождения в результатах вычисления HP 50g аргумента комплексного числа. Например, для числа z=-1-i=(-1,-1), заданного двумя разными способами, в одном случае получается ARG(-1-i)=5*PI/4, а в другом - ARG((-1,-1))=-3*PI/4.
Если посмотреть информацию об ARG в AUR к HP 50g, то для этого случая (третий квадрант) там указана формула atan y/x + π sign y for x < 0. После задания ограничений на значения переменных с помощью системной переменной 'REALASSUME': {'X<0' 'Y<0'} 'REALASSUME' STO, и вычисления аргумента комплексного числа z=X+i*Y отображается неверная формула ATAN(Y/X)+(1-X/|X|)*PI/2 или ATAN(Y/X)+PI, т.е. для алгебраической формы комплексного числа с отрицательной действительной и мнимой частью калькулятор находит НЕ ГЛАВНОЕ значение аргумента, что при последовательном программировании или решении задач, в которых требуется нахождение аргумента, может привести к ошибкам.
На других калькуляторах с CAS такой проблемы не обнаружил.
Калькуляторы HP (включая 48GX и 49G) неправильно решают системы линейных уравнений. Точнее, если ответ отсутствует, числовой решатель (NUM.SLV) безо всякого сообщения об ошибке выдаст некое «приближение», которое сочтёт наилучшим. Фирме указывали на этот факт, но она считает подобное поведение своего калькулятора не ошибкой, а особенностью.
Пример (опубликованный Aharon Sarussi 5 мая 2000 года):
6x-3y=15
-2x+y=0
Вводим данные на экранчике SOLVE SYSTEM (четвёртый пункт Solve lin sys.. из меню Пр 7 NUM.SLV):
Матрица A=[[6. -3] [-2. 1.]]
Матрица B=[[15.] [0.]]
Калькулятор предлагает решение [[1.8] [-.9]], другими словами x=1.8, а y=-0.9
Если же решать уравнение вручную, то из второго уравнения получаем, что y=2x. Подставляя в первое получаем, что 0=15. Решений нет, а калькулятор бредит.
Что можно порекомендовать? Перед решением системы проверить, если ли у неё решения. И доверять полученному ответу (да и вообще запрашивать ответ в числах) лишь в том случае, когда точно уверены, что решения есть.
Приобрёл вражеский программируемый калькулятор. Отзыв напишу потом. А сейчас самое важное или, по крайней мере, интересное.
Как известно, в компьютерной безопасности и криптографии важную роль играет «факторизация» целых чисел, то есть их разложение на простые множители. Напомню, что простое число это то, которое делится без остатка лишь на само себя и на единицу (2, 3, 5, 7, 11, 13,…). Каждое число может быть разложено на простые множители лишь единственным образом (скажем, 15=3*5). И найти это разложение намного дольше, чем перемножить взятые с потолка простые числа. Для разложения больших чисел приходится задействовать кластеры, состоящие из большого числа высокопроизводительных компьютеров. Чтож, пощупаем эту важную грань с помощью калькулятора.
Калькулятор HP 50g подкупает тем, что позволяет «из коробки» (функция ISPRIME?) тестировать числа «на простоту», а также с помощью команды FACTOR разлагать числа на простые множители. Инструкция обещает, что специальный «целый» тип данных позволяет калькулятору обрабатывать числа неограниченной длины. В руководстве (как в кратком User's Manual, так и в 888-страничном User's Guide) нет сведений об ограничениях команды FACTOR, и меня заинтересовала эта «серебряная пуля».
Возьмём два целых числа (занимающие 59 и 79 бит):
DVX = 555555555578888573
DVY = 465327987614456579865323
На оба числа ISPRIME? выдаёт 1, что означает, что это простые числа. Перемножим их, получив 138-битное число:
MAGIC = DVX*DVY = 258515548685555605977575788207962363654079
На это число ISPRIME? честно выдаёт 0, что означает, что оно составное. Однако команда FACTOR не разлагает его на сомножители (в данном случае DVX и DVY), будто оно простое! Более того, на основе этого числа можно создавать другие составные числа, например 17*1999*MAGIC, которые при факторизации на HP 50g не будут содержать в разложении простые множители DVX и DVY. Команда FACTOR будет стабильно использовать в разложении число MAGIC наравне с простыми числами, не сообщая пользователю об ошибке и никак не выделяя неразложенное число среди других сомножителей.
Я не искал другие подобные «лжепростые» числа, но уверен, что их достаточно. Для подбора длинных простых чисел удобно использовать команду NEXTPRIME. Работу которой, правда, тоже неплохо было бы проверить.
Любопытно проверить на других калькуляторах фирмы, присутствует ли в них эта «особенность». До того, как недокументированные ограничения команды FACTOR будут исследованы (кстати, используемая прошивка для HP 49G+/50g (v92, Revision #2.09; HP49 CAS VER 4.20060602) является последней и скачена из Интернета — следовательно технически возможно даже дизассемблирование) я рекомендую не полагаться на калькуляторы HP, по крайней мере в вопросах факторизации больших чисел. Чтобы не писали инструкции, серебряной пули нет и сомножители, выдаваемые командой FACTOR следует отдельно перепроверять на простоту — по меньшей мере с помощью команды ISPRIME? того же калькулятора.
Похоже, что на команде FACTOR стоит таймаут. Если поиск сомножителей отнимает больше одной-двух минут, калькулятор сдаётся (как в том анекдоте про подбор пароля китайцами) и считает оставшееся число простым. В некоторых случаях удаётся получить дальнейшее разложение, запустив команду FACTOR для последнего сомножителя. Но если его даже в одиночку невозможно разложить за указанное время, он во всех разложениях будет восприниматься, как простое число. Как влияет на это скорость работы процессора (некоторые программы позволяют его разгонять чуть ли не до 200МГц), я не проверял.
Кстати, мне удалось подобрать значительно меньшие числа (по 27 бит каждое), 53-битное произведение которых заставляет сбоить встроенную команду факторизации:
DV1 = 80000023
DV2 = 90000049
MAG = DV1*DV2 = 7200005990001127
Фактически можно использовать произведение двух любых девяти (и более) значных простых чисел. Достаточно подольше потоптать клавиатуру калькулятора и дать команду NEXTPRIME, чтобы сгенерировать «тайный» сомножитель. Понятно, что после переписывания «сатурновской» прошивки под ARM скорость вычислений возрастёт и указанный диапазон на пару порядков увеличится. Непонятно лишь, почему в инструкции не отмечены не только найденные ограничения команды FACTOR, но и сам неверный ответ не сопровождается ни предупредительным сигналом, ни текстовым сообщением об ошибке.


Итак, команда FACTOR работает не так, как ожидалось. Но тут закралось сомнение. Кто сказал, что она выполняет факторизацию так, как мы ожидаем? Быть может, команда FACTOR просто разлагает на множители. А простые они или нет, уже другое дело.
Чтож. Посмотрим на встроенную подсказку по ещё одной команде, FACTORS (снимок экрана слева). Слово "irreductible" как раз и означает неразложимые, простые множители. Справа же видим разложение по этой команде числа 10*MAG (72000059900011270). Как мы видим, простые множители 2 и 5 машинка нашла. Но на числе MAG споткнулась и показала его, как неразложимое. Хотя оно вполне себе разложимо (на DV1 и DV2).
Итого вердикт ясен. Ошибка. Кстати, в Сети приводятся и другие случаи, когда при сложности (или невозможности) получения правильного ответа HP 50g выдаёт не сообщение об ошибке и не предупреждение, а неправильный ответ. Выдаёт молча, ничем не выделяя подобное поведение на фоне правильных ответов. Так что, несмотря на всю невероятную вычислительную мощь HP 50g, с этой машинкой надо быть аккуратнее.
Вот такое спецустройство на базе HP-50g. Судя по маркировке клавиш, используется для обхода и наблюдения за техническими объектами "в поле". Картинка ниже.

Взято отсюда. Там еще немало фотографий с конференции разработчиков под HP.