📄 l51_bank.lst
字号:
0003 147 ?B_MASK EQU MASK
148
149 ?BANK?SELECT SEGMENT CODE
150 ?BANK?DATA SEGMENT DATA
---- 151 RSEG ?BANK?DATA
0000 152 ?B_CURRENTBANK: DS 1
153
154 BANK MACRO N
155 PUBLIC ?B_BANK&N
156 ?B_BANK&N:
157 PUSH ?B_CURRENTBANK
158 MOV A,#HIGH ?BANK?SWITCH
159 PUSH ACC
160 PUSH DPL
161 PUSH DPH
162 ENDM
163
164 SWITCH MACRO N
165 PUBLIC ?B_SWITCH&N
166 ?B_SWITCH&N:
167 MOV ?B_CURRENTBANK,#LOW ?B_SWITCH&N
168 SWITCH&N
169 RET
170 ENDM
171
172
173 ?BANK?SWITCH SEGMENT CODE PAGE
174
---- 175 RSEG ?BANK?SWITCH
0000 176 B_SWITCH_START EQU $
177 ; Generate ?B_SWITCHn functions
0000 178 CNT SET 0
179
180 REPT ?B_NBANKS
181 BANK %CNT
182 SWITCH %CNT
183 CNT SET CNT+1
184 ENDM
185+1 BANK %CNT
193+1 SWITCH %CNT
201+1 BANK %CNT
209+1 SWITCH %CNT
217+1 BANK %CNT
225+1 SWITCH %CNT
233+1 BANK %CNT
241+1 SWITCH %CNT
249
0044 250 B_SWITCH_SIZE EQU $-B_SWITCH_START
251
ENDIF
255
256
A51 MACRO ASSEMBLER L51_BANK 04/02/2007 08:52:20 PAGE 4
257
258 COMMON_XDATA MACRO ; Switch back to common XDATA bank
259 SWITCH1 ; Switch to XDATA Bank 1
260 ENDM
261
262
263 ENDIF ; close block IF ?B_MODE = 4 *******************************************
264
---- 265 RSEG ?BANK?SELECT
266
267 ;************************ SWITCHBANK FUNCTION *******************************
268 ; *
269 ; SWITCHBANK allows use of bank-switching for C programs *
270 ; *
271 ; prototype: extern switchbank (unsigned char bank_number); *
272 ; *
273 ;******************************************************************************
274 PUBLIC _SWITCHBANK
275
0000 EF 276 _SWITCHBANK: MOV A,R7
277
278 IF ?B_MODE = 4 ;**************************************************************
279
280 S_ENTRY MACRO N
281 DB LOW ?B_SWITCH&N
282 ENDM
283
0001 284 _SWITCHBANK_A:
0001 240A 285 ADD A,#switch_tab+3-$
0003 83 286 MOVC A,@A+PC
0004 900000 F 287 MOV DPTR,#?BANK?SWITCH
0007 73 288 JMP @A+DPTR
289
0008 290 switch_tab:
0000 291 CNT SET 0
292
293 REPT ?B_NBANKS
294 S_ENTRY %CNT
295 CNT SET CNT+1
296 ENDM
297+1 S_ENTRY %CNT
300+1 S_ENTRY %CNT
303+1 S_ENTRY %CNT
306+1 S_ENTRY %CNT
309 ENDIF ; close block IF ?B_MODE = 4 *******************************************
310
311
A51 MACRO ASSEMBLER L51_BANK 04/02/2007 08:52:20 PAGE 5
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
?BANK?DATA . . . . D SEG 0001H REL=UNIT
?BANK?SELECT . . . C SEG 000CH REL=UNIT
?BANK?SWITCH . . . C SEG 0044H REL=PAGE
?BANK?SWITCHING. . N NUMB -----
?B_BANK0 . . . . . C ADDR 0000H R SEG=?BANK?SWITCH
?B_BANK1 . . . . . C ADDR 0011H R SEG=?BANK?SWITCH
?B_BANK2 . . . . . C ADDR 0022H R SEG=?BANK?SWITCH
?B_BANK3 . . . . . C ADDR 0033H R SEG=?BANK?SWITCH
?B_CURRENTBANK . . D ADDR 0000H R SEG=?BANK?DATA
?B_FACTOR. . . . . N NUMB 0000H A
?B_FIRSTBIT. . . . N NUMB 0000H A
?B_MASK. . . . . . N NUMB 0003H A
?B_MODE. . . . . . N NUMB 0004H A
?B_NBANKS. . . . . N NUMB 0004H A
?B_RST_BANK. . . . N NUMB 00FFH A
?B_RTX . . . . . . N NUMB 0000H A
?B_SWITCH0 . . . . C ADDR 000AH R SEG=?BANK?SWITCH
?B_SWITCH1 . . . . C ADDR 001BH R SEG=?BANK?SWITCH
?B_SWITCH2 . . . . C ADDR 002CH R SEG=?BANK?SWITCH
?B_SWITCH3 . . . . C ADDR 003DH R SEG=?BANK?SWITCH
?B_VAR_BANKING . . N NUMB 0000H A
ACC. . . . . . . . D ADDR 00E0H A
B. . . . . . . . . D ADDR 00F0H A
B_SWITCH_SIZE. . . N NUMB 0044H A
B_SWITCH_START . . C ADDR 0000H R SEG=?BANK?SWITCH
CNT. . . . . . . . N NUMB 0004H A
DPH. . . . . . . . D ADDR 0083H A
DPL. . . . . . . . D ADDR 0082H A
EA . . . . . . . . B ADDR 00A8H.7 A
IE . . . . . . . . D ADDR 00A8H A
MASK . . . . . . . N NUMB 0003H A
PSBANK . . . . . . D ADDR 00B1H A
SWITCH_TAB . . . . C ADDR 0008H R SEG=?BANK?SELECT
_SWITCHBANK. . . . C ADDR 0000H R SEG=?BANK?SELECT
_SWITCHBANK_A. . . C ADDR 0001H R SEG=?BANK?SELECT
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -