UEFI开发探索79- YIE001PCIe开发板(12 贪吃蛇)

(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365)

YIE001PCIe开发板之贪吃蛇


上一篇开发的贪吃蛇,除了使用了启动服务所提供的键盘服务函数和延时函数外,主要使用了GraphicsOutput Protocol。

这使得代码无需进行修改,能很容易地移植到Option ROM的框架代码中。

本篇比较短,主要是介绍如何将UEFI应用Snake移植到YIE001的OpROM框架中。

移植的步骤如下。

1 代码整理

上一篇的示例工程Snake,实际上是在以前的RngEvent的示例上进行修改的。所需要的函数,仍旧是RngEvent中使用过的。

在Option ROM的框架示例中,新建C文件GreedSnake.c,把Snake中与贪吃蛇相关的函数全部拷贝进去。函数的功能在上一篇中都介绍了,包括:

VOID CreateMap(VOID);
VOID SnakeElement(UINT32 x,UINT32 y,UINT8 ColorIndex);
VOID InitSnake(VOID);
UINT8 BiteSelf();
VOID RandomFood(VOID);
UINT8 NotCrossWall(VOID);
UINT8 SnakeMove(VOID);
VOID GameRun(VOID);
VOID EndGame(VOID);

新建头文件GreedSnake.h,将相关的宏定义和数据结构,以及函数声明添加在此文件中。并声明需要用到的外部颜色表,也即:
extern EFI_GRAPHICS_OUTPUT_BLT_PIXEL gColorTable[];

在GreedSnake.c中包含GreedSnake.h头文件,以及需要用到的Font.h、Window.h、Graphic.h和Keyboard.h。并将贪吃蛇用到的全局变量,在此文件中定义。

另外两个需要用到的函数,CheckKey()的实现和声明,分别拷贝到Keyboard.c和Keyboard.h中;随机数产生函数robin_rand()则放到Common.c和Common.h中。

本篇的示例工程为YIE1GS,将需要编译的文件,在YIE1GS.inf中添加,就完成了源码文件的改造了。

在Option ROM的框架代码的BlankDrv.c中,增加GreedSnake.h的包含,并将HelloMyROM()函数修改为如下内容:

VOID HelloMyROM(VOID)
{
  UINT64 flag;

  flag = InintGloabalProtocols(S_TEXT_INPUT_EX | GRAPHICS_OUTPUT);
  Print(L"flag=%x\n",flag);
  
  SwitchGraphicsMode(TRUE);
  SetBKG(&(gColorTable[DEEPBLUE]));

  CreateMap();
  InitSnake();
  RandomFood();
  GameRun();

  WaitKey();
  SetMyMode(0x0);
  SwitchGraphicsMode(FALSE);
}

至此,完成了代码的移植工作。

2 编译及测试

编译命令如下:

C:\UEFIWorkspace>build -t VS2015x86 -p RobinPkg\RobinPkg.dsc \
-m RobinPkg\Drivers\YIE1GS\YIE1GS.inf -a X64

按照之前的方式,把编译出来的ROM生成文件刷入YIE001的Flash,或者直接在UEFI Shell下加载ROM直接进行测试。

其运行方式和上一篇的Snake是完全一样的,运行截图就不发出了。

不过,Option ROM是由BIOS加载的,加载时机完全由BIOS决定。因此,无法保证所有Protocol能正常使用,这是需要注意的地方。下一篇是YIE001开发板实验的最后一篇,用一个实例演示如何把之前博客中的实例程序移植到OpROM框架中,以及开发过程中需要注意的点。

Gitee地址:https://gitee.com/luobing4365/uefi-explorer
项目所用ROM文件位于:/ 79 YIE1GS下


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luobing4365

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值