- 博客(11)
- 资源 (7)
- 收藏
- 关注
原创 从零开始写NES模拟器
之前写了如何写一个nes模拟器,感觉有些语焉不详,现补充一个小白文章。FC游戏模拟器是如何工作的我们小时候很多人玩过任天堂的红白机游戏。但是它是如何工作的,却很少有人提及。今天我们来讨论任天堂的游戏机工作机制。首先我们看到的是游戏画面,实际上老式的电视的分辨率是240*256的。它是如何工作的呢?FC游戏机中包含CPU,PPU,卡带,内存。当我们开机时,CPU加载卡带的游...
2019-06-04 07:28:19 5178
原创 ucgui 的内存设备使用
在前一次的文章中叙述了使用存储设备防止显示对象重绘时发生的闪烁现象,但是没有达到实际的效果。在今天的文章中仍然使用存储设备,不过实际使用了存储设备中有相同功能的两个函数。GUI_MEMDEV_CopyToLCD(GUI_MEMDEV_Handle hMem)函数和GUI_MEMDEV_CopyToLCDAA(GUI_MEMDEV_Handle hMem)函数。得到了两种不同的效果:先将原函数附下,运行结果截图赋予函数下方。#include "GUI.H"#include "windows....
2020-08-14 08:07:39 442
转载 用51单片机控制RTL8019AS实现以太网通讯(转)
互联网络硬件、软件的迅猛发展,使得网络用户呈指数增长,在使用计算机进行网络互联的同时,各种家电设备、仪器仪表以及工业生产中的数据采集与控制设备在逐步地走向网络化,以便共享网络中庞大的信息资源。在电子设备日趋网络化的背景下,利用廉价的51单片机来控制RTL8019AS实现以太网通讯具有十分重要的意义。1 以太网(Ethernet)协议一个标准的以太网物理传输帧由七部分组成(如表1所示,单位:字...
2019-12-31 16:18:50 1249
原创 在Ubuntu下,从零开始写操作系统(2)-笔记
进入保护模式,并显示一个'L'保护模式之前,开A20,载入gdt,lmsw ax,载入机器状态字一句话就可以进入保护模式。进入后要立即长跳转到32位代码。/*设置文件*/.code16.text mov $3,%ax int $0x10 /*显示进入设置文件*/ mov %cs,%ax mov %ax,%ds mov %ax,%es mov %ax,%fs...
2019-06-13 10:45:30 285
原创 在Ubuntu下,从零开始写操作系统(1)-笔记
上一篇讲到如何在屏幕上显示一个Hello,world!本篇要从软盘中读取文件——Loader.bin由于起始扇区只有512字节,要在FAT12中读取文件Loader.bin,代码比较紧凑。下面是fat12的文件系统BPB,其中的值基本上都是固定的。jmp LABEL_START /* 跳转指令 */ nop /* 这个nop指令是可选的,如果你用的是e9指令(长跳转),这个是不需要...
2019-06-13 10:38:17 391
原创 在Ubuntu下,从零开始写操作系统(0)-笔记
1.安装Ubuntu 16.04操作系统 32位,因为16.04版本是最稳定的版本。安装方法请百度。2.安装bochs; 命令:sudo apt-get install bochs3.安装gcc;可能系统没有自带gcc, 命令:sudo apt-get install gcc编写如下代码//16位的代码段.code16//代码起始.text mov %cs,%...
2019-06-12 09:19:55 290
原创 如何写一个NES模拟器(四)——6502CPU的模拟
如何模拟6502的CPU呢? 6502的CPU主频大约是1.78MHz,什么意思呢?就是1秒钟能运行1.78M个CPU循环(cycles)。NES每秒生成60个帧,每个帧有262条扫描线。那么每条扫描线的CPU循环数就是:1.78 M / 60 / 262 = 113.23 cycles。由于现代的CPU主频过高,我们在运行113个循环后可以睡眠一会。或者更简单的一个方法是,每一帧...
2018-11-08 16:49:06 7003
原创 如何写一个NES模拟器(三)——精灵的显示
上次写到显示命名表,接下来可以显示精灵了。给初学者补充一下,在windows屏幕显示图像的流程是这样的,分配一段内存称为显存,把所有像素都写入(通过draw_window_point函数)进去,然后再通过CreateDIBSection创建位图,再用Bitblt函数绘制到前台。 闲话少叙,进入正题。NES中精灵由专门的精灵内存(256字节)存放,在硬件中,一般映射在CPU的某个部...
2018-11-08 13:22:34 2627
原创 如何写一个NES模拟器(一)
1.认识NES文件格式偏移0-3 字符串“NES^Z”用来识别.NES 文件偏移4 16kB ROM 的数目偏移5 8kB VROM 的数目(摘自《任天堂产品系统文件》)NES文件的前16个字节是文件头,前4个字节是NES^Z,文件标识。第5个字节是16K ROM的数量,第6个字节是8K VROM的数目。ROM文件格式具体是这样:16字节(文件头)+16K x N(程序主体...
2018-11-07 10:24:33 9436
原创 如何写一个NES模拟器(二)——显示命名表
前面写了读取和显示图案表,现在来写如何显示命名表。这些内容都出现在《任天堂产品系统文件》中,若有疑惑,请下载此文件。PPU 的内存空间如下地址0x0000- 0x1fff 是图案表,所有屏幕显示的(点阵)图案都从这里获取。下面是PPU的4个命名表(0x2000-0x2fff),通俗的来说,这4个命名表就是显示在屏幕上的画面了。0x3f00起始的16个字节是背景调色板,0x3f1...
2018-11-06 23:09:32 2535
原创 Hook DirectX 在War3 魔兽争霸界面写屏
由于经常玩Dota,11平台出来以后,发现War3界面上有一行字,“游戏正在进入....”。就想到了它的实现方式,HOOKAPI。《Windows核心编程》中有关于hookapi的描述, 以前都是——先改写原函数的前5个字节,跳转到自己的函数,还原原函数,调用,结束。前段时间看到微软的这个Detours库,实现更方便,多线程时更安全。 Detours库,可以在微软官方下载,
2015-06-28 17:55:10 6211 2
Icepak进阶导航案例.pdf
2019-06-03
中国象棋-局域网对战版 VC++源码
2010-04-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人