-$NOMOD51\r
-;------------------------------------------------------------------------------\r
-; This file is part of the C51 Compiler package\r
-; Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.\r
-;------------------------------------------------------------------------------\r
-; STARTUP.A51: This code is executed after processor reset.\r
-;\r
-; To translate this file use A51 with the following invocation:\r
-;\r
-; A51 STARTUP.A51\r
-;\r
-; To link the modified STARTUP.OBJ file to your application use the following\r
-; BL51 invocation:\r
-;\r
-; BL51 <your object file list>, STARTUP.OBJ <controls>\r
-;\r
-;------------------------------------------------------------------------------\r
-;\r
-; User-defined Power-On Initialization of Memory\r
-;\r
-; With the following EQU statements the initialization of memory\r
-; at processor reset can be defined:\r
-;\r
-; ; the absolute start-address of IDATA memory is always 0\r
-IDATALEN EQU 80H ; the length of IDATA memory in bytes.\r
-;\r
-XDATASTART EQU 0H ; the absolute start-address of XDATA memory\r
-XDATALEN EQU 400H ; the length of XDATA memory in bytes.\r
-;\r
-PDATASTART EQU 0H ; the absolute start-address of PDATA memory\r
-PDATALEN EQU 0H ; the length of PDATA memory in bytes.\r
-;\r
-; Notes: The IDATA space overlaps physically the DATA and BIT areas of the\r
-; 8051 CPU. At minimum the memory space occupied from the C51 \r
-; run-time routines must be set to zero.\r
-;------------------------------------------------------------------------------\r
-;\r
-; Reentrant Stack Initilization\r
-;\r
-; The following EQU statements define the stack pointer for reentrant\r
-; functions and initialized it:\r
-;\r
-; Stack Space for reentrant functions in the SMALL model.\r
-IBPSTACK EQU 0 ; set to 1 if small reentrant is used.\r
-IBPSTACKTOP EQU 0FFH+1 ; set top of stack to highest location+1.\r
-;\r
-; Stack Space for reentrant functions in the LARGE model. \r
-XBPSTACK EQU 0 ; set to 1 if large reentrant is used.\r
-XBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.\r
-;\r
-; Stack Space for reentrant functions in the COMPACT model. \r
-PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.\r
-PBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.\r
-;\r
-;------------------------------------------------------------------------------\r
-;\r
-; Page Definition for Using the Compact Model with 64 KByte xdata RAM\r
-;\r
-; The following EQU statements define the xdata page used for pdata\r
-; variables. The EQU PPAGE must conform with the PPAGE control used\r
-; in the linker invocation.\r
-;\r
-PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.\r
-;\r
-PPAGE EQU 0 ; define PPAGE number.\r
-;\r
-PPAGE_SFR DATA 0A0H ; SFR that supplies uppermost address byte\r
-; (most 8051 variants use P2 as uppermost address byte)\r
-;\r
-;------------------------------------------------------------------------------\r
-\r
-; Standard SFR Symbols \r
-ACC DATA 0E0H\r
-B DATA 0F0H\r
-SP DATA 81H\r
-DPL DATA 82H\r
-DPH DATA 83H\r
-\r
- NAME ?C_STARTUP\r
-\r
-\r
-?C_C51STARTUP SEGMENT CODE\r
-?STACK SEGMENT IDATA\r
-\r
- RSEG ?STACK\r
- DS 1\r
-\r
- EXTRN CODE (?C_START)\r
- PUBLIC ?C_STARTUP\r
-\r
- CSEG AT 0\r
-?C_STARTUP: LJMP STARTUP1\r
-\r
- RSEG ?C_C51STARTUP\r
-\r
-STARTUP1:\r
-\r
-IF IDATALEN <> 0\r
- MOV R0,#IDATALEN - 1\r
- CLR A\r
-IDATALOOP: MOV @R0,A\r
- DJNZ R0,IDATALOOP\r
-ENDIF\r
-\r
-IF XDATALEN <> 0\r
- MOV DPTR,#XDATASTART\r
- MOV R7,#LOW (XDATALEN)\r
- IF (LOW (XDATALEN)) <> 0\r
- MOV R6,#(HIGH (XDATALEN)) +1\r
- ELSE\r
- MOV R6,#HIGH (XDATALEN)\r
- ENDIF\r
- CLR A\r
-XDATALOOP: MOVX @DPTR,A\r
- INC DPTR\r
- DJNZ R7,XDATALOOP\r
- DJNZ R6,XDATALOOP\r
-ENDIF\r
-\r
-IF PPAGEENABLE <> 0\r
- MOV PPAGE_SFR,#PPAGE\r
-ENDIF\r
-\r
-IF PDATALEN <> 0\r
- MOV R0,#LOW (PDATASTART)\r
- MOV R7,#LOW (PDATALEN)\r
- CLR A\r
-PDATALOOP: MOVX @R0,A\r
- INC R0\r
- DJNZ R7,PDATALOOP\r
-ENDIF\r
-\r
-IF IBPSTACK <> 0\r
-EXTRN DATA (?C_IBP)\r
-\r
- MOV ?C_IBP,#LOW IBPSTACKTOP\r
-ENDIF\r
-\r
-IF XBPSTACK <> 0\r
-EXTRN DATA (?C_XBP)\r
-\r
- MOV ?C_XBP,#HIGH XBPSTACKTOP\r
- MOV ?C_XBP+1,#LOW XBPSTACKTOP\r
-ENDIF\r
-\r
-IF PBPSTACK <> 0\r
-EXTRN DATA (?C_PBP)\r
- MOV ?C_PBP,#LOW PBPSTACKTOP\r
-ENDIF\r
-\r
- MOV SP,#?STACK-1\r
-; This code is required if you use L51_BANK.A51 with Banking Mode 4\r
-; EXTRN CODE (?B_SWITCH0)\r
-; CALL ?B_SWITCH0 ; init bank mechanism to code bank 0\r
- LJMP ?C_START\r
-\r
- END\r
+$NOMOD51
+;------------------------------------------------------------------------------
+; This file is part of the C51 Compiler package
+; Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
+;------------------------------------------------------------------------------
+; STARTUP.A51: This code is executed after processor reset.
+;
+; To translate this file use A51 with the following invocation:
+;
+; A51 STARTUP.A51
+;
+; To link the modified STARTUP.OBJ file to your application use the following
+; BL51 invocation:
+;
+; BL51 <your object file list>, STARTUP.OBJ <controls>
+;
+;------------------------------------------------------------------------------
+;
+; User-defined Power-On Initialization of Memory
+;
+; With the following EQU statements the initialization of memory
+; at processor reset can be defined:
+;
+; ; the absolute start-address of IDATA memory is always 0
+IDATALEN EQU 80H ; the length of IDATA memory in bytes.
+;
+XDATASTART EQU 0H ; the absolute start-address of XDATA memory
+XDATALEN EQU 400H ; the length of XDATA memory in bytes.
+;
+PDATASTART EQU 0H ; the absolute start-address of PDATA memory
+PDATALEN EQU 0H ; the length of PDATA memory in bytes.
+;
+; Notes: The IDATA space overlaps physically the DATA and BIT areas of the
+; 8051 CPU. At minimum the memory space occupied from the C51
+; run-time routines must be set to zero.
+;------------------------------------------------------------------------------
+;
+; Reentrant Stack Initilization
+;
+; The following EQU statements define the stack pointer for reentrant
+; functions and initialized it:
+;
+; Stack Space for reentrant functions in the SMALL model.
+IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
+IBPSTACKTOP EQU 0FFH+1 ; set top of stack to highest location+1.
+;
+; Stack Space for reentrant functions in the LARGE model.
+XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
+XBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.
+;
+; Stack Space for reentrant functions in the COMPACT model.
+PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
+PBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.
+;
+;------------------------------------------------------------------------------
+;
+; Page Definition for Using the Compact Model with 64 KByte xdata RAM
+;
+; The following EQU statements define the xdata page used for pdata
+; variables. The EQU PPAGE must conform with the PPAGE control used
+; in the linker invocation.
+;
+PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
+;
+PPAGE EQU 0 ; define PPAGE number.
+;
+PPAGE_SFR DATA 0A0H ; SFR that supplies uppermost address byte
+; (most 8051 variants use P2 as uppermost address byte)
+;
+;------------------------------------------------------------------------------
+
+; Standard SFR Symbols
+ACC DATA 0E0H
+B DATA 0F0H
+SP DATA 81H
+DPL DATA 82H
+DPH DATA 83H
+
+ NAME ?C_STARTUP
+
+
+?C_C51STARTUP SEGMENT CODE
+?STACK SEGMENT IDATA
+
+ RSEG ?STACK
+ DS 1
+
+ EXTRN CODE (?C_START)
+ PUBLIC ?C_STARTUP
+
+ CSEG AT 0
+?C_STARTUP: LJMP STARTUP1
+
+ RSEG ?C_C51STARTUP
+
+STARTUP1:
+
+IF IDATALEN <> 0
+ MOV R0,#IDATALEN - 1
+ CLR A
+IDATALOOP: MOV @R0,A
+ DJNZ R0,IDATALOOP
+ENDIF
+
+IF XDATALEN <> 0
+ MOV DPTR,#XDATASTART
+ MOV R7,#LOW (XDATALEN)
+ IF (LOW (XDATALEN)) <> 0
+ MOV R6,#(HIGH (XDATALEN)) +1
+ ELSE
+ MOV R6,#HIGH (XDATALEN)
+ ENDIF
+ CLR A
+XDATALOOP: MOVX @DPTR,A
+ INC DPTR
+ DJNZ R7,XDATALOOP
+ DJNZ R6,XDATALOOP
+ENDIF
+
+IF PPAGEENABLE <> 0
+ MOV PPAGE_SFR,#PPAGE
+ENDIF
+
+IF PDATALEN <> 0
+ MOV R0,#LOW (PDATASTART)
+ MOV R7,#LOW (PDATALEN)
+ CLR A
+PDATALOOP: MOVX @R0,A
+ INC R0
+ DJNZ R7,PDATALOOP
+ENDIF
+
+IF IBPSTACK <> 0
+EXTRN DATA (?C_IBP)
+
+ MOV ?C_IBP,#LOW IBPSTACKTOP
+ENDIF
+
+IF XBPSTACK <> 0
+EXTRN DATA (?C_XBP)
+
+ MOV ?C_XBP,#HIGH XBPSTACKTOP
+ MOV ?C_XBP+1,#LOW XBPSTACKTOP
+ENDIF
+
+IF PBPSTACK <> 0
+EXTRN DATA (?C_PBP)
+ MOV ?C_PBP,#LOW PBPSTACKTOP
+ENDIF
+
+ MOV SP,#?STACK-1
+; This code is required if you use L51_BANK.A51 with Banking Mode 4
+; EXTRN CODE (?B_SWITCH0)
+; CALL ?B_SWITCH0 ; init bank mechanism to code bank 0
+ LJMP ?C_START
+
+ END