数码之家

标题: DIY 6502/W65C02小单板机 - 刚点了个闪烁灯 [打印本页]

作者: liccil    时间: 2019-4-7 14:16
标题: DIY 6502/W65C02小单板机 - 刚点了个闪烁灯
本帖最后由 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

[attach]123882[/attach]
他这个电路用了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)。

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

[attach]124006[/attach]
rom/ram

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

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

[attach]123957[/attach]
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左右。


作者: geekehuang    时间: 2019-4-7 15:16
楼主动手能力强
作者: guangqu    时间: 2019-4-7 19:05
这个单片机玩的人很少啊
作者: liccil    时间: 2019-4-7 20:00
guangqu 发表于 2019-4-7 19:05
这个单片机玩的人很少啊

古代cpu了 要点个灯至少要三个芯片:6502CPU,6522VIA,一个并行的程序存储器
作者: liccil    时间: 2019-4-7 20:22
花了俩小时改了一下cpld逻辑和写了一下stm32的程序,现在可以实现开机后自动配置程序ram,配置结束后6502即运行。
[attach]124570[/attach]




作者: junyee    时间: 2019-4-8 08:54
以前 手机上拆的 nor-flash 在这里能用上吧..  :biggrin:
作者: liccil    时间: 2019-4-8 09:06
junyee 发表于 2019-4-8 08:54
以前 手机上拆的 nor-flash 在这里能用上吧..

老手机的NOR还真可以用
作者: jinpf    时间: 2019-4-8 10:33
这CPU是不是以前红白游戏机上用的那个?
作者: infozx    时间: 2019-4-8 10:37
厉害了,大神,不仅做了个6502电脑,还用32和CPLD配了个启动bios;
作者: infozx    时间: 2019-4-8 10:42
本帖最后由 infozx 于 2019-4-8 10:44 编辑

搜了下W65C02这厂家2013年还在继续出新规格书。楼主真大神,这料都能挑到。
作者: liccil    时间: 2019-4-8 10:56
jinpf 发表于 2019-4-8 10:33
这CPU是不是以前红白游戏机上用的那个?

不大一样 红白机的是理光RP2A03 引脚不同 而且还带有一些其他外设
作者: liccil    时间: 2019-4-8 11:04
infozx 发表于 2019-4-8 10:42
搜了下W65C02这厂家2013年还在继续出新规格书。楼主真大神,这料都能挑到。

看老外玩老cpu 就也买了一些玩玩 情怀项目 感觉实用性不大
作者: liucum    时间: 2019-4-8 14:19
很牛啊,会汇编语言很高端的样子。汇编语言是执行效率最高的机器语言了吧?
作者: sz1988    时间: 2019-4-9 17:39
本帖最后由 sz1988 于 2019-4-9 17:41 编辑

20多年前做过65xx系列的软件开发 ,游戏机的一个6527,加了PPU作图形处理吧,汇编语言,都快忘光了
作者: erik0    时间: 2019-4-10 13:18
厉害
只用过中华学习机的小汇编
作者: yanghc    时间: 2019-4-11 13:32
一看就是高手,而且是有情怀的牛人,严重关注着,有时间时间也跟着做一个。
作者: jcdzxh    时间: 2019-4-20 16:17
大隐隐于市,敬佩
作者: zxy882266    时间: 2019-9-21 09:44
当年我买了一块6502单板机,后来游戏机可以编程就买了本F-BASIC,到现在也没研究好,输入全是二进制码
作者: liccil    时间: 2019-9-21 20:28
zxy882266 发表于 2019-9-21 09:44
当年我买了一块6502单板机,后来游戏机可以编程就买了本F-BASIC,到现在也没研究好,输入全是二进制码 ...

同感
设计这个板子时候还打算搞个DMA控制器 读SD卡放badapple 可奇怪的是点完了闪烁灯之后却忽然没了动力
让板子去吃灰了
作者: zxy882266    时间: 2019-9-22 10:30
liccil 发表于 2019-9-21 20:28
同感
设计这个板子时候还打算搞个DMA控制器 读SD卡放badapple 可奇怪的是点完了闪烁灯之后却忽然没了动力 ...

扔了吧,怀旧一下,这里是BG6IB




欢迎光临 数码之家 (https://www.mydigit.cn/) Powered by Discuz! X3.4