首页 > 其他分享 >用SGDK开发世嘉MD游戏:调试篇

用SGDK开发世嘉MD游戏:调试篇

时间:2023-01-13 11:36:06浏览次数:54  
标签:MD GensKMod 游戏 打印输出 世嘉 SGDK 调试

用SGDK开发世嘉MD游戏:调试篇


本来想直接讲MD游戏开发的部分,但我还是觉得有必要先把调试这部分讲一下

由于世嘉MD属于上古时代的游戏主机,那时候的开发环境非常非常的恶劣,是我们今天难以想象的恶劣,虽然SGDK已经做的非常人性化,但还是难以跟现代的游戏引擎(比如unity、unreal、godot cocos还是算了吧,这玩意儿纯属一坨大便)相对比,在现代游戏引擎中调试是比较直观的,且不说编辑器中预览了,就是打印输出也是很舒服的,在 SGDK 中并不能打印输出,是根本没有 printf 这样的功能的,需要借助 GensKMod 这款模拟器才能打印输出,虽然可以用【在屏幕上绘制文字】的方式打印输出调试信息,但还是很难受,世嘉MD屏幕那么小,显示不了几行字,一旦需要查看大量信息就显得很笨拙,因此,GensKMod 模拟器可以说是开发MD游戏必备,要不然我不能保证你会不会疯掉,我反正是会疯掉。所谓工欲善其事必先利其器,如果没有趁手的调试工具,写起代码来未免有点盲人摸象的意思,到底代码运行起来是什么样的咱心里也没有数,即使有点数也并没有很踏实。所以我就把调试这篇文章放到前面讲了。

GensKmod_v073 下载

用 GensKMod 调试代码并不需要额外的配置,编译出游戏rom之后直接用模拟器打开就可以查看调试信息了,至于怎么编译游戏rom,上一篇有讲过,这里就不再赘述了。

这一篇我简单讲一下怎么在 GensKMod 模拟器中打印输出 Hello World。

代码如下:

#include <genesis.h>

int main()
{
    //这句就是在 GensKMod 模拟器中打印输出,就一句代码,很简单
    KLog("Hello World");

    while (TRUE)
    {
        VDP_waitVSync();
    }

    return 0;
}

KLog开头的函数还有一些其他的,自己可以尝试着写一写,看看都是些什么功能。

以上只是一句 Hello World,只是一个字符串,要是输出整型或者浮点数类型怎么办呢?也不难,看代码:

#include <genesis.h>

// 这个数是314,写成二进制的形式
int32_t number = 0b000100111010;

int main()
{
    KLog("Hello World");

    // 除以100,也就是3.14,这里输出是3.13,精度丢失了一点,影响不大
    // 世嘉MD是没有浮点数这个概念的,不像现在直接可以写float、double这些类型,
    // 取而代之的是fixed类型,就是定点数,用定点数表示小数,运算速度更快,效率更高
    fix32 test = intToFix32(number) / 100;

    // 这里是SGDK内置的32位定点数除法函数,跟上面直接除以100得出的结果是一样的,
    // 不过我还是推荐用内置的这个除法运算,内置的应该是效率更高
    fix32 pi = fix32Div(intToFix32(number), intToFix32(100));

    KLog_F1("test = ", test);
    KLog_F1("pi = ", pi);

    while (TRUE)
    {
        VDP_waitVSync();
    }

    return 0;
}

代码写完了,编译游戏rom。

打开 GensKMod 模拟器,在菜单栏找到Option,里面有一项是 Debug,这是设置 Debug 的地方,找到 Active Development Features 并打勾,点 OK 按钮确认修改并关闭设置界面。

打开 rom,在菜单栏找到CPU,CPU菜单下有一个Debug选项,Debug里边有一个Messages,点开就是了,KLog 函数打印输出的信息都会显示在这里,就好像C语言中的 Printf,C# 中的 Console.WriteLine。


标签:MD,GensKMod,游戏,打印输出,世嘉,SGDK,调试
From: https://www.cnblogs.com/sangerge/p/17049079.html

相关文章

  • 用SGDK开发世嘉MD游戏:入门篇
    用SGDK开发世嘉MD游戏:入门篇0.github上的wiki教程(推荐英语好的看,英语不好的就看我写的教程吧)https://github.com/Stephane-D/SGDK/wiki1.【安装SGDK(仅针对win......
  • 【题解】P6071 『MdOI R1』Treequery
    海浪尽头的你啊,到底何时归来?额滴就木异象啊……思路清真树论。树论地考虑祖先后代关系,分讨一下。用ST表处理一下\(lca(l,r)=u\):\(u,p\)无祖先后代关系,答案......
  • Oracle数据库软件包MD5校验HASH值汇总
    ################################Linux_x64_11gR211.2.0.4################################p13390677_112040_Linux-x86-64_1of7.zip大小:1395582860字节 MD5:......
  • 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写
    安装vue-cli脚手架之后,运行vue命令,报错。试了很多去缓存加环境变量的都没有成功。遇到一个简单且有效的加环境变量的方法运行npmconfiggetprefix显示一段路径地址......
  • 如何为 mdbook pdf 生成书签目录
    以RustByExample.pdf为例,分享如何为mdbook打入书签目录。生成本地网页书籍,并保存为pdfgitclonehttps://github.com/rust-lang/rust-by-example把书籍仓库克......
  • md转html
    3种前端实现.md文件转换成.html文件的方式i5ting_toc挺方便,gitbook试了init太慢放弃了,js代码没试#安装插件npminstalli5ting_toc-g#执行命令转换i5ting_toc-f......
  • 【cmd】Linux常用命令
    系统信息PS命令ps-a:显示现行终端机下所有程序,包括其他用户的程序psu:已用户为主的格式来显示程序状况psx:显示所有程序,不以终端机来区分USERPID%CPU......
  • python读取cmd命令行
    importosimportuiautomationasautoimportwin32clipboardasclipboardimportwin32condefgetCopy():clipboard.OpenClipboard()res=clipboard.GetC......
  • RSA非对称加密和MD5不可逆加密代码示例
    加密算法可以分为三大类:对称加密算法:DES 非对称加密算法: RSAHash算法: MD5登陆密码加密流程:web端用公钥加密密码,server端用私钥解码,将解出的明文用MD5加密......
  • 自定义orm、CMDB资产管理系统
    1自定义ormhttps://www.cnblogs.com/liuqingzheng/article/9006025.html#了解orm底层原理2cmdb资产管理系统项目#CMDB资产管理系统就是服务器管理系统#......