7

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

 2 years ago
source link: http://yiiyee.cn/blog/2021/02/16/uefi%e5%bc%80%e5%8f%91%e6%8e%a2%e7%b4%a279-yie001pcie%e5%bc%80%e5%8f%91%e6%9d%bf%ef%bc%8812-%e8%b4%aa%e5%90%83%e8%9b%87%ef%bc%89/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

请保留-> 【原文:  https://blog.csdn.net/luobing4365 和 http://yiiyee.cn/blog/author/luobing/】

上一篇开发的贪吃蛇,除了使用了启动服务所提供的键盘服务函数和延时函数外,主要使用了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-exolorer
项目所用ROM文件位于:/ 79 YIE1GS下

154 total views, 1 views today

210c9a4d410d265665667a36fbe0f529?s=49&d=identicon&r=g作者 罗冰(Robin)发布于 2021年2月16日2021年2月16日分类 BIOS/UEFI


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK