lots of small things
This commit is contained in:
128
src/frontend.cpp
128
src/frontend.cpp
@@ -11,40 +11,40 @@
|
||||
#include <malloc.h> /* For malloc, free, realloc */
|
||||
|
||||
typedef struct { /* PSP structure */
|
||||
word int20h; /* interrupt 20h */
|
||||
word eof; /* segment, end of allocation block */
|
||||
byte res1; /* reserved */
|
||||
byte dosDisp[5]; /* far call to DOS function dispatcher */
|
||||
byte int22h[4]; /* vector for terminate routine */
|
||||
byte int23h[4]; /* vector for ctrl+break routine */
|
||||
byte int24h[4]; /* vector for error routine */
|
||||
byte res2[22]; /* reserved */
|
||||
word segEnv; /* segment address of environment block */
|
||||
byte res3[34]; /* reserved */
|
||||
byte int21h[6]; /* opcode for int21h and far return */
|
||||
byte res4[6]; /* reserved */
|
||||
byte fcb1[16]; /* default file control block 1 */
|
||||
byte fcb2[16]; /* default file control block 2 */
|
||||
byte res5[4]; /* reserved */
|
||||
byte cmdTail[0x80]; /* command tail and disk transfer area */
|
||||
uint16_t int20h; /* interrupt 20h */
|
||||
uint16_t eof; /* segment, end of allocation block */
|
||||
uint8_t res1; /* reserved */
|
||||
uint8_t dosDisp[5]; /* far call to DOS function dispatcher */
|
||||
uint8_t int22h[4]; /* vector for terminate routine */
|
||||
uint8_t int23h[4]; /* vector for ctrl+break routine */
|
||||
uint8_t int24h[4]; /* vector for error routine */
|
||||
uint8_t res2[22]; /* reserved */
|
||||
uint16_t segEnv; /* segment address of environment block */
|
||||
uint8_t res3[34]; /* reserved */
|
||||
uint8_t int21h[6]; /* opcode for int21h and far return */
|
||||
uint8_t res4[6]; /* reserved */
|
||||
uint8_t fcb1[16]; /* default file control block 1 */
|
||||
uint8_t fcb2[16]; /* default file control block 2 */
|
||||
uint8_t res5[4]; /* reserved */
|
||||
uint8_t cmdTail[0x80]; /* command tail and disk transfer area */
|
||||
} PSP;
|
||||
|
||||
static struct { /* EXE file header */
|
||||
byte sigLo; /* .EXE signature: 0x4D 0x5A */
|
||||
byte sigHi;
|
||||
word lastPageSize; /* Size of the last page */
|
||||
word numPages; /* Number of pages in the file */
|
||||
word numReloc; /* Number of relocation items */
|
||||
word numParaHeader; /* # of paragraphs in the header */
|
||||
word minAlloc; /* Minimum number of paragraphs */
|
||||
word maxAlloc; /* Maximum number of paragraphs */
|
||||
word initSS; /* Segment displacement of stack */
|
||||
word initSP; /* Contents of SP at entry */
|
||||
word checkSum; /* Complemented checksum */
|
||||
word initIP; /* Contents of IP at entry */
|
||||
word initCS; /* Segment displacement of code */
|
||||
word relocTabOffset; /* Relocation table offset */
|
||||
word overlayNum; /* Overlay number */
|
||||
uint8_t sigLo; /* .EXE signature: 0x4D 0x5A */
|
||||
uint8_t sigHi;
|
||||
uint16_t lastPageSize; /* Size of the last page */
|
||||
uint16_t numPages; /* Number of pages in the file */
|
||||
uint16_t numReloc; /* Number of relocation items */
|
||||
uint16_t numParaHeader; /* # of paragraphs in the header */
|
||||
uint16_t minAlloc; /* Minimum number of paragraphs */
|
||||
uint16_t maxAlloc; /* Maximum number of paragraphs */
|
||||
uint16_t initSS; /* Segment displacement of stack */
|
||||
uint16_t initSP; /* Contents of SP at entry */
|
||||
uint16_t checkSum; /* Complemented checksum */
|
||||
uint16_t initIP; /* Contents of IP at entry */
|
||||
uint16_t initCS; /* Segment displacement of code */
|
||||
uint16_t relocTabOffset; /* Relocation table offset */
|
||||
uint16_t overlayNum; /* Overlay number */
|
||||
} header;
|
||||
|
||||
#define EXE_RELOCATION 0x10 /* EXE images rellocated to above PSP */
|
||||
@@ -101,7 +101,7 @@ void FrontEnd (char *filename, CALL_GRAPH * *pcallGraph)
|
||||
***************************************************************************/
|
||||
static void displayLoadInfo(void)
|
||||
{
|
||||
Int i;
|
||||
int i;
|
||||
|
||||
printf("File type is %s\n", (prog.fCOM)?"COM":"EXE");
|
||||
if (! prog.fCOM) {
|
||||
@@ -132,10 +132,10 @@ static void displayLoadInfo(void)
|
||||
/*****************************************************************************
|
||||
* fill - Fills line for displayMemMap()
|
||||
****************************************************************************/
|
||||
static void fill(Int ip, char *bf)
|
||||
static void fill(int ip, char *bf)
|
||||
{
|
||||
static byte type[4] = {'.', 'd', 'c', 'x'};
|
||||
byte i;
|
||||
static uint8_t type[4] = {'.', 'd', 'c', 'x'};
|
||||
uint8_t i;
|
||||
|
||||
for (i = 0; i < 16; i++, ip++)
|
||||
{
|
||||
@@ -153,8 +153,8 @@ static void fill(Int ip, char *bf)
|
||||
static void displayMemMap(void)
|
||||
{
|
||||
char c, b1[33], b2[33], b3[33];
|
||||
byte i;
|
||||
Int ip = 0;
|
||||
uint8_t i;
|
||||
int ip = 0;
|
||||
|
||||
printf("\nMemory Map\n");
|
||||
while (ip < prog.cbImage)
|
||||
@@ -189,8 +189,8 @@ static void displayMemMap(void)
|
||||
static void LoadImage(char *filename)
|
||||
{
|
||||
FILE *fp;
|
||||
Int i, cb;
|
||||
byte buf[4];
|
||||
int i, cb;
|
||||
uint8_t buf[4];
|
||||
|
||||
/* Open the input file */
|
||||
if ((fp = fopen(filename, "rb")) == NULL)
|
||||
@@ -219,11 +219,11 @@ static void LoadImage(char *filename)
|
||||
}
|
||||
|
||||
/* Calculate the load module size.
|
||||
* This is the number of pages in the file
|
||||
* less the length of the header and reloc table
|
||||
* less the number of bytes unused on last page
|
||||
*/
|
||||
cb = (dword)LH(&header.numPages) * 512 - (dword)LH(&header.numParaHeader) * 16;
|
||||
* This is the number of pages in the file
|
||||
* less the length of the header and reloc table
|
||||
* less the number of bytes unused on last page
|
||||
*/
|
||||
cb = (uint32_t)LH(&header.numPages) * 512 - (uint32_t)LH(&header.numParaHeader) * 16;
|
||||
if (header.lastPageSize)
|
||||
{
|
||||
cb -= 512 - LH(&header.lastPageSize);
|
||||
@@ -237,16 +237,16 @@ static void LoadImage(char *filename)
|
||||
* to have to load DS from a constant so it'll be pretty
|
||||
* obvious.
|
||||
*/
|
||||
prog.initCS = (int16)LH(&header.initCS) + EXE_RELOCATION;
|
||||
prog.initIP = (int16)LH(&header.initIP);
|
||||
prog.initSS = (int16)LH(&header.initSS) + EXE_RELOCATION;
|
||||
prog.initSP = (int16)LH(&header.initSP);
|
||||
prog.cReloc = (int16)LH(&header.numReloc);
|
||||
prog.initCS = (int16_t)LH(&header.initCS) + EXE_RELOCATION;
|
||||
prog.initIP = (int16_t)LH(&header.initIP);
|
||||
prog.initSS = (int16_t)LH(&header.initSS) + EXE_RELOCATION;
|
||||
prog.initSP = (int16_t)LH(&header.initSP);
|
||||
prog.cReloc = (int16_t)LH(&header.numReloc);
|
||||
|
||||
/* Allocate the relocation table */
|
||||
if (prog.cReloc)
|
||||
{
|
||||
prog.relocTable = new dword [prog.cReloc];
|
||||
prog.relocTable = new uint32_t [prog.cReloc];
|
||||
fseek(fp, LH(&header.relocTabOffset), SEEK_SET);
|
||||
|
||||
/* Read in seg:offset pairs and convert to Image ptrs */
|
||||
@@ -254,11 +254,11 @@ static void LoadImage(char *filename)
|
||||
{
|
||||
fread(buf, 1, 4, fp);
|
||||
prog.relocTable[i] = LH(buf) +
|
||||
(((Int)LH(buf+2) + EXE_RELOCATION)<<4);
|
||||
(((int)LH(buf+2) + EXE_RELOCATION)<<4);
|
||||
}
|
||||
}
|
||||
/* Seek to start of image */
|
||||
fseek(fp, (Int)LH(&header.numParaHeader) * 16, SEEK_SET);
|
||||
fseek(fp, (int)LH(&header.numParaHeader) * 16, SEEK_SET);
|
||||
}
|
||||
else
|
||||
{ /* COM file
|
||||
@@ -282,8 +282,8 @@ static void LoadImage(char *filename)
|
||||
|
||||
/* Allocate a block of memory for the program. */
|
||||
prog.cbImage = cb + sizeof(PSP);
|
||||
prog.Image = new byte [prog.cbImage];
|
||||
prog.Image[0] = 0xCD; /* Fill in PSP Int 20h location */
|
||||
prog.Image = new uint8_t [prog.cbImage];
|
||||
prog.Image[0] = 0xCD; /* Fill in PSP int 20h location */
|
||||
prog.Image[1] = 0x20; /* for termination checking */
|
||||
|
||||
/* Read in the image past where a PSP would go */
|
||||
@@ -294,14 +294,14 @@ static void LoadImage(char *filename)
|
||||
fatalError(CANNOT_READ, filename);
|
||||
}
|
||||
#endif
|
||||
if (cb != (Int)fread(prog.Image + sizeof(PSP), 1, (size_t)cb, fp))
|
||||
if (cb != (int)fread(prog.Image + sizeof(PSP), 1, (size_t)cb, fp))
|
||||
{
|
||||
fatalError(CANNOT_READ, filename);
|
||||
}
|
||||
|
||||
/* Set up memory map */
|
||||
cb = (prog.cbImage + 3) / 4;
|
||||
prog.map = (byte *)malloc(cb);
|
||||
prog.map = (uint8_t *)malloc(cb);
|
||||
memset(prog.map, BM_UNKNOWN, (size_t)cb);
|
||||
|
||||
/* Relocate segment constants */
|
||||
@@ -309,10 +309,10 @@ static void LoadImage(char *filename)
|
||||
{
|
||||
for (i = 0; i < prog.cReloc; i++)
|
||||
{
|
||||
byte *p = &prog.Image[prog.relocTable[i]];
|
||||
word w = (word)LH(p) + EXE_RELOCATION;
|
||||
*p++ = (byte)(w & 0x00FF);
|
||||
*p = (byte)((w & 0xFF00) >> 8);
|
||||
uint8_t *p = &prog.Image[prog.relocTable[i]];
|
||||
uint16_t w = (uint16_t)LH(p) + EXE_RELOCATION;
|
||||
*p++ = (uint8_t)(w & 0x00FF);
|
||||
*p = (uint8_t)((w & 0xFF00) >> 8);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -323,14 +323,14 @@ static void LoadImage(char *filename)
|
||||
/*****************************************************************************
|
||||
* allocMem - malloc with failure test
|
||||
****************************************************************************/
|
||||
void *allocMem(Int cb)
|
||||
void *allocMem(int cb)
|
||||
{
|
||||
byte *p;
|
||||
uint8_t *p;
|
||||
|
||||
//printf("Attempt to allocMem %5ld bytes\n", cb);
|
||||
|
||||
if (! (p = (byte*)malloc((size_t)cb)))
|
||||
/* if (! (p = (byte*)calloc((size_t)cb, 1))) */
|
||||
if (! (p = (uint8_t*)malloc((size_t)cb)))
|
||||
/* if (! (p = (uint8_t*)calloc((size_t)cb, 1))) */
|
||||
{
|
||||
fatalError(MALLOC_FAILED, cb);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user