OpenCores
URL https://opencores.org/ocsvn/openmsp430/openmsp430/trunk
/*===========================================================================*/ /* Copyright (C) 2001 Authors */ /* */ /* This source file may be used and distributed without restriction provided */ /* that this copyright statement is not removed from the file and that any */ /* derivative work contains the original copyright notice and the associated */ /* disclaimer. */ /* */ /* This source file is free software; you can redistribute it and/or modify */ /* it under the terms of the GNU Lesser General Public License as published */ /* by the Free Software Foundation; either version 2.1 of the License, or */ /* (at your option) any later version. */ /* */ /* This source is distributed in the hope that it will be useful, but WITHOUT*/ /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */ /* License for more details. */ /* */ /* You should have received a copy of the GNU Lesser General Public License */ /* along with this source; if not, write to the Free Software Foundation, */ /* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* */ /*===========================================================================*/ /* SINGLE-OPERAND ARITHMETIC: CALL INSTRUCTION */ /*---------------------------------------------------------------------------*/ /* Test the CALL instruction. */ /* */ /* Author(s): */ /* - Olivier Girard, olgirard@gmail.com */ /* */ /*---------------------------------------------------------------------------*/ /* $Rev: 200 $ */ /* $LastChangedBy: olivier.girard $ */ /* $LastChangedDate: 2015-01-21 23:01:31 +0100 (Wed, 21 Jan 2015) $ */ /*===========================================================================*/ .include "pmem_defs.asm" .global main main: /* -------------- TEST INSTRUCTION WITH STANDARD REGISTERS AS ARGUMENT ------------------- */ # Initialization #------------------------ mov #DMEM_252, r1 ;# Initialize stack pointer mov #0x0000, r5 ;# Initialize R5 mov #0x1000, r15 # Addressing mode: Rn #------------------------ mov #0x0000, r5 mov #TEST_ROUTINE_RN, r4 mov #0x5555, &0x0300 call r4 ;# CALL TEST_ROUTINE_RN mov #0x2000, r15 # Addressing mode: @Rn #------------------------ mov #DMEM_212, r4 mov #0x0000, r5 mov #TEST_ROUTINE_aRN, &DMEM_212 mov #0x5555, &DMEM_300 call @r4 ;# CALL TEST_ROUTINE_aRN mov #0x3000, r15 # Addressing mode: @Rn+ #------------------------ mov #DMEM_216, r4 mov #0x0000, r5 mov #TEST_ROUTINE_aRNi, &DMEM_216 mov #0x5555, &DMEM_300 call @r4+ ;# CALL TEST_ROUTINE_aRNi mov #0x4000, r15 # Addressing mode: #N #------------------------ mov #0x0000, r5 mov #0x5555, &DMEM_300 call #TEST_ROUTINE_N ;# CALL TEST_ROUTINE_N mov #0x5000, r15 # Addressing mode: X(Rn) #------------------------ mov #DMEM_200, r4 mov #0x0000, r5 mov #TEST_ROUTINE_xRN, &DMEM_21A mov #0x5555, &DMEM_300 call 26(r4) ;# CALL TEST_ROUTINE_xRN mov #0x6000, r15 # Addressing mode: EDE #------------------------ .set EDE_21E, DMEM_21E+PMEM_EDE_LENGTH mov #0x0000, r5 mov #TEST_ROUTINE_EDE, &DMEM_21E mov #0x5555, &DMEM_300 call EDE_21E ;# CALL TEST_ROUTINE_EDE mov #0x7000, r15 # Addressing mode: &EDE #------------------------ .set aEDE_220, DMEM_220 mov #0x0000, r5 mov #TEST_ROUTINE_aEDE, &aEDE_220 mov #0x5555, &DMEM_300 call &aEDE_220 ;# CALL TEST_ROUTINE_aEDE mov #0x8000, r15 /* -------------- TEST INSTRUCTION WITH SR AS ARGUMENT ------------------- */ # Addressing mode: SR #------------------------ mov #0x0000, r5 nop #call r1 ;# NOT VALID BECAUSE IT JUMPS IN THE DATA MEMORY nop ;# WHICH IS NOT EXECUTABLE mov #0x9000, r15 # Addressing mode: @SR #------------------------ mov #DMEM_252, r1 ;# Initialize stack pointer push #TEST_ROUTINE_RN push #TEST_ROUTINE_aRN push #TEST_ROUTINE_aRNi mov r1, r13 ; backup stack for later push #TEST_ROUTINE_N push #TEST_ROUTINE_xRN push #TEST_ROUTINE_EDE push #TEST_ROUTINE_aEDE nop mov r13, r1 mov #0x0000, r5 nop call @r1 ;# CALL #TEST_ROUTINE_N (r5 = 0xabcd) nop mov #0xa000, r15 # Addressing mode: @SR+ #------------------------ mov #DMEM_252, r1 ;# Initialize stack pointer push #TEST_ROUTINE_SPECIAL_aRNi push #TEST_ROUTINE_RN push #TEST_ROUTINE_aRN push #TEST_ROUTINE_aRNi mov r1, r13 ; backup stack for later push #TEST_ROUTINE_N push #TEST_ROUTINE_xRN push #TEST_ROUTINE_EDE push #TEST_ROUTINE_aEDE nop mov r13, r1 mov #0x0000, r5 nop call @r1+ ;# CALL #TEST_ROUTINE_N (this has a funny behavior of nested call backward until SPECIAL_aRNi is reached) nop mov #0xb000, r15 # Addressing mode: x(SR) #------------------------ mov #DMEM_252, r1 ;# Initialize stack pointer push #TEST_ROUTINE_RN push #TEST_ROUTINE_aRN push #TEST_ROUTINE_aRNi push #TEST_ROUTINE_N push #TEST_ROUTINE_xRN push #TEST_ROUTINE_EDE push #TEST_ROUTINE_aEDE nop mov #0x0000, r5 mov #0x0000, r6 mov #0x0000, r7 call 4(r1) ;# CALL #TEST_ROUTINE_EDE (r7 = 0x2345) mov r5, r7 mov #0x0000, r5 call 6(r1) ;# CALL #TEST_ROUTINE_xRN (r6 = 0xef01) mov r5, r6 mov #0x0000, r5 call 10(r1) ;# CALL #TEST_ROUTINE_aRNi (r5 = 0x9abc) nop mov #0xc000, r15 /* ---------------------- END OF TEST --------------- */ end_of_test: nop br #0xffff /* ---------------------- TEST FUNCTIONS --------------- */ TEST_ROUTINE_RN: mov #0x1234, r5 ret TEST_ROUTINE_aRN: mov #0x5678, r5 ret TEST_ROUTINE_aRNi: mov #0x9abc, r5 ret TEST_ROUTINE_N: mov #0xabcd, r5 ret TEST_ROUTINE_xRN: mov #0xef01, r5 ret TEST_ROUTINE_EDE: mov #0x2345, r5 ret TEST_ROUTINE_aEDE: mov #0x6789, r5 ret TEST_ROUTINE_SPECIAL_aRNi: mov #0x159a, r5 sub #0x000a, r1 ret /* ---------------------- INTERRUPT VECTORS --------------- */ .section .vectors, "a" .word end_of_test ; Interrupt 0 (lowest priority) .word end_of_test ; Interrupt 1 .word end_of_test ; Interrupt 2 .word end_of_test ; Interrupt 3 .word end_of_test ; Interrupt 4 .word end_of_test ; Interrupt 5 .word end_of_test ; Interrupt 6 .word end_of_test ; Interrupt 7 .word end_of_test ; Interrupt 8 .word end_of_test ; Interrupt 9 .word end_of_test ; Interrupt 10 Watchdog timer .word end_of_test ; Interrupt 11 .word end_of_test ; Interrupt 12 .word end_of_test ; Interrupt 13 .word end_of_test ; Interrupt 14 NMI .word main ; Interrupt 15 (highest priority) RESET

Subversion Repositories openmsp430

[/] [openmsp430/] [trunk/] [core/] [sim/] [rtl_sim/] [src/] [sing-op_call.s43] - Blame information for rev 200

Details | Compare with Previous | View Log

Line No. Rev Author Line

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.