fc nes CHR解读及使用gd2生成对应图片

article/2025/9/27 4:29:19

首先,这个涉及比较古老的机器,估计也没什么人感兴趣,我在这里只是记录一下相关信息,

其实fc开发感觉相当于现在的单片机之类的开发,当然作为古老机种,可能模式和思路更古老,不及现在快速高效的模式和丰富的资源以及工具。

 

首先说说CHR文件,fc最初的硬件配置和游戏卡配置非常低,然后有老任和其它企业配套了各种MMC芯片扩展ROM、RAM和其它特殊功能,

而游戏卡的容量一般用mapper来表示(当然具体可以去看相关文档详细了解, 我这里只是说的直接结果)

容量从000的16K PRG ROM + 8K CHR ROM到后期甚至有1M的总容量卡带,都是各种mapper的组合或配合特殊芯片实现,

这里以000为例说明,并编程,

坦克游戏不过25K,其实也就是16+8

而8K的CHR里是分成2页,是256*2个  512图形,想想游戏的乐趣,和游戏容量真没什么关系,只是现在技术发达,真没必要搞这种低效果的游戏了。

回到fc的技术,

8K的文件分两页,我先实现读取第一页数据,(以后会说到开发的语言,如cc65,这个也是第三方的开发环境,官方环境拿不到,过去这么多年, 也没泄露,只能说老任和相关厂商封锁的厉害,也说职业道德水准高,但我想吐槽,这么多年了, 真可以放出来了)

先放出读取后的显示效果

这个是使用默认调色板0,默认颜色绘制的, 里边的图形大家看看就好,是我随便搞的(有乱画的, 有拷贝过来的)。

8KB的CHR文件 1024字节1KB,1字节8bit,一半的容量是1页,没有乱七八糟的文件头之类耗费资源的数据(考虑fc的性能配置,以及专用性,文件头可以省略),而相关文档知道每个像素是用2个bit表示,00标识调色板里第一个颜色,01是第二个,10是第三个,11是第四个,

绘制每个图形的时候要设置使用哪个调色板,调色板4个,一共16个颜色可以提前设置好,我这里是默认颜色

每个图片是8*8像素 也就是2bit*8个像素每行*8行每个图片,也就是一个图片128bit,也就是16字节一个图片,

有了以上基本概念,就可以来做程序需求了, 

======================================================================================

开发语言,我直接选用的php,当然也可以用c#、c、vb.net等等顺手的语言,

有人说了php是世界上最好的语言, 这个我不置评,各有所长,各有所专,不比较,

php很多人说是做网站脚本的,怎么能写bit操作,我说有什么不可以,语言有相关文件扩展,能实现,

n年前我就用php写过文件恢复工具了。(当然是文件还有, 只是格式错乱了)

首先要读取CHR文件,我这里例子叫ascii_2.chr,

$handle = fopen($filename, "r");  而其实都进来的就是二进制数据,只不过处理过程中都自动转为字符或其它数据使用了,
$contents = fread($handle, 8192);
fclose($handle);

读取文件后,需要将读取的数据,按bit处理,变成方便处理的字符串数据,

由于我只处理显示CHR里的第一页数据,所以只需要这些数据即可

substr(asc2bin($contents),0,32768);

asc2bin是个自定义函数,用于把数据转成二进制,也就是成为00 01 10 11 00 01 10 11这样的数据,这是8个像素的数据,也就是一行(例子, 瞎写的,实际没有空格)

返回全部256个图形的二进制数据后,就可以对其进行处理,根据每个点位的数据,00这样的格式,

在二进制字符串里按字符串的位数读取到0或1,并配置到一个点位的数据,两个位的字符串中,

比如一次读取两个字符,高位位第一个字符,低位位第二个字符,组成00这样的字符串数据,

再配合调色板的颜色,使用php的gd库进行图形绘制了。

 


http://chatgpt.dhexx.cn/article/6EfFuRwE.shtml

相关文章

gd.so和php_gd2.so 有什么区别

1、关于gd与gd2有什么区别,可以参加以下的链接,简单来说gd2就是gd的更新版,可以处理更多图像类型 https://stackoverflow.com/questions/3035216/what-are-the-differences-between-a-gd-and-a-gd2-image 2、php-gd里面已经包含了gd和gd2&…

GD32(5)文件系统

目录 文件系统介绍FatFs文件系统组成文件系统存储文件分配表目录 文件系统移植步骤文件系统操作函数f_mountf_openf_closef_writef_read 文件系统介绍 文件系统:操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘&#xf…

PHP的gd2库的安装 和使用注意的一个问题

1.首先确认是否php是否自带了gd2库,确认方法如下: 找到xampp的安装目录 > php文件夹 > ext文件夹 > 看是否有php_gd2.dll文件,如果有就说明已经安装了GD2库。 2.启动phpinfo()来确认GD2库,启动方法: 在xam…

使用gd2绘制基本图形

应用GD2函数可以绘制的图形有多种,最基本的图形包括条、圆、方形等。无论开发人员绘制多么复杂的图形,都是在这些最基本的图形的基础上进行深化的,只有掌握了最基本的图形的绘制方法,才能绘制出各种具有独特风格的图形。 在GD2中可…

xampp开启GD2绘图

默认xampp自带GD2绘图扩展 但是没有开启&#xff0c;需要自己添加 打开php/php.ini 在文件的最后添加 ;GD2库 extensionphp_gd.dll 开启完成后&#xff0c;重启Apache即可生效&#xff01; 随意创建一个文件&#xff0c;内容为 <?phpphpinfo(); ?> 打开后&#x…

初识GD32

什么是GD32&#xff1f; GD32是由北京兆易创新开发的国产32位MCU&#xff0c;基于Arm Cortex-M3/M23/M4内核的32位通用微控制器。目前已经推出GD32F1xx&#xff0c;GD32F2xx&#xff0c;GD32F3xx&#xff0c;GD32F4xx系列&#xff0c;与STM32相比&#xff0c;CPU主频更高&…

php之gd2

一、使用gd2之前首先要开启gd2扩展 Windows下面找到php的配置文件php.ini&#xff0c;搜索extensionphp_gd2.dll&#xff0c;去掉前面的分号即可&#xff1b; 函数介绍 由于gd2的函数比较的长&#xff0c;所有对部分函数进行介绍 1.imagecreatetruecolor — 新建一个真彩色图…

【GD32】GD32工程打开后报错

GD32工程打开后报错&#xff0c;Third Party Device Support for xxxxx 解决办法&#xff1a;修改工程后缀

GD32硬件IIC

GD32E230硬件IIC 我们熟悉IIC都是使用软件代码的形式模拟时序图来编程 现在使用GD32E230中的HAL库中硬件IIC模式IIC。的总线机制都是一种两线接口、简单、双向二线制同步的串行总线&#xff0c;二线制就是时钟线(SCL)和数据线(SDA)两个信号线。IIC寻址时分为主从设备之分&#…

GD32学习

1.简介 关于兆易创新GD32的产品&#xff0c;目前在单片机MCU的业务上&#xff0c;GD全部是32bit的单片机&#xff0c;目前GD32的单片机从内核上区分有Cortex-M3、Cortex-M4、Cortex-M23三个系列&#xff0c;其中红色框框为主推系列&#xff1a; 开发调试环境&#xff1a; 支持主…

了解GD2函数库

PHP目前在Web开发领域已经被广泛应用&#xff0c;PHP不仅可以生成HTML页面&#xff0c;而且可以创建和操作二进制形式的数据&#xff0c;如图像&#xff0c;文件等。其中使用PHP操作图形可以通过GD2函数库来实现。利用GD2函数库可以在页面中绘制各种图像&#xff0c;统计图&…

GDKOI2023 D2T1

前言 相比于D1T1&#xff0c;这题才是真正的签到题&#xff0c;然而&#xff0c;我却爆0了。为了纪念这悲壮的0分&#xff0c;写下了这篇题解。 题目大意 给出 n ( 1 ≤ n ≤ 1 0 5 ) n(1\le n\le 10^5) n(1≤n≤105) 个字符串及其出现时间&#xff08;以几点几分给出&…

一文看懂 GD2库

文章目录 一、 GD2简介1、 验证码&#xff08;实际上是一个img&#xff09; 二、 GD2库使用步骤2.1添加扩展2.2修改php配置文件2.3重启服务 三、 GD2里面的常用方法3.1 imagecreate3.2 imagecolorallocate3.3 imagefill3.4 输出图像资源3.5创建真彩画布3.6在图像中写文字3.6.1i…

MySQL的主从复制

MySQL的主从复制 目录 为什么需要主从复制&#xff1f;MySQL 主从复制概念MySQL 主从复制主要用途MySQL主从形式 一主一从一主多从&#xff0c;提高系统的读性能多主一从 &#xff08;从5.7开始支持&#xff09;双主复制级联复制 MySQL 主从复制原理MySQL主从复制的过程MySQL…

redis主从结构 (一主一从,一主多从,主从从)

关闭防火墙和selinux systemctl disable firewalld.service systemctl stop firewalld vim /etc/selinux/config sed -n 7p /etc/selinux/config SELINUXdisabled setenforce 0 从服务器首次做的是全量同步&#xff0c;且同步的数据会覆盖本机的数据 master 192.168.…

Mysql主从模式

文章目录 &#x1f449;&#x1f3fb;前言❤️主从模式说明&#x1f90d;logbin日志&#x1f90d;Mysql主从复制的流程&#x1f90d;主从复制中遇到的问题 ❤️主从模式配置&#x1f90d;Master配置&#x1f90d;Slave配置 ❤️其他设置&#x1f90d;半同步复制&#x1f90d;并…

mysql主从同步

目录 1.创建主从同步用户 2.授予主从同步权限 3.刷新权限 4.修改master配置文件 5.重启MySQL 6.查看master的状态 7.修改slave配置文件 8.重启mysql 9.构建主从连接信息 10.开始同步 11.查看同步信息 12.同步失败 13.同步报错 13.1 server_id冲突 13.2 initiali…

mysql主从原理

目录 一、主从复制原理 1.原理 2.也就是说 3.注意 随着访问量的不断增多&#xff0c;mysql数据库的压力不断增加&#xff0c;需要对mysql进行优化和架构改造&#xff0c;可以使用高可用、主从复制、读写分离、拆分库、拆分表进行优化。下面我们来学习mysql主从复制高可用如…

MySQL主从复制

一、MySQL主从复制原理 在实际的生产中&#xff0c;为了解决Mysql的单点故障已经提高MySQL的整体服务性能&#xff0c;一般都会采用「主从复制」。 比如&#xff1a;在复杂的业务系统中&#xff0c;有一句sql执行后导致锁表&#xff0c;并且这条sql的的执行时间有比较长&…

Mysql主从同步配置

1. mysql主从同步定义 主从同步使得数据可以从一个数据库服务器复制到其他服务器上&#xff0c;在复制数据时&#xff0c;一个服务器充当主服务器&#xff08;master&#xff09;&#xff0c;其余的服务器充当从服务器&#xff08;slave&#xff09;。因为复制是异步进行的&am…