粘贴到CSDN格式没调,想看格式好的点下面

https://happysoul.github.io/nes/nesdoug/

我写了一些支持函数来填充VRAM缓冲区。

我使用了一些后台场景的代码,在crt0.s中定义了一个VRAM_BUF,地址是 $700。

请注意,这在技术上与C堆栈共享700-7ff空间。他们可能会发生冲突。如果你担心这个问题请将VRAM缓冲区设置为600-6ff。

但是你不能向VRAM缓冲区写入超过74 bytes,这样就不会比77 bytes更多了。

C堆栈从7ff开始增长。并且,C堆栈只需要十几个字节,如果你像我一样编程,并且不使用局部变量,并且一次只传递几个函数(最好是没有),并且不使用递归。如果你做那些事情,你会没事的。但是,我想我应该让你知道。

要使用我的系统,您需要指向我的系统的一些内部指针。这不需要传递值,该地址由crt0.s中的VRAM_BUF定义。

set_vram_buffer()

这有点像set_vram_update()。

要将PPU更新指向另一个数据集,您可以使用set_vram_update(&data)

关闭可以使用set_vram_update(NULL)

您需要做的另一件事是每帧重置缓冲区。

clear_vram_buffer()

当您写入缓冲区时,它会记住它所在的位置,并且会继续增长。clear_vram_buffer()会将索引重置为零。

数据在帧之间自动传输,因此在ppu_wait_nmi()之后,数据已经发送,我们就可以清除它了。

缓冲单个贴图

one_vram_buffer(tile, ppu_address)

你只需要瓷砖编号和地址。这个宏可以得到地址 NTADR_A(x,y)

X和Y是平铺位置。X从0到31,Y从0到29。

您还可以使用我编写的函数在运行时计算地址

像素点 0-255 X, 0-239 Y

NT是nametable,0-3 (备注:也就是4块显示屏)

get_ppu_addr(char nt, char x, char y);

你可以写一个连续的运行

multi_vram_buffer_horz(const char * data, unsigned char len, int ppu_address);

multi_vram_buffer_vert(const char * data, unsigned char len, int ppu_address);

Horz 从左到右,Vert从上到下

地址、数据、EOF被复制到VRAM缓冲区,其中一个优点是,当持续写入缓冲区的时候,EOF会自动调整。

但是这里有个需要注意的问题,缓冲区的大小没有监控,如果你不小心写多了(溢出缓冲区),就会出问题了(花屏、乱码、不对齐、崩溃)

我写了很写屏幕的例子,而且这些都是在一个 v-blank 期间完成的。这几乎是你在一帧中可以可以改变的最大数量。

https://github.com/nesdoug/03_Hello3/blob/master/hello3.c

https://github.com/nesdoug/03_Hello3

用C语言开发NES游戏(CC65)03、VRAM缓冲区相关推荐

  1. 用C语言开发NES游戏(CC65) 前言

    作者网站更新日期 2018年9月 翻译日期从2018年11月底开始逐步翻译,基于浏览器的翻译,重要地方逐句对比原和译文,有时候会加入些个人见解,让文字变得能像是句人话. 作者github地址: htt ...

  2. 用C语言开发NES游戏(CC65) 简介

    粘贴到CSDN格式没调,想看格式好的点下面 https://happysoul.github.io/nes/ 简介: 作者nesdoug,作者重写了他的代码并发布到了github https://gi ...

  3. 用C语言开发NES游戏(CC65)11、Metatiles

    粘贴到CSDN格式没调,想看格式好的点下面 https://happysoul.github.io/nes/nesdoug/ 什么是metatile,对于贴图来说这是个特殊的词.在我的工程里有2x2的 ...

  4. 用C语言开发NES游戏(CC65)15、音乐

    粘贴到CSDN格式没调,想看格式好的点下面 https://happysoul.github.io/nes/nesdoug/ 我前段时间写了一篇关于NES Audio文章. https://nesdo ...

  5. 用C语言开发NES游戏(CC65)04、完整的背景

    粘贴到CSDN格式没调,想看格式好的点下面 https://happysoul.github.io/nes/nesdoug/ 制作一张全屏显示的背景图 (备注:这里的RLE是作者将图片变成NES可以识 ...

  6. 用C语言开发NES游戏(CC65)21、完成一个游戏

    粘贴到CSDN格式没调,想看格式好的点下面 https://happysoul.github.io/nes/nesdoug/ 我要做的第一件事是标题屏幕.这部分快速搞定,毕竟只是为了展示一下.我用 N ...

  7. 用C语言开发NES游戏(CC65)06、精灵

    粘贴到CSDN格式没调,想看格式好的点下面 https://happysoul.github.io/nes/nesdoug/ 什么是精灵?精灵是一种可以在整个屏幕上自由移动的贴图.精灵通常是8×8,但 ...

  8. 用C语言开发NES游戏(CC65)14、游戏平台

    粘贴到CSDN格式没调,想看格式好的点下面 https://happysoul.github.io/nes/nesdoug/ 我们要做的是向右滚动显示. 游戏吸引人的地方在哪里呢?重力. 我们需要16 ...

  9. 聊聊在博客园写博客的这两年《Unity 3D脚本编程:使用C#语言开发跨平台游戏》正式出版...

    版本状态: 2016.9 第一次印刷 (2016.11 输出到台湾) 2017.1 第二次印刷 2017.5 第三次印刷 2017.5 电子书上线:Unity 3D脚本编程--使用C#语言开发跨平台游 ...

最新文章

  1. 九章算法班L8 Array Number
  2. YARN集群维护部分问题汇总
  3. win7-64系统安装oracle 11G客户端
  4. 基于ArcGIS JS API封装dojo微件(以工具条为例)
  5. sqoop1.4.5 导入 hive IOException running import job: java.io.IOException: Hive exited with status 1
  6. linux 进程装入 物理内存 页表,linux内存管理解析----linux物理,线性内存布局及页表的初始化...
  7. 通过RADIUS 服务器管理无线AP的VLAN
  8. JS_15作用域与作用域链
  9. python的def语句_【零基础学Python】def语句,参数和None值
  10. 动态延迟加载网页元素jQuery插件scrollLoading
  11. 安装win10和ubuntu双系统启动不了解决
  12. 【Android】eclipse 时常报错java.lang.object cannot be resolved-解决
  13. 不要争了!技术选择没那么重要
  14. 面试官问:你的缺点是什么,这么回答漂亮!(真实案例)
  15. mac word 复制自动产生书签
  16. win10修改DNS
  17. Windows性能监控perfmon工具的使用和性能指标的分析
  18. 在浏览器输入一句话之后是如何响应的
  19. 深入理解Java虚拟机——加载和存储指令
  20. Implement strStr() -- LeetCode

热门文章

  1. 做外贸用什么邮箱,外贸邮箱用哪个好
  2. 我的世界服务器地皮系统,我的世界服务器怎么创建地皮世界
  3. java与模式 之,《java与模式》学习之状态模式
  4. 数学问题(四)——素数
  5. 教程 | 校徽头像制作小程序后端实现
  6. mongodb集群 java_Mongodb集群操作的JAVA代码详解
  7. 如何在类图中标注设计模式(二)
  8. mysql函数 游标_存储过程/游标/mysql 函数
  9. nginx: [error] invalid PID number ““ in “/app/nginx-1.16.0/logs/nginx.pid“
  10. Linux入门-环境搭建、基本指令以及权限讲解