/*
 * A structure is defined for each
 * area of memory on the target
 * board.  The complete memory
 * map consists of an array of
 * these structures.  Each element
 * is initialized to different
 * values, when running on MS-DOS
 * or running on the target board.
 */

struct MEM_AREA {
  DWORD boardOffset; 
  DWORD baseAddress;
  DWORD areaSize;
  BYTE  areaName[6];
};

/*
 * When running on the production
 * board, the variable 'boardBase'
 * is left to be zero, i.e. all 
 * memory on the board starts at
 * location 0.  When simulating 
 * on PC running MS-DOS, we do
 * a malloc() of a large chunk of
 * memory.  'boardBase' is set to
 * the address of this chunk.
 * Then, for each area of memory
 * defined in the following tables,
 * we add 'boardBase' to 
 * 'boardOffset' to get 'baseAddress'.
 *
 */

 DWORD boardBase = 0;

#ifndef DOS_SIMULATION

 /* 
  * Define the board's memory map 
  * in the final production 
  * version. 
  */

 struct MEM_AREA memoryMap[4]= 
  {
   {0x20000, 0, 64*1024, "RAM 1"},
   {0x30000, 0, 64*1024, "RAM 2"},
   {0x40000, 0, 64*1024, "RAM 3"},
   {0xE0000, 0,128*1024, "EPROM"},
  };

#else

 /* 
  * Define the board's memory map 
  * when simulating on DOS. 
  */

 struct MEM_AREA memoryMap[4]= 
  {
   {0x00000, 0,  8*1024, "RAM 1"},
   {0x02000, 0,  8*1024, "RAM 2"},
   {0x04000, 0,  8*1024, "RAM 3"},
   {0xF0000, 0, 64*1024, "EPROM"},
  };

#endif

