跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
关于计算器百科
资助计算器百科
联系计算器百科
聊天室
友情链接
计算器百科
搜索
搜索
外观
登录
个人工具
登录
查看“︁User:Arnie97/HP Saturn Intro”︁的源代码
用户页
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
阅读
查看源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
查看源代码
查看历史
常规
链入页面
相关更改
用户贡献
日志
查看用户组
页面信息
外观
移至侧栏
隐藏
←
User:Arnie97/HP Saturn Intro
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{尚未完工}} 本条目介绍的是 [[HP-Apple系列|HP Apple]] {{黑幕|39gs}} 等 Saturn 系列计算器的基础知识。 == Saturn == Saturn 是 HP 于上世纪 80 年代为其计算器开发的一种''' 4 位微处理器''',该处理器有 Bert、Sacajawea、Lewis、Clarke、Yorke、New-Yorke 等子系列。<ref>{{cite web|url=https://en.wikipedia.org/wiki/HP_Saturn|title=英文维基百科:HP Saturn}}</ref> == Apple(Saturn+)系列 == 在 Saturn 处理器停产后,为了保持与 Saturn 平台原有程序的兼容性,HP 推出了一系列'''在 ARM 处理器上运行 Saturn 模拟器'''的计算器,与上面的那些子系列相对,软件模拟的 Saturn 处理器被称为 '''Apple 系列'''。这些模拟处理器相比之前真实的 Saturn 处理器拥有更多的功能,因此也被称作 '''Saturn+'''。 Apple 系列推出后,39、49 系列的图形计算器均发布了多款对应的新型号: {| class="wikitable" |- ! 系列 !! 原型号(Yorke 系列处理器) !! 新型号(Apple 系列模拟处理器) |- | [[HP-39系列|39]] || 39g 40g || 39g+ 39gs 40gs |- | [[HP-50G|49]] || 49g || 48gII 49g+ 50g |} 这些新型号的系统软件与相对应的原有型号非常相近,只不过系统是运行在模拟器内,而不是运行在真实的 Saturn 处理器上。因此,很多相关的术语保留了下来。 '''值得注意的是,名为“HP ??gII”的计算器(“?”代指数字)往往与同编号的其他产品大相径庭,切勿混淆。例如,HP 48gII 不属于 HP 48 系列,而属于 HP 49 系列;而 [[HP-39系列#HP-39GII|HP 39gII]] 则不属于 Saturn 系列产品,而与后期推出的 [[HP-Prime|HP Prime]] 有几分相近。''' == 系统架构概述 == == Saturn 汇编语言 == 无论是原有 Saturn 系列还是 Apple 系列,由于使用了或真或假的 Saturn 处理器,显然都可以直接使用 Saturn 汇编语言编写程序。 Saturn 汇编常与编译型语言 System RPL 共同使用,相关内容详见[[#System RPL|下文]],在此不再赘述。 == RPN == RPN('''R'''everse '''P'''olish '''N'''otation,逆波兰表示法)将运算符置于操作数的后面,因此又称'''后缀表示法'''。与之相对的是绝大多数语言采用的'''代数表示法'''(Algebraic Notation,运算符位于操作数之间,又称中缀表示法)和 Lisp 等语言采用的波兰表示法(运算符位于操作数之前,又称前缀表示法)。 {| class="wikitable" |- ! 表达式记法 !! 运算符位置 !! 示例 !! 采用该记法的语言 |- | 波兰表示法 || 前缀 || * - 3 4 5 || Scheme,Common Lisp 等 |- | 代数表示法 || 中缀 || (3 - 4) * 5 || C++,Python,[[TI-Lua]],HP Basic 等 |- | 逆波兰表示法 || 后缀 || 3 4 - 5 * || Forth,System RPL 等 |} 逆波兰表达式的解释器一般是基于栈(Stack)这一数据结构的。要理解 RPN,最好先理解栈的概念。 RPN 解释求值的过程一般是:遇到操作数时入栈;遇到运算符时,取对应数量的操作数出栈,求值,将结果入栈;最终栈顶就是表达式的值。 例如,常规中缀记法的 <code>12 * (3 + 4) - 6 + 8 / 2</code> 用 RPN 写作 <code>12 3 4 + * 6 - 8 2 / +</code>,其运算过程如下: [[File:RPN运算过程示意图.png|无框|RPN运算过程示意图]] * 首先,12、3、4 依次入栈。 * 输入加号时,由于它是二元运算符,会弹出栈顶的两个数进行运算,并将结果 7 压入栈中。 * 乘法同样是二元运算,弹出栈顶的 12 和 7 两个数,并将结果 84 返回栈顶。 * 随后,数字 6 入栈。 * 之后是减法,取出栈顶的 84 和 6,并返回结果 78。 * 随后,8 和 2 入栈。 * 之后是除法,取出栈顶的 8 和 2,并将结果 4 压入栈中。 * 最后取出 4 和 78 做加法,得到最终结果 82。 RPN 的运算符之间不存在优先级的高低,不需要使用括号来表明运算的优先级,因此能减少输入部分复杂表达式时按键的次数。 例如,常规中缀记法中 <code>3 - 4 * 5</code> 与 <code>(3 - 4) * 5</code> 的意义不相同,需要用括号加以区分;但后缀记法中前者写做 <code>3 4 5 * -</code> ,后者则写做 <code>3 4 - 5 *</code> 。 == System RPL == System RPL(其中 RPL 指 '''R'''everse '''P'''olish '''L'''isp)是 HP 计算器上广泛使用的一种'''编译型语言'''。顾名思义,该语言中的语句采用逆波兰表示法。 HP 38、39(40)、48、49(50)等系列的图形计算器均支持该语言<ref>{{cite web|url=https://en.wikipedia.org/wiki/RPL_(programming_language)|title=英文维基百科:RPL}}</ref>,且大部分系统软件和很多第三方软件由该语言写就。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 的[[#调用 System RPL|相关章节]],在此不再赘述。 在 HP 49(50)系列计算器内置的文件管理器(Filer)中,User RPL 代码的文件类型为 <code>PROG</code>,System RPL 源码的类型为普通字符串 <code>STRNG</code>,而 System RPL 编译出的二进制对象类型为 <code>CODE</code>。 == HP Basic == HP Basic 是 HP 38、39(40)系列计算器的解释型语言,由于该语言的代码通过解释器执行,且解释器本身又运行在速度缓慢的 Saturn 处理器或模拟器上,因此速度是本文提及的所有语言中最慢的。 由于其为解释型语言,我们仅需记事本等纯文本编辑器即可在 PC 上进行该语言的开发。鉴于部分特殊符号是用多个 ASCII 字符来表示的(如赋值号 <code>►</code> 表示为 <code>\|></code>),为了输入这些符号而免于记忆对应的 ASCII 序列,可以使用 [[#ADK|ADK]] 中的文本编辑器代替记事本进行开发。为了将代码传入计算器中,代码头部应符合特定的格式,参见[[#HP Saturn 系列的文件类型(外部表示)|下文中的说明]]。 想学习 HP Basic 程序的编写,仅需阅读[http://welcome.hp-ww.com/ctg/Manual/c00751812.pdf HP 39gs 用户手册](俗称说明书)即可。高级用法则需要对 [[#System RPL|System RPL]] 有所了解,见本章接下来两节的内容。 === 与 User RPL 和 System RPL 的关系 === HP Basic 的定位与 HP 48、49(50)系列中的 User RPL 相似——用户在 HOME 界面中输入的有效指令均为合法的 HP Basic 代码。 === 调用 System RPL === === ADK === '''ADK'''('''A'''plet '''D'''evelop '''K'''it,Aplet 开发套件)是 '''16 位''' Windows 平台上的 '''HP Basic 开发工具''',该工具可以帮助用户编写 HP Basic,使用 HP Basic 扩充现有 Aplet 的功能(见 HP 39gs 用户手册第 18-10 页)。值得一提的是,该工具能编辑 Aplet 中嵌入的 Note 和 Sketch,因此您'''可以使用该工具将文本文档和黑白图片传入计算器显示''',这对于尚未学会[[#HP Saturn 系列的文件类型(外部表示)|文件头部如何编写]]的用户尤为有用。 虽然该工具的名称为 Aplet 开发套件,但该工具'''仅能在现有 Aplet 的基础上,对其 Views 菜单进行扩充'''(例如,为 Function Aplet 添加自动设置定义域和值域的功能)。要开发全新的 Aplet,请使用 [[#System RPL|System RPL]] 或 [[#HPGCC|HPGCC]]。 由于 [https://zh.wikipedia.org/wiki/X86-64 AMD64] 平台的固有限制,'''64 位系统无法兼容 16 位应用'''。如果您需要在 64 位系统中运行该应用,建议用 DOSBox、Hyper-V 等虚拟机运行 Windows 3.1、Windows 95 等 16 位操作系统或 Windows XP 等 32 位操作系统。 == HPGCC == === ARM Toolbox === === Aplet 框架 === === 内存布局与固件 === == 数据类型与联机传输 == === 文件类型的判定:扩展名与特征签名 === 不同类型的文件需要用不同的方式解析。为了正确理解文件中数据的含义,首先需判断出文件的类型。 文件类型的标示和识别主要有两种方式: * 文件'''名称'''的某个特定部分指示一个文件的类型——通常是最后一个小数点后的部分,也就是'''扩展名(Extension)'''。 * 文件'''内容'''的某个特定部分,即'''特征签名(File Signature)'''指示一个文件的类型——通常是最前面的部分,也就是'''头部(Header)'''。 扩展名最早在 [https://en.wikipedia.org/wiki/CP/M CP/M] 操作系统中被采用,而后又随一脉相承的 DOS 和 Windows 得到了推广;特征签名则在 <span style="font-variant: small-caps;">Unix</span> 中被广泛应用,而后又被 Linux 等操作系统所继承下来。由于两类操作系统均得到了广泛的应用,现实中两种方式常常共存: {| class="wikitable sortable" |- ! 文件类型 !! 扩展名 !! 特征签名<ref>{{cite web|url=https://en.wikipedia.org/wiki/List_of_file_signatures|title=英文维基百科:文件特征签名列表}}</ref> |- | PDF 文档 || pdf || <code>%PDF</code> |- | ZIP 压缩文件 || zip docx pptx xlsx 等 || <code>PK</code>(设计者 '''P'''hil '''K'''atz) |- | RAR 压缩文件 || rar || <code>Rar!</code> |- | CAB 压缩文件 || cab || <code>MSCF</code>('''M'''icro'''s'''oft '''C'''abinet '''F'''ile) |- | [https://en.wikipedia.org/wiki/DOS_MZ_executable MZ 可执行文件] [https://zh.wikipedia.org/wiki/可移植可执行 PE 可执行文件] || com exe exe dll sys ocx cpl scr 等 || <code>MZ</code>(设计者 '''M'''ark '''Z'''bikowski) (为向下兼容 DOS,PE 文件头部与之相同) |- | [https://zh.wikipedia.org/wiki/可執行與可鏈接格式 ELF 可执行文件] || 无 || <code>\x7F</code> <code>E</code> <code>L</code> <code>F</code> |- | PNG 图片 || png || <code>\x89</code> <code>P</code> <code>N</code> <code>G</code> |- | GIF 图片 || gif || <code>GIF89a</code> 或 <code>GIF87a</code> |- | JPEG 图片 || jpg jpeg || 以 <code>\xFF</code> <code>\xD8</code>开始,<code>\xFF</code> <code>\xD9</code> 结束 |- | Midi 音轨 || midi || <code>MThd</code>('''M'''IDI '''T'''rack '''h'''ea'''d'''er) |- | Java 字节码 || class || <code>\xCA</code> <code>\xFE</code> <code>\xBA</code> <code>\xBE</code>,即十六进制 <code>CAFEBABE</code> |} 从上面的例子中可以看出,既有一个扩展名对应多种特征签名的情况(如 GIF 文件),也有多种扩展名对应单一特征签名的情况(如 PE 文件)。当扩展名和特征签名共存时,有时会结合两种因素来决定文件如何解析,更多时候则只选择其中的主要因素来判断文件的类型。例如,将 JPEG 图片的扩展名更改为 png 仍能用多数图片查看器正常打开,说明这些软件仅通过文件内容中的特征签名来判断文件的格式,扩展名无关紧要。'''同样,HP Saturn 系列计算器也仅判定文件的特征签名,而扩展名的作用只是辅助人类的辨识。''' === HP Saturn 系列的文件类型(外部表示) === {| class="wikitable sortable" |- ! 文件类型 !! 常见扩展名 !! 特征签名 |- | HP 39(40)系列 || 000 apt lib 等 || <code>HP39Asc?</code>(文本,'''ASC'''II) <code>HP39Bin?</code>(二进制,'''Bin'''ary) |- | HP 48 系列 || 不固定 || <code>HPHP48-?</code> |- | HP 49(50)系列 || hp lib 等 || <code>HPHP49-?</code> |} 上表中,<code>?</code> 代指表示文件类型的一个大写拉丁字母;同一字母在不同系列中有着不同的意义,详见下文各章节。另外,由于扩展名并无实质性作用,用户可根据自己的喜好和实际情况选择不同的扩展名——例如,为了方便用记事本打开,可以用 txt 作为扩展名;<ref>{{cite web|url=https://github.com/Arnie97/neko-notepad/blob/master/readme_40gs.txt|title=GitHub:Neko Notepad}}</ref>为了方便用户区分不同机种的文件,跨平台应用的开发者有时直接用 48、49 等作为扩展名。<ref>{{cite web|url=http://www.hpcalc.org/details/476|title=HPCalc.org:Columns+}}</ref> ==== HP 39(40)系列 ==== ==== HP 48 系列 ==== ==== HP 49(50)系列 ==== === HP Saturn 系列的对象类型(内部表示) === 表面上看,HP 39(40)、48、49(50)的文件格式互不相同,PC 上的官方联机工具(Connectivity Kit)也形式各异。但是,多项证据已经表明,'''不同系列的 Saturn 机种使用相同的方式来储存 RAM 中的对象'''。 我们可以通过下面的实验来验证这一结论:用含有 HP 48gII 固件的 ROM 替换 HP 39gs 原有的闪存,期间保持电源供给,以免 RAM 中的数据丢失。那么,当进入 49 系列的系统后,我们将看到之前在 39 系列系统中储存的所有文件(和文件夹)。鉴于 39 系列系统中并未提供完整的文件管理器,如果想探查 39 系列计算器的目录结构,除了选择 [[#调用 System RPL|39 系统中不完整的文件管理器]]或自己编写文件管理器外,亦可利用这一特性,借助 49 系列内置的文件管理器来达到目的。 综上所述,'''不同系列间文件格式的差异,本质上是相同对象类型的不同序列化形式''',传入计算器后的生成的对象是相同的,可谓“换汤不换药”。 === 串口与驱动程序 === === Kermit 与 XMODEM === == 参考文献 ==
该页面嵌入的页面:
Template:Cite web
(
查看源代码
)
Template:Info
(
查看源代码
)
Template:NS
(
查看源代码
)
Template:PlainLink
(
查看源代码
)
Template:尚未完工
(
查看源代码
)
Template:黑幕
(
查看源代码
)
Module:Citation/CS1
(
查看源代码
)
Module:Citation/CS1/Configuration
(
查看源代码
)
Module:Citation/CS1/Date validation
(
查看源代码
)
Module:Citation/CS1/Whitelist
(
查看源代码
)
返回
User:Arnie97/HP Saturn Intro
。
搜索
搜索
查看“︁User:Arnie97/HP Saturn Intro”︁的源代码
添加话题