基于摩托罗拉68000的最小单板机

2020-07-30 05:16:20

68k纳米硬件简单明了。它可以构建在板外(尽管在更高的时钟速度下可能会有稳定性问题)。

由于最小的地址解码电路,访问某些存储器区域将导致选择多个设备。这是应该避免的。

$000000-0xFFFF只读存储器(重复16次)$100000-1FFFFF X禁止(多个设备选择)$200000-2FFFFF只读存储器($000000-0FFFFF的镜像)$300000-$7FFFF X禁止(多个设备选择)$800000-8FFFF开放式总线(可扩展)$900000-9xxxF紧凑型闪存卡$A00000-AxxxxF UART$B00000-BFFFFF。

16550的调制解调器控制线用作位Bang-banged SPI接口。为SparkFun;S&34;DeadOn&34;DS3234实时时钟板提供了7针插头。因此,通过16550的调制解调器控制寄存器和线路状态寄存器可以实现对串行总线的访问。

为存储设备提供了一个间距为2 mm的44针IDE连接器。这适用于CompactFlash卡适配器(在16位True IDE模式下运行),但也可用于并行ATA硬盘。(未测试)。

所有中断源都通过16550路由。所有16550个中断都调用1级自动矢量(矢量偏移量$064),并由软件确定中断源。

Bom.txt包含一个物料清单。在撰写本文时(2020年7月),所有组件均可从Mouserand Jameco等主要分销商处获得。如果从eBay购买6800,请注意老式IC是盗版的常见目标。为了这个项目,我使用了Jameco的东芝TMP68HC000P-12芯片,它们工作得很好。

所有部件都是通孔,给人一种额外的复古感觉。请注意,一些去耦电容器(C4、C5、C6、C8和C10)位于IC下方,因此需要开放框架IC插座。大型IC插座也可能很贵(尤其是DIP-64插座!)。因此,更便宜的替代方案是使用分离式SIP0.1&34;机器插头。

由于芯片的间距,Textool ZIF插座不适合。对于ROMsU5和U7,白羊座28-526-10低调ZIF插座将适合,但勉强适合。释放闩锁可能会擦伤其北部的RAM IC,但我发现这并不是什么大不了的事。

X1可以使用全罐或半罐振荡器。请注意,如果使用频率不是12 MHz的振荡器,则必须更新Makefile中的F_CPU值。(见下文)还请注意,如果使用68HC000,最低时钟频率为4 MHz。

44针IDE接口接受像这样的CompactFlash适配器板,可从Amazon和其他供应商处购买。

本项目使用VASM汇编器和标准Makefile。Python 3和PySerial也需要通过串口将程序上传到计算机。Makefile还包含使用Minipro将ROM映像刻录到AT28C256 EEPROM的规则(如果您有TL866II+程序员)。(如果你没有芯片编程器,你应该买一台TL866II+,它们价格合理,可以从许多供应商那里买到。)。

运行make rom将构建ROM映像,并将其分成奇数和偶数两部分,即rom-l.bin和rom-u.bin。每个文件应该正好是32,768字节。运行make burnrom会使用Minipro将这些文件写入一对AT28C256 EEPROM。

注意:如果使用频率不是12 MHz的振荡器,请在生成文件中适当更改F_CPU的值。

Makefile中的波特率变量设置串行接口的波特率。使用包含的脚本baudrate.py确定在给定振荡器频率下可用的波特率。

ROM相当小--它更接近于引导加载程序,而不是操作系统。它支持从FAT16格式的CompactFlash卡的根目录加载程序,并支持一些基本的调试功能。它还为I/O提供了一组较小的系统调用,以简化应用程序。

测试RAM。如果发生RAM故障,故障地址将写入串口,状态LED快速闪烁。(当以较高的时钟速度在面板上运行时,这很容易失败。)。

检查实时时钟模块。如果找到,将当前日期和时间打印到串口。

检查CompactFlash卡,如果是FAT16格式,则尝试挂载第一个分区。

如果没有按住";Enter";按钮:如果插入了有效的卡,请检查根目录中名为STARTUP.BIN的文件。如果找到,则将其加载到RAM中并执行。

如果按下了";Enter";按钮,则输入交互式命令shell并跳过执行STARTUP.BIN。

68K Nano-ROM Version 00009900(20200708)(C)2020 Matt Sarnoff(MSARNOFF.ORG)测试内存...密码:1,048,576 BYTESROM:65,536 BYTESCPU:12,000,000 HZTIME IS 2020-07-07 19:14:36检测到的CARD:250,608KB';没有名称#39;无法加载STARTUP.BIN-FILE NOT FOUNDTYPE?[回车]寻求帮助。>;

如果未加载STARTUP.BIN,则可通过串行端口使用交互式命令shell。(57600波特、8个数据位、无奇偶校验、1个停止位)。类型?然后按Enter键可查看支持的命令列表。此处对它们进行了简要总结。请注意,命令和文件名不区分大小写。

.L-列出CompactFlash卡根目录中的文件。不显示长文件名和隐藏文件。

.p文件-将CompactFlash卡根目录中名为file的文件的内容打印为ASCII文本。

.h文件-将CompactFlash卡根目录中名为file的文件的内容打印为十六进制转储。

.t-打印实时时钟模块报告的当前日期和时间。

.T YYYYMMDDWWhhmmss-设置当前日期和时间。新日期/时间应表示为不带分隔符的16位十进制数字字符串。WW应该是介于01和07(包括01和07)之间的两位数工作日。您可以使用Unix命令date";+%Y%m%d0%u%H%M%S";以此格式获取当前日期/时间。

文件-任何其他命令都被解释为要从CompactFlash卡的Root目录加载并执行的文件名。与MS-DOS不同,文件扩展名是必需的。例如,要执行名为foo.bin的文件,请输入FOO.BIN。(foo将尝试加载名为foo且没有扩展名的文件)。

串行输入线上的中断条件进入串行加载器,允许将程序从主机上传到RAM。Python脚本serload.py和Makefile规则make load和make run负责这一点。

硬件异常会导致传输到基本调试器。状态LED快速闪烁,并将寄存器转储打印到串行端口:

*非法INSTRUCTIOND0=00000064 D1=0000000A D2=00000038 D3=00000009D4=00000000 D5=00000000 D6=00000000 D7=00000000A0=00E0003C A1=00001D40 A2=00000000 A3=00F00000A4=00000000 A5=00000000 A6=000001E2 A7=00EFFFFASR=-S0--Z--PC=0000

有关ROMAPI提供的系统调用和应用程序指南的详细说明,请参阅API.md。

ROM始终位于地址空间的底部,因此应用程序代码无法覆盖异常向量。

这是一个小规模的项目。我正在考虑将来设计一个更大的68000冲浪板,所以我可能不会再继续做这件事了。这里有一些我没有时间去处理的项目想法,但欢迎您来:

使用DS3234实时时钟的SQW输出生成周期性中断。(uClinux可能需要)