git-svn-id: http://moon:8086/svn/software/trunk/libsrc/omf51@1 b431acfa-c32f-4a4a-93f1-934dc6c82436
217 lines
4.6 KiB
C
Executable File
217 lines
4.6 KiB
C
Executable File
/***************************************************************************/
|
|
/* omf51.h */
|
|
/***************************************************************************/
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
/***************************************************************************/
|
|
#ifndef OMF51_H
|
|
#define OMF51_H
|
|
|
|
#define BYTE unsigned char
|
|
#define DBYTE unsigned short
|
|
|
|
#define REC_TYPE_MHDR 0x02 /* Module Header Record */
|
|
#define REC_TYPE_MEND 0x04 /* Module End Record */
|
|
#define REC_TYPE_CNT 0x06 /* Content Record */
|
|
#define REC_TYPE_FIX 0x08 /* Fixup Record */
|
|
#define REC_TYPE_SEG 0x0E /* Segment Definition Record */
|
|
#define REC_TYPE_SCD 0x10 /* Scope Definition Record */
|
|
#define REC_TYPE_DBG 0x12 /* Debug Item Record */
|
|
#define REC_TYPE_PUB 0x16 /* Public Definition Record */
|
|
#define REC_TYPE_EXT 0x18 /* External Definition Record */
|
|
#define REC_TYPE_LML 0x26 /* LIB ModLocs Record */
|
|
#define REC_TYPE_LMN 0x28 /* LIB ModName Record */
|
|
#define REC_TYPE_LDIC 0x2A /* LIB DICTNRY Record */
|
|
#define REC_TYPE_LHDR 0x2C /* LIB Header Record */
|
|
|
|
#define MAX_MHDR 8
|
|
#define MAX_MEND 8
|
|
#define MAX_SEG 255
|
|
#define MAX_SEGDEF 255
|
|
#define MAX_PUB 255
|
|
#define MAX_PUBDEF 255
|
|
#define MAX_EXT 255
|
|
#define MAX_EXTDEF 255
|
|
#define MAX_SCD 255
|
|
#define MAX_DBG 255
|
|
#define MAX_DBGINFO 255
|
|
#define MAX_CNT 255
|
|
#define MAX_FIX 255
|
|
#define MAX_FIXDEF 255
|
|
|
|
#define MAX_MODULES 255
|
|
|
|
#define DBG_DEFTYP_LOCAL 0x00
|
|
#define DBG_DEFTYP_PUBLIC 0x01
|
|
#define DBG_DEFTYP_SEGMENT 0x02
|
|
#define DBG_DEFTYP_LINE 0x03
|
|
|
|
#define SCD_BLKTYP_MOD_BLOCK 0x00
|
|
#define SCD_BLKTYP_DO_BLOCK 0x01
|
|
#define SCD_BLKTYP_PROC_BLOCK 0x02
|
|
#define SCD_BLKTYP_MOD_END 0x03
|
|
#define SCD_BLKTYP_DO_END 0x04
|
|
#define SCD_BLKTYP_PROC_END 0x05
|
|
|
|
#define OBJECT_IS_REL 0
|
|
#define OBJECT_IS_ABS 1
|
|
|
|
/***************************************************************************/
|
|
/* Module Header Record */
|
|
typedef struct _sMHDR
|
|
{
|
|
char name[41];
|
|
BYTE trnID, nameLen, reserved, chkSum;
|
|
DBYTE len;
|
|
|
|
} MHDR;
|
|
|
|
/* Module End Record */
|
|
typedef struct _sMEND
|
|
{
|
|
char name[41];
|
|
BYTE regMSK, nameLen, res8, chkSum;
|
|
DBYTE len, res16;
|
|
} MEND;
|
|
|
|
typedef struct _sSEGDEF
|
|
{
|
|
BYTE name[41], nameLen, segID, segINFO, relTYP, res8;
|
|
DBYTE segBASE, segSIZE;
|
|
} SEGDEF;
|
|
|
|
/* Segment Definition Record */
|
|
typedef struct _sSEG
|
|
{
|
|
BYTE chkSum;
|
|
DBYTE numSegDef, len;
|
|
// SEGDEF segDef[MAX_SEGDEF];
|
|
SEGDEF *segDef;
|
|
} SEG;
|
|
|
|
typedef struct _sPUBDEF
|
|
{
|
|
BYTE name[41], nameLen, segID, symINFO, res8;
|
|
DBYTE offset;
|
|
|
|
} PUBDEF;
|
|
typedef struct _sPUB
|
|
{
|
|
BYTE chkSum;
|
|
DBYTE numPubDef, len;
|
|
// PUBDEF pubDef[MAX_PUBDEF];
|
|
PUBDEF *pubDef;
|
|
|
|
} PUB;
|
|
|
|
typedef struct _sEXTDEF
|
|
{
|
|
BYTE name[41], nameLen, idBlk, extID, symINFO, res8;
|
|
|
|
} EXTDEF;
|
|
|
|
typedef struct _sEXT
|
|
{
|
|
BYTE chkSum;
|
|
DBYTE numExtDef, len;
|
|
// EXTDEF extDef[MAX_EXTDEF];
|
|
EXTDEF *extDef;
|
|
|
|
} EXT;
|
|
|
|
typedef struct _sSCD
|
|
{
|
|
char name[41];
|
|
BYTE blkTYP, chkSum, nameLen;
|
|
DBYTE len;
|
|
|
|
} SCD;
|
|
|
|
typedef struct _sDBGINFO
|
|
{
|
|
BYTE name[41], nameLen, segID, segINFO, symINFO, res8;
|
|
DBYTE offset, lineNumber;
|
|
|
|
} DBGINFO;
|
|
|
|
typedef struct _sDBG
|
|
{
|
|
BYTE chkSum, defTYP;
|
|
DBYTE numDbgInfo, len;
|
|
// DBGINFO dbgInfo[MAX_DBGINFO];
|
|
DBGINFO *dbgInfo;
|
|
|
|
} DBG;
|
|
|
|
typedef struct _sCNT
|
|
{
|
|
BYTE chkSum, segID, *pData;
|
|
DBYTE len, offset, size;
|
|
|
|
} CNT;
|
|
|
|
typedef struct _sOP
|
|
{
|
|
BYTE IDBlk, ID;
|
|
DBYTE offset;
|
|
} OP;
|
|
|
|
typedef struct _sFIXDEF
|
|
{
|
|
BYTE refTYP;
|
|
DBYTE refLoc;
|
|
OP operand;
|
|
|
|
} FIXDEF;
|
|
|
|
typedef struct _sFIX
|
|
{
|
|
BYTE chkSum;
|
|
DBYTE len, numFixDef;
|
|
// FIXDEF fixDef[MAX_FIXDEF];
|
|
FIXDEF *fixDef;
|
|
} FIX;
|
|
|
|
typedef struct _sMODULE
|
|
{
|
|
char *pName;
|
|
DBYTE numDbg, numCnt, numFix;
|
|
DBG *ppDbg[MAX_DBG];
|
|
CNT *ppCnt[MAX_CNT];
|
|
FIX *ppFix[MAX_FIX];
|
|
|
|
} MODULE;
|
|
|
|
typedef struct _sOBJECT
|
|
{
|
|
char *fileName[1024];
|
|
DBYTE numUnknown, numMHDR, numMEND, numCNT, numFIX, numSEG, numSCD;
|
|
DBYTE numDBG, numPUB, numEXT, numLML, numLMN, numLDIC, numLHDR;
|
|
DBYTE numModules;
|
|
FILE *pFile;
|
|
MHDR *mhdr;
|
|
MEND *mend;
|
|
SEG *seg;
|
|
PUB *pub;
|
|
EXT *ext;
|
|
SCD *scd;
|
|
DBG *dbg;
|
|
CNT *cnt;
|
|
FIX *fix;
|
|
DBYTE numUnimplemented;
|
|
MODULE *module;
|
|
BYTE allocType;
|
|
|
|
} OBJECT;
|
|
|
|
/***************************************************************************/
|
|
void OmfInit(struct _sOBJECT *pObj);
|
|
int OmfOpen(struct _sOBJECT *pObj, char *pName);
|
|
void OmfClose(struct _sOBJECT *pObj);
|
|
void OmfRead(struct _sOBJECT *pObj);
|
|
void OmfPrint(struct _sOBJECT *pObj);
|
|
void Omf2Hex(struct _sOBJECT *pObj);
|
|
|
|
/***************************************************************************/
|
|
#endif /* OMF51_H */ |