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)