All Stories

去个同事那拷了20多GB的电子书

  昨天就发邮件打了个招呼,今天下班后,带着我的巨巨外置硬盘去了,想不到这位哥们的硬盘更大,是250GB的,比我的大了90GB,晕!电子书有20多个GB,看了看我的4个分区,本来是想放到专门放文档、资料的分区里的,一看居然只剩下8GB多的空间了,很奇怪,先不管了,放到另外一个空很多的分区里。后来才想起来,前段时间才用eMule下了17GB多的MAME ROM,还有很多其它的Emulator,当然占去了20多GB了。拷完东西,出来给小思宇打电话。把睡袋和垫子拿回来,小思宇说在收拾东西,因为明天就要回去了。真牛,她们领导也竟然真肯让她请假这么久,昏倒。  昨天晚上跟小丫头聊天,说了四五点原因,说得很沉重。其实我在想,如果在不远的以后的某一天,这几点原因中超过一半得到了改善,我可能还是会考虑、会继续。唉!

拿得起,放不下

一盏离愁孤灯伫立在窗口我在门后假装你人还没走旧地如重游月圆更寂寞夜半清醒的烛火不忍苛责我一壶漂泊浪迹天涯难入喉你走之后酒暖回忆思念瘦水向东流时间怎么偷花开就一次成熟我却错过 谁在用琵琶弹奏一曲东风破岁月在墙上剥落看见小时候犹记得那年我们都还很年幼而如今琴声幽幽我的等候你没听过谁在用琵琶弹奏一曲东风破枫叶将故事染色结局我看透篱笆外的古道我牵着你走过荒烟漫草的年头就连分手都很沉默 一壶漂泊浪迹天涯难入喉你走之后酒暖回忆思念瘦水向东流时间怎么偷花开就一次成熟我却错过 谁在用琵琶弹奏一曲东风破岁月在墙上剥落看见小时候犹记得那年我们都还很年幼而如今琴声幽幽我的等候你没听过谁在用琵琶弹奏一曲东风破枫叶将故事染色结局我看透篱笆外的古道我牵着你走过荒烟漫草的年头就连分手都谁在用琵琶弹奏一曲东风破岁月在墙上剥落看见小时候犹记得那年我们都还很年幼而如今琴声幽幽我的等候你没听过谁在用琵琶弹奏一曲东风破枫叶将故事染色结局我看透篱笆外的古道我牵着你走过荒烟漫草的年头就连分手都很沉默

make or bjam?

  早上8点的时候,手机就响了,也不知道是谁,郁闷死了,一个打错的!然后想想就还是起来开始洗澡收拾,9点的时候出门,发了条短信。在梅林倒车,在金地花园下车。回忆一下当时走过的路,嘿嘿,还好还记得怎么走的。但哪个房间就忘了,只是依稀记得好像是10楼的,于是只好打电话问了,果然是在10楼的,呵呵。上去坐了一会儿,看了一会儿电视,都没几个台,因为没装数字电视,关外这点比较好,装了有线电视就可以收到好多个台。有个水电工在修下水管,下去买了个新的。过了11点半,说去吃饭吧,走到下面附近一个自助火锅,还真便宜,一人18元,锅底10元,哈哈,我拿了很多水果,吃了很多蟹肉。  吃完火锅,说去医院吧。于是坐到华强南,福田医院站,乱找了一通,总算找到了所谓的福田人民医院。走到体检科,玩了一下视力表,哈哈,我还有1.5呢。结果被告知下午不体检,只有每天上午8点到10点,郁郁地出来,既然都到了上海宾馆了,就逛一下街吧。去天虹、NICO、曼哈逛了,一直到5点多,累了,走进曼哈的麦当劳,买了可乐和鸡翅,亏了,没用优惠券,郁闷!  逛得腿酸!  突然想学一下make或bjam,或者两个都学一下。因为觉得用命令行只能每次全都编译连接一遍,有点浪费时间!写游戏还真是能学到不少东西,居然已经转换到这个上面来了,呵呵。

VC命令行

  用VC7.1写榜单,榜单一般就是一个cpp文件就搞定了。因为有很多个榜单,所以一个一个建工程似乎稍微麻烦了点,后来想想用make能搞定不,可是我又不熟悉make,只好看看能不能写个批处理文件,用命令行来解决。看了一下LUA发布包里的编译用的批处理文件,再看看IDE里的工程属性,照着写了一个,舒服啊,可以一下把所有的都马上全编译连接了。

让VC7.1编译DLL时不连接C运行时库

  照着写单机的榜单,突然发现从某个修改开始,总是会把C运行时库也连接进来,真麻烦,仔细看看自己的代码,实在没必要拖个DLL呀,何况VC7.1的C库是msvcrt71.dll,是不由Windows携带的,所以要发布这个榜单的同时,就要背负需要同时发布这个dll的负担。在工程属性中把可能想到的所有的编译选项都关掉了,用depends看还是连接进来了。仔细想想,应该跟代码有关系。因为把我的代码贴到其它以前编译过不用连接C库的工程里,最后也会有C库被连接进来的。于是心一狠,在工程属性中设置连接时强制不连接C库,看它最后有什么提示。可以看到有浮点数的应用,就要求连接C库了。刚好这时浮点数的应用很简单,可以转换为整形的计算。然后再编译连接,发现是有要连接另外2个函数了,看看函数名,猜想大概跟程序运行安全相关,再到工程属性中把异常和缓冲区检测都关掉,果然可以编译连接通过了。再一步步试,最后发现是因为打开了缓冲区检测,每当程序中用到了数组的操作,就会有连接C库中的一些函数的要求。  终于搞定!

breaking霹雳舞(1)

  没有艺术细胞呀,四肢僵硬呀,肥肉丛生呀!  摇滚步,战斗舞,排腿,结束动作,hoho~~~

游戏驱动(译)

  终于把这篇也整了,原文在这里,同样,还是有些没懂起的。 游戏驱动by Aaron Giles  可能关于MAME怎样工作的最常见的问题是:我应该怎么编写驱动?为了理解怎么编写驱动,你需要理解驱动是怎样连接到MAME中去的,以及众多的驱动相关的难点是什么。这篇文章向你提供在从最顶层的,驱动需要些什么的概况。以后的文章会讲述这些以外的细节。  开始,你得先看一下driver.c里的代码。实际上这个模块做的,只是生成了MAME支持的所有驱动的指针的列表。问题是每个驱动,需要选声明一下:extern struct GameDriver driver_puckman;extern struct GameDriver driver_puckmana; ...  然后所有的驱动被声明了,我们要这样声明一个驱动的列表:const struct GameDriver *drivers[] = {&driver_puckman, &driver_puckmana, ..., 0 };  使用C语言来做这事很烦人,因为它需要我们为每个驱动添加2个东西到driver.c,在顶部的一个声明和最底部的列表中的表项。实际上,在用一些好用的预处理魔法去简化这些事情前,我们已经这样做了好多年。如果你是一个C专家,你可能会指出来,也可能不会,没关系。重要的是,要把驱动添加到主列表中,你只要用特定的DRIVER宏这样声明一次就行了:DRIVER( puckman ) DRIVER( puckmana ) ...  这样把表项插入到列表中,和其它表项一起,你的驱动就已经可以被MAME通过主驱动列表正式引用了!当然,这也是说你实际上需要一个GameDriver对象,用在MAME其它的地方,用相同的名字,用于成功地连接到应用中。那应该怎样正确地定义一个游戏驱动?  基本的GameDriver结构非常简单。它提供一个很基础的信息列表,关于这个驱动的,记录了绝大部分的描述性数据(游戏名,制造商,年份等)和指向其它用于描述游戏使用的硬件的结构的一些指针。比起你自己定义和使用GameDriver结构,你应该简单地使用宏来填充所有的细节内容。如果你看一下驱动目录中任何一个文件的底部,你会看到大量的这种宏用于描述驱动:GAME( 1980, puckman, 0, pacman,...

MAME的CPU调度(译)

  有好些地方看不懂,晕,凑合吧,以后如果明白了,再来改吧!更让我郁闷的是,自己的英语水平真是不敢恭维啊!其实Aaron Giles已经写得很简单了,几乎没有长句!唉! MAME的CPU调度by Aaron Giles 第1部分  MAME中多CPU游戏是以循环的方式进行调度的。循环执行的顺便在机器驱动中根据CPU的顺便严格定义。没有办法改变这个顺序,然而,你可以通过挂起CPU或调整调度粒度来影响调度。那部分内容会在第2部分讨论。  调度器依靠定时器系统工作,定时器系统知道什么时候下一个定时器被调度。所有调度都是在定时器被触发时发生。类似的,当CPU运行时,定时器从来不被触发。这点很重要。  调度器查询定时器系统,找出什么时候下一个定时器被触发。然后它轮循每个CPU,计算CPU需要多少个时钟周期才会到达那个时刻,再运行CPU那么多个时钟周期。当CPU执行完后,CPU核心会返回实际上执行了多少个时钟周期。这些信息被累计,并转换为“本地CPU时间”,这是为了统计是否多用了CPU核心时间,或者过早退出CPU核心。  例如我们说CPU #0是14MHz,CPU #1是2MHz。我们还说我们从0时刻(对两个CPU来说都是本地时间为0)开始,有个定时器在150ms后触发(time=0.000150)。  循环逻辑会启动CPU #0,计算它需要多少时钟周期才能达到0.000150时刻。我们从0时刻开始,我们至少需要运行150µs。0.000150 × 14,000,000 = 2100时钟周期。它就调用CPU运行函数执行2100个时钟周期;当函数返回,它知道多少个时钟周期实际被执行了。我们假设它返回它实际运行了2112个时钟周期。(CPU核心一般会过量使用,因为很多指令会占用多于1个时钟周期。)2112个时钟周期转换为CPU #0的本地CPU时间是0.000150857(2112/14,000,000)。  现在轮到CPU #1运行。0.000150 × 2,000,000 = 300时钟周期。所以我们调用执行(300个时钟周期)并返回300个时钟周期。CPU #1的本地时间现在是0.000150。  现在,两个CPU都已经执行过了,它们的本地时间都大于或等于目标时间0.000150。所以调度器调用定时器系统让它处理定时器。完成后,它再次查询什么时候下一个定时器会触发。假设它很精确地在150µs后触发,time=0.000300。  再回到调度器,我们再次启动循环。CPU #0需要运行(0.000300 – 0.000150857) × 14,000,000 = 2088时钟周期到达本地时间0.300。注意我们统计了上次执行过的所有时钟周期数。所以我们调用执行(2088),然后返回,是2091。这时本地时间就是0.000150857 + 0.000149357 =...

去华神吃了一顿

  早上9点多时就被电话吵醒了,因为要来换抽水马桶。到了1点多的时候,很无聊,给小丫头发短信问她在干吗,然后决定去逛下街,就约好地点。比小丫头早到了大半个小时,说是堵死了,其实已经都到了,只是她不认识路。两个人逛了一会儿茂业,觉得买不起,于是走到曼哈,有些东西确实要便宜点。小丫头买了两件连衣裙,总共才花了315元,难得有这么便宜的女装哦!之后她也不想再花钱了,也差不多刚好到吃饭时间了。刚好找到这个机会有人一起去吃火锅,就跑去华神吃了一顿,浪费了一个白菜。2个人吃了142元。小丫头说,每次都是我请她吃,下次她请我,还说欠了我好多钱,哈哈。其实我就想找机会去吃顿重庆味的火锅,叫了雨烟好多次,均未果。 小丫头说我的blog写的都是方块,或者程序。我说偶尔也有写生活的呀,她说真的是偶尔才有哦。呵呵!