blob: 5d1c46d5329ba9a4719e62c98af7bd922b72054b [file] [log] [blame]
;----------------------------------------------------------------------------
;
; MACROS.M90
;
; This module contains the A90/AVR C macros
; used by cstartup.s90 and other assemble source.
;
; File version: $Revision: 1.8 $
;
;
;----------------------------------------------------------------------------
#if (((__TID__ >> 8) & 0x7F) != 90)
#error This file should only be assembled by aa90 or aavr
#endif
#define A90_PROC_OPTION ((__TID__ >> 4) & 0x0F)
/* Long or relative jumps and calls */
#if (A90_PROC_OPTION == 0) || (A90_PROC_OPTION == 1)
#define XCALL RCALL
#define XJMP RJMP
#else
#define XCALL CALL
#define XJMP JMP
#endif
/* Length of pointer registers (X/Y/Z) */
#if (A90_PROC_OPTION == 0) || (A90_PROC_OPTION == 2)
#define A90_POINTER_REG_SIZE 1
#define A90_TINY_INDEX
#else /*!(A90_PROC_OPTION == 0) || (A90_PROC_OPTION == 2)*/
#if (A90_PROC_OPTION == 1) || (A90_PROC_OPTION == 3) || (A90_PROC_OPTION ==5)
#define A90_POINTER_REG_SIZE 2
#else /*!(A90_PROC_OPTION == 1) || (A90_PROC_OPTION == 3) || (A90_PROC_OPTION ==5)*/
#if (A90_PROC_OPTION == 4) || (A90_PROC_OPTION == 6)
#define A90_POINTER_REG_SIZE 3
#define A90_EXTENDED_DATA
#else /*!(A90_PROC_OPTION == 4) || (A90_PROC_OPTION == 6)*/
#error Unknown processor option!!
#endif /*!(A90_PROC_OPTION == 4) || (A90_PROC_OPTION == 6)*/
#endif /*!(A90_PROC_OPTION == 1) || (A90_PROC_OPTION == 3) || (A90_PROC_OPTION ==5)*/
#endif /*!(A90_PROC_OPTION == 0) || (A90_PROC_OPTION == 2)*/
#if (A90_PROC_OPTION > 4)
#define A90_LARGE_CODE
#endif
#if (A90_PROC_OPTION > 1)
#define A90_HAS_POSSIBLE_ELPM
#endif
#ifdef A90_HAS_POSSIBLE_ELPM
#ifdef __HAS_ELPM__
#define A90_HAS_ELPM
#else
#ifndef SMALL_FLASH
#define A90_HAS_ELPM
#endif
#endif
#endif
#if A90_PROC_OPTION > 1
#define A90_24BIT_GENERIC
#endif
#if A90_PROC_OPTION < 2
#define A90_16BIT_GENERIC
#endif
#ifdef __MEMORY_MODEL__
#define TINY_MEMORY_MODEL 0
#define SMALL_MEMORY_MODEL 1
#define LARGE_MEMORY_MODEL 2
#define GENERIC_MEMORY_MODEL 3
#define HUGE_MEMORY_MODEL 4
#if __MEMORY_MODEL__ == 1
#undef MEMORY_MODEL
#define MEMORY_MODEL TINY_MEMORY_MODEL
#endif
#if __MEMORY_MODEL__ == 2
#undef MEMORY_MODEL
#define MEMORY_MODEL SMALL_MEMORY_MODEL
#endif
#if __MEMORY_MODEL__ == 3
#undef MEMORY_MODEL
#define MEMORY_MODEL LARGE_MEMORY_MODEL
#endif
#if __MEMORY_MODEL__ == 4
#undef MEMORY_MODEL
#define MEMORY_MODEL GENERIC_MEMORY_MODEL
#endif
#if __MEMORY_MODEL__ == 5
#undef MEMORY_MODEL
#define MEMORY_MODEL HUGE_MEMORY_MODEL
#endif
#else
#ifdef MEMORY_MODEL
#define t 0
#define s 1
#define l 2
#define g 3
#define h 4
#define TINY_MEMORY_MODEL 0
#define SMALL_MEMORY_MODEL 1
#define LARGE_MEMORY_MODEL 2
#define GENERIC_MEMORY_MODEL 3
#define HUGE_MEMORY_MODEL 4
#if MEMORY_MODEL == t
#undef MEMORY_MODEL
#define MEMORY_MODEL TINY_MEMORY_MODEL
#endif
#if MEMORY_MODEL == s
#undef MEMORY_MODEL
#define MEMORY_MODEL SMALL_MEMORY_MODEL
#endif
#if MEMORY_MODEL == l
#undef MEMORY_MODEL
#define MEMORY_MODEL LARGE_MEMORY_MODEL
#endif
#if MEMORY_MODEL == g
#undef MEMORY_MODEL
#define MEMORY_MODEL GENERIC_MEMORY_MODEL
#endif
#if MEMORY_MODEL == h
#undef MEMORY_MODEL
#define MEMORY_MODEL HUGE_MEMORY_MODEL
#endif
#undef t
#undef s
#undef l
#undef g
#undef h
#endif
#endif
/* Register nicknames */
#define T0 R0
#define T1 R1
#define T2 R2
#define T3 R3
#define P0 R16
#define P1 R17
#define P2 R18
#define P3 R19
#define Q0 R20
#define Q1 R21
#define Q2 R22
#define Q3 R23
#define X0 R26
#define X1 R27
#define X2 R25
#define Y0 R28
#define Y1 R29
#define Z0 R30
#define Z1 R31
#define Z2 R19
/* I/O-Space Register nicknames */
#define RAMPD 0x38
#define RAMPX 0x39
#define RAMPY 0x3A
#define RAMPZ 0x3B
#define EIND 0x3C
#define SREG 0x3F