10万行汇编代码

偶尔会有人问我有关编写超级任天堂游戏的问题,那些人是怎么管理成千上万行16位汇编语言代码组成的项目的?答案是:它并不像你想象中那么艰难。

SNES硬件的手册有几百页,我不记得具体是多少了,最多400页吧。加入一个详细的65816汇编语言教材并结合我们现在说的最多800或900页,这只是我认为要完全理解一个OSX计算机的所需页数11,000的百分之八十。当然,你在C语言里的汇编代码也会出现很多无形的错误。比如,这是一些老的x86代码:

1mov ax, 20 2mov bx, -1 3int XX

这些代码设置了一些参数并调用中断。它看起来是正确的,也可以正常运行,并且可能在一个商业化的产品中使用,但是在新版的MS-DOS中它崩溃了。为什么?因为第二个参数应该传到dx寄存器,而不是bx。它只有在前面有代码发生了中断并返回-1到dx的情况下才能正常运行,但这是很罕见的,所以上面代码中的第二行并没有做任何有用的事。

完全使用汇编语言工作的秘密是:做到有组织,写代码前先思考并保代码持清洁和易懂。这和写好的Javascript和C++代码是有很多相似之处的。Steve McConnell编写的Code Complete是真正的超级任天堂游戏开发者指南。

但是这些谈论的编程语言和硬件是落后的。Jordan Mechner设计和编写了Apple II上的Prince of Persia,游戏和展示所有关卡的编辑器是用8位6502汇编语言编写的,他用日记记录了写这个游戏的过程。你可能期望这个日记里都是 编程 参考和6502编程诀窍,但是里面一点关于那个的内容也没有。当然,他在幕后做高难度的技术工作,但是那不是他要记录的。他记录的是一个设计师和导演的经历:一个人在大学毕业后居住在离家很远的地方,为自己的梦想走了很多弯路(别被吓倒了,那是很迷人的故事)。

他可能有另外一些编程的记录,但是我想应该没有。尽管如此,他远不止在想技术问题:一个小说家的个人日记的内容不会全是讲语法和句子结构的~

(如果你喜欢这篇文章,你可能还会喜欢The Pure Tech Side is the Dark Side

原文链接/OsChina.NET编译

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )