Серия HP-41C — это программируемые, расширяемые, непрерывные RPN- калькуляторы, выпускавшиеся компанией Hewlett-Packard с 1979 по 1990 год. Первоначальная модель HP-41C была первой в своем роде, предлагающей возможности буквенно-цифрового отображения. Позже появились HP-41CV и HP-41CX , предлагающие больше памяти и функциональности.
Алфавитно -цифровой ЖК- экран HP-41C произвел революцию в использовании карманного калькулятора, обеспечив удобство использования (для своего времени) и расширяемость (функции, не назначенные на клавиатуре, можно было записать в алфавитном порядке). Используя алфавитно-цифровой дисплей, калькулятор мог сообщать пользователю, что происходит: он мог отображать сообщения об ошибках, например, показывать ("ОШИБКА ДАННЫХ") при попытке деления на ноль вместо простого отображения мигающего нуля; он также может специально запрашивать у пользователя аргументы ("ВВЕДИТЕ РАДИУС") вместо того, чтобы просто отображать вопросительный знак.
Более ранним калькуляторам требовалась клавиша или комбинация клавиш для каждой доступной функции. У HP-67 было три клавиши Shift (золотая «f», синяя «g» и черная префиксная «h» клавиши); у конкурирующих калькуляторов Texas Instruments было две ( 2ndи INV) и около 50 клавиш (у TI-59 их было 45). Hewlett-Packard были ограничены своим форматом инструкций, состоящим только из одного байта. Более гибкий формат хранения программ в TI-59 позволял объединять больше клавиш в одну инструкцию. Самая длинная инструкция требовала одиннадцати нажатий клавиш, повторно используя клавиши Shift четыре раза. TI-59 также использовал клавишу, Opза которой следовали две цифры, для доступа к еще 40 различным функциям, но пользователь должен был помнить коды для них. Очевидно, что требовался более удобный и гибкий метод выполнения инструкций калькулятора. У HP-41C была относительно небольшая клавиатура и только одна клавиша Shift, но он предоставлял сотни функций. Каждая функция, которая не была назначена клавише, могла быть вызвана с помощью XEQклавиши (произносится E XEQ TE — «выполнить») и записана полностью, например XEQFACT для функции факториала .
Калькулятор имел специальный пользовательский режим, в котором пользователь мог назначить любую функцию любой клавише, если назначения по умолчанию, предоставленные HP, не подходили для конкретного приложения. Для этого режима HP-41C поставлялся с пустыми шаблонами клавиатуры; т. е. пластиковыми крышками с отверстиями для клавиш, так что пользователь мог аннотировать настраиваемые клавиши. Hewlett-Packard даже продавала версию калькулятора, где едва ли на клавишах были напечатаны названия функций, предназначенную для пользователей, которые будут использовать HP-41C только для пользовательских вычислений (таким образом, им вообще не нужна стандартная раскладка клавиш); эта версия калькулятора была в разговорной речи известна в команде калькуляторов Corvallis компании HP как «Blanknut» (потому что кодовое название разработки процессора HP-41C было известно как «coconut»). [2]
Алфавитно-цифровой дисплей также значительно облегчал редактирование программ, поскольку функции были прописаны полностью. Калькуляторы, работающие только с числами, отображали шаги программирования в виде списка чисел, каждое число обычно сопоставлялось с клавишей на клавиатуре, часто через координаты строк и столбцов. Кодирование функций в соответствующие числовые коды и наоборот было предоставлено пользователю, которому приходилось искать комбинации функция-код в справочном руководстве. Занятой программист быстро выучил большинство кодов, но необходимость изучать коды пугала новичков. В дополнение к этому, пользователь должен был мысленно хранить коды функций отдельно от числовых констант в листинге программы.
HP-41C отображал каждый символ в блоке, состоящем из 14 сегментов, которые можно было включать и выключать; так называемый четырнадцатисегментный дисплей (похожий на гораздо более распространенные семисегментные дисплеи , которые можно было использовать только для отображения цифр). HP-41C использовал жидкокристаллический дисплей вместо вездесущих светодиодных дисплеев той эпохи, чтобы снизить потребление энергии.
Хотя это позволяло отображать заглавные буквы, цифры и несколько знаков препинания ( набор символов FOCAL ), некоторые конструкции приходилось произвольно перекручивать (например, чтобы отличить S от 5), а строчные буквы были нечитаемыми (HP обеспечивала отображение только строчных букв от a до e). Конкурент HP Sharp , представляя PC-1211 , использовал точечную матрицу 5×7 точек и отображал символы в принципе так, как мы видим их сегодня на экранах компьютеров (и, по сути, на многих ЖК-экранах различных встраиваемых систем ); позже это использовала HP в карманном компьютере HP-71B .
Многие пользователи использовали все четыре порта для расширения памяти, не оставляя места для других модулей. HP разработала модуль Quad Memory Module с объемом памяти в четыре раза больше, обеспечивая максимально доступную память и оставляя три пустых порта. HP-41CV (V — римская цифра 5) включала этот модуль памяти на основной плате, таким образом обеспечивая в пять раз больше памяти, чем HP-41C, и четыре доступных слота.
Внутренняя архитектура запрещала добавлять больше памяти, поэтому HP разработала расширенный модуль памяти, который можно было бы рассматривать как вторичное хранилище. К данным нельзя было получить прямой доступ, но можно было передавать данные в основную память и из нее. Для калькулятора (и пользователя) данные, расположенные в расширенной памяти, выглядели так же, как файлы на современном жестком диске для ПК (пользователя).
Последняя модель HP-41, HP-41CX , включала расширенную память, встроенный модуль времени и расширенные функции. Она была представлена в 1983 году и снята с производства в 1990 году.
HP-41C программируется нажатием клавиш, что означает, что он может запоминать и позже выполнять последовательности нажатий клавиш для решения конкретных задач, представляющих интерес для пользователя. Эти программы нажатия клавиш, в дополнение к выполнению любой операции, обычно доступной на клавиатуре, также могут использовать условные и безусловные инструкции ветвления и цикла, позволяя программам выполнять повторяющиеся операции и принимать решения.
HP-41C также поддерживает косвенную адресацию ( вычисляемый goto ), с помощью которой можно реализовать универсальную машину Тьюринга , и поэтому программную модель HP-41C можно считать полной по Тьюрингу . Сочетание косвенной адресации и goto легко приводило к спагетти-коду .
Шаги программы нумеруются, начиная с 1, но эта нумерация не имеет внутреннего смысла и меняется по мере добавления или удаления новых инструкций в середине программы. Специальная инструкция LBL используется для создания метки, на которую затем ссылается пользователь для вызова программы или сама программа как цель инструкции GTO (безусловный goto) или XEQ (выполнить).
Вот пример программы, которая вычисляет факториал целого числа от 1 до 69 (70! требуется показатель степени больше 99, максимум калькулятора). Целое число вводится в регистр X и передается как входной параметр при запуске программы. Программа занимает два регистра, что составляет ≈14 байт.
Шаг Код операции Комментарий01 Глобальный лейбл LBL'Fac ALPHA позволяет вызывать программу с помощью «XEQ Fac»02 STO 00 Сохранить X=входной параметр в регистре 0003 1 Введите 1 в X, «поднимая» или «толкая» стек : Y=входной параметр (больше не используется) Х=104 LBL 00 Локальная метка для goto05 RCL 00 Вызов регистра 00 в X, подъем стека: Z=входной параметр (больше не используется) Y=1 или промежуточный или конечный факториал X=входной параметр (N) минус эффект команды DSE (-0, -1, ..., -(N-1))06 * Умножаем X и Y, «отбрасывая» или «выталкивая» стек: Y=входной параметр (больше не используется) X=промежуточный или конечный факториал07 DSE 00 Уменьшить регистр 00 и пропустить следующую команду, если значение регистра E равно 008 GTO 00 Перейти к местному лейблу 0009 END Завершение программы — результат отображается в X
Хотя язык программирования, используемый в серии 41, является версией языков программирования с нажатием клавиш, которые использовались во всех предыдущих программируемых калькуляторах HP, ряд технологий, а также связанных с программированием функций удобства использования и расширяемости, доступных в моделях серии 41 (в частности, накладки на клавиатуру, полностью переназначаемая клавиатура, возможности ввода-вывода для хранения и обмена программами и поддержка алфавитно-цифровых символов), побудили некоторых пользователей предложить новое название для языка, что привело к конкурсу, в котором победила компания «FOCAL» на «Forty One Calculator Language». [3] [4] [5] Поскольку название FOCAL уже использовалось корпорацией Digital Equipment Corporation , оно так и не было официально принято HP.
Большое сообщество пользователей было создано вокруг HP-41C. Энтузиасты по всему миру нашли новые способы программирования, создали собственное программное обеспечение (например, игру по взлому кодов [6] и версию Hunt the Wumpus [7] ) и модули расширения, а также ускорили тактовую частоту (см. разгон ). Большая часть этих мероприятий координировалась клубом PPC и его президентом Ричардом Дж. Нельсоном. Клуб PPC опубликовал журнал PPC и выпустил PPC ROM, коллекцию высокооптимизированных низкоуровневых программ для HP-41C.
Одним из открытий сообщества было то, что, поскольку некоторые инструкции FOCAL хранились в памяти как более одного байта , можно было использовать ошибку в редакторе программ, чтобы назначить клавишам странные функции. Самая важная функция была известна как байтовый джампер или байтовый захватчик , способ частичного прохождения программных инструкций и редактирования их способами, которые в противном случае не были бы разрешены. Использование полученных инструкций называлось синтетическим программированием .
С помощью синтетических инструкций пользователь мог получить доступ к памяти и специальным флагам состояния, зарезервированным для операционной системы, и делать очень странные вещи, включая полную блокировку машины. Можно было создавать звуки или отображать персонажей, а также создавать анимацию, официально не поддерживаемую операционной системой. Системные флаги также были доступны как низкоуровневые ярлыки для методов булева программирования. Hewlett-Packard официально не поддерживала синтетическое программирование, но и не делала ничего, чтобы предотвратить его, и в конечном итоге даже предоставила внутреннюю документацию группам пользователей.
В выпуске за декабрь 1980 года журнал BYTE описал HP-41C как «самую универсальную машину из когда-либо существовавших». Автор похвалил документацию HP как «одну из лучших в отрасли» и сообщил, что калькулятор « гораздо проще программировать и отлаживать», чем TI-59. Заявив: «Я нашел HP-41C гораздо более приятным в программировании и использовании, чем его предшественники» из-за его буквенно-цифрового дисплея, автор пришел к выводу, что это был «возможно, не совсем» карманный компьютер. [6] В следующем выпуске другой автор написал, что «HP-41C ... относится к программируемым калькуляторам, которые находятся ближе всего к компьютерной границе. Он достаточно близок, чтобы жаргон компьютеров был полезен для его описания», и похвалил простоту и надежность устройства чтения карт и совместимость с программным обеспечением HP-67 и HP-97. В обзоре критиковались неточности в расчетах из-за отсутствия защитных цифр ; «Есть что-то абсурдное в том, что самый навороченный калькулятор в мире не может выдавать результаты с точностью более семи или восьми знаков после запятой». [8] Hewlett-Packard ответила, что предполагаемая неточность присуща арифметике на любом компьютере с конечной точностью. [9]
HP-41C, который участвовал в девяти ранних миссиях Space Shuttle , выставлен в Национальном музее авиации и космонавтики в Вашингтоне, округ Колумбия. HP-41C с некоторыми специальными конфигурациями оборудования (добавление полосок Velcro , модуля предсерийного времени и более громкого звукового сигнала, а также удаление деталей, выделение газа которых могло вызвать загрязнение) использовались в ранних миссиях Shuttle с целью выполнения рутинных, но необходимых расчетов, таких как расчет изменения центра тяжести из-за расхода топлива. HP-41C также был запрограммирован на обработку расчетов, обычно выполняемых главным бортовым компьютером, таких как определение времени зажигания для повторного входа в атмосферу в случае отказа главного компьютера. [10] [11]
Функции калькулятора можно было расширить, добавив модули в верхней части машины. Было доступно четыре слота для добавления дополнительной памяти, предварительно запрограммированных пакетов решений, содержащих программы, охватывающие инженерию, геодезию, физику, математику, финансы, игры и т. д. Таким образом, HP-41 мог быть фактически адаптирован к личным потребностям пользователя. Аппаратные расширения включали термопринтер , считыватель магнитных карт (совместимый с HP-67 через программное обеспечение-конвертер) и «палочку» (считыватель) штрихкодов.
Модули расширения также могли добавлять новые инструкции к машине. Стандартный набор математических функций 41-й серии был несколько ограничен по сравнению с функциональностью некоторых современных калькуляторов HP (особенно HP -34C и HP-15C ). Среди прочего, стандартный набор функций не предлагал возможности интеграции или поиска корня и не поддерживал матрицы и комплексные числа; эти дополнительные функции могли быть добавлены модулем расширения.
Другой модуль, известный как Interface Loop , позволял подключать больше периферийных устройств: более крупные принтеры, микрокассетные магнитофоны, дисководы для гибких дисков размером 3 1⁄2 дюйма , интерфейсы связи RS -232 , интерфейсы видеодисплеев и т. д. Interface Loop также можно было использовать с компьютерами HP-71B , HP-75 и HP-110 .
Модули расширения HP-41 позволяли пользователю программируемого калькулятора HP-41 расширять функциональность машины. В HP-41 имелось место для четырех модулей расширения на задней панели калькулятора.
HP-41 был не единственным калькулятором своего поколения, который допускал модули расширения. TI-58 и TI-59 также имели подключаемые модули ПЗУ. Однако модули HP-41 были гораздо более универсальными.
Модули памяти добавили к калькулятору основную память RAM , что позволило увеличить количество шагов программирования и/или количество регистров данных.
Оригинальный HP-41C имел основную память из 63 регистров по 7 байт каждый. Каждый регистр мог содержать либо число, либо строку из 6 символов, либо до семи шагов программы на языке FOCAL (шаги программы использовали переменное число байт).
Каждый модуль памяти добавлял 64 регистра, и калькулятор мог хранить до четырех из них, что в общей сложности составляло 319 регистров. Хотя это считалось огромным для того времени (чуть больше 2 килобайт ), все слоты расширения были использованы. Группы пользователей нашли способ объединить две микросхемы памяти в один модуль, тем самым освободив два слота расширения. HP разработала модуль, удерживающий все четыре в одном слоте, так называемый Quad Memory Module . Более поздняя модель HP-41CV имела встроенный четырехъядерный модуль.
Модули приложений 'pac' на основе ПЗУ добавляли до 4 килобайт постоянной памяти (некоторые до 8 килобайт, но это были просто два независимых модуля по 4 КБ в одном корпусе). Большинство модулей содержали десятки программ, написанных на языке программирования HP-41C, FOCAL.
Программы в модулях ПЗУ могли вызываться из пользовательской программы с помощью вездесущей функции XEQ. В программном коде XEQ появлялась как " XROM
", когда она использовалась для вызова программы ПЗУ.
Кардридер был устройством, способным считывать и записывать небольшие прямоугольные пластиковые карты с двумя магнитными полосами. Кардридер мог копировать содержимое памяти на магнитные карты, а затем считывать данные обратно в память.
Поскольку HP-41C имел энергонезависимую память (пользовательские программы и данные не стирались при отключении питания), не было абсолютной необходимости в постоянном устройстве хранения данных, поэтому устройство чтения карт было необязательным.
Каждая карта содержала две полосы по 112 байт каждая, которые могли содержать 16 регистров данных или до 112 шагов программы. Эта ограниченная емкость привела к тому, что типичные программы требовали сохранения пяти или более магнитных карт. Полное резервное копирование 319 регистров памяти машины плюс внутренние данные требовало 11 магнитных карт (каждую карту приходилось вставлять дважды).
Кардридер мог считывать магнитные карты с более ранней модели HP-67 . Программы HP-67 были переведены в инструкции HP-41C, поскольку HP-67 и HP-41 используют одну и ту же модель программирования и стек операций. Однако некоторые инструкции были специфичны для HP-67, и кардридер предоставлял дополнительные инструкции для эмуляции 67.
Магнитные карты могли быть защищены от записи, а программы сохранялись как частные: после загрузки исходный код программы не мог быть отображен. Это делало магнитные карты очевидным выбором для распространения программ.
Однако электродвигатель создавал большую нагрузку на батареи калькулятора, а цена пустых карточек ложилась еще более тяжелым бременем на кошелек пользователя.
Модуль времени добавил часы реального времени. Часы позволяли использовать реальное время в программах. Пользователь мог устанавливать будильники, которые запускали вызовы пользовательских программ. Будильники могли включать калькулятор, поэтому можно было создавать программы, которые выполнялись в определенный момент в течение дня, а затем выключать калькулятор до следующего будильника. Поскольку HP-41 часто использовался в качестве устройства сбора данных в лабораториях, это позволяло калькулятору считывать данные с контролируемых устройств в определенное время каждый день, без необходимости оставаться полностью включенным между считываниями (таким образом экономя заряд батареи).
В HP-41CX был встроенный модуль времени.
Принтер использовал рулоны термобумаги для печати строк длиной до 24 символов. Термобумага обеспечивала синеватый отпечаток, но была несколько нестабильной, так как отпечаток мог исчезнуть или вся бумага стала синей из-за чрезмерного нагрева.
Принтер имел некоторые графические возможности, позволяющие пользователю проектировать формы символов или даже включать или выключать отдельные пиксели. Однако буферная память не могла вместить достаточно информации для печати целой строки в графическом режиме и не могла изменять межстрочный интервал, поэтому было невозможно печатать непрерывную графику в горизонтальном режиме. Тем не менее, принтер предоставлял некоторые утилиты печати, которые могли строить график функции вертикально на узкой полоске бумаги принтера.
Вместо использования вышеупомянутого принтера этот модуль можно использовать для сопряжения термопринтера с инфракрасным интерфейсом, а именно HP 82240A и HP 82240B. Это позволяет печатать на ходу без использования кабелей, но самому принтеру также нужны батареи.
Оптический стержень представлял собой считыватель штрихкодов в форме толстой ручки и был разработан для считывания строк стандартных штрихкодов HP в память калькулятора. Штрихкоды, напечатанные, например, в книгах решений HP, могли состоять из программ, числовых или алфавитных констант и даже нажатий клавиш (позволяя управлять калькулятором без использования клавиатуры) — полезно для диагностики калькуляторов, клавиатура которых предположительно была неисправна.
Модуль расширенных функций добавил множество функций, которые давно запрашивались пользователями, например, возможность программного назначения функций клавишам, перераспределения памяти и т. д.
Но самой важной новой функцией было управление расширенной памятью: в то время как HP-41C теоретически мог получить доступ к 1024 регистрам, ранняя конструкция ограничивала основную память только 319 регистрами. Модуль расширенных функций добавлял инструкции для управления банком дополнительной памяти в доступном адресном пространстве машины. Поскольку эта память не была напрямую адресована пользовательскими программами, она рассматривалась как набор именованных файлов, содержащих либо программы, либо данные. Программы и регистры данных можно было копировать из расширенной памяти в основную память и обратно, где к ним можно было получить доступ как обычно.
Расширенная память также могла хранить файлы ASCII , а также был добавлен элементарный текстовый редактор .
Модуль расширенных функций содержал 124 регистра расширенной памяти. Больше можно было добавить с помощью ... модулей расширенной памяти. HP-41CX содержал модуль расширенных функций в стандартной комплектации.
Модули расширенной памяти добавляли больше расширенной памяти к HP-41C. Они требовали наличия модуля расширенных функций или версии калькулятора HP-41CX.
Каждый модуль добавлял 238 регистров расширенной памяти. Можно было вставить до двух модулей расширенной памяти, что в общей сложности составляло 124 + 2*238 = 600 регистров. В сочетании с 319 регистрами основной памяти это покрывало практически все 1024 адресуемых регистра машины, что в общей сложности составляло 919 регистров или 6433 байта.
См. основную статью о HP-IL .
Неизменная популярность HP-41CX среди пользователей побудила SwissMicros в 2015 году выпустить миниатюрный калькулятор размером примерно с кредитную карту ID-1 (88 мм × 59 мм × 7 мм). Названный DM41 , он работает под управлением оригинальной прошивки HP-41CX с расширенной памятью и часами реального времени в эмуляторе на процессоре NXP LPC1115 на базе ARM Cortex-M0 . [12] Отклоняясь от оригинала, он поставляется в альбомном форм-факторе (как известно из серии Voyager от Hewlett-Packard ) с переставленными клавишами, он имеет матричный дисплей, переключаемые тактовые частоты и, основанный на микросхеме преобразователя Silicon Labs CP2102, [13] он поставляется с последовательным интерфейсом USB ( Mini-B ) [14] для обмена данными с ПК и т. д. в целях резервного копирования, для возможной связи с приложениями (например, эмуляторами на базе ПК) [13] или для обновления прошивки. В декабре 2015 года SwissMicros представила DM41L , версию калькулятора примерно того же размера, что и калькуляторы серии HP Voyager. Он по-прежнему поставляется с разъемом USB Mini-B. С сентября 2020 года его преемник, DM41X , также предлагается с расширенным набором функций и традиционным дизайном, который очень близок к классической оригинальной версии.
В дополнение к клонам, основанным на эмулированном оборудовании HP-41, существует по крайней мере один фактический аппаратный клон серии HP-41. Это обновление платы ЦП серии HP-41 HP41CL, созданное Монте Далримплом в Systemyde. [15] HP41CL представляет собой полностью переработанную конструкцию компонентов, обнаруженных на плате ЦП HP-41, включая ЦП, который реализован на ПЛИС и закодирован в Verilog RTL . [16] Плата обновления HP41CL сделана в качестве замены платы ЦП серии HP-41, предполагая, что у вас есть HP-41 с совместимым разъемом платы ЦП, а также отдельная плата ЦП. [17] Обновление поставляется с более чем 600 регистрами расширенной памяти и более чем 320 образами подключаемых модулей. [15] Это возможно благодаря тому, что HP41CL имеет более 1024 страниц встроенной флэш-памяти объемом 4 К слов, из которых более 500 страниц предварительно загружены программным обеспечением HP-41, а также плату обновления, обеспечивающую 128 страниц ОЗУ, которые доступны пользователю через специальный MMU . [15] Кроме того, «турбо»-режим обеспечивается конструкцией ЦП «NEWT» платы обновления HP41CL, что позволяет пользователю ускорить работу калькулятора примерно в 50 раз. [15] Кроме того, HP41CL поддерживает полную совместимость с шиной серии HP-41, так что большинство подключаемых модулей по-прежнему можно использовать в полностью обратно совместимом режиме. [15] Кроме того, Systemyde производит совместимый с HP-41 клон модуля таймера, а также модуль интерфейса приемника GPS . [18] Кроме того, доступен дополнительный полнодуплексный последовательный разъем RS-232 (с физическим интерфейсом стереоразъема 2,5 мм), если у вас есть свободный слот для модуля. [19]
Необычно для карманных калькуляторов, что устройства все еще имеют своих поклонников даже спустя 30 лет после прекращения их производства в 1989 году. В результате программы -эмуляторы доступны для различных операционных систем, включая Windows , Mac OS , варианты Unix , Pocket PC , Palm OS , Apple iOS и Android . [20]
[...] В выпуске HP Key Notes за июнь–август 1982 года был объявлен конкурс "Name-That-Language" на код нажатия клавиши, используемый в
41. FOCAL, Forty-One Calculator
Language
,
стал
победителем
.
Хотя
он
и
не получил широкого признания из-за отсутствия рекламы, он должен был стать и, тем не менее, может стать общим описанием стандартного языка нажатия клавиши. [...]
[...] Сорок один язык калькулятора [...]