Memo-1:从零构建的6502计算机,使用Minitel作为终端

Hacker News Top 工具

摘要

对Memo-1的描述,一款从零构建的基于65C02的计算机,为乐趣和学习而设计,包含详细的内存映射、VIA和ACIA规格,以及用于摇杆和音调生成的BASIC例程。

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

缓存时间: 2026/07/30 22:52

MemoireMorte/Memo-1

来源:https://github.com/MemoireMorte/Memo-1

Memo-1

一款基于65C02的简易计算机,用于娱乐和学习目的。
物料清单和构建说明可随ROM文件一同在此处找到。

技术信息

Memo-1 由一块运行在1MHz的65C02 CPU构成,简陋地连接了32K RAM、16K ROM,并配备了一个65C22 VIA和一个6551 ACIA(非W65C51)。系统设计上保留了8K ROM的扩展空间,并连接一台Minitel 1b作为终端。

地址映射

高位半字节 (A15..A12) | 十六进制范围 | 选择信号 -----------------------+----------------+----------------- 0000 (0x0) | 0000 - 0FFF | RAM 0001 (0x1) | 1000 - 1FFF | RAM 0010 (0x2) | 2000 - 2FFF | RAM 0011 (0x3) | 3000 - 3FFF | RAM 0100 (0x4) | 4000 - 4FFF | RAM 0101 (0x5) | 5000 - 5FFF | RAM 0110 (0x6) | 6000 - 6FFF | RAM 0111 (0x7) | 7000 - 7FFF | RAM -----------------------+----------------+----------------- 1000 (0x8) | 8000 - 8FFF | VIA 1001 (0x9) | 9000 - 9FFF | ACIA -----------------------+----------------+----------------- 1010 (0xA) | A000 - AFFF | 外部插槽 1011 (0xB) | B000 - BFFF | 外部插槽 -----------------------+----------------+----------------- 1100 (0xC) | C000 - CFFF | ROM 1101 (0xD) | D000 - DFFF | ROM 1110 (0xE) | E000 - EFFF | ROM 1111 (0xF) | F000 - FFFF | ROM

外部插槽

外部插槽是一个32针连接器(J4),暴露了完整的CPU总线。

针脚 | 信号 针脚 | 信号 ----+--------- ----+--------- 1 | A0 2 | D0 3 | A1 4 | D1 5 | A2 6 | D2 7 | A3 8 | D3 9 | A4 10 | D4 11 | A5 12 | D5 13 | A6 14 | D6 15 | A7 16 | D7 17 | A8 18 | GND 19 | A9 20 | /Ext select 21 | A10 22 | CLK 23 | A11 24 | /IRQ 25 | A12 26 | /NMI 27 | A13 28 | /RES 29 | A14 30 | R/W 31 | A15 32 | +5V

奇数针脚承载地址总线(A0–A15),偶数针脚2–16承载数据总线(D0–D7),其余偶数针脚承载控制信号。当CPU访问地址A000–BFFF时,/Ext select信号被拉低。

它可用于从外部ROM运行代码(代码必须编译为在A000至BFFF之间执行)。
这也是磁带扩展的插槽(参考KCS标准)。该扩展允许在BASIC中保存/加载代码,并保存/加载地址空间中任意位置的原始内存转储。

VIA

65C22 VIA 在地址 $8000 至 $8003 可访问,并且无法触发中断。它用于提供两个Atari CX40摇杆接口。

VIA 地址

端口 B 读写 -------------- $8000 端口 A 读写 -------------- $8001 数据方向寄存器 B --------- $8002 数据方向寄存器 A --------- $8003 定时器1低字节 ------------ $8004 定时器1高字节 ------------ $8005 辅助控制寄存器 ----------- $800B

Atari 2600摇杆0连接在VIA端口A的bit[0..4],摇杆1连接在VIA端口B的bit[0..4],如下所示:

上 ------ Bit0 下 ------ Bit1 左 ------ Bit2 右 ------ Bit3 开火 ---- Bit4

基础函数 JOY() 提供相同的功能。JOY(0) 对应端口A,JOY(1) 对应端口B,返回一个数字表示对应端口的状态,掩码在5个对应位上(这样bit 5、6、7仍可在将来使用而不影响此实现)。
示例:
BASIC 10 A = JOY(0) 20 IF A = 31 THEN GOTO 10 30 IF A = 30 THEN PRINT "上" 40 IF A = 29 THEN PRINT "下" 50 IF A = 27 THEN PRINT "左" 60 IF A = 23 THEN PRINT "右" 70 IF A = 15 THEN PRINT "开火" 80 GOTO 10 RUN

基础例程 TONE 在端口B的bit 7上播放方波音调。在1MHz下,各音符的对应表如下: DO 261.63Hz = 1911 DO# 277.18Hz = 1808 RE 293.66Hz = 1702 RE# 311.13Hz = 1607 MI 329.63Hz = 1517 FA 349.23Hz = 1432 FA# 369.99Hz = 1350 SOL 392.00Hz = 1275 SOL# 415.30Hz= 1203 LA 440Hz = 1136 LA# 466.16Hz = 1073 SI 493.88Hz = 1010 播放A(LA 440)一段时间,然后用TONE 0停止: BASIC 10 TONE 1136 20 K = 40 30 FOR I=0 TO K STEP 1 40 PRINT I 50 NEXT I 60 TONE 0 70 END RUN

ACIA

ACIA 数据寄存器 ----- $9000 ACIA 状态寄存器 ---- $9001 ACIA 命令寄存器 ---- $9002 ACIA 控制寄存器 ---- $9003

菜单

启动时,src/startup.s 代码初始化系统并显示启动菜单:Memo-1 初始化ACIA、VIA,向Minitel发送命令以改变波特率并禁用本地回显,然后显示一个简单的菜单系统,提供多个选项:按’1’启动WOZMON(Steve Wozniak编写的监控程序,用于内存检查和修改),按’2’启动MS-BASIC(Microsoft BASIC解释器),按’3’执行来自外部ROM插槽的代码(仅在检测到外部ROM位于A000时出现该选项),或按'A'查看关于屏幕,显示系统信息、许可证和致谢。 菜单通过检查A000处的第一个操作码自动检测外部ROM的存在并调整可用选项。如果读取到A0,则假定该位置为空(6502在访问无硬件响应的地址时总是读取地址的高半字节)。 如果启动菜单检测到外部插槽中有ROM,它会从ROM头的首8字节(A000至A007)读取自定义名称。菜单入口跳转到A008。

终端

本项目设计使用Minitel 1b作为终端。它实现了一个简单的65C02 Minitel驱动,假设您使用6551 ACIA芯片作为UART(而不是W65C51,因为后者与Minitel存在两处硬件不兼容)。
Minitel驱动文件为 src/minitel.s(是的,我知道,我是家里那个古怪的人)。

打印机

对Minitel打印机的支持仍在开发中。

汇编代码

代码使用ca65和ld65汇编器和链接器构建。
要自行汇编代码,请确保这两个二进制文件在您的PATH中,或者调整以下命令。

首先确保在src目录旁有一个out目录。如果您克隆了这个仓库,应该已经有了,因为我想至少共享一个二进制发布版本。

BASH cd src ca65 -D memo msbasic.s -o ../out/memo.o ld65 -C memo.cfg ../out/memo.o -o ../out/memo.bin -Ln ../out/memo.lbl

如果出现关于未包含 longbranch.mac 的错误,您需要包含 asminc 文件夹。例如:

BASH ca65 -I /usr/local/cc65/share/cc65/asminc -D memo msbasic.s -o ../out/memo.o

许可证与致谢

基于65C02芯片组的计算机,用于娱乐和学习目的。
作者:Benoit Aveline,又名 Memoire Morte
(c) 2025 - 知识共享 署名-非商业性使用-相同方式共享 4.0 国际许可

特别感谢:

  • Ben Eater (https://eater.net/6502) 提供的6502计算机设计和教程 - CC-BY许可证
  • Ian Ward (https://www.youtube.com/@IanWard1) 关于2004 LCD和555定时器的YouTube视频 - 未找到许可证

当前源代码基于:

  • Steve Wozniak的Wozmon - (c) 1976 Apple (早于代码知识产权概念出现)
  • Weiland & Gates的BASIC-M6502 (https://github.com/microsoft/BASIC-M6502) - (c) Microsoft - MIT许可证
  • Michael Steil (https://github.com/mist64) 的MS-BASIC反汇编 (https://github.com/mist64/msbasic) - 2-clause BSD许可证

相似文章

全新一体化 6502 电脑(Neo6502kbd)

Hacker News Top

Olimex 推出了 Neo6502kbd,这是一款集成在键盘中的开源一体化复古电脑,搭载真 6502 处理器,配备 USB 接口和 HDMI 输出,支持模拟 Apple ][、Oric Atmos 等经典系统,并附带开发工具。

CP/M-68K 模拟器

Lobsters Hottest

一位业余开发者创建了一个适用于Motorola 68000 CPU的模拟器,可运行CP/M-68K,支持自定义BIOS和RAM磁盘;源代码已在GitHub和GitLab上提供。