// 186.cfg
//	You must select RAM, ROM for your controller   04-26-2000
//	Your TERN controller is installed with SRAM and ROM with different sizes.
//	For debug, 128K or 512K SRAM can be selected
//	For build a ROM, you need to select the ROM size.
// How to select ?
//	1) commend out the unwanted #define RAM size line with "//"
// 	2) delete the "//" preceding the wanted #define RAM size line
//

// #define RAM 32 // 32KB SRAM installed
#define RAM 128 // 128KB SRAM installed
// #define RAM 512 // 512KB SRAM installed

// #define ROM 32 // Use 32KB ROM chip 27C256-70
#define ROM 64 // Use 64KB ROM chip 27C512-70
// #define ROM 128 // Use 128KB ROM chip 27C010-70 
// #define ROM 256 // Use 256KB ROM chip 27C020-70
// #define ROM 512 // Use 512KB ROM chip 27C040-70, Change Jumper on board


cputype Am186ES // AMD188/6 based controllers

#if defined(__PDREMOTE__)

#if RAM == 32
map	0x00000 to 0x00fff as reserved // interrupt vector table
map	0x01000 to 0x03fff as rdwr  	// System RAM area (60KB RAM)
map	0x04000 to 0x07fff as rdonly	// Simulated EPROM area (64KB RAM)
map	0x08000 to 0xfffff as reserved	// No access allowed
#define CODE_START 0x0400	// Start of application code, STEP2 !

#elif RAM == 128
map	0x00000 to 0x00fff as reserved // interrupt vector table
map	0x01000 to 0x07fff as rdwr  	// System RAM area (60KB RAM)
map	0x08000 to 0x1ffff as rdonly	// Simulated EPROM area (64KB RAM)
map	0x20000 to 0xfffff as reserved	// No access allowed
#define CODE_START 0x0800		// Start of application code

#elif RAM == 512
map	0x00000 to 0x00fff as reserved // interrupt vector table
map	0x01000 to 0x07fff as rdwr	// System RAM area (60KB RAM)
map	0x08000 to 0x7ffff as rdonly	// Simulated EPROM area(480KB RAM)
map	0x80000 to 0xfffff as reserved // No access allowed
#define CODE_START 0x0800		// Start of application code
#endif

#define DATA_START 0x0100	// Start of application data
#define BOOT_START 0x1fc0	// Start of initialization code

#else
#if ROM == 32			    
map	0x00000 to 0x1ffff as rdwr	// 128KB RAM address space
map	0x20000 to 0xf7fff as reserved	// No access
map	0xF8000 to 0xfffff as rdonly	// 32KB EPROM address space
#define CODE_START 0xF800	    	// Start of application code
#elif ROM == 64
map	0x00000 to 0x1ffff as rdwr  	// 128KB RAM address space
map	0x20000 to 0xEffff as reserved	// No access
map	0xF0000 to 0xfffff as rdonly	// 64KB EPROM address space
#define CODE_START 0xF000	    	// Start of application code
#elif ROM == 128
map	0x00000 to 0x1ffff as rdwr  	// 128KB RAM address space
map	0x20000 to 0xDffff as reserved	// No access
map	0xE0000 to 0xfffff as rdonly	// 128KB EPROM address space
#define CODE_START 0xE000	    	// Start of application code
#elif ROM == 256
map	0x00000 to 0x1ffff as rdwr  	// 128KB RAM address space
map	0x20000 to 0xBffff as reserved	// No access
map	0xC0000 to 0xfffff as rdonly	// 256KB EPROM address space
#define CODE_START 0xC000			// Start of application code
#elif ROM == 512
map	0x00000 to 0x1ffff as rdwr			// 128KB RAM address space
map	0x20000 to 0x7ffff as reserved	// No access
map	0x80000 to 0xfffff as rdonly		// 512KB EPROM address space
#define CODE_START 0x8000			// Start of application code
#endif

#define DATA_START		0x0040			// Start of application data
#define BOOT_START		0xffc0			// Start of initialization code

initcode	reset		\ // Reset vector to program entry point
		umcs = 0x80bf	\ // 512K ROM, 3 wait states
		lmcs = 0x7fbf	\ // 512K RAM, 3 wait states
		mpcs = 0xa0bf	\
		mmcs = 0x81ff	\
		pacs = 0x007f

class 	??LOCATE = BOOT_START		// Chip select initialization
output	??LOCATE

#if ROM == 32			// 27C256-90 EPROM or FLASH
hexfile binary offset=0xf8000 size=32	// for 27C256, bin file
#elif ROM == 64				// 27C512-90 EPROM or FLASH
hexfile binary offset=0xF0000 size=64	// for 27C512
#elif ROM == 128			// 27C010-90 EPROM or FLASH
hexfile binary offset=0xE0000 size=128	// for 27C010
#elif ROM == 256			// 27C020-90 EPROM or FLASH
hexfile binary offset=0xC0000 size=256	// for 27C020
#elif ROM == 512			// 27C040-90 EPROM or FLASH
hexfile Intel86 offset=0x80000 size=512	// for 27C040, output .HEX file
#endif

#endif


//
// Start of common configuration file settings.
//

absfile	axe86									// Paradigm C++ debugging output
listfile	segments								// Absolute segment map

dup		DATA ROMDATA		// Make a copy of initialized data
dup		FAR_DATA ROMFARDATA	// Make a copy of far initialized data

#if defined(__COMPFARDATA__)	   	// Compress and display results
compress	ROMFARDATA
display	compression
#endif

class		CODE = CODE_START  	// Application code
class		DATA = DATA_START  	// Application data

order		DATA								\	// RAM class organization
			BSS		    	\
			NVRAM		    	\
			EDATA		    	\
			STACK		    	\
			FAR_DATA ENDFAR_DATA	\
			FAR_BSS ENDFAR_BSS  	\
			FAR_HEAP ENDFAR_HEAP

order		CODE			      	\	// EPROM class organization
			INITDATA EXITDATA   	\
			FAR_CONST ENDFAR_CONST	\
			ROMDATA ENDROMDATA    	\
			ROMFARDATA ENDROMFARDATA

output	CODE				      	\	// Classes in the output file(s)
			INITDATA EXITDATA     	\
			FAR_CONST ENDFAR_CONST	\
			ROMDATA ENDROMDATA    	\
			ROMFARDATA ENDROMFARDATA
