sunplus 8202v iop源代码阅读笔记——1

原创文章,如有转载,请注明出处:http://blog.csdn.net/desert2009sz/article/details/6877589


一、前言

       对于汇编,我一直很敬畏,特别是多过2000行的代码时,看到就有点怯场,不敢往下看了。“人都是被迫出来”,这句话在这里也适用,在没有办法的情况下,有些时候你也必须淡定地面对它。虽然代码啰嗦,随处可见的稀奇古怪跳转,纠结的各种各样的寻址方式,必须面对的寄存器使用,以及让人最最痛苦的是思维模式的转变等,让人用起来伤脑筋,但不可否认它独有的优势:细节可控,时序精准,硬件成本低廉(OTP的MCU多数只能用汇编)。

       昨天终于说服自己狠下心来去看iop相关的那段代码,目的只有一个:为了节约成本和实现双无线游戏手柄。代码不是很长,一部分受编译开关的影响没有起作用,可以跳过不看。本文主要对6502s的硬件地址结构,常用指令系统做了记录,以及对iop主程序的结构,复位,中断,IR接收(NEC),游戏按键扫描等做了备注。

二、基础知识

1. MCU R65C02硬件地址划分

地址范围说明区域
$0      ~ $40直接I/O控制器寄存器(不存SRAM区域)-
$40    ~ $FFZero Page freeSRAM
$100  ~ $1FFPage1SRAM
$200  ~ $205Each vectorSRAM
$206  ~ $23FFree direct-mapping areaSRAM
$240  ~ $CODE区域CODE

2. 数制

数制说明
二进制"%"开头,或"B"、"b"结尾
八进制"O"、"o"、"Q"、"q"结尾
十进制"D"、"d"结尾,或无结尾
十六进制"H"、"h"结尾,或"$"、"0x"、"0X"开头

3. 指令

指令说明
sei关闭总的中断
cli打开总的中断
stz mm将目的地址清零,累加器和状态寄存器都不变
stx mmX→mm
rmb bit, byte将byte的bit位清0
smb bit, byte将byte的bit位置1
bbr bit, byte, label如果byte的bit为0,则跳到label处执行,否则顺序执行
bbs bit, byte, label如果byte的bit为1,则跳到label处执行,否则顺序执行
bra相当于jmp
phxX→SP
phx: .macro
    txa
    pha
.endm
plxSP→X
phx: .macro
    pla
    tax
.endm
cmp #ddA-#dd,若结果为负,则C置0,否则置1;若结果为0,则Z置1。不改变A的值
.PAGE0将.PAGE0下的数据定位到“零页段”(0x00~0xFF)
.ifnz当条件不为0时(条件为真),汇编器将对.ifnz的语句进行汇编


由于没有8202v和6502s的规格书,所以芯片的硬件结构和指令系统,也是参考程序内的注释和同系列芯片的介绍,不对之处还请各位指出。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值