PASTA/80:面向Z80微处理器的简易Pascal交叉编译器
PASTA/80 是一款简易的Pascal交叉编译器,其目标平台为Z80微处理器。该编译器遵循 Niklaus Wirth 提倡的单遍递归下降编译方法,在语法分析过程中直接生成代码,因此编译速度极快,但生成的代码可能不是最优的。
支持的平台与特性
目标平台:
- CP/M
- ZX Spectrum 48K/128K/Next
- Agon Light/Console8
支持的Pascal语言特性:
- 基本数据类型(Boolean, Byte, Char, Integer, Pointer, Real, String)
- 复杂类型构造:数组、记录、集合、枚举、子范围、指针
- 控制结构:条件语句、循环语句、
with语句
- 过程与函数,支持值参和变参及嵌套
- 标准I/O过程(ReadLn, WriteLn等)
- 动态堆内存管理(最大32767字节)
- 内联汇编(使用操作码形式)
- 部分目标平台支持覆盖(Overlays)以突破64K内存限制
语言扩展:
- 条件编译指令
- C风格单行注释
- 二进制字面量、
Break/Continue语句
- 键盘查询函数(KeyPressed, ReadKey)
- 枚举类型在读写语句中的支持
- 简单的断言(Assert)设施与调试断点功能
编译器构建与使用
编译器自身用Pascal编写,可使用Free Pascal(如3.2.2版)编译。其后端依赖 sjasmplus 汇编器生成最终二进制代码。编译器通过命令行参数指定目标平台:
pasta <文件>:默认为CP/M目标
pasta --zx48:编译为ZX Spectrum 48K目标
pasta --zx128:编译为ZX Spectrum 128K目标
pasta --zxnext:编译为ZX Spectrum Next目标
pasta --agon:编译为Agon目标
输出格式:
- 二进制文件(.com 或无扩展名的原始二进制)
- 快照文件(.sna)
- 磁带文件(.tap,包含BASIC加载器)
- 可运行目录(.run,用于ZX Spectrum Next)
优化选项:支持--opt(窥孔优化)和--dep(依赖分析以移除未使用代码)。
覆盖(Overlays)系统
ZX Spectrum 128K、Next和Agon目标支持覆盖,允许程序突破64K地址空间限制。覆盖通过overlay关键字标记过程或函数,编译器自动管理内存换入换出。每个覆盖模块最大8K。启用覆盖需使用--ovr参数。
调试与断言
- 断点:在源代码中插入
Debug语句,可设置条件。支持为Fuse、CSpect、Fab Agon Emulator生成断点。
- 断言:使用
Assert语句检查条件,失败不会终止程序但会计数。使用--release参数编译可移除所有调试和断言代码。
编译器指令
支持文件包含、条件编译、IO检查、栈溢出检查等指令。预定义了反映当前编译器和目标平台的符号(如SYS_CPM, CPU_Z80N等),便于编写跨平台代码。
集成开发环境(IDE)
编译器可启动为交互式迷你IDE,界面类似Turbo Pascal 3.0。它集成外部工具如nano编辑器、tnylpo(CP/M模拟器)、Fuse、CSpect和Fab Agon Emulator,用于编辑和运行程序。
许可与说明
PASTA/80编译器在 GNU通用公共许可证(GPLv3) 下发布,但运行时库带有链接例外,允许用户自由发布生成的二进制文件。示例代码视为公共领域。
编译器目前不支持部分Turbo Pascal 3.0指令、某些标准文件、链接执行功能,且生成的二进制体积相对较大。未来计划通过重写运行时库为Z80汇编来优化。