Initial import

git-svn-id: http://moon:8086/svn/software/trunk/libsrc/omf51@1 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2014-07-19 07:44:42 +00:00
commit 3297d1bb7e
23 changed files with 2610 additions and 0 deletions
Executable
+217
View File
@@ -0,0 +1,217 @@
/***************************************************************************/
/* 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 */