![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码
文章平均质量分 84
妇男主任
分享开发外包过程中,关于一些基础原理性的内容,以及具体的底层实现方法的心得。
展开
-
构建一个JPEG解码器(4):帧和比特流
帧和比特流霍夫曼算法JPEG DHT 段下一次:读取比特流在上一部分中,我提到大多数 JPEG 文件在图像压缩之上采用了一种编码技术,试图从图像中去除任何冗余信息的痕迹。最常见的 JPEG 编码使用的技术是对数据压缩世界中常见的一种技术的改编,称为霍夫曼编码,因此详细探索霍夫曼解码器的结构和实现很有用。因为霍夫曼编码是 JPEG 编码器在保存图像文件时执行的最后一件事,所以它需要我们的解码器做的第一件事。这可以通过两种方式实现:重构:将完整图像扫描从其 Huffman 编码状态解码为临时占位符,并对翻译 2021-08-20 01:32:41 · 510 阅读 · 0 评论 -
Game boy模拟器(10):计时器
计时器定时器结构实现定时器仿真源码Timer.js:时钟增量播种伪随机数生成器Tetris.asm:选择新块自从第一台计算机组装在一起以来,它们的一个基本功能就是计时:根据计时器协调动作。即使是最简单的游戏也有时间元素:例如,Pong 需要以特定的速度在屏幕上移动球。为了处理这些时间问题,每个游戏机都有某种形式的计时器,以允许事情在给定的时刻或以特定的速率发生。GameBoy 也不例外,它包含一组根据可编程计划自动递增的寄存器。在本系列的这一部分中,我将研究计时器的结构和操作,以及如何使用它来播种伪随机翻译 2021-08-18 02:06:30 · 583 阅读 · 0 评论 -
Game boy模拟器(9):内存池
内存池内存池与延展MBCs and the cartridge headerMBC1的实现接下来到目前为止,在本系列中,我们一直在处理GameBoy的简单内存映射的加载和仿真,整个游戏 ROM 都适合内存的下半部分。完全适合内存的游戏并不多(俄罗斯方块是少数游戏之一);大多数游戏都比这大,并且必须采用独立机制将游戏 ROM 的“银行”交换到 GameBoy CPU 的视图中。GameBoy 库中的一些第一批游戏是在卡带内使用内存库控制器构建的,它完成了将 ROM 库交换到视图中的工作;一直以来,各种版本翻译 2021-08-18 01:29:13 · 353 阅读 · 0 评论 -
Game boy模拟器(8):中断
中断中断和中断处理程序中断的硬件实现CPU中断处理流程图GameBoy 中的中断实现:中断标志实现:中断处理下一次:更大的游戏在上一部分中,通过引入精灵,为模拟游戏奠定了基础。但是,仿真器缺少一个方面:垂直消隐中断。这部分会从整体上介绍中断,特别是实现消隐中断;完成此操作后,模拟器将运行俄罗斯方块。想象一下,您有一台带有网卡的计算机,以及一些处理来自网络的数据的软件。从计算机的角度来看,数据只是每隔一段时间就会进来,因此您需要某种方式让软件知道新数据已经到达。有两种方法可以实现:轮询:软件每隔一段时间翻译 2021-08-17 01:10:21 · 414 阅读 · 0 评论 -
Game boy模拟器(7):精灵
精灵简介:GameBoy 精灵精灵优先级精灵渲染的伪代码精灵数据:对象属性内存精灵的 OAM 数据MMU.js:OAM访问GPU.js: 精灵结构精灵调色板GPU.js:精灵调色板处理渲染精灵GPU.js:使用精灵渲染扫描线接下来在本系列之前,模拟器已扩展为启用键盘输入,这意味着可以玩井字游戏。这样做留下的问题是游戏必须盲目进行:没有指示下一步将在何处进行,也没有按键将您移动到游戏中的哪个位置。传统上,二维游戏机通过使用精灵解决了这个问题:可移动对象块可以独立于背景放置,并且包含与背景分开的数据。Gam翻译 2021-08-15 23:37:52 · 374 阅读 · 0 评论 -
代码调试工具GDB
代码调试工具GDB入门什么是调试?关于GDB配套的工具什么是调试?让代码一步一步慢慢执行,跟踪程序的运行过程。比如,可以让程序停在某个地方,查看当前所有变量的值,或者内存中的数据;也可以让程序一次只执行一条或者几条语句,看看程序到底执行了哪些代码。在调试的过程中,我们可以监控程序的每一个细节,包括变量的值、函数的调用过程、内存中数据、寄存器、线程的调度等,从而发现隐藏的错误或者低效的代码。关于GDBGDB 属于 Linux 下使用最多的一款调试工具,因为比较通用,所以我们来学习如何使用他。配原创 2021-08-14 14:43:27 · 193 阅读 · 3 评论 -
Game boy模拟器(6):输入
这里写自定义目录标题键盘键盘的实现按键动作通过在前五个部分开发的工作仿真器和界面,仿真系统能够运行基本的测试 ROM,并生成图形输出。模拟器目前无法做的是将按键作为键盘输入,并将它们馈送到被测 ROM;为此,必须模拟键盘对 I/O 寄存器的影响。键盘GameBoy 有一个单一的输入方法,一个八键小键盘,可以按下任意数量的键。对于大多数键盘,按键排列在列和行的网格中:这些可以被视为导线,键之间可以形成连接。当其中一列被激活时,连接到该列的任何行也将被激活,并且硬件能够检测活动行以确定当前按下的键。在翻译 2021-08-12 01:41:55 · 290 阅读 · 0 评论 -
Game boy模拟器(5):集成
集成GPU寄存器实现:GPU 寄存器零页 I/O:GPU寄存器处理运行中的每帧index.html:模拟器界面jsGB.js:重置和调度测试在第 4 部分中,详细探讨了 GameBoy 的图形子系统,并将仿真放在一起。没有一套GPU的寄存器映射在软件中处理,图形子系统不能被仿真器使用;一旦这些寄存器可用,仿真器基本上就可以进行基本使用了。GPU寄存器GameBoy 的图形单元在内存映射的 I/O 空间中有一系列映射到内存中的寄存器。为了获得具有背景图像的工作仿真,GPU 将需要以下寄存器(其他寄存翻译 2021-08-08 22:20:17 · 429 阅读 · 0 评论 -
Filecoin 的一些基本入门知识
Filecoin是一个点对点网络,可将文件存储在Internet上,并具有内置的奖励机制,可确保随着时间的推移可靠地存储文件。可用的存储空间和价格完全不受任何一家公司的控制与垄断。 相反,Filecoin促进了存储市场的开放,任何人都可以参与进来。...翻译 2021-03-10 22:07:51 · 2401 阅读 · 0 评论 -
Game boy模拟器(4):图形
图形概述将 GameBoy 模拟器的形状放在一起,并在 CPU 和图形处理器之间建立了时序。画布已被初始化并准备好由模拟的 GameBoy 绘制图形;GPU 仿真现在具有结构,但仍无法将图形渲染到帧缓冲区。为了让仿真渲染图形,必须简要检查 GameBoy 图形背后的概念。概述就像那个时代的大多数游戏机一样,GameBoy 没有足够的内存来允许将直接帧缓冲区保存在内存中。...翻译 2021-08-07 00:58:14 · 601 阅读 · 0 评论 -
Game boy模拟器(3):GPU的时序
这里写自定义目录标题模拟屏幕光栅图形GPU 帧时序在本系列的前几部分中,已经布置了 GameBoy 模拟器的结构,并达到了可以加载游戏 ROM 的程度,并由模拟的 CPU 逐步完成。通过将仿真处理器连接到内存映射结构,现在可以将外围设备连接到系统。GameBoy 和任何游戏控制台使用的主要外围设备之一是图形处理器 (GPU):它是控制台的主要输出方法,处理器的大部分工作都在为 GPU 生成图形。模拟屏幕任天堂对 GameBoy 的内部名称是“点阵游戏”;它的显示器是尺寸为 160x144 的像素翻译 2021-08-03 02:00:24 · 597 阅读 · 0 评论 -
Game boy模拟器(2):运行内存
内存记忆体详细地查看内存区域[0000-3FFF] 卡带程序[0000-00FF] BIOS[0100-014F] 卡带头部[4000-7FFF] 卡带程序(其他)[8000-9FFF] 显存[A000-BFFF] 卡带(拓展)RAM[C000-DFFF] 运行内存RAM[E000-FDFF] 运行内存RAM(映射)[FE00-FE9F] 图形:角色信息[FF00-FF7F] 内存 I/O 映射[FF80-FFFF] 零页 RAM与 CPU 的接口加载 ROM下一步在本系列的前一部分中,计算机被介绍为一转载 2021-08-03 01:31:17 · 895 阅读 · 0 评论 -
Game boy模拟器:完整的 Z80 内核CPU源码
/** * jsGB: Z80 core * Imran Nazar, May 2009 * Notes: This is a GameBoy Z80, not a Z80. There are differences. * Bugs: If PC wraps at the top of memory, this will not be caught until the end of an instruction */Z80 = { _r: { a:0, b:0, c:0, d:0转载 2021-07-31 00:52:38 · 927 阅读 · 0 评论