Pokemon Center | 口袋中心 以口袋妖怪为主题并带有其他动漫游戏的讨论

 找回密码
 加入口袋中心
搜索
查看: 3871|回复: 3

HackMew thumb.bat的shell实现与改良

[复制链接]

3369

回帖

552

现金

485

勋章券

超级版主

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
22136
QQ

时光印记Lv.3挥金如土勋章水中王者勋章Lv3Omega红宝石发售确认纪念章Alpha蓝宝石发售确认纪念章金银好CP-Ho-oh/LUGIA【里】金银好CP-Ho-oh/LUGIA【真·正常向】异化型LUGIA【M超梦版】

发表于 2017-9-8 23:26:20 | 显示全部楼层 |阅读模式
本帖最后由 jiangzhengwenjz 于 2017-9-9 11:19 编辑

因为检测环境变量的原因,只能在linux下使用
使用方法:
首先确保devkitARM的bin目录在你的$PATH变量中,因为他所依赖的是它里面的as和objcopy
然后,拷贝下面的代码入一个文本文件,命名为thumb.sh(请确保可执行权限)
编译时只需./thumb.sh [输入源代码文件名] [输出二进制文件名(可选)]会自动用bash而不是sh执行

输入的文件必须是.s或.asm结尾!

其他与windows下thumb.bat功能类似,新增了少许错误提示。
  1. #!/usr/bin/env bash

  2. AS=arm-none-eabi-as
  3. OBJCOPY=arm-none-eabi-objcopy

  4. function isInPath()
  5. {
  6. retval=1
  7. IFS_=$IFS  
  8. IFS=:
  9. for directory in $PATH
  10. do
  11.         if [[ -x ${directory}/${1} ]]
  12.         then
  13.                 retval=0
  14.                 break
  15.         fi
  16. done
  17. IFS=$IFS_
  18. return $retval
  19. }


  20. isInPath ${AS}
  21. let res=$?
  22. isInPath ${OBJCOPY}
  23. let res+=$?
  24. dst=$2

  25. if [[ ${1} = "" ]]
  26. then
  27.         echo "Lil' ARM/THUMB Assembler Shell Script"
  28.         echo "Written by JZW"
  29.         echo
  30.         echo "Usage: ./thumb.sh source.[asm|s] [output.bin]"
  31.         echo
  32. elif [[ "${1##*.}" = "s"||"${1##*.}" = "asm" ]]
  33. then
  34.         if [[ ! -f ${1} ]]
  35.         then
  36.                 echo "Cannot assemble ${1}: the file does not exist."
  37.         elif [[ $(stat -c "%s" ${1}) = 0 ]]
  38.         then
  39.                 echo "Cannot assemble ${1}: the file is empty."
  40.         elif [[ res -gt 0 ]]
  41.         then
  42.                 echo "Compiler Missing: make sure that you have devkitarm bins in your path variable."
  43.         else
  44.                 if [[ -f "a.out" ]]
  45.                 then
  46.                         rm a.out
  47.                 fi
  48.                 $(${AS} -mthumb -mthumb-interwork ${1})
  49.                 if [[ $? = 0 ]]
  50.                 then
  51.                         if [[ ${2} = "" ]]
  52.                         then
  53.                                 dst=${1%%.*}.bin
  54.                         fi
  55.                         $(${OBJCOPY} -O binary a.out ${dst})
  56.                         if [[ $? != 0 || ! -f ${dst} ]]
  57.                         then
  58.                                 rm a.out
  59.                                 echo "Cannot assemble ${1}: An error occurred."
  60.                         else
  61.                                 echo "Assembled successfully."
  62.                         fi
  63.                        
  64.                 elif [[ -f "a.out" ]]
  65.                 then
  66.                         rm a.out
  67.                         echo "Cannot assemble ${1}: An error occurred."
  68.                 else
  69.                         echo "Cannot assemble ${1}: An error occurred."
  70.                 fi
  71.         fi
  72. else
  73.         echo "The input file should have the extension .asm or .s."
  74. fi
复制代码
代码如果测试下来无太多问题的话,晚些时候会上传到github。
Github: https://github.com/jiangzhengwenjz/thumb.sh
回复

使用道具 举报

26

回帖

121

现金

0

勋章券

新伙伴的欢笑

Rank: 3

积分
69
发表于 2017-9-9 08:23:54 来自手机 | 显示全部楼层
那啥。。。这个可以干嘛??
回复 支持 反对

使用道具 举报

20

回帖

77

现金

0

勋章券

口袋学堂外的努力

Rank: 2Rank: 2

积分
40
发表于 2017-9-9 09:40:02 | 显示全部楼层
回复

使用道具 举报

20

回帖

77

现金

0

勋章券

口袋学堂外的努力

Rank: 2Rank: 2

积分
40
发表于 2017-9-9 09:40:28 | 显示全部楼层
1696774136 发表于 2017-9-9 08:23
那啥。。。这个可以干嘛??

可以搞基
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入口袋中心

本版积分规则

手机版|Archiver|Pokemon Center

GMT+8, 2024-11-21 19:04 , Processed in 0.108761 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表