Keil Logo

MON51: MON_BANK CONFIGURATION FILE IS MISSING


Information in this article applies to:

  • C51 Version 5.50a
  • C51 Version 6.00
  • C51 Version 6.01

QUESTION

I have C51 Version 5.50a/6.00/6.01 and I can't find the MON_BANK.A51 source file in the MON51 directory or anywhere in the install directory for that matter. Where can I get a copy of this file?

ANSWER

MON_BANK.A51 was excluded from this release but is provided here.


$NOCOND DEBUGPUBLICS
;------------------------------------------------------------------------------
;  This file is part of the Monitor-51 Version 3 package
;  Copyright KEIL ELEKTRONIK GmbH 1998
;  Version 3.0
;
;  Most of the settings in this file must conform with the settings
;  in the file L51_BANK.A51 which is used for code banking with the
;  BL51 Linker/Locater
;
;------------------------------------------------------------------------------
;************************ Configuration Section *******************************
?B_NBANKS       EQU     2        ; Define max. Number of Code Banks (not      *
;                                ; including XDATA or COMMON bank).           *
;                                ; The max. value for ?B_BANKS is 32          *
;                                ; possible values are: 1,2,3,...32           *
;                                                                             *
?B_MODE         EQU     0        ; 0 for Bank-Switching via 8051 Port         *
;                                ; 1 for Bank-Switching via XDATA Port        *
;                                                                             *
?B_BANKSTART    EQU     04000H   ; defines the start address of the code      *
;                                ; banking area                               *
;                                                                             *
?B_BANKEND      EQU     07FFFH   ; defines the end address of the code        *
;                                ; banking area                               *
;                                                                             *
?B_COMMON       EQU     0FFH     ; 0FFH if the COMMON area is not mapped into *
;                                ; a code bank.                               *
;                                ; otherwise ?B_COMMON must be set to the     *
;                                ; bank number which contains the COMMON area *
;                                                                             *
?B_XRAM         EQU     0FFH     ; 0FFH if the XDATA RAM area is not mapped   *
;                                ; into a code bank.                          *
;                                ; otherwise ?B_XRAM must be set to the bank  *
;                                ; number which contains the XDATA RAM area   *
;                                                                             *
?B_MON_DATA_BANK EQU     00H     ; Bank number where monitor data is stored   *
;                                                                             *
IF  ?B_MODE = 0;                                                              *
;-----------------------------------------------------------------------------*
; if ?BANK?MODE is 0 define the following values                              *
; For Bank-Switching via 8051 Port define Port Address / Bits                 *
?B_PORT         EQU     P1       ; default is P1                              *
?B_FIRSTBIT     EQU     3        ; default is Bit 3                           *
;-----------------------------------------------------------------------------*
ENDIF;                                                                        *
;
IF  ?B_MODE = 1;                                                              *
;-----------------------------------------------------------------------------*
; if ?BANK?MODE is 1 define the following values                              *
; For Bank-Switching via XDATA Port define XDATA Port Address / Bits          *
?B_XDATAPORT    EQU     0FFFFH   ; default is XDATA Port Address 0FFFFH       *
?B_FIRSTBIT     EQU     0        ; default is Bit 0                           *
;-----------------------------------------------------------------------------*
ENDIF;                                                                        *
;                                                                             *
;                                                                             *
;******************************************************************************

                NAME    ?BANK?SWITCHING

                PUBLIC  ?B_NBANKS       ; Number of Banks
                PUBLIC  ?B_MODE         ; Banking Mode (currently 0)
                PUBLIC  ?B_COMMON       ; Bank Number of the COMMON area
                PUBLIC  ?B_XRAM         ; Bank Number of the XDATA RAM area
                PUBLIC  ?B_SWITCHBANK   ; Change to the Bank specified in ACC
                PUBLIC  ?B_GETCURRBANK  ; Returns in ACC the current Code Bank
                PUBLIC  ?B_BANKSTART    ; Banking Area Start Address
                PUBLIC  ?B_BANKEND      ; Banking Area End Address
                PUBLIC  ?B_INITBANKING  ; e.g. Initialize the Bank Ident Number
                PUBLIC  ?B_MON_DATA_BANK; Bank number where monitor data is stored

; generate Mask and Bank Number Information
IF      ?B_NBANKS <= 2
  MASK          EQU     00000001B
ELSEIF  ?B_NBANKS <= 4
  MASK          EQU     00000011B
ELSEIF  ?B_NBANKS <= 8
  MASK          EQU     00000111B
ELSEIF  ?B_NBANKS <= 16
  MASK          EQU     00001111B
ELSE
  MASK          EQU     00011111B
ENDIF

?B_MASK         EQU     MASK SHL ?B_FIRSTBIT


CODE_AREA       SEGMENT CODE
                RSEG    CODE_AREA

  IF  ?B_FIRSTBIT = 0
  CONVTOPIN     MACRO
                ENDM
  ENDIF
  IF  ?B_FIRSTBIT = 1
  CONVTOPIN     MACRO
                RL      A
                ENDM
  ENDIF
  IF  ?B_FIRSTBIT = 2
  CONVTOPIN     MACRO
                RL      A
                RL      A
                ENDM
  ENDIF

  IF  ?B_FIRSTBIT = 3
  CONVTOPIN     MACRO
                SWAP    A
                RR      A
                ENDM
  ENDIF

  IF  ?B_FIRSTBIT = 4
  CONVTOPIN     MACRO
                SWAP    A
                ENDM
  ENDIF

  IF  ?B_FIRSTBIT = 5
  CONVTOPIN     MACRO
                SWAP    A
                RL      A
                ENDM
  ENDIF

  IF  ?B_FIRSTBIT = 6
  CONVTOPIN     MACRO
                RR      A
                RR      A
                ENDM
  ENDIF

  IF  ?B_FIRSTBIT = 7
  CONVTOPIN     MACRO
                RR      A
                ENDM
  ENDIF

  IF  ?B_FIRSTBIT = 0
  CONVTOBANK    MACRO
                ENDM
  ENDIF
  IF  ?B_FIRSTBIT = 1
  CONVTOBANK    MACRO
                RR      A
                ENDM
  ENDIF
  IF  ?B_FIRSTBIT = 2
  CONVTOBANK    MACRO
                RR      A
                RR      A
                ENDM
  ENDIF

  IF  ?B_FIRSTBIT = 3
  CONVTOBANK    MACRO
                SWAP    A
                RL      A
                ENDM
  ENDIF

  IF  ?B_FIRSTBIT = 4
  CONVTOBANK    MACRO
                SWAP    A
                ENDM
  ENDIF

  IF  ?B_FIRSTBIT = 5
  CONVTOBANK    MACRO
                SWAP    A
                RR      A
                ENDM
  ENDIF

  IF  ?B_FIRSTBIT = 6
  CONVTOBANK    MACRO
                RL      A
                RL      A
                ENDM
  ENDIF

  IF  ?B_FIRSTBIT = 7
  CONVTOBANK    MACRO
                RL      A
                ENDM
  ENDIF

;------------------------
;  Switchbank function
;------------------------

IF  ?B_MODE = 0;
?B_SWITCHBANK:
IF  ?B_COMMON <> 0FFH
                CJNE    A,#0FFH,SWB1
                MOV     A,#?B_COMMON
ENDIF
SWB1:           ANL     A,#MASK
                CONVTOPIN
                ANL     ?B_PORT,#LOW (NOT ?B_MASK)
                ORL     ?B_PORT,A
                NOP
                RET
ENDIF

IF  ?B_MODE = 1;
?B_SWITCHBANK:  PUSH    DPL
                PUSH    DPH
IF  ?B_COMMON <> 0FFH
                CJNE    A,#0FFH,SWB1
                MOV     A,#?B_COMMON
ENDIF
SWB1:           ANL     A,#MASK
                CONVTOPIN
                MOV     DPTR,#?B_XDATAPORT
                MOVX    @DPTR,A
                POP     DPH
                POP     DPL
                RET
ENDIF

;------------------------
; Getbank function
;------------------------

IF  ?B_MODE = 0;
?B_GETCURRBANK: MOV     A,?B_PORT
                CONVTOBANK
                ANL     A,#MASK
                RET
ENDIF

IF  ?B_MODE = 1;
?B_GETCURRBANK: PUSH    DPL
                PUSH    DPH
                MOV     DPTR,#?B_BANKEND
                CLR     A
                MOVC    A,@A+DPTR
                ANL     A,#MASK
                POP     DPH
                POP     DPL
                RET
ENDIF

;------------------------
; Init banking system
;------------------------

?B_INITBANKING:
; -----
; Add here code for user hardware initilization

; -----

IF  ?B_MODE = 1;  Write bank number into the last byte of each bank
                MOV     A,#?B_NBANKS
INIT_LOOP:      DEC     A
INIT1:          CJNE    A,#?B_XRAM,INIT2
                SJMP    INIT_LOOP
INIT2:          CJNE    A,#?B_COMMON,INIT3
                SJMP    INIT_LOOP
INIT3:          PUSH    ACC
                CALL    ?B_SWITCHBANK
                POP     ACC
                MOV     DPTR,#?B_BANKEND
                MOVX    @DPTR,A
                JNZ     INIT_LOOP
ENDIF
                RET

                END

Last Reviewed: Thursday, May 11, 2000


Did this article provide the answer you needed?
 
Yes
No
Not Sure
 
  Arm logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.

Change Settings

Privacy Policy Update

Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers
of your data.