代码 2-2
static void yield(YieldReason reason){// 调度原因yield_reason = reason;// 调度到另一个协程上switch_to(&frontend_ctx);}// 协程切换函数static void switch_to(ucontext_t *to){// 给 co_switch 包装了一层,简化了代码量co_switch(curr_ctx, to);}// 协程切换函数static void co_switch(ucontext_t *prev, ucontext_t *next){prev_ctx = prev;curr_ctx = next;// 切换到 next 指向的上下文,将当前上下文保存在 prev 中swapcontext(prev, next);}具体用法请见后文
由于文章篇幅有限,下面只展示的关键源码部分 。更详细的源码逐行中文注释:
地址:https://github.com/AnthonySun256/easy_games
2.3 模拟硬件前文讲过,si78c 是原版街机游戏像素级的复刻,甚至大部分的内存数据也是相等的,为了做到这一点 si78c 模拟了街机的一部分硬件:RAM、ROM 和 显存,它们在代码中被封装成了一个名为 Mem 的大结构体,内存分配如下:
0000-1FFF 8K ROM2000-23FF 1K RAM2400-3FFF 7K Video RAM4000- RAM mirror可以看出当年机器的 RAM 只有可怜的 1kb 大小,每一个比特都弥足珍贵需要程序认真规划 。这里有张 RAM 分配情况表,更多详情
推荐阅读
- 梦到了掉牙出血 梦到了掉牙出血了有什么征兆
- 华为手环4什么时候出的 华为手环4什么时候出的
- 厨房地板用什么材料好又实惠 厨房地板用什么材料好
- 广告传单属于什么垃圾 广告传单属于什么垃圾分类
- 门面房与商铺的区别 门面房与商铺的区别是什么
- 梦到了喝花茶 梦到了喝花茶是什么意思
- 包含成语什么在眉什么意思的词条
- 梦到了朋友搬家 梦到了朋友搬家是什么意思
- 奈斯是什么意思中文翻译 奈斯是什么意思中文
- 吸入式新冠疫苗是什么?长沙哪些人可以接种?