跳至內容

用戶:Arnie97/HP Saturn Intro

出自计算器百科
於 2017年5月31日 (三) 18:19 由 Arnie97對話 | 貢獻 所作的修訂 (增加章节)
此用戶頁面尚未完工。
此用戶頁面尚未完工。原作者將會繼續進行編寫,而您也可以對該條目進行編輯

本條目介紹的是 HP Apple 39gs 等 Saturn 系列計算器的基礎知識。

Saturn

Saturn 是 HP 於上世紀 80 年代為其計算器開發的一種 4 位微處理器,該處理器有 Bert、Sacajawea、Lewis、Clarke、Yorke、New-Yorke 等子系列。[1]

Apple(Saturn+)系列

在 Saturn 處理器停產後,為了保持與 Saturn 平台原有程序的兼容性,HP 推出了一系列在 ARM 處理器上運行 Saturn 模擬器的計算器,與上面的那些子系列相對,軟件模擬的 Saturn 處理器被稱為 Apple 系列。這些模擬處理器相比之前真實的 Saturn 處理器擁有更多的功能,因此也被稱作 Saturn+。 Apple 系列推出後,39、49 系列的圖形計算器均發布了多款對應的新型號:

系列 原型號(Yorke 系列處理器) 新型號(Apple 系列模擬處理器)
39 39g 40g 39g+ 39gs 40gs
49 49g 48gII 49g+ 50g

這些新型號的系統軟件與相對應的原有型號非常相近,只不過系統是運行在模擬器內,而不是運行在真實的 Saturn 處理器上。因此,很多相關的術語保留了下來。

值得注意的是,名為「HP ??gII」的計算器(「?」代指數字)往往與同編號的其他產品大相逕庭,切勿混淆。例如,HP 48gII 不屬於 HP 48 系列,而屬於 HP 49 系列;而 HP 39gII 則不屬於 Saturn 系列產品,而與後期推出的 HP Prime 有幾分相近。

系統架構概述

Saturn 匯編語言

無論是原有 Saturn 系列還是 Apple 系列,由於使用了或真或假的 Saturn 處理器,顯然都可以直接使用 Saturn 匯編語言編寫程序。

Saturn 匯編常與編譯型語言 System RPL 共同使用,相關內容詳見下文,在此不再贅述。

RPN

RPN(Reverse Polish Notation,逆波蘭表示法)將運算符置於操作數的後面,因此又稱後綴表示法。與之相對的是絕大多數語言採用的代數表示法(Algebraic Notation,運算符位於操作數之間,又稱中綴表示法)和 Lisp 等語言採用的波蘭表示法(運算符位於操作數之前,又稱前綴表示法)。

表達式記法 運算符位置 示例 採用該記法的語言
波蘭表示法 前綴 * - 3 4 5 Scheme,Common Lisp 等
代數表示法 中綴 (3 - 4) * 5 C++,Python,TI-Lua,HP Basic 等
逆波蘭表示法 後綴 3 4 - 5 * Forth,System RPL 等

逆波蘭表達式的解釋器一般是基於棧(Stack)這一數據結構的。要理解 RPN,最好先理解棧的概念。 RPN 解釋求值的過程一般是:遇到操作數時入棧;遇到運算符時,取對應數量的操作數出棧,求值,將結果入棧;最終棧頂就是表達式的值。

例如,常規中綴記法的 12 * (3 + 4) - 6 + 8 / 2 用 RPN 寫作 12 3 4 + * 6 - 8 2 / +,其運算過程如下:

RPN運算過程示意圖

  • 首先,12、3、4 依次入棧。
  • 輸入加號時,由於它是二元運算符,會彈出棧頂的兩個數進行運算,並將結果 7 壓入棧中。
  • 乘法同樣是二元運算,彈出棧頂的 12 和 7 兩個數,並將結果 84 返回棧頂。
  • 隨後,數字 6 入棧。
  • 之後是減法,取出棧頂的 84 和 6,並返回結果 78。
  • 隨後,8 和 2 入棧。
  • 之後是除法,取出棧頂的 8 和 2,並將結果 4 壓入棧中。
  • 最後取出 4 和 78 做加法,得到最終結果 82。

RPN 的運算符之間不存在優先級的高低,不需要使用括號來表明運算的優先級,因此能減少輸入部分複雜表達式時按鍵的次數。 例如,常規中綴記法中 3 - 4 * 5(3 - 4) * 5 的意義不相同,需要用括號加以區分;但後綴記法中前者寫做 3 4 5 * - ,後者則寫做 3 4 - 5 *

System RPL

System RPL(其中 RPL 指 Reverse Polish Lisp)是 HP 計算器上廣泛使用的一種編譯型語言。顧名思義,該語言中的語句採用逆波蘭表示法。

HP 38、39(40)、48、49(50)等系列的圖形計算器均支持該語言[2],且大部分系統軟件和很多第三方軟件由該語言寫就。HP 38、39(40)、49(50)等新系列計算器的很多第三方應用來源於對 HP 48 等早期系列中 System RPL 應用的移植和重新編譯。

作為一種貼近底層的編譯型系統編程語言,System RPL 常與 Saturn 匯編共同使用,這與 PC 平台上的 C 語言和 x86 匯編語言有着相通之處。這兩種語言可以用 PC 上的 HP Tools 開發。此外,HP 49、50 等系列的計算器內置了 MASD,可以直接在計算器上進行編譯、匯編、調試操作。注意 HP Tools 和 MASD 均是編譯器本身,並不包含頭文件(Entry Points,或簡稱 Entries),如果不希望手動聲明系統提供的函數,需要自行下載頭文件,其中的原理與 C 語言是相通的。HP 28、38、39(40)、48、49(50)系列的頭文件互不相同,下載時需根據所針對的機型正確選擇。

Library

Aplet

User RPL

User RPL 是 HP RPN 計算器上的一種解釋型語言。顧名思義,該語言同樣採用逆波蘭表示法。

HP 28、48、49(50)等系列的計算器支持該語言代碼的運行。如果在設置中選擇 RPN 輸入模式,那麼用戶在計算界面中輸入的有效指令實際上均可以視為合法的 User RPL 代碼。

與 System RPL 的關係

User RPL 的語法和 System RPL 相近,但代碼可以直接在計算器上運行而不需要編譯。運行時發生的大部分錯誤會被正確捕獲,且部分較為危險的底層命令無法直接使用。這些特性使得 User RPL 的編寫和調試更方便和安全,但也使它的運行速度較 System RPL 緩慢,在需要對系統底層進行操控及性能因素至關重要的場合(如某些遊戲)應當選擇 System RPL。

User RPL 能通過多種方式調用 System RPL 特有的函數,相關內容併入下文 HP Basic 的相關章節,在此不再贅述。

在 HP 49(50)系列計算器內置的文件管理器(Filer)中,User RPL 代碼的文件類型為 PROG,System RPL 源碼的類型為普通字符串 STRNG,而 System RPL 編譯出的二進制對象類型為 CODE

HP Basic

HP Basic 是 HP 38、39(40)系列計算器的解釋型語言,其定位與 HP 48、49(50)系列中的 User RPL 相似——用戶在 HOME 界面中輸入的有效指令均為合法的 HP Basic 代碼。由於該語言的代碼通過解釋器執行,且解釋器本身又運行在 Saturn 處理器或模擬器上,因此速度是本文提及的所有語言中最慢的。

調用 System RPL

HPGCC

ARM Toolbox

Aplet 框架

內存布局與固件

文件與聯機傳輸

HP 39(40)系列

HP 48 系列

HP 49(50)系列

參考文獻