URL
https://opencores.org/ocsvn/gecko3/gecko3/trunk
Subversion Repositories gecko3
[/] [gecko3/] [trunk/] [GECKO3COM/] [gecko3com-fw/] [firmware/] [src/] [_startup.a51] - Rev 9
Compare with Previous | Blame | View Log
;;; -*- asm -*-;;;;;; Copyright 2003,2004 Free Software Foundation, Inc.;;;;;; This file is part of GNU Radio;;;;;; GNU Radio is free software; you can redistribute it and/or modify;;; it under the terms of the GNU General Public License as published by;;; the Free Software Foundation; either version 3, or (at your option);;; any later version.;;;;;; GNU Radio 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 General Public License for more details.;;;;;; You should have received a copy of the GNU General Public License;;; along with GNU Radio; see the file COPYING. If not, write to;;; the Free Software Foundation, Inc., 51 Franklin Street,;;; Boston, MA 02110-1301, USA.;;; The default external memory initialization provided by sdcc is not;;; appropriate to the FX2. This is derived from the sdcc code, but uses;;; the FX2 specific _MPAGE sfr.;; .area XISEG (XDATA) ; the initialized external data area;; .area XINIT (CODE) ; the code space consts to init XISEG.area XSEG (XDATA) ; zero initialized xdata.area USBDESCSEG (XDATA) ; usb descriptors.area CSEG (CODE);; sfr that sets upper address byte of MOVX using @r0 or @r1_MPAGE = 0x0092__sdcc_external_startup::;; This system is now compiled with the --no-xinit-opt;; which means that any initialized XDATA is handled;; inline by code in the GSINIT segs emitted for each file.;;;; We zero XSEG and all of the internal ram to ensure;; a known good state for uninitialized variables.; _mcs51_genRAMCLEAR() startmov r0,#l_XSEGmov a,r0orl a,#(l_XSEG >> 8)jz 00002$mov r1,#((l_XSEG + 255) >> 8)mov dptr,#s_XSEGclr a00001$: movx @dptr,ainc dptrdjnz r0,00001$djnz r1,00001$;; We're about to clear internal memory. This will overwrite;; the stack which contains our return address.;; Pop our return address into DPH, DPL00002$: pop dphpop dpl;; R0 and A contain 0. This loop will execute 256 times.;;;; FWIW the first iteration writes direct address 0x00,;; which is the location of r0. We get lucky, we're;; writing the correct value (0)00003$: mov @r0,adjnz r0,00003$push dpl ; restore our return addresspush dphmov dpl,#0 ; indicate that data init is still requiredret
