代碼 2-2
static void yield(YieldReason reason){// 調(diào)度原因yield_reason = reason;// 調(diào)度到另一個協(xié)程上switch_to(&frontend_ctx);}// 協(xié)程切換函數(shù)static void switch_to(ucontext_t *to){// 給 co_switch 包裝了一層,簡化了代碼量co_switch(curr_ctx, to);}// 協(xié)程切換函數(shù)static void co_switch(ucontext_t *prev, ucontext_t *next){prev_ctx = prev;curr_ctx = next;// 切換到 next 指向的上下文,將當(dāng)前上下文保存在 prev 中swapcontext(prev, next);}具體用法請見后文
由于文章篇幅有限,下面只展示的關(guān)鍵源碼部分 。更詳細(xì)的源碼逐行中文注釋:
地址:https://github.com/AnthonySun256/easy_games
2.3 模擬硬件前文講過,si78c 是原版街機(jī)游戲像素級的復(fù)刻,甚至大部分的內(nèi)存數(shù)據(jù)也是相等的,為了做到這一點(diǎn) si78c 模擬了街機(jī)的一部分硬件:RAM、ROM 和 顯存,它們在代碼中被封裝成了一個名為 Mem 的大結(jié)構(gòu)體,內(nèi)存分配如下:
0000-1FFF 8K ROM2000-23FF 1K RAM2400-3FFF 7K Video RAM4000- RAM mirror可以看出當(dāng)年機(jī)器的 RAM 只有可憐的 1kb 大小,每一個比特都彌足珍貴需要程序認(rèn)真規(guī)劃 。這里有張 RAM 分配情況表,更多詳情
推薦閱讀
- 夢到了掉牙出血 夢到了掉牙出血了有什么征兆
- 華為手環(huán)4什么時候出的 華為手環(huán)4什么時候出的
- 廚房地板用什么材料好又實(shí)惠 廚房地板用什么材料好
- 廣告?zhèn)鲉螌儆谑裁蠢?廣告?zhèn)鲉螌儆谑裁蠢诸?
- 門面房與商鋪的區(qū)別 門面房與商鋪的區(qū)別是什么
- 夢到了喝花茶 夢到了喝花茶是什么意思
- 包含成語什么在眉什么意思的詞條
- 夢到了朋友搬家 夢到了朋友搬家是什么意思
- 奈斯是什么意思中文翻譯 奈斯是什么意思中文
- 吸入式新冠疫苗是什么?長沙哪些人可以接種?
