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    ~ $FF Zero Page free SRAM
$100  ~ $1FF Page1 SRAM
$200  ~ $205 Each vector SRAM
$206  ~ $23F Free direct-mapping area SRAM
$240  ~ $ CODE区域 CODE

2. 数制

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

3. 指令

指令 说明
sei 关闭总的中断
cli 打开总的中断
stz mm 将目的地址清零,累加器和状态寄存器都不变
stx mm X→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
phx X→SP
phx: .macro
    txa
    pha
.endm
plx SP→X
phx: .macro
    pla
    tax
.endm
cmp #dd A-#dd,若结果为负,则C置0,否则置1;若结果为0,则Z置1。不改变A的值
.PAGE0 将.PAGE0下的数据定位到“零页段”(0x00~0xFF)
.ifnz 当条件不为0时(条件为真),汇编器将对.ifnz的语句进行汇编

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


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/desert2009sz/article/details/6877589
个人分类: DVD
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭