home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 September / pcwk_09_96.iso / demo / wgelectr / pk51demo / files.2 / EXAMPLES / TDP / STARTUP.A51 < prev    next >
Text File  |  1995-06-08  |  4KB  |  149 lines

  1. ;------------------------------------------------------------------------------
  2. ;  This file is part of the C51 Compiler package
  3. ;  Copyright 1995 KEIL Software, Inc.
  4. ;------------------------------------------------------------------------------
  5. ;  STARTUP.A51:  This code is executed after processor reset.
  6. ;
  7. ;  To translate this file use A51 with the following invocation:
  8. ;
  9. ;     A51 STARTUP.A51
  10. ;
  11. ;  To link the modified STARTUP.OBJ file to your application use the following
  12. ;  L51 invocation:
  13. ;
  14. ;     L51 <your object file list>, STARTUP.OBJ <controls>
  15. ;
  16. ;------------------------------------------------------------------------------
  17. ;
  18. ;  User-defined Power-On Initialization of Memory
  19. ;
  20. ;  With the following EQU statements the initialization of memory
  21. ;  at processor reset can be defined:
  22. ;
  23. ;*******************************************************************************
  24. ;IDATA for this example is 100h (we have a derivative with 256 bytes of DATA)
  25. ;*******************************************************************************
  26. ;        ; the absolute start-address of IDATA memory is always 0
  27. IDATALEN    EQU    100H    ; the length of IDATA memory in bytes.
  28. ;
  29. ;*******************************************************************************
  30. ; XDATA for this example is 2000h (we have 8K of external RAM)
  31. ;*******************************************************************************
  32. XDATASTART    EQU    0H    ; the absolute start-address of XDATA memory
  33. XDATALEN    EQU    2000H    ; the length of XDATA memory in bytes.
  34. ;
  35. PDATASTART    EQU    0H    ; the absolute start-address of PDATA memory
  36. PDATALEN    EQU    0H    ; the length of PDATA memory in bytes.
  37. ;
  38. ;  Notes:  The IDATA space overlaps physically the DATA and BIT areas of the
  39. ;          8051 CPU. At minimum the memory space occupied from the C51 
  40. ;          run-time routines must be set to zero.
  41. ;------------------------------------------------------------------------------
  42. ;
  43. ;  Reentrant Stack Initilization
  44. ;
  45. ;  The following EQU statements define the stack pointer for reentrant
  46. ;  functions and initialized it:
  47. ;
  48. ;  Stack Space for reentrant functions in the SMALL model.
  49. IBPSTACK    EQU    0    ; set to 1 if small reentrant is used.
  50. IBPSTACKTOP    EQU    0FFH+1    ; set top of stack to highest location+1.
  51. ;
  52. ;  Stack Space for reentrant functions in the LARGE model.    
  53. XBPSTACK    EQU    0    ; set to 1 if large reentrant is used.
  54. XBPSTACKTOP    EQU    0FFFFH+1; set top of stack to highest location+1.
  55. ;
  56. ;  Stack Space for reentrant functions in the COMPACT model.    
  57. PBPSTACK    EQU    0    ; set to 1 if compact reentrant is used.
  58. PBPSTACKTOP    EQU    0FFFFH+1; set top of stack to highest location+1.
  59. ;
  60. ;------------------------------------------------------------------------------
  61. ;
  62. ;  Page Definition for Using the Compact Model with 64 KByte xdata RAM
  63. ;
  64. ;  The following EQU statements define the xdata page used for pdata
  65. ;  variables. The EQU PPAGE must conform with the PPAGE control used
  66. ;  in the linker invocation.
  67. ;
  68. PPAGEENABLE    EQU    0    ; set to 1 if pdata object are used.
  69. PPAGE        EQU    0    ; define PPAGE number.
  70. ;
  71. ;------------------------------------------------------------------------------
  72.  
  73.         NAME    ?C_STARTUP
  74.  
  75.  
  76. ?C_C51STARTUP    SEGMENT   CODE
  77. ?STACK        SEGMENT   IDATA
  78.  
  79.         RSEG    ?STACK
  80.         DS    1
  81.  
  82.         EXTRN CODE (?C_START)
  83.         PUBLIC    ?C_STARTUP
  84.  
  85.         CSEG    AT    0
  86. ?C_STARTUP:    LJMP    STARTUP1
  87.  
  88.         RSEG    ?C_C51STARTUP
  89.  
  90. STARTUP1:
  91.  
  92. IF IDATALEN <> 0
  93.         MOV    R0,#IDATALEN - 1
  94.         CLR    A
  95. IDATALOOP:    MOV    @R0,A
  96.         DJNZ    R0,IDATALOOP
  97. ENDIF
  98.  
  99. IF XDATALEN <> 0
  100.         MOV    DPTR,#XDATASTART
  101.         MOV    R7,#LOW (XDATALEN)
  102.   IF (LOW (XDATALEN)) <> 0
  103.         MOV    R6,#(HIGH XDATALEN) +1
  104.   ELSE
  105.         MOV    R6,#HIGH (XDATALEN)
  106.   ENDIF
  107.         CLR    A
  108. XDATALOOP:    MOVX    @DPTR,A
  109.         INC    DPTR
  110.         DJNZ    R7,XDATALOOP
  111.         DJNZ    R6,XDATALOOP
  112. ENDIF
  113.  
  114. IF PPAGEENABLE <> 0
  115.         MOV    P2,#PPAGE
  116. ENDIF
  117.  
  118. IF PDATALEN <> 0
  119.         MOV    R0,#PDATASTART
  120.         MOV    R7,#LOW (PDATALEN)
  121.         CLR    A
  122. PDATALOOP:    MOVX    @R0,A
  123.         INC    R0
  124.         DJNZ    R7,PDATALOOP
  125. ENDIF
  126.  
  127. IF IBPSTACK <> 0
  128. EXTRN DATA (?C_IBP)
  129.  
  130.         MOV    ?C_IBP,#LOW IBPSTACKTOP
  131. ENDIF
  132.  
  133. IF XBPSTACK <> 0
  134. EXTRN DATA (?C_XBP)
  135.  
  136.         MOV    ?C_XBP,#HIGH XBPSTACKTOP
  137.         MOV    ?C_XBP+1,#LOW XBPSTACKTOP
  138. ENDIF
  139.  
  140. IF PBPSTACK <> 0
  141. EXTRN DATA (?C_PBP)
  142.         MOV    ?C_PBP,#LOW PBPSTACKTOP
  143. ENDIF
  144.  
  145.         MOV    SP,#?STACK-1
  146.         LJMP    ?C_START
  147.  
  148.         END
  149.