jb302@33: A51 MACRO ASSEMBLER STARTUP 04/15/2014 15:32:07 PAGE 1
jb302@33:
jb302@33:
jb302@33: MACRO ASSEMBLER A51 V8.02
jb302@33: OBJECT MODULE PLACED IN STARTUP.OBJ
jb302@33: ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE STARTUP.A51 SET(SMALL) DEBUG EP
jb302@33:
jb302@33: LOC OBJ LINE SOURCE
jb302@33:
jb302@33: 1 $nomod51
jb302@33: 2 ;------------------------------------------------------------------------------
jb302@33: 3 ; This file is part of the C51 Compiler package
jb302@33: 4 ; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.
jb302@33: 5 ; Version 8.01
jb302@33: 6 ;
jb302@33: 7 ; *** <<< Use Configuration Wizard in Context Menu >>> ***
jb302@33: 8 ;------------------------------------------------------------------------------
jb302@33: 9 ; STARTUP.A51: This code is executed after processor reset.
jb302@33: 10 ;
jb302@33: 11 ; To translate this file use A51 with the following invocation:
jb302@33: 12 ;
jb302@33: 13 ; A51 STARTUP.A51
jb302@33: 14 ;
jb302@33: 15 ; To link the modified STARTUP.OBJ file to your application use the following
jb302@33: 16 ; Lx51 invocation:
jb302@33: 17 ;
jb302@33: 18 ; Lx51 your object file list, STARTUP.OBJ controls
jb302@33: 19 ;
jb302@33: 20 ;------------------------------------------------------------------------------
jb302@33: 21 ;
jb302@33: 22 ; User-defined Power-On Initialization of Memory
jb302@33: 23 ;
jb302@33: 24 ; With the following EQU statements the initialization of memory
jb302@33: 25 ; at processor reset can be defined:
jb302@33: 26 ;
jb302@33: 27 ; IDATALEN: IDATA memory size <0x0-0x100>
jb302@33: 28 ; Note: The absolute start-address of IDATA memory is always 0
jb302@33: 29 ; The IDATA space overlaps physically the DATA and BIT areas.
jb302@33: 0080 30 IDATALEN EQU 80H
jb302@33: 31 ;
jb302@33: 32 ; XDATASTART: XDATA memory start address <0x0-0xFFFF>
jb302@33: 33 ; The absolute start address of XDATA memory
jb302@33: 0000 34 XDATASTART EQU 0
jb302@33: 35 ;
jb302@33: 36 ; XDATALEN: XDATA memory size <0x0-0xFFFF>
jb302@33: 37 ; The length of XDATA memory in bytes.
jb302@33: 0000 38 XDATALEN EQU 0
jb302@33: 39 ;
jb302@33: 40 ; PDATASTART: PDATA memory start address <0x0-0xFFFF>
jb302@33: 41 ; The absolute start address of PDATA memory
jb302@33: 0000 42 PDATASTART EQU 0H
jb302@33: 43 ;
jb302@33: 44 ; PDATALEN: PDATA memory size <0x0-0xFF>
jb302@33: 45 ; The length of PDATA memory in bytes.
jb302@33: 0000 46 PDATALEN EQU 0H
jb302@33: 47 ;
jb302@33: 48 ;
jb302@33: 49 ;------------------------------------------------------------------------------
jb302@33: 50 ;
jb302@33: 51 ; Reentrant Stack Initialization
jb302@33: 52 ;
jb302@33: 53 ; The following EQU statements define the stack pointer for reentrant
jb302@33: 54 ; functions and initialized it:
jb302@33: 55 ;
jb302@33: 56 ; Stack Space for reentrant functions in the SMALL model.
jb302@33: 57 ; IBPSTACK: Enable SMALL model reentrant stack
jb302@33: 58 ; Stack space for reentrant functions in the SMALL model.
jb302@33: A51 MACRO ASSEMBLER STARTUP 04/15/2014 15:32:07 PAGE 2
jb302@33:
jb302@33: 0000 59 IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
jb302@33: 60 ; IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
jb302@33: 61 ; Set the top of the stack to the highest location.
jb302@33: 0100 62 IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
jb302@33: 63 ;
jb302@33: 64 ;
jb302@33: 65 ; Stack Space for reentrant functions in the LARGE model.
jb302@33: 66 ; XBPSTACK: Enable LARGE model reentrant stack
jb302@33: 67 ; Stack space for reentrant functions in the LARGE model.
jb302@33: 0000 68 XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
jb302@33: 69 ; XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
jb302@33: 70 ; Set the top of the stack to the highest location.
jb302@33: 0000 71 XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1
jb302@33: 72 ;
jb302@33: 73 ;
jb302@33: 74 ; Stack Space for reentrant functions in the COMPACT model.
jb302@33: 75 ; PBPSTACK: Enable COMPACT model reentrant stack
jb302@33: 76 ; Stack space for reentrant functions in the COMPACT model.
jb302@33: 0000 77 PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
jb302@33: 78 ;
jb302@33: 79 ; PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
jb302@33: 80 ; Set the top of the stack to the highest location.
jb302@33: 0100 81 PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
jb302@33: 82 ;
jb302@33: 83 ;
jb302@33: 84 ;------------------------------------------------------------------------------
jb302@33: 85 ;
jb302@33: 86 ; Memory Page for Using the Compact Model with 64 KByte xdata RAM
jb302@33: 87 ; Compact Model Page Definition
jb302@33: 88 ;
jb302@33: 89 ; Define the XDATA page used for PDATA variables.
jb302@33: 90 ; PPAGE must conform with the PPAGE set in the linker invocation.
jb302@33: 91 ;
jb302@33: 92 ; Enable pdata memory page initalization
jb302@33: 0000 93 PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
jb302@33: 94 ;
jb302@33: 95 ; PPAGE number <0x0-0xFF>
jb302@33: 96 ; uppermost 256-byte address of the page used for PDATA variables.
jb302@33: 0000 97 PPAGE EQU 0
jb302@33: 98 ;
jb302@33: 99 ; SFR address which supplies uppermost address byte <0x0-0xFF>
jb302@33: 100 ; most 8051 variants use P2 as uppermost address byte
jb302@33: 00A0 101 PPAGE_SFR DATA 0A0H
jb302@33: 102 ;
jb302@33: 103 ;
jb302@33: 104 ;------------------------------------------------------------------------------
jb302@33: 105
jb302@33: 106 ; Standard SFR Symbols
jb302@33: 00E0 107 ACC DATA 0E0H
jb302@33: 00F0 108 B DATA 0F0H
jb302@33: 0081 109 SP DATA 81H
jb302@33: 0082 110 DPL DATA 82H
jb302@33: 0083 111 DPH DATA 83H
jb302@33: 112
jb302@33: 113 NAME ?C_STARTUP
jb302@33: 114
jb302@33: 115
jb302@33: 116 ?C_C51STARTUP SEGMENT CODE
jb302@33: 117 ?STACK SEGMENT IDATA
jb302@33: 118
jb302@33: ---- 119 RSEG ?STACK
jb302@33: 0000 120 DS 1
jb302@33: 121
jb302@33: 122 EXTRN CODE (?C_START)
jb302@33: 123 PUBLIC ?C_STARTUP
jb302@33: 124
jb302@33: A51 MACRO ASSEMBLER STARTUP 04/15/2014 15:32:07 PAGE 3
jb302@33:
jb302@33: ---- 125 CSEG AT 0
jb302@33: 0000 020000 F 126 ?C_STARTUP: LJMP STARTUP1
jb302@33: 127
jb302@33: ---- 128 RSEG ?C_C51STARTUP
jb302@33: 129
jb302@33: 0000 130 STARTUP1:
jb302@33: 131
jb302@33: 132 IF IDATALEN <> 0
jb302@33: 0000 787F 133 MOV R0,#IDATALEN - 1
jb302@33: 0002 E4 134 CLR A
jb302@33: 0003 F6 135 IDATALOOP: MOV @R0,A
jb302@33: 0004 D8FD 136 DJNZ R0,IDATALOOP
jb302@33: 137 ENDIF
jb302@33: 138
jb302@33: 139 IF XDATALEN <> 0
jb302@33: MOV DPTR,#XDATASTART
jb302@33: MOV R7,#LOW (XDATALEN)
jb302@33: IF (LOW (XDATALEN)) <> 0
jb302@33: MOV R6,#(HIGH (XDATALEN)) +1
jb302@33: ELSE
jb302@33: MOV R6,#HIGH (XDATALEN)
jb302@33: ENDIF
jb302@33: CLR A
jb302@33: XDATALOOP: MOVX @DPTR,A
jb302@33: INC DPTR
jb302@33: DJNZ R7,XDATALOOP
jb302@33: DJNZ R6,XDATALOOP
jb302@33: ENDIF
jb302@33: 153
jb302@33: 154 IF PPAGEENABLE <> 0
jb302@33: MOV PPAGE_SFR,#PPAGE
jb302@33: ENDIF
jb302@33: 157
jb302@33: 158 IF PDATALEN <> 0
jb302@33: MOV R0,#LOW (PDATASTART)
jb302@33: MOV R7,#LOW (PDATALEN)
jb302@33: CLR A
jb302@33: PDATALOOP: MOVX @R0,A
jb302@33: INC R0
jb302@33: DJNZ R7,PDATALOOP
jb302@33: ENDIF
jb302@33: 166
jb302@33: 167 IF IBPSTACK <> 0
jb302@33: EXTRN DATA (?C_IBP)
jb302@33:
jb302@33: MOV ?C_IBP,#LOW IBPSTACKTOP
jb302@33: ENDIF
jb302@33: 172
jb302@33: 173 IF XBPSTACK <> 0
jb302@33: EXTRN DATA (?C_XBP)
jb302@33:
jb302@33: MOV ?C_XBP,#HIGH XBPSTACKTOP
jb302@33: MOV ?C_XBP+1,#LOW XBPSTACKTOP
jb302@33: ENDIF
jb302@33: 179
jb302@33: 180 IF PBPSTACK <> 0
jb302@33: EXTRN DATA (?C_PBP)
jb302@33: MOV ?C_PBP,#LOW PBPSTACKTOP
jb302@33: ENDIF
jb302@33: 184
jb302@33: 0006 758100 F 185 MOV SP,#?STACK-1
jb302@33: 186
jb302@33: 187 ; This code is required if you use L51_BANK.A51 with Banking Mode 4
jb302@33: 188 ; Code Banking
jb302@33: 189 ; Select Bank 0 for L51_BANK.A51 Mode 4
jb302@33: 190
jb302@33: A51 MACRO ASSEMBLER STARTUP 04/15/2014 15:32:07 PAGE 4
jb302@33:
jb302@33:
jb302@33:
jb302@33:
jb302@33:
jb302@33: 195 ;
jb302@33: 0009 020000 F 196 LJMP ?C_START
jb302@33: 197
jb302@33: 198 END
jb302@33: A51 MACRO ASSEMBLER STARTUP 04/15/2014 15:32:07 PAGE 5
jb302@33:
jb302@33: SYMBOL TABLE LISTING
jb302@33: ------ ----- -------
jb302@33:
jb302@33:
jb302@33: N A M E T Y P E V A L U E ATTRIBUTES
jb302@33:
jb302@33: ?C_C51STARTUP. . . C SEG 000CH REL=UNIT
jb302@33: ?C_START . . . . . C ADDR ----- EXT
jb302@33: ?C_STARTUP . . . . C ADDR 0000H A
jb302@33: ?STACK . . . . . . I SEG 0001H REL=UNIT
jb302@33: ACC. . . . . . . . D ADDR 00E0H A
jb302@33: B. . . . . . . . . D ADDR 00F0H A
jb302@33: DPH. . . . . . . . D ADDR 0083H A
jb302@33: DPL. . . . . . . . D ADDR 0082H A
jb302@33: IBPSTACK . . . . . N NUMB 0000H A
jb302@33: IBPSTACKTOP. . . . N NUMB 0100H A
jb302@33: IDATALEN . . . . . N NUMB 0080H A
jb302@33: IDATALOOP. . . . . C ADDR 0003H R SEG=?C_C51STARTUP
jb302@33: PBPSTACK . . . . . N NUMB 0000H A
jb302@33: PBPSTACKTOP. . . . N NUMB 0100H A
jb302@33: PDATALEN . . . . . N NUMB 0000H A
jb302@33: PDATASTART . . . . N NUMB 0000H A
jb302@33: PPAGE. . . . . . . N NUMB 0000H A
jb302@33: PPAGEENABLE. . . . N NUMB 0000H A
jb302@33: PPAGE_SFR. . . . . D ADDR 00A0H A
jb302@33: SP . . . . . . . . D ADDR 0081H A
jb302@33: STARTUP1 . . . . . C ADDR 0000H R SEG=?C_C51STARTUP
jb302@33: XBPSTACK . . . . . N NUMB 0000H A
jb302@33: XBPSTACKTOP. . . . N NUMB 0000H A
jb302@33: XDATALEN . . . . . N NUMB 0000H A
jb302@33: XDATASTART . . . . N NUMB 0000H A
jb302@33:
jb302@33:
jb302@33: REGISTER BANK(S) USED: 0
jb302@33:
jb302@33:
jb302@33: ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)