diff --git a/portable/IAR/RL78/ISR_Support.h b/portable/IAR/RL78/ISR_Support.h
deleted file mode 100644
index 7ceed2d..0000000
--- a/portable/IAR/RL78/ISR_Support.h
+++ /dev/null
@@ -1,84 +0,0 @@
-;/*
-; * FreeRTOS Kernel <DEVELOPMENT BRANCH>
-; * Copyright (C) 2021 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
-; *
-; * SPDX-License-Identifier: MIT
-; *
-; * Permission is hereby granted, free of charge, to any person obtaining a copy of
-; * this software and associated documentation files (the "Software"), to deal in
-; * the Software without restriction, including without limitation the rights to
-; * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-; * the Software, and to permit persons to whom the Software is furnished to do so,
-; * subject to the following conditions:
-; *
-; * The above copyright notice and this permission notice shall be included in all
-; * copies or substantial portions of the Software.
-; *
-; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-; * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-; * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-; * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-; *
-; * https://www.FreeRTOS.org
-; * https://github.com/FreeRTOS
-; *
-; */
-
-
-#include "FreeRTOSConfig.h"
-
-; Variables used by scheduler
-;------------------------------------------------------------------------------
-	EXTERN    pxCurrentTCB
-	EXTERN    usCriticalNesting
-
-;------------------------------------------------------------------------------
-;   portSAVE_CONTEXT MACRO
-;   Saves the context of the general purpose registers, CS and ES (only in far
-;	memory mode) registers the usCriticalNesting Value and the Stack Pointer
-;   of the active Task onto the task stack
-;------------------------------------------------------------------------------
-portSAVE_CONTEXT MACRO
-
-	PUSH      AX                    ; Save AX Register to stack.
-	PUSH      HL
-	MOV       A, CS                 ; Save CS register.
-	XCH       A, X
-	MOV       A, ES                 ; Save ES register.
-	PUSH      AX
-	PUSH      DE                    ; Save the remaining general purpose registers.
-	PUSH      BC
-	MOVW      AX, usCriticalNesting ; Save the usCriticalNesting value.
-	PUSH      AX
-	MOVW      AX, pxCurrentTCB 	    ; Save the Stack pointer.
-	MOVW      HL, AX
-	MOVW      AX, SP
-	MOVW      [HL], AX
-	ENDM
-;------------------------------------------------------------------------------
-
-;------------------------------------------------------------------------------
-;   portRESTORE_CONTEXT MACRO
-;   Restores the task Stack Pointer then use this to restore usCriticalNesting,
-;   general purpose registers and the CS and ES (only in far memory mode)
-;   of the selected task from the task stack
-;------------------------------------------------------------------------------
-portRESTORE_CONTEXT MACRO
-	MOVW      AX, pxCurrentTCB	    ; Restore the Stack pointer.
-	MOVW      HL, AX
-	MOVW      AX, [HL]
-	MOVW      SP, AX
-	POP	      AX	                ; Restore usCriticalNesting value.
-	MOVW      usCriticalNesting, AX
-	POP	      BC                    ; Restore the necessary general purpose registers.
-	POP	      DE
-	POP       AX                    ; Restore the ES register.
-	MOV       ES, A
-	XCH       A, X                  ; Restore the CS register.
-	MOV       CS, A
-	POP       HL                    ; Restore general purpose register HL.
-	POP       AX                    ; Restore AX.
-	ENDM
-;------------------------------------------------------------------------------
diff --git a/portable/IAR/RL78/port.c b/portable/IAR/RL78/port.c
index 8e6e7e4..7cfc02b 100644
--- a/portable/IAR/RL78/port.c
+++ b/portable/IAR/RL78/port.c
@@ -45,7 +45,7 @@
  *   |--------------------- Zero Flag set
  *   ---------------------- Global Interrupt Flag set (enabled)
  */
-#define portPSW		  ( 0xc6UL )
+#define portPSW    ( 0xc6UL )
 
 /* The address of the pxCurrentTCB variable, but don't know or need to know its
 type. */
@@ -65,21 +65,13 @@
 /*-----------------------------------------------------------*/
 
 /*
- * Sets up the periodic ISR used for the RTOS tick using the interval timer.
- * The application writer can define configSETUP_TICK_INTERRUPT() (in
- * FreeRTOSConfig.h) such that their own tick interrupt configuration is used
- * in place of prvSetupTimerInterrupt().
+ * Sets up the periodic ISR used for the RTOS tick.
  */
-static void prvSetupTimerInterrupt( void );
-#ifndef configSETUP_TICK_INTERRUPT
-	/* The user has not provided their own tick interrupt configuration so use
-    the definition in this file (which uses the interval timer). */
-	#define configSETUP_TICK_INTERRUPT() prvSetupTimerInterrupt()
-#endif /* configSETUP_TICK_INTERRUPT */
+extern void vApplicationSetupTimerInterrupt( void );
 
 /*
- * Defined in portasm.s87, this function starts the scheduler by loading the
- * context of the first task to run.
+ * Starts the scheduler by loading the context of the first Task to run.
+ * (implemented in portasm.s).
  */
 extern void vPortStartFirstTask( void );
 
@@ -100,182 +92,119 @@
 {
 uint32_t *pulLocal;
 
-	/* With large code and large data sizeof( StackType_t ) == 2, and
-	sizeof( StackType_t * ) == 4.  With small code and small data
-	sizeof( StackType_t ) == 2 and sizeof( StackType_t * ) == 2. */
+    /* With large code and large data sizeof( StackType_t ) == 2, and
+    sizeof( StackType_t * ) == 4.  With small code and small data
+    sizeof( StackType_t ) == 2 and sizeof( StackType_t * ) == 2. */
 
-	#if __DATA_MODEL__ == __DATA_MODEL_FAR__
-	{
-		/* Parameters are passed in on the stack, and written using a 32-bit value
-		hence a space is left for the second two bytes. */
-		pxTopOfStack--;
+    #if __DATA_MODEL__ == __DATA_MODEL_FAR__
+    {
+        /* Far pointer parameters are passed using the A:DE registers (24-bit).
+        Although they are stored in memory as a 32-bit value.  Hence decrement
+        the stack pointer, so 2 bytes are left for the contents of A, before 
+        storing the pvParameters value. */
+        pxTopOfStack--;
+        pulLocal =  ( uint32_t * ) pxTopOfStack;
+        *pulLocal = ( uint32_t ) pvParameters;
+        pxTopOfStack--;
 
-		/* Write in the parameter value. */
-		pulLocal =  ( uint32_t * ) pxTopOfStack;
-		*pulLocal = ( uint32_t ) pvParameters;
-		pxTopOfStack--;
+        /* The return address is a 32-bit value. So decrement the stack pointer
+        in order to make extra room needed to store the correct value.  See the
+        comments above the prvTaskExitError() prototype at the top of this file. */
+        pxTopOfStack--;
+        pulLocal = ( uint32_t * ) pxTopOfStack;
+        *pulLocal = ( uint32_t ) prvTaskExitError;
+        pxTopOfStack--;
 
-		/* The return address, leaving space for the first two bytes of	the
-		32-bit value.  See the comments above the prvTaskExitError() prototype
-		at the top of this file. */
-		pxTopOfStack--;
-		pulLocal = ( uint32_t * ) pxTopOfStack;
-		*pulLocal = ( uint32_t ) prvTaskExitError;
-		pxTopOfStack--;
+        /* The task function start address combined with the PSW is also stored
+        as a 32-bit value. So leave a space for the second two bytes. */
+        pxTopOfStack--;
+        pulLocal = ( uint32_t * ) pxTopOfStack;
+        *pulLocal = ( ( ( uint32_t ) pxCode ) | ( portPSW << 24UL ) );
+        pxTopOfStack--;
 
-		/* The start address / PSW value is also written in as a 32-bit value,
-		so leave a space for the second two bytes. */
-		pxTopOfStack--;
+        /* An initial value for the AX register. */
+        *pxTopOfStack = ( StackType_t ) 0x1111;
+        pxTopOfStack--;
+    }
+    #else
+    {
+        /* The return address, leaving space for the first two bytes of the
+        32-bit value.  See the comments above the prvTaskExitError() prototype
+        at the top of this file. */
+        pxTopOfStack--;
+        pulLocal = ( uint32_t * ) pxTopOfStack;
+        *pulLocal = ( uint32_t ) prvTaskExitError;
+        pxTopOfStack--;
 
-		/* Task function start address combined with the PSW. */
-		pulLocal = ( uint32_t * ) pxTopOfStack;
-		*pulLocal = ( ( ( uint32_t ) pxCode ) | ( portPSW << 24UL ) );
-		pxTopOfStack--;
+        /* Task function.  Again as it is written as a 32-bit value a space is
+        left on the stack for the second two bytes. */
+        pxTopOfStack--;
 
-		/* An initial value for the AX register. */
-		*pxTopOfStack = ( StackType_t ) 0x1111;
-		pxTopOfStack--;
-	}
-	#else
-	{
-		/* The return address, leaving space for the first two bytes of	the
-		32-bit value.  See the comments above the prvTaskExitError() prototype
-		at the top of this file. */
-		pxTopOfStack--;
-		pulLocal = ( uint32_t * ) pxTopOfStack;
-		*pulLocal = ( uint32_t ) prvTaskExitError;
-		pxTopOfStack--;
+        /* Task function start address combined with the PSW. */
+        pulLocal = ( uint32_t * ) pxTopOfStack;
+        *pulLocal = ( ( ( uint32_t ) pxCode ) | ( portPSW << 24UL ) );
+        pxTopOfStack--;
 
-		/* Task function.  Again as it is written as a 32-bit value a space is
-		left on the stack for the second two bytes. */
-		pxTopOfStack--;
+        /* The parameter is passed in AX. */
+        *pxTopOfStack = ( StackType_t ) pvParameters;
+        pxTopOfStack--;
+    }
+    #endif
 
-		/* Task function start address combined with the PSW. */
-		pulLocal = ( uint32_t * ) pxTopOfStack;
-		*pulLocal = ( ( ( uint32_t ) pxCode ) | ( portPSW << 24UL ) );
-		pxTopOfStack--;
+    /* An initial value for the HL register. */
+    *pxTopOfStack = ( StackType_t ) 0x2222;
+    pxTopOfStack--;
 
-		/* The parameter is passed in AX. */
-		*pxTopOfStack = ( StackType_t ) pvParameters;
-		pxTopOfStack--;
-	}
-	#endif
+    /* CS and ES registers. */
+    *pxTopOfStack = ( StackType_t ) 0x0F00;
+    pxTopOfStack--;
 
-	/* An initial value for the HL register. */
-	*pxTopOfStack = ( StackType_t ) 0x2222;
-	pxTopOfStack--;
+    /* The remaining general purpose registers DE and BC */
+    *pxTopOfStack = ( StackType_t ) 0xDEDE;
+    pxTopOfStack--;
+    *pxTopOfStack = ( StackType_t ) 0xBCBC;
+    pxTopOfStack--;
 
-	/* CS and ES registers. */
-	*pxTopOfStack = ( StackType_t ) 0x0F00;
-	pxTopOfStack--;
+    /* Finally the critical section nesting count is set to zero when the task
+    first starts. */
+    *pxTopOfStack = ( StackType_t ) portNO_CRITICAL_SECTION_NESTING;
 
-	/* The remaining general purpose registers DE and BC */
-	*pxTopOfStack = ( StackType_t ) 0xDEDE;
-	pxTopOfStack--;
-	*pxTopOfStack = ( StackType_t ) 0xBCBC;
-	pxTopOfStack--;
-
-	/* Finally the critical section nesting count is set to zero when the task
-	first starts. */
-	*pxTopOfStack = ( StackType_t ) portNO_CRITICAL_SECTION_NESTING;
-
-	/* Return a pointer to the top of the stack that has been generated so it
-	can	be stored in the task control block for the task. */
-	return pxTopOfStack;
+    /* Return a pointer to the top of the stack that has been generated so
+    it can be stored in the task control block for the task. */
+    return pxTopOfStack;
 }
 /*-----------------------------------------------------------*/
 
 static void prvTaskExitError( void )
 {
-	/* A function that implements a task must not exit or attempt to return to
-	its caller as there is nothing to return to.  If a task wants to exit it
-	should instead call vTaskDelete( NULL ).
+    /* A function that implements a task must not exit or attempt to return to
+    its caller as there is nothing to return to.  If a task wants to exit it
+    should instead call vTaskDelete( NULL ).
 
-	Artificially force an assert() to be triggered if configASSERT() is
-	defined, then stop here so application writers can catch the error. */
-	configASSERT( usCriticalNesting == ~0U );
-	portDISABLE_INTERRUPTS();
-	for( ;; );
+    Artificially force an assert() to be triggered if configASSERT() is
+    defined, then stop here so application writers can catch the error. */
+    configASSERT( usCriticalNesting == ~0U );
+    portDISABLE_INTERRUPTS();
+    for( ;; );
 }
 /*-----------------------------------------------------------*/
 
 BaseType_t xPortStartScheduler( void )
 {
-	/* Setup the hardware to generate the tick.  Interrupts are disabled when
-	this function is called. */
-	configSETUP_TICK_INTERRUPT();
+    /* Setup the hardware to generate the tick. Interrupts are disabled when
+     this function is called. */
+    vApplicationSetupTimerInterrupt();
 
-	/* Restore the context of the first task that is going to run. */
-	vPortStartFirstTask();
+    /* Restore the context of the first task that is going to run. */
+    vPortStartFirstTask();
 
-	/* Execution should not reach here as the tasks are now running!
-	prvSetupTimerInterrupt() is called here to prevent the compiler outputting
-	a warning about a statically declared function not being referenced in the
-	case that the application writer has provided their own tick interrupt
-	configuration routine (and defined configSETUP_TICK_INTERRUPT() such that
-	their own routine will be called in place of prvSetupTimerInterrupt()). */
-	prvSetupTimerInterrupt();
-	return pdTRUE;
+    /* Execution should not reach here as the tasks are now running! */
+    return pdTRUE;
 }
 /*-----------------------------------------------------------*/
 
 void vPortEndScheduler( void )
 {
-	/* It is unlikely that the RL78 port will get stopped. */
+    /* It is unlikely that the RL78 port will get stopped. */
 }
 /*-----------------------------------------------------------*/
-
-static void prvSetupTimerInterrupt( void )
-{
-const uint16_t usClockHz = 15000UL; /* Internal clock. */
-const uint16_t usCompareMatch = ( usClockHz / configTICK_RATE_HZ ) + 1UL;
-
-	/* Use the internal 15K clock. */
-	OSMC = ( uint8_t ) 0x16;
-
-	#ifdef RTCEN
-	{
-		/* Supply the interval timer clock. */
-		RTCEN = ( uint8_t ) 1U;
-
-		/* Disable INTIT interrupt. */
-		ITMK = ( uint8_t ) 1;
-
-		/* Disable ITMC operation. */
-		ITMC = ( uint8_t ) 0x0000;
-
-		/* Clear INIT interrupt. */
-		ITIF = ( uint8_t ) 0;
-
-		/* Set interval and enable interrupt operation. */
-		ITMC = usCompareMatch | 0x8000U;
-
-		/* Enable INTIT interrupt. */
-		ITMK = ( uint8_t ) 0;
-	}
-	#endif
-
-	#ifdef TMKAEN
-	{
-		/* Supply the interval timer clock. */
-		TMKAEN = ( uint8_t ) 1U;
-
-		/* Disable INTIT interrupt. */
-		TMKAMK = ( uint8_t ) 1;
-
-		/* Disable ITMC operation. */
-		ITMC = ( uint8_t ) 0x0000;
-
-		/* Clear INIT interrupt. */
-		TMKAIF = ( uint8_t ) 0;
-
-		/* Set interval and enable interrupt operation. */
-		ITMC = usCompareMatch | 0x8000U;
-
-		/* Enable INTIT interrupt. */
-		TMKAMK = ( uint8_t ) 0;
-	}
-	#endif
-}
-/*-----------------------------------------------------------*/
-
diff --git a/portable/IAR/RL78/portasm.s b/portable/IAR/RL78/portasm.s
new file mode 100644
index 0000000..f328d1b
--- /dev/null
+++ b/portable/IAR/RL78/portasm.s
@@ -0,0 +1,84 @@
+;/*
+; * FreeRTOS Kernel <DEVELOPMENT BRANCH>
+; * Copyright (C) 2021 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
+; *
+; * SPDX-License-Identifier: MIT
+; *
+; * Permission is hereby granted, free of charge, to any person obtaining a copy of
+; * this software and associated documentation files (the "Software"), to deal in
+; * the Software without restriction, including without limitation the rights to
+; * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+; * the Software, and to permit persons to whom the Software is furnished to do so,
+; * subject to the following conditions:
+; *
+; * The above copyright notice and this permission notice shall be included in all
+; * copies or substantial portions of the Software.
+; *
+; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+; * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+; * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+; * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+; *
+; * https://www.FreeRTOS.org
+; * https://github.com/FreeRTOS
+; *
+; */
+
+#include "portmacro.h"
+
+    EXTERN    _vTaskSwitchContext
+    EXTERN    _xTaskIncrementTick
+
+    EXTERN    _interrupt_vector_table
+
+    PUBLIC    _vPortYield
+    PUBLIC    _vPortStartFirstTask
+    PUBLIC    _vPortTickISR
+
+#if !defined(__IASMRL78__) || (__VER__ < 310)
+    #error "This port requires the IAR Assembler for RL78 version 3.10 or later."
+#endif
+
+;-------------------------------------------------------------------------------
+;   FreeRTOS yield handler.  This is installed as the BRK software interrupt
+;   handler.
+;-------------------------------------------------------------------------------
+    SECTION  `.text`:CODE:ROOT(1)
+_vPortYield:
+    portSAVE_CONTEXT               ; Save the context of the current task.
+    RCALL    (_vTaskSwitchContext) ; Call the scheduler to select the next task.
+    portRESTORE_CONTEXT            ; Restore the context of the next task to run.
+    RETB
+;-------------------------------------------------------------------------------
+
+
+;-------------------------------------------------------------------------------
+;   Starts the scheduler by restoring the context of the task that will execute
+;   first.
+;-------------------------------------------------------------------------------
+    SECTION  `.text`:CODE:ROOT(1)
+_vPortStartFirstTask:
+    portRESTORE_CONTEXT            ; Restore the context of whichever task the ...
+    RETI                           ; An interrupt stack frame is used so the
+                                   ; task is started using a RETI instruction.
+;-------------------------------------------------------------------------------
+
+
+;-------------------------------------------------------------------------------
+;   FreeRTOS Timer Tick handler.
+;   This is installed as the interval timer interrupt handler.
+;-------------------------------------------------------------------------------
+    SECTION  `.text`:CODE:ROOT(1)
+_vPortTickISR:
+    portSAVE_CONTEXT               ; Save the context of the current task.
+    RCALL    (_xTaskIncrementTick) ; Call the timer tick function.
+    CMPW    AX, #0x00
+    SKZ
+    RCALL    (_vTaskSwitchContext) ; Call the scheduler to select the next task.
+    portRESTORE_CONTEXT            ; Restore the context of the next task to run.
+    RETI
+;-------------------------------------------------------------------------------
+
+    END
diff --git a/portable/IAR/RL78/portasm.s87 b/portable/IAR/RL78/portasm.s87
deleted file mode 100644
index 6d68649..0000000
--- a/portable/IAR/RL78/portasm.s87
+++ /dev/null
@@ -1,84 +0,0 @@
-;/*
-; * FreeRTOS Kernel <DEVELOPMENT BRANCH>
-; * Copyright (C) 2021 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
-; *
-; * SPDX-License-Identifier: MIT
-; *
-; * Permission is hereby granted, free of charge, to any person obtaining a copy of
-; * this software and associated documentation files (the "Software"), to deal in
-; * the Software without restriction, including without limitation the rights to
-; * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-; * the Software, and to permit persons to whom the Software is furnished to do so,
-; * subject to the following conditions:
-; *
-; * The above copyright notice and this permission notice shall be included in all
-; * copies or substantial portions of the Software.
-; *
-; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-; * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-; * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-; * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-; *
-; * https://www.FreeRTOS.org
-; * https://github.com/FreeRTOS
-; *
-; */
-
-#include "ISR_Support.h"
-
-#define CS                    0xFFFFC
-#define ES                    0xFFFFD
-
-	PUBLIC    vPortYield
-	PUBLIC    vPortStartFirstTask
-	PUBLIC    vPortTickISR
-
-	EXTERN    vTaskSwitchContext
-	EXTERN    xTaskIncrementTick
-
-; FreeRTOS yield handler.  This is installed as the BRK software interrupt
-; handler.
-    RSEG CODE:CODE
-vPortYield:
-	portSAVE_CONTEXT		        ; Save the context of the current task.
-	call      vTaskSwitchContext    ; Call the scheduler to select the next task.
-	portRESTORE_CONTEXT		        ; Restore the context of the next task to run.
-	retb
-
-
-; Starts the scheduler by restoring the context of the task that will execute
-; first.
-    RSEG CODE:CODE
-vPortStartFirstTask:
-	portRESTORE_CONTEXT	            ; Restore the context of whichever task the ...
-	reti					        ; An interrupt stack frame is used so the task
-                                    ; is started using a RETI instruction.
-
-; FreeRTOS tick handler.  This is installed as the interval timer interrupt
-; handler.
-	 RSEG CODE:CODE
-vPortTickISR:
-
-	portSAVE_CONTEXT		       ; Save the context of the current task.
-	call	xTaskIncrementTick     ; Call the timer tick function.
-	cmpw	ax, #0x00
-	skz
-	call	vTaskSwitchContext     ; Call the scheduler to select the next task.
-	portRESTORE_CONTEXT		       ; Restore the context of the next task to run.
-	reti
-
-
-; Install the interrupt handlers
-
-	COMMON INTVEC:CODE:ROOT(1)
-	ORG configTICK_VECTOR
-	DW vPortTickISR
-
-	COMMON INTVEC:CODE:ROOT(1)
-	ORG 126
-	DW vPortYield
-
-
-      END
diff --git a/portable/IAR/RL78/portmacro.h b/portable/IAR/RL78/portmacro.h
index f183352..0243125 100644
--- a/portable/IAR/RL78/portmacro.h
+++ b/portable/IAR/RL78/portmacro.h
@@ -29,6 +29,8 @@
 #ifndef PORTMACRO_H
 #define PORTMACRO_H
 
+#ifdef __IAR_SYSTEMS_ICC__
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -44,11 +46,11 @@
  */
 
 #if __DATA_MODEL__ == __DATA_MODEL_FAR__ && __CODE_MODEL__ == __CODE_MODEL_NEAR__
-	#warning This port has not been tested with your selected memory model combination. If a far data model is required it is recommended to also use a far code model.
+    #warning This port has not been tested with your selected memory model combination. If a far data model is required it is recommended to also use a far code model.
 #endif
 
 #if __DATA_MODEL__ == __DATA_MODEL_NEAR__ && __CODE_MODEL__ == __CODE_MODEL_FAR__
-	#warning This port has not been tested with your selected memory model combination. If a far code model is required it is recommended to also use a far data model.
+    #warning This port has not been tested with your selected memory model combination. If a far code model is required it is recommended to also use a far data model.
 #endif
 
 /* Type definitions. */
@@ -67,70 +69,70 @@
 
 
 #if __DATA_MODEL__ == __DATA_MODEL_FAR__
-	#define portPOINTER_SIZE_TYPE uint32_t
+    #define portPOINTER_SIZE_TYPE uint32_t
 #else
-	#define portPOINTER_SIZE_TYPE uint16_t
+    #define portPOINTER_SIZE_TYPE uint16_t
 #endif
 
 
 #if ( configUSE_16_BIT_TICKS == 1 )
-	typedef unsigned int TickType_t;
-	#define portMAX_DELAY ( TickType_t ) 0xffff
+    typedef unsigned int TickType_t;
+    #define portMAX_DELAY ( TickType_t ) 0xffff
 #else
-	typedef uint32_t TickType_t;
-	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL
+    typedef uint32_t TickType_t;
+    #define portMAX_DELAY ( TickType_t ) 0xffffffffUL
 #endif
 /*-----------------------------------------------------------*/
 
 /* Interrupt control macros. */
-#define portDISABLE_INTERRUPTS() __asm ( "DI" )
-#define portENABLE_INTERRUPTS()	 __asm ( "EI" )
+#define portDISABLE_INTERRUPTS()    __asm ( "DI" )
+#define portENABLE_INTERRUPTS()     __asm ( "EI" )
 /*-----------------------------------------------------------*/
 
 /* Critical section control macros. */
-#define portNO_CRITICAL_SECTION_NESTING		( ( uint16_t ) 0 )
+#define portNO_CRITICAL_SECTION_NESTING        ( ( uint16_t ) 0 )
 
-#define portENTER_CRITICAL()													\
-{																				\
-extern volatile uint16_t usCriticalNesting;										\
-																				\
-	portDISABLE_INTERRUPTS();													\
-																				\
-	/* Now interrupts are disabled ulCriticalNesting can be accessed */			\
-	/* directly.  Increment ulCriticalNesting to keep a count of how many */	\
-	/* times portENTER_CRITICAL() has been called. */							\
-	usCriticalNesting++;														\
+#define portENTER_CRITICAL()                                                   \
+{                                                                              \
+extern volatile uint16_t usCriticalNesting;                                    \
+                                                                               \
+    portDISABLE_INTERRUPTS();                                                  \
+                                                                               \
+    /* Now interrupts are disabled ulCriticalNesting can be accessed */        \
+    /* directly.  Increment ulCriticalNesting to keep a count of how many */   \
+    /* times portENTER_CRITICAL() has been called. */                          \
+    usCriticalNesting++;                                                       \
 }
 
-#define portEXIT_CRITICAL()														\
-{																				\
-extern volatile uint16_t usCriticalNesting;										\
-																				\
-	if( usCriticalNesting > portNO_CRITICAL_SECTION_NESTING )					\
-	{																			\
-		/* Decrement the nesting count as we are leaving a critical section. */	\
-		usCriticalNesting--;													\
-																				\
-		/* If the nesting level has reached zero then interrupts should be */	\
-		/* re-enabled. */														\
-		if( usCriticalNesting == portNO_CRITICAL_SECTION_NESTING )				\
-		{																		\
-			portENABLE_INTERRUPTS();											\
-		}																		\
-	}																			\
+#define portEXIT_CRITICAL()                                                    \
+{                                                                              \
+extern volatile uint16_t usCriticalNesting;                                    \
+                                                                               \
+    if( usCriticalNesting > portNO_CRITICAL_SECTION_NESTING )                  \
+    {                                                                          \
+        /* Decrement the nesting count when leaving a critical section. */     \
+        usCriticalNesting--;                                                   \
+                                                                               \
+        /* If the nesting level has reached zero then interrupts should be */  \
+        /* re-enabled. */                                                      \
+        if( usCriticalNesting == portNO_CRITICAL_SECTION_NESTING )             \
+        {                                                                      \
+            portENABLE_INTERRUPTS();                                           \
+        }                                                                      \
+    }                                                                          \
 }
 /*-----------------------------------------------------------*/
 
 /* Task utilities. */
-#define portYIELD()	__asm( "BRK" )
+#define portNOP()      __asm( "NOP" )
+#define portYIELD()    __asm( "BRK" )
 #define portYIELD_FROM_ISR( xHigherPriorityTaskWoken ) do { if( xHigherPriorityTaskWoken ) vTaskSwitchContext(); } while( 0 )
-#define portNOP()	__asm( "NOP" )
 /*-----------------------------------------------------------*/
 
 /* Hardwware specifics. */
-#define portBYTE_ALIGNMENT	2
-#define portSTACK_GROWTH	( -1 )
-#define portTICK_PERIOD_MS	( ( TickType_t ) 1000 / configTICK_RATE_HZ )
+#define portBYTE_ALIGNMENT   2
+#define portSTACK_GROWTH     ( -1 )
+#define portTICK_PERIOD_MS   ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
 /*-----------------------------------------------------------*/
 
 /* Task function macros as described on the FreeRTOS.org WEB site. */
@@ -139,7 +141,88 @@
 
 #ifdef __cplusplus
 }
+#endif /* __cplusplus */
+
+#endif /* __IAR_SYSTEMS_ICC__ */
+
+;//-----------------------------------------------------------------------------
+;// The macros below are processed for asm sources which include portmacro.h.
+;//-----------------------------------------------------------------------------
+#ifdef __IAR_SYSTEMS_ASM__
+
+;/* Functions and variables used by this file. */
+;//-----------------------------------------------------------------------------
+    EXTERN _pxCurrentTCB
+    EXTERN _usCriticalNesting
+
+;/* Macro used to declutter calls, depends on the selected code model. */
+;//-----------------------------------------------------------------------------
+#if __CODE_MODEL__ == __CODE_MODEL_FAR__
+    #define RCALL(X)    CALL    F:X
+#else
+    #define RCALL(X)    CALL    X
 #endif
 
-#endif /* PORTMACRO_H */
 
+;/*-----------------------------------------------------------------------------
+; * portSAVE_CONTEXT MACRO
+; * Saves the context of the general purpose registers, CS and ES (only in __far
+; * memory mode) registers the _usCriticalNesting value and the Stack Pointer
+; * of the active Task onto the task stack.
+; *---------------------------------------------------------------------------*/
+portSAVE_CONTEXT MACRO
+    PUSH      AX                       ; // Save AX Register to stack.
+    PUSH      HL
+#if  __CODE_MODEL__  == __CODE_MODEL_FAR__
+    MOV       A, CS                    ; // Save CS register.
+    XCH       A, X
+    MOV       A, ES                    ; // Save ES register.
+    PUSH      AX
+#else
+    MOV       A, CS                    ; // Save CS register.
+    PUSH      AX
+#endif
+    PUSH      DE                       ; // Save the remaining general purpose registers.
+    PUSH      BC
+    MOVW      AX, _usCriticalNesting   ; // Save the _usCriticalNesting value.
+    PUSH      AX
+    MOVW      AX, _pxCurrentTCB        ; // Save the Task stack pointer.
+    MOVW      HL, AX
+    MOVW      AX, SP
+    MOVW      [HL], AX
+    ENDM
+;//-----------------------------------------------------------------------------
+
+
+;/*-----------------------------------------------------------------------------
+; * portRESTORE_CONTEXT MACRO
+; * Restores the task Stack Pointer then use this to restore _usCriticalNesting,
+; * general purpose registers and the CS and ES (only in __far memory mode)
+; * of the selected task from the task stack.
+; *---------------------------------------------------------------------------*/
+portRESTORE_CONTEXT MACRO
+    MOVW    AX, _pxCurrentTCB          ; // Restore the Task stack pointer.
+    MOVW    HL, AX
+    MOVW    AX, [HL]
+    MOVW    SP, AX
+    POP     AX                         ; // Restore _usCriticalNesting value.
+    MOVW    _usCriticalNesting, AX
+    POP     BC                         ; // Restore the necessary general purpose registers.
+    POP     DE
+#if __CODE_MODEL__  == __CODE_MODEL_FAR__
+    POP     AX                         ; // Restore the ES register.
+    MOV     ES, A
+    XCH     A, X                       ; // Restore the CS register.
+    MOV     CS, A
+#else
+    POP     AX
+    MOV     CS, A                      ; // Restore CS register.
+#endif
+    POP     HL                         ; // Restore general purpose register HL.
+    POP     AX                         ; // Restore AX.
+    ENDM
+;//-----------------------------------------------------------------------------
+
+#endif /* __IAR_SYSTEMS_ASM__ */
+
+#endif /* PORTMACRO_H */
