对OrCAD一问题的解决

Author: 殷忠军 Date: 1992-10-16

        在设计过程中,为了方便,曾在板图区域外放置了许多常用的自建元件模型,如电阻、电容、二极管、跨接线等多种规格不同朝向的共八十多个。这些可以随时方便地拷贝到所需位置,但也占据了不少内存空间和文件容量。当设计按近尾声时,程序的元件缓冲区(最大分配128K)已所剩无几。由于未认识到严重性,没及时删掉那些不再使用的自建模型,终于在某次添加元件后,得到提示:“元件缓冲区已满!”同时程序发生混乱,不能正常设计了,当即放弃存盘退出,欲重新运行PCB程序删除上述那些多余元件,即发现板图工作文件和两个后备文件都已无法调出(一调便死机)。
        用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程序调出,除了那个去掉的电阻外,其它内容完好无损,真可谓起死回生了!