FC/NES PPU 示例汇编程序 简易画图
程序:简易画图
编写:女孩不哭, 6502汇编, 6502通用汇编器1.2.6
使用方法:
上下左右:移动画笔坐标
选择 :切换命名表#0,#3(因为是水平镜像)
开始 :清空当前命名表
BB :加速移动
AA :画图, 像素切换
源代码:
; start:$BFF0; end: $FFFF; size: $4010 .start reset .org $BFF0 ; 文件头 .db "NES",$1A,$01,$01,$00,$00 .dw $00,$00,$00,$00 JOY_NOW = $00JOY_LAST = $01BTN_TIME = $04NT_NOW = $05 ; Cur NT: 0:$2000,1:$2800PPU_ADDR_LOW = $02PPU_ADDR_HI = $03 .org $C000pal_data: ; 调色板数据 .db $0F,$03,$11,$1A .db $0F,$1A,$11,$03reset: sei cld ldx $ff ; 初始化堆栈SP txs_main_vb1: ; PPU预热2次 lda $2002 bpl _main_vb1_main_vb2: lda $2002 bpl _main_vb2 inx ; 关nmi, 关屏幕 stx $2000 stx $2001 stx JOY_NOW ; 内存初始化 stx JOY_LAST stx PPU_ADDR_LOW stx PPU_ADDR_HI stx BTN_TIME stx NT_NOW jsr set_pal ; 设置调色板 jsr clr_spr ; 清空精灵 jsr clr_nt ; 清空命名表 lda #$07 ; 初始化精灵 sta $0200+0 lda #$01 sta $0200+1 lda #$00 ; 卷轴归位 sta $2005 sta $2005 lda #$1e ; 开屏幕 sta $2001 lda #$80 ; 开nmi中断 sta $2000main: jmp main ; reset中断无限循环; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<nmi: lda #$00 sta $2001 jsr read_joy jsr check_btn jsr move_spr jsr draw_item lda #$02 ; DMA方式更新精灵 sta $4014 lda #$1e sta $2001 rti; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<check_btn: lda JOY_NOW cmp #$10 beq _cb_st1 cmp #$20 beq _cb_n1 rts_cb_st1: cmp JOY_LAST bne _cb_st2 rts_cb_st2: lda NT_NOW cmp #$00 ; NT:$2000 bne _cb_nt1 lda #$20 jsr _sub_clr_nt rts_cb_nt1: lda #$28 jsr _sub_clr_nt rts_cb_n1: cmp JOY_LAST bne _cb_n2 rts_cb_n2: lda NT_NOW cmp #$00 bne _cb_nodraw ; 没有画 lda #$01 ; 已经画了 sta NT_NOW lda #$82 sta $2000 rts_cb_nodraw: ; 已经画 lda #$00 ; 没有画 sta NT_NOW lda #$80 sta $2000 rts; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<draw_item: lda JOY_NOW and #$80 ; 同时按下了A? beq _di_rts ; 没有按下 lda JOY_NOW cmp JOY_LAST beq _di_rts lda #$00 ; 初始化 sta PPU_ADDR_LOW lda NT_NOW cmp #$01 ; NT:$2800 bne _di_nt1 lda #$28 sta PPU_ADDR_HI jmp _di_nt2_di_nt1: lda #$20 sta PPU_ADDR_HI_di_nt2: ldy $0200+0 ; Y坐标 iny ; 因为是Y-1 tya lsr ; A/=8 lsr lsr tax ; 计算乘法, x*$20=>A lda #$00_di_loop1: clc adc #$20 bcc _di_lab1 inc PPU_ADDR_HI_di_lab1: dex bne _di_loop1 sta PPU_ADDR_LOW lda $0200+3 ; X坐标 lsr ; X/=8 lsr lsr clc adc PPU_ADDR_LOW ; X偏移 bcc _di_lab2 inc PPU_ADDR_HI_di_lab2: sta PPU_ADDR_LOW _skip: lda PPU_ADDR_HI sta $2006 lda PPU_ADDR_LOW sta $2006 lda $2007 lda $2007 cmp #$00 ; 被画了吗? beq _di_draw ; 没有 lda PPU_ADDR_HI sta $2006 lda PPU_ADDR_LOW sta $2006 lda #$00 sta $2007 jmp _di_rts_di_draw: lda PPU_ADDR_HI sta $2006 lda PPU_ADDR_LOW sta $2006 lda #$01 sta $2007_di_rts: lda #$00 sta $2005 sta $2005 rts; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<move_spr: lda JOY_NOW cmp JOY_LAST bne _ms_n0 ldx BTN_TIME cpx #$14 bne _ms_n4_ms_n0: cmp #$01 ; 右 bne _ms_n1 lda $0200+3 clc adc #$08 sta $0200+3 rts_ms_n1: cmp #$02 ; 左 bne _ms_n2 lda $0200+3 sec sbc #$08 sta $0200+3 rts_ms_n2: cmp #$04 ; 下 bne _ms_n3 lda $0200+0 clc adc #$08 cmp #$e7 bne _unk_1 lda #$07_unk_1: sta $0200+0 rts_ms_n3: cmp #$08 ; 上 bne _ms_n4 lda $0200+0 sec sbc #$08 cmp #$ff bne _unk_2 lda #$df_unk_2: sta $0200+0 rts_ms_n4: rts; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<read_joy: lda JOY_NOW pha lda #$01 sta $4016 lsr sta $4016 ldx #$08 sta JOY_NOW sta JOY_LASTjoy_loop: lda $4016 and #$01 sta JOY_LAST lda JOY_NOW asl ora JOY_LAST sta JOY_NOW dex bne joy_loop pla cmp JOY_NOW ; 和前一次相比较 bne _rj_n1 ; 不相等清除计数器 cmp #$00 beq _rj_rts inc BTN_TIME ldy BTN_TIME cpy #$15 ; 延迟长度 bne _rj_rts stx JOY_LAST_rj_n1: stx BTN_TIME_rj_rts: sta JOY_LAST rts; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< set_pal: lda #$3f sta $2006 lda #$00 sta $2006 ldx #$00_sp_loop1: lda pal_data,x sta $2007 inx cpx #$04 bne _sp_loop1 lda #$3f sta $2006 lda #$10 sta $2006 ldx #$00_sp_loop2: lda pal_data+4,x sta $2007 inx cpx #$04 bne _sp_loop2 rts; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<clr_spr: lda #$00 tax_cs_cs: sta $0200,x inx bne _cs_cs lda #$ef_cs_hide: sta $0200,x inx inx inx inx bne _cs_hide rts; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<clr_nt: lda #$20 jsr _sub_clr_nt lda #$28_sub_clr_nt: sta $2006 lda #$00 sta $2006 ldy #$04 ldx #$00_clr_nt_loop1: sta $2007 inx bne _clr_nt_loop1 dey bne _clr_nt_loop1 lda #$00 sta $2005 sta $2005 rts; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<irq: rti; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< .org $FFFA .dw nmi,reset,irq
点阵字模数据:
$00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00, $00, $00, $00, $00, $00, $00, $00
FC/NES PPU 示例汇编程序 简易画图相关推荐
- FC/NES PPU卷轴滚屏示例 歌词显示
编写:女孩不哭 2012-08-31 语言:6502 汇编环境:6502 通用汇编器 1.2.6 修改版 所选歌词:Kelly Clarkson - Because of you 效果图: 以下是源代 ...
- JS实现简易画图工具
[Canvas]画布 Canvas为HTML5中新加入的标签, JS 可在上面进行绘画,Canvas一个矩形的单元.Canvas 拥有多种绘制路径.矩形.圆形.字符以及添加图像的方法. 绘制图形的步骤 ...
- 基于html+JS实现canvas简易画图工具
使用canvas来创建区域,建立核心对象,再接着分别获取几个按钮的节点,确定鼠标按下的起始位置,和鼠标释放时的位置,并为其加上移动事件,鼠标松开时则删除移动节点.点击清除画布按钮,使用clearRec ...
- 怎么画图自动生成HTML,用canvas写一个简易画图工具
本文将为您描述用canvas写一个简易画图工具,具体操作方法: Document style="border:1px solid #000000;">您的浏览器不支持canv ...
- 简易画图工具(Python)
简易画图工具(Python) 小黑最近在努力的入门python,正好学习到了Python的tkinker模块下的Canvas(画布)和Button(按钮)再加上相应的事务管理,实现了一个简单的画图小工 ...
- fceux源码解析_FCEUX金手指加强版 - 使用Lua脚本语言编写FC/NES金手指脚本
一直觉得大部分的FC/NES模拟器的作弊码金手指不是那么方便使用, 比如魂斗罗1代, 玩家的武器可以通过修改0xAA的值来改变: 0x11为M弹(重机枪),0x12为F弹(圈圈),0x13为S弹(散弹 ...
- FC(nes)游戏开发资源
美国的网站,所有NES模拟器(程序设计)方面的资料 http://nesdev.parodius.com 各种NES模拟器源代码 http://www.zophar.net/nes.html FCNE ...
- 很久很久以前写的FC/NES 游戏ROM文件管理程序,许久没更新,用得着的试试吧
那是在很久很久以前了, 那时候才刚刚学习Win32 SDK编程,恰恰又学了Sqlite3数据库的使用,所以就写 了这么一个程序, 没什么特殊的功能, 就是把NES文件保存到数据库中, 支持搜索, 要查 ...
- CC65 开发FC/NES 游戏(一)环境搭建(2021-04-27更新部分内容和修改部分错误介绍)
童年的红白机(又叫FC,美国叫NES) 开发语言,早期的码农们用的是6502的CPU上的汇编语言ASM(其实跟单片机差不多) 简单的说不同的芯片提供了一堆指令让用户编程调用,但其实都是单调的地址引 ...
最新文章
- 用awk数组处理两个文件的例子
- 异步fifo_异步FIFO设计
- 有哪些命令行工具堪称神器?
- “约见”面试官系列之常见面试题之第五十五篇之清除浮动的方法(建议收藏)
- Oracle 自动备份详细步骤
- 细数数据中台的3个业务价值和5个技术价值
- 900万注释图像数据集升级了!谷歌开放Open Images V6,首增语音、文本、鼠标轨迹同步注释...
- PyCharm常用快捷键和设置
- redis映射的概念_Redis基础概念和实现机制的总结
- axios 简单常用笔记
- TASKCTL单机/分布式部署,启动服务/代理节点监听
- linux内核make menuconfig配置
- SmartUpload问题
- 100个特别的遥感应用和用途
- 发送网页内容到onenote_如何直接在网页上做笔记并保存到 Onenote?
- Bootstrap基础三 排版
- Zap之日志记录器选择
- iOS企业应用分发平台搭建(uniapp打包)
- echarts实现中国地图,山西地图,图表面积图配置项
- word如何调整字间距离_Word如何快速调整行间距和字间距?
热门文章
- win10设置了睡眠时间,但两分钟无操作仍然黑屏。解决办法
- 六问禅道5:需求和Bug的区别
- python工资有多少-Python工程师工资多少
- iOS开发者账号快速添加手机号码
- EasyExcel解析excel(合并单元格和未合并)
- RB-tree深度探索
- Transformer Architectures and Pre-training Strategies for Fast and Accurate Multi-sentence Scoring
- Oracle的全文检索
- IOS之 点击链接跳转到App Store指定App(应用程序)
- TCP/IP协议第一章笔记