在物理机6502上使用BASIC的智能手表


6502处理器已有40多年的历史了,至今仍在许多嵌入式系统中使用。 WDC继续生产65C02和65Cxx系列外围芯片。 作者发现它们现在以PLCC和QFP封装提供,但很少使用这些芯片选件。 DIP封装中的微电路不再可用,因为仅自制制造商的需求太小。 作者决定在6502上制作最小的单板,他可以这样做。 可能是该处理器上最小的已知的自制单板处理器(非自制且较少,例如Tamagotchi)。 结果是可以选择开发带表带的腕带的设备。 显示屏取自诺基亚5110,外壳采用漂亮的界面书写,可能它成为了6502上唯一的智能手表。

该表包括:时钟频率为8 MHz的65C02处理器,板上的65C22芯片,控制LCD和轮询按钮以及外部键盘,诺基亚5110显示屏(84x48像素),32 kB静态RAM,16 kB ROM在地址空间中。 电源电压为3.3V。

最重要的是:作为扩展坞,您可以将Commodore 64的键盘矩阵连接到板上的连接器,获得与Seiko UC-2000类似的东西( 在Habré上进行评论 ):


用KiCad编译的印刷电路板的电路和拓扑。 双面板的尺寸为3x1.5英寸。 除PLCC面板以及键盘和LCD的连接器外,所有组件均为SMD。



图中的拓扑不按比例绘制。 组装前的外观:



之后:



存档 (电路,板,固件等)

在手表上,您可以运行几个内置应用程序。 其中之一,G'Mon(通用监视器)是主要的开发和调试工具。 它使您可以在单独的单元和片段中查看和编辑内存的内容,切换到程序,用指定的字节填充RAM部分,并在地址空间中移动片段。 手表中使用的显示器版本已简化,因此除EhBasic之外,EhBasic还可以安装在ROM中。 他几乎没有进入,只剩下大约100个可用字节。 重做了解释器,使其能够与核心结合。 反过来,它包含所有初始化例程,与外部接口一起使用以及所有可用软件的关系。 和另一个应用程序-主菜单。

诺基亚5110通过软件实现的SPI协议(通过6522)与LCD交互的代码占用了大量内核。WriteBYTE和Command子程序分别向LCD发送图形数据和命令。 由于没有硬件文本模式,因此编写了将字符发送到屏幕的过程。 字符生成器存储在ROM中,并由两个查找表表示:一个用于高字节,另一个用于低字节。 它们一起指示ROM中起始字符字节的绝对位置。 应该在将ASCII码写入处理器电池之后运行Write例程,并且该例程还应用作查找表的X坐标。 该例程首先将ASCII代码写入内存中的屏幕缓冲区。 然后,她搜索相应图块的数据并为其设置指针。 从指针显示连续的8个字节,它将调用CCheck子例程。 该程序以编程方式检查光标的位置,如果屏幕已满,则调用Scroll子例程,该例程将图像移动一个文本行。 由于作者没有实现从LCD控制器的读取,因此根据光标的位置对文本进行索引并写入内存中的缓冲区。 Scroll子例程在LCD上显示从缓冲区的底部三行到顶部三行,然后在底部填充空格。 使用LCD的其余例程是CReturn。 它在搜索表中搜索下一行的初始位置,如果当前行不是底部,它将光标位置增加一。 如果最底行-调用Scroll过程,则仅结束。

GetKey子例程通过6522轮询键盘。 它逐行读取键盘矩阵,并将字节写入内存。 如果发现任何位为零,它将通过查找表确定按键的ASCII码。 基本上,该代码不包含为了尽快运行而产生的循环。 用于将给定位转换为索引的子例程不使用查找表,但是结果是,该代码非常庞大且效率低下。

影片:


作者不再使用此固件,而是切换到其他项目。 他希望该代码对于希望将诺基亚5110的LCD从单板控制到6502的用户来说非常有用。相应的例程可以轻松地转移到其他软件中。 其中最重要的是Write,Write_NS,Command,WriteBYTE,LCDInit,LCDClear,CCheck,CCheck_NS,CReturn,Scroll和SETCursor。 其他有用的例程是LCDHome和WriteBMP。 必须将LCDCursor,GTmp,GTmp5和GTmp6变量以及长度为84字节的屏幕表放置在内存中。 除它们之外,还需要CRTbl,CTableX和CTableY查找表,以及具有所有图块的Char和Char2位图。

如果要创建其他图块集,请使用“资产”文件夹中的模板。 在GIMP中,将位图导出为RGB(不是RGBX)格式的.data文件。 不要关注.pal文件,并将.data文件放在存档的BitConvert文件夹中。 运行Convert.sh filename.data以获取FONT.bin文件,该文件将是切片的集合。

Source: https://habr.com/ru/post/zh-CN448758/


All Articles