Gigatron 编程

Hacker News Top 新闻

摘要

一篇技术文章,详细描述了作者尝试理解和编程 Gigatron TTL 彩色微型计算机的过程,涵盖其哈佛架构、CPU 指令和编程技巧。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/11 11:42

# 为 Gigatron 编程 来源:https://www.iwriteiam.nl/PGigatron.html 本页面是我自己尝试理解并编程 Gigatron TTL 彩色微型计算机(https://www.iwriteiam.nl/Hacker.html#gigatron)的记录。我使用了 GitHub 上 kervinck/gigatron-rom(https://github.com/kervinck/gigatron-rom#readme)中的文件。 **免责声明:这不是一个官方的 Gigatron 页面,我对其中的错误不承担责任。如果发布了新版本的 ROM,本页面可能会过时。** ## CPU Gigatron 的 TTL IC 实现的 CPU 采用哈佛架构(https://en.wikipedia.org/wiki/Harvard_architecture),这意味着它没有用于 ROM 和 RAM 的共享总线。实际上,ROM 仅用于存储指令,并且没有指令可以直接访问 ROM。(不过,有一个巧妙技巧(https://www.iwriteiam.nl/D1804.html#8b),可以通过它“读取”ROM 中的数据。)该 CPU 是一个 8 位处理器,具有 14 位程序计数器和 15 位 RAM 寻址范围。它有三个 8 位寄存器和 8 位输入与输出。 ## CPU 指令 我重写了 gtemu.c 程序(https://github.com/kervinck/gigatron-rom/blob/master/gtemu.c),使其能够用某种伪 C 语言打印出不同指令的实际操作。经过多次修订,得到下表。行和列上的数字需要相加得到指令编号。我调整了行的顺序,使相似(或相同)的指令分组在一起。“hi”函数返回数值的高字节。需要注意的是,用于访问 RAM 的值会被“裁剪”到 0x7fff,因为只有 32 千字节的 RAM。除了修改程序计数器的指令外,程序计数器会在所有指令之后递增。如果一条指令执行两个操作,则用分号分隔。 `` # 00 # 20 # 40 # 60 # 80 # a0 # c0 # e0 ---+-----------------------+---------------------------+---------------------------+---------------------------+---------------------------+---------------------------+--------------------------+--------------------------------- 00 # A = oper # A &= oper # A |= oper # A ^= oper # A += oper # A -= oper # RAM[oper] = oper # PC = (Y>>8)|oper 04 # A = oper # A &= oper # A |= oper # A ^= oper # A += oper # A -= oper # RAM[X] = oper # if (A < 0) PC = hi(PC)|oper 08 # A = oper # A &= oper # A |= oper # A ^= oper # A += oper # A -= oper # RAM[(Y>>8)|oper] = oper # if (A > 0) PC = hi(PC)|oper 0c # A = oper # A &= oper # A |= oper # A ^= oper # A += oper # A -= oper # RAM[(Y>>8)|X] = oper # if (A != 0) PC = hi(PC)|oper 10 # X = oper # X = A & oper # X = A | oper # X = A ^ oper # X = A + oper # X = A - oper # RAM[oper] = oper; X = A # if (A == 0) PC = hi(PC)|oper 14 # Y = oper # Y = A & oper # Y = A | oper # Y = A ^ oper # Y = A + oper # Y = A - oper # RAM[oper] = oper; Y = A # if (A <= 0) PC = hi(PC)|oper 18 # OUT = oper # OUT = A & oper # OUT = A | oper # OUT = A ^ oper # OUT = A + oper # OUT = A - oper # RAM[oper] = oper # if (A >= 0) PC = hi(PC)|oper 1c # OUT = oper; X++ # OUT = A & oper; X++ # OUT = A | oper; X++ # OUT = A ^ oper; X++ # OUT = A + oper; X++ # OUT = A - oper; X++ # RAM[(Y>>8)|X++] = oper # PC = hi(PC)|oper 01 # A = RAM[oper] # A &= RAM[oper] # A |= RAM[oper] # A ^= RAM[oper] # A += RAM[oper] # A -= RAM[oper] # RAM[oper] = undef # PC = (Y>>8)|RAM[oper] 05 # A = RAM[X] # A &= RAM[X] # A |= RAM[X] # A ^= RAM[X] # A += RAM[X] # A -= RAM[X] # RAM[X] = undef # if (A < 0) PC = hi(PC)|RAM[oper] 09 # A = RAM[(Y>>8)|oper] # A &= RAM[(Y>>8)|oper] # A |= RAM[(Y>>8)|oper] # A ^= RAM[(Y>>8)|oper] # A += RAM[(Y>>8)|oper] # A -= RAM[(Y>>8)|oper] # RAM[(Y>>8)|oper] = undef # if (A > 0) PC = hi(PC)|RAM[oper] 0d # A = RAM[(Y>>8)|X] # A &= RAM[(Y>>8)|X] # A |= RAM[(Y>>8)|X] # A ^= RAM[(Y>>8)|X] # A += RAM[(Y>>8)|X] # A -= RAM[(Y>>8)|X] # RAM[(Y>>8)|X] = undef # if (A != 0) PC = hi(PC)|RAM[oper] 11 # X = RAM[oper] # X = A & RAM[oper] # X = A | RAM[oper] # X = A ^ RAM[oper] # X = A + RAM[oper] # X = A - RAM[oper] # RAM[oper] = undef; X = A # if (A == 0) PC = hi(PC)|RAM[oper] 15 # Y = RAM[oper] # Y = A & RAM[oper] # Y = A | RAM[oper] # Y = A ^ RAM[oper] # Y = A + RAM[oper] # Y = A - RAM[oper] # RAM[oper] = undef; Y = A # if (A <= 0) PC = hi(PC)|RAM[oper]

相似文章

The Art of CHIP-8

Lobsters Hottest

A deep-dive technical article exploring the CHIP-8 programming language, its instruction set, interpreter quirks, and strategies for writing portable CHIP-8 programs.

GPT2-BASIC: 基于BASIC的便携式机器智能

Lobsters Hottest

GPT2-BASIC 在 FreeBASIC 中为 DOS 系统实现了 GPT 风格的 Transformer 推理引擎,使用定点算术和本地模型工件,在老旧硬件上运行 AI 辅助任务。

构建 TD4 4 位 CPU

Hacker News Top

本文详细介绍了基于《如何构建 CPU》一书及开源 PCB 设计,亲自动手组装并测试 TD4 4 位 CPU 的过程。