A51 MACRO ASSEMBLER STARTUP 08/02/2005 13:29:57 PAGE 1 MACRO ASSEMBLER A51 V7.07 OBJECT MODULE PLACED IN .\STARTUP.obj ASSEMBLER INVOKED BY: d:\Keil777\C51\BIN\A51.EXE C:\Program Files\PHILIPS\ISP1362 PCI Dos X2\X2-118\STARTUP.A51 SET(SMAL L) DEBUG PRINT(.\STARTUP.lst) OBJECT(.\STARTUP.obj) EP LOC OBJ LINE SOURCE 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 , STARTUP.OBJ 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 0080 25 IDATALEN EQU 80H ; the length of IDATA memory in bytes. 26 ; 0000 27 XDATASTART EQU 0H ; the absolute start-address of XDATA memory 0000 28 XDATALEN EQU 0H ; the length of XDATA memory in bytes. 29 ; 0000 30 PDATASTART EQU 0H ; the absolute start-address of PDATA memory 0000 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. 0000 44 IBPSTACK EQU 0 ; set to 1 if small reentrant is used. 0100 45 IBPSTACKTOP EQU 0FFH+1 ; set top of stack to highest location+1. 46 ; 47 ; Stack Space for reentrant functions in the LARGE model. 0000 48 XBPSTACK EQU 0 ; set to 1 if large reentrant is used. 0000 49 XBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1. 50 ; 51 ; Stack Space for reentrant functions in the COMPACT model. 0000 52 PBPSTACK EQU 0 ; set to 1 if compact reentrant is used. 0000 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 A51 MACRO ASSEMBLER STARTUP 08/02/2005 13:29:57 PAGE 2 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 ; 0000 63 PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. 64 ; 0000 65 PPAGE EQU 0 ; define PPAGE number. 66 ; 00A0 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 00E0 73 ACC DATA 0E0H 00F0 74 B DATA 0F0H 0081 75 SP DATA 81H 0082 76 DPL DATA 82H 0083 77 DPH DATA 83H 78 79 NAME ?C_STARTUP 80 81 82 ?C_C51STARTUP SEGMENT CODE 83 ?STACK SEGMENT IDATA 84 ---- 85 RSEG ?STACK 0000 86 DS 1 87 88 EXTRN CODE (?C_START) 89 PUBLIC ?C_STARTUP 90 ---- 91 CSEG AT 0 0000 020000 F 92 ?C_STARTUP: LJMP STARTUP1 93 ---- 94 RSEG ?C_C51STARTUP 95 0000 96 STARTUP1: 97 98 IF IDATALEN <> 0 0000 787F 99 MOV R0,#IDATALEN - 1 0002 E4 100 CLR A 0003 F6 101 IDATALOOP: MOV @R0,A 0004 D8FD 102 DJNZ R0,IDATALOOP 103 ENDIF 104 105 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 119 120 IF PPAGEENABLE <> 0 MOV PPAGE_SFR,#PPAGE ENDIF 123 A51 MACRO ASSEMBLER STARTUP 08/02/2005 13:29:57 PAGE 3 124 IF PDATALEN <> 0 MOV R0,#LOW (PDATASTART) MOV R7,#LOW (PDATALEN) CLR A PDATALOOP: MOVX @R0,A INC R0 DJNZ R7,PDATALOOP ENDIF 132 133 IF IBPSTACK <> 0 EXTRN DATA (?C_IBP) MOV ?C_IBP,#LOW IBPSTACKTOP ENDIF 138 139 IF XBPSTACK <> 0 EXTRN DATA (?C_XBP) MOV ?C_XBP,#HIGH XBPSTACKTOP MOV ?C_XBP+1,#LOW XBPSTACKTOP ENDIF 145 146 IF PBPSTACK <> 0 EXTRN DATA (?C_PBP) MOV ?C_PBP,#LOW PBPSTACKTOP ENDIF 150 0006 758100 F 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 0009 020000 F 155 LJMP ?C_START 156 157 END A51 MACRO ASSEMBLER STARTUP 08/02/2005 13:29:57 PAGE 4 SYMBOL TABLE LISTING ------ ----- ------- N A M E T Y P E V A L U E ATTRIBUTES ?C_C51STARTUP. . . C SEG 000CH REL=UNIT ?C_START . . . . . C ADDR ----- EXT ?C_STARTUP . . . . C ADDR 0000H A ?STACK . . . . . . I SEG 0001H REL=UNIT ACC. . . . . . . . D ADDR 00E0H A B. . . . . . . . . D ADDR 00F0H A DPH. . . . . . . . D ADDR 0083H A DPL. . . . . . . . D ADDR 0082H A IBPSTACK . . . . . N NUMB 0000H A IBPSTACKTOP. . . . N NUMB 0100H A IDATALEN . . . . . N NUMB 0080H A IDATALOOP. . . . . C ADDR 0003H R SEG=?C_C51STARTUP PBPSTACK . . . . . N NUMB 0000H A PBPSTACKTOP. . . . N NUMB 0000H A PDATALEN . . . . . N NUMB 0000H A PDATASTART . . . . N NUMB 0000H A PPAGE. . . . . . . N NUMB 0000H A PPAGEENABLE. . . . N NUMB 0000H A PPAGE_SFR. . . . . D ADDR 00A0H A SP . . . . . . . . D ADDR 0081H A STARTUP1 . . . . . C ADDR 0000H R SEG=?C_C51STARTUP XBPSTACK . . . . . N NUMB 0000H A XBPSTACKTOP. . . . N NUMB 0000H A XDATALEN . . . . . N NUMB 0000H A XDATASTART . . . . N NUMB 0000H A REGISTER BANK(S) USED: 0 ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)