一种用循环计数来注释Z80汇编程序的工具。

z80count的Python项目详细描述


Z80计数

这是一个使用正则表达式(我知道!) 并使用指令使用的周期向代码中添加注释。

它需要测试,可能还需要一个合适的z80解析器,但它对我和 我使用的是Z80汇编程序语法。

Demo with vim

安装

z80count需要python 3。

要安装到生产环境中,您可以使用pip

pip3 install --user z80count

或者您可以从z80count's releases tab下载包,解包并运行:

python3 setup.py install

要安装以进行开发,请运行:

git clone https://github.com/reidrac/z80count.git
cd z80count
pip3 install -e ".[dev]"

用法

您可以使用它:

z80count  < file.asm > file_c.asm

或者在vim里面你可以:

:% !z80count -s

使用-s工具添加小计。

默认情况下,{{{CD1}}将尝试更新注释以替换现有注释。

z80count添加的注释与-c中给定的列对齐。 (--column)选项(默认为50)。默认情况下,注释使用 空格,如果您更喜欢制表符,请使用-t选项。为了计算 填充z80count假定TAB等于8个空格。使用 选项-T覆盖此选项。

示例:

pushhlpopbcldhl,$5800lde,7.fade_out_all_loop0pushhlpushbchalt.fade_out_all_loop1lda,(hl)and7jrz,no_fade_all_inkdeca.no_fade_all_inkldd,alda,(hl)and$38jrz,no_fade_all_papersub8.no_fade_all_paperordldd,alda,(hl)and$c0ordld(hl),ainchldecbclda,borcjrnz,fade_out_all_loop1popbcpophldecejrnz,fade_out_all_loop0

z80count.py -s处理结果:

pushhl; [11 .. 11]popbc; [10 .. 21]ldhl,$5800; [10 .. 31]lde,7; [7 .. 38].fade_out_all_loop0pushhl; [11 .. 49]pushbc; [11 .. 60]halt; [4 .. 64].fade_out_all_loop1lda,(hl); [7 .. 71]and7; [7 .. 78]jrz,no_fade_all_ink; [12/7 .. 90/85]deca; [4 .. 89].no_fade_all_inkldd,a; [4 .. 93]lda,(hl); [7 .. 100]and$38; [7 .. 107]jrz,no_fade_all_paper; [12/7 .. 119/114]sub8; [7 .. 121].no_fade_all_paperord; [4 .. 125]ldd,a; [4 .. 129]lda,(hl); [7 .. 136]and$c0; [7 .. 143]ord; [4 .. 147]ld(hl),a; [7 .. 154]inchl; [6 .. 160]decbc; [6 .. 166]lda,b; [4 .. 170]orc; [4 .. 174]jrnz,fade_out_all_loop1; [12/7 .. 186/181]popbc; [10 .. 191]pophl; [10 .. 201]dece; [4 .. 205]jrnz,fade_out_all_loop0; [12/7 .. 217/212]

注释显示小计,有两种类型:

  • [A .. T0]
  • [B/A .. T1/T0]

其中a、b、t0和t1是:

  • A是当前指令的周期数。如果是有条件的 指令,这是条件不满足时的值。
  • B是满足条件时当前指令的周期数。
  • t0是不满足条件时的小计。
  • T1是满足条件时的小计。

配置文件

z80count将按顺序在以下位置查找配置文件:

  • 环境变量Z80COUNT_RC中给定的文件。

  • 环境变量中给定目录中的文件z80countrcXDG_DEFAULT_HOME或者,如果此变量未定义或为空,则 目录~/.config

  • 主目录中的文件.z80countrc

示例:

[z80count]
# Column to align newly added comments
# column = 50

# Enable debug (show the matched case)
# debug = no

# Include subtotals
# subtotals = no

# Number of spaces for each tab
# tab width = 8

# Keep previous cycle annotations in the comment
# keep cycles = no

# Use tabs to align newly added comments instead of spaces
# use tabs = yes

编辑器支持

故障排除

龙来了!

如果您认为有一条指令未正确解析,请使用-d标志。

如果你发现了一个漏洞,请随时打开一个公关!

作者

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用ObjectOutput/InputStream从自定义位置读/写   Java队列数组只打印出打印方法中for循环中的最后一个元素   java如何使用searchManager搜索和筛选listview   java ValueAnimator更改背景颜色   java什么是AOSP工具链?   序列化Java/Serializable仅覆盖已更改的对象   java Android单例类仅在第二次刷新时更新   将文本追加到JTextPane时,JTextPane的java滚动条不可见   java行为和繁忙指示器   javaspring,Thymeleaf和CSS如何给错误着色   java如何在两个测试类之间共享外部资源?   java Druid longSum度量未填充   按下按钮时,java列表不会显示(+字符串参数“流派”不存在)   java在Hibernate中如何延迟加载子记录?   java为对象提供随机统计信息   java如何使用GWT编辑器框架编辑多值字段?