]> git.llucax.com Git - z.facultad/66.09/etherled.git/blob - src/startup.a51
Primer intento de integración y creación del proyecto.
[z.facultad/66.09/etherled.git] / src / startup.a51
1 $NOMOD51
2 ;------------------------------------------------------------------------------
3 ;  This file is part of the C51 Compiler package
4 ;  Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
5 ;------------------------------------------------------------------------------
6 ;  STARTUP.A51:  This code is executed after processor reset.
7 ;
8 ;  To translate this file use A51 with the following invocation:
9 ;
10 ;     A51 STARTUP.A51
11 ;
12 ;  To link the modified STARTUP.OBJ file to your application use the following
13 ;  BL51 invocation:
14 ;
15 ;     BL51 <your object file list>, STARTUP.OBJ <controls>
16 ;
17 ;------------------------------------------------------------------------------
18 ;
19 ;  User-defined Power-On Initialization of Memory
20 ;
21 ;  With the following EQU statements the initialization of memory
22 ;  at processor reset can be defined:
23 ;
24 ;               ; the absolute start-address of IDATA memory is always 0
25 IDATALEN        EQU     80H     ; the length of IDATA memory in bytes.
26 ;
27 XDATASTART      EQU     0H      ; the absolute start-address of XDATA memory
28 XDATALEN        EQU     400H    ; the length of XDATA memory in bytes.
29 ;
30 PDATASTART      EQU     0H      ; the absolute start-address of PDATA memory
31 PDATALEN        EQU     0H      ; the length of PDATA memory in bytes.
32 ;
33 ;  Notes:  The IDATA space overlaps physically the DATA and BIT areas of the
34 ;          8051 CPU. At minimum the memory space occupied from the C51 
35 ;          run-time routines must be set to zero.
36 ;------------------------------------------------------------------------------
37 ;
38 ;  Reentrant Stack Initilization
39 ;
40 ;  The following EQU statements define the stack pointer for reentrant
41 ;  functions and initialized it:
42 ;
43 ;  Stack Space for reentrant functions in the SMALL model.
44 IBPSTACK        EQU     0       ; set to 1 if small reentrant is used.
45 IBPSTACKTOP     EQU     0FFH+1  ; set top of stack to highest location+1.
46 ;
47 ;  Stack Space for reentrant functions in the LARGE model.      
48 XBPSTACK        EQU     0       ; set to 1 if large reentrant is used.
49 XBPSTACKTOP     EQU     0FFFFH+1; set top of stack to highest location+1.
50 ;
51 ;  Stack Space for reentrant functions in the COMPACT model.    
52 PBPSTACK        EQU     0       ; set to 1 if compact reentrant is used.
53 PBPSTACKTOP     EQU     0FFFFH+1; set top of stack to highest location+1.
54 ;
55 ;------------------------------------------------------------------------------
56 ;
57 ;  Page Definition for Using the Compact Model with 64 KByte xdata RAM
58 ;
59 ;  The following EQU statements define the xdata page used for pdata
60 ;  variables. The EQU PPAGE must conform with the PPAGE control used
61 ;  in the linker invocation.
62 ;
63 PPAGEENABLE     EQU     0       ; set to 1 if pdata object are used.
64 ;
65 PPAGE           EQU     0       ; define PPAGE number.
66 ;
67 PPAGE_SFR       DATA    0A0H    ; SFR that supplies uppermost address byte
68 ;               (most 8051 variants use P2 as uppermost address byte)
69 ;
70 ;------------------------------------------------------------------------------
71
72 ; Standard SFR Symbols 
73 ACC     DATA    0E0H
74 B       DATA    0F0H
75 SP      DATA    81H
76 DPL     DATA    82H
77 DPH     DATA    83H
78
79                 NAME    ?C_STARTUP
80
81
82 ?C_C51STARTUP   SEGMENT   CODE
83 ?STACK          SEGMENT   IDATA
84
85                 RSEG    ?STACK
86                 DS      1
87
88                 EXTRN CODE (?C_START)
89                 PUBLIC  ?C_STARTUP
90
91                 CSEG    AT      0
92 ?C_STARTUP:     LJMP    STARTUP1
93
94                 RSEG    ?C_C51STARTUP
95
96 STARTUP1:
97
98 IF IDATALEN <> 0
99                 MOV     R0,#IDATALEN - 1
100                 CLR     A
101 IDATALOOP:      MOV     @R0,A
102                 DJNZ    R0,IDATALOOP
103 ENDIF
104
105 IF XDATALEN <> 0
106                 MOV     DPTR,#XDATASTART
107                 MOV     R7,#LOW (XDATALEN)
108   IF (LOW (XDATALEN)) <> 0
109                 MOV     R6,#(HIGH (XDATALEN)) +1
110   ELSE
111                 MOV     R6,#HIGH (XDATALEN)
112   ENDIF
113                 CLR     A
114 XDATALOOP:      MOVX    @DPTR,A
115                 INC     DPTR
116                 DJNZ    R7,XDATALOOP
117                 DJNZ    R6,XDATALOOP
118 ENDIF
119
120 IF PPAGEENABLE <> 0
121                 MOV     PPAGE_SFR,#PPAGE
122 ENDIF
123
124 IF PDATALEN <> 0
125                 MOV     R0,#LOW (PDATASTART)
126                 MOV     R7,#LOW (PDATALEN)
127                 CLR     A
128 PDATALOOP:      MOVX    @R0,A
129                 INC     R0
130                 DJNZ    R7,PDATALOOP
131 ENDIF
132
133 IF IBPSTACK <> 0
134 EXTRN DATA (?C_IBP)
135
136                 MOV     ?C_IBP,#LOW IBPSTACKTOP
137 ENDIF
138
139 IF XBPSTACK <> 0
140 EXTRN DATA (?C_XBP)
141
142                 MOV     ?C_XBP,#HIGH XBPSTACKTOP
143                 MOV     ?C_XBP+1,#LOW XBPSTACKTOP
144 ENDIF
145
146 IF PBPSTACK <> 0
147 EXTRN DATA (?C_PBP)
148                 MOV     ?C_PBP,#LOW PBPSTACKTOP
149 ENDIF
150
151                 MOV     SP,#?STACK-1
152 ; This code is required if you use L51_BANK.A51 with Banking Mode 4
153 ; EXTRN CODE (?B_SWITCH0)
154 ;               CALL    ?B_SWITCH0      ; init bank mechanism to code bank 0
155                 LJMP    ?C_START
156
157                 END