Семейство 4-битных ( datapath ) микропроцессоров Saturn было разработано Hewlett-Packard в 1980-х годах сначала для карманного компьютера HP-71B , выпущенного в 1984 году, а затем для различных калькуляторов HP (начиная с HP-18C ). Оно пришло на смену семейству процессоров Nut , использовавшихся в более ранних калькуляторах. HP48SX и HP48S были последними моделями, в которых использовались процессоры Saturn производства HP, более поздние модели использовали процессоры производства NEC . Серия HP 49 изначально использовала ЦП Saturn, пока фабрика NEC [nb 1] больше не могла производить процессор по техническим причинам в 2003 году. Начиная с модели HP 49g+ в 2003 году, калькуляторы перешли на процессор Samsung S3C2410 с ядром ARM920T (часть архитектуры ARMv4T ), который запускал программный эмулятор оборудования Saturn. В 2000 году HP 39G и HP 40G были последними калькуляторами, представленными на основе фактического оборудования Saturn, изготовленного NEC. Последними калькуляторами, представленными для использования эмулятора Saturn, были HP 39gs , HP 40gs и HP 50g в 2006 году, а также ревизия hp 48gII 2007 года . HP 50g был последним калькулятором, проданным HP с использованием этого эмулятора, когда он был снят с производства в 2015 году из-за того, что Samsung прекратила производство процессора ARM, на котором он был основан. [1] [2] [3]
Аппаратное обеспечение Saturn представляет собой полубайтовый последовательный дизайн [4] в отличие от его предшественника Nut , который был бит-последовательным . [5] Внутри процессор Saturn имеет четыре 4-битовые шины данных, которые обеспечивают производительность почти 1 цикла на полубайт, при этом одна или две шины действуют как источник, а одна или две — как получатель. [4] Наименьшее адресуемое слово — это 4-битовый полубайт, который может содержать одну двоично-десятичную (BCD) цифру. Любая единица данных в регистрах, превышающая полубайт, до 64 бит, может обрабатываться как единое целое, однако процессор Saturn выполняет операцию последовательно на основе полубайт за полубайтом внутри. [4]
Архитектура Saturn имеет внутреннюю ширину регистра 64 бита и 20 бит адреса, при этом память адресуется с 4-битной (полубайтной) гранулярностью. Инструкции Saturn ALU поддерживают переменную ширину данных, работая с одним-16 полубайтами слова. Первоначальные чипы ЦП Saturn обеспечивали четырехбитную внешнюю шину данных, но более поздние SoC на базе Saturn включали преобразование шины на чипе в 8-битную внешнюю шину данных и 19-битную внешнюю адресную шину.
Архитектура Saturn имеет четыре 64-битных GPR (регистра общего назначения), названных A, B, C и D. Кроме того, есть также пять 64-битных «скретч»-регистров, названных R0, R1, R2, R3 и R4. Они могут только хранить данные. Если для данных в скретч-регистре требуется операция ALU, то соответствующий регистр должен быть сначала передан в GPR. Другие регистры включают 1-ниббловый «указательный» регистр с именем P, обычно используемый для выбора ниббла в GPR или диапазона нибблов (или для выравнивания непосредственных данных по определенному нибблу в GPR с циклическим переходом). Для доступа к памяти есть два 20-битных регистра указателя данных с именами D0 и D1. Архитектура Saturn также имеет регистр счетчика ПК или программы , который может взаимодействовать с GPR. Также имеется 8-уровневый, кольцевой, LIFO 20-битный аппаратный стек возврата, называемый RSTK, используемый при выдаче инструкции вызова подпрограммы. Кроме того, процессор Saturn оснащен 16-битным программным регистром состояния, называемым ST, и 1-ниббловым аппаратным регистром состояния, называемым HS, который, в частности, содержит флаг SB или «липкий бит», указывающий, была ли двоичная 1 сдвинута вправо от GPR. Кроме того, архитектура Saturn имеет 12-битный регистр OUT и 16-битный регистр IN, которые в системах на кристалле Yorke и Clarke используются для захвата ввода с клавиатуры, а также для управления звуковым сигналом. Также имеется 1-битный регистр флага переноса.
В дополнение к вышесказанному, процессор Saturn имеет простую, неприоритетную систему прерываний. Когда происходит прерывание, процессор завершает выполнение текущей инструкции, сохраняет счетчик программ в стеке аппаратного возврата (RSTK) и переходит на адрес 0x0000Fh, где предыдущее значение находится в полубайтах. [4] Процессор также напрямую взаимодействует с логикой сканирования клавиатуры.
На следующей схеме изображены регистры (каждый белый квадрат представляет собой 4 бита / полубайт, за исключением флага переноса, который представляет собой 1 бит):
Формат и поля регистра Saturn 64-битного GPR:
Данные в регистрах общего назначения могут быть доступны через поля, которые попадают на границы полубайтов, тогда как скретч-регистры допускают только операции загрузки и сохранения. Поля, как показано на схеме выше, это W (целые 64-битные GPR), A (адрес, первые 5 полубайтов GPR), S (знак мантиссы, старший полубайт GPR), XS (знак экспоненты, полубайт 2 GPR), M (мантисса, полубайты 3–14 GPR), X (экспонента, первые 3 полубайта GPR) и B (первый байт GPR). Кроме того, есть поле P, которое выбирает полубайт из GPR на основе 4-битного значения регистра P. Также есть поле WP, которое выбирает полубайты 0 через полубайт, выбранный в регистре P. 64 бита (16 полубайтов) могут хранить числа с плавающей точкой в формате BCD, закодированные в формате BCD и состоящие из полубайта со знаком (который равен «9», если число отрицательное), 12 цифр мантиссы и 3-значного порядка дополнения до 10, хранящегося в формате BCD (±499). [6] Внутреннее представление значений с плавающей точкой в формате BCD представляет собой 15-значную мантиссу с одним полубайтом со знаком в одном регистре, объединенную с 20-битным порядком в формате дополнения до 10 в другом регистре. Использование BCD вместо прямого двоичного представления выгодно для калькуляторов, поскольку позволяет избежать проблем округления , которые возникают при преобразовании двоичного числа в десятичное .
Адреса инструкций и данных процессора Saturn также основаны на полубайтах. Три регистра указателя (включая счетчик программ) и регистры адреса имеют ширину 20 бит. Благодаря этому архитектура Saturn может адресовать 1 М полубайтов или, что эквивалентно, 512 Кбайт . За пределами этого размера (например, в 48GX) используется переключение банков .
Оригинальный карманный компьютер HP-71B и HP-28C имели процессор Saturn в виде отдельного чипа. В сериях HP 48S/SX, 48G/GX и HP-28S, HP-27S, HP-42S, HP-32SII и HP-20S ядро ЦП Saturn интегрировано как часть более сложной интегральной схемы (ИС) SoC .
Ниже представлена целочисленная реализация алгоритма вычисления квадратного корня в десятичной системе счисления BCD в синтаксисе ассемблера Saturn Jazz / HP Tools:
** Далее предполагается, что AW содержит аргумент (< 1E14).** Результат (IP(SQRT(AW))) представлен в CW: SETDEС АСЛ W С=АВ А=А+АВ А=А+АВ А=А+CW АСР В С=0 Вт Р= 13 ЛК(1) 5 - КСО WP С=С-1 П -- С=С+1 П А=АС Вт ГОНК -- А=А+CW КСО W П=П-1 П=П-1 ГОНК - СЕТЕКС А=ХВ
Оригинальный процессор Saturn дал название всей архитектуре набора инструкций . Более поздние чипы имели собственные кодовые названия:
Кодовые названия ЦП вдохновлены участниками экспедиции Льюиса и Кларка 1804–1806 годов, первой сухопутной экспедиции США к побережью Тихого океана и обратно. Кодовые названия виртуальных ЦП/эмуляторов были вдохновлены прототипом «New-Yorke» на базе Saturn 8 МГц SoC, который так и не был запущен в производство. [12] По словам одного из членов ACO (Australian Calculator Operation), «Big Apple» произошло от кодового названия «New-Yorke» прототипа 8 МГц Saturn-based SoC в отсылке к Нью-Йорку, отсюда и названия «Big apple», «Mid apple» и «Little apple». [12]
Если показатель степени отрицательный, показатель степени кодируется как "1000 - ABS(показатель степени)"
[1]