在Gameboy中为C创建一个二级计数器

use*_*584 1 c gameboy

所以我是C的新手,并被分配了制作游戏的任务.我将使用Gameboy模拟器,并且不鼓励导入任何超出基础的库.

我想想办法运行一个二级计数器(将在屏幕上显示),但无法使用该time.h库,我觉得有点卡住了.

无论如何我可以这样做吗?有人告诉我,Gameboy的运行速度相当缓慢,如果我能让它陷入一个"忙碌的循环",我可能会"大约一秒钟",并按照这种方式计算.

我已经考虑过这个sleep功能了,但那是在unistd.h库中.我也考虑过设置一个循环并计算高达1万(或任何数字可能需要一秒钟来计算),但所有这些都将同时发生在手头的游戏中,我担心这样的事情会延迟游戏玩法和其他事情的发生.

有什么建议?

编辑:我认为任何超出stdlib.hstdio.h不允许的事情.

Kev*_*vin 5

GAMEBOY有一个硬件定时器.

有时,定时器会定期中断需要定期或percise更新的例程,这很有用.GameBoy中的计时器具有4096,16384,65536或262144赫兹的可选频率.该频率使定时器计数器(TIMA)递增.当它溢出时,它会产生一个中断.然后加载Timer Modulo(TMA)的内容.以下是示例:

;This interval timer interrupts 4096 times per second
ld a,-1
ld ($FF06),a ;Set TMA to divide clock by 1
ld a,4
ld ($FF07),a ;Set clock to 4096 Hertz
Run Code Online (Sandbox Code Playgroud)

因此,编写中断处理程序以跟踪中断的数量,并在每4096(= 0x1000)次中断时更新显示的时钟.