数码之家

 找回密码
 立即注册
搜索
查看: 13675|回复: 19

DIY 6502/W65C02小单板机 - 刚点了个闪烁灯

[复制链接]
发表于 2019-4-7 14:16:22 | 显示全部楼层 |阅读模式
本帖最后由 liccil 于 2019-4-8 20:58 编辑

这段时间一直在看8-bit guy的视频,这老哥经常玩康懋达的C64 VIC-20一类的机器。这类机器的cpu都是经典的老8bit芯片,正好最近比较空闲,于是就diy了一块小核心板感受一下8bit纯处理器是什么样的。

x度和x宝上搜索了一下发现W65C02好像比较现代一些,cmos工艺功耗也低,最高主频可以开到14MHz,那些七十年代的老NMOS6502芯片最高也只能上到1MHz左右。
从手册上直接能看出来芯片是0.8微米工艺,还是够古老的。关键是这个芯片支持低电压操作,大家都知道纯处理器不叫单片机,因为这个东西真的仅仅是个处理器--没有rom 没有ram 没有GPIO
UART剩下的外设都没有,只有地址线和数据线,读写信号和一些乱七八糟的信号,需要用74xx芯片做地址译码器。这部分东西太闹心了,所以找了一片3.3V的CPLD做地址译码,顺便可以做一些其他功能,例如外挂单片机单步调试、或者用ram做程序存储器,使用外挂单片机-cpld去配置ram,老芯片实现isp下载比拔来拔去爽的多。
电路图的话,用bing一搜索一大堆。我主要参考了一下grant的6502小系统电路,试试能不能跑起来。
http://searle.hostei.com/grant/6502/Simple6502.html


他这个电路用了6502芯片做主处理器,6502芯片和6501(貌似是兼容摩托罗拉6800)区别主要是带了内置的时钟发生器,只要给6502芯片输入一个时钟(据B站上视频讲,NMOS的6502不仅功耗大,由于内部结构的原因不能实现纯静态操作,就是时钟频率不能无限低),芯片的两个时钟输出就可以产生时钟脉冲信号,通过一些简单的组合逻辑的操作就可以驱动8080总线的器件(例如熟悉的62256 28256一类的)。由于16位寻址空间的限制,最多能访问64kB的地址空间,因此分配了32KB的RAM和16KB的ROM,剩下16KB可以用作IO地址空间。

6502上电复位后程序计数器会指向0xFFFC,就是reset向量。在0xFFFC 和 0xFFFD位置放上低8位和高8位地址数据,cpu就会跳到指定的地址开始执行程序。当然实际存储在ROM的地址范围是0-3FFF(对应cpu是$C000-$FFFF)。


上面的图是初版。没有gpio实在是不能忍,点个灯都点不了。所以给它配了个6522。这个芯片是GPIO芯片(VIA),可以转换出两路8位并行IO和两组串行io(类似spi)。最上的芯片是MC68B50,6800总线的ACIA芯片(其实是个UART收发器),两片RAM一片存储程序,一片是纯RAM。最右侧当然是大名鼎鼎的6502。紧跟着是12864接口,打算装个液晶放放烂苹果,以后再说。


rom/ram


右上角最显眼的是一片EPM240T100C5,大家都熟悉的cpld芯片。可以方便的设计里面的逻辑,这要是用74xx 想要修改怕是得切割板子了,而且复杂的逻辑也实现不了。
cpld左侧是一片stm32 这个片子当时设计是为了给程序ram在线下载代码用的,但是..还没有做。毕竟这部分算是调试器,先让电路跑起来再说
50M晶振用cpld分频给时钟信号等等杂活就给cpld干了


地址译码什么的用verilog 或者直接画就完事了 这个图里面给VIA(6522)地址译码范围是$8000-$800F
其中包括IO方向寄存器,IO值寄存器,还有定时器什么的


debug过程..简单写了个程序发现,根本不跑。用示波器看了一下 数据线波形上升巨烂。拉几个上拉电阻吧,顺便把cpld的未用io设置成弱上拉。
折腾了几天 发现好像是汇编器有问题(使用不当?),org指定的位置是乱的 还有刚才提到的cpu地址和实际地址问题,一开始都没发现。

直到某天晚上突然能点灯了,发现这个硬件踩了几个坑(数据线驱动能力 时钟频率 供电 汇编器的指定地址)..
最坑的一个事情是 这货的地址线波形特别怪 这个65C02如果A0-A9输出高电平就是高 ,低电平不是一直低,而是GND和Phase2时钟取或? A10-A16刚好相反,我还以为cpu是坏的?跑飞了?时钟太高?供电不足?
最后发现是正常的。



附上一个闪烁灯的汇编代码

MAIN:         LDA #$FF ;向累加器A存0xFF

              STA $8002 //让6522的b口全部输出
        
        STA $8003 //a口全部输出

DELAY:  LDX #$FF //累加器x存储FF

DLA:        LDY #$FF  //累加器Y存储于FF

DLB:        DEY   //Y-=1
        
        BNE DLB //如果Y-1不是0 跳转回DLB

        DEX //X-=1

        BNE DLA //如果X-1不是0 跳回DLA

        LDA #$FF //累加器A存FF

        STA $8000 //输出到PA

        STA $8001 //输出到PB

        LDX #$FF //延时

DLC:        LDY #$FF

DLD:        DEY
        
        BNE DLD

        DEX

        BNE DLC

        LDA #$00  //累加器A存00

        STA $8000 //输出到PA

        STA $8001 //输出到PB

        JMP DELAY //循环


在主频3.125MHz下,以上代码控制的灯闪烁频率大概3Hz左右。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 3家元 +100 收起 理由
dlsys + 30 優秀文章
tempchar + 20 这业余爱好太专业了!
家睦 + 50

查看全部打赏

发表于 2019-4-7 15:16:01 | 显示全部楼层
楼主动手能力强
回复 支持 反对

使用道具 举报

发表于 2019-4-7 19:05:32 | 显示全部楼层
这个单片机玩的人很少啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-7 20:00:04 来自手机浏览器 | 显示全部楼层
guangqu 发表于 2019-4-7 19:05
这个单片机玩的人很少啊

古代cpu了 要点个灯至少要三个芯片:6502CPU,6522VIA,一个并行的程序存储器
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-7 20:22:45 | 显示全部楼层
花了俩小时改了一下cpld逻辑和写了一下stm32的程序,现在可以实现开机后自动配置程序ram,配置结束后6502即运行。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2019-4-8 08:54:19 | 显示全部楼层
以前 手机上拆的 nor-flash 在这里能用上吧..  :biggrin:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-8 09:06:49 | 显示全部楼层
junyee 发表于 2019-4-8 08:54
以前 手机上拆的 nor-flash 在这里能用上吧..

老手机的NOR还真可以用
回复 支持 反对

使用道具 举报

发表于 2019-4-8 10:33:22 | 显示全部楼层
这CPU是不是以前红白游戏机上用的那个?
回复 支持 反对

使用道具 举报

发表于 2019-4-8 10:37:44 | 显示全部楼层
厉害了,大神,不仅做了个6502电脑,还用32和CPLD配了个启动bios;
回复 支持 反对

使用道具 举报

发表于 2019-4-8 10:42:48 | 显示全部楼层
本帖最后由 infozx 于 2019-4-8 10:44 编辑

搜了下W65C02这厂家2013年还在继续出新规格书。楼主真大神,这料都能挑到。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-8 10:56:52 | 显示全部楼层
jinpf 发表于 2019-4-8 10:33
这CPU是不是以前红白游戏机上用的那个?

不大一样 红白机的是理光RP2A03 引脚不同 而且还带有一些其他外设
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-8 11:04:37 来自手机浏览器 | 显示全部楼层
infozx 发表于 2019-4-8 10:42
搜了下W65C02这厂家2013年还在继续出新规格书。楼主真大神,这料都能挑到。

看老外玩老cpu 就也买了一些玩玩 情怀项目 感觉实用性不大
回复 支持 反对

使用道具 举报

发表于 2019-4-8 14:19:46 | 显示全部楼层
很牛啊,会汇编语言很高端的样子。汇编语言是执行效率最高的机器语言了吧?
回复 支持 反对

使用道具 举报

发表于 2019-4-9 17:39:18 | 显示全部楼层
本帖最后由 sz1988 于 2019-4-9 17:41 编辑

20多年前做过65xx系列的软件开发 ,游戏机的一个6527,加了PPU作图形处理吧,汇编语言,都快忘光了
回复 支持 反对

使用道具 举报

发表于 2019-4-10 13:18:57 | 显示全部楼层
厉害
只用过中华学习机的小汇编
回复 支持 反对

使用道具 举报

发表于 2019-4-11 13:32:27 | 显示全部楼层
一看就是高手,而且是有情怀的牛人,严重关注着,有时间时间也跟着做一个。
回复 支持 反对

使用道具 举报

发表于 2019-4-20 16:17:26 | 显示全部楼层
大隐隐于市,敬佩
回复 支持 反对

使用道具 举报

发表于 2019-9-21 09:44:55 | 显示全部楼层
当年我买了一块6502单板机,后来游戏机可以编程就买了本F-BASIC,到现在也没研究好,输入全是二进制码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-21 20:28:42 | 显示全部楼层
zxy882266 发表于 2019-9-21 09:44
当年我买了一块6502单板机,后来游戏机可以编程就买了本F-BASIC,到现在也没研究好,输入全是二进制码 ...

同感
设计这个板子时候还打算搞个DMA控制器 读SD卡放badapple 可奇怪的是点完了闪烁灯之后却忽然没了动力
让板子去吃灰了
回复 支持 反对

使用道具 举报

发表于 2019-9-22 10:30:37 | 显示全部楼层
liccil 发表于 2019-9-21 20:28
同感
设计这个板子时候还打算搞个DMA控制器 读SD卡放badapple 可奇怪的是点完了闪烁灯之后却忽然没了动力 ...

扔了吧,怀旧一下,这里是BG6IB
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-6 21:21 , Processed in 0.156001 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表