对OrCAD一问题的解决
用DEBUG程序对板图文件进行分析,弄清其数据存放结构和格式,设法找到最后添加的那个元件所对应的数据。直接在DEBGU下去掉此数据,就相当于PCB下删掉该元件。
实践证明,此思路完全可行。经分析,得到如下关于板图文件结构知识:
1.文件前30H字节为“文件头”。从偏移30H处起存放元件数据块,随后是字符数据块、边框数据块和走线数据块,各类数据块间无间隔标志,各块内每项都是按布线时添加次序紧密存放的。
2.“文件头”描述了板图文件的一些总体信息,包括有文件名及元件数据块、字符数据块、边框数据块和走线数据块各自的容量信息,这五个信息的起始位置分别在00H、1EH、20H、22H和24H处。后四者皆两字节数据,分别乘以2、1、8、8就得到元件、字符、边框和走线这四类数据块各自在文件中占有的字节数。
现以我们设计中用的工作文件AB为便,其中前40H字节的信息显示如下:
C>DEBUG B:AB
-D 100 13F
11C2:0100 41 42 00 20 20 20 20 20-AD 00 00 01 00 00 00 00 AB……
11C2:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 F3 FF……
11C2:0120 CC 3A 51 00 FB 1E 00 00-00 00 00 00 20 20 20 20 :Q……
11C2:0130 41 33 45 34 30 31 41 31-AA 02 01 00 17 0D B1 15 A3E401A1……
可见,元件数据有FFF3H×2=1FFE6H字节,离最大容量128K仅差1AH字节(任何一个无限 的数据都超出此值);字符数据块占有3ACGH字节;边框数据和走线数据分别有51H×8=288H、1EFB×8=F7D8H字节。
从库文件字节数我们得知最后添加的元件(是一电阻)的数据量为96H字节。这样,我们就有了解救的办法:用DEBUG将文件调入内存,计算字符数据块起始位置,用M命令(MOVE)将其后的所有文件数据向前搬移96H字节,覆盖掉最后添加的那个电阻的数据,再把寄存器BX:CX 减去96H得文件新长度,最后将文件写回磁盘。这个修改后的文件果然能被PCB程序调出,除了那个去掉的电阻外,其它内容完好无损,真可谓起死回生了!