📄 l51_bank.lst
字号:
353 ENDIF
354
ENDIF
361
ENDIF
367
368
369 ; Macro code to select the 'N'
370 SWITCH MACRO N
371 ORG N * 8
372 PUBLIC ?B_SWITCH&N
373 ?B_SWITCH&N:
374 IF N <> 0
375 ORL ?B_CURRENTBANK,#?B_MASK
376 ENDIF
377 IF N <> (?B_NBANKS-1)
378 ANL ?B_CURRENTBANK,#(BANK&N OR NOT ?B_MASK)
379 ENDIF
380 RET
381 ENDM
382
383 ENDIF
384
385
386 SELECT MACRO N
387 LOCAL XLABEL, YLABEL
388
389 PUBLIC ?B_BANK&N
390 ?B_BANK&N:
391 MOV A,?B_CURRENTBANK
392 ANL A,#?B_MASK
393 CONVBANKNO ; Convert Bank Number to Address
394 PUSH ACC
395 MOV A,#HIGH ?BANK?SWITCH
A51 MACRO ASSEMBLER L51_BANK 09/29/2009 23:44:48 PAGE 4
396 PUSH ACC
397 PUSH DPL
398 PUSH DPH
399 LJMP ?B_SWITCH&N
400 ENDM
401
402
403 ?BANK?SELECT SEGMENT CODE
404
---- 405 RSEG ?BANK?SELECT
0000 406 CNT SET 0
407
408 REPT ?B_NBANKS
409 SELECT %CNT
410 CNT SET CNT+1
411
412 ENDM
413+1 SELECT %CNT
430+1 SELECT %CNT
447
448
449
450
451 ?BANK?SWITCH SEGMENT CODE PAGE
452
---- 453 RSEG ?BANK?SWITCH
0000 454 CNT SET 0
455
456 REPT ?B_NBANKS
457 SWITCH %CNT
458
459 CNT SET CNT+1
460 ENDM
461+1 SWITCH %CNT
474+1 SWITCH %CNT
487
488
ENDIF
518
519
520 ENDIF ; close block IF ?B_MODE = 0 *******************************************
521
522
ENDIF ; close block IF ?B_MODE = 1 *******************************************
764
765
ENDIF ; close block IF ?B_MODE = 4 *******************************************
838
---- 839 RSEG ?BANK?SELECT
840
841 ;************************ SWITCHBANK FUNCTION *******************************
842 ; *
843 ; SWITCHBANK allows use of bank-switching for C programs *
844 ; *
845 ; prototype: extern switchbank (unsigned char bank_number); *
846 ; *
847 ;******************************************************************************
848 PUBLIC _SWITCHBANK, ?B_SWITCHBANK_A
849
0026 EF 850 _SWITCHBANK: MOV A,R7
851
852 IF ?B_MODE = 0 ;**************************************************************
853
0027 854 ?B_SWITCHBANK_A:
ENDIF
859
A51 MACRO ASSEMBLER L51_BANK 09/29/2009 23:44:48 PAGE 5
860 IF ?B_NBANKS <= 16 AND ?B_RTX = 0
0027 C4 861 SWAP A
0028 03 862 RR A
863 ENDIF
0029 900000 F 864 MOV DPTR,#?BANK?SWITCH
002C 73 865 JMP @A+DPTR
866
867 ENDIF ; close block IF ?B_MODE = 0 *******************************************
868
ENDIF ; close block IF ?B_MODE = 1 *******************************************
884
ENDIF ; close block IF ?B_MODE = 4 *******************************************
914
915
ENDIF ; close block IF ?B_VAR_BANKING ****************************************
1328
A51 MACRO ASSEMBLER L51_BANK 09/29/2009 23:44:48 PAGE 6
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
?BANK?SELECT . . . C SEG 002DH REL=UNIT
?BANK?SWITCH . . . C SEG 000CH REL=PAGE
?BANK?SWITCHING. . N NUMB -----
?B_BANK0 . . . . . C ADDR 0000H R SEG=?BANK?SELECT
?B_BANK1 . . . . . C ADDR 0013H R SEG=?BANK?SELECT
?B_CURRENTBANK . . D ADDR 00B0H A
?B_FACTOR. . . . . N NUMB 0020H A
?B_FIRSTBIT. . . . N NUMB 0005H A
?B_MASK. . . . . . N NUMB 0020H A
?B_MODE. . . . . . N NUMB 0000H A
?B_NBANKS. . . . . N NUMB 0002H A
?B_PORT. . . . . . D ADDR 00B0H A
?B_RST_BANK. . . . N NUMB 00FFH A
?B_RTX . . . . . . N NUMB 0000H A
?B_SWITCH0 . . . . C ADDR 0000H R SEG=?BANK?SWITCH
?B_SWITCH1 . . . . C ADDR 0008H R SEG=?BANK?SWITCH
?B_SWITCHBANK_A. . C ADDR 0027H R SEG=?BANK?SELECT
?B_VAR_BANKING . . N NUMB 0000H A
ACC. . . . . . . . D ADDR 00E0H A
B. . . . . . . . . D ADDR 00F0H A
BANK0. . . . . . . N NUMB 0000H A
BANK1. . . . . . . N NUMB 0020H A
B_SWITCH_SIZE. . . ---- -----
CNT. . . . . . . . N NUMB 0002H A
DPH. . . . . . . . D ADDR 0083H A
DPL. . . . . . . . D ADDR 0082H A
EA . . . . . . . . B ADDR 00A8H.7 A
IE . . . . . . . . D ADDR 00A8H A
LONG_MACRO . . . . ---- -----
MASK . . . . . . . N NUMB 0001H A
N. . . . . . . . . ---- -----
P3 . . . . . . . . D ADDR 00B0H A
SAVEA. . . . . . . ---- -----
_SWITCHBANK. . . . C ADDR 0026H 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 + -