搜索此博客

2012年9月5日星期三

Jump to uncertain (run-time determined) address in assembly language

Sometimes I want program to jump to uncertain (run-time determined) address like function pointer does in C language. For example, a function table. If the chip supports "jsr" with register indirect addressing, like H8, it will be as simple as
    jsr   @er0
But on the core I am using called "Flex RISC", 8bit, performs as peripheral device in an ARM based SoC, thers is only one "jsr" instruction which using immediate addressing. Branch instructions (brXX) and jmp instruction do the same.
At last I found there is another instruction changes PC pointer, "rts". It pop PC point from stack. So here is the way out:
    ...
variable SomeAddr keeps SomeFunc's sddress
    ld     a1, SomeAddr
    ld     a2, SomeAddr + 1
    jsr    CallByAddr
    ...

SomeFunc:
    ...
    rts          ; this "rts" will exactly returns from the "jsr".

CallByAddr:
    psh    a2
    psh    a1
    rts          ; this "rts" will pop a2a1 to PC that makes SomeFunc called.

Android App 开除相册

Android自带相册会把机器里所有包含图片视频的文件夹都收录进去,除非那个文件夹包含“.nomedia”——一个隐藏文件。我的Nexus S就是这样,XOOM如果刷成美版也会。
这个“开除相册”就是把不希望相册自动收录的文件夹从相册中开除出去。

半成品,连个图标都还没有呢。
ListView上用的是SimpleAdpter,重写麻烦。重载了getView方法,这是ListView向Adpter要View(list item)时调的。我把序号写进那个View的tag里了。这样check/uncheck的时候好让CheckBox知道更新Map里哪个数据。
Check/uncheck的响应函数在SimpleAdpter.ViewBinder里,ViewBinder负责把Map里的数据反映到list item上。重载ViewBinder的setViewValue方法,这里能找到CheckBox对象,改它的Listener。

2011年7月17日星期日

X41任务之Reloaded

草稿
1. dock/undock
  ultrabase
    /sys/module/acpi/parameters/immediate_undock
    /etc/modprobe.d/myfilename.conf - options dock immediate_undock=0
  ultrabay
usb devices
2. suspend to disk
dock/undock when suspended
3. wireless sometimes assign to eth0 (done)
 udev rules
4. xdg-open
5. picasa 3.8 for linux (done)
 use wine version
6. ... ...

2011年6月1日星期三

二渡日本

而立而不立,
舍妻别儿去。
志高偏逢蹇,
难筑安身地!

原发事不清,
仕事途未明。
未怀夺人技,
安得顾庐情!

严慈唤儿归,
膝下双泪垂。
新妆眉不展,
几时常依偎。

一心陈七味,
两难吞鸡肋。
三思尤未绝,
四鼓不能寐!

四世同堂欢,
天伦正当圆。
胡不全亲孝,
妻儿共相牵!

于2011.6.1凌晨,

2011年5月29日星期日

Linux世界地图,付翻译


红冠联邦 (Redhat)
移根山 (chroot)
GPL海
RPM海峡
摩比邻联邦 (Moblin)
牛洋 (GNU)
飞渡拉独立共和国 (Fedora)
米果岛 (Meego)
斯拉奎王国 (Slackware)
油泥地 (Unity)
圣徒西亚 (CentOS)
安卓海
克兰邦公国 (CrunchBangLinux)
科学群岛
林纳斯湾
范海 (Canonical)
大编 (Compile)
亚科兰 (Arch)
法轮湾 (ChakraLinux)
泯涕之地 (Mint)
哥诺母山 (Gnome)
大乌斑图共产帝国
迷途大漠 (Noob)
真途禁地 (Gentoo)
晋权角 (sudo)
沙巴永海 (SabayonLinux)
曼垂沃兰 (Mandrival)
PCLINUXOS海
朱斑提亚 (Xubuntu)
马克群岛 (?)
福斯海峡 (?)
德宾共和国 (Debian)
酷斑图斯坦 (Kubuntu)
太阴斯坦 (MoonOS)
蜥蜴岛 (Gecko)
素子湖 (SuSE)
KDE海
吧嗒斯坦 (PardusLinux)
平盖斯坦 (PinguyOS)
初之邦 (ElementaryOS)
尊德罗斯圣国 (Xandros)
麦比西亚 (MepisLinux)
斯托曼海

2011年4月4日星期一

装X没有好下场

装X没有好下场之一
BYTE buff[20];


buff[0] = CMD_SOME_CMD;
buff[1] = PARAM1;
buff[2] = PARAM2;
*(WORD*)(buff + 3) = (WORD)PARAM3;


SndCmd(buff, 5);

有问题吗?没有,我拿GCC试过的,PARAM3正确的写到buff + 3的空间里了。但是我现在项目用的CPU上就有问题,奇数地址不能以WORD访问,结果PARAM3被写到buff + 2里去了。

装X没有好下场之二
寄存器清0要怎么清?xor.b r0l, r0l或者是sub.b r0l, r0l,而不是mov.b #0, r0l。理由是好像xor或者sub要比mov短,消耗CPU周期也少。而且mov不想影响状态寄存器。可是那是X86。现在用的CPU根本不是那么回事。用xor.b和用mov.b都是俩字节,一个周期。而且mov照样影响状态寄存器。

装X没有好下场之三
最近发现很多从前常用的写法,自以为是优化了,其实是给编译器填麻烦。本来人家编译器能自己优化的,让我给整乱套了。

2011年1月16日星期日

Picasa 3.8 for Linux

作为一个习惯把一切都托付给Google的网民(这不是什么明智的选择,我知道,但是已经习惯了),我能容许自己错过Picasa吗?然而时至今日,Picasa for Linux最高版本依然是3.0 beta。Windows版已经是3.8了啊。我想用Picasa for Linux,而且我想用3.8。3.8比3.0有什么新功能吗?不知道,肯定是有的吧?
Picasa for Linux并不是原生Linux程序,她是Wine的。那我Wine一个3.8的P4W再拿整个目录覆盖掉P4L的不久行了吗?说起来简单,实际上么,好像也就这么简单。那么我直接用Wine的P4W不就行了,有什么不同?不知道,我就是没想那么用。

  1. 下载P4W 3.8,装上
  2. 下载P4L 3.0 beta,装上
  3. cp -r ~/.wine/drive_c/Program Files/Google/Picasa3 ~/.google/picasa/3.0/drive_c/Program\ Files/Google/
妥了,跑下看看吧。好么?不好,没汉字!P4L带了一个字体配置工具,只要配置一下字体Link就行了。给Tahoma加一个中文字体的Link。看看,好了吧。
常用的功能都没有啥问题。位置标签不能用,打开会死。kill掉Picasa.exe,重新再起动,依然死。解决方案:
  1. 打开~/.google/picasa/3.0/user.reg,搜索active_metadata_tab。
  2. 把该行等号后面的引号里面的内容清空。存退。
  3. 妥了
这回真妥了。真妥了?毛病肯定是有的,不然官方为什么不出呢,既然这么简单?