[业余土制] 实时汇编编译器

实时动态在内存中编译汇编代码,并返回函数调用指针,可用于JIT系统的后端:

项目地址:http://code.google.com/p/asmpure/

例子:

const char *AlphaBlendAsm =
"PROC C1:DWORD, C2:DWORD, A:DWORD\n"
"    movd mm0, A\n"
"    punpcklwd mm0, mm0\n"
"    punpckldq mm0, mm0\n"
"    pcmpeqb mm7, mm7\n"
"    psubw mm7, mm0\n"
"    \n"
"    punpcklbw mm1, C1\n"
"    psrlw mm1, 8\n"
"    punpcklbw mm2, C2\n"
"    psrlw mm2, 8\n"
"    \n"
"    pmullw mm1, mm7\n"
"    pmullw mm2, mm0\n"
"    paddw mm1, mm2\n"
"    \n"
"    psrlw mm1, 8\n"
"    packuswb mm1, mm1\n"
"    movd eax, mm1\n"
"    emms\n"
"    ret\n"
"ENDP\n";

void testAlphaBlend(void)
{
        CAssembler *casm;
        int c;

        int (*AlphaBlendPtr)(int, int, int);

        // create assembler
        casm = casm_create();

        // append assembly source
        casm_source(casm, AlphaBlendAsm);

        AlphaBlendPtr = (int (*)(int, int, int))casm_callable(casm, NULL);

        if (AlphaBlendPtr == NULL) {
                printf("error: %s\n", casm->error);
                casm_release(casm);
                return;
        }

        printf("==================== Alpha Blend ====================\n");

        casm_dumpinst(casm, stdout);

        printf("\nExecute code (y/n)?\n\n");

        do
        {
                c = getch();
        }
        while(c != 'y' && c != 'n');

        if(c == 'y')
        {
                int x = AlphaBlendPtr(0x00FF00FF, 0xFF00FF00, 128);
                printf("output: %.8X\n\n", x);
        }

        free(AlphaBlendPtr);
        casm_release(casm);
}

output: 7f7f7f7f

Loading

Posted in 开源项目, 编程技术, 编译原理 | Tagged , | 3 Comments

[游戏演示] ActionScript 鼠标手势识别

学习ActionScript3,画一星期写了个DEMO:

网页地址:http://www.skywind.me/weapon

Loading

Posted in 人工智能, 开源项目, 游戏开发, 编程技术 | Tagged , | Leave a comment

PowerPC 汇编入门与优化

PowerPC于1991年IBM/MOTO/APPLE研制,大量应用于服务器(AIX / AS400系列及苹果系列服务器),家用游戏机(PS3, Wii, XBOX, GameCube),以及嵌入式(仅次于Arm/x86排第三)。PowerPC核心在于开放系统软件标准,其应用范围仅次于x86,是除去x86外最值得开发者了解的体系。

不需要写出非常高效的代码,但要了解基本效率原则;不需要大规模开发PPC程序,但需要时能写几段、调试时能看懂哪里错了。本文将从对比x86入手,引入RISC及PowerPC体系概念,向读者介绍该体系指令集,常用优化方法和交叉编译环境及模拟器的搭建等内容。

Continue reading

Loading

Posted in 编程技术 | Tagged | Leave a comment

[业余土制] SlabPlus内存分配算法

This is an enhanced SLAB algorithm implementation in application layer, which provides O(1) memory allocating and efficient memory recycling.

  • application layer slab allocator implementation
  • O(1) allocating / free: almost speed up 500% – 1200% vs malloc
  • re-implementation of page supplier: with new “SLAB-Tree” algorithm
  • memory recycle: automatic give memory back to os to avoid wasting
  • 30% – 50% memory wasting
  • platform independence

Since SUNOS has presented slab allocation theroy, many OSs have implemented slab in their kernel. But it requires kernel-layer interfaces such as page supply etc. So this library improves slab’s algorithm and brings the interfaces of slab into application layer.

项目位置:http://code.google.com/p/memslab/

原理叙述:

Continue reading

Loading

Posted in 开源项目, 编程技术 | Tagged | Leave a comment

[转载] 二十六史 – 毛太祖本纪

本朝太祖毛姓讳泽东字润之,湖南湘潭人氏。其寿诞之日为西夷之圣诞日。帝少有大志。未冠之时即作咏蛙诗,以述其志。及少壮,游学长沙,师从杨昌济,后入京,供职于京师太学藏书阁,问学于鸿儒陈仲甫、胡适之、李守常等。适之昔日留学于美夷,恃才傲物,因帝未忝科名,适之甚轻之。适之门生傅斯年、罗家纶之辈亦甚轻帝。后帝一统天下,欲灭群儒,盖因此三人故耳。帝受仲甫命,返湘结党,得仲甫提携,得以拜见于前朝太祖,官侍读学士。前朝太祖崩,时,前朝武厉帝为大司马大将军,阴结其党,欲灭帝党人。帝谏以兵击之,仲甫不许,武厉得以蓄积羽翼,民朝十六年武厉于松沪,前朝摄政王汪公于江夏,大杀帝党人。八月帝与诸党人会于汉口议事,帝曰:枪杆子里面出政权!众皆异之,后受命返湘,策反南军卢尔德铭部,九月九日兴兵起事,围长沙,不克,败走江西。军次三弯,帝重编余部,至队官皆有帝之党人监军。帝据井岗,与朱武胜公所部合兵,屡败官军,威名远扬,号朱毛军。武厉怒,令江西巡府鲁涤平统兵十万进剿,帝诱敌深入,引兵击之,涤平败,帝擒官军先锋总兵张辉瓒。武厉闻信,令兵部尚书何应钦统兵二十万进剿,帝大败之。武厉益恐,统兵三十万再战,又败于帝。一载余,武厉又率五十万劲旅进剿。时帝因党争,被削兵权,虚职赋闲。官军犯境红朝震恐,朱武公与周文正公掌兵权,问计于帝,帝授奇计再破官军。武厉败绩,再整旗鼓,以西夷部番将参赞军机,以百万之众犯境。时自俄狄归国之儒生博古辈摄政,番将李德与周文正公参赞军机,博古一儒生耳,挟俄狄酋斯大林之威,夺帝兵权,唯俄狄之命是从,事无巨细,皆听命于李德。李德辈纸上谈兵,屡战屡败。引兵西走,兵渡湘水,不足三万,众将皆恶李德,兵次遵义,诸将议政,帝之威众人咸服,周文正、朱武胜公皆附之,夺博古、李德兵权,帝得以再统雄兵。帝帅余部,转战滇、黔、川诸省。过雪山,与张国焘部合兵,国焘忌帝之官居其右,欲害帝,大将军叶剑英闻信,间道驰告帝,帝得脱。国焘部将陈昌浩欲引兵击帝,大将军徐向前拍案而起,国焘、昌浩乃罢。民朝二十四年入陕,据陕北以抗官军。官军进剿屡败于帝。帝令徐向前率所部西征,败于西北回军,丧师数万,向前等仅以身脱。丙子双十二,帝策反满洲王张公、陕西镇守使杨公兵谏,囚武厉,帝使周文正公谒武厉,晓以大义,武厉罢兵。

民朝二十六年夏,倭寇兵临幽州寻衅,幽州节度使宋与寇战,不克,败走保定,倭寇陷幽燕。帝令周文正公再谒武厉,武厉许以招安,北军三万余朱、彭为帅,南军两万余叶、项为帅,两军均受帝节制。合官军与倭寇血战八年,民朝三十四年倭寇败降,帝与周文正赴陪都谒武厉,共商国事。民朝三十六年兵火起,官军伐帝。帝令大将军林、罗取满洲,世祖与大将军刘取中原,大将军陈、粟取华东,大将军彭取西北,大将军聂取幽燕。诸军屡败官军。民朝三十七年大将军林、罗与官军战于满洲,大破之,尽占满洲地。世祖、大将军刘与陈、粟部合兵大破官军于徐蚌,陈兵长江,京师震恐。林、罗入关与大将军聂合兵,合围幽州,幽州节度使傅作义降。大将军彭横扫西北,兵临西域,帝移驾幽州,以之为都,改称北京,北方遂定。民朝乞和,帝不许,令世祖与刘、陈、粟诸将合百万众,渡长江,取金陵。以陈、粟取华东,林、罗取华中,世祖与刘将军取西南。诸军势如破竹,官军尽溃不成军。帝以世祖为西南节度使,坐镇成都,以图吐蕃。

武厉败走东海夷州,据澎湖以抗王化。民朝三十八年,太祖武帝开国元年,帝登天安门,诏告天下。帝定鼎,君临八方。初,倭寇败降,西夷美利坚助武厉以军资,以抗帝军,帝怒,斥之曰:美帝国主义都是纸老虎。开国元年作《别了,司徒雷登》以示美夷。开国二年高丽内乱,南高丽乞师西夷,美夷合西夷十五部落进兵北高丽,势如破竹,北高丽溃不成军。酋帅麦克阿瑟狂言饮马鸭绿水。北高丽酋长金日成乞师天朝,帝令西北王彭公为东征元帅,太子岸英监军。统兵二十五万,以将军邓华为先行,东征高丽。彭公与美夷战,大破之。开国三年,太子阵亡,帝大怒,令彭公进兵,美夷乞和,帝不许,彭公再战,五战五捷,阵斩酋帅沃克,天下皆慑于帝之威。开国五年,彭公平美夷于高丽,班师还朝。

开国初年,帝与周文正公巡幸北狄俄罗斯,与狄酋王斯大林盟,约为兄弟之邦。国经战乱,百废待兴,帝以刘殇公为太师摄政王,周文正公为相国。免天下钱粮。世祖平定西南,传檄吐蕃,吐蕃降。征西将军王震,进兵西域,前朝西域督护陶峙岳降。帝令官军平寇,前朝余孽星散。行三反、五反,斩天津知府刘青山等以清吏治,天下安定。开国九年行反右,帝定奇计曰:引蛇出洞。初令天下无论军民妇孺皆可谏国事,言政弊。后将直言者尽数收监,交有司论罪。天下儒生遂不敢以古讽今,枉谈国事。行大跃进,民不聊生,饿殍千里,三年饿毙两千余万口。俄狄发难,帝令翰林作文与俄狄论战。后会诸侯于庐山,彭公谏八万言书,帝怒,黜彭公,以林幽公代之。吐蕃达赖阴兵起事,帝令军平之,达赖间道天竺。吐蕃遂定。天竺、俄狄入寇,帝大破之,天下皆慑于帝之天威。

开国十二年,天下饥荒,帝与群臣皆不食肉,以示与民共苦。会诸侯于京,曰七千人大会,帝下罪己诏。储君刘殇公曰:三分天灾,七分人祸。帝甚不悦,始有废储之意。开国十七年,江后令大学士姚文元作《评海瑞罢官》,文革始起。林庄幽公赞太祖曰:大海航行靠舵手——陛下一句顶一万句——令天下无论妇孺老幼皆习帝之语录,舞忠字舞。每日晨起为帝作三忠于、四无限。帝大喜,遂立林公为储君,封摄政王,出入免跪拜。百万红卫于天安门拜谒帝,自林庄幽公、周相国等皆顿首叩拜,山呼万岁。帝下挟书令,罢科举,焚诸子书,禁百家言。以共产之学为国学,以愚黔首。臣民偶语诗书、以古讽今者,或弃市,或收监,或黥为城旦。

开国十八年,太祖武皇帝文革元年,天下大乱,帝名为文革,实为灭功臣之意。开国初,帝以高岗为东北王,饶漱石为华东王,刘伯承为西南王,林彪为中南王,彭德怀为西北王,诸王势力,人莫能及。帝行削藩策,废高、饶,以林、彭、刘等主军机,因功臣俱在,帝甚忌之,故先废高、饶,再废彭公,又以文革为名,阴使江后与林庄幽公结党戮功臣,摄政王刘殇公请乞骸骨,帝不许,后杀刘殇公于开封,密不发丧。十年大乱,计杀功臣名将贺、彭等无算。京师大兴县灭四类分子,满门抄斩数十户。广西民杀逆党,人相食。红色恐怖,人皆股栗。走五七道路,行上山下乡,使万民妻离子散,荒废学业,此皆太祖之大恶也。

文革六年,再会诸侯于庐山,林公令大学士陈伯达谏,欲加帝尊号,帝不许。有废储之意。摄政王林庄幽公不得已谋叛,欲弑帝。帝令周文正公平叛,林公北逃,与王妃叶群、王世子立果均身死漠北。帝诏上海知府王洪文入京,加王爵。欲立为储君,因周相国、朱太师等勋臣力谏乃罢。

文革十一年,相国周文正公薨,天下悲泣,京师万民送葬。十里长街,哭不绝声。四月,京师民变,帝以为世祖所谋,黜世祖。七月,太师朱武胜公薨,未几,地大震于唐山,丧丁二十余万口。

帝自林庄幽公之乱后,龙体日衰。文革十一年,天降星雨于吉林,民以为上将归天,人心惶惶。帝废世祖职,以右丞相华国锋为储君,赐遗诏曰:你办事,我放心。以大司马兵部尚书叶剑英为辅政王,仿刘蜀主托孤之意,委政于叶公。九月九日帝崩于寝宫,寿八十三岁,天下色变,亿万臣民俱悲,如丧考妣。废帝国锋葬太祖于天安门前,号曰:至圣革命真龙伟大导师领袖统帅舵手太祖武皇帝。

太祖文韬武略,历代帝王所不及也。太祖文传于《太祖选集》,诗存于《太祖诗词选》及《太祖语录》中,皆官修定稿。

太祖后三人,杨后开慧,为太祖结发妻,因太祖起事,亡于前朝。贺后子珍,因不敬之罪,贬为庶民。李后云鹤又称江青,因阴结其党,欲废储君华国锋,效武则天事,为大司马辅政王叶公所废,后自缢于室。因共产之道学定曰:帝王不得多嫔妃。故帝晚年所幸之张妃未得以正名加封。太子岸英,公子岸青,岸龙为杨后所生,公主李敏为贺后所生,公主李讷为李后所生。太子岸英阵亡,岸龙早夭,起事之时,又有子女数人,失于乱中,不知所终。诸嫔妃或有生子女者,皆不得知也。公子岸青,公主李讷、李敏均为闲官,皇孙新宇,举进士,入翰林,供职太学。

 

帝之功过尽在民心,桃李不言,下自成蹊。
古人作事无巨细,寂寞豪华皆有意。书生轻议冢中人,冢中笑尔书生气。

Loading

Posted in 随笔 | Tagged | Leave a comment

春运生存手册

在书写正文之前,笔者将使用推理手法,预测春运的规模、环境和潜在危机,并给出自己的分析结果,在此判断的基础上,以春运的各个阶段为分界线书写手册正文。再次说明笔者并非专业人士,文中的各种结论和推导过程仅供参考。

Continue reading

Loading

Posted in 大浪淘沙, 随笔 | Tagged | Leave a comment

影子跟随算法(2007年老文一篇)

算法简述

 

动作类游戏如何在高延迟下实现同步?不同的客户端网络情况,如何实现延迟补偿?十年前开始关注该问题,转眼十年已过,看到大家还在问这类问题,旧文一篇,略作补充(关于游戏同步相关问题还可以见我写于2005年的另外两篇文章,帧锁定算法网游同步法则):

影子跟随算法由普通DR(dead reckoning)算法发展而来,我将其称为“影子跟随”意再表示算法同步策略的主要思想:

1. 屏幕上现实的实体(entity)只是不停的追逐它的“影子”(shadow)。

2. 服务器向各客户端发送各个影子的状态改变(坐标,方向,速度,时间)。

3. 各个客户端收到以后按照当前重新插值修正影子状态。

4. 影子状态是跳变的,但实体追赶影子是连续的,故整个过程是平滑的。

clip_image002

1 算法演示

前面的1号终端控制红色飞船P1向左飞,并把自己的状态时时告诉服务器

后面的2号终端上接收到飞船P1的影子S1的状态(向左移动),并让P1的实体追赶S1

网络性能指标一:带宽,限制了实时游戏的人数容量

网络性能指标二:延时,决定了实时游戏的最低反应时间

 

使用该算法可以容易的开发出一款马里奥赛车,或者Counter Strike,详细说明见后:

Continue reading

Loading

Posted in 游戏开发, 编程技术, 网络编程 | Tagged , | 14 Comments

年度旅游-2007(日本)

clip_image002

天守阁路上

clip_image004

天守阁:丰臣秀吉取得天下后的城堡

clip_image006

古代日本部队

clip_image008

大板商业区

Continue reading

Loading

Posted in 随笔 | Tagged | Leave a comment