OpenCores
URL https://opencores.org/ocsvn/w11/w11/trunk

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.61/] [tools/] [fx2/] [src/] [startup.a51] - Diff between revs 17 and 26

Only display areas with differences | Details | Blame | View Log

Rev 17 Rev 26
;;; -*- asm -*-
;;; -*- asm -*-
;;; $Id: startup.a51 395 2011-07-17 22:02:55Z mueller $
;;; $Id: startup.a51 395 2011-07-17 22:02:55Z mueller $
;;;
;;;
;;;-----------------------------------------------------------------------------
;;;-----------------------------------------------------------------------------
;;; Startup code
;;; Startup code
;;;-----------------------------------------------------------------------------
;;;-----------------------------------------------------------------------------
;;; Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2,
;;; Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2,
;;; Copyright 2003 Free Software Foundation, Inc.
;;; Copyright 2003 Free Software Foundation, Inc.
;;;-----------------------------------------------------------------------------
;;;-----------------------------------------------------------------------------
;;; This code is part of usbjtag. usbjtag is free software; you can redistribute
;;; This code is part of usbjtag. usbjtag is free software; you can redistribute
;;; it and/or modify it under the terms of the GNU General Public License as
;;; it and/or modify it under the terms of the GNU General Public License as
;;; published by the Free Software Foundation; either version 2 of the License,
;;; published by the Free Software Foundation; either version 2 of the License,
;;; or (at your option) any later version. usbjtag is distributed in the hope
;;; or (at your option) any later version. usbjtag is distributed in the hope
;;; that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
;;; that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
;;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.  You should have received a
;;; GNU General Public License for more details.  You should have received a
;;; copy of the GNU General Public License along with this program in the file
;;; copy of the GNU General Public License along with this program in the file
;;; COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin
;;; COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin
;;; St, Fifth Floor, Boston, MA  02110-1301  USA
;;; St, Fifth Floor, Boston, MA  02110-1301  USA
;;;-----------------------------------------------------------------------------
;;;-----------------------------------------------------------------------------
;;; The default external memory initialization provided by sdcc is not
;;; The default external memory initialization provided by sdcc is not
;;; appropriate to the FX2.  This is derived from the sdcc code, but uses
;;; appropriate to the FX2.  This is derived from the sdcc code, but uses
;;; the FX2 specific _MPAGE sfr.
;;; the FX2 specific _MPAGE sfr.
        ;; .area XISEG   (XDATA)  ; the initialized external data area
        ;; .area XISEG   (XDATA)  ; the initialized external data area
        ;; .area XINIT   (CODE)          ; the code space consts to init XISEG
        ;; .area XINIT   (CODE)          ; the code space consts to init XISEG
        .area XSEG    (XDATA)          ; zero initialized xdata
        .area XSEG    (XDATA)          ; zero initialized xdata
        .area USBDESCSEG (XDATA)  ; usb descriptors
        .area USBDESCSEG (XDATA)  ; usb descriptors
        .area CSEG    (CODE)
        .area CSEG    (CODE)
        ;; sfr that sets upper address byte of MOVX using @r0 or @r1
        ;; sfr that sets upper address byte of MOVX using @r0 or @r1
        _MPAGE        =        0x0092
        _MPAGE        =        0x0092
__sdcc_external_startup::
__sdcc_external_startup::
        ;; This system is now compiled with the --no-xinit-opt
        ;; This system is now compiled with the --no-xinit-opt
        ;; which means that any initialized XDATA is handled
        ;; which means that any initialized XDATA is handled
        ;; inline by code in the GSINIT segs emitted for each file.
        ;; inline by code in the GSINIT segs emitted for each file.
        ;;
        ;;
        ;; We zero XSEG and all of the internal ram to ensure
        ;; We zero XSEG and all of the internal ram to ensure
        ;; a known good state for uninitialized variables.
        ;; a known good state for uninitialized variables.
;        _mcs51_genRAMCLEAR() start
;        _mcs51_genRAMCLEAR() start
        mov        r0,#l_XSEG
        mov        r0,#l_XSEG
        mov        a,r0
        mov        a,r0
        orl        a,#(l_XSEG >> 8)
        orl        a,#(l_XSEG >> 8)
        jz        00002$
        jz        00002$
        mov        r1,#((l_XSEG + 255) >> 8)
        mov        r1,#((l_XSEG + 255) >> 8)
        mov        dptr,#s_XSEG
        mov        dptr,#s_XSEG
        clr     a
        clr     a
00001$:        movx        @dptr,a
00001$:        movx        @dptr,a
        inc        dptr
        inc        dptr
        djnz        r0,00001$
        djnz        r0,00001$
        djnz        r1,00001$
        djnz        r1,00001$
        ;; We're about to clear internal memory.  This will overwrite
        ;; We're about to clear internal memory.  This will overwrite
        ;; the stack which contains our return address.
        ;; the stack which contains our return address.
        ;; Pop our return address into DPH, DPL
        ;; Pop our return address into DPH, DPL
00002$:        pop        dph
00002$:        pop        dph
        pop        dpl
        pop        dpl
        ;; R0 and A contain 0.  This loop will execute 256 times.
        ;; R0 and A contain 0.  This loop will execute 256 times.
        ;;
        ;;
        ;; FWIW the first iteration writes direct address 0x00,
        ;; FWIW the first iteration writes direct address 0x00,
        ;; which is the location of r0.  We get lucky, we're
        ;; which is the location of r0.  We get lucky, we're
        ;; writing the correct value (0)
        ;; writing the correct value (0)
00003$:        mov        @r0,a
00003$:        mov        @r0,a
        djnz        r0,00003$
        djnz        r0,00003$
        push        dpl                ; restore our return address
        push        dpl                ; restore our return address
        push        dph
        push        dph
        mov        dpl,#0                ; indicate that data init is still required
        mov        dpl,#0                ; indicate that data init is still required
        ret
        ret
 
 

powered by: WebSVN 2.1.0

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