当前位置:首页|资讯|ChatGPT

Zeal8bit OS在Emulator中的单步调试

作者:timfang1990发布时间:2023-07-08

0 前言

本文介绍了如何在网页Emulator中设置单步调试Zeal8bit OS的详细操作步骤,结合Zeal8bit OS源码可以更加高效、直观地理解OS的执行流程。

这几天开始阅读Zeal8bit OS(以下简称ZOS)源码,发现Z80汇编阅读起来还是比较困难的,毕竟自己仅有8086/8088汇编的基础,还是很多年前在大学课堂学的,这么多年不用早忘得差不多了。

现在去网上搜索Z80汇编能找到的资料也非常有限,毕竟是80年代的CPU了,这极大地加大了我阅读源码的难度。不过还好有ChatGPT可以帮忙分析整段晦涩难懂的代码,勉强支撑着我能将源码阅读下去。

但是即使有现代科技加持,面对流程稍微复杂点的代码,总会出现看了这段忘了前面的尴尬局面。比如,阅读到driver_init代码时,HL寄存器一直被高频使用,其寄存器的值也一直在不断更新,往往阅读到子程序后开始使用HL寄存器,结果忘了HL寄存器保存的内存地址值指向哪里,结果还要往前翻找到子程序调用的地方再次查看,这极大地影响了源码阅读理解效率(driver_init过程啃了一个礼拜都没有吃透,效率实在太低下了)。

翻看Emulator的介绍(网址:https://github.com/Zeal8bit/Zeal-WebEmulator/),发现这个Web Emulator有单步调试的功能:

Z80 Web Emulator的单步调试功能支持介绍

这让我眼前一亮,如果能把单步调试搞起来,那就能实时追踪各个寄存器和内存的值,理解源码的效率直接起飞,岂不美哉?终于,在一番折腾之后(毕竟Zeal8bit大神没有详细给出Emulator使用步骤,各种功能使用全靠自己摸索),终于搞定了Emulator单步调试ZOS的过程,在此把详细设置步骤分享出来~

1 环境及所需工具

  • Linux/Mac OSx

  • z88dk-dis工具

2 操作步骤

Step 1. OS bin文件和z88dk-dis工具准备

z88dk-dis是一款能将z80的机器码反解析成汇编代码的工具(详细介绍:https://github.com/z88dk/z88dk/wiki/Tool-z88dk-dis)。在我们安装z80dk-asm工具链的时候,其实已经将z88dk-dis工具安装上了。z88dk-dis工具安装和OS bin build详细过程见:

Zeal8bit操作系统Build & Run In Emulator (基于Ubuntu)

Zeal8bit操作系统Build & Run In Emulator (基于macOS)

以下步骤以MAC OSx系统中的操作为例。

Step 2. Disassemble Code Dump

在Zeal-8-bit-OS目录下执行命令:

z88dk-dis -o 0 -x build/os.map build/os_with_romdisk.img > disassemble.dump

z88dk-dis生成反汇编code

这条命令的含义是:参照build/os.map中的各个symbol映射表,将ZOS bin文件build/os_with_romdisk.img中的机器码从地址0处开始反汇编,并保存到文件disassemble.dump文件中。这样,Web Emulator就可以获得bin文件对应的反汇编文件,启用单步调试功能了。

Step 4. 文件载入及断点设置

将os_with_romdisk.img和disassemble.dump读入到Web Emulator中,并点击Read file(s)按钮,直至下方的OS binary和Symbols两个Items前面打上绿色的勾。


Bin和Symbol文件载入Emulator

然后在Emulator右上方Breakpoints输入框中输入断点,断点可以是具体的指令的内存地址也可以是反汇编文件disassemble.dump中的label。比如我输入反汇编文件中的label 'zos_drivers_init'然后按下Enter键,Emulator自动给我转换成了指令内存地址,并设置断点。

断点设置


Step 5. Run & Step Debug

点击‘Continue(F9)’按钮,我们就可以发现,Emulator运行就停在了内存地址‘0x0382’的‘zos_drivers_init’位置了,然后点击‘Step(F10)’就可以执行单步调试啦~

从左到右依次为:Continue(F9), Step(F10), Step Over(F11)和Stop
代码停在了设置的断点处(点击Disassemble标签)
断点处各个寄存器中的值显示

3 后记

随着单步调试设置成功,距离移植ZOS到RV的目标的速度也在加快,争取早日发布第一版demo,算是对整个移植过程有个阶段性的成果验收,加油~



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1