#gal #assembly #cli #pal #jedec #jed

bin+lib galette

A GAL汇编器,与galasm兼容,用Rust编写

1 个不稳定版本

0.3.0 2021年8月14日

#3 in #pal

MIT 协议

78KB
2K SLoC

蛋糕:21世纪的GAL汇编器

蛋糕是一个与galasm兼容的GAL汇编器,它接受一组方程,并生成一个适合输入到GAL编程器的JEDEC文件。

用法

输入文件格式是GALasm格式的略微放宽的修改版本。差异包括

  • 在.pld文件末尾的“DESCRIPTION”部分现在是可选的。
  • 实际上不需要包含任何方程!所有输出都是未驱动的。
  • 可以使用长的引脚名称,唯一的缺点是它会使输出文件失去对齐。
  • 三态使能等不再需要在主要输出定义之后定义(只要该定义存在)。
  • 换行符很重要。
    • 我们假设每行一个方程。
    • 引脚列表必须平均分配到两行。
    • 这比galasm更少自由形式,但希望这会使理解语法错误更容易。
    • 也许我会改变主意!

galette --help 会给你一个(与GALasm兼容的)命令行选项的摘要。

更多文档

有关更多文档,请参阅 galasm 的文档。我已经决定不将它们包含在这个仓库中,以简化许可情况。

背景

当我提到“21世纪的GAL汇编器”时,我的舌头紧紧地夹在嘴里。现在没有人真的需要GAL汇编器。这是过时的技术。:)

GALasm 是20世纪末Galer的更新,Galer是一个90年代初为Amiga编写的开源GAL汇编器。它用C编写,风格属于另一个时代。

我试图编程GAL,遇到一些问题。最终,发现是我的电源有问题,但在过程中我发现GALasm中有几个错误,并且总体感觉它需要彻底翻新。我一直试图学习Rust,因此逐步将其移植到内存安全语言,并在途中重构结构,这似乎是一个有趣的项目。

这就是结果。这是一个yak-shaving的绝佳例子。

源组织

从最低层依赖到最高层运行,我们有

  • errors.rs 供所有其他东西使用错误代码。
  • chips.rs 不同GAL类型的抽象层。
  • gal.rs 包含使用熔丝数据编程的GAL结构。
  • parser.rs 解析输入文件格式。
  • blueprint.rs 将输入转换为标准化形式,以构建熔丝。
  • gal_builder.rs 根据蓝图填充GAL结构。
  • writer.rs 写出生成的GAL结构。
  • lib.rs 顶级粘合剂。
  • main.rs 薄命令行包装器。

测试

因为我一直在尝试保持galasm的行为,所以我专注于端到端测试(输入文件,查看输出结果)而不是单元测试,这允许我在不需要保持任何特定内部结构的情况下重构程序,只要输出结果相同。

所以,如果你想知道为什么没有单元测试,那就是原因。

要运行测试,./run_tests.sh

许可

我正在MIT许可下发布我的代码。虽然galette基于galasm,但这是在不同语言中重新实现了功能,结构完全不同。

我认为在这里有一个干净的断裂是有用的,因为galasm的许可情况并不特别清楚,有一个明确的开源许可的GAL汇编器是很有帮助的。

当然,我仍然非常感激Alessandro Zummo和Christian Habermann为galasm提供的起点。

待办事项

一些我希望能够完成的事情

  • 为与galasm有意的不同情况进行测试。
  • 特别是,长引脚名称,没有方程式,没有DESCRIPTION,辅助方程在主方程之前。
  • 添加覆盖率测试。

依赖项

~1.4–2MB
~34K SLoC